diff options
Diffstat (limited to 'mate-session/gsm-manager.c')
-rw-r--r-- | mate-session/gsm-manager.c | 649 |
1 files changed, 366 insertions, 283 deletions
diff --git a/mate-session/gsm-manager.c b/mate-session/gsm-manager.c index 73bc64f..bb7ddf9 100644 --- a/mate-session/gsm-manager.c +++ b/mate-session/gsm-manager.c @@ -3,6 +3,7 @@ * Copyright (C) 2007 Novell, Inc. * Copyright (C) 2008 Red Hat, Inc. * Copyright (C) 2008 William Jon McCann <[email protected]> + * Copyright (C) 2012-2021 MATE Developers * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -81,7 +82,6 @@ #define GDM_FLEXISERVER_COMMAND "gdmflexiserver" #define GDM_FLEXISERVER_ARGS "--startnew Standard" - #define LOCKDOWN_SCHEMA "org.mate.lockdown" #define KEY_LOCK_DISABLE "disable-lock-screen" #define KEY_LOG_OUT_DISABLE "disable-log-out" @@ -143,9 +143,8 @@ typedef struct { GSettings *settings_lockdown; GSettings *settings_screensaver; - const char *renderer; + //char *renderer; - DBusGProxy *bus_proxy; GDBusConnection *connection; GsmExportedManager *skeleton; gboolean dbus_disconnected : 1; @@ -186,6 +185,74 @@ static void _handle_client_end_session_response (GsmManager *manager, static gboolean auto_save_is_enabled (GsmManager *manager); static void maybe_save_session (GsmManager *manager); +gboolean gsm_manager_set_phase (GsmManager *manager, GsmManagerPhase phase); +//void _gsm_manager_set_renderer (GsmManager *manager, const char *renderer); +static gboolean gsm_manager_get_clients (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + GsmManager *manager); +static gboolean +gsm_manager_get_inhibitors (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + GsmManager *manager); +static gboolean +gsm_manager_inhibit (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + const char *app_id, + guint toplevel_xid, + const char *reason, + guint flags, + GsmManager *manager); +static gboolean +gsm_manager_is_inhibited (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + guint flags, + GsmManager *manager); +static gboolean +gsm_manager_initialization_error (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + const char *message, + gboolean fatal, + GsmManager *manager); +static gboolean +gsm_manager_register_client (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + const char *app_id, + const char *startup_id, + GsmManager *manager); +void request_logout (GsmManager *manager, GsmManagerLogoutMode mode); +void request_reboot (GsmManager *manager); +gboolean gsm_manager_logout (GsmManager *manager, + guint logout_mode, + GError **error); +gboolean +gsm_manager_request_reboot (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + GsmManager *manager); +gboolean +gsm_manager_request_shutdown (GsmManager *manager, + GError **error); +gboolean +gsm_manager_setenv (GsmManager *manager, + const char *variable, + const char *value, + GError **error); +static gboolean +gsm_manager_shutdown (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + GsmManager *manager); +static gboolean +gsm_manager_uninhibit (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + guint cookie, + GsmManager *manager); +static gboolean +gsm_manager_unregister_client (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + const char *client_id, + GsmManager *manager); +static void +user_logout (GsmManager *manager, + GsmManagerLogoutMode mode); static gpointer manager_object = NULL; @@ -232,29 +299,29 @@ debug_clients (GsmManager *manager) manager); } -static gboolean -_debug_inhibitor (const char *id G_GNUC_UNUSED, - GsmInhibitor *inhibitor, - GsmManager *manager G_GNUC_UNUSED) -{ - g_debug ("GsmManager: Inhibitor app:%s client:%s bus-name:%s reason:%s", - gsm_inhibitor_peek_app_id (inhibitor), - gsm_inhibitor_peek_client_id (inhibitor), - gsm_inhibitor_peek_bus_name (inhibitor), - gsm_inhibitor_peek_reason (inhibitor)); - return FALSE; -} - -static void -debug_inhibitors (GsmManager *manager) -{ - GsmManagerPrivate *priv; +//static gboolean +//_debug_inhibitor (const char *id G_GNUC_UNUSED, +// GsmInhibitor *inhibitor, +// GsmManager *manager G_GNUC_UNUSED) +//{ +// g_debug ("GsmManager: Inhibitor app:%s client:%s bus-name:%s reason:%s", +// gsm_inhibitor_peek_app_id (inhibitor), +// gsm_inhibitor_peek_client_id (inhibitor), +// gsm_inhibitor_peek_bus_name (inhibitor), +// gsm_inhibitor_peek_reason (inhibitor)); +// return FALSE; +//} - priv = gsm_manager_get_instance_private (manager); - gsm_store_foreach (priv->inhibitors, - (GsmStoreFunc)_debug_inhibitor, - manager); -} +//static void +//debug_inhibitors (GsmManager *manager) +//{ +// GsmManagerPrivate *priv; +// +// priv = gsm_manager_get_instance_private (manager); +// gsm_store_foreach (priv->inhibitors, +// (GsmStoreFunc)_debug_inhibitor, +// manager); +//} static gboolean _find_by_cookie (const char *id G_GNUC_UNUSED, @@ -752,7 +819,6 @@ typedef struct { guint flags; } ClientEndSessionData; - static gboolean _client_end_session (GsmClient *client, ClientEndSessionData *data) @@ -1209,21 +1275,34 @@ sleep_lock_is_enabled (GsmManager *manager) static void manager_perhaps_lock (GsmManager *manager) { - GError *error; - gboolean ret; + gchar **screen_locker_command; - /* only lock if mate-screensaver is set to lock */ - if (!sleep_lock_is_enabled (manager)) { - return; - } + if ((screen_locker_command = gsm_get_screen_locker_command ()) != NULL) { + GError *error = NULL; - /* do this sync to ensure it's on the screen when we start suspending */ - error = NULL; - ret = g_spawn_command_line_sync ("mate-screensaver-command --lock", NULL, NULL, NULL, &error); - if (!ret) { - g_warning ("Couldn't lock screen: %s", error->message); - g_error_free (error); + /* only lock if mate-screensaver is set to lock */ + if (!g_strcmp0 (screen_locker_command[0], "mate-screensaver-command") && + !sleep_lock_is_enabled (manager)) { + goto clear_screen_locker_command; + } + + /* do this sync to ensure it's on the screen when we start suspending */ + g_spawn_sync (NULL, screen_locker_command, NULL, + G_SPAWN_DEFAULT | G_SPAWN_SEARCH_PATH, + NULL, NULL, NULL, NULL, NULL, &error); + + if (error) { + g_warning ("Couldn't lock screen: %s", error->message); + g_error_free (error); + } + + } else { + g_warning ("Couldn't find any screen locker"); } + +clear_screen_locker_command: + + g_strfreev (screen_locker_command); } static void @@ -1667,8 +1746,9 @@ _gsm_manager_set_renderer (GsmManager *manager, const char *renderer) { GsmManagerPrivate *priv; + priv = gsm_manager_get_instance_private (manager); - priv->renderer = renderer; + gsm_exported_manager_set_renderer (priv->skeleton, renderer); } static gboolean @@ -1848,7 +1928,6 @@ _disconnect_client (GsmManager *manager, goto out; } - if (app == NULL) { g_debug ("GsmManager: unable to find application for client - not restarting"); goto out; @@ -1954,29 +2033,29 @@ remove_clients_for_connection (GsmManager *manager, } } -static gboolean -inhibitor_has_bus_name (gpointer key G_GNUC_UNUSED, - GsmInhibitor *inhibitor, - RemoveClientData *data) -{ - gboolean matches; - const char *bus_name_b; - - bus_name_b = gsm_inhibitor_peek_bus_name (inhibitor); - - matches = FALSE; - if (! IS_STRING_EMPTY (data->service_name) && ! IS_STRING_EMPTY (bus_name_b)) { - matches = (strcmp (data->service_name, bus_name_b) == 0); - if (matches) { - g_debug ("GsmManager: removing inhibitor from %s for reason '%s' on connection %s", - gsm_inhibitor_peek_app_id (inhibitor), - gsm_inhibitor_peek_reason (inhibitor), - gsm_inhibitor_peek_bus_name (inhibitor)); - } - } - - return matches; -} +//static gboolean +//inhibitor_has_bus_name (gpointer key G_GNUC_UNUSED, +// GsmInhibitor *inhibitor, +// RemoveClientData *data) +//{ +// gboolean matches; +// const char *bus_name_b; +// +// bus_name_b = gsm_inhibitor_peek_bus_name (inhibitor); +// +// matches = FALSE; +// if (! IS_STRING_EMPTY (data->service_name) && ! IS_STRING_EMPTY (bus_name_b)) { +// matches = (strcmp (data->service_name, bus_name_b) == 0); +// if (matches) { +// g_debug ("GsmManager: removing inhibitor from %s for reason '%s' on connection %s", +// gsm_inhibitor_peek_app_id (inhibitor), +// gsm_inhibitor_peek_reason (inhibitor), +// gsm_inhibitor_peek_bus_name (inhibitor)); +// } +// } +// +// return matches; +//} static gboolean gsm_manager_can_shutdown (GsmExportedManager *skeleton, @@ -2018,26 +2097,66 @@ gsm_manager_can_shutdown (GsmExportedManager *skeleton, return TRUE; } -static void -remove_inhibitors_for_connection (GsmManager *manager, - const char *service_name) +static gboolean +_app_has_autostart_condition (const char *id G_GNUC_UNUSED, + GsmApp *app, + const char *condition) { - guint UNUSED_VARIABLE n_removed; - RemoveClientData data; + gboolean has; + gboolean disabled; + + has = gsm_app_has_autostart_condition (app, condition); + disabled = gsm_app_peek_is_disabled (app); + + return has && !disabled; +} + +static gboolean +gsm_manager_is_autostart_condition_handled (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + const char *condition, + GsmManager *manager) +{ + GsmApp *app; GsmManagerPrivate *priv; + gboolean handled; - data.service_name = service_name; - data.manager = manager; priv = gsm_manager_get_instance_private (manager); + app = (GsmApp *) gsm_store_find (priv->apps,( + GsmStoreFunc) _app_has_autostart_condition, + (char *)condition); + + if (app != NULL) { + handled = TRUE; + } else { + handled = FALSE; + } - debug_inhibitors (manager); + gsm_exported_manager_complete_is_autostart_condition_handled (skeleton, invocation, handled); - n_removed = gsm_store_foreach_remove (priv->inhibitors, - (GsmStoreFunc)inhibitor_has_bus_name, - &data); + return TRUE; } //static void +//remove_inhibitors_for_connection (GsmManager *manager, +// const char *service_name) +//{ +// guint UNUSED_VARIABLE n_removed; +// RemoveClientData data; +// GsmManagerPrivate *priv; +// +// data.service_name = service_name; +// data.manager = manager; +// priv = gsm_manager_get_instance_private (manager); +// +// debug_inhibitors (manager); +// +// n_removed = gsm_store_foreach_remove (priv->inhibitors, +// (GsmStoreFunc)inhibitor_has_bus_name, +// &data); +//} + +//static void //on_gsm_system_active_changed (GsmSystem *system, // GParamSpec *pspec, // GsmManager *self) @@ -2053,10 +2172,24 @@ remove_inhibitors_for_connection (GsmManager *manager, // gsm_exported_manager_set_session_is_active (priv->skeleton, is_active); //} +static gboolean +gsm_manager_is_session_running (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + GsmManager *manager) +{ + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); + + gsm_exported_manager_complete_is_session_running (skeleton, invocation, + priv->phase == GSM_MANAGER_PHASE_RUNNING); + return TRUE; +} + static void -on_session_connection_closed (GDBusConnection *connection, - gboolean remote_peer_vanished, - GError *error, +on_session_connection_closed (GDBusConnection *connection G_GNUC_UNUSED, + gboolean remote_peer_vanished G_GNUC_UNUSED, + GError *error G_GNUC_UNUSED, gpointer user_data) { GsmManager *manager; @@ -2070,10 +2203,75 @@ on_session_connection_closed (GDBusConnection *connection, remove_clients_for_connection (manager, NULL); } +gboolean +gsm_manager_logout (GsmManager *manager, + guint logout_mode, + GError **error) +{ + GsmManagerPrivate *priv; + g_debug ("GsmManager: Logout called"); + + g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); + + priv = gsm_manager_get_instance_private (manager); + if (priv->phase != GSM_MANAGER_PHASE_RUNNING) { + g_set_error (error, + GSM_MANAGER_ERROR, + GSM_MANAGER_ERROR_NOT_IN_RUNNING, + "Shutdown interface is only available during the Running phase"); + return FALSE; + } + + if (_log_out_is_locked_down (manager)) { + g_set_error (error, + GSM_MANAGER_ERROR, + GSM_MANAGER_ERROR_LOCKED_DOWN, + "Logout has been locked down"); + return FALSE; + } + + switch (logout_mode) { + case GSM_MANAGER_LOGOUT_MODE_NORMAL: + case GSM_MANAGER_LOGOUT_MODE_NO_CONFIRMATION: + case GSM_MANAGER_LOGOUT_MODE_FORCE: + user_logout (manager, logout_mode); + break; + + default: + g_debug ("Unknown logout mode option"); + + g_set_error (error, + GSM_MANAGER_ERROR, + GSM_MANAGER_ERROR_INVALID_OPTION, + "Unknown logout mode flag"); + return FALSE; + } + + return TRUE; +} + +static gboolean +gsm_manager_logout_dbus (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + guint logout_mode, + GsmManager *manager) +{ + GError *error = NULL; + + g_debug ("GsmManager: Logout called"); + + if (!gsm_manager_logout (manager, logout_mode, &error)) { + g_dbus_method_invocation_take_error (invocation, error); + } else { + gsm_exported_manager_complete_logout (skeleton, invocation); + } + + return TRUE; +} + static gboolean register_manager (GsmManager *manager) { - GDBusConnection *connection; GsmManagerPrivate *priv; GError *error = NULL; @@ -2132,7 +2330,7 @@ register_manager (GsmManager *manager) G_CALLBACK (gsm_manager_unregister_client), manager); priv->dbus_disconnected = FALSE; - g_signal_connect (connection, "closed", + g_signal_connect (priv->connection, "closed", G_CALLBACK (on_session_connection_closed), manager); //g_signal_connect (priv->system, "notify::active", @@ -2526,7 +2724,6 @@ gsm_manager_set_client_store (GsmManager *manager, g_object_unref (priv->clients); } - g_debug ("GsmManager: setting client store %p", store); priv->clients = store; @@ -2585,9 +2782,9 @@ gsm_manager_get_property (GObject *object, case PROP_CLIENT_STORE: g_value_set_object (value, priv->clients); break; - case PROP_RENDERER: - g_value_set_string (value, priv->renderer); - break; +// case PROP_RENDERER: +// g_value_set_string (value, priv->renderer); +// break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -2750,13 +2947,13 @@ gsm_manager_class_init (GsmManagerClass *klass) GSM_TYPE_STORE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - g_object_class_install_property (object_class, - PROP_RENDERER, - g_param_spec_string ("renderer", - NULL, - NULL, - NULL, - G_PARAM_READABLE)); +// g_object_class_install_property (object_class, +// PROP_RENDERER, +// g_param_spec_string ("renderer", +// NULL, +// NULL, +// NULL, +// G_PARAM_READABLE)); } static void @@ -2947,11 +3144,12 @@ gsm_manager_setenv (GsmManager *manager, return TRUE; } -gboolean -gsm_manager_initialization_error (GsmManager *manager, - const char *message, - gboolean fatal, - GError **error) +static gboolean +gsm_manager_initialization_error (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + const char *message, + gboolean fatal, + GsmManager *manager) { GsmManagerPrivate *priv; g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); @@ -2959,15 +3157,17 @@ gsm_manager_initialization_error (GsmManager *manager, priv = gsm_manager_get_instance_private (manager); if (priv->phase > GSM_MANAGER_PHASE_INITIALIZATION) { - g_set_error (error, - GSM_MANAGER_ERROR, - GSM_MANAGER_ERROR_NOT_IN_INITIALIZATION, - "InitializationError interface is only available during the Initialization phase"); - return FALSE; + g_dbus_method_invocation_return_error (invocation, + GSM_MANAGER_ERROR, + GSM_MANAGER_ERROR_NOT_IN_INITIALIZATION, + "InitializationError interface is only available during the Initialization phase"); + return TRUE; } gsm_util_init_error (fatal, "%s", message); + gsm_exported_manager_complete_initialization_error (skeleton, invocation); + return TRUE; } @@ -3075,7 +3275,7 @@ request_reboot_privileges_completed_systemd (GsmSystemd *systemd, } #endif -static void +void request_reboot (GsmManager *manager) { GsmConsolekit *consolekit; @@ -3335,8 +3535,7 @@ request_hibernate (GsmManager *manager) gtk_widget_show (priv->inhibit_dialog); } - -static void +void request_logout (GsmManager *manager, GsmManagerLogoutMode mode) { @@ -3569,8 +3768,8 @@ gsm_manager_request_shutdown (GsmManager *manager, return TRUE; } -static gboolean -gsm_manager_reboot (GsmExportedManager *skeleton, +gboolean +gsm_manager_request_reboot (GsmExportedManager *skeleton, GDBusMethodInvocation *invocation, GsmManager *manager) { @@ -3655,72 +3854,6 @@ gsm_manager_shutdown (GsmExportedManager *skeleton, return TRUE; } -gboolean -gsm_manager_logout (GsmManager *manager, - guint logout_mode, - GError **error) -{ - GsmManagerPrivate *priv; - g_debug ("GsmManager: Logout called"); - - g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); - - priv = gsm_manager_get_instance_private (manager); - if (priv->phase != GSM_MANAGER_PHASE_RUNNING) { - g_set_error (error, - GSM_MANAGER_ERROR, - GSM_MANAGER_ERROR_NOT_IN_RUNNING, - "Shutdown interface is only available during the Running phase"); - return FALSE; - } - - if (_log_out_is_locked_down (manager)) { - g_set_error (error, - GSM_MANAGER_ERROR, - GSM_MANAGER_ERROR_LOCKED_DOWN, - "Logout has been locked down"); - return FALSE; - } - - switch (logout_mode) { - case GSM_MANAGER_LOGOUT_MODE_NORMAL: - case GSM_MANAGER_LOGOUT_MODE_NO_CONFIRMATION: - case GSM_MANAGER_LOGOUT_MODE_FORCE: - user_logout (manager, logout_mode); - break; - - default: - g_debug ("Unknown logout mode option"); - - g_set_error (error, - GSM_MANAGER_ERROR, - GSM_MANAGER_ERROR_INVALID_OPTION, - "Unknown logout mode flag"); - return FALSE; - } - - return TRUE; -} - -static gboolean -gsm_manager_logout_dbus (GsmExportedManager *skeleton, - GDBusMethodInvocation *invocation, - guint logout_mode, - GsmManager *manager) -{ - GError *error = NULL; - - g_debug ("GsmManager: Logout called"); - - if (!gsm_manager_logout (manager, logout_mode, &error)) { - g_dbus_method_invocation_take_error (invocation, error); - } else { - gsm_exported_manager_complete_logout (skeleton, invocation); - } - - return TRUE; -} - static gboolean gsm_manager_register_client (GsmExportedManager *skeleton, GDBusMethodInvocation *invocation, @@ -3729,7 +3862,7 @@ gsm_manager_register_client (GsmExportedManager *skeleton, GsmManager *manager) { char *new_startup_id; - char *sender; + const char *sender; GsmClient *client; GsmApp *app; GsmManagerPrivate *priv; @@ -3857,13 +3990,14 @@ gsm_manager_unregister_client (GsmExportedManager *skeleton, return TRUE; } -gboolean -gsm_manager_inhibit (GsmManager *manager, +static gboolean +gsm_manager_inhibit (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, const char *app_id, guint toplevel_xid, const char *reason, guint flags, - DBusGMethodInvocation *context) + GsmManager *manager) { GsmInhibitor *inhibitor; guint cookie; @@ -3885,9 +4019,8 @@ gsm_manager_inhibit (GsmManager *manager, GSM_MANAGER_ERROR_GENERAL, "Forced logout cannot be inhibited"); g_debug ("GsmManager: Unable to inhibit: %s", new_error->message); - dbus_g_method_return_error (context, new_error); - g_error_free (new_error); - return FALSE; + g_dbus_method_invocation_take_error (invocation, new_error); + return TRUE; } if (IS_STRING_EMPTY (app_id)) { @@ -3897,9 +4030,8 @@ gsm_manager_inhibit (GsmManager *manager, GSM_MANAGER_ERROR_GENERAL, "Application ID not specified"); g_debug ("GsmManager: Unable to inhibit: %s", new_error->message); - dbus_g_method_return_error (context, new_error); - g_error_free (new_error); - return FALSE; + g_dbus_method_invocation_take_error (invocation, new_error); + return TRUE; } if (IS_STRING_EMPTY (reason)) { @@ -3909,8 +4041,7 @@ gsm_manager_inhibit (GsmManager *manager, GSM_MANAGER_ERROR_GENERAL, "Reason not specified"); g_debug ("GsmManager: Unable to inhibit: %s", new_error->message); - dbus_g_method_return_error (context, new_error); - g_error_free (new_error); + g_dbus_method_invocation_take_error (invocation, new_error); return FALSE; } @@ -3921,8 +4052,7 @@ gsm_manager_inhibit (GsmManager *manager, GSM_MANAGER_ERROR_GENERAL, "Invalid inhibit flags"); g_debug ("GsmManager: Unable to inhibit: %s", new_error->message); - dbus_g_method_return_error (context, new_error); - g_error_free (new_error); + g_dbus_method_invocation_take_error (invocation, new_error); return FALSE; } @@ -3931,20 +4061,21 @@ gsm_manager_inhibit (GsmManager *manager, toplevel_xid, flags, reason, - dbus_g_method_get_sender (context), + g_dbus_method_invocation_get_sender (invocation), cookie); gsm_store_add (priv->inhibitors, gsm_inhibitor_peek_id (inhibitor), G_OBJECT (inhibitor)); g_object_unref (inhibitor); - dbus_g_method_return (context, cookie); + gsm_exported_manager_complete_inhibit (skeleton, invocation, cookie); return TRUE; } -gboolean -gsm_manager_uninhibit (GsmManager *manager, +static gboolean +gsm_manager_uninhibit (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, guint cookie, - DBusGMethodInvocation *context) + GsmManager *manager) { GsmInhibitor *inhibitor; GsmManagerPrivate *priv; @@ -3963,10 +4094,9 @@ gsm_manager_uninhibit (GsmManager *manager, new_error = g_error_new (GSM_MANAGER_ERROR, GSM_MANAGER_ERROR_GENERAL, "Unable to uninhibit: Invalid cookie"); - dbus_g_method_return_error (context, new_error); g_debug ("Unable to uninhibit: %s", new_error->message); - g_error_free (new_error); - return FALSE; + g_dbus_method_invocation_take_error (invocation, new_error); + return TRUE; } g_debug ("GsmManager: removing inhibitor %s %u reason '%s' %u connection %s", @@ -3978,18 +4108,19 @@ gsm_manager_uninhibit (GsmManager *manager, gsm_store_remove (priv->inhibitors, gsm_inhibitor_peek_id (inhibitor)); - dbus_g_method_return (context); + gsm_exported_manager_complete_uninhibit (skeleton, invocation); return TRUE; } -gboolean -gsm_manager_is_inhibited (GsmManager *manager, - guint flags, - gboolean *is_inhibited, - GError *error) +static gboolean +gsm_manager_is_inhibited (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + guint flags, + GsmManager *manager) { GsmInhibitor *inhibitor; + gboolean is_inhibited; GsmManagerPrivate *priv; g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); @@ -3997,19 +4128,20 @@ gsm_manager_is_inhibited (GsmManager *manager, priv = gsm_manager_get_instance_private (manager); if (priv->inhibitors == NULL || gsm_store_size (priv->inhibitors) == 0) { - *is_inhibited = FALSE; - return TRUE; - } - - inhibitor = (GsmInhibitor *) gsm_store_find (priv->inhibitors, - (GsmStoreFunc)inhibitor_has_flag, - GUINT_TO_POINTER (flags)); - if (inhibitor == NULL) { - *is_inhibited = FALSE; + is_inhibited = FALSE; } else { - *is_inhibited = TRUE; + inhibitor = (GsmInhibitor *) gsm_store_find (priv->inhibitors, + (GsmStoreFunc)inhibitor_has_flag, + GUINT_TO_POINTER (flags)); + if (inhibitor == NULL) { + is_inhibited = FALSE; + } else { + is_inhibited = TRUE; + } } + gsm_exported_manager_complete_is_inhibited (skeleton, invocation, is_inhibited); + return TRUE; } @@ -4023,83 +4155,48 @@ listify_store_ids (char *id, return FALSE; } -gboolean -gsm_manager_get_clients (GsmManager *manager, - GPtrArray **clients, - GError **error) -{ - GsmManagerPrivate *priv; - g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); - - if (clients == NULL) { - return FALSE; - } - - *clients = g_ptr_array_new (); - priv = gsm_manager_get_instance_private (manager); - gsm_store_foreach (priv->clients, (GsmStoreFunc)listify_store_ids, clients); - - return TRUE; -} - -gboolean -gsm_manager_get_inhibitors (GsmManager *manager, - GPtrArray **inhibitors, - GError **error) +static gboolean +gsm_manager_get_clients (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + GsmManager *manager) { + GPtrArray *clients; GsmManagerPrivate *priv; g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); - if (inhibitors == NULL) { - return FALSE; - } - - *inhibitors = g_ptr_array_new (); priv = gsm_manager_get_instance_private (manager); - gsm_store_foreach (priv->inhibitors, + clients = g_ptr_array_new_with_free_func (g_free); + gsm_store_foreach (priv->clients, (GsmStoreFunc) listify_store_ids, - inhibitors); + &clients); + g_ptr_array_add (clients, NULL); + + gsm_exported_manager_complete_get_clients (skeleton, invocation, + (const gchar * const *) clients->pdata); + g_ptr_array_unref (clients); return TRUE; } - static gboolean -_app_has_autostart_condition (const char *id, - GsmApp *app, - const char *condition) -{ - gboolean has; - gboolean disabled; - - has = gsm_app_has_autostart_condition (app, condition); - disabled = gsm_app_peek_is_disabled (app); - - return has && !disabled; -} - -gboolean -gsm_manager_is_autostart_condition_handled (GsmManager *manager, - const char *condition, - gboolean *handled, - GError **error) +gsm_manager_get_inhibitors (GsmExportedManager *skeleton, + GDBusMethodInvocation *invocation, + GsmManager *manager) { - GsmApp *app; GsmManagerPrivate *priv; - - g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); + GPtrArray *inhibitors; priv = gsm_manager_get_instance_private (manager); - app = (GsmApp *) gsm_store_find (priv->apps,( - GsmStoreFunc) _app_has_autostart_condition, - (char *)condition); + inhibitors = g_ptr_array_new_with_free_func (g_free); + gsm_store_foreach (priv->inhibitors, + (GsmStoreFunc) listify_store_ids, + &inhibitors); + g_ptr_array_add (inhibitors, NULL); - if (app != NULL) { - *handled = TRUE; - } else { - *handled = FALSE; - } + gsm_exported_manager_complete_get_inhibitors (skeleton, invocation, + (const gchar * const *) inhibitors->pdata); + g_ptr_array_unref (inhibitors); return TRUE; } @@ -4212,17 +4309,3 @@ gsm_manager_add_autostart_apps_from_dir (GsmManager *manager, return TRUE; } - -gboolean -gsm_manager_is_session_running (GsmManager *manager, - gboolean *running, - GError **error) -{ - GsmManagerPrivate *priv; - - g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); - - priv = gsm_manager_get_instance_private (manager); - *running = (priv->phase == GSM_MANAGER_PHASE_RUNNING); - return TRUE; -} |