diff --git a/src/bin/e_client.c b/src/bin/e_client.c index d5bc84472..91e375a99 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 15d3cbc13..d771d0776 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 479f876fa..384af6f9a 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 cc9fb2a39..962cb8f28 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 61cd94c92..89748968f 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 0bad6415d..00a1bad27 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;