summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2018-04-13 04:16:25 +0900
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2018-04-13 04:19:16 +0900
commitb0a7c4b086b8b15615a81b811eda9b215608e854 (patch)
tree998fe0c776783cc481052319803d96473d29bce6
parent28d06f9a5fa2b639579ac43b590df485e0cfd650 (diff)
downloadefl-b0a7c4b086b8b15615a81b811eda9b215608e854.tar.gz
elm entry - fix wayland bug by not updating selection until after mse up
or update with a small delay after any change and check mouse button mask to avoid some bizarre mouse up event that is stopping the selection form continuing with a mouse up event... so this works around that and still works.
-rw-r--r--src/lib/elementary/elm_entry.c27
-rw-r--r--src/lib/elementary/elm_widget_entry.h1
2 files changed, 23 insertions, 5 deletions
diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c
index 9e0c64754c..a158939f6b 100644
--- a/src/lib/elementary/elm_entry.c
+++ b/src/lib/elementary/elm_entry.c
@@ -103,6 +103,7 @@ struct _Mod_Api
static void _create_selection_handlers(Evas_Object *obj, Elm_Entry_Data *sd);
static void _magnifier_move(void *data);
+static Eina_Bool _entry_selection_changed_signal_job_cb(void *data);
static Evas_Object *
_entry_win_get(Evas_Object *obj)
@@ -2054,6 +2055,8 @@ _mouse_up_cb(void *data,
elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_ON);
}
}
+ if (sd->sel_change_timeout) ecore_timer_del(sd->sel_change_timeout);
+ sd->sel_change_timeout = ecore_timer_add(0.02, _entry_selection_changed_signal_job_cb, data);
}
/* Since context menu disabled flag was checked at mouse right key down,
* hence the same should be stopped at mouse up of right key as well */
@@ -2324,25 +2327,37 @@ _entry_selection_none_signal_cb(void *data,
// return win && elm_win_wl_window_get(win);
//}
-static void
-_entry_selection_changed_signal_cb(void *data,
- Evas_Object *obj EINA_UNUSED,
- const char *emission EINA_UNUSED,
- const char *source EINA_UNUSED)
+static Eina_Bool
+_entry_selection_changed_signal_job_cb(void *data)
{
ELM_ENTRY_DATA_GET(data, sd);
if (!sd) return;
+ sd->sel_change_timeout = NULL;
sd->have_selection = EINA_TRUE;
efl_event_callback_legacy_call
(data, EFL_UI_EVENT_SELECTION_CHANGED, NULL);
// XXX: still try primary selection even if on wl in case it's
// supported
// if (!_entry_win_is_wl(data))
+ if (!evas_pointer_button_down_mask_get(evas_object_evas_get(sd->entry_edje)))
_selection_store(ELM_SEL_TYPE_PRIMARY, data);
_update_selection_handler(data);
if (_elm_config->atspi_mode)
efl_access_event_emit(EFL_ACCESS_MIXIN, data, EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_SELECTION_CHANGED, NULL);
+ return EINA_FALSE;
+}
+
+static void
+_entry_selection_changed_signal_cb(void *data,
+ Evas_Object *obj EINA_UNUSED,
+ const char *emission EINA_UNUSED,
+ const char *source EINA_UNUSED)
+{
+ ELM_ENTRY_DATA_GET(data, sd);
+
+ if (sd->sel_change_timeout) ecore_timer_del(sd->sel_change_timeout);
+ sd->sel_change_timeout = ecore_timer_add(0.02, _entry_selection_changed_signal_job_cb, data);
}
static void
@@ -3959,6 +3974,8 @@ _elm_entry_efl_canvas_group_group_del(Eo *obj, Elm_Entry_Data *sd)
eina_stringshare_del(sd->file);
+ ecore_timer_del(sd->sel_change_timeout);
+ sd->sel_change_timeout = NULL;
ecore_job_del(sd->hov_deljob);
if ((sd->api) && (sd->api->obj_unhook))
sd->api->obj_unhook(obj); // module - unhook
diff --git a/src/lib/elementary/elm_widget_entry.h b/src/lib/elementary/elm_widget_entry.h
index a40df5183b..cf5e0fb978 100644
--- a/src/lib/elementary/elm_widget_entry.h
+++ b/src/lib/elementary/elm_widget_entry.h
@@ -71,6 +71,7 @@ struct _Elm_Entry_Data
Edje_Cursor sel_handler_cursor;
void *input_panel_imdata;
Eina_List *edje_signals;
+ Ecore_Timer *sel_change_timeout;
int input_panel_imdata_len;
int input_panel_layout_variation;
int validators;