[gnome-session/wip/logout-fixes: 1/5] shell: deduplicate shell signal logic
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-session/wip/logout-fixes: 1/5] shell: deduplicate shell signal logic
- Date: Thu, 3 Mar 2016 21:39:48 +0000 (UTC)
commit 5f5e8200535fddd1042c587674d978f55bf6aff4
Author: Ray Strode <rstrode redhat com>
Date: Thu Mar 3 10:00:51 2016 -0500
shell: deduplicate shell signal logic
Anytime the shell sends us a signal about the end session dialog
we need to do the same things:
1) stop listening for new inhibitor updates
2) stop any queued operations for redisplaying the inhibitor dialog
3) emit the signal to on the gsm-shell object so other parts of the
code can listen for.
We currently have a separate signal handler for every signal, and
they all do they same thing. Well, they're supposed to anyway, some
bits are erroneously missing from some of the handlers.
This commit consolidates all the code, so we don't have it reimplemently
badly in several places.
gnome-session/gsm-manager.c | 66 ------------------------------
gnome-session/gsm-shell.c | 94 ++++++++++++------------------------------
2 files changed, 27 insertions(+), 133 deletions(-)
---
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
index 6e18f31..4b05e25 100644
--- a/gnome-session/gsm-manager.c
+++ b/gnome-session/gsm-manager.c
@@ -329,27 +329,6 @@ debug_clients (GsmManager *manager)
}
static gboolean
-_debug_inhibitor (const char *id,
- GsmInhibitor *inhibitor,
- GsmManager *manager)
-{
- 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)
-{
- gsm_store_foreach (manager->priv->inhibitors,
- (GsmStoreFunc)_debug_inhibitor,
- manager);
-}
-
-static gboolean
_find_by_cookie (const char *id,
GsmInhibitor *inhibitor,
guint *cookie_ap)
@@ -3075,51 +3054,6 @@ on_session_connection_closed (GDBusConnection *connection,
}
static gboolean
-inhibitor_has_bus_name (gpointer key,
- 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 void
-remove_inhibitors_for_connection (GsmManager *manager,
- const char *service_name)
-{
- RemoveClientData data;
- guint count;
-
- data.service_name = service_name;
- data.manager = manager;
-
- debug_inhibitors (manager);
-
- count = gsm_store_foreach_remove (manager->priv->inhibitors,
- (GsmStoreFunc)inhibitor_has_bus_name,
- &data);
- if (count > 0 &&
- manager->priv->phase == GSM_MANAGER_PHASE_QUERY_END_SESSION) {
- end_session_or_show_shell_dialog (manager);
- }
-}
-
-static gboolean
register_manager (GsmManager *manager)
{
GDBusConnection *connection;
diff --git a/gnome-session/gsm-shell.c b/gnome-session/gsm-shell.c
index 854ad30..ca2e291 100644
--- a/gnome-session/gsm-shell.c
+++ b/gnome-session/gsm-shell.c
@@ -328,23 +328,36 @@ on_open_finished (GObject *source,
}
static void
-on_end_session_dialog_closed (GsmShell *shell)
+on_end_session_dialog_dbus_signal (GDBusProxy *proxy,
+ gchar *sender_name,
+ gchar *signal_name,
+ GVariant *parameters,
+ GsmShell *shell)
{
- if (shell->priv->update_idle_id != 0) {
- g_source_remove (shell->priv->update_idle_id);
- shell->priv->update_idle_id = 0;
+ struct {
+ const char *name;
+ int index;
+ } signal_map[] = {
+ { "Closed", END_SESSION_DIALOG_CLOSED },
+ { "Canceled", END_SESSION_DIALOG_CANCELED },
+ { "ConfirmedLogout", END_SESSION_DIALOG_CONFIRMED_LOGOUT },
+ { "ConfirmedReboot", END_SESSION_DIALOG_CONFIRMED_REBOOT },
+ { "ConfirmedShutdown", END_SESSION_DIALOG_CONFIRMED_SHUTDOWN },
+ { NULL, -1 }
+ };
+ int signal_index = -1;
+ int i;
+
+ for (i = 0; signal_map[i].name != NULL; i++) {
+ if (g_strcmp0 (signal_map[i].name, signal_name) == 0) {
+ signal_index = signal_map[i].index;
+ break;
+ }
}
- g_signal_handlers_disconnect_by_func (shell->priv->inhibitors,
- G_CALLBACK (queue_end_session_dialog_update),
- shell);
-
- g_signal_emit (G_OBJECT (shell), signals[END_SESSION_DIALOG_CLOSED], 0);
-}
+ if (signal_index == -1)
+ return;
-static void
-on_end_session_dialog_canceled (GsmShell *shell)
-{
if (shell->priv->update_idle_id != 0) {
g_source_remove (shell->priv->update_idle_id);
shell->priv->update_idle_id = 0;
@@ -354,60 +367,7 @@ on_end_session_dialog_canceled (GsmShell *shell)
G_CALLBACK (queue_end_session_dialog_update),
shell);
- g_signal_emit (G_OBJECT (shell), signals[END_SESSION_DIALOG_CANCELED], 0);
-}
-
-static void
-on_end_session_dialog_confirmed_logout (GsmShell *shell)
-{
- if (shell->priv->update_idle_id != 0) {
- g_source_remove (shell->priv->update_idle_id);
- shell->priv->update_idle_id = 0;
- }
-
- g_signal_emit (G_OBJECT (shell), signals[END_SESSION_DIALOG_CONFIRMED_LOGOUT], 0);
-}
-
-static void
-on_end_session_dialog_confirmed_shutdown (GsmShell *shell)
-{
- if (shell->priv->update_idle_id != 0) {
- g_source_remove (shell->priv->update_idle_id);
- shell->priv->update_idle_id = 0;
- }
-
- g_signal_emit (G_OBJECT (shell), signals[END_SESSION_DIALOG_CONFIRMED_SHUTDOWN], 0);
-}
-
-static void
-on_end_session_dialog_confirmed_reboot (GsmShell *shell)
-{
- if (shell->priv->update_idle_id != 0) {
- g_source_remove (shell->priv->update_idle_id);
- shell->priv->update_idle_id = 0;
- }
-
- g_signal_emit (G_OBJECT (shell), signals[END_SESSION_DIALOG_CONFIRMED_REBOOT], 0);
-}
-
-static void
-on_end_session_dialog_dbus_signal (GDBusProxy *proxy,
- gchar *sender_name,
- gchar *signal_name,
- GVariant *parameters,
- GsmShell *shell)
-{
- if (g_strcmp0 (signal_name, "Closed") == 0) {
- on_end_session_dialog_closed (shell);
- } else if (g_strcmp0 (signal_name, "Canceled") == 0) {
- on_end_session_dialog_canceled (shell);
- } else if (g_strcmp0 (signal_name ,"ConfirmedLogout") == 0) {
- on_end_session_dialog_confirmed_logout (shell);
- } else if (g_strcmp0 (signal_name ,"ConfirmedReboot") == 0) {
- on_end_session_dialog_confirmed_reboot (shell);
- } else if (g_strcmp0 (signal_name ,"ConfirmedShutdown") == 0) {
- on_end_session_dialog_confirmed_shutdown (shell);
- }
+ g_signal_emit (G_OBJECT (shell), signals[signal_index], 0);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]