Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/modules/pager Modified Files: e_mod_main.c e_mod_main.h Log Message: SOME of the pager is fixed. not all. it may leak and more - i'm in the middle of fixing it up and so on. bear with me on this. it's less offensive now though :) =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/modules/pager/e_mod_main.c,v retrieving revision 1.58 retrieving revision 1.59 diff -u -3 -r1.58 -r1.59 --- e_mod_main.c 15 Mar 2005 10:22:23 -0000 1.58 +++ e_mod_main.c 18 Mar 2005 06:39:20 -0000 1.59 @@ -20,7 +20,7 @@ static void _pager_face_enable(Pager_Face *face); static void _pager_face_disable(Pager_Face *face); static void _pager_face_zone_set(Pager_Face *face, E_Zone *zone); -static void _pager_face_zone_leave(Pager_Face *face); +static void _pager_face_zone_unset(Pager_Face *face); static Pager_Desk *_pager_desk_new(Pager_Face *face, E_Desk *desk, int x, int y); static void _pager_desk_free(Pager_Desk *desk); @@ -57,6 +57,15 @@ static void _pager_face_cb_menu_size_large(void *data, E_Menu *m, E_Menu_Item *mi); static void _pager_face_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi); +static void _pager_desk_cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _pager_desk_cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _pager_desk_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _pager_desk_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info); + +static void _pager_desk_cb_intercept_move(void *data, Evas_Object *o, Evas_Coord x, Evas_Coord y); +static void _pager_desk_cb_intercept_resize(void *data, Evas_Object *o, Evas_Coord w, Evas_Coord h); + static int _pager_count; static E_Config_DD *_conf_edd; @@ -271,24 +280,10 @@ face = E_NEW(Pager_Face, 1); if (!face) return NULL; + /* store what evas we live in */ face->evas = zone->container->bg_evas; - - o = evas_object_rectangle_add(face->evas); - face->base = o; - evas_object_color_set(o, 128, 128, 128, 0); - evas_object_pass_events_set(o, 0); - evas_object_repeat_events_set(o, 0); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _pager_face_cb_mouse_down, face); - evas_object_show(o); - - o = edje_object_add(face->evas); - face->screen = o; - edje_object_file_set(o, - /* FIXME: "default.eet" needs to come from conf */ - e_path_find(path_themes, "default.eet"), - "modules/pager/screen"); - evas_object_show(o); - + + /* set up event handles for when windows change and desktops */ face->ev_handler_border_resize = ecore_event_handler_add(E_EVENT_BORDER_RESIZE, _pager_face_cb_event_border_resize, face); @@ -323,8 +318,41 @@ ecore_event_handler_add(E_EVENT_DESK_SHOW, _pager_face_cb_event_desk_show, face); + /* the bg */ + o = edje_object_add(face->evas); + face->pager_object = o; + edje_object_file_set(o, + /* FIXME: "default.eet" needs to come from conf */ + e_path_find(path_themes, "default.eet"), + "modules/pager/main"); + evas_object_show(o); + + o = e_table_add(face->evas); + face->table_object = o; + e_table_homogenous_set(o, 1); + edje_object_part_swallow(face->pager_object, "items", face->table_object); + evas_object_show(o); + _pager_face_zone_set(face, zone); + +#if 0 + o = evas_object_rectangle_add(face->evas); + face->base = o; + evas_object_color_set(o, 128, 128, 128, 0); + evas_object_pass_events_set(o, 0); + evas_object_repeat_events_set(o, 0); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _pager_face_cb_mouse_down, face); + evas_object_show(o); + o = edje_object_add(face->evas); + face->screen = o; + edje_object_file_set(o, + /* FIXME: "default.eet" needs to come from conf */ + e_path_find(path_themes, "default.eet"), + "modules/pager/main"); + evas_object_show(o); +#endif + face->gmc = e_gadman_client_new(face->zone->container->gadman); e_gadman_client_domain_set(face->gmc, "module.pager", _pager_count++); e_gadman_client_zone_set(face->gmc, face->zone); @@ -333,9 +361,10 @@ E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE | E_GADMAN_POLICY_HSIZE | - E_GADMAN_POLICY_VSIZE); + E_GADMAN_POLICY_VSIZE | + E_GADMAN_POLICY_FIXED_ZONE); e_gadman_client_min_size_set(face->gmc, 8, 8); - e_gadman_client_max_size_set(face->gmc, 256, 256); + e_gadman_client_max_size_set(face->gmc, 400, 400); e_gadman_client_auto_size_set(face->gmc, 64, 64); e_gadman_client_align_set(face->gmc, 0.0, 1.0); e_gadman_client_resize(face->gmc, 80, 60); @@ -348,12 +377,12 @@ void _pager_face_free(Pager_Face *face) { - if (face->base) evas_object_del(face->base); - if (face->screen) evas_object_del(face->screen); + if (face->pager_object) evas_object_del(face->pager_object); + if (face->table_object) evas_object_del(face->table_object); e_gadman_client_save(face->gmc); e_object_del(E_OBJECT(face->gmc)); - _pager_face_zone_leave(face); + _pager_face_zone_unset(face); ecore_event_handler_del(face->ev_handler_border_resize); ecore_event_handler_del(face->ev_handler_border_move); ecore_event_handler_del(face->ev_handler_border_add); @@ -462,25 +491,7 @@ Pager_Win *win; face->conf->enabled = 1; - - evas_object_show(face->base); - evas_object_show(face->screen); - for (desks = face->desks; desks; desks = desks->next) - { - desk = desks->data; - evas_object_show(desk->obj); - - for (wins = desk->wins; wins; wins = wins->next) - { - win = wins->data; - if (!win->border->iconic) - { - evas_object_show(win->obj); - if (win->icon) - evas_object_show(win->icon); - } - } - } + evas_object_show(face->pager_object); e_config_save_queue(); } @@ -492,25 +503,7 @@ Pager_Win *win; face->conf->enabled = 0; - - evas_object_hide(face->base); - evas_object_hide(face->screen); - for (desks = face->desks; desks; desks = desks->next) - { - desk = desks->data; - evas_object_hide(desk->obj); - - for (wins = desk->wins; wins; wins = wins->next) - { - win = wins->data; - if (!win->border->iconic) - { - evas_object_hide(win->obj); - if (win->icon) - evas_object_hide(win->icon); - } - } - } + evas_object_hide(face->pager_object); e_config_save_queue(); } @@ -528,21 +521,21 @@ face->ynum = desks_y; for (x = 0; x < desks_x; x++) - for (y = 0; y < desks_y; y++) - { - Pager_Desk *pd; - E_Desk *desk; - - desk = e_desk_at_xy_get(zone, x, y); - pd = _pager_desk_new(face, desk, x, y); - if (pd) - face->desks = evas_list_append(face->desks, pd); - } - evas_object_resize(face->base, face->fw * face->xnum, face->fh * face->ynum); + { + for (y = 0; y < desks_y; y++) + { + Pager_Desk *pd; + E_Desk *desk; + + desk = e_desk_at_xy_get(zone, x, y); + pd = _pager_desk_new(face, desk, x, y); + if (pd) face->desks = evas_list_append(face->desks, pd); + } + } } static void -_pager_face_zone_leave(Pager_Face *face) +_pager_face_zone_unset(Pager_Face *face) { Evas_List *list; e_object_unref(E_OBJECT(face->zone)); @@ -570,32 +563,50 @@ pd->xpos = xpos; pd->ypos = ypos; - if (desk == e_desk_current_get(desk->zone)) - { - pd->current = 1; - evas_object_move(face->screen, - face->fx + (face->fw * pd->xpos), - face->fy + (face->fh * pd->ypos)); - } - pd->desk = desk; e_object_ref(E_OBJECT(desk)); pd->face = face; o = edje_object_add(face->evas); - pd->obj = o; + pd->desk_object = o; edje_object_file_set(o, /* FIXME: "default.eet" needs to come from conf */ e_path_find(path_themes, "default.eet"), "modules/pager/desk"); - evas_object_pass_events_set(o, 1); - - evas_object_resize(o, face->fw, face->fh); - evas_object_move(o, face->fx + (pd->xpos * face->fw), face->fy + (pd->ypos * face->fh)); + e_table_pack(face->table_object, o, xpos, ypos, 1, 1); + e_table_pack_options_set(o, 1, 1, 1, 1, 0.5, 0.5, 0, 0, -1, -1); + evas_object_show(o); + + o = evas_object_rectangle_add(face->evas); + pd->event_object = o; + evas_object_layer_set(o, 2); + evas_object_repeat_events_set(o, 1); + evas_object_color_set(o, 0, 0, 0, 0); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_IN, _pager_desk_cb_mouse_in, pd); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_OUT, _pager_desk_cb_mouse_out, pd); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _pager_desk_cb_mouse_down, pd); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, _pager_desk_cb_mouse_up, pd); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, _pager_desk_cb_mouse_move, pd); evas_object_show(o); - evas_object_raise(face->screen); + + o = e_layout_add(face->evas); + pd->layout_object = o; + evas_object_intercept_move_callback_add(o, _pager_desk_cb_intercept_move, pd); + evas_object_intercept_resize_callback_add(o, _pager_desk_cb_intercept_resize, pd); + + e_layout_virtual_size_set(o, desk->zone->w, desk->zone->h); + edje_object_part_swallow(pd->desk_object, "items", pd->layout_object); + evas_object_show(o); + + if (desk == e_desk_current_get(desk->zone)) + { + if (!pd->current) + { + pd->current = 1; + edje_object_signal_emit(pd->desk_object, "active", ""); + } + } - /* Add windows to the desk */ for (wins = desk->zone->container->clients; wins; wins = wins->next) { win = wins->data; @@ -616,7 +627,9 @@ { Evas_List *list; - if (desk->obj) evas_object_del(desk->obj); + if (desk->desk_object) evas_object_del(desk->desk_object); + if (desk->layout_object) evas_object_del(desk->layout_object); + if (desk->event_object) evas_object_del(desk->event_object); e_object_unref(E_OBJECT(desk->desk)); for (list = desk->wins; list; list = list->next) @@ -651,10 +664,9 @@ /* FIXME: "default.eet" needs to come from conf */ e_path_find(path_themes, "default.eet"), "modules/pager/window"); - evas_object_pass_events_set(o, 1); if (visible) evas_object_show(o); - evas_object_raise(desk->face->screen); + e_layout_pack(desk->layout_object, win->obj); app = e_app_window_name_class_find(border->client.icccm.name, border->client.icccm.class); if (app) @@ -684,49 +696,19 @@ static void _pager_face_draw(Pager_Face *face) { - Evas_List *desks, *wins; - Pager_Desk *desk; - Pager_Win *win; - - evas_object_move(face->base, face->fx, face->fy); - evas_object_resize(face->base, face->fw * face->xnum, face->fh * face->ynum); - evas_object_resize(face->screen, face->fw, face->fh); - - desks = face->desks; - while (desks) - { - desk = desks->data; - evas_object_resize(desk->obj, face->fw, face->fh); - evas_object_move(desk->obj, face->fx + (face->fw * desk->xpos), - face->fy + (face->fh * desk->ypos)); - if (desk->current) - evas_object_move(face->screen, face->fx + (face->fw * desk->xpos), - face->fy + (face->fh * desk->ypos)); - - wins = desk->wins; - while (wins) - { - win = wins->data; - _pager_window_move(face, win); - - wins = wins->next; - } - desks = desks->next; - } + evas_object_move(face->pager_object, face->fx, face->fy); + evas_object_resize(face->pager_object, face->fw, face->fh); } static void _pager_window_move(Pager_Face *face, Pager_Win *win) { - double scalex, scaley; - - scalex = (double)face->fw / (double)face->zone->w; - scaley = (double)face->fh / (double)face->zone->h; - - evas_object_resize(win->obj, win->border->w * scalex, win->border->h * scaley); - evas_object_move(win->obj, - face->fx + (win->desk->xpos * face->fw) + ((win->border->x - face->zone->x) * scalex), - face->fy + (win->desk->ypos * face->fh) + ((win->border->y - face->zone->y) * scaley)); + e_layout_child_move(win->obj, + win->border->x - win->desk->desk->zone->x, + win->border->y - win->desk->desk->zone->y); + e_layout_child_resize(win->obj, + win->border->w, + win->border->h); } static void @@ -737,40 +719,6 @@ face = data; ev = event_info; - if (ev->button == 3) - { - e_menu_activate_mouse(face->menu, face->zone, - ev->output.x, ev->output.y, 1, 1, - E_MENU_POP_DIRECTION_DOWN); - e_util_container_fake_mouse_up_all_later(face->zone->container); - } - else if (ev->button == 1) - { - Evas_Coord x, y; - int xpos, ypos; - Evas_List *list; - Pager_Desk *desk; - - evas_pointer_canvas_xy_get(face->evas, &x, &y); - - xpos = (x - face->fx) / face->fw; - ypos = (y - face->fy) / face->fh; - - for (list = face->desks; list; list = list->next) - { - desk = list->data; - - if ((desk->xpos == xpos) && (desk->ypos == ypos)) - { - desk->current = 1; - e_desk_show(desk->desk); - } - else - { - desk->current = 0; - } - } - } } static Pager_Desk * @@ -824,7 +772,6 @@ Pager_Win *win; Pager_Desk *desk; Evas_Coord x, y, w, h; - Evas_Coord deskw, deskh; int xcount, ycount; Evas_List *desks, *wins; @@ -832,45 +779,21 @@ e_zone_desk_count_get(face->zone, &xcount, &ycount); e_gadman_client_geometry_get(face->gmc, &x, &y, &w, &h); - deskw = w / xcount; - deskh = h / ycount; - face->fx = x; face->fy = y; - face->fw = deskw; - face->fh = deskh; + face->fw = w; + face->fh = h; switch (change) { case E_GADMAN_CHANGE_MOVE_RESIZE: _pager_face_draw(face); break; case E_GADMAN_CHANGE_RAISE: - evas_object_raise(face->base); - - desks = face->desks; - while (desks) - { - desk = desks->data; - evas_object_raise(desk->obj); - - wins = desk->wins; - while (wins) - { - win = wins->data; - evas_object_raise(win->obj); - - wins = wins->next; - } - desks = desks->next; - } - - evas_object_raise(face->screen); + evas_object_raise(face->pager_object); break; case E_GADMAN_CHANGE_EDGE: + break; case E_GADMAN_CHANGE_ZONE: - /* FIXME - * Must we do something here? - */ break; } } @@ -899,7 +822,6 @@ if (win->border == ev->border) { _pager_window_move(face, win); - break; } } } @@ -930,7 +852,6 @@ if (win->border == ev->border) { _pager_window_move(face, win); - break; } } } @@ -1066,7 +987,6 @@ } } } - evas_object_raise(face->screen); return 1; } @@ -1195,8 +1115,8 @@ max_x = MAX(face->xnum, desks_x); max_y = MAX(face->ynum, desks_y); - w = face->fw * face->xnum; - h = face->fh * face->ynum; + w = face->fw; + h = face->fh; if ((face->conf->resize == PAGER_RESIZE_HORZ) && (face->ynum != desks_y)) @@ -1204,7 +1124,7 @@ /* fw is kept, so the pager face width will change * if xnum changes */ scale = (double)face->fw / (double)face->fh; - face->fh = (face->fh * face->ynum) / desks_y; +// face->fh = (face->fh * face->ynum) / desks_y; if (face->conf->scale) face->fw = face->fh * scale; } @@ -1214,14 +1134,14 @@ /* fh is kept, so the pager face height will change * if ynum changes */ scale = (double)face->fh / (double)face->fw; - face->fw = (face->fw * face->xnum) / desks_x; +// face->fw = (face->fw * face->xnum) / desks_x; if (face->conf->scale) face->fh = face->fw * scale; } else if (face->conf->resize == PAGER_RESIZE_NONE) { - face->fw = (face->fw * face->xnum) / desks_x; - face->fh = (face->fh * face->ynum) / desks_y; +// face->fw = (face->fw * face->xnum) / desks_x; +// face->fh = (face->fh * face->ynum) / desks_y; } for (x = 0; x < max_x; x++) @@ -1258,13 +1178,9 @@ } face->xnum = desks_x; face->ynum = desks_y; - nw = face->fw * face->xnum; - nh = face->fh * face->ynum; - if ((nw != w) || (nh != h)) - { - e_gadman_client_resize(face->gmc, face->fw * face->xnum, face->fh * face->ynum); - } + if ((face->fw != w) || (face->fh != h)) + e_gadman_client_resize(face->gmc, face->fw, face->fh); else _pager_face_draw(face); return 1; @@ -1289,13 +1205,20 @@ desk = desks->data; if (desk->desk == ev->desk) { - desk->current = 1; - evas_object_move(face->screen, - face->fx + (face->fw * desk->xpos), - face->fy + (face->fh * desk->ypos)); + if (!desk->current) + { + desk->current = 1; + edje_object_signal_emit(desk->desk_object, "active", ""); + } } else - desk->current = 0; + { + if (desk->current) + { + desk->current = 0; + edje_object_signal_emit(desk->desk_object, "passive", ""); + } + } } return 1; } @@ -1375,9 +1298,7 @@ Pager_Face *face; face = data; - face->fw = 40; - face->fh = 30; - e_gadman_client_resize(face->gmc, face->fw * face->xnum, face->fh * face->ynum); + e_gadman_client_resize(face->gmc, face->fw, face->fh); } static void @@ -1386,9 +1307,7 @@ Pager_Face *face; face = data; - face->fw = 80; - face->fh = 60; - e_gadman_client_resize(face->gmc, face->fw * face->xnum, face->fh * face->ynum); + e_gadman_client_resize(face->gmc, 80, 60); } static void @@ -1397,9 +1316,7 @@ Pager_Face *face; face = data; - face->fw = 120; - face->fh = 90; - e_gadman_client_resize(face->gmc, face->fw * face->xnum, face->fh * face->ynum); + e_gadman_client_resize(face->gmc, 128, 96); } static void @@ -1410,3 +1327,107 @@ face = data; e_gadman_mode_set(face->gmc->gadman, E_GADMAN_MODE_EDIT); } + +static void +_pager_desk_cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_In *ev; + Pager_Desk *desk; + + ev = event_info; + desk = data; +} + +static void +_pager_desk_cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Out *ev; + Pager_Desk *desk; + + ev = event_info; + desk = data; +} + +static void +_pager_desk_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ev; + Pager_Desk *desk; + + ev = event_info; + desk = data; + if (ev->button == 3) + { + e_menu_activate_mouse(desk->face->menu, desk->face->zone, + ev->output.x, ev->output.y, 1, 1, + E_MENU_POP_DIRECTION_DOWN); + e_util_container_fake_mouse_up_all_later(desk->face->zone->container); + } + else if (ev->button == 1) + { + Evas_List *l; + Pager_Desk *desk2; + + for (l = desk->face->desks; l; l = l->next) + { + desk2 = l->data; + if (desk2 == desk) + { + e_desk_show(desk2->desk); + if (!desk->current) + { + desk->current = 1; + edje_object_signal_emit(desk2->desk_object, "active", ""); + } + } + else + { + if (desk->current) + { + desk2->current = 0; + edje_object_signal_emit(desk2->desk_object, "passive", ""); + } + } + } + } +} + +static void +_pager_desk_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Up *ev; + Pager_Desk *desk; + + ev = event_info; + desk = data; +} + +static void +_pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Move *ev; + Pager_Desk *desk; + + ev = event_info; + desk = data; +} + +static void +_pager_desk_cb_intercept_move(void *data, Evas_Object *o, Evas_Coord x, Evas_Coord y) +{ + Pager_Desk *desk; + + desk = data; + evas_object_move(o, x, y); + evas_object_move(desk->event_object, x, y); +} + +static void +_pager_desk_cb_intercept_resize(void *data, Evas_Object *o, Evas_Coord w, Evas_Coord h) +{ + Pager_Desk *desk; + + desk = data; + evas_object_resize(o, w, h); + evas_object_resize(desk->event_object, w, h); +} =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/modules/pager/e_mod_main.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- e_mod_main.h 15 Feb 2005 12:15:22 -0000 1.15 +++ e_mod_main.h 18 Mar 2005 06:39:21 -0000 1.16 @@ -42,15 +42,17 @@ struct _Pager_Face { - E_Zone *zone; - Evas_List *desks; + E_Gadman_Client *gmc; + E_Menu *menu; + Evas *evas; + + E_Zone *zone; + Evas_List *desks; + + Evas_Object *pager_object; + Evas_Object *table_object; - E_Menu *menu; - Evas *evas; - Evas_Object *base, *screen; - Evas_Coord fx, fy, fw, fh; - E_Gadman_Client *gmc; /* Current nr. of desktops */ int xnum, ynum; @@ -76,7 +78,9 @@ Pager_Face *face; Evas_List *wins; - Evas_Object *obj; + Evas_Object *desk_object; + Evas_Object *layout_object; + Evas_Object *event_object; int xpos, ypos; int current : 1; ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs