static gboolean daemon_check_timeout_func(gpointer data /* unused */)
{
+ if (!App) /* Quitting? */
+ return FALSE; /* stop running */
+
state_start_stop();
return TRUE; /* continue running */
}
{
gboolean state_startup_is_on;
+ if (!App) /* Quitting? */
+ return FALSE; /* stop running */
+
if (startup_query(&state_startup_is_on))
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(AutostartCheckButton),state_startup_is_on);
return TRUE; /* continue running */
void on_AutostartCheckButton_toggled(GtkToggleButton *togglebutton,gpointer user_data)
{
+static gint inside=0;
+
g_return_if_fail(GTK_IS_TOGGLE_BUTTON(togglebutton));
+ /* Avoid reentrancy to prevent segfault during failed registration.
+ * FIXME: Who knows why? Some forbidden GTK recursion occurs.
+ */
+ g_assert(inside>=0);
+ if (inside)
+ return;
+ inside++;
+
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(AutostartCheckButton)))
startup_on();
else
startup_off();
external_startup_check_timeout_func(NULL); /* data; unused */
+
+ g_assert(inside==1);
+ inside--;
}
void on_ButtonStart_clicked(GtkButton *button,gpointer user_data)
* as 'App' widget will quit our gtk_main() automatically.
*/
gtk_widget_destroy(GTK_WIDGET(App));
+ App=NULL;
}
static void ui_gnome_network_notify_hostip(guint32 hostip_guint32)
{
+ if (!App) /* Quitting? */
+ return;
+
if (!hostip_guint32) {
pid_t daemon_pid;
{
GtkWidget *dialog;
+ if (!App) /* Quitting? */
+ return;
+
/**/ if (log_level & G_LOG_LEVEL_ERROR)
dialog=gnome_app_error(App,message);
else if (log_level & (G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_WARNING))