Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/modules/pager Modified Files: e_mod_config.c e_mod_main.c e_mod_main.h Log Message: pager urgent popup patch - good evas clipouts less allocs patch - definite spedusp for when it's used heavily! =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/pager/e_mod_config.c,v retrieving revision 1.28 retrieving revision 1.29 diff -u -3 -r1.28 -r1.29 --- e_mod_config.c 24 Mar 2007 23:12:23 -0000 1.28 +++ e_mod_config.c 4 Apr 2007 09:55:39 -0000 1.29 @@ -12,6 +12,9 @@ { int show_popup; double popup_speed; + int show_popup_urgent; + int popup_urgent_stick; + double popup_urgent_speed; int drag_resist; unsigned char btn_drag; unsigned char btn_noplace; @@ -25,6 +28,8 @@ } grab; struct { + Evas_Object *o_urgent_stick; + Evas_Object *o_urgent_speed; Evas_Object *o_btn1; Evas_Object *o_btn2; } gui; @@ -42,6 +47,7 @@ static void _grab_wnd_hide(E_Config_Dialog_Data *cfdata); static int _grab_mouse_down_cb(void *data, int type, void *event); static int _grab_key_down_cb(void *data, int type, void *event); +static void _check_urgent_stick_cb_change(void *data, Evas_Object *obj); void _config_pager_module(Config_Item *ci) @@ -73,6 +79,9 @@ /* FIXME: configure zone config item */ cfdata->show_popup = pager_config->popup; cfdata->popup_speed = pager_config->popup_speed; + cfdata->show_popup_urgent = pager_config->popup_urgent; + cfdata->popup_urgent_stick = pager_config->popup_urgent_stick; + cfdata->popup_urgent_speed = pager_config->popup_urgent_speed; cfdata->drag_resist = pager_config->drag_resist; cfdata->btn_drag = pager_config->btn_drag; cfdata->btn_noplace = pager_config->btn_noplace; @@ -105,7 +114,7 @@ o = e_widget_list_add(evas, 0, 0); of = e_widget_framelist_add(evas, _("General Settings"), 0); - ob = e_widget_check_add(evas, _("Show Popup"), &(cfdata->show_popup)); + ob = e_widget_check_add(evas, _("Show Popup on desktop change"), &(cfdata->show_popup)); e_widget_framelist_object_append(of, ob); e_widget_list_object_append(o, of, 1, 1, 0.5); @@ -124,7 +133,7 @@ static Evas_Object * _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) { - Evas_Object *o, *of, *ob; + Evas_Object *o, *of, *of2, *ob; o = e_widget_list_add(evas, 0, 0); of = e_widget_framelist_add(evas, _("Resistance to Dragging Windows:"), 0); @@ -133,13 +142,29 @@ e_widget_list_object_append(o, of, 1, 1, 0.5); of = e_widget_framelist_add(evas, _("Popup Settings"), 0); - ob = e_widget_check_add(evas, _("Show Popup"), &(cfdata->show_popup)); + ob = e_widget_check_add(evas, _("Show Popup on desktop change"), &(cfdata->show_popup)); e_widget_framelist_object_append(of, ob); ob = e_widget_label_add(evas, _("Popup Speed")); e_widget_framelist_object_append(of, ob); ob = e_widget_slider_add(evas, 1, 0, _("%1.1f seconds"), 0.1, 10.0, 0.1, 0, &(cfdata->popup_speed), NULL, 200); e_widget_framelist_object_append(of, ob); - e_widget_list_object_append(o, of, 1, 1, 0.5); + + of2 = e_widget_framelist_add(evas, _("Urgent window"), 0); + ob = e_widget_check_add(evas, _("Show Popup on urgent window"), &(cfdata->show_popup_urgent)); + e_widget_framelist_object_append(of2, ob); + ob = e_widget_check_add(evas, _("Popup on urgent window sticks on the screen"), &(cfdata->popup_urgent_stick)); + cfdata->gui.o_urgent_stick = ob; + e_widget_on_change_hook_set(ob, _check_urgent_stick_cb_change, cfdata); + e_widget_framelist_object_append(of2, ob); + ob = e_widget_label_add(evas, _("Popup Speed")); + e_widget_framelist_object_append(of2, ob); + ob = e_widget_slider_add(evas, 1, 0, _("%1.1f seconds"), 0.1, 10.0, 0.1, 0, &(cfdata->popup_urgent_speed), NULL, 200); + cfdata->gui.o_urgent_speed = ob; + _check_urgent_stick_cb_change(cfdata, cfdata->gui.o_urgent_stick); + e_widget_framelist_object_append(of2, ob); + + e_widget_framelist_object_append(of, of2); + e_widget_list_object_append(o, of, 1, 1, 0.5); of = e_widget_frametable_add(evas, _("Buttons Settings"), 0); ob = e_widget_label_add(evas, _("Drag and select button")); @@ -168,6 +193,9 @@ { pager_config->popup = cfdata->show_popup; pager_config->popup_speed = cfdata->popup_speed; + pager_config->popup_urgent = cfdata->show_popup_urgent; + pager_config->popup_urgent_stick = cfdata->popup_urgent_stick; + pager_config->popup_urgent_speed = cfdata->popup_urgent_speed; pager_config->drag_resist = cfdata->drag_resist; pager_config->btn_drag = cfdata->btn_drag; pager_config->btn_noplace = cfdata->btn_noplace; @@ -300,4 +328,17 @@ _grab_wnd_hide(cfdata); } return 1; +} + +static void +_check_urgent_stick_cb_change(void *data, Evas_Object *obj) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = data; + + if (e_widget_check_checked_get(cfdata->gui.o_urgent_stick)) + e_widget_disabled_set(cfdata->gui.o_urgent_speed, 1); + else + e_widget_disabled_set(cfdata->gui.o_urgent_speed, 0); } =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/pager/e_mod_main.c,v retrieving revision 1.209 retrieving revision 1.210 diff -u -3 -r1.209 -r1.210 --- e_mod_main.c 25 Mar 2007 22:46:21 -0000 1.209 +++ e_mod_main.c 4 Apr 2007 09:55:39 -0000 1.210 @@ -47,6 +47,7 @@ struct _Pager { Instance *inst; + unsigned char is_popup : 1; Evas_Object *o_table; E_Zone *zone; int xnum, ynum; @@ -88,10 +89,11 @@ struct _Pager_Popup { - E_Popup *popup; - Pager *pager, *src_pager; - Evas_Object *o_bg; - Ecore_Timer *timer; + E_Popup *popup; + Pager *pager, *src_pager; + Evas_Object *o_bg; + Ecore_Timer *timer; + unsigned char urgent : 1; }; static void _pager_cb_obj_moveresize(void *data, Evas *e, Evas_Object *obj, void *event_info); @@ -148,7 +150,7 @@ static void _pager_window_move(Pager_Win *pw); static Pager_Win *_pager_window_find(Pager *p, E_Border *border); static Pager_Win *_pager_desk_window_find(Pager_Desk *pd, E_Border *border); -static Pager_Popup *_pager_popup_new(Pager *p); +static Pager_Popup *_pager_popup_new(Pager *p, int urgent); static void _pager_popup_free(Pager_Popup *pp); static E_Config_DD *conf_edd = NULL; @@ -289,11 +291,8 @@ static void _pager_empty(Pager *p) { - if (p->popup) - { - _pager_popup_free(p->popup); - p->popup = NULL; - } + if (p->popup) _pager_popup_free(p->popup); + while (p->desks) { _pager_desk_free(p->desks->data); @@ -464,6 +463,15 @@ evas_object_show(o); edje_object_part_swallow(pw->o_window, "icon", o); } + + if (border->client.icccm.urgent) + { + if (!(border->iconic)) + edje_object_signal_emit(pd->o_desk, + "e,state,urgent", "e"); + edje_object_signal_emit(pw->o_window, + "e,state,urgent", "e"); + } evas_object_show(o); @@ -524,7 +532,7 @@ } static Pager_Popup * -_pager_popup_new(Pager *p) +_pager_popup_new(Pager *p, int urgent) { Pager_Popup *pp; Evas_Coord w, h; @@ -548,6 +556,8 @@ evas_object_geometry_get(p->o_table, NULL, NULL, &w, &h); pp->pager = _pager_new(pp->popup->evas, p->zone); + pp->pager->inst = p->inst; + pp->pager->is_popup = 1; evas_object_move(pp->pager->o_table, 0, 0); evas_object_resize(pp->pager->o_table, w, h); @@ -566,15 +576,26 @@ evas_object_move(pp->o_bg, 0, 0); evas_object_resize(pp->o_bg, w, h); e_popup_edje_bg_object_set(pp->popup, pp->o_bg); - e_popup_ignore_events_set(pp->popup, 1); + //e_popup_ignore_events_set(pp->popup, 1); e_popup_move_resize(pp->popup, ((p->zone->w - w) / 2), ((p->zone->h - h) / 2), w, h); e_bindings_mouse_grab(E_BINDING_CONTEXT_POPUP, pp->popup->evas_win); e_bindings_wheel_grab(E_BINDING_CONTEXT_POPUP, pp->popup->evas_win); e_popup_show(pp->popup); - pp->timer = ecore_timer_add(pager_config->popup_speed, - _pager_popup_cb_timeout, pp); + if (!urgent) + { + pp->timer = ecore_timer_add(pager_config->popup_speed, + _pager_popup_cb_timeout, pp); + } + else + { + if (!pager_config->popup_urgent_stick) + pp->timer = ecore_timer_add(pager_config->popup_urgent_speed, + _pager_popup_cb_timeout, pp); + } + pp->urgent = urgent; + return pp; } @@ -1150,8 +1171,8 @@ static int _pager_cb_event_border_urgent_change(void *data, int type, void *event) { - E_Event_Border_Urgent_Change *ev; - Evas_List *l, *l2; + E_Event_Border_Urgent_Change *ev; + Evas_List *l, *l2; ev = event; for (l = pager_config->instances; l; l = l->next) @@ -1172,10 +1193,16 @@ if (ev->border->client.icccm.urgent) { if (!(ev->border->iconic)) - edje_object_signal_emit(pd->o_desk, - "e,state,urgent", "e"); + edje_object_signal_emit(pd->o_desk, + "e,state,urgent", "e"); edje_object_signal_emit(pw->o_window, "e,state,urgent", "e"); + + if (pager_config->popup_urgent && + !inst->pager->popup) + { + _pager_popup_new(inst->pager, 1); + } } else { @@ -1184,10 +1211,17 @@ "e,state,not_urgent", "e"); edje_object_signal_emit(pw->o_window, "e,state,not_urgent", "e"); + + if (inst->pager->popup && + inst->pager->popup->urgent) + { + _pager_popup_free(inst->pager->popup); + } } } } } + return 1; } @@ -1231,7 +1265,7 @@ { Pager_Popup *pp; - pp = _pager_popup_new(pd->pager); + pp = _pager_popup_new(pd->pager, 0); } } } @@ -1316,6 +1350,7 @@ ev = event_info; pw = data; if (!pw) return; + if (pw->desk->pager->is_popup) return; if (pw->border->lock_user_location) return; if ((ev->button == pager_config->btn_drag) || (ev->button == pager_config->btn_noplace)) @@ -1345,6 +1380,7 @@ ev = event_info; pw = data; if (!pw) return; + if (pw->desk->pager->is_popup) return; if ((ev->button == pager_config->btn_drag) || (ev->button == pager_config->btn_noplace)) { @@ -1368,6 +1404,7 @@ pw = data; if (!pw) return; + if (pw->desk->pager->is_popup) return; /* prevent drag for a few pixels */ if (pw->drag.start) { @@ -1682,9 +1719,19 @@ { Evas_Event_Mouse_Up *ev; Pager_Desk *pd; + Pager *p; ev = event_info; pd = data; + p = pd->pager; + + if ( p->is_popup && + (pd->desk == e_desk_current_get(pd->pager->zone)) ) + { + if (p->inst->pager->popup) + _pager_popup_free(p->inst->pager->popup); + } + /* FIXME: pd->pager->dragging is 0 when finishing a drag from desk to desk */ if ((ev->button == 1) && (!pd->pager->dragging) && (!pd->pager->just_dragged)) @@ -1713,6 +1760,8 @@ ev = event_info; pd = data; + if (pd->pager->is_popup) return; + if (pager_config->flip_desk) e_zone_desk_linear_flip_by(pd->desk->zone, ev->z); } @@ -1744,8 +1793,11 @@ #undef D #define T Config #define D conf_edd - E_CONFIG_VAL(D, T, popup_speed, DOUBLE); E_CONFIG_VAL(D, T, popup, UINT); + E_CONFIG_VAL(D, T, popup_speed, DOUBLE); + E_CONFIG_VAL(D, T, popup_urgent, UINT); + E_CONFIG_VAL(D, T, popup_urgent_stick, UINT); + E_CONFIG_VAL(D, T, popup_urgent_speed, DOUBLE); E_CONFIG_VAL(D, T, drag_resist, UINT); E_CONFIG_VAL(D, T, scale, UCHAR); E_CONFIG_VAL(D, T, resize, UCHAR); @@ -1758,8 +1810,11 @@ if (!pager_config) { pager_config = E_NEW(Config, 1); - pager_config->popup_speed = 1.0; pager_config->popup = 1; + pager_config->popup_speed = 1.0; + pager_config->popup_urgent = 0; + pager_config->popup_urgent_stick = 0; + pager_config->popup_urgent_speed = 1.5; pager_config->drag_resist = 3; pager_config->scale = 1; pager_config->resize = PAGER_RESIZE_BOTH; @@ -1767,8 +1822,11 @@ pager_config->btn_noplace = 2; pager_config->flip_desk = 0; } - E_CONFIG_LIMIT(pager_config->popup_speed, 0.1, 10.0); E_CONFIG_LIMIT(pager_config->popup, 0, 1); + E_CONFIG_LIMIT(pager_config->popup_speed, 0.1, 10.0); + E_CONFIG_LIMIT(pager_config->popup_urgent, 0, 1); + E_CONFIG_LIMIT(pager_config->popup_urgent_stick, 0, 1); + E_CONFIG_LIMIT(pager_config->popup_urgent_speed, 0.1, 10.0); E_CONFIG_LIMIT(pager_config->drag_resist, 0, 50); E_CONFIG_LIMIT(pager_config->resize, PAGER_RESIZE_HORZ, PAGER_RESIZE_BOTH); E_CONFIG_LIMIT(pager_config->flip_desk, 0, 1); =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/pager/e_mod_main.h,v retrieving revision 1.49 retrieving revision 1.50 diff -u -3 -r1.49 -r1.50 --- e_mod_main.h 19 Nov 2006 08:58:05 -0000 1.49 +++ e_mod_main.h 4 Apr 2007 09:55:39 -0000 1.50 @@ -21,8 +21,11 @@ struct _Config { /* saved * loaded config values */ - double popup_speed; unsigned int popup; + double popup_speed; + unsigned int popup_urgent; + unsigned int popup_urgent_stick; + double popup_urgent_speed; unsigned int drag_resist; unsigned char scale; unsigned char resize; ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs