Path from morlenxus to add a dialog for the 'kill' command so windows do not

accidentally get killed.


SVN revision: 28553
This commit is contained in:
Christopher Michael 2007-03-04 07:03:10 +00:00
parent aaebfe05c2
commit d752f24482
2 changed files with 63 additions and 4 deletions

View File

@ -249,8 +249,41 @@ ACT_FN_GO(window_close)
}
/***************************************************************************/
static E_Dialog *kill_dialog = NULL;
static void
_e_actions_cb_kill_dialog_ok(void *data, E_Dialog *dia)
{
E_Object *obj;
obj = data;
e_object_del(E_OBJECT(kill_dialog));
kill_dialog = NULL;
if ((!((E_Border *)obj)->lock_close) && (!((E_Border *)obj)->internal))
e_border_act_kill_begin((E_Border *)obj);
}
static void
_e_actions_cb_kill_dialog_cancel(void *data, E_Dialog *dia)
{
e_object_del(E_OBJECT(kill_dialog));
kill_dialog = NULL;
}
static void
_e_actions_cb_kill_dialog_delete(E_Win *win)
{
E_Dialog *dia;
dia = win->data;
_e_actions_cb_kill_dialog_cancel(NULL, dia);
}
ACT_FN_GO(window_kill)
{
E_Border *bd;
char dialog_text[1024];
if (!obj) obj = E_OBJECT(e_border_focused_get());
if (!obj) return;
if (obj->type != E_BORDER_TYPE)
@ -258,8 +291,31 @@ ACT_FN_GO(window_kill)
obj = E_OBJECT(e_border_focused_get());
if (!obj) return;
}
if (!((E_Border *)obj)->lock_close)
e_border_act_kill_begin((E_Border *)obj);
bd = (E_Border *)obj;
snprintf(dialog_text, sizeof(dialog_text),
"You are about to kill %s.<br><br>"
"Please keep in mind that all data of this window,<br>"
"which has not been saved yet will be lost!<br><br>"
"Are you sure you want to kill this window?",
bd->client.icccm.name);
if (kill_dialog) e_object_del(E_OBJECT(kill_dialog));
kill_dialog = e_dialog_new(e_container_current_get(e_manager_current_get()),
"E", "_kill_dialog");
if (!kill_dialog) return;
e_win_delete_callback_set(kill_dialog->win,
_e_actions_cb_kill_dialog_delete);
e_dialog_title_set(kill_dialog,
_("Are you sure you want to kill this window?"));
e_dialog_text_set(kill_dialog, _(dialog_text));
e_dialog_icon_set(kill_dialog, "enlightenment/exit", 64);
e_dialog_button_add(kill_dialog, _("Yes"), NULL,
_e_actions_cb_kill_dialog_ok, obj);
e_dialog_button_add(kill_dialog, _("No"), NULL,
_e_actions_cb_kill_dialog_cancel, NULL);
e_dialog_button_focus_num(kill_dialog, 1);
e_win_centered_set(kill_dialog->win, 1);
e_dialog_show(kill_dialog);
}
/***************************************************************************/

View File

@ -459,11 +459,14 @@ _e_border_menu_cb_iconify(void *data, E_Menu *m, E_Menu_Item *mi)
static void
_e_border_menu_cb_kill(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Action *a;
E_Border *bd;
bd = data;
if ((!bd->lock_close) && (!bd->internal))
e_border_act_kill_begin(bd);
if ((bd->lock_close) || (bd->internal)) return;
a = e_action_find("window_kill");
if ((a) && (a->func.go)) a->func.go(NULL, NULL);
}
static void