IBox labels are now optional.
Config Dialog added. Multiple IBox Instances supported. SVN revision: 22887
This commit is contained in:
parent
133cd23563
commit
cc742cb5f6
|
@ -20,7 +20,8 @@ INCLUDES = -I. \
|
|||
pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH)
|
||||
pkg_LTLIBRARIES = module.la
|
||||
module_la_SOURCES = e_mod_main.c \
|
||||
e_mod_main.h
|
||||
e_mod_main.h \
|
||||
e_mod_config.c
|
||||
module_la_LIBADD = @e_libs@ @dlopen_libs@
|
||||
module_la_LDFLAGS = -module -avoid-version
|
||||
module_la_DEPENDENCIES = $(top_builddir)/config.h
|
||||
|
|
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
||||
*/
|
||||
#include "e.h"
|
||||
#include "e_mod_main.h"
|
||||
|
||||
struct _E_Config_Dialog_Data
|
||||
{
|
||||
int show_label;
|
||||
};
|
||||
|
||||
/* Protos */
|
||||
static void *_create_data(E_Config_Dialog *cfd);
|
||||
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
||||
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
|
||||
static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
||||
|
||||
void
|
||||
_config_ibox_module(Config_Item *ci)
|
||||
{
|
||||
E_Config_Dialog *cfd;
|
||||
E_Config_Dialog_View *v;
|
||||
|
||||
v = E_NEW(E_Config_Dialog_View, 1);
|
||||
|
||||
/* Dialog Methods */
|
||||
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 = NULL;
|
||||
v->advanced.create_widgets = NULL;
|
||||
|
||||
/* Create The Dialog */
|
||||
cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),
|
||||
_("IBox Configuration"), NULL, 0, v, ci);
|
||||
ibox_config->config_dialog = cfd;
|
||||
}
|
||||
|
||||
static void
|
||||
_fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
cfdata->show_label = ci->show_label;
|
||||
}
|
||||
|
||||
static void *
|
||||
_create_data(E_Config_Dialog *cfd)
|
||||
{
|
||||
E_Config_Dialog_Data *cfdata;
|
||||
Config_Item *ci;
|
||||
|
||||
ci = cfd->data;
|
||||
cfdata = E_NEW(E_Config_Dialog_Data, 1);
|
||||
_fill_data(ci, cfdata);
|
||||
return cfdata;
|
||||
}
|
||||
|
||||
static void
|
||||
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
ibox_config->config_dialog = NULL;
|
||||
free(cfdata);
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
Evas_Object *o, *of, *ob;
|
||||
|
||||
o = e_widget_list_add(evas, 0, 0);
|
||||
of = e_widget_framelist_add(evas, _("General Settings"), 0);
|
||||
ob = e_widget_check_add(evas, _("Show Icon Label"), &(cfdata->show_label));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
static int
|
||||
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
Config_Item *ci;
|
||||
|
||||
ci = cfd->data;
|
||||
ci->show_label = cfdata->show_label;
|
||||
_ibox_config_update();
|
||||
e_config_save_queue();
|
||||
return 1;
|
||||
}
|
|
@ -92,6 +92,7 @@ static IBox *_ibox_zone_find(E_Zone *zone);
|
|||
static int _ibox_cb_timer_drop_recalc(void *data);
|
||||
static void _ibox_cb_obj_moveresize(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _ibox_cb_menu_post(void *data, E_Menu *m);
|
||||
static void _ibox_cb_menu_configuration(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _ibox_cb_icon_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _ibox_cb_icon_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _ibox_cb_icon_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
|
@ -110,7 +111,10 @@ static int _ibox_cb_event_border_iconify(void *data, int type, void *event);
|
|||
static int _ibox_cb_event_border_uniconify(void *data, int type, void *event);
|
||||
static int _ibox_cb_event_border_icon_change(void *data, int type, void *event);
|
||||
static int _ibox_cb_event_border_zone_set(void *data, int type, void *event);
|
||||
static Config_Item *_ibox_config_item_get(const char *id);
|
||||
|
||||
static E_Config_DD *conf_edd = NULL;
|
||||
static E_Config_DD *conf_item_edd = NULL;
|
||||
|
||||
Config *ibox_config = NULL;
|
||||
|
||||
|
@ -125,11 +129,14 @@ _gc_init(E_Gadcon *gc, char *name, char *id, char *style)
|
|||
int cx, cy, cw, ch;
|
||||
const char *drop[] = { "enlightenment/border" };
|
||||
Evas_List *l;
|
||||
Config_Item *ci;
|
||||
|
||||
inst = E_NEW(Instance, 1);
|
||||
|
||||
ci = _ibox_config_item_get(id);
|
||||
|
||||
b = _ibox_new(gc->evas, gc->zone);
|
||||
b->show_label = 1;
|
||||
b->show_label = ci->show_label;
|
||||
b->inst = inst;
|
||||
inst->ibox = b;
|
||||
o = b->o_box;
|
||||
|
@ -235,7 +242,6 @@ static IBox *
|
|||
_ibox_new(Evas *evas, E_Zone *zone)
|
||||
{
|
||||
IBox *b;
|
||||
char buf[4096];
|
||||
|
||||
b = E_NEW(IBox, 1);
|
||||
b->o_box = e_box_add(evas);
|
||||
|
@ -276,6 +282,14 @@ _ibox_cb_empty_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_inf
|
|||
e_menu_post_deactivate_callback_set(mn, _ibox_cb_menu_post, NULL);
|
||||
ibox_config->menu = mn;
|
||||
|
||||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_label_set(mi, _("Configuration"));
|
||||
e_util_menu_item_edje_icon_set(mi, "enlightenment/configuration");
|
||||
e_menu_item_callback_set(mi, _ibox_cb_menu_configuration, b);
|
||||
|
||||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_separator_set(mi, 1);
|
||||
|
||||
e_gadcon_client_util_menu_items_append(b->inst->gcc, mn, 0);
|
||||
|
||||
e_gadcon_canvas_zone_geometry_get(b->inst->gcc->gadcon,
|
||||
|
@ -628,6 +642,13 @@ _ibox_cb_icon_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info
|
|||
ibox_config->menu = mn;
|
||||
|
||||
/* FIXME: other icon options go here too */
|
||||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_label_set(mi, _("Configuration"));
|
||||
e_util_menu_item_edje_icon_set(mi, "enlightenment/configuration");
|
||||
e_menu_item_callback_set(mi, _ibox_cb_menu_configuration, ic->ibox);
|
||||
|
||||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_separator_set(mi, 1);
|
||||
|
||||
e_gadcon_client_util_menu_items_append(ic->ibox->inst->gcc, mn, 0);
|
||||
|
||||
|
@ -1068,6 +1089,51 @@ _ibox_cb_event_border_zone_set(void *data, int type, void *event)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static Config_Item *
|
||||
_ibox_config_item_get(const char *id)
|
||||
{
|
||||
Evas_List *l;
|
||||
Config_Item *ci;
|
||||
|
||||
for (l = ibox_config->items; l; l = l->next)
|
||||
{
|
||||
ci = l->data;
|
||||
if ((ci->id) && (!strcmp(ci->id, id)))
|
||||
return ci;
|
||||
}
|
||||
ci = E_NEW(Config_Item, 1);
|
||||
ci->id = evas_stringshare_add(id);
|
||||
ci->show_label = 0;
|
||||
ibox_config->items = evas_list_append(ibox_config->items, ci);
|
||||
return ci;
|
||||
}
|
||||
|
||||
void
|
||||
_ibox_config_update(void)
|
||||
{
|
||||
Evas_List *l;
|
||||
for (l = ibox_config->instances; l; l = l->next)
|
||||
{
|
||||
Instance *inst;
|
||||
Config_Item *ci;
|
||||
|
||||
inst = l->data;
|
||||
ci = _ibox_config_item_get(inst->gcc->id);
|
||||
inst->ibox->show_label = ci->show_label;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_ibox_cb_menu_configuration(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
IBox *b;
|
||||
Config_Item *ci;
|
||||
|
||||
b = data;
|
||||
ci = _ibox_config_item_get(b->inst->gcc->id);
|
||||
_config_ibox_module(ci);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
/**/
|
||||
/* module setup */
|
||||
|
@ -1080,7 +1146,33 @@ EAPI E_Module_Api e_modapi =
|
|||
EAPI void *
|
||||
e_modapi_init(E_Module *m)
|
||||
{
|
||||
ibox_config = E_NEW(Config, 1);
|
||||
conf_item_edd = E_CONFIG_DD_NEW("IBox_Config_Item", Config_Item);
|
||||
#undef T
|
||||
#undef D
|
||||
#define T Config_Item
|
||||
#define D conf_item_edd
|
||||
E_CONFIG_VAL(D, T, id, STR);
|
||||
E_CONFIG_VAL(D, T, show_label, INT);
|
||||
|
||||
conf_edd = E_CONFIG_DD_NEW("IBox_Config", Config);
|
||||
#undef T
|
||||
#undef D
|
||||
#define T Config
|
||||
#define D conf_edd
|
||||
E_CONFIG_LIST(D, T, items, conf_item_edd);
|
||||
|
||||
ibox_config = e_config_domain_load("module.ibox", conf_edd);
|
||||
if (!ibox_config)
|
||||
{
|
||||
Config_Item *ci;
|
||||
|
||||
ibox_config = E_NEW(Config, 1);
|
||||
|
||||
ci = E_NEW(Config_Item, 1);
|
||||
ci->id = evas_stringshare_add("0");
|
||||
ci->show_label = 0;
|
||||
ibox_config->items = evas_list_append(ibox_config->items, ci);
|
||||
}
|
||||
|
||||
ibox_config->module = m;
|
||||
|
||||
|
@ -1128,6 +1220,9 @@ EAPI int
|
|||
e_modapi_shutdown(E_Module *m)
|
||||
{
|
||||
e_gadcon_provider_unregister(&_gadcon_class);
|
||||
|
||||
if (ibox_config->config_dialog)
|
||||
e_object_del(E_OBJECT(ibox_config->config_dialog));
|
||||
|
||||
while (ibox_config->handlers)
|
||||
{
|
||||
|
@ -1140,14 +1235,28 @@ e_modapi_shutdown(E_Module *m)
|
|||
e_object_del(E_OBJECT(ibox_config->menu));
|
||||
ibox_config->menu = NULL;
|
||||
}
|
||||
while (ibox_config->items)
|
||||
{
|
||||
Config_Item *ci;
|
||||
|
||||
ci = ibox_config->items->data;
|
||||
ibox_config->items = evas_list_remove_list(ibox_config->items, ibox_config->items);
|
||||
if (ci->id)
|
||||
evas_stringshare_del(ci->id);
|
||||
free(ci);
|
||||
}
|
||||
|
||||
free(ibox_config);
|
||||
ibox_config = NULL;
|
||||
E_CONFIG_DD_FREE(conf_item_edd);
|
||||
E_CONFIG_DD_FREE(conf_edd);
|
||||
return 1;
|
||||
}
|
||||
|
||||
EAPI int
|
||||
e_modapi_save(E_Module *m)
|
||||
{
|
||||
e_config_domain_save("module.ibox", conf_edd, ibox_config);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#define E_MOD_MAIN_H
|
||||
|
||||
typedef struct _Config Config;
|
||||
typedef struct _Config_Item Config_Item;
|
||||
|
||||
struct _Config
|
||||
{
|
||||
|
@ -13,6 +14,14 @@ struct _Config
|
|||
Evas_List *instances;
|
||||
E_Menu *menu;
|
||||
Evas_List *handlers;
|
||||
Evas_List *items;
|
||||
E_Config_Dialog *config_dialog;
|
||||
};
|
||||
|
||||
struct _Config_Item
|
||||
{
|
||||
const char *id;
|
||||
int show_label;
|
||||
};
|
||||
|
||||
EAPI extern E_Module_Api e_modapi;
|
||||
|
@ -23,4 +32,8 @@ EAPI int e_modapi_save (E_Module *m);
|
|||
EAPI int e_modapi_info (E_Module *m);
|
||||
EAPI int e_modapi_about (E_Module *m);
|
||||
|
||||
void _ibox_config_update(void);
|
||||
void _config_ibox_module(Config_Item *ci);
|
||||
extern Config *ibox_config;
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue