discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=378ac8b6aa89281eaeb0129818ee0aacfef3af67

commit 378ac8b6aa89281eaeb0129818ee0aacfef3af67
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Fri Jul 7 16:26:50 2017 -0400

    elm_entry: don't update PRIMARY selection under wayland
    
    this doesn't exist yet, and elm_cnp forces PRIMARY updates to overwrite
    CLIPBOARD which is not good
    
    @fix
---
 src/lib/elementary/elm_entry.c | 45 +++++++++++++++++++++++++++++++-----------
 1 file changed, 34 insertions(+), 11 deletions(-)

diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c
index 5f8ba15882..f9f2faae76 100644
--- a/src/lib/elementary/elm_entry.c
+++ b/src/lib/elementary/elm_entry.c
@@ -100,6 +100,16 @@ struct _Mod_Api
 static void _create_selection_handlers(Evas_Object *obj, Elm_Entry_Data *sd);
 static void _magnifier_move(void *data);
 
+static Evas_Object *
+_entry_win_get(Evas_Object *obj)
+{
+   Evas_Object *top;
+   top = elm_widget_top_get(obj);
+   if ((!elm_win_window_id_get(top)) && (elm_win_type_get(top) == 
ELM_WIN_INLINED_IMAGE))
+     top = elm_widget_parent2_get(top);
+   return top;
+}
+
 static Mod_Api *
 _module_find(Evas_Object *obj EINA_UNUSED)
 {
@@ -2296,6 +2306,14 @@ _entry_selection_none_signal_cb(void *data,
    elm_entry_select_none(data);
 }
 
+static inline Eina_Bool
+_entry_win_is_wl(Evas_Object *obj)
+{
+   Evas_Object *win = _entry_win_get(obj);
+   /* primary selection does not exist (yet) */
+   return win && elm_win_wl_window_get(win);
+}
+
 static void
 _entry_selection_changed_signal_cb(void *data,
                                    Evas_Object *obj EINA_UNUSED,
@@ -2307,7 +2325,8 @@ _entry_selection_changed_signal_cb(void *data,
    sd->have_selection = EINA_TRUE;
    efl_event_callback_legacy_call
      (data, EFL_UI_EVENT_SELECTION_CHANGED, NULL);
-   _selection_store(ELM_SEL_TYPE_PRIMARY, data);
+   if (!_entry_win_is_wl(data))
+     _selection_store(ELM_SEL_TYPE_PRIMARY, data);
    _update_selection_handler(data);
    if (_elm_config->atspi_mode)
      
elm_interface_atspi_accessible_event_emit(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, 
data, ELM_INTERFACE_ATSPI_TEXT_EVENT_ACCESS_TEXT_SELECTION_CHANGED, NULL);
@@ -2326,18 +2345,21 @@ _entry_selection_cleared_signal_cb(void *data,
    sd->have_selection = EINA_FALSE;
    efl_event_callback_legacy_call
      (data, EFL_UI_EVENT_SELECTION_CLEARED, NULL);
-   if (sd->cut_sel)
+   if (!_entry_win_is_wl(data))
      {
-        elm_cnp_selection_set
-           (data, ELM_SEL_TYPE_PRIMARY, ELM_SEL_FORMAT_MARKUP,
-            sd->cut_sel, eina_stringshare_strlen(sd->cut_sel));
-        elm_cnp_selection_loss_callback_set(data, ELM_SEL_TYPE_PRIMARY, 
_selection_clear, data);
+        if (sd->cut_sel)
+          {
+             elm_cnp_selection_set
+                (data, ELM_SEL_TYPE_PRIMARY, ELM_SEL_FORMAT_MARKUP,
+                 sd->cut_sel, eina_stringshare_strlen(sd->cut_sel));
+             elm_cnp_selection_loss_callback_set(data, ELM_SEL_TYPE_PRIMARY, 
_selection_clear, data);
 
-        ELM_SAFE_FREE(sd->cut_sel, eina_stringshare_del);
-     }
-   else
-     {
-        elm_object_cnp_selection_clear(data, ELM_SEL_TYPE_PRIMARY);
+             ELM_SAFE_FREE(sd->cut_sel, eina_stringshare_del);
+          }
+        else
+          {
+             elm_object_cnp_selection_clear(data, ELM_SEL_TYPE_PRIMARY);
+          }
      }
    _hide_selection_handler(data);
 }
@@ -2356,6 +2378,7 @@ _entry_paste_request_signal_cb(void *data,
      ELM_SEL_TYPE_PRIMARY : ELM_SEL_TYPE_CLIPBOARD;
 
    if (!sd->editable) return;
+   if ((type == ELM_SEL_TYPE_PRIMARY) && _entry_win_is_wl(data)) return;
    efl_event_callback_legacy_call
      (data, EFL_UI_EVENT_SELECTION_PASTE, NULL);
 

-- 


Reply via email to