From d534dbb0f0684b96baa94e2437bdc4ae88348f17 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 20 Nov 2009 23:58:33 +0000 Subject: [PATCH] patch from tom for rtl kbd feature. SVN revision: 43853 --- src/modules/illume/e_kbd_int.c | 25 +++++++++++++++++++++++++ src/modules/illume/e_kbd_int.h | 8 ++++++++ 2 files changed, 33 insertions(+) diff --git a/src/modules/illume/e_kbd_int.c b/src/modules/illume/e_kbd_int.c index f408c6c25..0cefa4daf 100644 --- a/src/modules/illume/e_kbd_int.c +++ b/src/modules/illume/e_kbd_int.c @@ -440,6 +440,16 @@ _e_kbd_int_key_press_handle(E_Kbd_Int *ki, Evas_Coord dx, Evas_Coord dy) static void _e_kbd_int_stroke_handle(E_Kbd_Int *ki, int dir) { + /* If the keyboard direction is RTL switch dir 3 and 1 + * i.e, make forward backwards and the other way around */ + if (ki->layout.direction == E_KBD_INT_DIRECTION_RTL) + { + if (dir == 3) + dir = 1; + else if (dir == 1) + dir = 3; + } + if (dir == 4) // up { _e_kbd_int_layout_next(ki); @@ -897,6 +907,10 @@ _e_kbd_int_layout_parse(E_Kbd_Int *ki, const char *layout) if (!f) return; ki->layout.directory = ecore_file_dir_get(layout); ki->layout.file = eina_stringshare_add(layout); + + /* Make the default direction LTR */ + ki->layout.direction = E_KBD_INT_DIRECTION_LTR; + while (fgets(buf, sizeof(buf), f)) { int len; @@ -924,6 +938,17 @@ _e_kbd_int_layout_parse(E_Kbd_Int *ki, const char *layout) sscanf(buf, "%*s %i\n", &(ki->layout.fuzz)); continue; } + if (!strcmp(str, "direction")) + { + char direction[4]; + sscanf(buf, "%*s %3s\n", direction); + /* If rtl mark as rtl, otherwise make it ltr */ + if (!strcmp(direction, "rtl")) + ki->layout.direction = E_KBD_INT_DIRECTION_RTL; + else + ki->layout.direction = E_KBD_INT_DIRECTION_LTR; + continue; + } if (!strcmp(str, "key")) { ky = calloc(1, sizeof(E_Kbd_Int_Key)); diff --git a/src/modules/illume/e_kbd_int.h b/src/modules/illume/e_kbd_int.h index 4c2675196..f7018211f 100644 --- a/src/modules/illume/e_kbd_int.h +++ b/src/modules/illume/e_kbd_int.h @@ -15,6 +15,13 @@ typedef enum _E_Kbd_Int_Type E_KBD_INT_TYPE_PASSWORD = (1 << 6) } E_Kbd_Int_Type; +/* The natural text direction of the keyboard */ +typedef enum _E_kbd_Int_Direction +{ + E_KBD_INT_DIRECTION_LTR = (1 << 0), + E_KBD_INT_DIRECTION_RTL = (1 << 1) +} E_Kbd_Int_Direction; + typedef struct _E_Kbd_Int E_Kbd_Int; typedef struct _E_Kbd_Int_Key E_Kbd_Int_Key; typedef struct _E_Kbd_Int_Key_State E_Kbd_Int_Key_State; @@ -34,6 +41,7 @@ struct _E_Kbd_Int const char *file; int w, h; int fuzz; + int direction; E_Kbd_Int_Type type; Eina_List *keys; E_Kbd_Int_Key *pressed;