diff options
Diffstat (limited to 'apps/action.c')
-rw-r--r-- | apps/action.c | 55 |
1 files changed, 39 insertions, 16 deletions
diff --git a/apps/action.c b/apps/action.c index cde57441e7..055171174b 100644 --- a/apps/action.c +++ b/apps/action.c | |||
@@ -59,20 +59,6 @@ static int unlock_combo = BUTTON_NONE; | |||
59 | static bool screen_has_lock = false; | 59 | static bool screen_has_lock = false; |
60 | #endif /* HAVE_SOFTWARE_KEYLOCK */ | 60 | #endif /* HAVE_SOFTWARE_KEYLOCK */ |
61 | 61 | ||
62 | #if defined(HAVE_LCD_BITMAP) && !defined(BOOTLOADER) | ||
63 | /* | ||
64 | * checks whether the given language and context combination require that the | ||
65 | * button is horizontally inverted to support RTL language | ||
66 | * | ||
67 | */ | ||
68 | static bool rtl_button_flip_needed(int context) | ||
69 | { | ||
70 | return lang_is_rtl() && ((context == CONTEXT_STD) || | ||
71 | (context & CONTEXT_TREE) || (context & CONTEXT_MAINMENU) || | ||
72 | (context & CONTEXT_TREE)); | ||
73 | } | ||
74 | #endif | ||
75 | |||
76 | /* | 62 | /* |
77 | * do_button_check is the worker function for get_default_action. | 63 | * do_button_check is the worker function for get_default_action. |
78 | * returns ACTION_UNKNOWN or the requested return value from the list. | 64 | * returns ACTION_UNKNOWN or the requested return value from the list. |
@@ -100,6 +86,44 @@ static inline int do_button_check(const struct button_mapping *items, | |||
100 | return ret; | 86 | return ret; |
101 | } | 87 | } |
102 | 88 | ||
89 | #if defined(HAVE_LCD_BITMAP) && !defined(BOOTLOADER) | ||
90 | /* | ||
91 | * button is horizontally inverted to support RTL language if the given language | ||
92 | * and context combination require that | ||
93 | */ | ||
94 | static int button_flip_horizontally(int context, int button) | ||
95 | { | ||
96 | int newbutton; | ||
97 | |||
98 | if (!(lang_is_rtl() && ((context == CONTEXT_STD) || | ||
99 | (context & CONTEXT_TREE) || (context & CONTEXT_MAINMENU) || | ||
100 | (context & CONTEXT_TREE)))) | ||
101 | { | ||
102 | return button; | ||
103 | } | ||
104 | |||
105 | newbutton = button & | ||
106 | ~(BUTTON_LEFT | BUTTON_RIGHT | ||
107 | #if defined(BUTTON_SCROLL_BACK) && defined(BUTTON_SCROLL_FWD) | ||
108 | | BUTTON_SCROLL_BACK | BUTTON_SCROLL_FWD | ||
109 | #endif | ||
110 | ); | ||
111 | |||
112 | if (button & BUTTON_LEFT) | ||
113 | newbutton |= BUTTON_RIGHT; | ||
114 | if (button & BUTTON_RIGHT) | ||
115 | newbutton |= BUTTON_LEFT; | ||
116 | #if defined(BUTTON_SCROLL_BACK) && defined(BUTTON_SCROLL_FWD) | ||
117 | if (button & BUTTON_SCROLL_BACK) | ||
118 | newbutton |= BUTTON_SCROLL_FWD; | ||
119 | if (button & BUTTON_SCROLL_FWD) | ||
120 | newbutton |= BUTTON_SCROLL_BACK; | ||
121 | #endif | ||
122 | |||
123 | return newbutton; | ||
124 | } | ||
125 | #endif | ||
126 | |||
103 | static inline int get_next_context(const struct button_mapping *items, int i) | 127 | static inline int get_next_context(const struct button_mapping *items, int i) |
104 | { | 128 | { |
105 | while (items[i].button_code != BUTTON_NONE) | 129 | while (items[i].button_code != BUTTON_NONE) |
@@ -219,8 +243,7 @@ static int get_action_worker(int context, int timeout, | |||
219 | #endif /* HAS_BUTTON_HOLD */ | 243 | #endif /* HAS_BUTTON_HOLD */ |
220 | 244 | ||
221 | #if defined(HAVE_LCD_BITMAP) && !defined(BOOTLOADER) | 245 | #if defined(HAVE_LCD_BITMAP) && !defined(BOOTLOADER) |
222 | if (rtl_button_flip_needed(context)) | 246 | button = button_flip_horizontally(context, button); |
223 | button = button_flip_horizontally(button); | ||
224 | #endif | 247 | #endif |
225 | 248 | ||
226 | /* logf("%x,%x",last_button,button); */ | 249 | /* logf("%x,%x",last_button,button); */ |