text/entry: add more key controls for os x 33/90433/2
authorThiep Ha <thiep.ha@samsung.com>
Fri, 30 Sep 2016 04:31:30 +0000 (13:31 +0900)
committerJaehyun Cho <jae_hyun.cho@samsung.com>
Fri, 30 Sep 2016 05:05:14 +0000 (22:05 -0700)
In OS X, cmd-c,v, ... keys are used instead of ctrl-c,v...,
this patch adapts these key handlings.

Change-Id: Ia751eedf5f2180692f64ae2d43e262345f89ce4e
Author: Thiep Ha <thiepha@gmail.com>
Date:   Fri Sep 23 17:51:37 2016 +0900

src/lib/edje/edje_entry.c

index e890fe7..63586cb 100644 (file)
@@ -1502,6 +1502,9 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
    Edje_Real_Part *rp = ed->focused_part;
    Entry *en;
    Eina_Bool control, alt, shift;
+#if defined(__APPLE__) && defined(__MACH__)
+   Eina_Bool super, altgr;
+#endif
    Eina_Bool multiline;
    Eina_Bool cursor_changed;
    int old_cur_pos;
@@ -1535,6 +1538,10 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
 
    old_cur_pos = evas_textblock_cursor_pos_get(en->cursor);
 
+#if defined(__APPLE__) && defined(__MACH__)
+   super = evas_key_modifier_is_set(ev->modifiers, "Super");
+   altgr = evas_key_modifier_is_set(ev->modifiers, "AltGr");
+#endif
    control = evas_key_modifier_is_set(ev->modifiers, "Control");
    alt = evas_key_modifier_is_set(ev->modifiers, "Alt");
    shift = evas_key_modifier_is_set(ev->modifiers, "Shift");
@@ -1649,8 +1656,12 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
         //if (evas_textblock_cursor_char_prev(en->cursor))
         if (evas_textblock_cursor_cluster_prev(en->cursor))
           ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+#if defined(__APPLE__) && defined(__MACH__)
+        if (altgr) evas_textblock_cursor_word_start(en->cursor);
+#else
         /* If control is pressed, go to the start of the word */
         if (control) evas_textblock_cursor_word_start(en->cursor);
+#endif
         if (en->select_allow)
           {
              if (shift) _sel_extend(ed, en->cursor, rp->object, en);
@@ -1686,7 +1697,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
                }
           }
         /* If control is pressed, go to the end of the word */
+#if defined(__APPLE__) && defined(__MACH__)
+        if (altgr) evas_textblock_cursor_word_end(en->cursor);
+#else
         if (control) evas_textblock_cursor_word_end(en->cursor);
+#endif
         // TIZEN_ONLY(20150127): Add evas_textblock_cursor_cluster_* APIs.
         //if (evas_textblock_cursor_char_next(en->cursor))
         if (evas_textblock_cursor_cluster_next(en->cursor))
@@ -1823,14 +1838,22 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
         _edje_emit(ed, "cursor,changed,manual", rp->part->name);
         ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
      }
+#if defined(__APPLE__) && defined(__MACH__)
+   else if ((super) && (!shift) && (!strcmp(ev->keyname, "v")))
+#else
    else if ((control) && (!shift) && (!strcmp(ev->keyname, "v")))
+#endif
      {
         _compose_seq_reset(en);
         _edje_emit(ed, "entry,paste,request", rp->part->name);
         _edje_emit(ed, "entry,paste,request,3", rp->part->name);
         ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
      }
+#if defined(__APPLE__) && defined(__MACH__)
+   else if ((super) && (!strcmp(ev->keyname, "a")))
+#else
    else if ((control) && (!strcmp(ev->keyname, "a")))
+#endif
      {
         _compose_seq_reset(en);
         if (shift)
@@ -1844,19 +1867,31 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
              ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
           }
      }
+#if defined(__APPLE__) && defined(__MACH__)
+   else if ((super) && (((!shift) && !strcmp(ev->keyname, "c")) || !strcmp(ev->key, "Insert")))
+#else
    else if ((control) && (((!shift) && !strcmp(ev->keyname, "c")) || !strcmp(ev->key, "Insert")))
+#endif
      {
         _compose_seq_reset(en);
         _edje_emit(ed, "entry,copy,notify", rp->part->name);
         ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
      }
+#if defined(__APPLE__) && defined(__MACH__)
+   else if ((super) && (!shift) && ((!strcmp(ev->keyname, "x") || (!strcmp(ev->keyname, "m")))))
+#else
    else if ((control) && (!shift) && ((!strcmp(ev->keyname, "x") || (!strcmp(ev->keyname, "m")))))
+#endif
      {
         _compose_seq_reset(en);
         _edje_emit(ed, "entry,cut,notify", rp->part->name);
         ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
      }
+#if defined(__APPLE__) && defined(__MACH__)
+   else if ((super) && (!strcmp(ev->keyname, "z")))
+#else
    else if ((control) && (!strcmp(ev->keyname, "z")))
+#endif
      {
         _compose_seq_reset(en);
         if (shift)
@@ -1871,7 +1906,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
           }
         ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
      }
+#if defined(__APPLE__) && defined(__MACH__)
+   else if ((super) && (!shift) && (!strcmp(ev->keyname, "y")))
+#else
    else if ((control) && (!shift) && (!strcmp(ev->keyname, "y")))
+#endif
      {
         _compose_seq_reset(en);
         // redo