diff --git a/src/bin/e_configure.c b/src/bin/e_configure.c index 1ce689673..f1aacdc16 100644 --- a/src/bin/e_configure.c +++ b/src/bin/e_configure.c @@ -60,14 +60,14 @@ struct _E_Configure_It const char *label; const char *icon_file; const char *icon; - E_Config_Dialog *(*func) (E_Container *con); + E_Config_Dialog *(*func) (E_Container *con, const char *params); }; static E_Configure *_e_configure = NULL; static Evas_List *_e_configure_registry = NULL; EAPI void -e_configure_registry_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func) (E_Container *con)) +e_configure_registry_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func) (E_Container *con, const char *params)) { Evas_List *l; char *cat; @@ -215,7 +215,7 @@ e_configure_registry_category_del(const char *path) } EAPI void -e_configure_registry_call(const char *path, E_Container *con) +e_configure_registry_call(const char *path, E_Container *con, const char *params) { Evas_List *l; char *cat; @@ -242,7 +242,7 @@ e_configure_registry_call(const char *path, E_Container *con) printf("%s == %s\n", item, eci->item); if (!strcmp(item, eci->item)) { - if (eci->func) eci->func(con); + if (eci->func) eci->func(con, params); goto done; } } @@ -478,6 +478,17 @@ e_configure_init(void) e_configure_registry_category_add("extensions", 90, _("Extensions"), NULL, "enlightenment/extensions"); e_configure_registry_item_add("extensions/modules", 10, _("Modules"), NULL, "enlightenment/modules", e_int_config_modules); e_configure_registry_item_add("extensions/shelves", 20, _("Shelves"), NULL, "enlightenment/shelf", e_int_config_shelf); + + /* internal calls - not in config dialog but accessible from other code + * that knows these config dialogs exist and how to interact. they require + * parameters to be passed and will not work without them being set and + * set properly + */ + e_configure_registry_category_add("internal", -1, _("Internal"), NULL, "enlightenment/internal"); + e_configure_registry_item_add("internal/borders_border", -1, _("Border"), NULL, "enlightenment/windows", e_int_config_borders_border); + e_configure_registry_item_add("internal/wallpaper_desk", -1, _("Wallpaper"), NULL, "enlightenment/windows", e_int_config_wallpaper_desk); + e_configure_registry_item_add("internal/desk", -1, _("Desk"), NULL, "enlightenment/windows", e_int_config_desk); + e_configure_registry_item_add("internal/ibar_other", -1, _("IBar Other"), NULL, "enlightenment/windows", e_int_config_apps_ibar_other); } static void @@ -644,7 +655,7 @@ _e_configure_item_cb(void *data) ci = data; if (!ci) return; cb = ci->cb; - if (cb->path) e_configure_registry_call(cb->path, cb->eco->con); + if (cb->path) e_configure_registry_call(cb->path, cb->eco->con, NULL); } static void @@ -748,7 +759,7 @@ _e_configure_fill_cat_list(void *data) E_Configure_Cat *ecat; ecat = l->data; - if (ecat->items) + if ((ecat->pri >= 0) && (ecat->items)) { cat = _e_configure_category_add(eco, ecat->label, ecat->icon); for (ll = ecat->items; ll; ll = ll->next) @@ -757,8 +768,11 @@ _e_configure_fill_cat_list(void *data) char buf[1024]; eci = ll->data; - snprintf(buf, sizeof(buf), "%s/%s", ecat->cat, eci->item); - _e_configure_item_add(cat, eci->label, eci->icon, buf); + if (eci->pri >= 0) + { + snprintf(buf, sizeof(buf), "%s/%s", ecat->cat, eci->item); + _e_configure_item_add(cat, eci->label, eci->icon, buf); + } } } } diff --git a/src/bin/e_configure.h b/src/bin/e_configure.h index dd5f140ca..36f1fe018 100644 --- a/src/bin/e_configure.h +++ b/src/bin/e_configure.h @@ -25,11 +25,11 @@ struct _E_Configure Evas_List *cats; }; -EAPI void e_configure_registry_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func) (E_Container *con)); +EAPI void e_configure_registry_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func) (E_Container *con, const char *params)); EAPI void e_configure_registry_item_del(const char *path); EAPI void e_configure_registry_category_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon); EAPI void e_configure_registry_category_del(const char *path); -EAPI void e_configure_registry_call(const char *path, E_Container *con); +EAPI void e_configure_registry_call(const char *path, E_Container *con, const char *params); EAPI int e_configure_registry_exists(const char *path); EAPI E_Configure *e_configure_show(E_Container *con); diff --git a/src/bin/e_desklock.c b/src/bin/e_desklock.c index c3463ca7e..ebab995d9 100644 --- a/src/bin/e_desklock.c +++ b/src/bin/e_desklock.c @@ -158,7 +158,7 @@ e_desklock_show(void) zone = e_util_zone_current_get(e_manager_current_get()); if (zone) - e_configure_registry_call("screen/screen_lock", zone->container); + e_configure_registry_call("screen/screen_lock", zone->container, NULL); return 0; } #ifdef HAVE_PAM diff --git a/src/bin/e_int_border_menu.c b/src/bin/e_int_border_menu.c index ff609e4c0..796e26389 100644 --- a/src/bin/e_int_border_menu.c +++ b/src/bin/e_int_border_menu.c @@ -431,9 +431,12 @@ static void _e_border_menu_cb_border(void *data, E_Menu *m, E_Menu_Item *mi) { E_Border *bd; + char buf[256]; + bd = data; if (bd->border_border_dialog) return; - e_int_config_borders_border(bd); + snprintf(buf, sizeof(buf), "%p", bd); + e_configure_registry_call("internal/borders_border", bd->zone->container, buf); } static void diff --git a/src/bin/e_int_config_apps.c b/src/bin/e_int_config_apps.c index 32fcc1b59..06f498222 100644 --- a/src/bin/e_int_config_apps.c +++ b/src/bin/e_int_config_apps.c @@ -125,6 +125,7 @@ e_int_config_apps_ibar_other(E_Container *con, const char *path) { E_Config_Once *once; + if (!path) return NULL; once = E_NEW(E_Config_Once, 1); once->title = _("IBar Applications"); once->icon = "enlightenment/ibar_applications"; diff --git a/src/bin/e_int_config_borders.c b/src/bin/e_int_config_borders.c index 14cc2f438..d9a4c42be 100644 --- a/src/bin/e_int_config_borders.c +++ b/src/bin/e_int_config_borders.c @@ -33,11 +33,16 @@ e_int_config_borders(E_Container *con) } EAPI E_Config_Dialog * -e_int_config_borders_border(E_Border *bd) +e_int_config_borders_border(E_Container *con, const char *params) { E_Config_Dialog *cfd; E_Config_Dialog_View *v; + E_Border *bd; + if (!params) return NULL; + bd = NULL; + sscanf(params, "%p", &bd); + if (!bd) return NULL; v = _config_view_new(); if (!v) return NULL; cfd = e_config_dialog_new(bd->zone->container, diff --git a/src/bin/e_int_config_borders.h b/src/bin/e_int_config_borders.h index 28c961356..7dd8d9bdc 100644 --- a/src/bin/e_int_config_borders.h +++ b/src/bin/e_int_config_borders.h @@ -4,7 +4,7 @@ #define E_INT_CONFIG_BORDERS_H EAPI E_Config_Dialog *e_int_config_borders(E_Container *con); -EAPI E_Config_Dialog *e_int_config_borders_border(E_Border *border); +EAPI E_Config_Dialog *e_int_config_borders_border(E_Container *con, const char *params); #endif #endif diff --git a/src/bin/e_int_config_desk.c b/src/bin/e_int_config_desk.c index bc23ecbc1..214dc6977 100644 --- a/src/bin/e_int_config_desk.c +++ b/src/bin/e_int_config_desk.c @@ -21,12 +21,18 @@ struct _E_Config_Dialog_Data }; EAPI E_Config_Dialog * -e_int_config_desk(E_Container *con, int con_num, int zone_num, int dx, int dy) +e_int_config_desk(E_Container *con, const char *params) { E_Config_Dialog *cfd; E_Config_Dialog_View *v; E_Config_Dialog_Data *cfdata; + int con_num, zone_num, dx, dy; + if (!params) return NULL; + con_num = zone_num = dx = dy = -1; + if (sscanf(params, "%i %i %i %i", &con_num, &zone_num, &dx, &dy) != 4) + return NULL; + if (e_config_dialog_find("E", "_config_desk_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); @@ -169,10 +175,13 @@ static void _cb_config(void *data, void *data2) { E_Config_Dialog_Data *cfdata; + char buf[256]; cfdata = data; if (!cfdata) return; - e_int_config_wallpaper_desk(cfdata->con_num, cfdata->zone_num, cfdata->desk_x, cfdata->desk_y); + snprintf(buf, sizeof(buf), "%i %i %i %i", + cfdata->con_num, cfdata->zone_num, cfdata->desk_x, cfdata->desk_y); + e_configure_registry_call("internal/wallpaper_desk", e_container_current_get(e_manager_current_get()), buf); } static int diff --git a/src/bin/e_int_config_desk.h b/src/bin/e_int_config_desk.h index 6d7ff662b..850fc2ee9 100644 --- a/src/bin/e_int_config_desk.h +++ b/src/bin/e_int_config_desk.h @@ -3,7 +3,7 @@ #ifndef E_INT_CONFIG_DESK_H #define E_INT_CONFIG_DESK_H -EAPI E_Config_Dialog *e_int_config_desk(E_Container *con, int con_num, int zone_num, int dx, int dy); +EAPI E_Config_Dialog *e_int_config_desk(E_Container *con, const char *params); #endif #endif diff --git a/src/bin/e_int_config_dpms.c b/src/bin/e_int_config_dpms.c index c9d413c22..1eb9aba10 100644 --- a/src/bin/e_int_config_dpms.c +++ b/src/bin/e_int_config_dpms.c @@ -9,8 +9,8 @@ static void _cb_standby_slider_change(void *data, Evas_Object *obj); static void _cb_suspend_slider_change(void *data, Evas_Object *obj); static void _cb_off_slider_change(void *data, Evas_Object *obj); -static int _e_int_config_dpms_available(); -static int _e_int_config_dpms_capable(); +static int _e_int_config_dpms_available(void); +static int _e_int_config_dpms_capable(void); struct _E_Config_Dialog_Data { @@ -44,7 +44,7 @@ _cb_dpms_dialog_ok(void *data, E_Dialog *dia) } static int -_e_int_config_dpms_capable() +_e_int_config_dpms_capable(void) { if (ecore_x_dpms_capable_get()) return 1; @@ -65,7 +65,7 @@ _e_int_config_dpms_capable() } static int -_e_int_config_dpms_available() +_e_int_config_dpms_available(void) { if (ecore_x_dpms_query()) return 1; diff --git a/src/bin/e_int_config_theme.h b/src/bin/e_int_config_theme.h index 43c30612b..e778ca12d 100644 --- a/src/bin/e_int_config_theme.h +++ b/src/bin/e_int_config_theme.h @@ -7,6 +7,7 @@ #define E_INT_CONFIG_THEME_H EAPI E_Config_Dialog *e_int_config_theme(E_Container *con); + EAPI void e_int_config_theme_import_done(E_Config_Dialog *dia); EAPI void e_int_config_theme_update(E_Config_Dialog *dia, char *file); diff --git a/src/bin/e_int_config_wallpaper.c b/src/bin/e_int_config_wallpaper.c index 27785caed..1d5329a31 100644 --- a/src/bin/e_int_config_wallpaper.c +++ b/src/bin/e_int_config_wallpaper.c @@ -12,6 +12,8 @@ static Evas_Object *_basic_create_widgets (E_Config_Dialog *cfd, Evas *evas, static int _advanced_apply_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); static Evas_Object *_advanced_create_widgets (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); +static E_Config_Dialog *_e_int_config_wallpaper_desk(E_Container *con, int con_num, int zone_num, int desk_x, int desk_y); + #define E_CONFIG_WALLPAPER_ALL 0 #define E_CONFIG_WALLPAPER_DESK 1 #define E_CONFIG_WALLPAPER_SCREEN 2 @@ -48,16 +50,27 @@ struct _E_Config_Dialog_Data EAPI E_Config_Dialog * e_int_config_wallpaper(E_Container *con) { - return e_int_config_wallpaper_desk(-1, -1, -1, -1); + return _e_int_config_wallpaper_desk(con, -1, -1, -1, -1); } EAPI E_Config_Dialog * -e_int_config_wallpaper_desk(int con_num, int zone_num, int desk_x, int desk_y) +e_int_config_wallpaper_desk(E_Container *con, const char *params) +{ + int con_num, zone_num, desk_x, desk_y; + + if (!params) return NULL; + con_num = zone_num = desk_x = desk_y = -1; + if (sscanf(params, "%i %i %i %i", &con_num, &zone_num, &desk_x, &desk_y) != 4) + return NULL; + _e_int_config_wallpaper_desk(con, con_num, zone_num, desk_x, desk_y); +} + +static E_Config_Dialog * +_e_int_config_wallpaper_desk(E_Container *con, int con_num, int zone_num, int desk_x, int desk_y) { E_Config_Dialog *cfd; E_Config_Dialog_View *v; E_Config_Wallpaper *cw; - E_Container *con; if (e_config_dialog_find("E", "_config_wallpaper_dialog")) return NULL; v = E_NEW(E_Config_Dialog_View, 1); @@ -83,8 +96,6 @@ e_int_config_wallpaper_desk(int con_num, int zone_num, int desk_x, int desk_y) cw->desk_x = desk_x; cw->desk_y = desk_y; - con = e_container_current_get(e_manager_current_get()); - cfd = e_config_dialog_new(con, _("Wallpaper Settings"), "E", "_config_wallpaper_dialog", diff --git a/src/bin/e_int_config_wallpaper.h b/src/bin/e_int_config_wallpaper.h index 2244c5df8..951449266 100644 --- a/src/bin/e_int_config_wallpaper.h +++ b/src/bin/e_int_config_wallpaper.h @@ -8,7 +8,8 @@ typedef struct _E_Config_Wallpaper E_Config_Wallpaper; #define E_INT_CONFIG_WALLPAPER_H EAPI E_Config_Dialog *e_int_config_wallpaper(E_Container *con); -EAPI E_Config_Dialog *e_int_config_wallpaper_desk(int con_num, int zone_num, int desk_x, int desk_y); +EAPI E_Config_Dialog *e_int_config_wallpaper_desk(E_Container *con, const char *params); + EAPI void e_int_config_wallpaper_update(E_Config_Dialog *dia, char *file); EAPI void e_int_config_wallpaper_import_done(E_Config_Dialog *dia); EAPI void e_int_config_wallpaper_gradient_done(E_Config_Dialog *dia); diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index 24de335e7..bf08d25b4 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -714,7 +714,7 @@ _e_int_menus_virtuals_pre_cb(void *data, E_Menu *m) static void _e_int_menus_desk_item_cb(void *data, E_Menu *m, E_Menu_Item *mi) { - e_configure_registry_call("screen/virtual_desktops", m->zone->container); + e_configure_registry_call("screen/virtual_desktops", m->zone->container, NULL); } static void @@ -728,25 +728,25 @@ _e_int_menus_virtuals_item_cb(void *data, E_Menu *m, E_Menu_Item *mi) static void _e_int_menus_background_item_cb(void *data, E_Menu *m, E_Menu_Item *mi) { - e_configure_registry_call("appearance/wallpaper", m->zone->container); + e_configure_registry_call("appearance/wallpaper", m->zone->container, NULL); } static void _e_int_menus_theme_item_cb(void *data, E_Menu *m, E_Menu_Item *mi) { - e_configure_registry_call("appearance/theme", m->zone->container); + e_configure_registry_call("appearance/theme", m->zone->container, NULL); } static void _e_int_menus_module_item_cb(void *data, E_Menu *m, E_Menu_Item *mi) { - e_configure_registry_call("extensions/modules", m->zone->container); + e_configure_registry_call("extensions/modules", m->zone->container, NULL); } static void _e_int_menus_shelf_item_cb(void *data, E_Menu *m, E_Menu_Item *mi) { - e_configure_registry_call("extensions/shelves", m->zone->container); + e_configure_registry_call("extensions/shelves", m->zone->container, NULL); } static void @@ -1629,5 +1629,5 @@ _e_int_menus_shelves_add_cb(void *data, E_Menu *m, E_Menu_Item *mi) static void _e_int_menus_shelves_del_cb(void *data, E_Menu *m, E_Menu_Item *mi) { - e_configure_registry_call("extensions/shelves", m->zone->container); + e_configure_registry_call("extensions/shelves", m->zone->container, NULL); } diff --git a/src/bin/e_test.c b/src/bin/e_test.c index 146d76cff..e053e2272 100644 --- a/src/bin/e_test.c +++ b/src/bin/e_test.c @@ -217,7 +217,7 @@ _e_test_dia(E_Container *con) { E_Config_Dialog *dia; - dia = e_int_config_focus(con); + dia = e_int_config_modules(con); return dia; } diff --git a/src/bin/e_widget_desk_preview.c b/src/bin/e_widget_desk_preview.c index 270666e42..e33146901 100644 --- a/src/bin/e_widget_desk_preview.c +++ b/src/bin/e_widget_desk_preview.c @@ -257,10 +257,12 @@ _e_wid_desk_cb_config(void *data, Evas *e, Evas_Object *obj, void *event_info) if (ev->button == 1) { E_Container *con; + char buf[256]; con = e_container_current_get(e_manager_current_get()); - /* FIXME: this isn't abstracted like the rest of the config. */ - e_int_config_desk(con, dd->container, dd->zone, dd->x, dd->y); + snprintf(buf, sizeof(buf), "%i %i %i %i", + dd->container, dd->zone, dd->x, dd->y); + e_configure_registry_call("internal/desk", con, buf); } } diff --git a/src/modules/ibar/e_mod_config.c b/src/modules/ibar/e_mod_config.c index 97750c13f..c79a3d6c1 100644 --- a/src/modules/ibar/e_mod_config.c +++ b/src/modules/ibar/e_mod_config.c @@ -190,13 +190,15 @@ _cb_del(void *data, void *data2) static void _cb_config(void *data, void *data2) { - char path[4096]; + char path[PATH_MAX]; E_Config_Dialog_Data *cfdata; cfdata = data; snprintf(path, sizeof(path), "%s/.e/e/applications/bar/%s/.order", e_user_homedir_get(), cfdata->dir); - e_int_config_apps_ibar_other(e_container_current_get(e_manager_current_get()), path); + e_configure_registry_call("internal/ibar_other", + e_container_current_get(e_manager_current_get()), + path); } static void diff --git a/src/modules/ibar/e_mod_main.c b/src/modules/ibar/e_mod_main.c index b9e68de16..b2a1364ef 100644 --- a/src/modules/ibar/e_mod_main.c +++ b/src/modules/ibar/e_mod_main.c @@ -692,8 +692,9 @@ _ibar_cb_menu_add(void *data, E_Menu *m, E_Menu_Item *mi) IBar *b; b = data; - e_int_config_apps_ibar_other(b->inst->gcc->gadcon->zone->container, - b->apps->path); + e_configure_registry_call("internal/ibar_other", + b->inst->gcc->gadcon->zone->container, + b->apps->path); } static void diff --git a/src/modules/pager/e_mod_main.c b/src/modules/pager/e_mod_main.c index 45c2bbe22..4516dca8b 100644 --- a/src/modules/pager/e_mod_main.c +++ b/src/modules/pager/e_mod_main.c @@ -684,7 +684,7 @@ _pager_inst_cb_menu_virtual_desktops_dialog(void *data, E_Menu *m, E_Menu_Item * Instance *inst; inst = data; - e_int_config_desks(inst->gcc->gadcon->zone->container); + e_configure_registry_call("screen/virtual_desktops", inst->gcc->gadcon->zone->container, NULL); } static void