pager urgent popup patch - good
evas clipouts less allocs patch - definite spedusp for when it's used heavily! SVN revision: 29331
This commit is contained in:
parent
e323bed654
commit
93aabd730b
|
@ -12,6 +12,9 @@ struct _E_Config_Dialog_Data
|
|||
{
|
||||
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 @@ struct _E_Config_Dialog_Data
|
|||
} 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_show(void *data1, void *data2);
|
|||
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 @@ _fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata)
|
|||
/* 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 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
|||
|
||||
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 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
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 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
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 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
{
|
||||
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;
|
||||
|
@ -301,3 +329,16 @@ _grab_key_down_cb(void *data, int type, void *event)
|
|||
}
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ struct _Instance
|
|||
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_Win
|
|||
|
||||
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_free(Pager_Win *pw);
|
|||
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 @@ _pager_fill(Pager *p)
|
|||
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 @@ _pager_window_new(Pager_Desk *pd, E_Border *border)
|
|||
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 @@ _pager_desk_window_find(Pager_Desk *pd, E_Border *border)
|
|||
}
|
||||
|
||||
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 @@ _pager_popup_new(Pager *p)
|
|||
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 @@ _pager_popup_new(Pager *p)
|
|||
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 @@ _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)
|
||||
{
|
||||
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 @@ _pager_cb_event_border_urgent_change(void *data, int type, void *event)
|
|||
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 @@ _pager_cb_event_border_urgent_change(void *data, int type, void *event)
|
|||
"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_cb_event_desk_show(void *data, int type, void *event)
|
|||
{
|
||||
Pager_Popup *pp;
|
||||
|
||||
pp = _pager_popup_new(pd->pager);
|
||||
pp = _pager_popup_new(pd->pager, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1316,6 +1350,7 @@ _pager_window_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_i
|
|||
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 @@ _pager_window_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_inf
|
|||
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 @@ _pager_window_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_i
|
|||
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 @@ _pager_desk_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
{
|
||||
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 @@ _pager_desk_cb_mouse_wheel(void *data, Evas *e, Evas_Object *obj, void *event_in
|
|||
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 @@ e_modapi_init(E_Module *m)
|
|||
#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 @@ e_modapi_init(E_Module *m)
|
|||
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 @@ e_modapi_init(E_Module *m)
|
|||
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);
|
||||
|
|
|
@ -21,8 +21,11 @@ typedef struct _Config_Item Config_Item;
|
|||
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;
|
||||
|
|
Loading…
Reference in New Issue