diff options
author | Mike Blumenkrantz <zmike@osg.samsung.com> | 2015-11-30 16:27:04 -0500 |
---|---|---|
committer | Mike Blumenkrantz <zmike@osg.samsung.com> | 2015-12-04 16:00:38 -0500 |
commit | efab05af1c9b893a905317454521ae14b631355a (patch) | |
tree | a98df0a28ba74c40b21c1038af4ed2336f52c356 | |
parent | ea2de95298635f4e6e82ad3a00825aa0fd16b1e1 (diff) | |
download | enlightenment-efab05af1c9b893a905317454521ae14b631355a.tar.gz |
add config option for allowing sticky windows to receive focus reverts
since forever, sticky windows have not been allowed to receive focus after
various events, eg. desk flip or window close. in some workflows, however,
this may actually be desired behavior
disabled by default
fix T2837
-rw-r--r-- | src/bin/e_client.c | 2 | ||||
-rw-r--r-- | src/bin/e_config.c | 2 | ||||
-rw-r--r-- | src/bin/e_config.h | 1 | ||||
-rw-r--r-- | src/bin/e_desk.c | 2 | ||||
-rw-r--r-- | src/modules/conf_window_manipulation/e_int_config_focus.c | 9 |
5 files changed, 14 insertions, 2 deletions
diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 28191e9475..d6eb0c4dbd 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -3579,7 +3579,7 @@ e_client_activate(E_Client *ec, Eina_Bool just_do_it) if (!ec->lock_user_iconify) e_client_uniconify(ec); } - if ((!ec->iconic) && (!ec->sticky)) + if ((!ec->iconic) && ((!ec->sticky) || e_config->focus_revert_allow_sticky)) { int val = e_config->focus_last_focused_per_desktop; diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 80501aaf9b..00d420750c 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -525,6 +525,7 @@ _e_config_edd_init(Eina_Bool old) E_CONFIG_VAL(D, T, resize_info_visible, INT); /**/ E_CONFIG_VAL(D, T, focus_last_focused_per_desktop, INT); /**/ E_CONFIG_VAL(D, T, focus_revert_on_hide_or_close, INT); /**/ + E_CONFIG_VAL(D, T, focus_revert_allow_sticky, INT); /**/ E_CONFIG_VAL(D, T, pointer_slide, INT); /**/ E_CONFIG_VAL(D, T, disable_all_pointer_warps, INT); /**/ E_CONFIG_VAL(D, T, pointer_warp_speed, DOUBLE); /**/ @@ -1410,6 +1411,7 @@ e_config_load(void) E_CONFIG_LIMIT(e_config->resize_info_visible, 0, 1); E_CONFIG_LIMIT(e_config->focus_last_focused_per_desktop, 0, 1); E_CONFIG_LIMIT(e_config->focus_revert_on_hide_or_close, 0, 1); + E_CONFIG_LIMIT(e_config->focus_revert_allow_sticky, 0, 1); E_CONFIG_LIMIT(e_config->pointer_slide, 0, 1); E_CONFIG_LIMIT(e_config->disable_all_pointer_warps, 0, 1); E_CONFIG_LIMIT(e_config->pointer_warp_speed, 0.0, 1.0); diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 2874ac7c27..a2f9a7a438 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -161,6 +161,7 @@ struct _E_Config int resize_info_visible; // GUI int focus_last_focused_per_desktop; // GUI int focus_revert_on_hide_or_close; // GUI + int focus_revert_allow_sticky; // GUI int disable_all_pointer_warps; // GUI int pointer_slide; // GUI double pointer_warp_speed; // GUI diff --git a/src/bin/e_desk.c b/src/bin/e_desk.c index 77f157a75e..c7b3d5fe6e 100644 --- a/src/bin/e_desk.c +++ b/src/bin/e_desk.c @@ -377,7 +377,7 @@ e_desk_last_focused_focus(E_Desk *desk) /* this was the window last focused in this desktop */ if (!ec->lock_focus_out) { - if (ec->sticky) + if (ec->sticky && (!e_config->focus_revert_allow_sticky)) { ecs = ec; continue; diff --git a/src/modules/conf_window_manipulation/e_int_config_focus.c b/src/modules/conf_window_manipulation/e_int_config_focus.c index ceb84f3ed3..f5c6f00df0 100644 --- a/src/modules/conf_window_manipulation/e_int_config_focus.c +++ b/src/modules/conf_window_manipulation/e_int_config_focus.c @@ -26,6 +26,7 @@ struct _E_Config_Dialog_Data int always_click_to_focus; int focus_last_focused_per_desktop; int focus_revert_on_hide_or_close; + int focus_revert_allow_sticky; int pointer_slide; int disable_all_pointer_warps; double pointer_warp_speed; @@ -75,6 +76,8 @@ _fill_data(E_Config_Dialog_Data *cfdata) e_config->focus_last_focused_per_desktop; cfdata->focus_revert_on_hide_or_close = e_config->focus_revert_on_hide_or_close; + cfdata->focus_revert_allow_sticky = + e_config->focus_revert_allow_sticky; cfdata->pointer_slide = e_config->pointer_slide; cfdata->disable_all_pointer_warps = e_config->disable_all_pointer_warps; cfdata->pointer_warp_speed = e_config->pointer_warp_speed; @@ -181,6 +184,8 @@ _advanced_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata) cfdata->focus_last_focused_per_desktop; e_config->focus_revert_on_hide_or_close = cfdata->focus_revert_on_hide_or_close; + e_config->focus_revert_allow_sticky = + cfdata->focus_revert_allow_sticky; e_config->pointer_slide = cfdata->pointer_slide; e_config->disable_all_pointer_warps = cfdata->disable_all_pointer_warps; e_config->pointer_warp_speed = cfdata->pointer_warp_speed; @@ -205,6 +210,7 @@ _advanced_check_changed(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data * (e_config->always_click_to_focus != cfdata->always_click_to_focus) || (e_config->focus_last_focused_per_desktop != cfdata->focus_last_focused_per_desktop) || (e_config->focus_revert_on_hide_or_close != cfdata->focus_revert_on_hide_or_close) || + (e_config->focus_revert_allow_sticky != cfdata->focus_revert_allow_sticky) || (e_config->pointer_slide != cfdata->pointer_slide) || (e_config->disable_all_pointer_warps != cfdata->disable_all_pointer_warps) || (fabs(e_config->pointer_warp_speed - cfdata->pointer_warp_speed) > DBL_EPSILON) || @@ -361,6 +367,9 @@ _advanced_create(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas, E_Config_Dialog_D ob = e_widget_check_add(evas, _("Refocus last window on desktop switch"), &(cfdata->focus_last_focused_per_desktop)); e_widget_framelist_object_append(of, ob); + ob = e_widget_check_add(evas, _("Allow focusing of sticky windows when reverting focus"), + &(cfdata->focus_revert_allow_sticky)); + e_widget_framelist_object_append(of, ob); ob = e_widget_check_add(evas, _("Focus last focused window on lost focus"), &(cfdata->focus_revert_on_hide_or_close)); e_widget_framelist_object_append(of, ob); |