Procházet zdrojové kódy

Fix various issues reported on github (#2280)

* Desktop: Fix use after free in slideshow view
* Gui: long press toggles first letter case too
* Desktop: remove debug logging
あく před 3 roky
rodič
revize
8d2143add5

+ 1 - 1
applications/services/desktop/views/desktop_view_slideshow.c

@@ -56,7 +56,7 @@ static bool desktop_view_slideshow_input(InputEvent* event, void* context) {
             instance->callback(DesktopSlideshowCompleted, instance->context);
             instance->callback(DesktopSlideshowCompleted, instance->context);
         }
         }
         update_view = true;
         update_view = true;
-    } else if(event->key == InputKeyOk) {
+    } else if(event->key == InputKeyOk && instance->timer) {
         if(event->type == InputTypePress) {
         if(event->type == InputTypePress) {
             furi_timer_start(instance->timer, DESKTOP_SLIDESHOW_POWEROFF_SHORT);
             furi_timer_start(instance->timer, DESKTOP_SLIDESHOW_POWEROFF_SHORT);
         } else if(event->type == InputTypeRelease) {
         } else if(event->type == InputTypeRelease) {

+ 4 - 5
applications/services/gui/modules/text_input.c

@@ -138,7 +138,7 @@ static bool char_is_lowercase(char letter) {
 static char char_to_uppercase(const char letter) {
 static char char_to_uppercase(const char letter) {
     if(letter == '_') {
     if(letter == '_') {
         return 0x20;
         return 0x20;
-    } else if(isalpha(letter)) {
+    } else if(islower(letter)) {
         return (letter - 0x20);
         return (letter - 0x20);
     } else {
     } else {
         return letter;
         return letter;
@@ -309,7 +309,9 @@ static void text_input_handle_ok(TextInput* text_input, TextInputModel* model, b
     char selected = get_selected_char(model);
     char selected = get_selected_char(model);
     size_t text_length = strlen(model->text_buffer);
     size_t text_length = strlen(model->text_buffer);
 
 
-    if(shift) {
+    bool toogle_case = text_length == 0;
+    if(shift) toogle_case = !toogle_case;
+    if(toogle_case) {
         selected = char_to_uppercase(selected);
         selected = char_to_uppercase(selected);
     }
     }
 
 
@@ -329,9 +331,6 @@ static void text_input_handle_ok(TextInput* text_input, TextInputModel* model, b
             text_length = 0;
             text_length = 0;
         }
         }
         if(text_length < (model->text_buffer_size - 1)) {
         if(text_length < (model->text_buffer_size - 1)) {
-            if(text_length == 0 && char_is_lowercase(selected)) {
-                selected = char_to_uppercase(selected);
-            }
             model->text_buffer[text_length] = selected;
             model->text_buffer[text_length] = selected;
             model->text_buffer[text_length + 1] = 0;
             model->text_buffer[text_length + 1] = 0;
         }
         }