@@ -1598,6 +1598,17 @@ _csm_manager_set_active_session (CsmManager *manager,
15981598 session_name );
15991599}
16001600
1601+ void
1602+ _csm_manager_export_login_session_id (CsmManager * manager )
1603+ {
1604+ g_autofree gchar * session_id = NULL ;
1605+
1606+ session_id = csm_system_get_login_session_id (manager -> priv -> system );
1607+
1608+ csm_exported_manager_set_session_id (manager -> priv -> skeleton ,
1609+ session_id );
1610+ }
1611+
16011612static gboolean
16021613_app_has_app_id (const char * id ,
16031614 CsmApp * app ,
@@ -1695,6 +1706,29 @@ find_app_for_startup_id (CsmManager *manager,
16951706 return found_app ;
16961707}
16971708
1709+ static gboolean
1710+ restart_cinnamon_launcher (CsmManager * manager )
1711+ {
1712+ CsmApp * app ;
1713+
1714+ app = find_app_for_app_id (manager , "cinnamon.desktop" );
1715+
1716+ if (app ) {
1717+ GError * error = NULL ;
1718+
1719+ g_debug ("CsmManager: Restarting cinnamon-launcher" );
1720+
1721+ if (!csm_app_restart (app , & error )) {
1722+ g_warning ("CsmManager: Unable to restart cinnamon-launcher: %s" , error -> message );
1723+ g_error_free (error );
1724+ }
1725+ } else {
1726+ g_warning ("CsmManager: Unable to find the cinnamon-launcher" );
1727+ }
1728+
1729+ return G_SOURCE_REMOVE ;
1730+ }
1731+
16981732static gboolean
16991733csm_manager_setenv (CsmExportedManager * skeleton ,
17001734 GDBusMethodInvocation * invocation ,
@@ -2348,6 +2382,30 @@ csm_manager_request_reboot (CsmExportedManager *skeleton,
23482382 return TRUE;
23492383}
23502384
2385+ static gboolean
2386+ csm_manager_restart_cinnamon_launcher (CsmExportedManager * skeleton ,
2387+ GDBusMethodInvocation * invocation ,
2388+ CsmManager * manager )
2389+ {
2390+ g_debug ("CsmManager: RestartCinnamonLauncher called" );
2391+
2392+ if (manager -> priv -> phase != CSM_MANAGER_PHASE_RUNNING ) {
2393+ g_dbus_method_invocation_return_error (invocation ,
2394+ CSM_MANAGER_ERROR ,
2395+ CSM_MANAGER_ERROR_NOT_IN_RUNNING ,
2396+ "RestartCinnamonLauncher interface is only available during the Running phase" );
2397+
2398+ return TRUE;
2399+ }
2400+
2401+ g_idle_add ((GSourceFunc )restart_cinnamon_launcher , manager );
2402+
2403+ csm_exported_manager_complete_restart_cinnamon_launcher (skeleton ,
2404+ invocation );
2405+
2406+ return TRUE;
2407+ }
2408+
23512409static void
23522410_disconnect_client (CsmManager * manager ,
23532411 CsmClient * client )
@@ -2759,7 +2817,8 @@ static SkeletonSignal skeleton_signals[] = {
27592817 { "handle-logout" , csm_manager_logout_dbus },
27602818 { "handle-is-session-running" , csm_manager_is_session_running },
27612819 { "handle-request-shutdown" , csm_manager_request_shutdown },
2762- { "handle-request-reboot" , csm_manager_request_reboot }
2820+ { "handle-request-reboot" , csm_manager_request_reboot },
2821+ { "handle-restart-cinnamon-launcher" , csm_manager_restart_cinnamon_launcher }
27632822};
27642823
27652824static SkeletonSignal dialog_skeleton_signals [] = {
0 commit comments