summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2015-11-30 16:27:04 -0500
committerMike Blumenkrantz <zmike@osg.samsung.com>2015-12-04 16:00:38 -0500
commitefab05af1c9b893a905317454521ae14b631355a (patch)
treea98df0a28ba74c40b21c1038af4ed2336f52c356
parentea2de95298635f4e6e82ad3a00825aa0fd16b1e1 (diff)
downloadenlightenment-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.c2
-rw-r--r--src/bin/e_config.c2
-rw-r--r--src/bin/e_config.h1
-rw-r--r--src/bin/e_desk.c2
-rw-r--r--src/modules/conf_window_manipulation/e_int_config_focus.c9
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);