abstract config dialogs more - include params.

SVN revision: 30588
This commit is contained in:
Carsten Haitzler 2007-07-04 11:11:03 +00:00
parent 5e8a55ff99
commit 371504515f
19 changed files with 91 additions and 41 deletions

View File

@ -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);
}
}
}
}

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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";

View File

@ -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,

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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",

View File

@ -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);

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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

View File

@ -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

View File

@ -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