discomfitor pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=166ed0d234f2350f9d27ff7375aa84955b7dd674
commit 166ed0d234f2350f9d27ff7375aa84955b7dd674 Author: Mike Blumenkrantz <zm...@samsung.com> Date: Sun Dec 29 17:04:26 2013 -0500 feature: new focus option "raise on revert focus" this option provides the functionality which was intended by the old and broken "raise on focus" option. it raises windows ONLY when reverting focus in cases not directly triggered by the user or any application --- src/bin/e_client.c | 7 ++++++- src/bin/e_config.c | 2 ++ src/bin/e_config.h | 3 ++- src/bin/e_desk.c | 6 ++++++ src/modules/conf_window_manipulation/e_int_config_focus.c | 9 ++++++++- src/modules/wizard/page_060.c | 1 + 6 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/bin/e_client.c b/src/bin/e_client.c index d5bc844..91e375a 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -354,7 +354,11 @@ _e_client_revert_focus(E_Client *ec) if ((ec->parent) && (ec->parent->desk == desk) && (ec->parent->modal == ec)) - evas_object_focus_set(ec->parent->frame, 1); + { + evas_object_focus_set(ec->parent->frame, 1); + if (e_config->raise_on_revert_focus) + evas_object_raise(ec->parent->frame); + } else if (e_config->focus_revert_on_hide_or_close) { Eina_Bool unlock = ec->lock_focus_out; @@ -367,6 +371,7 @@ _e_client_revert_focus(E_Client *ec) pec = e_client_under_pointer_get(desk, ec); if (pec) evas_object_focus_set(pec->frame, 1); + /* no autoraise/revert here because it's probably annoying */ } } diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 15d3cbc..d771d07 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -610,6 +610,7 @@ _e_config_edd_init(Eina_Bool old) E_CONFIG_VAL(D, T, border_raise_on_mouse_action, INT); E_CONFIG_VAL(D, T, border_raise_on_focus, INT); + E_CONFIG_VAL(D, T, raise_on_revert_focus, INT); E_CONFIG_VAL(D, T, desk_flip_wrap, INT); E_CONFIG_VAL(D, T, fullscreen_flip, INT); E_CONFIG_VAL(D, T, multiscreen_flip, INT); @@ -1403,6 +1404,7 @@ e_config_load(void) E_CONFIG_LIMIT(e_config->desklock_ask_presentation_timeout, 1.0, 300.0); E_CONFIG_LIMIT(e_config->border_raise_on_mouse_action, 0, 1); E_CONFIG_LIMIT(e_config->border_raise_on_focus, 0, 1); + E_CONFIG_LIMIT(e_config->raise_on_revert_focus, 0, 1); E_CONFIG_LIMIT(e_config->desk_flip_wrap, 0, 1); E_CONFIG_LIMIT(e_config->fullscreen_flip, 0, 1); E_CONFIG_LIMIT(e_config->icon_theme_overrides, 0, 1); diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 479f876..384af6f 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -47,7 +47,7 @@ typedef enum /* increment this whenever a new set of config values are added but the users * config doesn't need to be wiped - simply new values need to be put in */ -#define E_CONFIG_FILE_GENERATION 15 +#define E_CONFIG_FILE_GENERATION 16 #define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH * 1000000) + E_CONFIG_FILE_GENERATION) #define E_CONFIG_BINDINGS_VERSION 0 // DO NOT INCREMENT UNLESS YOU WANT TO WIPE ALL BINDINGS!!!!! @@ -254,6 +254,7 @@ struct _E_Config int border_raise_on_mouse_action; // GUI int border_raise_on_focus; // GUI + int raise_on_revert_focus; // GUI int desk_flip_wrap; // GUI int fullscreen_flip; // GUI int multiscreen_flip; // GUI diff --git a/src/bin/e_desk.c b/src/bin/e_desk.c index cc9fb2a..962cb8f 100644 --- a/src/bin/e_desk.c +++ b/src/bin/e_desk.c @@ -401,6 +401,8 @@ e_desk_last_focused_focus(E_Desk *desk) continue; } e_client_focus_set_with_pointer(ec); + if (e_config->raise_on_revert_focus) + evas_object_raise(ec->frame); return ec; } } @@ -408,6 +410,8 @@ e_desk_last_focused_focus(E_Desk *desk) if (ecs) { e_client_focus_set_with_pointer(ecs); + if (e_config->raise_on_revert_focus) + evas_object_raise(ecs->frame); return ecs; } if (e_client_focused_get()) @@ -699,6 +703,8 @@ e_desk_flip_end(E_Desk *desk) if (!e_client_util_desk_visible(ec, desk)) continue; if (ec->iconic) continue; evas_object_focus_set(ec->frame, 1); + if (e_config->raise_on_revert_focus) + evas_object_raise(ec->frame); return; } } 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 61cd94c..8974896 100644 --- a/src/modules/conf_window_manipulation/e_int_config_focus.c +++ b/src/modules/conf_window_manipulation/e_int_config_focus.c @@ -31,6 +31,7 @@ struct _E_Config_Dialog_Data double pointer_warp_speed; double auto_raise_delay; int border_raise_on_mouse_action; + int raise_on_revert_focus; }; /* a nice easy setup function that does the dirty work */ @@ -84,6 +85,7 @@ _fill_data(E_Config_Dialog_Data *cfdata) cfdata->auto_raise_delay = e_config->auto_raise_delay; cfdata->border_raise_on_mouse_action = e_config->border_raise_on_mouse_action; + cfdata->raise_on_revert_focus = e_config->raise_on_revert_focus; } static void * @@ -186,6 +188,7 @@ _advanced_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) e_config->use_auto_raise = cfdata->use_auto_raise; e_config->auto_raise_delay = cfdata->auto_raise_delay; e_config->border_raise_on_mouse_action = cfdata->border_raise_on_mouse_action; + e_config->raise_on_revert_focus = cfdata->raise_on_revert_focus; e_comp_button_bindings_grab_all(); e_config_save_queue(); return 1; /* Apply was OK */ @@ -207,7 +210,8 @@ _advanced_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *c (fabs(e_config->pointer_warp_speed - cfdata->pointer_warp_speed) < DBL_EPSILON) || (e_config->use_auto_raise != cfdata->use_auto_raise) || (e_config->auto_raise_delay != cfdata->auto_raise_delay) || - (e_config->border_raise_on_mouse_action != cfdata->border_raise_on_mouse_action); + (e_config->border_raise_on_mouse_action != cfdata->border_raise_on_mouse_action) || + (e_config->raise_on_revert_focus != cfdata->raise_on_revert_focus); } /**--GUI--**/ @@ -291,6 +295,9 @@ _advanced_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Da ob = e_widget_check_add(evas, _("Raise when starting to move or resize"), &(cfdata->border_raise_on_mouse_action)); e_widget_framelist_object_append(of, ob); + ob = e_widget_check_add(evas, _("Raise when reverting focus"), + &(cfdata->raise_on_revert_focus)); + e_widget_framelist_object_append(of, ob); e_widget_list_object_append(ol, of, 1, 0, 0.5); e_widget_toolbook_page_append(otb, NULL, _("Stacking"), ol, 1, 0, 1, 0, 0.5, 0.0); diff --git a/src/modules/wizard/page_060.c b/src/modules/wizard/page_060.c index 0bad641..00a1bad 100644 --- a/src/modules/wizard/page_060.c +++ b/src/modules/wizard/page_060.c @@ -55,6 +55,7 @@ wizard_page_hide(E_Wizard_Page *pg __UNUSED__) e_config->pass_click_on = 1; e_config->always_click_to_raise = 1; e_config->always_click_to_focus = 1; + e_config->raise_on_revert_focus = 1; e_config->focus_last_focused_per_desktop = 1; e_config->pointer_slide = 0; e_config->disable_all_pointer_warps = 1; --