Enlightenment CVS committal
Author : devilhorns
Project : e17
Module : apps/e
Dir : e17/apps/e/src/bin
Modified Files:
e_actions.c e_int_border_menu.c
Log Message:
Path from morlenxus to add a dialog for the 'kill' command so windows do not
accidentally get killed.
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_actions.c,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -3 -r1.91 -r1.92
--- e_actions.c 27 Feb 2007 16:16:03 -0000 1.91
+++ e_actions.c 4 Mar 2007 07:03:10 -0000 1.92
@@ -249,8 +249,41 @@
}
/***************************************************************************/
+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 @@
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);
}
/***************************************************************************/
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_border_menu.c,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -3 -r1.57 -r1.58
--- e_int_border_menu.c 27 Feb 2007 16:16:03 -0000 1.57
+++ e_int_border_menu.c 4 Mar 2007 07:03:10 -0000 1.58
@@ -459,11 +459,14 @@
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
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs