add a boolean <prompt> option to the Exit action, which will ask before exiting openbox

This commit is contained in:
Dana Jansens 2008-02-27 20:43:28 -05:00
parent 94e339496c
commit 2c8bc0c904
2 changed files with 44 additions and 5 deletions

View file

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

View file

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