diff options
Diffstat (limited to 'mate-session')
-rw-r--r-- | mate-session/gsm-manager.c | 805 | ||||
-rw-r--r-- | mate-session/gsm-manager.h | 27 |
2 files changed, 516 insertions, 316 deletions
diff --git a/mate-session/gsm-manager.c b/mate-session/gsm-manager.c index 96205b1..5cd7771 100644 --- a/mate-session/gsm-manager.c +++ b/mate-session/gsm-manager.c @@ -113,8 +113,7 @@ typedef enum GSM_MANAGER_LOGOUT_SHUTDOWN_MDM } GsmManagerLogoutType; -struct GsmManagerPrivate -{ +typedef struct { gboolean failsafe; GsmStore *clients; GsmStore *inhibitors; @@ -147,7 +146,7 @@ struct GsmManagerPrivate DBusGProxy *bus_proxy; DBusGConnection *connection; -}; +} GsmManagerPrivate; enum { PROP_0, @@ -187,7 +186,7 @@ static void maybe_save_session (GsmManager *manager); static gpointer manager_object = NULL; -G_DEFINE_TYPE (GsmManager, gsm_manager, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE (GsmManager, gsm_manager, G_TYPE_OBJECT) GQuark gsm_manager_error_quark (void) @@ -239,7 +238,9 @@ _debug_client (const char *id, static void debug_clients (GsmManager *manager) { - gsm_store_foreach (manager->priv->clients, + GsmManagerPrivate *priv; + priv = gsm_manager_get_instance_private (manager); + gsm_store_foreach (priv->clients, (GsmStoreFunc)_debug_client, manager); } @@ -260,7 +261,10 @@ _debug_inhibitor (const char *id, static void debug_inhibitors (GsmManager *manager) { - gsm_store_foreach (manager->priv->inhibitors, + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); + gsm_store_foreach (priv->inhibitors, (GsmStoreFunc)_debug_inhibitor, manager); } @@ -298,12 +302,15 @@ app_condition_changed (GsmApp *app, GsmManager *manager) { GsmClient *client; + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); g_debug ("GsmManager: app:%s condition changed condition:%d", gsm_app_peek_id (app), condition); - client = (GsmClient *)gsm_store_find (manager->priv->clients, + client = (GsmClient *)gsm_store_find (priv->clients, (GsmStoreFunc)_find_by_startup_id, (char *)gsm_app_peek_startup_id (app)); @@ -331,8 +338,8 @@ app_condition_changed (GsmApp *app, /* Kill client in case condition if false and make sure it won't * be automatically restarted by adding the client to * condition_clients */ - manager->priv->condition_clients = - g_slist_prepend (manager->priv->condition_clients, client); + priv->condition_clients = + g_slist_prepend (priv->condition_clients, client); g_debug ("GsmManager: stopping client %s for app", gsm_client_peek_id (client)); @@ -445,14 +452,16 @@ static void gsm_manager_quit (GsmManager *manager) { GsmConsolekit *consolekit; + GsmManagerPrivate *priv; #ifdef HAVE_SYSTEMD GsmSystemd *systemd; #endif + priv = gsm_manager_get_instance_private (manager); /* See the comment in request_reboot() for some more details about how * this works. */ - switch (manager->priv->logout_type) { + switch (priv->logout_type) { case GSM_MANAGER_LOGOUT_LOGOUT: gtk_main_quit (); break; @@ -523,26 +532,29 @@ gsm_manager_quit (GsmManager *manager) static void end_phase (GsmManager *manager) { + GsmManagerPrivate *priv; gboolean start_next_phase = TRUE; + priv = gsm_manager_get_instance_private (manager); + g_debug ("GsmManager: ending phase %s\n", - phase_num_to_name (manager->priv->phase)); + phase_num_to_name (priv->phase)); - g_slist_free (manager->priv->pending_apps); - manager->priv->pending_apps = NULL; + g_slist_free (priv->pending_apps); + priv->pending_apps = NULL; - g_slist_free (manager->priv->query_clients); - manager->priv->query_clients = NULL; + g_slist_free (priv->query_clients); + priv->query_clients = NULL; - g_slist_free (manager->priv->next_query_clients); - manager->priv->next_query_clients = NULL; + g_slist_free (priv->next_query_clients); + priv->next_query_clients = NULL; - if (manager->priv->phase_timeout_id > 0) { - g_source_remove (manager->priv->phase_timeout_id); - manager->priv->phase_timeout_id = 0; + if (priv->phase_timeout_id > 0) { + g_source_remove (priv->phase_timeout_id); + priv->phase_timeout_id = 0; } - switch (manager->priv->phase) { + switch (priv->phase) { case GSM_MANAGER_PHASE_STARTUP: case GSM_MANAGER_PHASE_INITIALIZATION: case GSM_MANAGER_PHASE_WINDOW_MANAGER: @@ -572,22 +584,25 @@ end_phase (GsmManager *manager) } if (start_next_phase) { - manager->priv->phase++; + priv->phase++; start_phase (manager); - } + } } static void app_registered (GsmApp *app, GsmManager *manager) { - manager->priv->pending_apps = g_slist_remove (manager->priv->pending_apps, app); + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); + priv->pending_apps = g_slist_remove (priv->pending_apps, app); g_signal_handlers_disconnect_by_func (app, app_registered, manager); - if (manager->priv->pending_apps == NULL) { - if (manager->priv->phase_timeout_id > 0) { - g_source_remove (manager->priv->phase_timeout_id); - manager->priv->phase_timeout_id = 0; + if (priv->pending_apps == NULL) { + if (priv->phase_timeout_id > 0) { + g_source_remove (priv->phase_timeout_id); + priv->phase_timeout_id = 0; } end_phase (manager); @@ -607,17 +622,19 @@ static gboolean on_phase_timeout (GsmManager *manager) { GSList *a; + GsmManagerPrivate *priv; - manager->priv->phase_timeout_id = 0; + priv = gsm_manager_get_instance_private (manager); + priv->phase_timeout_id = 0; - switch (manager->priv->phase) { + switch (priv->phase) { case GSM_MANAGER_PHASE_STARTUP: case GSM_MANAGER_PHASE_INITIALIZATION: case GSM_MANAGER_PHASE_WINDOW_MANAGER: case GSM_MANAGER_PHASE_PANEL: case GSM_MANAGER_PHASE_DESKTOP: case GSM_MANAGER_PHASE_APPLICATION: - for (a = manager->priv->pending_apps; a; a = a->next) { + for (a = priv->pending_apps; a; a = a->next) { g_warning ("Application '%s' failed to register before timeout", gsm_app_peek_app_id (a->data)); g_signal_handlers_disconnect_by_func (a->data, app_registered, manager); @@ -630,7 +647,7 @@ on_phase_timeout (GsmManager *manager) case GSM_MANAGER_PHASE_END_SESSION: break; case GSM_MANAGER_PHASE_EXIT: - gsm_store_foreach (manager->priv->clients, + gsm_store_foreach (priv->clients, (GsmStoreFunc)_client_failed_to_stop, NULL); break; @@ -676,8 +693,11 @@ _start_app (const char *id, GError *error; gboolean res; int delay; + GsmManagerPrivate *priv; - if (gsm_app_peek_phase (app) != manager->priv->phase) { + priv = gsm_manager_get_instance_private (manager); + + if (gsm_app_peek_phase (app) != priv->phase) { goto out; } @@ -716,7 +736,7 @@ _start_app (const char *id, goto out; } - if (manager->priv->phase < GSM_MANAGER_PHASE_APPLICATION) { + if (priv->phase < GSM_MANAGER_PHASE_APPLICATION) { g_signal_connect (app, "exited", G_CALLBACK (app_registered), @@ -725,7 +745,7 @@ _start_app (const char *id, "registered", G_CALLBACK (app_registered), manager); - manager->priv->pending_apps = g_slist_prepend (manager->priv->pending_apps, app); + priv->pending_apps = g_slist_prepend (priv->pending_apps, app); } out: return FALSE; @@ -734,15 +754,18 @@ _start_app (const char *id, static void do_phase_startup (GsmManager *manager) { - gsm_store_foreach (manager->priv->apps, + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); + gsm_store_foreach (priv->apps, (GsmStoreFunc)_start_app, manager); - if (manager->priv->pending_apps != NULL) { - if (manager->priv->phase < GSM_MANAGER_PHASE_APPLICATION) { - manager->priv->phase_timeout_id = g_timeout_add_seconds (GSM_MANAGER_PHASE_TIMEOUT, - (GSourceFunc)on_phase_timeout, - manager); + if (priv->pending_apps != NULL) { + if (priv->phase < GSM_MANAGER_PHASE_APPLICATION) { + priv->phase_timeout_id = g_timeout_add_seconds (GSM_MANAGER_PHASE_TIMEOUT, + (GSourceFunc)on_phase_timeout, + manager); } } else { end_phase (manager); @@ -761,6 +784,9 @@ _client_end_session (GsmClient *client, { gboolean ret; GError *error; + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (data->manager); error = NULL; ret = gsm_client_end_session (client, data->flags, &error); @@ -770,8 +796,8 @@ _client_end_session (GsmClient *client, /* FIXME: what should we do if we can't communicate with client? */ } else { g_debug ("GsmManager: adding client to end-session clients: %s", gsm_client_peek_id (client)); - data->manager->priv->query_clients = g_slist_prepend (data->manager->priv->query_clients, - client); + priv->query_clients = g_slist_prepend (priv->query_clients, + client); } return FALSE; @@ -789,28 +815,30 @@ static void do_phase_end_session (GsmManager *manager) { ClientEndSessionData data; + GsmManagerPrivate *priv; data.manager = manager; data.flags = 0; + priv = gsm_manager_get_instance_private (manager); - if (manager->priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE) { + if (priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE) { data.flags |= GSM_CLIENT_END_SESSION_FLAG_FORCEFUL; } if (auto_save_is_enabled (manager)) { data.flags |= GSM_CLIENT_END_SESSION_FLAG_SAVE; } - if (manager->priv->phase_timeout_id > 0) { - g_source_remove (manager->priv->phase_timeout_id); - manager->priv->phase_timeout_id = 0; + if (priv->phase_timeout_id > 0) { + g_source_remove (priv->phase_timeout_id); + priv->phase_timeout_id = 0; } - if (gsm_store_size (manager->priv->clients) > 0) { - manager->priv->phase_timeout_id = g_timeout_add_seconds (GSM_MANAGER_PHASE_TIMEOUT, - (GSourceFunc)on_phase_timeout, - manager); + if (gsm_store_size (priv->clients) > 0) { + priv->phase_timeout_id = g_timeout_add_seconds (GSM_MANAGER_PHASE_TIMEOUT, + (GSourceFunc)on_phase_timeout, + manager); - gsm_store_foreach (manager->priv->clients, + gsm_store_foreach (priv->clients, (GsmStoreFunc)_client_end_session_helper, &data); } else { @@ -822,11 +850,13 @@ static void do_phase_end_session_part_2 (GsmManager *manager) { ClientEndSessionData data; + GsmManagerPrivate *priv; data.manager = manager; data.flags = 0; + priv = gsm_manager_get_instance_private (manager); - if (manager->priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE) { + if (priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE) { data.flags |= GSM_CLIENT_END_SESSION_FLAG_FORCEFUL; } if (auto_save_is_enabled (manager)) { @@ -837,13 +867,13 @@ do_phase_end_session_part_2 (GsmManager *manager) /* keep the timeout that was started at the beginning of the * GSM_MANAGER_PHASE_END_SESSION phase */ - if (g_slist_length (manager->priv->next_query_clients) > 0) { - g_slist_foreach (manager->priv->next_query_clients, + if (g_slist_length (priv->next_query_clients) > 0) { + g_slist_foreach (priv->next_query_clients, (GFunc)_client_end_session, &data); - g_slist_free (manager->priv->next_query_clients); - manager->priv->next_query_clients = NULL; + g_slist_free (priv->next_query_clients); + priv->next_query_clients = NULL; } else { end_phase (manager); } @@ -873,12 +903,15 @@ _client_stop (const char *id, static void do_phase_exit (GsmManager *manager) { - if (gsm_store_size (manager->priv->clients) > 0) { - manager->priv->phase_timeout_id = g_timeout_add_seconds (GSM_MANAGER_EXIT_PHASE_TIMEOUT, - (GSourceFunc)on_phase_timeout, - manager); + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); + if (gsm_store_size (priv->clients) > 0) { + priv->phase_timeout_id = g_timeout_add_seconds (GSM_MANAGER_EXIT_PHASE_TIMEOUT, + (GSourceFunc)on_phase_timeout, + manager); - gsm_store_foreach (manager->priv->clients, + gsm_store_foreach (priv->clients, (GsmStoreFunc)_client_stop, NULL); } else { @@ -893,6 +926,9 @@ _client_query_end_session (const char *id, { gboolean ret; GError *error; + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (data->manager); error = NULL; ret = gsm_client_query_end_session (client, data->flags, &error); @@ -902,8 +938,7 @@ _client_query_end_session (const char *id, /* FIXME: what should we do if we can't communicate with client? */ } else { g_debug ("GsmManager: adding client to query clients: %s", gsm_client_peek_id (client)); - data->manager->priv->query_clients = g_slist_prepend (data->manager->priv->query_clients, - client); + priv->query_clients = g_slist_prepend (priv->query_clients, client); } return FALSE; @@ -928,12 +963,15 @@ static gboolean gsm_manager_is_logout_inhibited (GsmManager *manager) { GsmInhibitor *inhibitor; + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); - if (manager->priv->inhibitors == NULL) { + if (priv->inhibitors == NULL) { return FALSE; } - inhibitor = (GsmInhibitor *)gsm_store_find (manager->priv->inhibitors, + inhibitor = (GsmInhibitor *)gsm_store_find (priv->inhibitors, (GsmStoreFunc)inhibitor_has_flag, GUINT_TO_POINTER (GSM_INHIBITOR_FLAG_LOGOUT)); if (inhibitor == NULL) { @@ -946,12 +984,15 @@ static gboolean gsm_manager_is_idle_inhibited (GsmManager *manager) { GsmInhibitor *inhibitor; + GsmManagerPrivate *priv; - if (manager->priv->inhibitors == NULL) { + priv = gsm_manager_get_instance_private (manager); + + if (priv->inhibitors == NULL) { return FALSE; } - inhibitor = (GsmInhibitor *)gsm_store_find (manager->priv->inhibitors, + inhibitor = (GsmInhibitor *)gsm_store_find (priv->inhibitors, (GsmStoreFunc)inhibitor_has_flag, GUINT_TO_POINTER (GSM_INHIBITOR_FLAG_IDLE)); if (inhibitor == NULL) { @@ -996,8 +1037,11 @@ inhibitor_is_jit (gpointer key, static void cancel_end_session (GsmManager *manager) { + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); /* just ignore if received outside of shutdown */ - if (manager->priv->phase < GSM_MANAGER_PHASE_QUERY_END_SESSION) { + if (priv->phase < GSM_MANAGER_PHASE_QUERY_END_SESSION) { return; } @@ -1007,23 +1051,23 @@ cancel_end_session (GsmManager *manager) /* remove the dialog before we remove the inhibitors, else the dialog * will activate itself automatically when the last inhibitor will be * removed */ - if (manager->priv->inhibit_dialog) - gtk_widget_destroy (GTK_WIDGET (manager->priv->inhibit_dialog)); - manager->priv->inhibit_dialog = NULL; + if (priv->inhibit_dialog) + gtk_widget_destroy (GTK_WIDGET (priv->inhibit_dialog)); + priv->inhibit_dialog = NULL; /* clear all JIT inhibitors */ - gsm_store_foreach_remove (manager->priv->inhibitors, + gsm_store_foreach_remove (priv->inhibitors, (GsmStoreFunc)inhibitor_is_jit, (gpointer)manager); - gsm_store_foreach (manager->priv->clients, + gsm_store_foreach (priv->clients, (GsmStoreFunc)_client_cancel_end_session, NULL); gsm_manager_set_phase (manager, GSM_MANAGER_PHASE_RUNNING); - manager->priv->logout_mode = GSM_MANAGER_LOGOUT_MODE_NORMAL; + priv->logout_mode = GSM_MANAGER_LOGOUT_MODE_NORMAL; - manager->priv->logout_type = GSM_MANAGER_LOGOUT_NONE; + priv->logout_type = GSM_MANAGER_LOGOUT_NONE; mdm_set_logout_action (MDM_LOGOUT_ACTION_NONE); start_phase (manager); @@ -1085,8 +1129,8 @@ manager_switch_user (GsmManager *manager) else if (process_is_running("gdm") || process_is_running("gdm3") || process_is_running("gdm-binary")) { /* GDM */ command = g_strdup_printf ("%s %s", - GDM_FLEXISERVER_COMMAND, - GDM_FLEXISERVER_ARGS); + GDM_FLEXISERVER_COMMAND, + GDM_FLEXISERVER_ARGS); error = NULL; res = g_spawn_command_line_sync (command, NULL, NULL, NULL, &error); @@ -1132,8 +1176,11 @@ manager_switch_user (GsmManager *manager) static gboolean sleep_lock_is_enabled (GsmManager *manager) { - if (manager->priv->settings_screensaver != NULL) - return g_settings_get_boolean (manager->priv->settings_screensaver, + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); + if (priv->settings_screensaver != NULL) + return g_settings_get_boolean (priv->settings_screensaver, KEY_SLEEP_LOCK); else return FALSE; @@ -1227,6 +1274,9 @@ static void do_inhibit_dialog_action (GsmManager *manager, int action) { + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); switch (action) { case GSM_LOGOUT_ACTION_SWITCH_USER: manager_switch_user (manager); @@ -1240,7 +1290,7 @@ do_inhibit_dialog_action (GsmManager *manager, case GSM_LOGOUT_ACTION_SHUTDOWN: case GSM_LOGOUT_ACTION_REBOOT: case GSM_LOGOUT_ACTION_LOGOUT: - manager->priv->logout_mode = GSM_MANAGER_LOGOUT_MODE_FORCE; + priv->logout_mode = GSM_MANAGER_LOGOUT_MODE_FORCE; end_phase (manager); break; default: @@ -1255,15 +1305,17 @@ inhibit_dialog_response (GsmInhibitDialog *dialog, GsmManager *manager) { int action; + GsmManagerPrivate *priv; g_debug ("GsmManager: Inhibit dialog response: %d", response_id); + priv = gsm_manager_get_instance_private (manager); /* must destroy dialog before cancelling since we'll remove JIT inhibitors and we don't want to trigger action. */ g_object_get (dialog, "action", &action, NULL); gtk_widget_destroy (GTK_WIDGET (dialog)); - manager->priv->inhibit_dialog = NULL; + priv->inhibit_dialog = NULL; /* In case of dialog cancel, switch user, hibernate and * suspend, we just perform the respective action and return, @@ -1292,14 +1344,17 @@ static void query_end_session_complete (GsmManager *manager) { GsmLogoutAction action; + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); g_debug ("GsmManager: query end session complete"); /* Remove the timeout since this can be called from outside the timer * and we don't want to have it called twice */ - if (manager->priv->query_timeout_id > 0) { - g_source_remove (manager->priv->query_timeout_id); - manager->priv->query_timeout_id = 0; + if (priv->query_timeout_id > 0) { + g_source_remove (priv->query_timeout_id); + priv->query_timeout_id = 0; } if (! gsm_manager_is_logout_inhibited (manager)) { @@ -1307,13 +1362,13 @@ query_end_session_complete (GsmManager *manager) return; } - if (manager->priv->inhibit_dialog != NULL) { + if (priv->inhibit_dialog != NULL) { g_debug ("GsmManager: inhibit dialog already up"); - gtk_window_present (GTK_WINDOW (manager->priv->inhibit_dialog)); + gtk_window_present (GTK_WINDOW (priv->inhibit_dialog)); return; } - switch (manager->priv->logout_type) { + switch (priv->logout_type) { case GSM_MANAGER_LOGOUT_LOGOUT: action = GSM_LOGOUT_ACTION_LOGOUT; break; @@ -1329,7 +1384,7 @@ query_end_session_complete (GsmManager *manager) break; default: g_warning ("Unexpected logout type %d when creating inhibit dialog", - manager->priv->logout_type); + priv->logout_type); action = GSM_LOGOUT_ACTION_LOGOUT; break; } @@ -1338,15 +1393,15 @@ query_end_session_complete (GsmManager *manager) * actually handled the same way as GSM_LOGOUT_ACTION_LOGOUT in the * inhibit dialog; the action, if the button is clicked, will be to * simply go to the next phase. */ - manager->priv->inhibit_dialog = gsm_inhibit_dialog_new (manager->priv->inhibitors, - manager->priv->clients, - action); + priv->inhibit_dialog = gsm_inhibit_dialog_new (priv->inhibitors, + priv->clients, + action); - g_signal_connect (manager->priv->inhibit_dialog, + g_signal_connect (priv->inhibit_dialog, "response", G_CALLBACK (inhibit_dialog_response), manager); - gtk_widget_show (manager->priv->inhibit_dialog); + gtk_widget_show (priv->inhibit_dialog); } @@ -1364,10 +1419,13 @@ static guint32 _generate_unique_cookie (GsmManager *manager) { guint32 cookie; + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); do { cookie = generate_cookie (); - } while (gsm_store_find (manager->priv->inhibitors, (GsmStoreFunc)_find_by_cookie, &cookie) != NULL); + } while (gsm_store_find (priv->inhibitors, (GsmStoreFunc)_find_by_cookie, &cookie) != NULL); return cookie; } @@ -1376,12 +1434,15 @@ static gboolean _on_query_end_session_timeout (GsmManager *manager) { GSList *l; + GsmManagerPrivate *priv; - manager->priv->query_timeout_id = 0; + priv = gsm_manager_get_instance_private (manager); + + priv->query_timeout_id = 0; g_debug ("GsmManager: query end session timed out"); - for (l = manager->priv->query_clients; l != NULL; l = l->next) { + for (l = priv->query_clients; l != NULL; l = l->next) { guint cookie; GsmInhibitor *inhibitor; const char *bus_name; @@ -1392,7 +1453,7 @@ _on_query_end_session_timeout (GsmManager *manager) /* Don't add "not responding" inhibitors if logout is forced */ - if (manager->priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE) { + if (priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE) { continue; } @@ -1418,12 +1479,12 @@ _on_query_end_session_timeout (GsmManager *manager) bus_name, cookie); g_free (app_id); - gsm_store_add (manager->priv->inhibitors, gsm_inhibitor_peek_id (inhibitor), G_OBJECT (inhibitor)); + gsm_store_add (priv->inhibitors, gsm_inhibitor_peek_id (inhibitor), G_OBJECT (inhibitor)); g_object_unref (inhibitor); } - g_slist_free (manager->priv->query_clients); - manager->priv->query_clients = NULL; + g_slist_free (priv->query_clients); + priv->query_clients = NULL; query_end_session_complete (manager); @@ -1434,11 +1495,13 @@ static void do_phase_query_end_session (GsmManager *manager) { ClientEndSessionData data; + GsmManagerPrivate *priv; data.manager = manager; data.flags = 0; + priv = gsm_manager_get_instance_private (manager); - if (manager->priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE) { + if (priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE) { data.flags |= GSM_CLIENT_END_SESSION_FLAG_FORCEFUL; } /* We only query if an app is ready to log out, so we don't use @@ -1447,53 +1510,59 @@ do_phase_query_end_session (GsmManager *manager) debug_clients (manager); g_debug ("GsmManager: sending query-end-session to clients (logout mode: %s)", - manager->priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_NORMAL? "normal" : - manager->priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE? "forceful": + priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_NORMAL? "normal" : + priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE? "forceful": "no confirmation"); - gsm_store_foreach (manager->priv->clients, + gsm_store_foreach (priv->clients, (GsmStoreFunc)_client_query_end_session, &data); /* This phase doesn't time out unless logout is forced. Typically, this * separate timer is only used to show UI. */ - manager->priv->query_timeout_id = g_timeout_add_seconds (1, (GSourceFunc)_on_query_end_session_timeout, manager); + priv->query_timeout_id = g_timeout_add_seconds (1, (GSourceFunc)_on_query_end_session_timeout, manager); } static void update_idle (GsmManager *manager) { + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); if (gsm_manager_is_idle_inhibited (manager)) { - gsm_presence_set_idle_enabled (manager->priv->presence, FALSE); + gsm_presence_set_idle_enabled (priv->presence, FALSE); } else { - gsm_presence_set_idle_enabled (manager->priv->presence, TRUE); + gsm_presence_set_idle_enabled (priv->presence, TRUE); } } static void start_phase (GsmManager *manager) { + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); g_debug ("GsmManager: starting phase %s\n", - phase_num_to_name (manager->priv->phase)); + phase_num_to_name (priv->phase)); /* reset state */ - g_slist_free (manager->priv->pending_apps); - manager->priv->pending_apps = NULL; - g_slist_free (manager->priv->query_clients); - manager->priv->query_clients = NULL; - g_slist_free (manager->priv->next_query_clients); - manager->priv->next_query_clients = NULL; + g_slist_free (priv->pending_apps); + priv->pending_apps = NULL; + g_slist_free (priv->query_clients); + priv->query_clients = NULL; + g_slist_free (priv->next_query_clients); + priv->next_query_clients = NULL; - if (manager->priv->query_timeout_id > 0) { - g_source_remove (manager->priv->query_timeout_id); - manager->priv->query_timeout_id = 0; + if (priv->query_timeout_id > 0) { + g_source_remove (priv->query_timeout_id); + priv->query_timeout_id = 0; } - if (manager->priv->phase_timeout_id > 0) { - g_source_remove (manager->priv->phase_timeout_id); - manager->priv->phase_timeout_id = 0; + if (priv->phase_timeout_id > 0) { + g_source_remove (priv->phase_timeout_id); + priv->phase_timeout_id = 0; } - switch (manager->priv->phase) { + switch (priv->phase) { case GSM_MANAGER_PHASE_STARTUP: case GSM_MANAGER_PHASE_INITIALIZATION: case GSM_MANAGER_PHASE_WINDOW_MANAGER: @@ -1548,11 +1617,14 @@ static void debug_app_summary (GsmManager *manager) { guint phase; + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); g_debug ("GsmManager: App startup summary"); for (phase = GSM_MANAGER_PHASE_INITIALIZATION; phase < GSM_MANAGER_PHASE_RUNNING; phase++) { g_debug ("GsmManager: Phase %s", phase_num_to_name (phase)); - gsm_store_foreach (manager->priv->apps, + gsm_store_foreach (priv->apps, (GsmStoreFunc)_debug_app_for_phase, GUINT_TO_POINTER (phase)); } @@ -1586,7 +1658,10 @@ find_app_for_app_id (GsmManager *manager, const char *app_id) { GsmApp *app; - app = (GsmApp *)gsm_store_find (manager->priv->apps, + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); + app = (GsmApp *)gsm_store_find (priv->apps, (GsmStoreFunc)_app_has_app_id, (char *)app_id); return app; @@ -1637,14 +1712,16 @@ find_app_for_startup_id (GsmManager *manager, { GsmApp *found_app; GSList *a; + GsmManagerPrivate *priv; found_app = NULL; + priv = gsm_manager_get_instance_private (manager); /* If we're starting up the session, try to match the new client * with one pending apps for the current phase. If not, try to match * with any of the autostarted apps. */ - if (manager->priv->phase < GSM_MANAGER_PHASE_APPLICATION) { - for (a = manager->priv->pending_apps; a != NULL; a = a->next) { + if (priv->phase < GSM_MANAGER_PHASE_APPLICATION) { + for (a = priv->pending_apps; a != NULL; a = a->next) { GsmApp *app = GSM_APP (a->data); if (strcmp (startup_id, gsm_app_peek_startup_id (app)) == 0) { @@ -1655,7 +1732,7 @@ find_app_for_startup_id (GsmManager *manager, } else { GsmApp *app; - app = (GsmApp *)gsm_store_find (manager->priv->apps, + app = (GsmApp *)gsm_store_find (priv->apps, (GsmStoreFunc)_app_has_startup_id, (char *)startup_id); if (app != NULL) { @@ -1679,6 +1756,7 @@ _disconnect_client (GsmManager *manager, const char *startup_id; gboolean app_restart; GsmClientRestartStyle client_restart_hint; + GsmManagerPrivate *priv; g_debug ("GsmManager: disconnect client: %s", gsm_client_peek_id (client)); @@ -1688,14 +1766,15 @@ _disconnect_client (GsmManager *manager, gsm_client_set_status (client, GSM_CLIENT_FINISHED); is_condition_client = FALSE; - if (g_slist_find (manager->priv->condition_clients, client)) { - manager->priv->condition_clients = g_slist_remove (manager->priv->condition_clients, client); + priv = gsm_manager_get_instance_private (manager); + if (g_slist_find (priv->condition_clients, client)) { + priv->condition_clients = g_slist_remove (priv->condition_clients, client); is_condition_client = TRUE; } /* remove any inhibitors for this client */ - gsm_store_foreach_remove (manager->priv->inhibitors, + gsm_store_foreach_remove (priv->inhibitors, (GsmStoreFunc)inhibitor_has_client_id, (gpointer)gsm_client_peek_id (client)); @@ -1717,7 +1796,7 @@ _disconnect_client (GsmManager *manager, } } - if (manager->priv->phase == GSM_MANAGER_PHASE_QUERY_END_SESSION) { + if (priv->phase == GSM_MANAGER_PHASE_QUERY_END_SESSION) { /* Instead of answering our end session query, the client just exited. * Treat that as an "okay, end the session" answer. * @@ -1740,7 +1819,7 @@ _disconnect_client (GsmManager *manager, goto out; } - if (manager->priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) { + if (priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) { g_debug ("GsmManager: in shutdown, not restarting application"); goto out; } @@ -1807,17 +1886,19 @@ remove_clients_for_connection (GsmManager *manager, const char *service_name) { RemoveClientData data; + GsmManagerPrivate *priv; data.service_name = service_name; data.manager = manager; + priv = gsm_manager_get_instance_private (manager); /* disconnect dbus clients for name */ - gsm_store_foreach_remove (manager->priv->clients, + gsm_store_foreach_remove (priv->clients, (GsmStoreFunc)_disconnect_dbus_client, &data); - if (manager->priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION - && gsm_store_size (manager->priv->clients) == 0) { + if (priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION + && gsm_store_size (priv->clients) == 0) { g_debug ("GsmManager: last client disconnected - exiting"); end_phase (manager); } @@ -1853,13 +1934,15 @@ remove_inhibitors_for_connection (GsmManager *manager, { 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 (manager->priv->inhibitors, + n_removed = gsm_store_foreach_remove (priv->inhibitors, (GsmStoreFunc)inhibitor_has_bus_name, &data); } @@ -1889,10 +1972,13 @@ static gboolean register_manager (GsmManager *manager) { GError *error = NULL; + GsmManagerPrivate *priv; error = NULL; - manager->priv->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error); - if (manager->priv->connection == NULL) { + priv = gsm_manager_get_instance_private (manager); + + priv->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error); + if (priv->connection == NULL) { if (error != NULL) { g_critical ("error getting session bus: %s", error->message); g_error_free (error); @@ -1900,23 +1986,23 @@ register_manager (GsmManager *manager) exit (1); } - manager->priv->bus_proxy = dbus_g_proxy_new_for_name (manager->priv->connection, - DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, - DBUS_INTERFACE_DBUS); - dbus_g_proxy_add_signal (manager->priv->bus_proxy, + priv->bus_proxy = dbus_g_proxy_new_for_name (priv->connection, + DBUS_SERVICE_DBUS, + DBUS_PATH_DBUS, + DBUS_INTERFACE_DBUS); + dbus_g_proxy_add_signal (priv->bus_proxy, "NameOwnerChanged", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID); - dbus_g_proxy_connect_signal (manager->priv->bus_proxy, + dbus_g_proxy_connect_signal (priv->bus_proxy, "NameOwnerChanged", G_CALLBACK (bus_name_owner_changed), manager, NULL); - dbus_g_connection_register_g_object (manager->priv->connection, GSM_MANAGER_DBUS_PATH, G_OBJECT (manager)); + dbus_g_connection_register_g_object (priv->connection, GSM_MANAGER_DBUS_PATH, G_OBJECT (manager)); return TRUE; } @@ -1925,9 +2011,13 @@ static void gsm_manager_set_failsafe (GsmManager *manager, gboolean enabled) { + GsmManagerPrivate *priv; + g_return_if_fail (GSM_IS_MANAGER (manager)); - manager->priv->failsafe = enabled; + priv = gsm_manager_get_instance_private (manager); + + priv->failsafe = enabled; } static gboolean @@ -1950,11 +2040,16 @@ static void on_client_disconnected (GsmClient *client, GsmManager *manager) { + GsmManagerPrivate *priv; + g_debug ("GsmManager: disconnect client"); + + priv = gsm_manager_get_instance_private (manager); + _disconnect_client (manager, client); - gsm_store_remove (manager->priv->clients, gsm_client_peek_id (client)); - if (manager->priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION - && gsm_store_size (manager->priv->clients) == 0) { + gsm_store_remove (priv->clients, gsm_client_peek_id (client)); + if (priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION + && gsm_store_size (priv->clients) == 0) { g_debug ("GsmManager: last client disconnected - exiting"); end_phase (manager); } @@ -1968,11 +2063,13 @@ on_xsmp_client_register_request (GsmXSMPClient *client, gboolean handled; char *new_id; GsmApp *app; + GsmManagerPrivate *priv; handled = TRUE; new_id = NULL; + priv = gsm_manager_get_instance_private (manager); - if (manager->priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) { + if (priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) { goto out; } @@ -1981,7 +2078,7 @@ on_xsmp_client_register_request (GsmXSMPClient *client, } else { GsmClient *client; - client = (GsmClient *)gsm_store_find (manager->priv->clients, + client = (GsmClient *)gsm_store_find (priv->clients, (GsmStoreFunc)_client_has_startup_id, *id); /* We can't have two clients with the same id. */ @@ -2025,7 +2122,10 @@ on_xsmp_client_register_request (GsmXSMPClient *client, static gboolean auto_save_is_enabled (GsmManager *manager) { - return g_settings_get_boolean (manager->priv->settings_session, + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); + return g_settings_get_boolean (priv->settings_session, KEY_AUTOSAVE); } @@ -2038,6 +2138,7 @@ maybe_save_session (GsmManager *manager) #endif char *session_type; GError *error; + GsmManagerPrivate *priv; #ifdef HAVE_SYSTEMD if (LOGIND_RUNNING()) { @@ -2060,15 +2161,16 @@ maybe_save_session (GsmManager *manager) } #endif + priv = gsm_manager_get_instance_private (manager); /* We only allow session saving when session is running or when * logging out */ - if (manager->priv->phase != GSM_MANAGER_PHASE_RUNNING && - manager->priv->phase != GSM_MANAGER_PHASE_END_SESSION) { + if (priv->phase != GSM_MANAGER_PHASE_RUNNING && + priv->phase != GSM_MANAGER_PHASE_END_SESSION) { goto out; } error = NULL; - gsm_session_save (manager->priv->clients, &error); + gsm_session_save (priv->clients, &error); if (error) { g_warning ("Error saving session: %s", error->message); @@ -2093,8 +2195,11 @@ _handle_client_end_session_response (GsmManager *manager, gboolean cancel, const char *reason) { + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); /* just ignore if received outside of shutdown */ - if (manager->priv->phase < GSM_MANAGER_PHASE_QUERY_END_SESSION) { + if (priv->phase < GSM_MANAGER_PHASE_QUERY_END_SESSION) { return; } @@ -2105,9 +2210,9 @@ _handle_client_end_session_response (GsmManager *manager, return; } - manager->priv->query_clients = g_slist_remove (manager->priv->query_clients, client); + priv->query_clients = g_slist_remove (priv->query_clients, client); - if (! is_ok && manager->priv->logout_mode != GSM_MANAGER_LOGOUT_MODE_FORCE) { + if (! is_ok && priv->logout_mode != GSM_MANAGER_LOGOUT_MODE_FORCE) { guint cookie; GsmInhibitor *inhibitor; char *app_id; @@ -2137,37 +2242,37 @@ _handle_client_end_session_response (GsmManager *manager, bus_name, cookie); g_free (app_id); - gsm_store_add (manager->priv->inhibitors, gsm_inhibitor_peek_id (inhibitor), G_OBJECT (inhibitor)); + gsm_store_add (priv->inhibitors, gsm_inhibitor_peek_id (inhibitor), G_OBJECT (inhibitor)); g_object_unref (inhibitor); } else { - gsm_store_foreach_remove (manager->priv->inhibitors, + gsm_store_foreach_remove (priv->inhibitors, (GsmStoreFunc)inhibitor_has_client_id, (gpointer)gsm_client_peek_id (client)); } - if (manager->priv->phase == GSM_MANAGER_PHASE_QUERY_END_SESSION) { - if (manager->priv->query_clients == NULL) { + if (priv->phase == GSM_MANAGER_PHASE_QUERY_END_SESSION) { + if (priv->query_clients == NULL) { query_end_session_complete (manager); } - } else if (manager->priv->phase == GSM_MANAGER_PHASE_END_SESSION) { + } else if (priv->phase == GSM_MANAGER_PHASE_END_SESSION) { if (do_last) { /* This only makes sense if we're in part 1 of * GSM_MANAGER_PHASE_END_SESSION. Doing this in part 2 * can only happen because of a buggy client that loops * wanting to be last again and again. The phase * timeout will take care of this issue. */ - manager->priv->next_query_clients = g_slist_prepend (manager->priv->next_query_clients, - client); + priv->next_query_clients = g_slist_prepend (priv->next_query_clients, + client); } /* we can continue to the next step if all clients have replied * and if there's no inhibitor */ - if (manager->priv->query_clients != NULL + if (priv->query_clients != NULL || gsm_manager_is_logout_inhibited (manager)) { return; } - if (manager->priv->next_query_clients != NULL) { + if (priv->next_query_clients != NULL) { do_phase_end_session_part_2 (manager); } else { end_phase (manager); @@ -2259,34 +2364,37 @@ static void gsm_manager_set_client_store (GsmManager *manager, GsmStore *store) { + GsmManagerPrivate *priv; + g_return_if_fail (GSM_IS_MANAGER (manager)); + priv = gsm_manager_get_instance_private (manager); if (store != NULL) { g_object_ref (store); } - if (manager->priv->clients != NULL) { - g_signal_handlers_disconnect_by_func (manager->priv->clients, + if (priv->clients != NULL) { + g_signal_handlers_disconnect_by_func (priv->clients, on_store_client_added, manager); - g_signal_handlers_disconnect_by_func (manager->priv->clients, + g_signal_handlers_disconnect_by_func (priv->clients, on_store_client_removed, manager); - g_object_unref (manager->priv->clients); + g_object_unref (priv->clients); } g_debug ("GsmManager: setting client store %p", store); - manager->priv->clients = store; + priv->clients = store; - if (manager->priv->clients != NULL) { - g_signal_connect (manager->priv->clients, + if (priv->clients != NULL) { + g_signal_connect (priv->clients, "added", G_CALLBACK (on_store_client_added), manager); - g_signal_connect (manager->priv->clients, + g_signal_connect (priv->clients, "removed", G_CALLBACK (on_store_client_removed), manager); @@ -2323,15 +2431,17 @@ gsm_manager_get_property (GObject *object, GParamSpec *pspec) { GsmManager *self; + GsmManagerPrivate *priv; self = GSM_MANAGER (object); + priv = gsm_manager_get_instance_private (self); switch (prop_id) { case PROP_FAILSAFE: - g_value_set_boolean (value, self->priv->failsafe); + g_value_set_boolean (value, priv->failsafe); break; case PROP_CLIENT_STORE: - g_value_set_object (value, self->priv->clients); + g_value_set_object (value, priv->clients); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -2383,56 +2493,59 @@ on_store_inhibitor_removed (GsmStore *store, static void gsm_manager_dispose (GObject *object) { + GsmManagerPrivate *priv; GsmManager *manager = GSM_MANAGER (object); g_debug ("GsmManager: disposing manager"); - if (manager->priv->clients != NULL) { - g_signal_handlers_disconnect_by_func (manager->priv->clients, + priv = gsm_manager_get_instance_private (manager); + + if (priv->clients != NULL) { + g_signal_handlers_disconnect_by_func (priv->clients, on_store_client_added, manager); - g_signal_handlers_disconnect_by_func (manager->priv->clients, + g_signal_handlers_disconnect_by_func (priv->clients, on_store_client_removed, manager); - g_object_unref (manager->priv->clients); - manager->priv->clients = NULL; + g_object_unref (priv->clients); + priv->clients = NULL; } - if (manager->priv->apps != NULL) { - g_object_unref (manager->priv->apps); - manager->priv->apps = NULL; + if (priv->apps != NULL) { + g_object_unref (priv->apps); + priv->apps = NULL; } - if (manager->priv->inhibitors != NULL) { - g_signal_handlers_disconnect_by_func (manager->priv->inhibitors, + if (priv->inhibitors != NULL) { + g_signal_handlers_disconnect_by_func (priv->inhibitors, on_store_inhibitor_added, manager); - g_signal_handlers_disconnect_by_func (manager->priv->inhibitors, + g_signal_handlers_disconnect_by_func (priv->inhibitors, on_store_inhibitor_removed, manager); - g_object_unref (manager->priv->inhibitors); - manager->priv->inhibitors = NULL; + g_object_unref (priv->inhibitors); + priv->inhibitors = NULL; } - if (manager->priv->presence != NULL) { - g_object_unref (manager->priv->presence); - manager->priv->presence = NULL; + if (priv->presence != NULL) { + g_object_unref (priv->presence); + priv->presence = NULL; } - if (manager->priv->settings_session) { - g_object_unref (manager->priv->settings_session); - manager->priv->settings_session = NULL; + if (priv->settings_session) { + g_object_unref (priv->settings_session); + priv->settings_session = NULL; } - if (manager->priv->settings_lockdown) { - g_object_unref (manager->priv->settings_lockdown); - manager->priv->settings_lockdown = NULL; + if (priv->settings_lockdown) { + g_object_unref (priv->settings_lockdown); + priv->settings_lockdown = NULL; } - if (manager->priv->settings_screensaver) { - g_object_unref (manager->priv->settings_screensaver); - manager->priv->settings_screensaver = NULL; + if (priv->settings_screensaver) { + g_object_unref (priv->settings_screensaver); + priv->settings_screensaver = NULL; } G_OBJECT_CLASS (gsm_manager_parent_class)->dispose (object); } @@ -2535,8 +2648,6 @@ gsm_manager_class_init (GsmManagerClass *klass) GSM_TYPE_STORE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - g_type_class_add_private (klass, sizeof (GsmManagerPrivate)); - dbus_g_object_type_install_info (GSM_TYPE_MANAGER, &dbus_glib_gsm_manager_object_info); dbus_g_error_domain_register (GSM_MANAGER_ERROR, NULL, GSM_MANAGER_TYPE_ERROR); } @@ -2545,9 +2656,12 @@ static void load_idle_delay_from_gsettings (GsmManager *manager) { glong value; - value = g_settings_get_int (manager->priv->settings_session, + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); + value = g_settings_get_int (priv->settings_session, KEY_IDLE_DELAY); - gsm_presence_set_idle_timeout (manager->priv->presence, value * 60000); + gsm_presence_set_idle_timeout (priv->presence, value * 60000); } static void @@ -2555,10 +2669,13 @@ on_gsettings_key_changed (GSettings *settings, gchar *key, GsmManager *manager) { + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); if (g_strcmp0 (key, KEY_IDLE_DELAY) == 0) { int delay; delay = g_settings_get_int (settings, key); - gsm_presence_set_idle_timeout (manager->priv->presence, delay * 60000); + gsm_presence_set_idle_timeout (priv->presence, delay * 60000); } else if (g_strcmp0 (key, KEY_LOCK_DISABLE) == 0) { /* ??? */ gboolean UNUSED_VARIABLE disabled; @@ -2603,11 +2720,12 @@ gsm_manager_init (GsmManager *manager) const char * const *schemas; gboolean schema_exists; guint i; + GsmManagerPrivate *priv; - manager->priv = GSM_MANAGER_GET_PRIVATE (manager); + priv = gsm_manager_get_instance_private (manager); - manager->priv->settings_session = g_settings_new (SESSION_SCHEMA); - manager->priv->settings_lockdown = g_settings_new (LOCKDOWN_SCHEMA); + priv->settings_session = g_settings_new (SESSION_SCHEMA); + priv->settings_lockdown = g_settings_new (LOCKDOWN_SCHEMA); /* check if mate-screensaver is installed */ schemas = g_settings_list_schemas (); @@ -2619,32 +2737,32 @@ gsm_manager_init (GsmManager *manager) } } if (schema_exists == TRUE) - manager->priv->settings_screensaver = g_settings_new (SCREENSAVER_SCHEMA); + priv->settings_screensaver = g_settings_new (SCREENSAVER_SCHEMA); else - manager->priv->settings_screensaver = NULL; + priv->settings_screensaver = NULL; - manager->priv->inhibitors = gsm_store_new (); - g_signal_connect (manager->priv->inhibitors, + priv->inhibitors = gsm_store_new (); + g_signal_connect (priv->inhibitors, "added", G_CALLBACK (on_store_inhibitor_added), manager); - g_signal_connect (manager->priv->inhibitors, + g_signal_connect (priv->inhibitors, "removed", G_CALLBACK (on_store_inhibitor_removed), manager); - manager->priv->apps = gsm_store_new (); + priv->apps = gsm_store_new (); - manager->priv->presence = gsm_presence_new (); - g_signal_connect (manager->priv->presence, + priv->presence = gsm_presence_new (); + g_signal_connect (priv->presence, "status-changed", G_CALLBACK (on_presence_status_changed), manager); - g_signal_connect (manager->priv->settings_session, + g_signal_connect (priv->settings_session, "changed", G_CALLBACK (on_gsettings_key_changed), manager); - g_signal_connect (manager->priv->settings_lockdown, + g_signal_connect (priv->settings_lockdown, "changed", G_CALLBACK (on_gsettings_key_changed), manager); @@ -2656,13 +2774,15 @@ static void gsm_manager_finalize (GObject *object) { GsmManager *manager; + GsmManagerPrivate *priv; g_return_if_fail (object != NULL); g_return_if_fail (GSM_IS_MANAGER (object)); manager = GSM_MANAGER (object); + priv = gsm_manager_get_instance_private (manager); - g_return_if_fail (manager->priv != NULL); + g_return_if_fail (priv != NULL); G_OBJECT_CLASS (gsm_manager_parent_class)->finalize (object); } @@ -2699,9 +2819,12 @@ gsm_manager_setenv (GsmManager *manager, const char *value, GError **error) { + GsmManagerPrivate *priv; + g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); - if (manager->priv->phase > GSM_MANAGER_PHASE_INITIALIZATION) { + 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, @@ -2720,9 +2843,12 @@ gsm_manager_initialization_error (GsmManager *manager, gboolean fatal, GError **error) { + GsmManagerPrivate *priv; g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); - if (manager->priv->phase > GSM_MANAGER_PHASE_INITIALIZATION) { + 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, @@ -2739,12 +2865,15 @@ static gboolean gsm_manager_is_switch_user_inhibited (GsmManager *manager) { GsmInhibitor *inhibitor; + GsmManagerPrivate *priv; - if (manager->priv->inhibitors == NULL) { + priv = gsm_manager_get_instance_private (manager); + + if (priv->inhibitors == NULL) { return FALSE; } - inhibitor = (GsmInhibitor *)gsm_store_find (manager->priv->inhibitors, + inhibitor = (GsmInhibitor *)gsm_store_find (priv->inhibitors, (GsmStoreFunc)inhibitor_has_flag, GUINT_TO_POINTER (GSM_INHIBITOR_FLAG_SWITCH_USER)); if (inhibitor == NULL) { @@ -2757,12 +2886,15 @@ static gboolean gsm_manager_is_suspend_inhibited (GsmManager *manager) { GsmInhibitor *inhibitor; + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); - if (manager->priv->inhibitors == NULL) { + if (priv->inhibitors == NULL) { return FALSE; } - inhibitor = (GsmInhibitor *)gsm_store_find (manager->priv->inhibitors, + inhibitor = (GsmInhibitor *)gsm_store_find (priv->inhibitors, (GsmStoreFunc)inhibitor_has_flag, GUINT_TO_POINTER (GSM_INHIBITOR_FLAG_SUSPEND)); if (inhibitor == NULL) { @@ -2778,6 +2910,9 @@ request_reboot_privileges_completed_consolekit (GsmConsolekit *consolekit, GError *error, GsmManager *manager) { + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); /* make sure we disconnect the signal handler so that it's not called * again next time the event is fired -- this can happen if the reboot * is cancelled. */ @@ -2789,9 +2924,9 @@ request_reboot_privileges_completed_consolekit (GsmConsolekit *consolekit, if (success) { if (ask_later) { - manager->priv->logout_type = GSM_MANAGER_LOGOUT_REBOOT_INTERACT; + priv->logout_type = GSM_MANAGER_LOGOUT_REBOOT_INTERACT; } else { - manager->priv->logout_type = GSM_MANAGER_LOGOUT_REBOOT; + priv->logout_type = GSM_MANAGER_LOGOUT_REBOOT; } end_phase (manager); @@ -2806,6 +2941,9 @@ request_reboot_privileges_completed_systemd (GsmSystemd *systemd, GError *error, GsmManager *manager) { + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); /* make sure we disconnect the signal handler so that it's not called * again next time the event is fired -- this can happen if the reboot * is cancelled. */ @@ -2817,9 +2955,9 @@ request_reboot_privileges_completed_systemd (GsmSystemd *systemd, if (success) { if (ask_later) { - manager->priv->logout_type = GSM_MANAGER_LOGOUT_REBOOT_INTERACT; + priv->logout_type = GSM_MANAGER_LOGOUT_REBOOT_INTERACT; } else { - manager->priv->logout_type = GSM_MANAGER_LOGOUT_REBOOT; + priv->logout_type = GSM_MANAGER_LOGOUT_REBOOT; } end_phase (manager); @@ -2835,9 +2973,12 @@ request_reboot (GsmManager *manager) GsmSystemd *systemd; #endif gboolean success; + GsmManagerPrivate *priv; g_debug ("GsmManager: requesting reboot"); + priv = gsm_manager_get_instance_private (manager); + /* We request the privileges before doing anything. There are a few * different cases here: * @@ -2875,7 +3016,7 @@ request_reboot (GsmManager *manager) manager); g_object_unref (systemd); - manager->priv->logout_type = GSM_MANAGER_LOGOUT_REBOOT_MDM; + priv->logout_type = GSM_MANAGER_LOGOUT_REBOOT_MDM; end_phase (manager); } } @@ -2894,7 +3035,7 @@ request_reboot (GsmManager *manager) manager); g_object_unref (consolekit); - manager->priv->logout_type = GSM_MANAGER_LOGOUT_REBOOT_MDM; + priv->logout_type = GSM_MANAGER_LOGOUT_REBOOT_MDM; end_phase (manager); } #ifdef HAVE_SYSTEMD @@ -2909,6 +3050,9 @@ request_shutdown_privileges_completed_consolekit (GsmConsolekit *consolekit, GError *error, GsmManager *manager) { + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); /* make sure we disconnect the signal handler so that it's not called * again next time the event is fired -- this can happen if the reboot * is cancelled. */ @@ -2920,9 +3064,9 @@ request_shutdown_privileges_completed_consolekit (GsmConsolekit *consolekit, if (success) { if (ask_later) { - manager->priv->logout_type = GSM_MANAGER_LOGOUT_SHUTDOWN_INTERACT; + priv->logout_type = GSM_MANAGER_LOGOUT_SHUTDOWN_INTERACT; } else { - manager->priv->logout_type = GSM_MANAGER_LOGOUT_SHUTDOWN; + priv->logout_type = GSM_MANAGER_LOGOUT_SHUTDOWN; } end_phase (manager); @@ -2937,6 +3081,9 @@ request_shutdown_privileges_completed_systemd (GsmSystemd *systemd, GError *error, GsmManager *manager) { + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); /* make sure we disconnect the signal handler so that it's not called * again next time the event is fired -- this can happen if the reboot * is cancelled. */ @@ -2948,9 +3095,9 @@ request_shutdown_privileges_completed_systemd (GsmSystemd *systemd, if (success) { if (ask_later) { - manager->priv->logout_type = GSM_MANAGER_LOGOUT_SHUTDOWN_INTERACT; + priv->logout_type = GSM_MANAGER_LOGOUT_SHUTDOWN_INTERACT; } else { - manager->priv->logout_type = GSM_MANAGER_LOGOUT_SHUTDOWN; + priv->logout_type = GSM_MANAGER_LOGOUT_SHUTDOWN; } end_phase (manager); @@ -2966,9 +3113,12 @@ request_shutdown (GsmManager *manager) GsmSystemd *systemd; #endif gboolean success; + GsmManagerPrivate *priv; g_debug ("GsmManager: requesting shutdown"); + priv = gsm_manager_get_instance_private (manager); + /* See the comment in request_reboot() for some more details about how * this works. */ @@ -2987,7 +3137,7 @@ request_shutdown (GsmManager *manager) manager); g_object_unref (systemd); - manager->priv->logout_type = GSM_MANAGER_LOGOUT_SHUTDOWN_MDM; + priv->logout_type = GSM_MANAGER_LOGOUT_SHUTDOWN_MDM; end_phase (manager); } } @@ -3006,7 +3156,7 @@ request_shutdown (GsmManager *manager) manager); g_object_unref (consolekit); - manager->priv->logout_type = GSM_MANAGER_LOGOUT_SHUTDOWN_MDM; + priv->logout_type = GSM_MANAGER_LOGOUT_SHUTDOWN_MDM; end_phase (manager); } #ifdef HAVE_SYSTEMD @@ -3017,6 +3167,8 @@ request_shutdown (GsmManager *manager) static void request_suspend (GsmManager *manager) { + GsmManagerPrivate *priv; + g_debug ("GsmManager: requesting suspend"); if (! gsm_manager_is_suspend_inhibited (manager)) { @@ -3024,26 +3176,29 @@ request_suspend (GsmManager *manager) return; } - if (manager->priv->inhibit_dialog != NULL) { + priv = gsm_manager_get_instance_private (manager); + if (priv->inhibit_dialog != NULL) { g_debug ("GsmManager: inhibit dialog already up"); - gtk_window_present (GTK_WINDOW (manager->priv->inhibit_dialog)); + gtk_window_present (GTK_WINDOW (priv->inhibit_dialog)); return; } - manager->priv->inhibit_dialog = gsm_inhibit_dialog_new (manager->priv->inhibitors, - manager->priv->clients, - GSM_LOGOUT_ACTION_SLEEP); + priv->inhibit_dialog = gsm_inhibit_dialog_new (priv->inhibitors, + priv->clients, + GSM_LOGOUT_ACTION_SLEEP); - g_signal_connect (manager->priv->inhibit_dialog, + g_signal_connect (priv->inhibit_dialog, "response", G_CALLBACK (inhibit_dialog_response), manager); - gtk_widget_show (manager->priv->inhibit_dialog); + gtk_widget_show (priv->inhibit_dialog); } static void request_hibernate (GsmManager *manager) { + GsmManagerPrivate *priv; + g_debug ("GsmManager: requesting hibernate"); /* hibernate uses suspend inhibit */ @@ -3052,21 +3207,22 @@ request_hibernate (GsmManager *manager) return; } - if (manager->priv->inhibit_dialog != NULL) { + priv = gsm_manager_get_instance_private (manager); + if (priv->inhibit_dialog != NULL) { g_debug ("GsmManager: inhibit dialog already up"); - gtk_window_present (GTK_WINDOW (manager->priv->inhibit_dialog)); + gtk_window_present (GTK_WINDOW (priv->inhibit_dialog)); return; } - manager->priv->inhibit_dialog = gsm_inhibit_dialog_new (manager->priv->inhibitors, - manager->priv->clients, - GSM_LOGOUT_ACTION_HIBERNATE); + priv->inhibit_dialog = gsm_inhibit_dialog_new (priv->inhibitors, + priv->clients, + GSM_LOGOUT_ACTION_HIBERNATE); - g_signal_connect (manager->priv->inhibit_dialog, + g_signal_connect (priv->inhibit_dialog, "response", G_CALLBACK (inhibit_dialog_response), manager); - gtk_widget_show (manager->priv->inhibit_dialog); + gtk_widget_show (priv->inhibit_dialog); } @@ -3074,10 +3230,14 @@ static void request_logout (GsmManager *manager, GsmManagerLogoutMode mode) { + GsmManagerPrivate *priv; + g_debug ("GsmManager: requesting logout"); - manager->priv->logout_mode = mode; - manager->priv->logout_type = GSM_MANAGER_LOGOUT_LOGOUT; + priv = gsm_manager_get_instance_private (manager); + + priv->logout_mode = mode; + priv->logout_type = GSM_MANAGER_LOGOUT_LOGOUT; end_phase (manager); } @@ -3085,6 +3245,8 @@ request_logout (GsmManager *manager, static void request_switch_user (GsmManager *manager) { + GsmManagerPrivate *priv; + g_debug ("GsmManager: requesting user switch"); /* See comment in manager_switch_user() to understand why we do this in @@ -3099,21 +3261,22 @@ request_switch_user (GsmManager *manager) return; } - if (manager->priv->inhibit_dialog != NULL) { + priv = gsm_manager_get_instance_private (manager); + if (priv->inhibit_dialog != NULL) { g_debug ("GsmManager: inhibit dialog already up"); - gtk_window_present (GTK_WINDOW (manager->priv->inhibit_dialog)); + gtk_window_present (GTK_WINDOW (priv->inhibit_dialog)); return; } - manager->priv->inhibit_dialog = gsm_inhibit_dialog_new (manager->priv->inhibitors, - manager->priv->clients, - GSM_LOGOUT_ACTION_SWITCH_USER); + priv->inhibit_dialog = gsm_inhibit_dialog_new (priv->inhibitors, + priv->clients, + GSM_LOGOUT_ACTION_SWITCH_USER); - g_signal_connect (manager->priv->inhibit_dialog, + g_signal_connect (priv->inhibit_dialog, "response", G_CALLBACK (inhibit_dialog_response), manager); - gtk_widget_show (manager->priv->inhibit_dialog); + gtk_widget_show (priv->inhibit_dialog); } static void @@ -3121,10 +3284,13 @@ logout_dialog_response (GsmLogoutDialog *logout_dialog, guint response_id, GsmManager *manager) { + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); /* We should only be here if mode has already have been set from * show_fallback_shutdown/logout_dialog */ - g_assert (manager->priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_NORMAL); + g_assert (priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_NORMAL); g_debug ("GsmManager: Logout dialog response: %d", response_id); @@ -3173,13 +3339,15 @@ static void show_shutdown_dialog (GsmManager *manager) { GtkWidget *dialog; + GsmManagerPrivate *priv; - if (manager->priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) { + priv = gsm_manager_get_instance_private (manager); + if (priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) { /* Already shutting down, nothing more to do */ return; } - manager->priv->logout_mode = GSM_MANAGER_LOGOUT_MODE_NORMAL; + priv->logout_mode = GSM_MANAGER_LOGOUT_MODE_NORMAL; dialog = gsm_get_shutdown_dialog (gdk_screen_get_default (), gtk_get_current_event_time ()); @@ -3197,13 +3365,15 @@ static void show_logout_dialog (GsmManager *manager) { GtkWidget *dialog; + GsmManagerPrivate *priv; - if (manager->priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) { + priv = gsm_manager_get_instance_private (manager); + if (priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) { /* Already shutting down, nothing more to do */ return; } - manager->priv->logout_mode = GSM_MANAGER_LOGOUT_MODE_NORMAL; + priv->logout_mode = GSM_MANAGER_LOGOUT_MODE_NORMAL; dialog = gsm_get_logout_dialog (gdk_screen_get_default (), gtk_get_current_event_time ()); @@ -3222,14 +3392,17 @@ user_logout (GsmManager *manager, GsmManagerLogoutMode mode) { gboolean logout_prompt; + GsmManagerPrivate *priv; - if (manager->priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) { + priv = gsm_manager_get_instance_private (manager); + + if (priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) { /* Already shutting down, nothing more to do */ return; } logout_prompt = - g_settings_get_boolean (manager->priv->settings_session, + g_settings_get_boolean (priv->settings_session, "logout-prompt"); /* If the shell isn't running, and this isn't a non-interative logout request, @@ -3254,8 +3427,12 @@ gboolean gsm_manager_set_phase (GsmManager *manager, GsmManagerPhase phase) { + GsmManagerPrivate *priv; + g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); - manager->priv->phase = phase; + + priv = gsm_manager_get_instance_private (manager); + priv->phase = phase; return (TRUE); } @@ -3263,11 +3440,13 @@ gboolean gsm_manager_request_shutdown (GsmManager *manager, GError **error) { + GsmManagerPrivate *priv; g_debug ("GsmManager: RequestShutdown called"); g_return_val_if_fail(GSM_IS_MANAGER (manager), FALSE); - if (manager->priv->phase != GSM_MANAGER_PHASE_RUNNING) { + 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, @@ -3284,11 +3463,14 @@ gboolean gsm_manager_request_reboot (GsmManager *manager, GError **error) { + GsmManagerPrivate *priv; + g_debug ("GsmManager: RequestReboot called"); g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); - if (manager->priv->phase != GSM_MANAGER_PHASE_RUNNING) { + 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, @@ -3304,14 +3486,21 @@ gsm_manager_request_reboot (GsmManager *manager, static gboolean _log_out_is_locked_down (GsmManager *manager) { - return g_settings_get_boolean (manager->priv->settings_lockdown, + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); + + return g_settings_get_boolean (priv->settings_lockdown, KEY_LOG_OUT_DISABLE); } static gboolean _switch_user_is_locked_down (GsmManager *manager) { - return g_settings_get_boolean (manager->priv->settings_lockdown, + GsmManagerPrivate *priv; + + priv = gsm_manager_get_instance_private (manager); + return g_settings_get_boolean (priv->settings_lockdown, KEY_USER_SWITCH_DISABLE); } @@ -3319,11 +3508,13 @@ gboolean gsm_manager_shutdown (GsmManager *manager, GError **error) { + GsmManagerPrivate *priv; g_debug ("GsmManager: Shutdown called"); g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); - if (manager->priv->phase != GSM_MANAGER_PHASE_RUNNING) { + 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, @@ -3387,11 +3578,13 @@ 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); - if (manager->priv->phase != GSM_MANAGER_PHASE_RUNNING) { + 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, @@ -3437,6 +3630,7 @@ gsm_manager_register_client (GsmManager *manager, char *sender; GsmClient *client; GsmApp *app; + GsmManagerPrivate *priv; g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); @@ -3445,7 +3639,8 @@ gsm_manager_register_client (GsmManager *manager, g_debug ("GsmManager: RegisterClient %s", startup_id); - if (manager->priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) { + priv = gsm_manager_get_instance_private (manager); + if (priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) { GError *new_error; g_debug ("Unable to register client: shutting down"); @@ -3462,7 +3657,7 @@ gsm_manager_register_client (GsmManager *manager, new_startup_id = gsm_util_generate_startup_id (); } else { - client = (GsmClient *)gsm_store_find (manager->priv->clients, + client = (GsmClient *)gsm_store_find (priv->clients, (GsmStoreFunc)_client_has_startup_id, (char *)startup_id); /* We can't have two clients with the same startup id. */ @@ -3508,7 +3703,7 @@ gsm_manager_register_client (GsmManager *manager, return FALSE; } - gsm_store_add (manager->priv->clients, gsm_client_peek_id (client), G_OBJECT (client)); + gsm_store_add (priv->clients, gsm_client_peek_id (client), G_OBJECT (client)); /* the store will own the ref */ g_object_unref (client); @@ -3537,12 +3732,14 @@ gsm_manager_unregister_client (GsmManager *manager, DBusGMethodInvocation *context) { GsmClient *client; + GsmManagerPrivate *priv; g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); g_debug ("GsmManager: UnregisterClient %s", client_id); - client = (GsmClient *)gsm_store_lookup (manager->priv->clients, client_id); + priv = gsm_manager_get_instance_private (manager); + client = (GsmClient *)gsm_store_lookup (priv->clients, client_id); if (client == NULL) { GError *new_error; @@ -3575,6 +3772,7 @@ gsm_manager_inhibit (GsmManager *manager, { GsmInhibitor *inhibitor; guint cookie; + GsmManagerPrivate *priv; g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); @@ -3584,7 +3782,8 @@ gsm_manager_inhibit (GsmManager *manager, reason, flags); - if (manager->priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE) { + priv = gsm_manager_get_instance_private (manager); + if (priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE) { GError *new_error; new_error = g_error_new (GSM_MANAGER_ERROR, @@ -3639,7 +3838,7 @@ gsm_manager_inhibit (GsmManager *manager, reason, dbus_g_method_get_sender (context), cookie); - gsm_store_add (manager->priv->inhibitors, gsm_inhibitor_peek_id (inhibitor), G_OBJECT (inhibitor)); + gsm_store_add (priv->inhibitors, gsm_inhibitor_peek_id (inhibitor), G_OBJECT (inhibitor)); g_object_unref (inhibitor); dbus_g_method_return (context, cookie); @@ -3653,12 +3852,14 @@ gsm_manager_uninhibit (GsmManager *manager, DBusGMethodInvocation *context) { GsmInhibitor *inhibitor; + GsmManagerPrivate *priv; g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); g_debug ("GsmManager: Uninhibit %u", cookie); - inhibitor = (GsmInhibitor *)gsm_store_find (manager->priv->inhibitors, + priv = gsm_manager_get_instance_private (manager); + inhibitor = (GsmInhibitor *)gsm_store_find (priv->inhibitors, (GsmStoreFunc)_find_by_cookie, &cookie); if (inhibitor == NULL) { @@ -3680,7 +3881,7 @@ gsm_manager_uninhibit (GsmManager *manager, gsm_inhibitor_peek_flags (inhibitor), gsm_inhibitor_peek_bus_name (inhibitor)); - gsm_store_remove (manager->priv->inhibitors, gsm_inhibitor_peek_id (inhibitor)); + gsm_store_remove (priv->inhibitors, gsm_inhibitor_peek_id (inhibitor)); dbus_g_method_return (context); @@ -3694,16 +3895,18 @@ gsm_manager_is_inhibited (GsmManager *manager, GError *error) { GsmInhibitor *inhibitor; + GsmManagerPrivate *priv; g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); - if (manager->priv->inhibitors == NULL - || gsm_store_size (manager->priv->inhibitors) == 0) { + 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 (manager->priv->inhibitors, + inhibitor = (GsmInhibitor *) gsm_store_find (priv->inhibitors, (GsmStoreFunc)inhibitor_has_flag, GUINT_TO_POINTER (flags)); if (inhibitor == NULL) { @@ -3730,6 +3933,7 @@ 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) { @@ -3737,7 +3941,8 @@ gsm_manager_get_clients (GsmManager *manager, } *clients = g_ptr_array_new (); - gsm_store_foreach (manager->priv->clients, (GsmStoreFunc)listify_store_ids, clients); + priv = gsm_manager_get_instance_private (manager); + gsm_store_foreach (priv->clients, (GsmStoreFunc)listify_store_ids, clients); return TRUE; } @@ -3747,6 +3952,8 @@ gsm_manager_get_inhibitors (GsmManager *manager, GPtrArray **inhibitors, GError **error) { + GsmManagerPrivate *priv; + g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); if (inhibitors == NULL) { @@ -3754,7 +3961,8 @@ gsm_manager_get_inhibitors (GsmManager *manager, } *inhibitors = g_ptr_array_new (); - gsm_store_foreach (manager->priv->inhibitors, + priv = gsm_manager_get_instance_private (manager); + gsm_store_foreach (priv->inhibitors, (GsmStoreFunc) listify_store_ids, inhibitors); @@ -3783,10 +3991,12 @@ gsm_manager_is_autostart_condition_handled (GsmManager *manager, GError **error) { GsmApp *app; + GsmManagerPrivate *priv; g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); - app = (GsmApp *) gsm_store_find (manager->priv->apps,( + priv = gsm_manager_get_instance_private (manager); + app = (GsmApp *) gsm_store_find (priv->apps,( GsmStoreFunc) _app_has_autostart_condition, (char *)condition); @@ -3806,6 +4016,7 @@ append_app (GsmManager *manager, const char *id; const char *app_id; GsmApp *dup; + GsmManagerPrivate *priv; id = gsm_app_peek_id (app); if (IS_STRING_EMPTY (id)) { @@ -3813,7 +4024,8 @@ append_app (GsmManager *manager, return; } - dup = (GsmApp *)gsm_store_lookup (manager->priv->apps, id); + priv = gsm_manager_get_instance_private (manager); + dup = (GsmApp *)gsm_store_lookup (priv->apps, id); if (dup != NULL) { g_debug ("GsmManager: not adding app: already added"); return; @@ -3831,7 +4043,7 @@ append_app (GsmManager *manager, return; } - gsm_store_add (manager->priv->apps, id, G_OBJECT (app)); + gsm_store_add (priv->apps, id, G_OBJECT (app)); } gboolean @@ -3840,15 +4052,17 @@ gsm_manager_add_autostart_app (GsmManager *manager, const char *provides) { GsmApp *app; + GsmManagerPrivate *priv; g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); g_return_val_if_fail (path != NULL, FALSE); + priv = gsm_manager_get_instance_private (manager); /* first check to see if service is already provided */ if (provides != NULL) { GsmApp *dup; - dup = (GsmApp *)gsm_store_find (manager->priv->apps, + dup = (GsmApp *)gsm_store_find (priv->apps, (GsmStoreFunc)_find_app_provides, (char *)provides); if (dup != NULL) { @@ -3909,8 +4123,11 @@ gsm_manager_is_session_running (GsmManager *manager, gboolean *running, GError **error) { + GsmManagerPrivate *priv; + g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); - *running = (manager->priv->phase == GSM_MANAGER_PHASE_RUNNING); + priv = gsm_manager_get_instance_private (manager); + *running = (priv->phase == GSM_MANAGER_PHASE_RUNNING); return TRUE; } diff --git a/mate-session/gsm-manager.h b/mate-session/gsm-manager.h index 4422f59..73e637e 100644 --- a/mate-session/gsm-manager.h +++ b/mate-session/gsm-manager.h @@ -27,26 +27,12 @@ #include "gsm-store.h" -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS #define GSM_TYPE_MANAGER (gsm_manager_get_type ()) -#define GSM_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSM_TYPE_MANAGER, GsmManager)) -#define GSM_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GSM_TYPE_MANAGER, GsmManagerClass)) -#define GSM_IS_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSM_TYPE_MANAGER)) -#define GSM_IS_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSM_TYPE_MANAGER)) -#define GSM_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSM_TYPE_MANAGER, GsmManagerClass)) +G_DECLARE_DERIVABLE_TYPE (GsmManager, gsm_manager, GSM, MANAGER, GObject) -typedef struct GsmManagerPrivate GsmManagerPrivate; - -typedef struct -{ - GObject parent; - GsmManagerPrivate *priv; -} GsmManager; - -typedef struct +struct _GsmManagerClass { GObjectClass parent_class; @@ -65,7 +51,7 @@ typedef struct const char *id); void (* inhibitor_removed) (GsmManager *manager, const char *id); -} GsmManagerClass; +}; //GsmManagerClass; typedef enum { /* gsm's own startup/initialization phase */ @@ -112,7 +98,6 @@ GType gsm_manager_error_get_type (void); #define GSM_MANAGER_TYPE_ERROR (gsm_manager_error_get_type ()) GQuark gsm_manager_error_quark (void); -GType gsm_manager_get_type (void); GsmManager * gsm_manager_new (GsmStore *client_store, gboolean failsafe); @@ -194,8 +179,6 @@ gboolean gsm_manager_is_session_running (GsmManager *mana gboolean *running, GError **error); -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* __GSM_MANAGER_H */ |