Enlightenment CVS committal Author : iamsthitha Project : e_modules Module : taskbar
Dir : e_modules/taskbar Modified Files: Makefile.am config.h.in configure.in e_mod_main.c e_mod_main.h Added Files: e_mod_config.c Log Message: -Added a config dialog -"Popular" Taskbar functionality -Old theme still available as taskbar2.edj -A few bug fixes =================================================================== RCS file: /cvs/e/e_modules/taskbar/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Makefile.am 13 Jun 2006 23:54:41 -0000 1.1 +++ Makefile.am 22 Jun 2006 05:30:18 -0000 1.2 @@ -18,7 +18,8 @@ pkgdir = $(datadir)/$(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@ module_la_LDFLAGS = -module -avoid-version =================================================================== RCS file: /cvs/e/e_modules/taskbar/config.h.in,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- config.h.in 13 Jun 2006 23:54:41 -0000 1.1 +++ config.h.in 22 Jun 2006 05:30:18 -0000 1.2 @@ -36,6 +36,9 @@ /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H +/* Module Locale Directory */ +#undef LOCALEDIR + /* "Module architecture" */ #undef MODULE_ARCH =================================================================== RCS file: /cvs/e/e_modules/taskbar/configure.in,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- configure.in 13 Jun 2006 23:54:41 -0000 1.1 +++ configure.in 22 Jun 2006 05:30:18 -0000 1.2 @@ -94,6 +94,16 @@ AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${prefix}/lib/enlightenment/modules/${PACKAGE}", "Package installed data destination") datadir="${prefix}/lib/enlightenment/modules/${PACKAGE}" fi + +AC_PREFIX_DEFAULT(${HOME}/.e/e) +if test "x$prefix" = "xNONE"; then + datarootdir=${ac_default_prefix} +else + datarootdir=${prefix}/share +fi +localedir=${datarootdir}/locale +AC_SUBST(LOCALEDIR, "${localedir}") +AC_DEFINE_UNQUOTED(LOCALEDIR, "${localedir}", [Module Locale Directory]) #AC_CHECK_LIB(dl, dlopen, dlopen_libs=-ldl) #AC_SUBST(dlopen_libs) =================================================================== RCS file: /cvs/e/e_modules/taskbar/e_mod_main.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_mod_main.c 14 Jun 2006 00:09:11 -0000 1.2 +++ e_mod_main.c 22 Jun 2006 05:30:18 -0000 1.3 @@ -7,7 +7,7 @@ /***************************************************************************/ /**/ /* gadcon requirements */ -static E_Gadcon_Client *_gc_init(E_Gadcon *gc, char *name, char *id, char *style); +static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style); static void _gc_shutdown(E_Gadcon_Client *gcc); static void _gc_orient(E_Gadcon_Client *gcc); static char *_gc_label(void); @@ -35,22 +35,24 @@ E_Gadcon_Client *gcc; Evas_Object *o_taskbar; Taskbar *taskbar; - E_Drop_Handler *drop_handler; - Ecore_Timer *drop_recalc_timer; }; struct _Taskbar { Instance *inst; Evas_Object *o_box; - Evas_Object *o_drop; - Evas_Object *o_drop_over; Evas_Object *o_empty; - Taskbar_Icon *ic_drop_before; - int drop_before; Evas_List *icons; - int show_label; + Evas_List *borders; E_Zone *zone; + int xpos; + int ypos; + int xmax; + int ymax; + int bwidth; + int bheight; + int bwmin; + int bhmin; }; struct _Taskbar_Icon @@ -61,13 +63,6 @@ Evas_Object *o_holder2; Evas_Object *o_icon2; E_Border *border; - struct - { - unsigned char start:1; - unsigned char dnd:1; - int x, y; - int dx, dy; - } drag; }; static Taskbar *_taskbar_new(Evas *evas, E_Zone * zone); @@ -75,33 +70,29 @@ static void _taskbar_cb_empty_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _taskbar_empty_handle(Taskbar * b); static void _taskbar_fill(Taskbar * b); +static void _taskbar_repack(Taskbar * b); static void _taskbar_empty(Taskbar * b); static void _taskbar_orient_set(Taskbar * b, int horizontal); static void _taskbar_resize_handle(Taskbar * b); -static void _taskbar_instance_drop_zone_recalc(Instance *inst); static Taskbar_Icon *_taskbar_icon_find(Taskbar * b, E_Border * bd); static Taskbar_Icon *_taskbar_icon_at_coord(Taskbar * b, Evas_Coord x, Evas_Coord y); static Taskbar_Icon *_taskbar_icon_new(Taskbar * b, E_Border * bd); +static void _taskbar_icon_add(Taskbar * b, E_Border * bd); +static void _taskbar_icon_remove(Taskbar * b, Taskbar_Icon * ic); static void _taskbar_icon_free(Taskbar_Icon * ic); static void _taskbar_icon_fill(Taskbar_Icon * ic); static void _taskbar_icon_empty(Taskbar_Icon * ic); static void _taskbar_icon_signal_emit(Taskbar_Icon * ic, char *sig, char *src); static Taskbar *_taskbar_zone_find(E_Zone * zone); -static int _taskbar_cb_timer_drop_recalc(void *data); static void _taskbar_cb_obj_moveresize(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _taskbar_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi); static void _taskbar_cb_menu_post(void *data, E_Menu *m); static void _taskbar_cb_icon_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _taskbar_cb_icon_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _taskbar_cb_icon_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _taskbar_cb_icon_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _taskbar_cb_icon_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _taskbar_cb_icon_move(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _taskbar_cb_icon_resize(void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _taskbar_cb_drag_finished(E_Drag *drag, int dropped); -static void _taskbar_inst_cb_enter(void *data, const char *type, void *event_info); -static void _taskbar_inst_cb_move(void *data, const char *type, void *event_info); -static void _taskbar_inst_cb_leave(void *data, const char *type, void *event_info); -static void _taskbar_inst_cb_drop(void *data, const char *type, void *event_info); static int _taskbar_cb_event_border_add(void *data, int type, void *event); static int _taskbar_cb_event_border_remove(void *data, int type, void *event); static int _taskbar_cb_event_border_iconify(void *data, int type, void *event); @@ -111,12 +102,17 @@ static int _taskbar_cb_event_border_desk_set(void *data, int type, void *event); static int _taskbar_cb_window_focus_in(void *data, int type, void *event); static int _taskbar_cb_window_focus_out(void *data, int type, void *event); +static int _taskbar_cb_window_property(void *data, int type, void *event); static int _taskbar_cb_event_desk_show(void *data, int type, void *event); +static Config_Item *_taskbar_config_item_get(const char *id); + +static E_Config_DD *conf_edd = NULL; +static E_Config_DD *conf_item_edd = NULL; Config *taskbar_config = NULL; static E_Gadcon_Client * -_gc_init(E_Gadcon *gc, char *name, char *id, char *style) +_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) { Taskbar *b; Evas_Object *o; @@ -124,12 +120,14 @@ Instance *inst; Evas_Coord x, y, w, h; int cx, cy, cw, ch; - const char *drop[] = { "enlightenment/border" }; + Config_Item *ci; inst = E_NEW(Instance, 1); + ci = _taskbar_config_item_get(id); + if (!ci->id) ci->id = evas_stringshare_add(id); b = _taskbar_new(gc->evas, gc->zone); - b->show_label = 1; + b->inst = inst; inst->taskbar = b; o = b->o_box; @@ -141,15 +139,9 @@ e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &cx, &cy, &cw, &ch); evas_object_geometry_get(o, &x, &y, &w, &h); - inst->drop_handler = - e_drop_handler_add(inst, - _taskbar_inst_cb_enter, _taskbar_inst_cb_move, - _taskbar_inst_cb_leave, _taskbar_inst_cb_drop, drop, 1, cx + x, cy + y, w, h); evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, _taskbar_cb_obj_moveresize, inst); evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, _taskbar_cb_obj_moveresize, inst); taskbar_config->instances = evas_list_append(taskbar_config->instances, inst); - /* FIXME: HACK!!!! */ - inst->drop_recalc_timer = ecore_timer_add(1.0, _taskbar_cb_timer_drop_recalc, inst); return gcc; } @@ -159,9 +151,7 @@ Instance *inst; inst = gcc->data; - ecore_timer_del(inst->drop_recalc_timer); taskbar_config->instances = evas_list_remove(taskbar_config->instances, inst); - e_drop_handler_del(inst->drop_handler); _taskbar_free(inst->taskbar); free(inst); } @@ -170,8 +160,10 @@ _gc_orient(E_Gadcon_Client *gcc) { Instance *inst; + int w; inst = gcc->data; + switch (gcc->gadcon->orient) { case E_GADCON_ORIENT_FLOAT: @@ -183,7 +175,10 @@ case E_GADCON_ORIENT_CORNER_BL: case E_GADCON_ORIENT_CORNER_BR: _taskbar_orient_set(inst->taskbar, 1); - e_gadcon_client_aspect_set(gcc, evas_list_count(inst->taskbar->icons) * 16, 16); + //e_gadcon_client_aspect_set(gcc, evas_list_count(inst->taskbar->borders) * 16 * 3, 16); + w =evas_list_count(inst->taskbar->borders); + + e_gadcon_client_aspect_set(gcc, w * inst->taskbar->bwmin, inst->taskbar->bheight); break; case E_GADCON_ORIENT_VERT: case E_GADCON_ORIENT_LEFT: @@ -193,12 +188,12 @@ case E_GADCON_ORIENT_CORNER_LB: case E_GADCON_ORIENT_CORNER_RB: _taskbar_orient_set(inst->taskbar, 0); - e_gadcon_client_aspect_set(gcc, 16, evas_list_count(inst->taskbar->icons) * 16); + e_gadcon_client_aspect_set(gcc, 16, evas_list_count(inst->taskbar->borders) * 16 * 3); break; default: break; } - if (evas_list_count(inst->taskbar->icons) < 1) + if (evas_list_count(inst->taskbar->borders) < 1) e_gadcon_client_aspect_set(gcc, 16, 16); e_gadcon_client_min_size_set(gcc, 16, 16); } @@ -229,15 +224,18 @@ Taskbar *b; b = E_NEW(Taskbar, 1); - b->o_box = e_box_add(evas); + b->o_box = e_table_add(evas); + b->xpos = 0; + b->ypos = 0; + b->xmax = 1; + b->ymax = 1; Evas_Coord w, h; evas_object_geometry_get(b->o_box, NULL, NULL, &w, &h); - e_box_homogenous_set(b->o_box, 0); - e_box_orientation_set(b->o_box, 1); - e_box_align_set(b->o_box, 0.5, 0.5); + e_table_homogenous_set(b->o_box, 0); + e_table_align_set(b->o_box, 0.5, 0.5); b->zone = zone; _taskbar_fill(b); return b; @@ -248,10 +246,6 @@ { _taskbar_empty(b); evas_object_del(b->o_box); - if (b->o_drop) - evas_object_del(b->o_drop); - if (b->o_drop_over) - evas_object_del(b->o_drop_over); if (b->o_empty) evas_object_del(b->o_empty); free(b); @@ -269,12 +263,18 @@ if (!taskbar_config->menu) { E_Menu *mn; + E_Menu_Item *mi; int cx, cy, cw, ch; mn = e_menu_new(); e_menu_post_deactivate_callback_set(mn, _taskbar_cb_menu_post, NULL); taskbar_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, _taskbar_cb_menu_configure, b); + e_gadcon_client_util_menu_items_append(b->inst->gcc, mn, 0); e_gadcon_canvas_zone_geometry_get(b->inst->gcc->gadcon, &cx, &cy, &cw, &ch); @@ -288,7 +288,7 @@ static void _taskbar_empty_handle(Taskbar * b) { - if (!b->icons) + if (!b->borders) { if (!b->o_empty) { @@ -298,17 +298,15 @@ evas_object_event_callback_add(b->o_empty, EVAS_CALLBACK_MOUSE_DOWN, _taskbar_cb_empty_mouse_down, b); evas_object_color_set(b->o_empty, 0, 0, 0, 0); evas_object_show(b->o_empty); - e_box_pack_end(b->o_box, b->o_empty); + e_table_pack(b->o_box, b->o_empty, 0, 0, 1, 1); evas_object_geometry_get(b->o_box, NULL, NULL, &w, &h); - if (e_box_orientation_get(b->o_box)) - w = h; - else - h = w; - e_box_pack_options_set(b->o_empty, 1, 1, /* fill */ - 1, 1, /* expand */ - 0.5, 0.5, /* align */ - w, h, /* min */ - w, h /* max */ + + //edje_object_size_min_calc(b->o_box, &w, &h); + e_table_pack_options_set(b->o_empty, 1, 1, /* fill */ + 1, 1, /* expand */ + 0.5, 0.5, /* align */ + 0, 0, /* min */ + -1, -1 /* max */ ); } } @@ -335,13 +333,27 @@ continue; if (((bd->desk == e_desk_current_get(b->zone)) && (bd->zone == b->zone)) || (bd->sticky)) { + b->borders = evas_list_append(b->borders, bd); ic = _taskbar_icon_new(b, bd); b->icons = evas_list_append(b->icons, ic); - e_box_pack_end(b->o_box, ic->o_holder); + e_table_pack(b->o_box, ic->o_holder, b->xpos, b->ypos, 1, 1); + e_table_pack_options_set(ic->o_holder, 0, 0, /* fill */ + 0, 0, /* expand */ + 0.5, 0.5, /* align */ + b->bwidth, b->bheight, /* min */ + b->bwidth, b->bheight /* max */ + ); if (bd->iconic) - _taskbar_icon_signal_emit(ic, "iconify", ""); + _taskbar_icon_signal_emit(ic, "instant_iconify", ""); if (bd->focused) - _taskbar_icon_signal_emit(ic, "focused", ""); + _taskbar_icon_signal_emit(ic, "instant_focused", ""); + b->xpos++; + if (b->xpos >= b->xmax) + { + b->xpos = 0; + b->ypos ++; + //if (b->ypos >= b->ymax) + } } } @@ -350,6 +362,52 @@ } static void +_taskbar_repack(Taskbar * b) +{ + Evas_List *borders; + E_Border *bd; + Taskbar_Icon *ic; + + e_table_freeze(b->o_box); + + while (b->icons) + { + _taskbar_icon_free(b->icons->data); + b->icons = evas_list_remove_list(b->icons, b->icons); + } + b->xpos = 0; + b->ypos = 0; + + for(borders = b->borders; borders; borders = evas_list_next(borders)) + { + bd = borders->data; + ic = _taskbar_icon_new(b, bd); + b->icons = evas_list_append(b->icons, ic); + e_table_pack(b->o_box, ic->o_holder, b->xpos, b->ypos, 1, 1); + e_table_pack_options_set(ic->o_holder, 0, 0, /* fill */ + 0, 0, /* expand */ + 0.5, 0.5, /* align */ + b->bwidth, b->bheight, /* min */ + b->bwidth, b->bheight /* max */ + ); + + if (bd->iconic) + _taskbar_icon_signal_emit(ic, "instant_iconify", ""); + if (bd->focused) + _taskbar_icon_signal_emit(ic, "instant_focused", ""); + b->xpos++; + if (b->xpos >= b->xmax) + { + b->xpos = 0; + b->ypos ++; + //if (b->ypos >= b->ymax) + } + } + + e_table_thaw(b->o_box); +} + +static void _taskbar_empty(Taskbar * b) { while (b->icons) @@ -357,14 +415,19 @@ _taskbar_icon_free(b->icons->data); b->icons = evas_list_remove_list(b->icons, b->icons); } + while (b->borders) + { + b->borders = evas_list_remove_list(b->borders, b->borders); + } + b->xpos = 0; + b->ypos = 0; _taskbar_empty_handle(b); } static void _taskbar_orient_set(Taskbar * b, int horizontal) { - e_box_orientation_set(b->o_box, horizontal); - e_box_align_set(b->o_box, 0.5, 0.5); + e_table_align_set(b->o_box, 0.5, 0.5); } static void @@ -372,36 +435,30 @@ { Evas_List *l; Taskbar_Icon *ic; - Evas_Coord w, h; + Evas_Coord w, h, wmin, hmin; + int wnum, wnum2, hnum; evas_object_geometry_get(b->o_box, NULL, NULL, &w, &h); - if (e_box_orientation_get(b->o_box)) - w = h; - else - h = w; - e_box_freeze(b->o_box); - for (l = b->icons; l; l = l->next) - { - ic = l->data; - e_box_pack_options_set(ic->o_holder, 1, 1, /* fill */ - 0, 0, /* expand */ - 0.5, 0.5, /* align */ - w, h, /* min */ - w, h /* max */ - ); - } - e_box_thaw(b->o_box); -} - -static void -_taskbar_instance_drop_zone_recalc(Instance *inst) -{ - Evas_Coord x, y, w, h; - int cx, cy, cw, ch; + if (!b->icons) + return; + ic = b->icons->data; + wnum = evas_list_count(b->borders); + edje_object_size_min_calc(ic->o_holder, &wmin, &hmin); + wnum2 = w / wmin; + if (wnum < wnum2) + wnum2 = wnum; + if (wnum2 < 1) + wnum2 = 1; + hnum = h / hmin; + if (hnum < 1) + hnum = 1; + b->xmax = wnum2; + b->bwidth = w / wnum2; + b->bheight = h / hnum; + b->bwmin = wmin; + b->bhmin = hmin; - evas_object_geometry_get(inst->o_taskbar, &x, &y, &w, &h); - e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &cx, &cy, &cw, &ch); - e_drop_handler_geometry_set(inst->drop_handler, cx + x, cy + y, w, h); + _taskbar_repack(b); } static Taskbar_Icon * @@ -457,7 +514,6 @@ evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOUSE_OUT, _taskbar_cb_icon_mouse_out, ic); evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOUSE_DOWN, _taskbar_cb_icon_mouse_down, ic); evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOUSE_UP, _taskbar_cb_icon_mouse_up, ic); - evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOUSE_MOVE, _taskbar_cb_icon_mouse_move, ic); evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOVE, _taskbar_cb_icon_move, ic); evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_RESIZE, _taskbar_cb_icon_resize, ic); evas_object_show(ic->o_holder); @@ -474,6 +530,29 @@ } static void +_taskbar_icon_add(Taskbar * b, E_Border * bd) +{ + + b->borders = evas_list_append(b->borders, bd); + _taskbar_repack(b); + _taskbar_empty_handle(b); + _taskbar_resize_handle(b); + + _gc_orient(b->inst->gcc); +} + +static void +_taskbar_icon_remove(Taskbar * b, Taskbar_Icon * ic) +{ + + b->borders = evas_list_remove(b->borders, ic->border); + _taskbar_repack(b); + _taskbar_empty_handle(b); + _taskbar_resize_handle(b); + _gc_orient(b->inst->gcc); +} + +static void _taskbar_icon_free(Taskbar_Icon * ic) { @@ -483,8 +562,6 @@ e_object_del(E_OBJECT(taskbar_config->menu)); taskbar_config->menu = NULL; } - if (ic->taskbar->ic_drop_before == ic) - ic->taskbar->ic_drop_before = NULL; _taskbar_icon_empty(ic); evas_object_del(ic->o_holder); evas_object_del(ic->o_holder2); @@ -556,13 +633,6 @@ return NULL; } -static int -_taskbar_cb_timer_drop_recalc(void *data) -{ - _taskbar_instance_drop_zone_recalc((Instance *)data); - return 1; -} - static void _taskbar_cb_obj_moveresize(void *data, Evas *e, Evas_Object *obj, void *event_info) { @@ -570,7 +640,48 @@ inst = (Instance *)data; _taskbar_resize_handle(inst->taskbar); - _taskbar_instance_drop_zone_recalc(inst); + +} + +static void +_taskbar_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Taskbar *b; + Config_Item *ci; + + b = (Taskbar *)data; + ci = _taskbar_config_item_get(b->inst->gcc->id); + _config_taskbar_module(ci); +} + +void +_taskbar_config_updated(const char *id) +{ + Evas_List *l; + Config_Item *ci; + if (!taskbar_config) return; + ci = _taskbar_config_item_get(id); + for (l = taskbar_config->instances; l; l = l->next) + { + Instance *inst; + inst = l->data; + if (!inst->gcc->id) continue; + if (!strcmp(inst->gcc->id, ci->id)) + { + for (l = inst->taskbar->icons; l; l = l->next) + { + if (!ci->show_label) + edje_object_signal_emit(l->data, "label_hidden", ""); + else + edje_object_signal_emit(l->data, "label_visible", ""); + + } + _taskbar_resize_handle(inst->taskbar); + _gc_orient(inst->gcc); + break; + } + } + } static void @@ -587,11 +698,13 @@ { Evas_Event_Mouse_In *ev; Taskbar_Icon *ic; + Config_Item *ci; ev = event_info; ic = data; + ci = _taskbar_config_item_get(ic->taskbar->inst->gcc->id); _taskbar_icon_signal_emit(ic, "active", ""); - if (ic->taskbar->show_label) + if (ci->show_label) _taskbar_icon_signal_emit(ic, "label_active", ""); } @@ -600,11 +713,13 @@ { Evas_Event_Mouse_Out *ev; Taskbar_Icon *ic; + Config_Item *ci; ev = event_info; ic = data; + ci = _taskbar_config_item_get(ic->taskbar->inst->gcc->id); _taskbar_icon_signal_emit(ic, "passive", ""); - if (ic->taskbar->show_label) + if (ci->show_label) _taskbar_icon_signal_emit(ic, "label_passive", ""); } @@ -628,11 +743,17 @@ { E_Menu *mn; + E_Menu_Item *mi; mn = e_menu_new(); e_menu_post_deactivate_callback_set(mn, _taskbar_cb_menu_post, NULL); taskbar_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, _taskbar_cb_menu_configure, ic->taskbar); + /* FIXME: other icon options go here too */ e_gadcon_client_util_menu_items_append(ic->taskbar->inst->gcc, mn, 0); @@ -721,48 +842,6 @@ } static void -_taskbar_cb_icon_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info) -{ - Evas_Event_Mouse_Move *ev; - Taskbar_Icon *ic; - - ev = event_info; - ic = data; - if (ic->drag.start) - { - int dx, dy; - - dx = ev->cur.output.x - ic->drag.x; - dy = ev->cur.output.y - ic->drag.y; - if (((dx * dx) + (dy * dy)) > (e_config->drag_resist * e_config->drag_resist)) - { - E_Drag *d; - Evas_Object *o; - Evas_Coord x, y, w, h; - const char *drag_types[] = { "enlightenment/border" }; - - ic->drag.dnd = 1; - ic->drag.start = 0; - - evas_object_geometry_get(ic->o_icon, &x, &y, &w, &h); - d = e_drag_new(ic->taskbar->inst->gcc->gadcon->zone->container, - x, y, drag_types, 1, ic->border, -1, _taskbar_cb_drag_finished); - o = e_border_icon_add(ic->border, e_drag_evas_get(d)); - e_drag_object_set(d, o); - - e_drag_resize(d, w, h); - e_drag_start(d, ic->drag.x, ic->drag.y); - evas_event_feed_mouse_up(ic->taskbar->inst->gcc->gadcon->evas, 1, EVAS_BUTTON_NONE, ecore_x_current_time_get(), NULL); - e_object_ref(E_OBJECT(ic->border)); - ic->taskbar->icons = evas_list_remove(ic->taskbar->icons, ic); - _taskbar_resize_handle(ic->taskbar); - _gc_orient(ic->taskbar->inst->gcc); - _taskbar_icon_free(ic); - } - } -} - -static void _taskbar_cb_icon_move(void *data, Evas *e, Evas_Object *obj, void *event_info) { Taskbar_Icon *ic; @@ -786,242 +865,11 @@ evas_object_raise(ic->o_holder2); } -static void -_taskbar_cb_drag_finished(E_Drag *drag, int dropped) -{ - E_Border *bd; - - bd = drag->data; - if (!dropped) - e_border_uniconify(bd); - e_object_unref(E_OBJECT(bd)); -} - -static void -_taskbar_cb_drop_move(void *data, Evas *e, Evas_Object *obj, void *event_info) -{ - Taskbar *b; - Evas_Coord x, y; - - b = data; - evas_object_geometry_get(b->o_drop, &x, &y, NULL, NULL); - evas_object_move(b->o_drop_over, x, y); -} - -static void -_taskbar_cb_drop_resize(void *data, Evas *e, Evas_Object *obj, void *event_info) -{ - Taskbar *b; - Evas_Coord w, h; - - b = data; - evas_object_geometry_get(b->o_drop, NULL, NULL, &w, &h); - evas_object_resize(b->o_drop_over, w, h); -} - -static void -_taskbar_inst_cb_enter(void *data, const char *type, void *event_info) -{ - E_Event_Dnd_Enter *ev; - Instance *inst; - Evas_Object *o, *o2; - Taskbar_Icon *ic; - int cx, cy, cw, ch; - - ev = event_info; - inst = data; - o = edje_object_add(evas_object_evas_get(inst->taskbar->o_box)); - inst->taskbar->o_drop = o; - o2 = edje_object_add(evas_object_evas_get(inst->taskbar->o_box)); - inst->taskbar->o_drop_over = o2; - evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, _taskbar_cb_drop_move, inst->taskbar); - evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, _taskbar_cb_drop_resize, inst->taskbar); - e_theme_edje_object_set(o, "base/theme/modules/taskbar", "modules/taskbar/drop"); - e_theme_edje_object_set(o2, "base/theme/modules/taskbar", "modules/taskbar/drop_overlay"); - evas_object_layer_set(o2, 19999); - evas_object_show(o); - evas_object_show(o2); - e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &cx, &cy, &cw, &ch); - ic = _taskbar_icon_at_coord(inst->taskbar, ev->x - cx, ev->y - cy); - inst->taskbar->ic_drop_before = ic; - if (ic) - { - Evas_Coord ix, iy, iw, ih; - int before = 0; - - evas_object_geometry_get(ic->o_holder, &ix, &iy, &iw, &ih); - if (e_box_orientation_get(inst->taskbar->o_box)) - { - if ((ev->x - cx) < (ix + (iw / 2))) - before = 1; - } - else - { - if ((ev->y - cy) < (iy + (ih / 2))) - before = 1; - } - if (before) - e_box_pack_before(inst->taskbar->o_box, inst->taskbar->o_drop, ic->o_holder); - else - e_box_pack_after(inst->taskbar->o_box, inst->taskbar->o_drop, ic->o_holder); - inst->taskbar->drop_before = before; - } - else - e_box_pack_end(inst->taskbar->o_box, o); - e_box_pack_options_set(o, 1, 1, /* fill */ - 0, 0, /* expand */ - 0.5, 0.5, /* align */ - 1, 1, /* min */ - -1, -1 /* max */ - ); - _taskbar_resize_handle(inst->taskbar); - _gc_orient(inst->gcc); -} - -static void -_taskbar_inst_cb_move(void *data, const char *type, void *event_info) -{ - E_Event_Dnd_Move *ev; - Instance *inst; - Taskbar_Icon *ic; - int cx, cy, cw, ch; - - ev = event_info; - inst = data; - e_box_unpack(inst->taskbar->o_drop); - e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &cx, &cy, &cw, &ch); - ic = _taskbar_icon_at_coord(inst->taskbar, ev->x - cx, ev->y - cy); - inst->taskbar->ic_drop_before = ic; - if (ic) - { - Evas_Coord ix, iy, iw, ih; - int before = 0; - - evas_object_geometry_get(ic->o_holder, &ix, &iy, &iw, &ih); - if (e_box_orientation_get(inst->taskbar->o_box)) - { - if ((ev->x - cx) < (ix + (iw / 2))) - before = 1; - } - else - { - if ((ev->y - cy) < (iy + (ih / 2))) - before = 1; - } - if (before) - e_box_pack_before(inst->taskbar->o_box, inst->taskbar->o_drop, ic->o_holder); - else - e_box_pack_after(inst->taskbar->o_box, inst->taskbar->o_drop, ic->o_holder); - inst->taskbar->drop_before = before; - } - else - e_box_pack_end(inst->taskbar->o_box, inst->taskbar->o_drop); - e_box_pack_options_set(inst->taskbar->o_drop, 1, 1, /* fill */ - 0, 0, /* expand */ - 0.5, 0.5, /* align */ - 1, 1, /* min */ - -1, -1 /* max */ - ); - _taskbar_resize_handle(inst->taskbar); - _gc_orient(inst->gcc); -} - -static void -_taskbar_inst_cb_leave(void *data, const char *type, void *event_info) -{ - E_Event_Dnd_Leave *ev; - Instance *inst; - - ev = event_info; - inst = data; - inst->taskbar->ic_drop_before = NULL; - evas_object_del(inst->taskbar->o_drop); - inst->taskbar->o_drop = NULL; - evas_object_del(inst->taskbar->o_drop_over); - inst->taskbar->o_drop_over = NULL; - _taskbar_resize_handle(inst->taskbar); - _gc_orient(inst->gcc); -} - -static void -_taskbar_inst_cb_drop(void *data, const char *type, void *event_info) -{ - E_Event_Dnd_Drop *ev; - Instance *inst; - E_Border *bd = NULL; - Taskbar *b; - Taskbar_Icon *ic, *ic2; - Evas_List *l; - - ev = event_info; - inst = data; - if (!strcmp(type, "enlightenment/border")) - { - bd = ev->data; - if (!bd) - return; - } - - if (!bd->iconic) - e_border_iconify(bd); - - ic2 = inst->taskbar->ic_drop_before; - if (ic2) - { - /* Add new eapp before this icon */ - if (!inst->taskbar->drop_before) - { - for (l = inst->taskbar->icons; l; l = l->next) - { - if (l->data == ic2) - { - if (l->next) - ic2 = l->next->data; - else - ic2 = NULL; - break; - } - } - } - if (!ic2) - goto atend; - b = inst->taskbar; - if (_taskbar_icon_find(b, bd)) - return; - ic = _taskbar_icon_new(b, bd); - if (!ic) - return; - b->icons = evas_list_prepend_relative(b->icons, ic, ic2); - e_box_pack_before(b->o_box, ic->o_holder, ic2->o_holder); - } - else - { - atend: - b = inst->taskbar; - if (_taskbar_icon_find(b, bd)) - return; - ic = _taskbar_icon_new(b, bd); - if (!ic) - return; - b->icons = evas_list_append(b->icons, ic); - e_box_pack_end(b->o_box, ic->o_holder); - } - - evas_object_del(inst->taskbar->o_drop); - inst->taskbar->o_drop = NULL; - evas_object_del(inst->taskbar->o_drop_over); - inst->taskbar->o_drop_over = NULL; - _taskbar_empty_handle(b); - _taskbar_resize_handle(inst->taskbar); - _gc_orient(inst->gcc); -} - static int _taskbar_cb_event_border_add(void *data, int type, void *event) { E_Event_Border_Add *ev; Taskbar *b; - Taskbar_Icon *ic; ev = event; b = _taskbar_zone_find(ev->border->zone); @@ -1029,20 +877,13 @@ return 1; if (_taskbar_icon_find(b, ev->border)) return 1; - ic = _taskbar_icon_new(b, ev->border); - if (!ic) - return 1; if (ev->border->client.netwm.state.skip_taskbar) return 1; if (ev->border->user_skip_winlist) return 1; if ((ev->border->desk == e_desk_current_get(ev->border->zone)) || (ev->border->sticky)) { - b->icons = evas_list_append(b->icons, ic); - e_box_pack_end(b->o_box, ic->o_holder); - _taskbar_empty_handle(b); - _taskbar_resize_handle(b); - _gc_orient(b->inst->gcc); + _taskbar_icon_add(b, ev->border); } return 1; } @@ -1062,11 +903,7 @@ ic = _taskbar_icon_find(b, ev->border); if (!ic) return 1; - _taskbar_icon_free(ic); - b->icons = evas_list_remove(b->icons, ic); - _taskbar_empty_handle(b); - _taskbar_resize_handle(b); - _gc_orient(b->inst->gcc); + _taskbar_icon_remove(b, ic); return 1; } @@ -1155,13 +992,8 @@ continue; if (ev->border->client.netwm.state.skip_taskbar) continue; - ic = _taskbar_icon_new(inst->taskbar, ev->border); - inst->taskbar->icons = evas_list_append(inst->taskbar->icons, ic); - e_box_pack_end(inst->taskbar->o_box, ic->o_holder); - _taskbar_empty_handle(inst->taskbar); - _taskbar_resize_handle(inst->taskbar); - _gc_orient(inst->taskbar->inst->gcc); - } + _taskbar_icon_add(inst->taskbar, ev->border); + } } } else @@ -1169,12 +1001,8 @@ ic = _taskbar_icon_find(inst->taskbar, ev->border); if ((ic) && (!ev->border->sticky)) { - _taskbar_icon_free(ic); - inst->taskbar->icons = evas_list_remove(inst->taskbar->icons, ic); - _taskbar_empty_handle(inst->taskbar); - _taskbar_resize_handle(inst->taskbar); - _gc_orient(inst->taskbar->inst->gcc); - } + _taskbar_icon_remove(inst->taskbar, ic); + } } } return 1; @@ -1202,30 +1030,21 @@ ic = _taskbar_icon_find(b, bd); if (ic) return 1; - ic = _taskbar_icon_new(b, ev->border); if (b->zone == ev->border->zone) { if (bd->user_skip_winlist) return 1; if (bd->client.netwm.state.skip_taskbar) return 1; - b->icons = evas_list_append(b->icons, ic); - e_box_pack_end(b->o_box, ic->o_holder); - _taskbar_empty_handle(b); - _taskbar_resize_handle(b); - _gc_orient(b->inst->gcc); - } + _taskbar_icon_add(b, bd); + } } else { ic = _taskbar_icon_find(b, bd); if (!ic) return 1; - _taskbar_icon_free(ic); - b->icons = evas_list_remove(b->icons, ic); - _taskbar_empty_handle(b); - _taskbar_resize_handle(b); - _gc_orient(b->inst->gcc); + _taskbar_icon_remove(b, ic); } return 0; } @@ -1235,7 +1054,6 @@ { Ecore_X_Event_Window_Focus_In *ev; E_Border *bd; - Taskbar *b; Taskbar_Icon *ic; Evas_List *l; @@ -1260,7 +1078,6 @@ { Ecore_X_Event_Window_Focus_Out *ev; E_Border *bd; - Taskbar *b; Taskbar_Icon *ic; Evas_List *l; @@ -1282,6 +1099,40 @@ } static int +_taskbar_cb_window_property(void *data, int type, void *event) +{ + Ecore_X_Event_Window_Property *ev; + E_Border *bd; + Taskbar_Icon *ic; + Evas_List *l; + char *label; + + ev = event; + bd = e_border_find_by_client_window(ev->win); + if (!bd) + return 1; + + for (l = taskbar_config->instances; l; l = l->next) + { + Instance *inst; + + inst = l->data; + ic = _taskbar_icon_find(inst->taskbar, bd); + if (ic) { + label = ic->border->client.netwm.name; + if (!label) + label = ic->border->client.icccm.title; + if (!label) + label = "?"; + edje_object_part_text_set(ic->o_holder, "label", label); + edje_object_part_text_set(ic->o_holder2, "label", label); + + } + } + +} + +static int _taskbar_cb_event_desk_show(void *data, int type, void *event) { E_Event_Desk_Show *e; @@ -1299,6 +1150,28 @@ return 1; } +static Config_Item * +_taskbar_config_item_get(const char *id) +{ + Evas_List *l; + Config_Item *ci; + + for (l = taskbar_config->items; l; l = l->next) + { + ci = l->data; + if (!ci->id) continue; + if (!strcmp(ci->id, id)) return ci; + } + + ci = E_NEW(Config_Item, 1); + ci->id = evas_stringshare_add(id); + ci->show_label = 1; + + taskbar_config->items = evas_list_append(taskbar_config->items, ci); + return ci; +} + + /***************************************************************************/ /**/ /* module setup */ @@ -1310,8 +1183,35 @@ EAPI void * e_modapi_init(E_Module *m) { - taskbar_config = E_NEW(Config, 1); + bindtextdomain(PACKAGE, LOCALEDIR); + bind_textdomain_codeset(PACKAGE, "UTF-8"); + conf_item_edd = E_CONFIG_DD_NEW("Taskbar_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("TClock_Config", Config); +#undef T +#undef D +#define T Config +#define D conf_edd + E_CONFIG_LIST(D, T, items, conf_item_edd); + + taskbar_config = e_config_domain_load("module.taskbar", conf_edd); + if (!taskbar_config) { + Config_Item *ci; + taskbar_config = E_NEW(Config, 1); + ci = E_NEW(Config_Item, 1); + ci->id = evas_stringshare_add("0"); + ci->show_label = 1; + + taskbar_config->items = evas_list_append(taskbar_config->items, ci); + } + taskbar_config->module = m; taskbar_config->handlers = evas_list_append @@ -1333,25 +1233,10 @@ taskbar_config->handlers = evas_list_append (taskbar_config->handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, _taskbar_cb_window_focus_out, NULL)); taskbar_config->handlers = evas_list_append + (taskbar_config->handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, _taskbar_cb_window_property, NULL)); + taskbar_config->handlers = evas_list_append (taskbar_config->handlers, ecore_event_handler_add(E_EVENT_DESK_SHOW, _taskbar_cb_event_desk_show, NULL)); -/* FIXME: add these later for things taskbar-like functionality - taskbar_config->handlers = evas_list_append - (taskbar_config->handlers, ecore_event_handler_add - (E_EVENT_BORDER_DESK_SET, _taskbar_cb_event_border_zone_set, NULL)); - taskbar_config->handlers = evas_list_append - (taskbar_config->handlers, ecore_event_handler_add - (E_EVENT_BORDER_SHOW, _taskbar_cb_event_border_zone_set, NULL)); - taskbar_config->handlers = evas_list_append - (taskbar_config->handlers, ecore_event_handler_add - (E_EVENT_BORDER_HIDE, _taskbar_cb_event_border_zone_set, NULL)); - taskbar_config->handlers = evas_list_append - (taskbar_config->handlers, ecore_event_handler_add - (E_EVENT_BORDER_STACK, _taskbar_cb_event_border_zone_set, NULL)); - taskbar_config->handlers = evas_list_append - (taskbar_config->handlers, ecore_event_handler_add - (E_EVENT_BORDER_STICK, _taskbar_cb_event_border_zone_set, NULL)); - */ e_gadcon_provider_register(&_gadcon_class); } @@ -1360,6 +1245,9 @@ { e_gadcon_provider_unregister(&_gadcon_class); + if (taskbar_config->config_dialog) + e_object_del(E_OBJECT(taskbar_config->config_dialog)); + while (taskbar_config->handlers) { ecore_event_handler_del(taskbar_config->handlers->data); @@ -1373,12 +1261,27 @@ } free(taskbar_config); taskbar_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) { + Evas_List *l; + + for (l = taskbar_config->instances; l; l = l->next) + { + Instance *inst; + Config_Item *ci; + + inst = l->data; + ci = _taskbar_config_item_get(inst->gcc->id); + if (ci->id) evas_stringshare_del(ci->id); + ci->id = evas_stringshare_add(inst->gcc->id); + } + e_config_domain_save("module.taskbar", conf_edd, taskbar_config); return 1; } =================================================================== RCS file: /cvs/e/e_modules/taskbar/e_mod_main.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_mod_main.h 14 Jun 2006 00:09:11 -0000 1.2 +++ e_mod_main.h 22 Jun 2006 05:30:18 -0000 1.3 @@ -5,14 +5,23 @@ #define E_MOD_MAIN_H typedef struct _Config Config; +typedef struct _Config_Item Config_Item; struct _Config { /* just config state */ E_Module *module; Evas_List *instances; + Evas_List *items; E_Menu *menu; Evas_List *handlers; + E_Config_Dialog *config_dialog; +}; + +struct _Config_Item +{ + const char *id; + int show_label; }; EAPI extern E_Module_Api e_modapi; @@ -22,5 +31,9 @@ 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 _config_taskbar_module(Config_Item *ci); +void _taskbar_config_updated(const char *id); +extern Config *taskbar_config; #endif All the advantages of Linux Managed Hosting--Without the Cost and Risk! Fully trained technicians. The highest number of Red Hat certifications in the hosting industry. Fanatical Support. Click to learn more http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs