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);