all repos — openbox @ 7f36e21ea9d86df5e6fa62d2888891ed957c4639

openbox fork - make it a bit more like ryudo

Combine the Exit and SessionLogout actions

Just "do the right thing" based on if you are connected to a session manager
or not.
Dana Jansens danakj@orodu.net
commit

7f36e21ea9d86df5e6fa62d2888891ed957c4639

parent

ada5de28f71efaa5584709673cc49cdb3b703299

M Makefile.amMakefile.am

@@ -176,7 +176,6 @@ openbox/actions/iconify.c \

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 \
M openbox/actions/all.copenbox/actions/all.c

@@ -9,7 +9,6 @@ action_showdesktop_startup();

action_reconfigure_startup(); action_exit_startup(); action_restart_startup(); - action_session_startup(); action_cyclewindows_startup(); action_breakchroot_startup(); action_close_startup();
M openbox/actions/all.hopenbox/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();
M openbox/actions/exit.copenbox/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 @@

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 @@

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 @@ { _("Cancel"), 0 },

{ _("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; }
D openbox/actions/session.c

@@ -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; -}
M openbox/session.copenbox/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"

@@ -153,6 +154,11 @@ session_saved_state = g_list_delete_link(session_saved_state,

session_saved_state); } } +} + +gboolean session_connected(void) +{ + return !!sm_conn; } /*! Connect to the session manager and set up our callback functions */
M openbox/session.hopenbox/session.h

@@ -55,4 +55,6 @@ GList* session_state_find(struct _ObClient *c);

void session_request_logout(gboolean silent); +gboolean session_connected(void); + #endif