diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 2b3c2bd4c..f7482f484 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -1355,11 +1355,7 @@ e_border_focus_set_with_pointer(E_Border *bd) { if (e_config->focus_policy == E_FOCUS_SLOPPY) { - e_border_focus_set(bd, 1, 1); - } - else if (e_config->focus_policy == E_FOCUS_MOUSE) - { - if (e_border_under_pointer_get(NULL, bd)) + if (e_border_under_pointer_get(bd->desk, bd)) { if (!e_border_pointer_warp_to_center(bd)) e_border_focus_set(bd, 1, 1); @@ -7752,6 +7748,9 @@ e_border_pointer_warp_to_center(E_Border *bd) { int x, y; + /* Do not slide pointer when disabled (probably breaks focus + * on sloppy/mouse focus but requested by users). */ + if (!e_config->pointer_slide) return 0; /* Only warp the pointer if it is not already in the area of * the given border */ ecore_x_pointer_xy_get(bd->zone->container->win, &x, &y); diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 40ae0ffb5..533861c87 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -461,6 +461,7 @@ e_config_init(void) 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, pointer_slide, INT); /**/ E_CONFIG_VAL(D, T, use_e_cursor, INT); /**/ E_CONFIG_VAL(D, T, cursor_size, INT); /**/ E_CONFIG_VAL(D, T, menu_autoscroll_margin, INT); /**/ @@ -698,6 +699,7 @@ e_config_init(void) e_config->resize_info_visible = 1; e_config->focus_last_focused_per_desktop = 1; e_config->focus_revert_on_hide_or_close = 1; + e_config->pointer_slide = 1; e_config->use_e_cursor = 1; e_config->cursor_size = 32; e_config->menu_autoscroll_margin = 0; @@ -1550,6 +1552,7 @@ e_config_init(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->pointer_slide, 0, 1); E_CONFIG_LIMIT(e_config->use_e_cursor, 0, 1); E_CONFIG_LIMIT(e_config->cursor_size, 0, 1024); E_CONFIG_LIMIT(e_config->menu_autoscroll_margin, 0, 50); diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 0e3c6a2fe..38aec9b2d 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -33,7 +33,7 @@ typedef struct _E_Event_Config_Icon_Theme E_Event_Config_Icon_Theme; /* 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 0x0121 +#define E_CONFIG_FILE_GENERATION 0x0122 #define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION) #define E_EVAS_ENGINE_DEFAULT 0 @@ -166,6 +166,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 pointer_slide; // GUI int use_e_cursor; // GUI int cursor_size; // GUI int menu_autoscroll_margin; // GUI diff --git a/src/modules/conf_window_focus/e_int_config_focus.c b/src/modules/conf_window_focus/e_int_config_focus.c index 6fffbafba..f87dc409a 100644 --- a/src/modules/conf_window_focus/e_int_config_focus.c +++ b/src/modules/conf_window_focus/e_int_config_focus.c @@ -25,6 +25,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 pointer_slide; }; /* a nice easy setup function that does the dirty work */ @@ -63,6 +64,7 @@ _fill_data(E_Config_Dialog_Data *cfdata) cfdata->always_click_to_focus = e_config->always_click_to_focus; cfdata->focus_last_focused_per_desktop = e_config->focus_last_focused_per_desktop; cfdata->focus_revert_on_hide_or_close = e_config->focus_revert_on_hide_or_close; + cfdata->pointer_slide = e_config->pointer_slide; cfdata->mode = cfdata->focus_policy; } @@ -103,6 +105,7 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) e_config->always_click_to_focus = 0; e_config->focus_last_focused_per_desktop = 1; e_config->focus_revert_on_hide_or_close = 1; + e_config->pointer_slide = 0; } else if (cfdata->mode == E_FOCUS_MOUSE) { @@ -113,6 +116,7 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) e_config->always_click_to_focus = 0; e_config->focus_last_focused_per_desktop = 0; e_config->focus_revert_on_hide_or_close = 0; + e_config->pointer_slide = 1; } else { @@ -123,6 +127,7 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) e_config->always_click_to_focus = 0; e_config->focus_last_focused_per_desktop = 1; e_config->focus_revert_on_hide_or_close = 1; + e_config->pointer_slide = 1; } e_border_button_bindings_grab_all(); e_config_save_queue(); @@ -141,6 +146,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) 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->pointer_slide = cfdata->pointer_slide; e_border_button_bindings_grab_all(); e_config_save_queue(); return 1; /* Apply was OK */ @@ -207,6 +213,8 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data e_widget_framelist_object_append(of, ob); ob = e_widget_check_add(evas, _("Revert focus when hiding or closing a window"), &(cfdata->focus_revert_on_hide_or_close)); e_widget_framelist_object_append(of, ob); + ob = e_widget_check_add(evas, _("Slide pointer to a new focused window"), &(cfdata->pointer_slide)); + e_widget_framelist_object_append(of, ob); e_widget_list_object_append(o, of, 1, 1, 0.5); return o;