Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/modules/pager Modified Files: e_mod_main.c Log Message: fix window if it changes pager skip flag while its up. =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/pager/e_mod_main.c,v retrieving revision 1.211 retrieving revision 1.212 diff -u -3 -r1.211 -r1.212 --- e_mod_main.c 19 Apr 2007 16:57:47 -0000 1.211 +++ e_mod_main.c 10 Jun 2007 04:34:23 -0000 1.212 @@ -114,6 +114,7 @@ static int _pager_cb_event_border_stack(void *data, int type, void *event); static int _pager_cb_event_border_icon_change(void *data, int type, void *event); static int _pager_cb_event_border_urgent_change(void *data, int type, void *event); +static int _pager_cb_event_border_property(void *data, int type, void *event); static int _pager_cb_event_zone_desk_count_set(void *data, int type, void *event); static int _pager_cb_event_desk_show(void *data, int type, void *event); static int _pager_cb_event_desk_name_change(void *data, int type, void *event); @@ -1225,6 +1226,106 @@ return 1; } +static int +_pager_cb_event_border_property(void *data, int type, void *event) +{ + E_Event_Border_Remove *ev; + Evas_List *l, *l2; + int found = 0; + + ev = event; + for (l = pager_config->instances; l; l = l->next) + { + Instance *inst; + + inst = l->data; + if (inst->pager->zone != ev->border->zone) continue; + for (l2 = inst->pager->desks; l2; l2 = l2->next) + { + Pager_Desk *pd; + Pager_Win *pw; + + pd = l2->data; + pw = _pager_desk_window_find(pd, ev->border); + if (pw) + { + found = 1; + if (ev->border->client.netwm.state.skip_pager) + { + pd->wins = evas_list_remove(pd->wins, pw); + _pager_window_free(pw); + } + } + } + } + if (found) return 1; + + /* If we did not find this window in the pager, then add it because + * the skip_pager state may have changed to 1 */ + for (l = pager_config->instances; l; l = l->next) + { + Instance *inst; + Pager_Desk *pd; + + inst = l->data; + if ((inst->pager->zone != ev->border->zone) || + (_pager_window_find(inst->pager, ev->border))) + continue; + if (!ev->border->sticky) + { + pd = _pager_desk_find(inst->pager, ev->border->desk); + if (pd) + { + Pager_Win *pw; + + pw = _pager_window_new(pd, ev->border); + if (pw) + { + Pager_Win *pw2 = NULL; + E_Border *bd; + + pd->wins = evas_list_append(pd->wins, pw); + bd = e_util_desk_border_above(pw->border); + if (bd) + pw2 = _pager_desk_window_find(pd, bd); + if (pw2) + e_layout_child_lower_below(pw->o_window, pw2->o_window); + else + e_layout_child_raise(pw->o_window); + _pager_window_move(pw); + } + } + } + else + { + for (l2 = inst->pager->desks; l2; l2 = l2->next) + { + Pager_Win *pw; + + pd = l2->data; + /* create it and add it */ + pw = _pager_window_new(pd, ev->border); + if (pw) + { + Pager_Win *pw2 = NULL; + E_Border *bd; + + pd->wins = evas_list_append(pd->wins, pw); + bd = e_util_desk_border_above(pw->border); + if (bd) + pw2 = _pager_desk_window_find(pd, bd); + if (pw2) + e_layout_child_lower_below(pw->o_window, pw2->o_window); + else + e_layout_child_raise(pw->o_window); + _pager_window_move(pw); + } + } + } + } + return 1; +} + static int _pager_cb_event_zone_desk_count_set(void *data, int type, void *event) { @@ -1803,7 +1904,7 @@ E_CONFIG_VAL(D, T, resize, UCHAR); E_CONFIG_VAL(D, T, btn_drag, UCHAR); E_CONFIG_VAL(D, T, btn_noplace, UCHAR); - E_CONFIG_VAL(D, T, flip_desk, UINT); + E_CONFIG_VAL(D, T, flip_desk, UCHAR); pager_config = e_config_domain_load("module.pager", conf_edd); @@ -1871,6 +1972,9 @@ (pager_config->handlers, ecore_event_handler_add (E_EVENT_BORDER_URGENT_CHANGE, _pager_cb_event_border_urgent_change, NULL)); + pager_config->handlers = evas_list_append + (pager_config->handlers, ecore_event_handler_add + (E_EVENT_BORDER_PROPERTY, _pager_cb_event_border_property, NULL)); pager_config->handlers = evas_list_append (pager_config->handlers, ecore_event_handler_add (E_EVENT_ZONE_DESK_COUNT_SET, _pager_cb_event_zone_desk_count_set, NULL)); ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs