SOURCES: qemu-nosdlgui.patch - updated to 0.7.1
charles
charles at pld-linux.org
Tue Aug 23 03:36:45 CEST 2005
Author: charles Date: Tue Aug 23 01:36:45 2005 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- updated to 0.7.1
---- Files affected:
SOURCES:
qemu-nosdlgui.patch (1.1 -> 1.2)
---- Diffs:
================================================================
Index: SOURCES/qemu-nosdlgui.patch
diff -u SOURCES/qemu-nosdlgui.patch:1.1 SOURCES/qemu-nosdlgui.patch:1.2
--- SOURCES/qemu-nosdlgui.patch:1.1 Thu Jul 7 02:37:20 2005
+++ SOURCES/qemu-nosdlgui.patch Tue Aug 23 03:36:40 2005
@@ -10,10 +10,9 @@
cocoa.o: cocoa.m
$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
-diff -Nur qemu-0.7.0.orig/sdl.c qemu-0.7.0.chng/sdl.c
---- qemu-0.7.0.orig/sdl.c 2005-04-27 20:52:05.000000000 +0000
-+++ qemu-0.7.0.chng/sdl.c 2005-07-06 22:28:55.000000000 +0000
-@@ -1,507 +1,614 @@
+--- qemu-0.7.1/sdl.c.orig 2005-07-24 20:52:08.000000000 +0200
++++ qemu-0.7.1/sdl.c 2005-08-23 01:47:48.000000000 +0200
+@@ -1,506 +1,614 @@
/*
- * QEMU SDL display driver
- *
@@ -25,11 +24,11 @@
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
-+ * Xlib interface for QEMU System Emulator
- *
+- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
-- *
++ * Xlib interface for QEMU System Emulator
+ *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
@@ -39,16 +38,18 @@
- * THE SOFTWARE.
- */
-#include "vl.h"
--
--#include <SDL.h>
+ * Copyright (c) 2004 Vladimit Oleynik <dzo at simtreas.ru>
+ * Used ideas from Bochs, SDL, PCEmu.
+*/
-+
+
+-#include <SDL.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/keysym.h>
-+
+
+-#ifndef _WIN32
+-#include <signal.h>
+-#endif
+/* hack, special for qemu */
+#define X_display_init sdl_display_init
+
@@ -88,10 +89,7 @@
+ 0x24, 0x15, 0x49, 0x49, 0x09,
+ 0xc8, 0x36, 0x32, 0x49, 0x0e,
+};
-
--#ifndef _WIN32
--#include <signal.h>
--#endif
++
+#include "vl.h"
-static SDL_Surface *screen;
@@ -104,27 +102,8 @@
-static int gui_fullscreen_initial_grab;
-static int gui_grab_code = KMOD_LALT | KMOD_LCTRL;
-static uint8_t modifiers_state[256];
--
--static void sdl_update(DisplayState *ds, int x, int y, int w, int h)
--{
-- // printf("updating x=%d y=%d w=%d h=%d\n", x, y, w, h);
-- SDL_UpdateRect(screen, x, y, w, h);
--}
--
--static void sdl_resize(DisplayState *ds, int w, int h)
--{
-- int flags;
--
-- // printf("resizing to %d %d\n", w, h);
-- flags = SDL_HWSURFACE|SDL_ASYNCBLIT|SDL_HWACCEL;
-- flags |= SDL_RESIZABLE;
-- if (gui_fullscreen)
-- flags |= SDL_FULLSCREEN;
-- screen = SDL_SetVideoMode(w, h, 0, flags);
-- if (!screen) {
-- fprintf(stderr, "Could not open SDL display\n");
-- exit(1);
+-static void sdl_update(DisplayState *ds, int x, int y, int w, int h)
+static Display *qx_display;
+static int q_x_screen_num;
+static Window win;
@@ -135,25 +114,37 @@
+static int width, height;
+
+static void x_update(DisplayState *ds, int x, int y, int w, int h)
-+{
+ {
+- // printf("updating x=%d y=%d w=%d h=%d\n", x, y, w, h);
+- SDL_UpdateRect(screen, x, y, w, h);
+ XPutImage(qx_display, win, gc, ximage, x, y, x, y, w, h);
+ XFlush(qx_display);
-+}
-+
+ }
+
+-static void sdl_resize(DisplayState *ds, int w, int h)
+static int prev_x, prev_y;
+static int current_x, current_y;
+
+/* Move the cursor to a center window place */
+static void qXWarpPointer(void)
-+{
+ {
+- int flags;
+ int x = width/2;
+ int y = height/2;
-+
+
+- // printf("resizing to %d %d\n", w, h);
+ prev_x = current_x = x;
+ prev_y = current_y = y;
+ XWarpPointer(qx_display, None, win, 0, 0, 0, 0, x, y);
+}
-+
+
+- flags = SDL_HWSURFACE|SDL_ASYNCBLIT|SDL_HWACCEL;
+- if (gui_fullscreen)
+- flags |= SDL_FULLSCREEN;
+- screen = SDL_SetVideoMode(w, h, 0, flags);
+- if (!screen) {
+- fprintf(stderr, "Could not open SDL display\n");
+- exit(1);
+static void x_resize(DisplayState *ds, int w, int h)
+{
+ XSizeHints hints;
@@ -164,7 +155,12 @@
+ hints.max_width = hints.min_width = w;
+ hints.max_height = hints.min_height = h;
+ XSetWMNormalHints(qx_display, win, &hints);
-+ }
+ }
+- ds->data = screen->pixels;
+- ds->linesize = screen->pitch;
+- ds->depth = screen->format->BitsPerPixel;
+- ds->width = w;
+- ds->height = h;
+ if(ximage) {
+ XDestroyImage(ximage);
+// free(ds->data);
@@ -194,15 +190,19 @@
+ ximage->data = ds->data;
+ qXWarpPointer();
+ XFlush(qx_display);
-+}
-+
+ }
+
+-/* generic keyboard conversion */
+static int gui_grab;
-+
+
+-#include "sdl_keysym.h"
+-#include "keymaps.c"
+static void x_SetCaption(void)
+{
+ char *title, *icon;
+ XTextProperty titleprop, iconprop;
-+
+
+-static kbd_layout_t *kbd_layout = NULL;
+ title = icon = "QEMU";
+ if (!vm_running && !gui_grab)
+ title = "QEMU [Stopped]";
@@ -210,7 +210,15 @@
+ title = "QEMU - Press Ctrl-Shift to exit grab";
+ if (!vm_running && gui_grab)
+ title = "QEMU [Stopped] - Press Ctrl-Shift to exit grab";
-+
+
+-static uint8_t sdl_keyevent_to_keycode_generic(const SDL_KeyboardEvent *ev)
+-{
+- int keysym;
+- /* workaround for X11+SDL bug with AltGR */
+- keysym = ev->keysym.sym;
+- if (keysym == 0 && ev->keysym.scancode == 113)
+- keysym = SDLK_MODE;
+- return keysym2scancode(kbd_layout, keysym);
+ XStringListToTextProperty(&title, 1, &titleprop);
+ XSetWMName(qx_display, win, &titleprop);
+ XFree(titleprop.value);
@@ -219,8 +227,9 @@
+ XSetWMIconName(qx_display, win, &iconprop);
+ XFree(iconprop.value);
+ XSync(qx_display, /* no discard */ 0);
-+}
-+
+ }
+
+-/* specific keyboard conversions from scan codes */
+static void trigger_mouse_grab(void)
+{
+ gui_grab ^= 1;
@@ -228,126 +237,26 @@
+ /* disable cursor */
+ static Cursor cursor;
+ static int cursor_created;
-+
+
+-#if defined(_WIN32)
+#define shape_width 16
+#define shape_height 16
+#define mask_width 16
+#define mask_height 16
-+
+
+-static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)
+-{
+- return ev->keysym.scancode;
+-}
+ static unsigned int shape_bits[(16*16)/32];
+ static unsigned int mask_bits[(16*16)/32];
-+
+
+-#else
+ if (!cursor_created) {
+ Pixmap shape, mask;
+ XColor white, black;
+ Colormap default_cmap;
-+
-+ default_cmap = DefaultColormap(qx_display, q_x_screen_num);
-+
-+ shape = XCreatePixmapFromBitmapData(qx_display,
-+ RootWindow(qx_display,q_x_screen_num),
-+ (char*)shape_bits,
-+ shape_width, shape_height,
-+ 1, 0, 1);
-+ mask = XCreatePixmapFromBitmapData(qx_display,
-+ RootWindow(qx_display,q_x_screen_num),
-+ (char*)mask_bits,
-+ mask_width, mask_height,
-+ 1, 0, 1);
-+ XParseColor(qx_display, default_cmap, "black", &black);
-+ XParseColor(qx_display, default_cmap, "white", &white);
-+ cursor = XCreatePixmapCursor(qx_display, shape, mask,
-+ &white, &black, 1, 1);
-+ cursor_created = 1;
-+ }
-+ XDefineCursor(qx_display, win, cursor);
-+
-+ /* grab pointer and keyboard */
-+
-+// if ( flags & FULLSCREEN ) {
-+// /* Unbind the mouse from the fullscreen window */
-+// XUngrabPointer(qx_display, CurrentTime);
-+// }
-+ /* Try to grab the mouse */
-+ while ( 1 ) {
-+ int result = XGrabPointer(qx_display, win, True, 0,
-+ GrabModeAsync, GrabModeAsync,
-+ win, None, CurrentTime);
-+ if (result == GrabSuccess)
-+ break;
-+ }
-+ /* Now grab the keyboard */
-+ XGrabKeyboard(qx_display, win, True,
-+ GrabModeAsync, GrabModeAsync, CurrentTime);
-+
-+ /* Raise the window if we grab the mouse */
-+// if ( !(flags & FULLSCREEN) )
-+ XRaiseWindow(qx_display, win);
-+ qXWarpPointer();
-+ } else {
-+ /* enable cursor */
-+ XUndefineCursor(qx_display, win);
-+ /* ungrab pointer and keyboard */
-+ XUngrabPointer(qx_display, CurrentTime);
-+ XUngrabKeyboard(qx_display, CurrentTime);
-+ }
-+ x_SetCaption();
-+}
-+
-+static unsigned mouse_button_state;
-+
-+static void send_keyboard_mouse_status(void)
-+{
-+ int dx, dy;
-+
-+ dx = current_x - prev_x;
-+ dy = -(current_y - prev_y);
-+ kbd_mouse_event(dx, -dy, 0, mouse_button_state);
-+ if(current_x <= 1 || current_x >= (width-1) || current_y <= 1 || current_y >= (height-1)) {
-+ qXWarpPointer();
-+ } else {
-+ prev_x = current_x;
-+ prev_y = current_y;
- }
-- ds->data = screen->pixels;
-- ds->linesize = screen->pitch;
-- ds->depth = screen->format->BitsPerPixel;
-- ds->width = w;
-- ds->height = h;
- }
--/* generic keyboard conversion */
--
--#include "sdl_keysym.h"
--#include "keymaps.c"
--
--static kbd_layout_t *kbd_layout = NULL;
--
--static uint8_t sdl_keyevent_to_keycode_generic(const SDL_KeyboardEvent *ev)
-+static const unsigned char scan_table1[] =
- {
-- int keysym;
-- /* workaround for X11+SDL bug with AltGR */
-- keysym = ev->keysym.sym;
-- if (keysym == 0 && ev->keysym.scancode == 113)
-- keysym = SDLK_MODE;
-- return keysym2scancode(kbd_layout, keysym);
--}
--
--/* specific keyboard conversions from scan codes */
--
--#if defined(_WIN32)
--
--static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)
--{
-- return ev->keysym.scancode;
--}
--
-+ 0x39, 0x02,
-+#ifdef KBUK /* double quotes, hash symbol */
-+ 0x03, 0x2b,
- #else
--
-static const uint8_t x_keycode_to_pc_keycode[61] = {
- 0xc7, /* 97 Home */
- 0xc8, /* 98 Up */
@@ -411,13 +320,32 @@
- 0x52, /* 156 KP_Ins */
- 0x53, /* 157 KP_Del */
-};
--
++ default_cmap = DefaultColormap(qx_display, q_x_screen_num);
+
-static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)
-{
- int keycode;
--
++ shape = XCreatePixmapFromBitmapData(qx_display,
++ RootWindow(qx_display,q_x_screen_num),
++ (char*)shape_bits,
++ shape_width, shape_height,
++ 1, 0, 1);
++ mask = XCreatePixmapFromBitmapData(qx_display,
++ RootWindow(qx_display,q_x_screen_num),
++ (char*)mask_bits,
++ mask_width, mask_height,
++ 1, 0, 1);
++ XParseColor(qx_display, default_cmap, "black", &black);
++ XParseColor(qx_display, default_cmap, "white", &white);
++ cursor = XCreatePixmapCursor(qx_display, shape, mask,
++ &white, &black, 1, 1);
++ cursor_created = 1;
++ }
++ XDefineCursor(qx_display, win, cursor);
+
- keycode = ev->keysym.scancode;
--
++ /* grab pointer and keyboard */
+
- if (keycode < 9) {
- keycode = 0;
- } else if (keycode < 97) {
@@ -429,8 +357,71 @@
- keycode = 0;
- }
- return keycode;
--}
--
++// if ( flags & FULLSCREEN ) {
++// /* Unbind the mouse from the fullscreen window */
++// XUngrabPointer(qx_display, CurrentTime);
++// }
++ /* Try to grab the mouse */
++ while ( 1 ) {
++ int result = XGrabPointer(qx_display, win, True, 0,
++ GrabModeAsync, GrabModeAsync,
++ win, None, CurrentTime);
++ if (result == GrabSuccess)
++ break;
++ }
++ /* Now grab the keyboard */
++ XGrabKeyboard(qx_display, win, True,
++ GrabModeAsync, GrabModeAsync, CurrentTime);
++
++ /* Raise the window if we grab the mouse */
++// if ( !(flags & FULLSCREEN) )
++ XRaiseWindow(qx_display, win);
++ qXWarpPointer();
++ } else {
++ /* enable cursor */
++ XUndefineCursor(qx_display, win);
++ /* ungrab pointer and keyboard */
++ XUngrabPointer(qx_display, CurrentTime);
++ XUngrabKeyboard(qx_display, CurrentTime);
++ }
++ x_SetCaption();
+ }
+
+-#endif
++static unsigned mouse_button_state;
+
+-static void reset_keys(void)
++static void send_keyboard_mouse_status(void)
+ {
+- int i;
+- for(i = 0; i < 256; i++) {
+- if (modifiers_state[i]) {
+- if (i & 0x80)
+- kbd_put_keycode(0xe0);
+- kbd_put_keycode(i | 0x80);
+- modifiers_state[i] = 0;
+- }
++ int dx, dy;
++
++ dx = current_x - prev_x;
++ dy = -(current_y - prev_y);
++ kbd_mouse_event(dx, -dy, 0, mouse_button_state);
++ if(current_x <= 1 || current_x >= (width-1) || current_y <= 1 || current_y >= (height-1)) {
++ qXWarpPointer();
++ } else {
++ prev_x = current_x;
++ prev_y = current_y;
+ }
+ }
+
+-static void sdl_process_key(SDL_KeyboardEvent *ev)
++static const unsigned char scan_table1[] =
+ {
+- int keycode, v;
++ 0x39, 0x02,
++#ifdef KBUK /* double quotes, hash symbol */
++ 0x03, 0x2b,
++#else
+ 0x28, 0x04,
+#endif
+ 0x05, 0x06, 0x08, 0x28,
@@ -460,25 +451,8 @@
+ 0x56,
+#else
+ 0x2b,
- #endif
++#endif
--static void reset_keys(void)
--{
-- int i;
-- for(i = 0; i < 256; i++) {
-- if (modifiers_state[i]) {
-- if (i & 0x80)
-- kbd_put_keycode(0xe0);
-- kbd_put_keycode(i | 0x80);
-- modifiers_state[i] = 0;
-- }
-- }
--}
--
--static void sdl_process_key(SDL_KeyboardEvent *ev)
--{
-- int keycode, v;
--
- if (ev->keysym.sym == SDLK_PAUSE) {
- /* specific case */
- v = 0;
@@ -489,13 +463,20 @@
- kbd_put_keycode(0x45 | v);
- return;
- }
--
++ 0x1b,
+
- if (kbd_layout) {
- keycode = sdl_keyevent_to_keycode_generic(ev);
- } else {
- keycode = sdl_keyevent_to_keycode(ev);
- }
--
++#ifdef KBUK /* tilde */
++ 0x2b,
++#else
++ 0x29,
++#endif
++};
+
- switch(keycode) {
- case 0x00:
- /* sent when leaving window: reset the modifiers state */
@@ -519,7 +500,7 @@
- kbd_put_keycode(keycode | 0x80);
- return;
- }
--
+
- /* now send the key code */
- if (keycode & 0x80)
- kbd_put_keycode(0xe0);
@@ -528,7 +509,16 @@
- else
- kbd_put_keycode(keycode & 0x7f);
-}
--
++static const struct {
++ KeySym key;
++ unsigned scan_code;
++} scan_table2[] = {
++ { XK_BackSpace, 0x0e },
++ { XK_Tab, 0x0f },
++ { XK_Return, 0x1c },
++ { XK_Escape, 0x01 },
++ { XK_Delete, 0x53e0 },
+
-static void sdl_update_caption(void)
-{
- char buf[1024];
@@ -541,7 +531,17 @@
- }
- SDL_WM_SetCaption(buf, "QEMU");
-}
--
++ { XK_Home, 0x47e0 },
++ { XK_Left, 0x4be0 },
++ { XK_Up, 0x48e0 },
++ { XK_Right, 0x4de0 },
++ { XK_Down, 0x50e0 },
++ { XK_Prior, 0x49e0 },
++ { XK_Next, 0x51e0 },
++ { XK_End, 0x4fe0 },
++ { XK_Insert, 0x52e0 },
++ { XK_Num_Lock, 0x45 },
+
-static void sdl_grab_start(void)
-{
- SDL_ShowCursor(0);
@@ -551,7 +551,8 @@
- gui_grab = 1;
- sdl_update_caption();
-}
--
++/* This block of codes is for Sun Type 4 keyboards... */
+
-static void sdl_grab_end(void)
-{
- SDL_WM_GrabInput(SDL_GRAB_OFF);
@@ -559,7 +560,11 @@
- gui_grab = 0;
- sdl_update_caption();
-}
--
++ { XK_F27, 0x47e0 }, /* Home/R7/F27 */
++ { XK_F29, 0x49e0 }, /* Prior/R9/F29 */
++ { XK_F35, 0x51e0 }, /* Next/R15/F35 */
++ { XK_F33, 0x4fe0 }, /* End/R13/F33 */
+
-static void sdl_send_mouse_event(int dz)
-{
- int dx, dy, state, buttons;
@@ -573,7 +578,9 @@
- buttons |= MOUSE_EVENT_MBUTTON;
- kbd_mouse_event(dx, dy, dz, buttons);
-}
--
++ { XK_F25, 0x36e0 }, /* Keypad divide/R5/F25 */
++ { XK_F26, 0x37 }, /* Keypad multiply/R6/F26 */
+
-static void toggle_full_screen(DisplayState *ds)
-{
- gui_fullscreen = !gui_fullscreen;
@@ -588,10 +595,64 @@
- vga_invalidate_display();
- vga_update_display();
-}
-+ 0x1b,
++ { XK_F23, 0x46 }, /* Scroll lock/R3/F23 */
-static void sdl_refresh(DisplayState *ds)
--{
++ { XK_F31, 0x4c }, /* Keypad 5/R11/F31 */
++
++/* End of Sun type 4 codes */
<<Diff was trimmed, longer than 597 lines>>
---- CVS-web:
http://cvs.pld-linux.org/SOURCES/qemu-nosdlgui.patch?r1=1.1&r2=1.2&f=u
More information about the pld-cvs-commit
mailing list