|
|
378732a |
diff -ur allegro-4.2.0.orig/include/allegro/platform/aintunix.h allegro-4.2.0/include/allegro/platform/aintunix.h
|
|
|
378732a |
--- allegro-4.2.0.orig/include/allegro/platform/aintunix.h 2005-09-04 18:00:07.000000000 +0200
|
|
|
378732a |
+++ allegro-4.2.0/include/allegro/platform/aintunix.h 2006-03-02 14:50:17.000000000 +0100
|
|
|
378732a |
@@ -88,7 +88,11 @@
|
|
|
378732a |
|
|
|
378732a |
AL_FUNC(void, _xwin_handle_input, (void));
|
|
|
378732a |
AL_FUNC(void, _xwin_private_handle_input, (void));
|
|
|
378732a |
-
|
|
|
378732a |
+ AL_FUNC(int , _xwin_keyboard_init, (void));
|
|
|
378732a |
+ AL_FUNC(void, _xwin_keyboard_exit, (void));
|
|
|
378732a |
+
|
|
|
378732a |
+ AL_VAR(int, _xwin_keyboard_installed);
|
|
|
378732a |
+
|
|
|
378732a |
#ifndef ALLEGRO_MULTITHREADED
|
|
|
378732a |
|
|
|
378732a |
AL_VAR(int, _xwin_missed_input);
|
|
|
378732a |
Only in allegro-4.2.0/include/allegro/platform: aintunix.h~
|
|
|
378732a |
diff -ur allegro-4.2.0.orig/include/xalleg.h allegro-4.2.0/include/xalleg.h
|
|
|
378732a |
--- allegro-4.2.0.orig/include/xalleg.h 2004-12-02 02:02:31.000000000 +0100
|
|
|
378732a |
+++ allegro-4.2.0/include/xalleg.h 2006-03-02 14:42:58.000000000 +0100
|
|
|
378732a |
@@ -126,6 +126,7 @@
|
|
|
378732a |
int num_modes;
|
|
|
378732a |
int mode_switched;
|
|
|
378732a |
int override_redirected;
|
|
|
378732a |
+ int window_used;
|
|
|
378732a |
#endif
|
|
|
378732a |
|
|
|
378732a |
char window_title[1024];
|
|
|
378732a |
Only in allegro-4.2.0/include: xalleg.h~
|
|
|
378732a |
diff -ur allegro-4.2.0.orig/src/x/xkeyboard.c allegro-4.2.0/src/x/xkeyboard.c
|
|
|
378732a |
--- allegro-4.2.0.orig/src/x/xkeyboard.c 2005-11-05 17:06:53.000000000 +0100
|
|
|
378732a |
+++ allegro-4.2.0/src/x/xkeyboard.c 2006-03-02 14:50:19.000000000 +0100
|
|
|
378732a |
@@ -34,12 +34,12 @@
|
|
|
378732a |
#define PREFIX_W "al-xkey WARNING: "
|
|
|
378732a |
#define PREFIX_E "al-xkey ERROR: "
|
|
|
378732a |
|
|
|
378732a |
+int _xwin_keyboard_installed = 0;
|
|
|
378732a |
#ifdef ALLEGRO_USE_XIM
|
|
|
378732a |
static XIM xim = NULL;
|
|
|
378732a |
static XIC xic = NULL;
|
|
|
378732a |
#endif
|
|
|
378732a |
static XModifierKeymap *xmodmap = NULL;
|
|
|
378732a |
-static int xkeyboard_installed = 0;
|
|
|
378732a |
static int used[KEY_MAX];
|
|
|
378732a |
static int sym_per_key;
|
|
|
378732a |
static int min_keycode, max_keycode;
|
|
|
378732a |
@@ -365,7 +365,7 @@
|
|
|
378732a |
void _xwin_keyboard_handler(XKeyEvent *event, int dga2_hack)
|
|
|
378732a |
{
|
|
|
378732a |
int keycode;
|
|
|
378732a |
- if (!xkeyboard_installed)
|
|
|
378732a |
+ if (!_xwin_keyboard_installed)
|
|
|
378732a |
return;
|
|
|
378732a |
|
|
|
378732a |
if (_xwin_keyboard_callback)
|
|
|
378732a |
@@ -646,7 +646,7 @@
|
|
|
378732a |
{
|
|
|
378732a |
XKeyboardControl values;
|
|
|
378732a |
|
|
|
378732a |
- if (!xkeyboard_installed)
|
|
|
378732a |
+ if (!_xwin_keyboard_installed)
|
|
|
378732a |
return;
|
|
|
378732a |
|
|
|
378732a |
XLOCK();
|
|
|
378732a |
@@ -668,10 +668,10 @@
|
|
|
378732a |
|
|
|
378732a |
|
|
|
378732a |
|
|
|
378732a |
-/* x_keyboard_init
|
|
|
378732a |
+/* _xwin_keyboard_init
|
|
|
378732a |
* Initialise the X11 keyboard driver.
|
|
|
378732a |
*/
|
|
|
378732a |
-static int x_keyboard_init(void)
|
|
|
378732a |
+int _xwin_keyboard_init(void)
|
|
|
378732a |
{
|
|
|
378732a |
#ifdef ALLEGRO_USE_XIM
|
|
|
378732a |
XIMStyles *xim_styles;
|
|
|
378732a |
@@ -680,7 +680,7 @@
|
|
|
378732a |
int i;
|
|
|
378732a |
#endif
|
|
|
378732a |
|
|
|
378732a |
- if (xkeyboard_installed)
|
|
|
378732a |
+ if (_xwin_keyboard_installed)
|
|
|
378732a |
return 0;
|
|
|
378732a |
|
|
|
378732a |
main_pid = getpid();
|
|
|
378732a |
@@ -745,21 +745,21 @@
|
|
|
378732a |
|
|
|
378732a |
XUNLOCK ();
|
|
|
378732a |
|
|
|
378732a |
- xkeyboard_installed = 1;
|
|
|
378732a |
+ _xwin_keyboard_installed = 1;
|
|
|
378732a |
|
|
|
378732a |
return 0;
|
|
|
378732a |
}
|
|
|
378732a |
|
|
|
378732a |
|
|
|
378732a |
|
|
|
378732a |
-/* x_keyboard_exit
|
|
|
378732a |
+/* _xwin_keyboard_exit
|
|
|
378732a |
* Shut down the X11 keyboard driver.
|
|
|
378732a |
*/
|
|
|
378732a |
-static void x_keyboard_exit(void)
|
|
|
378732a |
+void _xwin_keyboard_exit(void)
|
|
|
378732a |
{
|
|
|
378732a |
- if (!xkeyboard_installed)
|
|
|
378732a |
+ if (!_xwin_keyboard_installed)
|
|
|
378732a |
return;
|
|
|
378732a |
- xkeyboard_installed = 0;
|
|
|
378732a |
+ _xwin_keyboard_installed = 0;
|
|
|
378732a |
|
|
|
378732a |
XLOCK ();
|
|
|
378732a |
|
|
|
378732a |
@@ -799,8 +799,8 @@
|
|
|
378732a |
"X11 keyboard",
|
|
|
378732a |
"X11 keyboard",
|
|
|
378732a |
FALSE,
|
|
|
378732a |
- x_keyboard_init,
|
|
|
378732a |
- x_keyboard_exit,
|
|
|
378732a |
+ _xwin_keyboard_init,
|
|
|
378732a |
+ _xwin_keyboard_exit,
|
|
|
378732a |
NULL, // AL_METHOD(void, poll, (void));
|
|
|
378732a |
x_set_leds,
|
|
|
378732a |
NULL, // AL_METHOD(void, set_rate, (int delay, int rate));
|
|
|
378732a |
Only in allegro-4.2.0/src/x: xkeyboard.c~
|
|
|
378732a |
diff -ur allegro-4.2.0.orig/src/x/xwin.c allegro-4.2.0/src/x/xwin.c
|
|
|
378732a |
--- allegro-4.2.0.orig/src/x/xwin.c 2005-10-27 23:23:40.000000000 +0200
|
|
|
378732a |
+++ allegro-4.2.0/src/x/xwin.c 2006-03-02 14:48:00.000000000 +0100
|
|
|
378732a |
@@ -130,6 +130,7 @@
|
|
|
378732a |
0, /* num_modes */
|
|
|
378732a |
0, /* mode_switched */
|
|
|
378732a |
0, /* override_redirected */
|
|
|
378732a |
+ 0, /* window_used */
|
|
|
378732a |
#endif
|
|
|
378732a |
|
|
|
378732a |
XWIN_DEFAULT_WINDOW_TITLE, /* window_title */
|
|
|
378732a |
@@ -322,20 +323,13 @@
|
|
|
378732a |
}
|
|
|
378732a |
}
|
|
|
378732a |
|
|
|
378732a |
-
|
|
|
378732a |
-
|
|
|
378732a |
-/* _xwin_hide_x_mouse:
|
|
|
378732a |
- * Create invisible X cursor
|
|
|
378732a |
+/* _xwin_free_cursor:
|
|
|
378732a |
+ * Helper for freeing the cursor which is done in a number of different places.
|
|
|
378732a |
*/
|
|
|
378732a |
-static void _xwin_hide_x_mouse(void)
|
|
|
378732a |
+static void _xwin_free_cursor(void)
|
|
|
378732a |
{
|
|
|
378732a |
- unsigned long gcmask;
|
|
|
378732a |
- XGCValues gcvalues;
|
|
|
378732a |
- Pixmap pixmap;
|
|
|
378732a |
-
|
|
|
378732a |
- XUndefineCursor(_xwin.display, _xwin.window);
|
|
|
378732a |
-
|
|
|
378732a |
if (_xwin.cursor != None) {
|
|
|
378732a |
+ XUndefineCursor(_xwin.display, _xwin.window);
|
|
|
378732a |
XFreeCursor(_xwin.display, _xwin.cursor);
|
|
|
378732a |
_xwin.cursor = None;
|
|
|
378732a |
}
|
|
|
378732a |
@@ -346,7 +340,19 @@
|
|
|
378732a |
_xwin.xcursor_image = None;
|
|
|
378732a |
}
|
|
|
378732a |
#endif
|
|
|
378732a |
+}
|
|
|
378732a |
|
|
|
378732a |
+/* _xwin_hide_x_mouse:
|
|
|
378732a |
+ * Create invisible X cursor
|
|
|
378732a |
+ */
|
|
|
378732a |
+static void _xwin_hide_x_mouse(void)
|
|
|
378732a |
+{
|
|
|
378732a |
+ unsigned long gcmask;
|
|
|
378732a |
+ XGCValues gcvalues;
|
|
|
378732a |
+ Pixmap pixmap;
|
|
|
378732a |
+
|
|
|
378732a |
+ _xwin_free_cursor();
|
|
|
378732a |
+
|
|
|
378732a |
pixmap = XCreatePixmap(_xwin.display, _xwin.window, 1, 1, 1);
|
|
|
378732a |
if (pixmap != None) {
|
|
|
378732a |
GC temp_gc;
|
|
|
378732a |
@@ -462,20 +468,7 @@
|
|
|
378732a |
static void _xwin_private_destroy_window(void)
|
|
|
378732a |
{
|
|
|
378732a |
_xwin_private_destroy_screen();
|
|
|
378732a |
-
|
|
|
378732a |
- if (_xwin.cursor != None) {
|
|
|
378732a |
- XUndefineCursor(_xwin.display, _xwin.window);
|
|
|
378732a |
- XFreeCursor(_xwin.display, _xwin.cursor);
|
|
|
378732a |
- _xwin.cursor = None;
|
|
|
378732a |
- }
|
|
|
378732a |
-
|
|
|
378732a |
-#ifdef ALLEGRO_XWINDOWS_WITH_XCURSOR
|
|
|
378732a |
- if (_xwin.xcursor_image != None) {
|
|
|
378732a |
- XcursorImageDestroy(_xwin.xcursor_image);
|
|
|
378732a |
- _xwin.xcursor_image = None;
|
|
|
378732a |
- }
|
|
|
378732a |
-#endif
|
|
|
378732a |
-
|
|
|
378732a |
+ _xwin_free_cursor();
|
|
|
378732a |
_xwin.visual = 0;
|
|
|
378732a |
|
|
|
378732a |
if (_xwin.gc != None) {
|
|
|
378732a |
@@ -673,10 +666,6 @@
|
|
|
378732a |
static BITMAP *_xwin_private_create_screen(GFX_DRIVER *drv, int w, int h,
|
|
|
378732a |
int vw, int vh, int depth, int fullscreen)
|
|
|
378732a |
{
|
|
|
378732a |
-#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
|
|
|
378732a |
- XSetWindowAttributes setattr;
|
|
|
378732a |
-#endif
|
|
|
378732a |
-
|
|
|
378732a |
if (_xwin.window == None) {
|
|
|
378732a |
ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("No window"));
|
|
|
378732a |
return 0;
|
|
|
378732a |
@@ -715,11 +704,50 @@
|
|
|
378732a |
#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
|
|
|
378732a |
/* If we are going fullscreen, disable window decorations. */
|
|
|
378732a |
if (fullscreen) {
|
|
|
378732a |
+ XSetWindowAttributes setattr;
|
|
|
378732a |
+
|
|
|
378732a |
+ /* HACK HACK HACK
|
|
|
378732a |
+ We need to destroy the window if it has already been used once,
|
|
|
378732a |
+ since doing fullscreen with a window wich has been mapped already
|
|
|
378732a |
+ has issues. see: http:// mail not archived yet */
|
|
|
378732a |
+ if (_xwin.window_used) {
|
|
|
378732a |
+ /* remember if the keyboard was installed */
|
|
|
378732a |
+ int keyb_installed = _xwin_keyboard_installed;
|
|
|
378732a |
+
|
|
|
378732a |
+ /* remember the cursor and set the cursor to None so that the
|
|
|
378732a |
+ remembered cursor does not get freed. */
|
|
|
378732a |
+ Cursor cursor = _xwin.cursor;
|
|
|
378732a |
+#ifdef ALLEGRO_XWINDOWS_WITH_XCURSOR
|
|
|
378732a |
+ XcursorImage *xcursor_image = _xwin.xcursor_image;
|
|
|
378732a |
+ _xwin.xcursor_image = None;
|
|
|
378732a |
+#endif
|
|
|
378732a |
+ _xwin.cursor = None;
|
|
|
378732a |
+
|
|
|
378732a |
+ /* close keyboard & window, then recreate both */
|
|
|
378732a |
+ _xwin_keyboard_exit();
|
|
|
378732a |
+ _xwin_private_destroy_window();
|
|
|
378732a |
+ if ((*_xwin_window_creator)()) {
|
|
|
378732a |
+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Could not create window"));
|
|
|
378732a |
+ return 0;
|
|
|
378732a |
+ }
|
|
|
378732a |
+ if (keyb_installed)
|
|
|
378732a |
+ /* has a return value but can't fail */
|
|
|
378732a |
+ _xwin_keyboard_init();
|
|
|
378732a |
+
|
|
|
378732a |
+ /* Free the new cursor and put the old one back */
|
|
|
378732a |
+ _xwin_free_cursor();
|
|
|
378732a |
+ _xwin.cursor = cursor;
|
|
|
378732a |
+#ifdef ALLEGRO_XWINDOWS_WITH_XCURSOR
|
|
|
378732a |
+ _xwin.xcursor_image = xcursor_image;
|
|
|
378732a |
+#endif
|
|
|
378732a |
+ XDefineCursor(_xwin.display, _xwin.window, _xwin.cursor);
|
|
|
378732a |
+ }
|
|
|
378732a |
setattr.override_redirect = True;
|
|
|
378732a |
XChangeWindowAttributes(_xwin.display, _xwin.window,
|
|
|
378732a |
CWOverrideRedirect, &setattr);
|
|
|
378732a |
_xwin.override_redirected = 1;
|
|
|
378732a |
}
|
|
|
378732a |
+ _xwin.window_used = 1;
|
|
|
378732a |
#endif
|
|
|
378732a |
|
|
|
378732a |
/* Set window size and save dimensions. */
|
|
|
378732a |
Only in allegro-4.2.0/src/x: xwin.c~
|