diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
index d32f76648..46b4cf3dc 100644
--- a/src/bin/Makefile.am
+++ b/src/bin/Makefile.am
@@ -154,7 +154,8 @@ e_widget_preview.h \
e_int_config_paths.h \
e_int_shelf_config.h \
e_int_config_shelf.h \
-e_int_gadcon_config.h
+e_int_gadcon_config.h \
+e_confirm_dialog.h
enlightenment_src = \
e_user.c \
@@ -290,6 +291,7 @@ e_int_config_paths.c \
e_int_shelf_config.c \
e_int_config_shelf.c \
e_int_gadcon_config.c \
+e_confirm_dialog.c \
$(ENLIGHTENMENTHEADERS)
enlightenment_SOURCES = \
diff --git a/src/bin/e_border.c b/src/bin/e_border.c
index e179a23e3..b43dd116c 100644
--- a/src/bin/e_border.c
+++ b/src/bin/e_border.c
@@ -67,6 +67,8 @@ static void _e_border_event_border_zone_set_free(void *data, void *ev);
static void _e_border_event_border_desk_set_free(void *data, void *ev);
static void _e_border_event_border_stack_free(void *data, void *ev);
static void _e_border_event_border_icon_change_free(void *data, void *ev);
+static void _e_border_event_border_focus_in_free(void *data, void *ev);
+static void _e_border_event_border_focus_out_free(void *data, void *ev);
static void _e_border_event_border_resize_free(void *data, void *ev);
static void _e_border_event_border_move_free(void *data, void *ev);
static void _e_border_event_border_show_free(void *data, void *ev);
@@ -127,6 +129,8 @@ EAPI int E_EVENT_BORDER_STICK = 0;
EAPI int E_EVENT_BORDER_UNSTICK = 0;
EAPI int E_EVENT_BORDER_STACK = 0;
EAPI int E_EVENT_BORDER_ICON_CHANGE = 0;
+EAPI int E_EVENT_BORDER_FOCUS_IN = 0;
+EAPI int E_EVENT_BORDER_FOCUS_OUT = 0;
#define GRAV_SET(bd, grav) \
ecore_x_window_gravity_set(bd->bg_win, grav); \
@@ -177,6 +181,8 @@ e_border_init(void)
E_EVENT_BORDER_UNSTICK = ecore_event_type_new();
E_EVENT_BORDER_STACK = ecore_event_type_new();
E_EVENT_BORDER_ICON_CHANGE = ecore_event_type_new();
+ E_EVENT_BORDER_FOCUS_IN = ecore_event_type_new();
+ E_EVENT_BORDER_FOCUS_OUT = ecore_event_type_new();
return 1;
}
@@ -1280,13 +1286,31 @@ e_border_focus_set(E_Border *bd, int focus, int set)
#endif
if (bd->focused)
{
+ E_Event_Border_Focus_In *ev;
+
focused = bd;
//printf("set focused to %p\n", focused);
+
+ ev = calloc(1, sizeof(E_Event_Border_Focus_In));
+ ev->border = bd;
+ e_object_ref(E_OBJECT(bd));
+
+ ecore_event_add(E_EVENT_BORDER_FOCUS_IN, ev,
+ _e_border_event_border_focus_in_free, NULL);
}
else if ((!bd->focused) && (focused == bd))
{
+ E_Event_Border_Focus_Out *ev;
+
focused = NULL;
//printf("set focused to %p\n", focused);
+
+ ev = calloc(1, sizeof(E_Event_Border_Focus_Out));
+ ev->border = bd;
+ e_object_ref(E_OBJECT(bd));
+
+ ecore_event_add(E_EVENT_BORDER_FOCUS_OUT, ev,
+ _e_border_event_border_focus_out_free, NULL);
}
}
@@ -6311,6 +6335,26 @@ _e_border_event_border_icon_change_free(void *data, void *ev)
free(e);
}
+static void
+_e_border_event_border_focus_in_free(void *data, void *ev)
+{
+ E_Event_Border_Focus_In *e;
+
+ e = ev;
+ e_object_unref(E_OBJECT(e->border));
+ free(e);
+}
+
+static void
+_e_border_event_border_focus_out_free(void *data, void *ev)
+{
+ E_Event_Border_Focus_Out *e;
+
+ e = ev;
+ e_object_unref(E_OBJECT(e->border));
+ free(e);
+}
+
static void
_e_border_zone_update(E_Border *bd)
{
diff --git a/src/bin/e_border.h b/src/bin/e_border.h
index 38f023b39..48081ff46 100644
--- a/src/bin/e_border.h
+++ b/src/bin/e_border.h
@@ -84,6 +84,8 @@ typedef struct _E_Event_Border_Zone_Set E_Event_Border_Zone_Set;
typedef struct _E_Event_Border_Desk_Set E_Event_Border_Desk_Set;
typedef struct _E_Event_Border_Stack E_Event_Border_Stack;
typedef struct _E_Event_Border_Icon_Change E_Event_Border_Icon_Change;
+typedef struct _E_Event_Border_Focus_In E_Event_Border_Focus_In;
+typedef struct _E_Event_Border_Focus_Out E_Event_Border_Focus_Out;
#else
#ifndef E_BORDER_H
@@ -484,6 +486,16 @@ struct _E_Event_Border_Icon_Change
E_Border *border;
};
+struct _E_Event_Border_Focus_In
+{
+ E_Border *border;
+};
+
+struct _E_Event_Border_Focus_Out
+{
+ E_Border *border;
+};
+
EAPI int e_border_init(void);
EAPI int e_border_shutdown(void);
@@ -573,6 +585,8 @@ extern EAPI int E_EVENT_BORDER_ZONE_SET;
extern EAPI int E_EVENT_BORDER_DESK_SET;
extern EAPI int E_EVENT_BORDER_STACK;
extern EAPI int E_EVENT_BORDER_ICON_CHANGE;
+extern EAPI int E_EVENT_BORDER_FOCUS_IN;
+extern EAPI int E_EVENT_BORDER_FOCUS_OUT;
#endif
#endif
diff --git a/src/bin/e_confirm_dialog.c b/src/bin/e_confirm_dialog.c
new file mode 100644
index 000000000..dea5e8645
--- /dev/null
+++ b/src/bin/e_confirm_dialog.c
@@ -0,0 +1,99 @@
+/*
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
+#include "e.h"
+
+typedef struct _E_Confirm_Dialog E_Confirm_Dialog;
+
+struct _E_Confirm_Dialog
+{
+ struct
+ {
+ void *data;
+ void (*func)(void *data);
+ } yes;
+
+ struct
+ {
+ void *data;
+ void (*func)(void *data);
+ } no;
+ E_Dialog *dia;
+};
+
+
+/******** private function definitions **********/
+static void _e_confirm_dialog_delete(E_Win *win);
+static void _e_confirm_dialog_yes(void *data, E_Dialog *dia);
+static void _e_confirm_dialog_no(void *data, E_Dialog *dia);
+
+
+/********** externally accesible functions ****************/
+EAPI void
+e_confirm_dialog_show(const char *title, const char *icon, const char *text,
+ const char *button_text, const char *button2_text, void (*func)(void *data),
+ void (*func2)(void *data), void *data, void *data2)
+{
+ E_Confirm_Dialog *cd;
+ E_Dialog *dia;
+
+ cd = E_NEW(E_Confirm_Dialog, 1);
+ cd->yes.func = func;
+ cd->yes.data = data;
+ cd->no.func = func2;
+ cd->no.data = data2;
+
+ dia = e_dialog_new(e_container_current_get(e_manager_current_get()));
+ if (!dia)
+ {
+ E_FREE(cd);
+ return;
+ }
+ dia->data = cd;
+ cd->dia = dia;
+
+ e_win_delete_callback_set(dia->win, _e_confirm_dialog_delete);
+
+ if (title) e_dialog_title_set(dia, title);
+ if (icon) e_dialog_icon_set(dia, icon, 64);
+ if (text) e_dialog_text_set(dia, text);
+
+ e_dialog_button_add(dia, !button_text ? _("Yes") : button_text, NULL, _e_confirm_dialog_yes, cd);
+ e_dialog_button_add(dia, !button2_text ? _("No") : button2_text, NULL, _e_confirm_dialog_no, cd);
+
+ e_dialog_button_focus_num(dia, 1);
+ e_win_centered_set(dia->win, 1);
+ e_dialog_show(dia);
+}
+
+/********* private function bodies ************/
+static void
+_e_confirm_dialog_yes(void *data, E_Dialog *dia)
+{
+ E_Confirm_Dialog *cd;
+
+ cd = data;
+ if (cd->yes.func) cd->yes.func(cd->yes.data);
+ _e_confirm_dialog_delete(cd->dia->win);
+}
+static void
+_e_confirm_dialog_no(void *data, E_Dialog *dia)
+{
+ E_Confirm_Dialog *cd;
+
+ cd = data;
+ if (cd->no.func) cd->no.func(cd->no.data);
+ _e_confirm_dialog_delete(cd->dia->win);
+}
+static void
+_e_confirm_dialog_delete(E_Win *win)
+{
+ E_Dialog *dia;
+ E_Confirm_Dialog *cd;
+
+ dia = win->data;
+ cd = dia->data;
+
+ e_object_del(E_OBJECT(dia));
+ free(cd);
+}
diff --git a/src/bin/e_confirm_dialog.h b/src/bin/e_confirm_dialog.h
new file mode 100644
index 000000000..251d7654b
--- /dev/null
+++ b/src/bin/e_confirm_dialog.h
@@ -0,0 +1,24 @@
+/*
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
+#ifdef E_TYPEDEF
+
+#else
+#ifndef E_CONFIRM_DIALOG_H
+#define E_CONFIRM_DIALOG_H
+
+/*
+ * @title - dialog title
+ * @icon - dialog icon
+ * @text - the text show in the dialog
+ * @button_text - "yes" button text
+ * @button2_text - "no" button text
+ * func - the function is called if yes is pressed
+ * func2 - the function is called if no is pressed
+ * data - the pointer passed to func
+ * data2 - the pointer passed to func2
+ */
+EAPI void e_confirm_dialog_show(const char *title, const char *icon, const char *text, const char *button_text, const char *button2_text, void (*func)(void *data), void (*func2)(void *data), void *data, void *data2);
+
+#endif
+#endif
diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h
index 7c4d97b53..fca979129 100644
--- a/src/bin/e_includes.h
+++ b/src/bin/e_includes.h
@@ -135,3 +135,4 @@
#include "e_int_shelf_config.h"
#include "e_int_config_shelf.h"
#include "e_int_gadcon_config.h"
+#include "e_confirm_dialog.h"
diff --git a/src/bin/e_int_config_keybindings.c b/src/bin/e_int_config_keybindings.c
index bae087ef7..3dc1e571c 100644
--- a/src/bin/e_int_config_keybindings.c
+++ b/src/bin/e_int_config_keybindings.c
@@ -34,7 +34,7 @@ static void _e_keybinding_binding_ilist_cb_change(void *data, Evas_Object *o
static void _e_keybinding_default_keybinding_settings(E_Config_Dialog_Data *cfdata);
static void _e_keybinding_keybind_cb_del_keybinding(void *data, void *data2);
-static void _e_keybinding_keybind_delete_keybinding(E_Config_Dialog_Data *cfdata);
+//static void _e_keybinding_keybind_delete_keybinding(E_Config_Dialog_Data *cfdata);
static void _e_keybinding_keybind_cb_add_keybinding(void *data, void *data2);
@@ -105,6 +105,8 @@ struct _E_Config_Dialog_Data
Evas_Object *bind_context[E_BINDING_CONTEXT_NUMBER];
Evas_Object *key_action;
Evas_Object *key_params;
+
+ E_Dialog *confirm_dialog;
} gui;
struct {
@@ -1035,15 +1037,24 @@ _e_keybinding_update_action_param_entries(E_Config_Dialog_Data *cfdata)
}
static void
-_e_keybinding_keybind_cb_del_keybinding(void *data, void *data2)
+_e_keybinding_cb_confirm_dialog_yes(void *data)
{
- E_Config_Dialog_Data *cfdata = data;
+ E_Config_Binding_Key *eb;
+ E_Config_Dialog_Data *cfdata;
- if (!cfdata) return;
- if (!cfdata->current_act && cfdata->current_act_selector < 0)
- return;
+ if (!(cfdata = data))
+ if ((!cfdata->current_act) && (cfdata->current_act_selector < 0)) return;
- _e_keybinding_keybind_delete_keybinding(cfdata);
+ eb = evas_list_nth(cfdata->current_act->key_bindings, cfdata->current_act_selector);
+ cfdata->current_act->key_bindings = evas_list_remove(cfdata->current_act->key_bindings, eb);
+
+ if (eb->key) evas_stringshare_del(eb->key);
+ if (eb->action) evas_stringshare_del(eb->action);
+ if (eb->params) evas_stringshare_del(eb->params);
+ E_FREE(eb);
+
+ if (cfdata->current_act_selector >= evas_list_count(cfdata->current_act->key_bindings))
+ cfdata->current_act_selector = evas_list_count(cfdata->current_act->key_bindings) - 1;
_e_keybinding_update_binding_list(cfdata);
e_widget_ilist_go(cfdata->gui.binding_ilist);
@@ -1060,30 +1071,23 @@ _e_keybinding_keybind_cb_del_keybinding(void *data, void *data2)
//cfdata->changed = 1;
}
+
static void
-_e_keybinding_keybind_delete_keybinding(E_Config_Dialog_Data *cfdata)
+_e_keybinding_keybind_cb_del_keybinding(void *data, void *data2)
{
- E_Config_Binding_Key *eb;
+ char buf[4096];
+ E_Config_Dialog_Data *cfdata = data;
if (!cfdata) return;
- if (!cfdata->current_act && cfdata->current_act_selector < 0)
- return;
- eb = evas_list_nth(cfdata->current_act->key_bindings, cfdata->current_act_selector);
- cfdata->current_act->key_bindings = evas_list_remove(cfdata->current_act->key_bindings, eb);
+ snprintf(buf, sizeof(buf), _("You requested to delte \"%s\" keybinding.
"
+ "
"
+ "Are you sure you want to delete it?"),
+ e_widget_ilist_selected_label_get(cfdata->gui.binding_ilist));
- if (!evas_list_count(cfdata->current_act->key_bindings))
- {
- evas_list_free(cfdata->current_act->key_bindings);
- cfdata->current_act->key_bindings = NULL;
- }
- if (eb->key) evas_stringshare_del(eb->key);
- if (eb->action) evas_stringshare_del(eb->action);
- if (eb->params) evas_stringshare_del(eb->params);
- E_FREE(eb);
+ e_confirm_dialog_show(_("Delete?"), "enlightenment/exit", buf, NULL, NULL,
+ _e_keybinding_cb_confirm_dialog_yes, NULL, cfdata, NULL);
- if (cfdata->current_act_selector >= evas_list_count(cfdata->current_act->key_bindings))
- cfdata->current_act_selector = evas_list_count(cfdata->current_act->key_bindings) - 1;
}
static void
_e_keybinding_update_binding_ilist_cur_selection_icon(E_Config_Dialog_Data *cfdata)
diff --git a/src/bin/e_int_config_shelf.c b/src/bin/e_int_config_shelf.c
index 08e2004ec..5133d2d37 100644
--- a/src/bin/e_int_config_shelf.c
+++ b/src/bin/e_int_config_shelf.c
@@ -144,7 +144,7 @@ _cb_add(void *data, void *data2)
e_widget_ilist_selected_set(cfdata->ilist, e_widget_ilist_count(cfdata->ilist) - 1);
}
-static void
+/*static void
_cb_confirm_dialog_no(void *data, E_Dialog *dia)
{
E_Config_Dialog_Data *cfdata;
@@ -185,8 +185,31 @@ _cb_confirm_dialog_delete(E_Win *win)
E_Config_Dialog_Data *cfdata;
cfdata = ((E_Dialog *)win->data)->data;
_cb_confirm_dialog_no(cfdata, cfdata->confirm_dialog);
-}
+}*/
+static void
+_cb_confirm_dialog_yes(void *data)
+{
+ E_Shelf *es;
+ E_Config_Shelf *cfg;
+ E_Config_Dialog_Data *cfdata;
+
+ cfdata = data;
+ es = evas_list_nth(e_shelf_list(), e_widget_ilist_selected_get(cfdata->ilist));
+ if (es)
+ {
+ cfg = es->cfg;
+ e_object_del(E_OBJECT(es));
+
+ e_config->shelves = evas_list_remove(e_config->shelves, cfg);
+ if (cfg->name) evas_stringshare_del(cfg->name);
+ if (cfg->style) evas_stringshare_del(cfg->style);
+ E_FREE(cfg);
+ e_config_save_queue();
+
+ _ilist_fill(cfdata);
+ }
+}
static void
_cb_del(void *data, void *data2)
{
@@ -194,26 +217,13 @@ _cb_del(void *data, void *data2)
E_Config_Dialog_Data *cfdata;
cfdata = data;
- if (cfdata->confirm_dialog) e_object_del(E_OBJECT(cfdata->confirm_dialog));
- cfdata->confirm_dialog = e_dialog_new(e_container_current_get(e_manager_current_get()));
- if (!cfdata->confirm_dialog) return;
- cfdata->confirm_dialog->data = cfdata;
- e_win_delete_callback_set(cfdata->confirm_dialog->win, _cb_confirm_dialog_delete);
- e_dialog_title_set(cfdata->confirm_dialog, _("Are you sure you want to delete this shelf?"));
-
snprintf(buf, sizeof(buf), _("You requested to delete \"%s\".
"
"
"
"Are you sure you want to delete this shelf?"),
e_widget_ilist_selected_label_get(cfdata->ilist));
- e_dialog_text_set(cfdata->confirm_dialog, buf);
- e_dialog_icon_set(cfdata->confirm_dialog, "enlightenment/exit", 64);
- e_dialog_button_add(cfdata->confirm_dialog, _("Yes"), NULL, _cb_confirm_dialog_yes, cfdata);
- e_dialog_button_add(cfdata->confirm_dialog, _("No"), NULL, _cb_confirm_dialog_no, cfdata);
-
- e_dialog_button_focus_num(cfdata->confirm_dialog, 1);
- e_win_centered_set(cfdata->confirm_dialog->win, 1);
- e_dialog_show(cfdata->confirm_dialog);
+ e_confirm_dialog_show(_("Are you sure you want to delete this shelf?"), "enlightenment/exit",
+ buf, NULL, NULL, _cb_confirm_dialog_yes, NULL, cfdata, NULL);
}
static void
diff --git a/src/bin/e_shelf.c b/src/bin/e_shelf.c
index 442cbc135..38f00b0b6 100644
--- a/src/bin/e_shelf.c
+++ b/src/bin/e_shelf.c
@@ -735,11 +735,11 @@ _e_shelf_cb_menu_contents(void *data, E_Menu *m, E_Menu_Item *mi)
}
static void
-_e_shelf_cb_menu_delete(void *data, E_Menu *m, E_Menu_Item *mi)
+_e_shelf_cb_confirm_dialog_yes(void *data)
{
E_Config_Shelf *cfg;
E_Shelf *es;
-
+
es = data;
cfg = es->cfg;
e_object_del(E_OBJECT(es));
@@ -751,6 +751,17 @@ _e_shelf_cb_menu_delete(void *data, E_Menu *m, E_Menu_Item *mi)
e_config_save_queue();
}
+
+static void
+_e_shelf_cb_menu_delete(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+ e_confirm_dialog_show(_("Are you sure you want to delete this shelf?"), "enlightenment/exit",
+ _("You requested to delete this shelf.
"
+ "
"
+ "Are you sure you want to delete it?"), NULL, NULL,
+ _e_shelf_cb_confirm_dialog_yes, NULL, data, NULL);
+}
+
static void
_e_shelf_cb_menu_post(void *data, E_Menu *m)
{