summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2009-11-24 19:36:18 -0500
committerDana Jansens <danakj@orodu.net>2009-11-24 19:36:18 -0500
commit7f36e21ea9d86df5e6fa62d2888891ed957c4639 (patch)
tree7835746fdab5d9e95fc6ca0d1b51169579baa3ae
parentada5de28f71efaa5584709673cc49cdb3b703299 (diff)
Combine the Exit and SessionLogout actions
Just "do the right thing" based on if you are connected to a session manager or not.
-rw-r--r--Makefile.am1
-rw-r--r--openbox/actions/all.c1
-rw-r--r--openbox/actions/all.h1
-rw-r--r--openbox/actions/exit.c26
-rw-r--r--openbox/actions/session.c78
-rw-r--r--openbox/session.c6
-rw-r--r--openbox/session.h2
7 files changed, 29 insertions, 86 deletions
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