diff --git a/src/bin/e_config_dialog.c b/src/bin/e_config_dialog.c index e563dae84..52f471605 100644 --- a/src/bin/e_config_dialog.c +++ b/src/bin/e_config_dialog.c @@ -16,6 +16,7 @@ static void _e_config_dialog_cb_changed(void *data, Evas_Object *obj); static void _e_config_dialog_cb_close(void *data, E_Dialog *dia); /* local subsystem globals */ +static Evas_List *_e_config_dialog_list = NULL; /* externally accessible functions */ @@ -70,15 +71,53 @@ e_config_dialog_new(E_Container *con, const char *title, const char *name, const _e_config_dialog_go(cfd, E_CONFIG_DIALOG_CFDATA_TYPE_BASIC); break; } - + _e_config_dialog_list = evas_list_append(_e_config_dialog_list, cfd); + return cfd; } +EAPI int +e_config_dialog_find(const char *name, const char *class) +{ + Evas_List *l; + E_Config_Dialog *cfd; + + for (l = _e_config_dialog_list; l; l = l->next) + { + cfd = l->data; + + if ((!e_util_strcmp(name, cfd->name)) && + (!e_util_strcmp(class, cfd->class))) + { + E_Zone *z; + + e_border_uniconify(cfd->dia->win->border); + e_dialog_show(cfd->dia); + e_win_raise(cfd->dia->win); + z = e_util_zone_current_get(e_manager_current_get()); + if (z->container == cfd->dia->win->border->zone->container) + e_border_desk_set(cfd->dia->win->border, e_desk_current_get(z)); + else + { + if (!cfd->dia->win->border->sticky) + e_desk_show(cfd->dia->win->border->desk); + ecore_x_pointer_warp(cfd->dia->win->border->zone->container->win, + cfd->dia->win->border->zone->x + (cfd->dia->win->border->zone->w / 2), + cfd->dia->win->border->zone->y + (cfd->dia->win->border->zone->h / 2)); + } + e_border_unshade(cfd->dia->win->border, E_DIRECTION_DOWN); + return 1; + } + } + return 0; +} + /* local subsystem functions */ static void _e_config_dialog_free(E_Config_Dialog *cfd) { + _e_config_dialog_list = evas_list_remove(_e_config_dialog_list, cfd); if (cfd->auto_apply_timer) _e_config_dialog_cb_auto_apply_timer(cfd); if (cfd->title) evas_stringshare_del(cfd->title); if (cfd->name) evas_stringshare_del(cfd->name); diff --git a/src/bin/e_config_dialog.h b/src/bin/e_config_dialog.h index c806de9ed..1daba2a88 100644 --- a/src/bin/e_config_dialog.h +++ b/src/bin/e_config_dialog.h @@ -53,6 +53,7 @@ struct _E_Config_Dialog }; EAPI E_Config_Dialog *e_config_dialog_new(E_Container *con, const char *title, const char *name, const char *class, const char *icon, int icon_size, E_Config_Dialog_View *view, void *data); - +EAPI int e_config_dialog_find(const char *name, const char *class); + #endif #endif diff --git a/src/bin/e_configure.c b/src/bin/e_configure.c index 438a4db80..fe34d6b7d 100644 --- a/src/bin/e_configure.c +++ b/src/bin/e_configure.c @@ -14,12 +14,37 @@ static void _e_configure_cb_resize(E_Win *win); static void _e_configure_cb_standard(void *data); static void _e_configure_cb_close(void *data, void *data2); +static E_Configure *_e_configure = NULL; + EAPI E_Configure * e_configure_show(E_Container *con) { E_Configure *eco; E_Manager *man; Evas_Coord ew, eh, mw, mh; + + if (_e_configure) + { + E_Zone *z; + + eco = _e_configure; + z = e_util_zone_current_get(e_manager_current_get()); + e_border_uniconify(eco->win->border); + e_win_show(eco->win); + e_win_raise(eco->win); + if (z->container == eco->win->border->zone->container) + e_border_desk_set(eco->win->border, e_desk_current_get(z)); + else + { + if (!eco->win->border->sticky) + e_desk_show(eco->win->border->desk); + ecore_x_pointer_warp(eco->win->border->zone->container->win, + eco->win->border->zone->x + (eco->win->border->zone->w / 2), + eco->win->border->zone->y + (eco->win->border->zone->h / 2)); + } + e_border_unshade(eco->win->border, E_DIRECTION_DOWN); + return NULL; + } if (!con) { @@ -126,6 +151,8 @@ e_configure_show(E_Container *con) e_widget_focus_set(eco->ilist, 1); e_widget_ilist_go(eco->ilist); + + _e_configure = eco; return eco; } @@ -159,6 +186,7 @@ e_configure_header_item_add(E_Configure *eco, char *icon, char *label) static void _e_configure_free(E_Configure *eco) { + _e_configure = NULL; while (eco->cblist) { free(eco->cblist->data); diff --git a/src/bin/e_int_config_apps.c b/src/bin/e_int_config_apps.c index 3a6cc74ca..a7e901d39 100644 --- a/src/bin/e_int_config_apps.c +++ b/src/bin/e_int_config_apps.c @@ -90,6 +90,7 @@ e_int_config_apps_once(E_Container *con, const char *label, int (*func) (void *d EAPI E_Config_Dialog * e_int_config_apps(E_Container *con) { + if (e_config_dialog_find("E", "_config_applications_dialog")) return NULL; return e_int_config_apps_once(con, NULL, NULL, NULL); } diff --git a/src/bin/e_int_config_cfgdialogs.c b/src/bin/e_int_config_cfgdialogs.c index 0418bb290..d468690e9 100644 --- a/src/bin/e_int_config_cfgdialogs.c +++ b/src/bin/e_int_config_cfgdialogs.c @@ -21,6 +21,7 @@ e_int_config_cfgdialogs(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_config_dialog_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_color_classes.c b/src/bin/e_int_config_color_classes.c index c26b32fe3..773181f12 100644 --- a/src/bin/e_int_config_color_classes.c +++ b/src/bin/e_int_config_color_classes.c @@ -94,6 +94,7 @@ e_int_config_color_classes(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_color_classes")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); if (!v) return NULL; diff --git a/src/bin/e_int_config_cursor.c b/src/bin/e_int_config_cursor.c index 185d4b95c..2b7b604d9 100644 --- a/src/bin/e_int_config_cursor.c +++ b/src/bin/e_int_config_cursor.c @@ -21,6 +21,7 @@ e_int_config_cursor(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_cursor_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_desklock.c b/src/bin/e_int_config_desklock.c index 81c506073..07f9e2018 100644 --- a/src/bin/e_int_config_desklock.c +++ b/src/bin/e_int_config_desklock.c @@ -96,25 +96,26 @@ struct _E_Config_Dialog_Data EAPI E_Config_Dialog * e_int_config_desklock(E_Container *con) { - E_Config_Dialog *cfd; - E_Config_Dialog_View *v; - - v = E_NEW(E_Config_Dialog_View, 1); - - v->create_cfdata = _create_data; - v->free_cfdata = _free_data; - v->basic.apply_cfdata = _basic_apply_data; - v->basic.create_widgets = _basic_create_widgets; - v->advanced.apply_cfdata = _advanced_apply_data; - v->advanced.create_widgets = _advanced_create_widgets; - - v->override_auto_apply = 1; - - cfd = e_config_dialog_new(con, - _("Desktop Lock Settings"), - "E", "_config_desklock_dialog", - "enlightenment/desklock", 0, v, NULL); - return cfd; + E_Config_Dialog *cfd; + E_Config_Dialog_View *v; + + if (e_config_dialog_find("E", "_config_desklock_dialog")) return NULL; + v = E_NEW(E_Config_Dialog_View, 1); + + v->create_cfdata = _create_data; + v->free_cfdata = _free_data; + v->basic.apply_cfdata = _basic_apply_data; + v->basic.create_widgets = _basic_create_widgets; + v->advanced.apply_cfdata = _advanced_apply_data; + v->advanced.create_widgets = _advanced_create_widgets; + + v->override_auto_apply = 1; + + cfd = e_config_dialog_new(con, + _("Desktop Lock Settings"), + "E", "_config_desklock_dialog", + "enlightenment/desklock", 0, v, NULL); + return cfd; } diff --git a/src/bin/e_int_config_desks.c b/src/bin/e_int_config_desks.c index da9691195..e765233a6 100644 --- a/src/bin/e_int_config_desks.c +++ b/src/bin/e_int_config_desks.c @@ -37,6 +37,7 @@ e_int_config_desks(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_desks_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); /* methods */ diff --git a/src/bin/e_int_config_display.c b/src/bin/e_int_config_display.c index 04af34335..d4ee303b1 100644 --- a/src/bin/e_int_config_display.c +++ b/src/bin/e_int_config_display.c @@ -186,6 +186,7 @@ e_int_config_display(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_display_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; v->free_cfdata = _free_data; diff --git a/src/bin/e_int_config_exebuf.c b/src/bin/e_int_config_exebuf.c index 5c901a44c..572f92eda 100644 --- a/src/bin/e_int_config_exebuf.c +++ b/src/bin/e_int_config_exebuf.c @@ -32,6 +32,7 @@ e_int_config_exebuf(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_exebuf_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_focus.c b/src/bin/e_int_config_focus.c index 6464a1486..26477d0a8 100644 --- a/src/bin/e_int_config_focus.c +++ b/src/bin/e_int_config_focus.c @@ -34,6 +34,7 @@ e_int_config_focus(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_focus_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); /* methods */ diff --git a/src/bin/e_int_config_fonts.c b/src/bin/e_int_config_fonts.c index de1e54677..b72b094d4 100644 --- a/src/bin/e_int_config_fonts.c +++ b/src/bin/e_int_config_fonts.c @@ -123,6 +123,7 @@ e_int_config_fonts(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_fonts_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_icon_themes.c b/src/bin/e_int_config_icon_themes.c index daf1d0f8d..6d42e1f3c 100644 --- a/src/bin/e_int_config_icon_themes.c +++ b/src/bin/e_int_config_icon_themes.c @@ -45,6 +45,7 @@ e_int_config_icon_themes(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_icon_theme_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_intl.c b/src/bin/e_int_config_intl.c index e7b4b01a3..a20d68329 100644 --- a/src/bin/e_int_config_intl.c +++ b/src/bin/e_int_config_intl.c @@ -515,6 +515,7 @@ e_int_config_intl(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_intl_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_keybindings.c b/src/bin/e_int_config_keybindings.c index b3dd76062..878c0ebd0 100644 --- a/src/bin/e_int_config_keybindings.c +++ b/src/bin/e_int_config_keybindings.c @@ -301,22 +301,23 @@ void e_int_config_keybindings_unregister_all_action_predef_names() EAPI E_Config_Dialog * e_int_config_keybindings(E_Container *con) { - E_Config_Dialog *cfd; - E_Config_Dialog_View *v; - - v = E_NEW(E_Config_Dialog_View, 1); - - v->create_cfdata = _create_data; - v->free_cfdata = _free_data; - v->basic.apply_cfdata = _basic_apply_data; - v->basic.create_widgets = _basic_create_widgets; - v->override_auto_apply = 1; - - cfd = e_config_dialog_new(con, - _("Key Binding Settings"), - "E", "_config_keybindings_dialog", - "enlightenment/keys", 0, v, NULL); - return cfd; + E_Config_Dialog *cfd; + E_Config_Dialog_View *v; + + if (e_config_dialog_find("E", "_config_keybindings_dialog")) return NULL; + v = E_NEW(E_Config_Dialog_View, 1); + + v->create_cfdata = _create_data; + v->free_cfdata = _free_data; + v->basic.apply_cfdata = _basic_apply_data; + v->basic.create_widgets = _basic_create_widgets; + v->override_auto_apply = 1; + + cfd = e_config_dialog_new(con, + _("Key Binding Settings"), + "E", "_config_keybindings_dialog", + "enlightenment/keys", 0, v, NULL); + return cfd; } static void diff --git a/src/bin/e_int_config_menus.c b/src/bin/e_int_config_menus.c index 69a279d1d..42a127769 100644 --- a/src/bin/e_int_config_menus.c +++ b/src/bin/e_int_config_menus.c @@ -27,6 +27,7 @@ e_int_config_menus(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_menus_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_modules.c b/src/bin/e_int_config_modules.c index 582a9b857..244ee7f30 100644 --- a/src/bin/e_int_config_modules.c +++ b/src/bin/e_int_config_modules.c @@ -53,6 +53,7 @@ e_int_config_modules(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_modules_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_mousebindings.c b/src/bin/e_int_config_mousebindings.c index c78fe3d08..9d511b952 100644 --- a/src/bin/e_int_config_mousebindings.c +++ b/src/bin/e_int_config_mousebindings.c @@ -119,22 +119,23 @@ struct _E_Config_Dialog_Data EAPI E_Config_Dialog * e_int_config_mousebindings(E_Container *con) { - E_Config_Dialog *cfd; - E_Config_Dialog_View *v; - - v = E_NEW(E_Config_Dialog_View, 1); - - v->create_cfdata = _create_data; - v->free_cfdata = _free_data; - v->basic.apply_cfdata = _basic_apply_data; - v->basic.create_widgets = _basic_create_widgets; - v->override_auto_apply = 0; - - cfd = e_config_dialog_new(con, - _("Mouse Binding Settings"), - "E", "_config_mousebindings_dialog", - "enlightenment/mouse_clean", 0, v, NULL); - return cfd; + E_Config_Dialog *cfd; + E_Config_Dialog_View *v; + + if (e_config_dialog_find("E", "_config_mousebindings_dialog")) return NULL; + v = E_NEW(E_Config_Dialog_View, 1); + + v->create_cfdata = _create_data; + v->free_cfdata = _free_data; + v->basic.apply_cfdata = _basic_apply_data; + v->basic.create_widgets = _basic_create_widgets; + v->override_auto_apply = 0; + + cfd = e_config_dialog_new(con, + _("Mouse Binding Settings"), + "E", "_config_mousebindings_dialog", + "enlightenment/mouse_clean", 0, v, NULL); + return cfd; } static void diff --git a/src/bin/e_int_config_paths.c b/src/bin/e_int_config_paths.c index cf7ebeeff..f38254a97 100644 --- a/src/bin/e_int_config_paths.c +++ b/src/bin/e_int_config_paths.c @@ -53,6 +53,7 @@ e_int_config_paths(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_paths_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_performance.c b/src/bin/e_int_config_performance.c index 31276a756..6da92625b 100644 --- a/src/bin/e_int_config_performance.c +++ b/src/bin/e_int_config_performance.c @@ -25,6 +25,7 @@ e_int_config_performance(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_performance_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_shelf.c b/src/bin/e_int_config_shelf.c index faea5b361..8c62e0d87 100644 --- a/src/bin/e_int_config_shelf.c +++ b/src/bin/e_int_config_shelf.c @@ -25,6 +25,7 @@ e_int_config_shelf(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_shelf_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); if (!v) return NULL; v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_startup.c b/src/bin/e_int_config_startup.c index b1f30d4c7..7ec5bf58c 100644 --- a/src/bin/e_int_config_startup.c +++ b/src/bin/e_int_config_startup.c @@ -27,6 +27,7 @@ e_int_config_startup(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_startup_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_theme.c b/src/bin/e_int_config_theme.c index 7405800e7..aa0c0b4cc 100644 --- a/src/bin/e_int_config_theme.c +++ b/src/bin/e_int_config_theme.c @@ -33,6 +33,7 @@ e_int_config_theme(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_theme_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_transitions.c b/src/bin/e_int_config_transitions.c index 67161598d..33856e6d6 100644 --- a/src/bin/e_int_config_transitions.c +++ b/src/bin/e_int_config_transitions.c @@ -24,6 +24,7 @@ e_int_config_transitions(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_transitions_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); if (!v) return NULL; @@ -32,9 +33,9 @@ e_int_config_transitions(E_Container *con) v->basic.apply_cfdata = _basic_apply_data; v->basic.create_widgets = _basic_create_widgets; - cfd = e_config_dialog_new(con, _("Transition Settings"),"E", - "_config_transitions_dialog", "enlightenment/transitions", - 0, v, NULL); + cfd = e_config_dialog_new(con, _("Transition Settings"), + "E", "_config_transitions_dialog", + "enlightenment/transitions", 0, v, NULL); if (!cfd) return NULL; return cfd; } diff --git a/src/bin/e_int_config_wallpaper.c b/src/bin/e_int_config_wallpaper.c index d3386ae96..8330bc9de 100644 --- a/src/bin/e_int_config_wallpaper.c +++ b/src/bin/e_int_config_wallpaper.c @@ -39,6 +39,7 @@ e_int_config_wallpaper(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_wallpaper_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; diff --git a/src/bin/e_int_config_window_display.c b/src/bin/e_int_config_window_display.c index b962259db..ac023556c 100644 --- a/src/bin/e_int_config_window_display.c +++ b/src/bin/e_int_config_window_display.c @@ -37,6 +37,7 @@ e_int_config_window_display(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_window_display_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); /* methods */ diff --git a/src/bin/e_int_config_window_manipulation.c b/src/bin/e_int_config_window_manipulation.c index 4b7a9a2c6..1997a3982 100644 --- a/src/bin/e_int_config_window_manipulation.c +++ b/src/bin/e_int_config_window_manipulation.c @@ -36,6 +36,7 @@ e_int_config_window_manipulation(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_window_manipulation_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); /* methods */ diff --git a/src/bin/e_int_config_winlist.c b/src/bin/e_int_config_winlist.c index 3afb17436..bbf1bd8ec 100644 --- a/src/bin/e_int_config_winlist.c +++ b/src/bin/e_int_config_winlist.c @@ -39,6 +39,7 @@ e_int_config_winlist(E_Container *con) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", "_config_winlist_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; @@ -47,7 +48,7 @@ e_int_config_winlist(E_Container *con) v->basic.create_widgets = _basic_create_widgets; v->advanced.apply_cfdata = _advanced_apply_data; v->advanced.create_widgets = _advanced_create_widgets; - + cfd = e_config_dialog_new(con, _("Window List Settings"), "E", "_config_winlist_dialog",