forked from enlightenment/enlightenment
redo client urgency again with separate flag for actual urgent state
preserve icccm flag for accurate detection
This commit is contained in:
parent
f43279d839
commit
9ad04eb877
|
@ -2029,7 +2029,7 @@ _e_client_frame_update(E_Client *ec)
|
||||||
((!ec->icccm.accepts_focus) &&
|
((!ec->icccm.accepts_focus) &&
|
||||||
(!ec->icccm.take_focus)))
|
(!ec->icccm.take_focus)))
|
||||||
bordername = "nofocus";
|
bordername = "nofocus";
|
||||||
else if (ec->icccm.urgent)
|
else if (ec->urgent)
|
||||||
bordername = "urgent";
|
bordername = "urgent";
|
||||||
else if ((ec->icccm.transient_for != 0) ||
|
else if ((ec->icccm.transient_for != 0) ||
|
||||||
(ec->dialog))
|
(ec->dialog))
|
||||||
|
@ -3682,13 +3682,18 @@ e_client_urgent_set(E_Client *ec, Eina_Bool urgent)
|
||||||
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
|
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
|
||||||
|
|
||||||
urgent = !!urgent;
|
urgent = !!urgent;
|
||||||
if (urgent == ec->icccm.urgent) return;
|
if (urgent == ec->urgent) return;
|
||||||
ec->icccm.urgent = urgent;
|
|
||||||
_e_client_event_property(ec, E_CLIENT_PROPERTY_URGENCY);
|
_e_client_event_property(ec, E_CLIENT_PROPERTY_URGENCY);
|
||||||
if (urgent && (!ec->focused))
|
if (urgent && (!ec->focused) && (!ec->want_focus))
|
||||||
e_comp_object_signal_emit(ec->frame, "e,state,urgent", "e");
|
{
|
||||||
|
e_comp_object_signal_emit(ec->frame, "e,state,urgent", "e");
|
||||||
|
ec->urgent = urgent;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
e_comp_object_signal_emit(ec->frame, "e,state,not_urgent", "e");
|
{
|
||||||
|
e_comp_object_signal_emit(ec->frame, "e,state,not_urgent", "e");
|
||||||
|
ec->urgent = 0;
|
||||||
|
}
|
||||||
if (urgent && e_screensaver_on_get() && e_config->screensaver_wake_on_urgent)
|
if (urgent && e_screensaver_on_get() && e_config->screensaver_wake_on_urgent)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
|
@ -572,6 +572,7 @@ struct E_Client
|
||||||
unsigned int iconic : 1;
|
unsigned int iconic : 1;
|
||||||
unsigned int deskshow : 1;
|
unsigned int deskshow : 1;
|
||||||
unsigned int sticky : 1;
|
unsigned int sticky : 1;
|
||||||
|
unsigned int urgent : 1;
|
||||||
unsigned int shaped_input : 1;
|
unsigned int shaped_input : 1;
|
||||||
unsigned int need_shape_merge : 1;
|
unsigned int need_shape_merge : 1;
|
||||||
unsigned int need_shape_export : 1;
|
unsigned int need_shape_export : 1;
|
||||||
|
|
|
@ -512,7 +512,7 @@ _e_comp_object_shadow_setup(E_Comp_Object *cw)
|
||||||
e_comp_object_signal_emit(cw->smart_obj, "e,state,focused", "e");
|
e_comp_object_signal_emit(cw->smart_obj, "e,state,focused", "e");
|
||||||
else
|
else
|
||||||
e_comp_object_signal_emit(cw->smart_obj, "e,state,unfocused", "e");
|
e_comp_object_signal_emit(cw->smart_obj, "e,state,unfocused", "e");
|
||||||
if (urgent || cw->ec->icccm.urgent)
|
if (urgent || cw->ec->urgent)
|
||||||
e_comp_object_signal_emit(cw->smart_obj, "e,state,urgent", "e");
|
e_comp_object_signal_emit(cw->smart_obj, "e,state,urgent", "e");
|
||||||
else
|
else
|
||||||
e_comp_object_signal_emit(cw->smart_obj, "e,state,not_urgent", "e");
|
e_comp_object_signal_emit(cw->smart_obj, "e,state,not_urgent", "e");
|
||||||
|
|
|
@ -3097,6 +3097,7 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec)
|
||||||
&is_urgent))
|
&is_urgent))
|
||||||
{
|
{
|
||||||
ec->icccm.accepts_focus = accepts_focus;
|
ec->icccm.accepts_focus = accepts_focus;
|
||||||
|
ec->icccm.urgent = is_urgent;
|
||||||
e_client_urgent_set(ec, is_urgent);
|
e_client_urgent_set(ec, is_urgent);
|
||||||
|
|
||||||
/* If this is a new window, set the state as requested. */
|
/* If this is a new window, set the state as requested. */
|
||||||
|
|
|
@ -1172,7 +1172,7 @@ _ibox_cb_event_client_property(void *data __UNUSED__, int type __UNUSED__, E_Eve
|
||||||
_ibox_icon_fill(ic);
|
_ibox_icon_fill(ic);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (ev->ec->icccm.urgent)
|
if (ev->ec->urgent)
|
||||||
{
|
{
|
||||||
e_gadcon_urgent_show(b->inst->gcc->gadcon);
|
e_gadcon_urgent_show(b->inst->gcc->gadcon);
|
||||||
edje_object_signal_emit(ic->o_holder, "e,state,urgent", "e");
|
edje_object_signal_emit(ic->o_holder, "e,state,urgent", "e");
|
||||||
|
|
|
@ -685,7 +685,7 @@ _pager_window_new(Pager_Desk *pd, E_Client *client)
|
||||||
edje_object_part_swallow(pw->o_window, "e.swallow.icon", o);
|
edje_object_part_swallow(pw->o_window, "e.swallow.icon", o);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (client->icccm.urgent && !client->focused)
|
if (client->urgent)
|
||||||
{
|
{
|
||||||
if (!(client->iconic))
|
if (!(client->iconic))
|
||||||
edje_object_signal_emit(pd->o_desk, "e,state,urgent", "e");
|
edje_object_signal_emit(pd->o_desk, "e,state,urgent", "e");
|
||||||
|
@ -1403,7 +1403,7 @@ _pager_cb_event_client_urgent_change(void *data __UNUSED__, int type __UNUSED__,
|
||||||
|
|
||||||
if (!(ev->property & E_CLIENT_PROPERTY_URGENCY)) return ECORE_CALLBACK_RENEW;
|
if (!(ev->property & E_CLIENT_PROPERTY_URGENCY)) return ECORE_CALLBACK_RENEW;
|
||||||
zone = ev->ec->zone;
|
zone = ev->ec->zone;
|
||||||
urgent = ev->ec->icccm.urgent;
|
urgent = ev->ec->urgent || ev->ec->icccm.urgent;
|
||||||
|
|
||||||
if (pager_config->popup_urgent && (pager_config->popup_urgent_focus ||
|
if (pager_config->popup_urgent && (pager_config->popup_urgent_focus ||
|
||||||
((!pager_config->popup_urgent_focus) && (!ev->ec->focused) && (!ev->ec->want_focus))))
|
((!pager_config->popup_urgent_focus) && (!ev->ec->focused) && (!ev->ec->want_focus))))
|
||||||
|
@ -1430,7 +1430,7 @@ _pager_cb_event_client_urgent_change(void *data __UNUSED__, int type __UNUSED__,
|
||||||
pw = _pager_desk_window_find(pd, ev->ec);
|
pw = _pager_desk_window_find(pd, ev->ec);
|
||||||
if (pw)
|
if (pw)
|
||||||
{
|
{
|
||||||
if (urgent && !ev->ec->focused)
|
if (ev->ec->urgent)
|
||||||
{
|
{
|
||||||
if (!(ev->ec->iconic))
|
if (!(ev->ec->iconic))
|
||||||
{
|
{
|
||||||
|
|
|
@ -682,7 +682,7 @@ _pager_window_new(Pager_Desk *pd, Evas_Object *mirror, E_Client *client)
|
||||||
evas_object_event_callback_add(mirror, EVAS_CALLBACK_DEL,
|
evas_object_event_callback_add(mirror, EVAS_CALLBACK_DEL,
|
||||||
_pager_window_cb_del, pw);
|
_pager_window_cb_del, pw);
|
||||||
|
|
||||||
if (client->icccm.urgent && !client->focused)
|
if (client->urgent)
|
||||||
{
|
{
|
||||||
if (!(client->iconic))
|
if (!(client->iconic))
|
||||||
edje_object_signal_emit(pd->o_desk, "e,state,urgent", "e");
|
edje_object_signal_emit(pd->o_desk, "e,state,urgent", "e");
|
||||||
|
@ -1015,7 +1015,7 @@ _pager_cb_event_client_urgent_change(void *data EINA_UNUSED, int type EINA_UNUSE
|
||||||
|
|
||||||
pp = _pager_popup_find(ev->ec->zone);
|
pp = _pager_popup_find(ev->ec->zone);
|
||||||
|
|
||||||
if ((!pp) && (ev->ec->icccm.urgent) && (!ev->ec->iconic))
|
if ((!pp) && (ev->ec->urgent || ev->ec->icccm.urgent) && (!ev->ec->iconic))
|
||||||
{
|
{
|
||||||
pp = _pager_popup_new(ev->ec->zone, 0);
|
pp = _pager_popup_new(ev->ec->zone, 0);
|
||||||
if (!pp) return ECORE_CALLBACK_RENEW;
|
if (!pp) return ECORE_CALLBACK_RENEW;
|
||||||
|
|
|
@ -657,7 +657,7 @@ _tasks_item_fill(Tasks_Item *item)
|
||||||
_tasks_item_signal_emit(item, "e,state,focused", "e");
|
_tasks_item_signal_emit(item, "e,state,focused", "e");
|
||||||
else
|
else
|
||||||
_tasks_item_signal_emit(item, "e,state,unfocused", "e");
|
_tasks_item_signal_emit(item, "e,state,unfocused", "e");
|
||||||
if (item->client->icccm.urgent && !item->client->focused)
|
if (item->client->urgent)
|
||||||
_tasks_item_signal_emit(item, "e,state,urgent", "e");
|
_tasks_item_signal_emit(item, "e,state,urgent", "e");
|
||||||
else
|
else
|
||||||
_tasks_item_signal_emit(item, "e,state,not_urgent", "e");
|
_tasks_item_signal_emit(item, "e,state,not_urgent", "e");
|
||||||
|
@ -941,7 +941,7 @@ _tasks_cb_event_client_urgent_change(void *data __UNUSED__, int type __UNUSED__,
|
||||||
E_Event_Client_Property *ev = event;
|
E_Event_Client_Property *ev = event;
|
||||||
|
|
||||||
if (!(ev->property & E_CLIENT_PROPERTY_URGENCY)) return ECORE_CALLBACK_RENEW;
|
if (!(ev->property & E_CLIENT_PROPERTY_URGENCY)) return ECORE_CALLBACK_RENEW;
|
||||||
if (ev->ec->icccm.urgent && (!ev->ec->focused))
|
if (ev->ec->urgent)
|
||||||
_tasks_signal_emit(ev->ec, "e,state,urgent", "e");
|
_tasks_signal_emit(ev->ec, "e,state,urgent", "e");
|
||||||
else
|
else
|
||||||
_tasks_signal_emit(ev->ec, "e,state,not_urgent", "e");
|
_tasks_signal_emit(ev->ec, "e,state,not_urgent", "e");
|
||||||
|
|
Loading…
Reference in New Issue