/* The session is going to quit */ static void _xfdashboard_application_on_session_quit(XfdashboardApplication *self, gpointer inUserData) { g_return_if_fail(XFDASHBOARD_IS_APPLICATION(self)); g_return_if_fail(XFCE_IS_SM_CLIENT(inUserData)); /* Force application to quit */ g_debug("Received 'quit' from session management client - initiating shutdown"); _xfdashboard_application_quit(self, TRUE); }
static void panel_sm_client_quit (XfceSMClient *sm_client) { panel_return_if_fail (XFCE_IS_SM_CLIENT (sm_client)); panel_return_if_fail (!panel_dbus_service_get_restart ()); panel_debug (PANEL_DEBUG_MAIN, "terminate panel for session manager"); gtk_main_quit (); }
/* Quit application depending on daemon mode and force parameter */ static void _xfdashboard_application_quit(XfdashboardApplication *self, gboolean inForceQuit) { XfdashboardApplicationPrivate *priv; gboolean shouldQuit; GSList *stages, *entry; g_return_if_fail(XFDASHBOARD_IS_APPLICATION(self)); priv=self->priv; shouldQuit=FALSE; /* Check if we should really quit this instance */ if(inForceQuit==TRUE || priv->isDaemon==FALSE) shouldQuit=TRUE; /* Do nothing if application is already quitting. This can happen if * application is running in daemon mode (primary instance) and another * instance was called with "quit" or "restart" parameter which would * cause this function to be called twice. */ if(priv->isQuitting) return; /* If application is not in daemon mode or if forced is set to TRUE * destroy all stage windows ... */ if(shouldQuit==TRUE) { /* Set flag that application is going to quit */ priv->isQuitting=TRUE; /* If application is told to quit, set the restart style to something * where it won't restart itself. */ if(priv->sessionManagementClient && XFCE_IS_SM_CLIENT(priv->sessionManagementClient)) { xfce_sm_client_set_restart_style(priv->sessionManagementClient, XFCE_SM_CLIENT_RESTART_NORMAL); } /* Destroy stages */ stages=clutter_stage_manager_list_stages(clutter_stage_manager_get_default()); for(entry=stages; entry!=NULL; entry=g_slist_next(entry)) clutter_actor_destroy(CLUTTER_ACTOR(entry->data)); g_slist_free(stages); /* Emit "quit" signal */ g_signal_emit(self, XfdashboardApplicationSignals[SIGNAL_QUIT], 0); /* Really quit application here and now */ if(priv->inited) clutter_main_quit(); } /* ... otherwise emit "suspend" signal */ else { /* Only send signal if not suspended already */ if(!priv->isSuspended) { /* Send signal */ g_signal_emit(self, XfdashboardApplicationSignals[SIGNAL_SUSPEND], 0); /* Set flag for suspension */ priv->isSuspended=TRUE; g_object_notify_by_pspec(G_OBJECT(self), XfdashboardApplicationProperties[PROP_SUSPENDED]); } } }