discomfitor pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=3dd0ea5189d418e2e37b174e1380bd82b23ba548
commit 3dd0ea5189d418e2e37b174e1380bd82b23ba548 Author: Mike Blumenkrantz <[email protected]> Date: Mon Jan 27 16:24:42 2014 -0500 break out client urgency setting into separate api function this unclutters the client idler a little and also makes it easier to correctly set the urgency hint for clients --- src/bin/e_client.c | 39 ++++++++++++++++++++++++--------------- src/bin/e_client.h | 1 + src/bin/e_comp_x.c | 10 +++------- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 45d75ab..bd3fbfe 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -2058,7 +2058,6 @@ e_client_idler_before(void) EINA_LIST_FOREACH(c->clients, ll, ec) { - int urgent = ec->icccm.urgent; Eina_Stringshare *title; // pass 1 - eval0. fetch properties on new or on change and // call hooks to decide what to do - maybe move/resize @@ -2081,20 +2080,6 @@ e_client_idler_before(void) _e_client_frame_update(ec); ec->border.changed = 0; } - if (urgent != ec->icccm.urgent) - { - _e_client_event_property(ec, E_CLIENT_PROPERTY_URGENCY); - if (ec->icccm.urgent && (!ec->focused)) - e_comp_object_signal_emit(ec->frame, "e,state,urgent", "e"); - else - e_comp_object_signal_emit(ec->frame, "e,state,not_urgent", "e"); - if (ec->icccm.urgent && e_screensaver_on_get() && e_config->screensaver_wake_on_urgent) - { - int x, y; - ecore_evas_pointer_xy_get(e_comp_get(NULL)->ee, &x, &y); - ecore_evas_pointer_warp(e_comp_get(NULL)->ee, x, y); - } - } _e_client_hook_call(E_CLIENT_HOOK_EVAL_POST_FRAME_ASSIGN, ec); } @@ -3638,6 +3623,30 @@ e_client_uniconify(E_Client *ec) /////////////////////////////////////// EAPI void +e_client_urgent_set(E_Client *ec, Eina_Bool urgent) +{ + E_OBJECT_CHECK(ec); + E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + + urgent = !!urgent; + if (urgent == ec->icccm.urgent) return; + ec->icccm.urgent = urgent; + _e_client_event_property(ec, E_CLIENT_PROPERTY_URGENCY); + if (urgent && (!ec->focused)) + e_comp_object_signal_emit(ec->frame, "e,state,urgent", "e"); + else + e_comp_object_signal_emit(ec->frame, "e,state,not_urgent", "e"); + if (urgent && e_screensaver_on_get() && e_config->screensaver_wake_on_urgent) + { + int x, y; + ecore_evas_pointer_xy_get(e_comp_get(NULL)->ee, &x, &y); + ecore_evas_pointer_warp(e_comp_get(NULL)->ee, x, y); + } +} + +/////////////////////////////////////// + +EAPI void e_client_stick(E_Client *ec) { E_OBJECT_CHECK(ec); diff --git a/src/bin/e_client.h b/src/bin/e_client.h index 4308c99..22ed687 100644 --- a/src/bin/e_client.h +++ b/src/bin/e_client.h @@ -767,6 +767,7 @@ EAPI void e_client_fullscreen(E_Client *ec, E_Fullscreen policy); EAPI void e_client_unfullscreen(E_Client *ec); EAPI void e_client_iconify(E_Client *ec); EAPI void e_client_uniconify(E_Client *ec); +EAPI void e_client_urgent_set(E_Client *ec, Eina_Bool urgent); EAPI void e_client_stick(E_Client *ec); EAPI void e_client_unstick(E_Client *ec); EAPI void e_client_pinned_set(E_Client *ec, Eina_Bool set); diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c index 2aa401a..874be93 100644 --- a/src/bin/e_comp_x.c +++ b/src/bin/e_comp_x.c @@ -1865,18 +1865,14 @@ _e_comp_x_message(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_Cl case 0: break; case 1: - e_comp_object_signal_emit(ec->frame, "e,state,urgent", "e"); - ec->icccm.urgent = 1; - EC_CHANGED(ec); + e_client_urgent_set(ec, 1); break; default: if (e_client_action_get()) { /* be helpful and ignore activates during window actions, but still set urgent */ - e_comp_object_signal_emit(ec->frame, "e,state,urgent", "e"); - ec->icccm.urgent = 1; - EC_CHANGED(ec); + e_client_urgent_set(ec, 1); break; } if ((!starting) && (!ec->focused)) @@ -3082,7 +3078,7 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec) &is_urgent)) { ec->icccm.accepts_focus = accepts_focus; - ec->icccm.urgent = is_urgent; + e_client_urgent_set(ec, is_urgent); /* If this is a new window, set the state as requested. */ if ((ec->new_client) && --
