From: Dana Jansens Date: Wed, 25 Nov 2009 00:36:18 +0000 (-0500) Subject: Combine the Exit and SessionLogout actions X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=7f36e21ea9d86df5e6fa62d2888891ed957c4639;p=chaz%2Fopenbox Combine the Exit and SessionLogout actions Just "do the right thing" based on if you are connected to a session manager or not. --- diff --git a/Makefile.am b/Makefile.am index 6a6f1754..5c312c72 100644 --- a/Makefile.am +++ b/Makefile.am @@ -176,7 +176,6 @@ openbox_openbox_SOURCES = \ openbox/actions/if.c \ openbox/actions/kill.c \ openbox/actions/layer.c \ - openbox/actions/session.c \ openbox/actions/lower.c \ openbox/actions/maximize.c \ openbox/actions/move.c \ diff --git a/openbox/actions/all.c b/openbox/actions/all.c index c86c4281..47141ac6 100644 --- a/openbox/actions/all.c +++ b/openbox/actions/all.c @@ -9,7 +9,6 @@ void action_all_startup(void) action_reconfigure_startup(); action_exit_startup(); action_restart_startup(); - action_session_startup(); action_cyclewindows_startup(); action_breakchroot_startup(); action_close_startup(); diff --git a/openbox/actions/all.h b/openbox/actions/all.h index 4fbd6ff5..5f3f573f 100644 --- a/openbox/actions/all.h +++ b/openbox/actions/all.h @@ -10,7 +10,6 @@ void action_showdesktop_startup(); void action_reconfigure_startup(); void action_exit_startup(); void action_restart_startup(); -void action_session_startup(); void action_cyclewindows_startup(); void action_breakchroot_startup(); void action_close_startup(); diff --git a/openbox/actions/exit.c b/openbox/actions/exit.c index 875a181a..567926e1 100644 --- a/openbox/actions/exit.c +++ b/openbox/actions/exit.c @@ -1,6 +1,7 @@ #include "openbox/actions.h" #include "openbox/openbox.h" #include "openbox/prompt.h" +#include "openbox/session.h" #include "gettext.h" typedef struct { @@ -13,6 +14,7 @@ static gboolean run_func(ObActionsData *data, gpointer options); void action_exit_startup(void) { actions_register("Exit", setup_func, NULL, run_func, NULL, NULL); + actions_register("SessionLogout", setup_func, NULL, run_func, NULL, NULL); } static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) @@ -29,10 +31,18 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) return o; } +static void do_exit(void) +{ + if (session_connected()) + session_request_logout(FALSE); + else + ob_exit(0); +} + static gboolean prompt_cb(ObPrompt *p, gint result, gpointer data) { if (result) - ob_exit(0); + do_exit(); return TRUE; /* call the cleanup func */ } @@ -53,13 +63,19 @@ static gboolean run_func(ObActionsData *data, gpointer options) { _("Exit"), 1 } }; - p = prompt_new(_("Are you sure you want to exit Openbox?"), - _("Exit Openbox"), - answers, 2, 0, 0, prompt_cb, prompt_cleanup, NULL); + if (session_connected()) + p = prompt_new(_("Are you sure you want to log out?"), + _("Log Out"), + answers, 2, 0, 0, prompt_cb, prompt_cleanup, NULL); + else + p = prompt_new(_("Are you sure you want to exit Openbox?"), + _("Exit Openbox"), + answers, 2, 0, 0, prompt_cb, prompt_cleanup, NULL); + prompt_show(p, NULL, FALSE); } else - ob_exit(0); + do_exit(); return FALSE; } diff --git a/openbox/actions/session.c b/openbox/actions/session.c deleted file mode 100644 index 04ba96cb..00000000 --- a/openbox/actions/session.c +++ /dev/null @@ -1,78 +0,0 @@ -#include "openbox/actions.h" -#include "openbox/prompt.h" -#include "openbox/session.h" -#include "gettext.h" - -typedef struct { - gboolean prompt; - gboolean silent; -} Options; - -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static gboolean logout_func(ObActionsData *data, gpointer options); - -void action_session_startup(void) -{ - actions_register("SessionLogout", setup_func, NULL, logout_func, - NULL, NULL); -} - -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) -{ - xmlNodePtr n; - Options *o; - - o = g_new0(Options, 1); - o->prompt = TRUE; - - if ((n = parse_find_node("prompt", node))) - o->prompt = parse_bool(doc, n); - - return o; -} - -static gboolean prompt_cb(ObPrompt *p, gint result, gpointer data) -{ - Options *o = data; - if (result) { -#ifdef USE_SM - session_request_logout(o->silent); -#else - /* TRANSLATORS: Don't translate the word "SessionLogout" as it's the - name of the action you write in rc.xml */ - g_message(_("The SessionLogout action is not available since Openbox was built without session management support")); -#endif - } - return TRUE; /* call cleanup func */ -} - -static void prompt_cleanup(ObPrompt *p, gpointer data) -{ - g_free(data); - prompt_unref(p); -} - -/* Always return FALSE because its not interactive */ -static gboolean logout_func(ObActionsData *data, gpointer options) -{ - Options *o = options; - - if (o->prompt) { - Options *o2; - ObPrompt *p; - ObPromptAnswer answers[] = { - { _("Cancel"), 0 }, - { _("Log Out"), 1 } - }; - - o2 = g_memdup(o, sizeof(Options)); - p = prompt_new(_("Are you sure you want to log out?"), - _("Log Out"), - answers, 2, 0, 0, prompt_cb, prompt_cleanup, o2); - prompt_show(p, NULL, FALSE); - } - else - prompt_cb(NULL, 1, o); - - return FALSE; -} diff --git a/openbox/session.c b/openbox/session.c index 811592ec..14018478 100644 --- a/openbox/session.c +++ b/openbox/session.c @@ -34,6 +34,7 @@ void session_startup(gint argc, gchar **argv) {} void session_shutdown(gboolean permanent) {} GList* session_state_find(struct _ObClient *c) { return NULL; } void session_request_logout(gboolean silent) {} +gboolean session_connected(void) { return FALSE; } #else #include "debug.h" @@ -155,6 +156,11 @@ void session_shutdown(gboolean permanent) } } +gboolean session_connected(void) +{ + return !!sm_conn; +} + /*! Connect to the session manager and set up our callback functions */ static gboolean session_connect() { diff --git a/openbox/session.h b/openbox/session.h index e2307a6f..f37e2111 100644 --- a/openbox/session.h +++ b/openbox/session.h @@ -55,4 +55,6 @@ GList* session_state_find(struct _ObClient *c); void session_request_logout(gboolean silent); +gboolean session_connected(void); + #endif