diff options
-rw-r--r-- | apps/action.c | 59 | ||||
-rw-r--r-- | apps/action.h | 9 | ||||
-rw-r--r-- | apps/menus/settings_menu.c | 1 | ||||
-rw-r--r-- | apps/settings.c | 1 |
4 files changed, 66 insertions, 4 deletions
diff --git a/apps/action.c b/apps/action.c index 07032f7ae7..15422f987b 100644 --- a/apps/action.c +++ b/apps/action.c | |||
@@ -735,8 +735,11 @@ static inline void do_softlock(action_last_t *last, action_cur_t *cur) | |||
735 | #else | 735 | #else |
736 | int action = cur->action; | 736 | int action = cur->action; |
737 | 737 | ||
738 | if (!last->screen_has_lock) | 738 | /* check to make sure we don't get stuck without a way to unlock - if locked, |
739 | { /* no need to check softlock return immediately */ | 739 | * we can still use unlock_combo to unlock */ |
740 | if (!last->screen_has_lock && !last->keys_locked) | ||
741 | { | ||
742 | /* no need to check softlock return immediately */ | ||
740 | return; | 743 | return; |
741 | } | 744 | } |
742 | 745 | ||
@@ -1180,7 +1183,7 @@ void set_selective_backlight_actions(bool selective, unsigned int mask, | |||
1180 | #ifndef HAS_BUTTON_HOLD | 1183 | #ifndef HAS_BUTTON_HOLD |
1181 | bool is_keys_locked(void) | 1184 | bool is_keys_locked(void) |
1182 | { | 1185 | { |
1183 | return (action_last.screen_has_lock && action_last.keys_locked); | 1186 | return (action_last.keys_locked); |
1184 | } | 1187 | } |
1185 | 1188 | ||
1186 | /* Enable selected actions to bypass a locked state */ | 1189 | /* Enable selected actions to bypass a locked state */ |
@@ -1196,7 +1199,57 @@ void set_selective_softlock_actions(bool selective, unsigned int mask) | |||
1196 | action_last.softlock_mask = SEL_ACTION_NONE; | 1199 | action_last.softlock_mask = SEL_ACTION_NONE; |
1197 | } | 1200 | } |
1198 | } | 1201 | } |
1202 | |||
1203 | |||
1204 | void action_autosoftlock_init(void) | ||
1205 | { | ||
1206 | action_cur_t cur; | ||
1207 | int i = 0; | ||
1208 | |||
1209 | if (action_last.unlock_combo == BUTTON_NONE) | ||
1210 | { | ||
1211 | /* search CONTEXT_WPS, should be here */ | ||
1212 | cur.items = get_context_mapping(CONTEXT_WPS); | ||
1213 | while (cur.items[i].button_code != BUTTON_NONE) | ||
1214 | { | ||
1215 | if (cur.items[i].action_code == ACTION_STD_KEYLOCK) | ||
1216 | { | ||
1217 | action_last.unlock_combo = cur.items[i].button_code; | ||
1218 | break; | ||
1219 | } | ||
1220 | i = i + 1; | ||
1221 | } | ||
1222 | |||
1223 | /* not there... let's try std | ||
1224 | * I doubt any targets will need this, but... */ | ||
1225 | if (action_last.unlock_combo == BUTTON_NONE) | ||
1226 | { | ||
1227 | i = 0; | ||
1228 | cur.items = get_context_mapping(CONTEXT_STD); | ||
1229 | while (cur.items[i].button_code != BUTTON_NONE) | ||
1230 | { | ||
1231 | if (cur.items[i].action_code == ACTION_STD_KEYLOCK) | ||
1232 | { | ||
1233 | action_last.unlock_combo = cur.items[i].button_code; | ||
1234 | break; | ||
1235 | } | ||
1236 | i = i + 1; | ||
1237 | } | ||
1238 | } | ||
1239 | } | ||
1240 | |||
1241 | /* if we have autolock and alwaysautolock, go ahead and arm it */ | ||
1242 | if (has_flag(action_last.softlock_mask, SEL_ACTION_AUTOLOCK) && | ||
1243 | has_flag(action_last.softlock_mask, SEL_ACTION_ALWAYSAUTOLOCK) && | ||
1244 | (action_last.unlock_combo != BUTTON_NONE)) | ||
1245 | { | ||
1246 | action_last.softlock_mask = action_last.softlock_mask | SEL_ACTION_ALOCK_OK; | ||
1247 | } | ||
1248 | |||
1249 | return; | ||
1250 | } | ||
1199 | #endif /* !HAS_BUTTON_HOLD */ | 1251 | #endif /* !HAS_BUTTON_HOLD */ |
1252 | |||
1200 | /* | 1253 | /* |
1201 | ******************************************************************************* | 1254 | ******************************************************************************* |
1202 | * END EXPORTED ACTION FUNCTIONS *********************************************** | 1255 | * END EXPORTED ACTION FUNCTIONS *********************************************** |
diff --git a/apps/action.h b/apps/action.h index 711ec58f71..ad91f31535 100644 --- a/apps/action.h +++ b/apps/action.h | |||
@@ -68,10 +68,17 @@ | |||
68 | #if !defined(HAS_BUTTON_HOLD) | 68 | #if !defined(HAS_BUTTON_HOLD) |
69 | /* returns true if keys_locked and screen_has_lock */ | 69 | /* returns true if keys_locked and screen_has_lock */ |
70 | bool is_keys_locked(void); | 70 | bool is_keys_locked(void); |
71 | |||
71 | /* Enable selected actions to bypass a locked state | 72 | /* Enable selected actions to bypass a locked state |
72 | * mask is combination of Selective action selection flags */ | 73 | * mask is combination of Selective action selection flags */ |
73 | void set_selective_softlock_actions(bool selective, unsigned int mask); | 74 | void set_selective_softlock_actions(bool selective, unsigned int mask); |
74 | #endif | 75 | |
76 | /* search the standard and wps contexts for ACTION_STD_KEYLOCK, | ||
77 | * load it into unlock_combo if we find it, | ||
78 | * also arm autolock if enabled. */ | ||
79 | void action_autosoftlock_init(void); | ||
80 | |||
81 | #endif /* !defined(HAS_BUTTON_HOLD) */ | ||
75 | 82 | ||
76 | #if defined(HAVE_BACKLIGHT) | 83 | #if defined(HAVE_BACKLIGHT) |
77 | /* Enable selected actions to leave the backlight off | 84 | /* Enable selected actions to leave the backlight off |
diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c index 58c328c677..a5e747651a 100644 --- a/apps/menus/settings_menu.c +++ b/apps/menus/settings_menu.c | |||
@@ -73,6 +73,7 @@ static int selectivesoftlock_callback(int action, | |||
73 | set_selective_softlock_actions( | 73 | set_selective_softlock_actions( |
74 | global_settings.bt_selective_softlock_actions, | 74 | global_settings.bt_selective_softlock_actions, |
75 | global_settings.bt_selective_softlock_actions_mask); | 75 | global_settings.bt_selective_softlock_actions_mask); |
76 | action_autosoftlock_init(); | ||
76 | break; | 77 | break; |
77 | } | 78 | } |
78 | 79 | ||
diff --git a/apps/settings.c b/apps/settings.c index 99cede382b..f89fc581ca 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -1010,6 +1010,7 @@ void settings_apply(bool read_disk) | |||
1010 | set_selective_softlock_actions( | 1010 | set_selective_softlock_actions( |
1011 | global_settings.bt_selective_softlock_actions, | 1011 | global_settings.bt_selective_softlock_actions, |
1012 | global_settings.bt_selective_softlock_actions_mask); | 1012 | global_settings.bt_selective_softlock_actions_mask); |
1013 | action_autosoftlock_init(); | ||
1013 | #endif | 1014 | #endif |
1014 | 1015 | ||
1015 | #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING | 1016 | #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING |