summaryrefslogtreecommitdiff
path: root/mate-session/gsm-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'mate-session/gsm-manager.c')
-rw-r--r--mate-session/gsm-manager.c649
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;
-}