static gboolean sn_wait_timeout(gpointer data) { SnStartupSequence *seq = data; sn_waits = g_slist_remove(sn_waits, seq); screen_set_root_cursor(); return FALSE; /* don't repeat */ }
void sn_shutdown(gboolean reconfig) { GSList *it; if (reconfig) return; obt_main_loop_x_remove(ob_main_loop, sn_handler); for (it = sn_waits; it; it = g_slist_next(it)) sn_startup_sequence_unref((SnStartupSequence*)it->data); g_slist_free(sn_waits); sn_waits = NULL; screen_set_root_cursor(); sn_launcher_context_unref(sn_launcher); sn_monitor_context_unref(sn_context); sn_display_unref(sn_display); }
static void sn_event_func(SnMonitorEvent *ev, gpointer data) { SnStartupSequence *seq; gboolean change = FALSE; if (!(seq = sn_monitor_event_get_startup_sequence(ev))) return; switch (sn_monitor_event_get_type(ev)) { case SN_MONITOR_EVENT_INITIATED: sn_startup_sequence_ref(seq); sn_waits = g_slist_prepend(sn_waits, seq); /* 20 second timeout for apps to start if the launcher doesn't have a timeout */ obt_main_loop_timeout_add(ob_main_loop, 20 * G_USEC_PER_SEC, sn_wait_timeout, seq, g_direct_equal, (GDestroyNotify)sn_startup_sequence_unref); change = TRUE; break; case SN_MONITOR_EVENT_CHANGED: /* XXX feedback changed? */ change = TRUE; break; case SN_MONITOR_EVENT_COMPLETED: case SN_MONITOR_EVENT_CANCELED: if ((seq = sequence_find(sn_startup_sequence_get_id(seq)))) { sn_waits = g_slist_remove(sn_waits, seq); obt_main_loop_timeout_remove_data(ob_main_loop, sn_wait_timeout, seq, FALSE); change = TRUE; } break; }; if (change) screen_set_root_cursor(); }
static void sn_event_func(SnMonitorEvent *ev, gpointer data) { SnStartupSequence *seq; gboolean change = FALSE; if (!(seq = sn_monitor_event_get_startup_sequence(ev))) return; switch (sn_monitor_event_get_type(ev)) { case SN_MONITOR_EVENT_INITIATED: sn_startup_sequence_ref(seq); sn_waits = g_slist_prepend(sn_waits, seq); /* 20 second timeout for apps to start if the launcher doesn't have a timeout */ g_timeout_add_full(G_PRIORITY_DEFAULT, 20 * 1000, sn_wait_timeout, seq, (GDestroyNotify)sn_startup_sequence_unref); change = TRUE; break; case SN_MONITOR_EVENT_CHANGED: /* XXX feedback changed? */ change = TRUE; break; case SN_MONITOR_EVENT_COMPLETED: case SN_MONITOR_EVENT_CANCELED: if ((seq = sequence_find(sn_startup_sequence_get_id(seq)))) { sn_waits = g_slist_remove(sn_waits, seq); g_source_remove_by_user_data(seq); change = TRUE; } break; }; if (change) screen_set_root_cursor(); }