summaryrefslogtreecommitdiff
path: root/openbox/actions/exit.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2008-02-27 21:07:10 -0500
committerDana Jansens <danakj@orodu.net>2008-02-27 21:07:10 -0500
commit8bd02bf4b883fa369dd68df2053974407024ddaf (patch)
tree7c765a1d4faa2812fe1993f5ec3ca45ee21ea005 /openbox/actions/exit.c
parent26cc41f6c6187dabd5c7ee4365c8fa44751009e5 (diff)
parentfbacc56d9d0792631b5160df1244ee10214db37d (diff)
Merge branch 'backport' into work
Conflicts: openbox/actions/execute.c
Diffstat (limited to 'openbox/actions/exit.c')
-rw-r--r--openbox/actions/exit.c48
1 files changed, 43 insertions, 5 deletions
diff --git a/openbox/actions/exit.c b/openbox/actions/exit.c
index 662c984a..f5af8a12 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(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(xmlNodePtr node)
+{
+ xmlNodePtr n;
+ Options *o;
+
+ o = g_new0(Options, 1);
+
+ if ((n = obt_parse_find_node(node, "prompt")))
+ o->prompt = obt_parse_node_bool(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;
}