void _cinnamon_app_handle_startup_sequence (CinnamonApp *app, SnStartupSequence *sequence) { gboolean starting = !sn_startup_sequence_get_completed (sequence); /* The Cinnamon design calls for on application launch, the app title * appears at top, and no X window is focused. So when we get * a startup-notification for this app, transition it to STARTING * if it's currently stopped, set it as our application focus, * but focus the no_focus window. */ if (starting && cinnamon_app_get_state (app) == CINNAMON_APP_STATE_STOPPED) { MetaScreen *screen = cinnamon_global_get_screen (cinnamon_global_get ()); MetaDisplay *display = meta_screen_get_display (screen); cinnamon_app_state_transition (app, CINNAMON_APP_STATE_STARTING); meta_display_focus_the_no_focus_window (display, screen, sn_startup_sequence_get_timestamp (sequence)); app->started_on_workspace = sn_startup_sequence_get_workspace (sequence); } if (!starting) { if (app->running_state && app->running_state->windows) cinnamon_app_state_transition (app, CINNAMON_APP_STATE_RUNNING); else /* application have > 1 .desktop file */ cinnamon_app_state_transition (app, CINNAMON_APP_STATE_STOPPED); } }
static void on_startup_sequence_changed (MetaScreen *screen, SnStartupSequence *sequence, ShellWindowTracker *self) { ShellApp *app; app = shell_startup_sequence_get_app ((ShellStartupSequence*)sequence); if (app) { gboolean starting = !sn_startup_sequence_get_completed (sequence); /* The Shell design calls for on application launch, the app title * appears at top, and no X window is focused. So when we get * a startup-notification for this app, transition it to STARTING * if it's currently stopped, set it as our application focus, * but focus the no_focus window. */ if (starting && shell_app_get_state (app) == SHELL_APP_STATE_STOPPED) { MetaScreen *screen = shell_global_get_screen (shell_global_get ()); MetaDisplay *display = meta_screen_get_display (screen); long tv_sec, tv_usec; sn_startup_sequence_get_initiated_time (sequence, &tv_sec, &tv_usec); _shell_app_set_starting (app, starting); set_focus_app (self, app); meta_display_focus_the_no_focus_window (display, screen, tv_sec); } } g_signal_emit (G_OBJECT (self), signals[STARTUP_SEQUENCE_CHANGED], 0, sequence); }
void LauncherApplication::setSnStartupSequence(SnStartupSequence* sequence) { if (sequence != NULL) { if (!sn_startup_sequence_get_completed(sequence)) { /* 'launching' property becomes true for a few seconds */ m_launching_timer.start(); } else { m_launching_timer.stop(); } sn_startup_sequence_ref(sequence); } m_snStartupSequence.reset(sequence); nameChanged(name()); iconChanged(icon()); executableChanged(executable()); launchingChanged(launching()); }
gboolean shell_startup_sequence_get_completed (ShellStartupSequence *sequence) { return sn_startup_sequence_get_completed ((SnStartupSequence*)sequence); }
gboolean cinnamon_startup_sequence_get_completed (CinnamonStartupSequence *sequence) { return sn_startup_sequence_get_completed ((SnStartupSequence*)sequence); }