disable cursor when switching text/graphics mode
authorKay Sievers <kay@vrfy.org>
Sun, 22 Dec 2013 20:28:08 +0000 (21:28 +0100)
committerKay Sievers <kay@vrfy.org>
Sun, 22 Dec 2013 20:43:56 +0000 (21:43 +0100)
src/efi/graphics.c
src/efi/gummiboot.c

index d903ba1..d3f674b 100644 (file)
@@ -70,18 +70,22 @@ EFI_STATUS graphics_mode(BOOLEAN on) {
         if (EFI_ERROR(err))
                 return err;
 
+        /* check current mode */
         err = uefi_call_wrapper(ConsoleControl->GetMode, 4, ConsoleControl, &current, &uga_exists, &stdin_locked);
-        if (err == EFI_SUCCESS) {
-                if (on)
-                        new = EfiConsoleControlScreenGraphics;
-                else
-                        new = EfiConsoleControlScreenText;
-
-                if (new == current)
-                        return EFI_SUCCESS;
-        }
+        if (EFI_ERROR(err))
+                return err;
+
+        /* do not touch the mode */
+        new  = on ? EfiConsoleControlScreenGraphics : EfiConsoleControlScreenText;
+        if (new == current)
+                return EFI_SUCCESS;
 
-        return uefi_call_wrapper(ConsoleControl->SetMode, 2, ConsoleControl, new);
+        err = uefi_call_wrapper(ConsoleControl->SetMode, 2, ConsoleControl, new);
+
+        /* some firmware enables the cursor when switching modes */
+        uefi_call_wrapper(ST->ConOut->EnableCursor, 2, ST->ConOut, FALSE);
+
+        return err;
 }
 
 struct bmp_file {
index 1571da3..e018ffd 100644 (file)
@@ -410,7 +410,6 @@ static VOID print_status(Config *config, EFI_FILE *root_dir, CHAR16 *loaded_imag
                 }
 
                 graphics_mode(FALSE);
-                uefi_call_wrapper(ST->ConOut->EnableCursor, 2, ST->ConOut, FALSE);
                 break;
         }