Patchwork [11/15] sdl: Fix cursor handling when switching consoles in absolute mouse mode

login
register
mail settings
Submitter Jan Kiszka
Date July 30, 2011, 9:39 a.m.
Message ID <6a407b6655b0a3e2f159c03fcb1cff45476b8bdb.1312018756.git.jan.kiszka@web.de>
Download mbox | patch
Permalink /patch/107497/
State New
Headers show

Comments

Jan Kiszka - July 30, 2011, 9:39 a.m.
From: Jan Kiszka <jan.kiszka@siemens.com>

Restore the cursor when switching from graphic to text console while the
mouse is in absolute mode. Disable it again when returning.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 ui/sdl.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

Patch

diff --git a/ui/sdl.c b/ui/sdl.c
index 662ffef..5ad38d5 100644
--- a/ui/sdl.c
+++ b/ui/sdl.c
@@ -452,7 +452,7 @@  static void sdl_show_cursor(void)
     if (!cursor_hide)
         return;
 
-    if (!kbd_mouse_is_absolute()) {
+    if (!kbd_mouse_is_absolute() || !is_graphic_console()) {
         SDL_ShowCursor(1);
         if (guest_cursor &&
                 (gui_grab || kbd_mouse_is_absolute() || absolute_enabled))
@@ -625,13 +625,20 @@  static void sdl_refresh(DisplayState *ds)
                         /* Reset the modifiers sent to the current console */
                         reset_keys();
                         console_select(keycode - 0x02);
+                        gui_keysym = 1;
+                        if (gui_fullscreen) {
+                            break;
+                        }
                         if (!is_graphic_console()) {
                             /* release grab if going to a text console */
-                            if (gui_grab && !gui_fullscreen) {
+                            if (gui_grab) {
                                 sdl_grab_end();
+                            } else if (absolute_enabled) {
+                                sdl_show_cursor();
                             }
+                        } else if (absolute_enabled) {
+                            sdl_hide_cursor();
                         }
-                        gui_keysym = 1;
                         break;
                     default:
                         break;