From a08ac02e820ba7fc6064f74414cfe810e775d5ed Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 30 Nov 2015 16:27:04 -0500 Subject: [PATCH] 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 --- src/bin/e_client.c | 2 +- src/bin/e_config.c | 2 ++ src/bin/e_config.h | 1 + src/bin/e_desk.c | 2 +- .../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 28191e947..d6eb0c4db 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 80501aaf9..00d420750 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 2874ac7c2..a2f9a7a43 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 77f157a75..c7b3d5fe6 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 ceb84f3ed..f5c6f00df 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);