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 \
action_reconfigure_startup();
action_exit_startup();
action_restart_startup();
- action_session_startup();
action_cyclewindows_startup();
action_breakchroot_startup();
action_close_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();
#include "openbox/actions.h"
#include "openbox/openbox.h"
#include "openbox/prompt.h"
+#include "openbox/session.h"
#include "gettext.h"
typedef struct {
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)
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 */
}
{ _("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;
}
+++ /dev/null
-#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;
-}
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"
}
}
+gboolean session_connected(void)
+{
+ return !!sm_conn;
+}
+
/*! Connect to the session manager and set up our callback functions */
static gboolean session_connect()
{
void session_request_logout(gboolean silent);
+gboolean session_connected(void);
+
#endif