summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openbox/actions/exit.c48
-rw-r--r--po/POTFILES.in1
2 files changed, 44 insertions, 5 deletions
diff --git a/openbox/actions/exit.c b/openbox/actions/exit.c
index 662c984a..8430729b 100644
--- a/openbox/actions/exit.c
+++ b/openbox/actions/exit.c
@@ -1,20 +1,58 @@
#include "openbox/actions.h"
#include "openbox/openbox.h"
+#include "openbox/prompt.h"
+#include "gettext.h"
+typedef struct {
+ gboolean prompt;
+} Options;
+
+static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
static gboolean run_func(ObActionsData *data, gpointer options);
void action_exit_startup(void)
{
- actions_register("Exit",
- NULL, NULL,
- run_func,
- NULL, NULL);
+ actions_register("Exit", setup_func, NULL, run_func, NULL, NULL);
+}
+
+static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+{
+ xmlNodePtr n;
+ Options *o;
+
+ o = g_new0(Options, 1);
+
+ if ((n = parse_find_node("prompt", node)))
+ o->prompt = parse_bool(doc, n);
+
+ return o;
+}
+
+static void prompt_cb(ObPrompt *p, gint result, gpointer data)
+{
+ if (result)
+ ob_exit(0);
+ prompt_unref(p);
}
/* Always return FALSE because its not interactive */
static gboolean run_func(ObActionsData *data, gpointer options)
{
- ob_exit(0);
+ Options *o = options;
+
+ if (o->prompt) {
+ ObPrompt *p;
+ ObPromptAnswer answers[] = {
+ { _("No"), 0 },
+ { _("Yes"), 1 }
+ };
+
+ p = prompt_new(_("Are you sure you want to exit Openbox?"),
+ answers, 2, 0, 0, prompt_cb, NULL);
+ prompt_show(p, NULL, FALSE);
+ }
+ else
+ ob_exit(0);
return FALSE;
}
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 294127c8..85938dee 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,6 +1,7 @@
# List of source files containing translatable strings.
openbox/actions.c
openbox/actions/execute.c
+openbox/actions/exit.c
openbox/client.c
openbox/client_list_combined_menu.c
openbox/client_list_menu.c