rpms/allegro/devel allegro-4.2.0-fullscreen.patch, NONE, 1.1 allegro-4.2.0-fullscreen2.patch, NONE, 1.1 allegro-4.2.0-mprotect.patch, NONE, 1.1 allegro.spec, 1.25, 1.26
Hans de Goede (jwrdegoede)
fedora-extras-commits at redhat.com
Wed Mar 8 22:12:12 UTC 2006
- Previous message (by thread): rpms/bash-completion/FC-4 .cvsignore, 1.9, 1.10 bash-completion.spec, 1.12, 1.13 sources, 1.9, 1.10 bash-completion-20050721-bash31quoting.patch, 1.1, NONE bash-completion-20050721-cvs-stat.patch, 1.1, NONE bash-completion-20050721-mtr.patch, 1.1, NONE bash-completion.profile, 1.3, NONE
- Next message (by thread): rpms/allegro/devel allegro.spec,1.26,1.27
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: jwrdegoede
Update of /cvs/extras/rpms/allegro/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv28540
Modified Files:
allegro.spec
Added Files:
allegro-4.2.0-fullscreen.patch allegro-4.2.0-fullscreen2.patch
allegro-4.2.0-mprotect.patch
Log Message:
* Wed Mar 8 2006 Hans de Goede <j.w.r.degoede at hhs.nl> 4.2.0-9
- fix fullscreen <-> window switching bug (bz 183645)
- fix asm stretch code on i386 with NX processors, thanks to openBSD.
allegro-4.2.0-fullscreen.patch:
--- NEW FILE allegro-4.2.0-fullscreen.patch ---
diff -ur allegro-4.2.0.orig/include/allegro/platform/aintunix.h allegro-4.2.0/include/allegro/platform/aintunix.h
--- allegro-4.2.0.orig/include/allegro/platform/aintunix.h 2005-09-04 18:00:07.000000000 +0200
+++ allegro-4.2.0/include/allegro/platform/aintunix.h 2006-03-02 14:50:17.000000000 +0100
@@ -88,7 +88,11 @@
AL_FUNC(void, _xwin_handle_input, (void));
AL_FUNC(void, _xwin_private_handle_input, (void));
-
+ AL_FUNC(int , _xwin_keyboard_init, (void));
+ AL_FUNC(void, _xwin_keyboard_exit, (void));
+
+ AL_VAR(int, _xwin_keyboard_installed);
+
#ifndef ALLEGRO_MULTITHREADED
AL_VAR(int, _xwin_missed_input);
Only in allegro-4.2.0/include/allegro/platform: aintunix.h~
diff -ur allegro-4.2.0.orig/include/xalleg.h allegro-4.2.0/include/xalleg.h
--- allegro-4.2.0.orig/include/xalleg.h 2004-12-02 02:02:31.000000000 +0100
+++ allegro-4.2.0/include/xalleg.h 2006-03-02 14:42:58.000000000 +0100
@@ -126,6 +126,7 @@
int num_modes;
int mode_switched;
int override_redirected;
+ int window_used;
#endif
char window_title[1024];
Only in allegro-4.2.0/include: xalleg.h~
diff -ur allegro-4.2.0.orig/src/x/xkeyboard.c allegro-4.2.0/src/x/xkeyboard.c
--- allegro-4.2.0.orig/src/x/xkeyboard.c 2005-11-05 17:06:53.000000000 +0100
+++ allegro-4.2.0/src/x/xkeyboard.c 2006-03-02 14:50:19.000000000 +0100
@@ -34,12 +34,12 @@
#define PREFIX_W "al-xkey WARNING: "
#define PREFIX_E "al-xkey ERROR: "
+int _xwin_keyboard_installed = 0;
#ifdef ALLEGRO_USE_XIM
static XIM xim = NULL;
static XIC xic = NULL;
#endif
static XModifierKeymap *xmodmap = NULL;
-static int xkeyboard_installed = 0;
static int used[KEY_MAX];
static int sym_per_key;
static int min_keycode, max_keycode;
@@ -365,7 +365,7 @@
void _xwin_keyboard_handler(XKeyEvent *event, int dga2_hack)
{
int keycode;
- if (!xkeyboard_installed)
+ if (!_xwin_keyboard_installed)
return;
if (_xwin_keyboard_callback)
@@ -646,7 +646,7 @@
{
XKeyboardControl values;
- if (!xkeyboard_installed)
+ if (!_xwin_keyboard_installed)
return;
XLOCK();
@@ -668,10 +668,10 @@
-/* x_keyboard_init
+/* _xwin_keyboard_init
* Initialise the X11 keyboard driver.
*/
-static int x_keyboard_init(void)
+int _xwin_keyboard_init(void)
{
#ifdef ALLEGRO_USE_XIM
XIMStyles *xim_styles;
@@ -680,7 +680,7 @@
int i;
#endif
- if (xkeyboard_installed)
+ if (_xwin_keyboard_installed)
return 0;
main_pid = getpid();
@@ -745,21 +745,21 @@
XUNLOCK ();
- xkeyboard_installed = 1;
+ _xwin_keyboard_installed = 1;
return 0;
}
-/* x_keyboard_exit
+/* _xwin_keyboard_exit
* Shut down the X11 keyboard driver.
*/
-static void x_keyboard_exit(void)
+void _xwin_keyboard_exit(void)
{
- if (!xkeyboard_installed)
+ if (!_xwin_keyboard_installed)
return;
- xkeyboard_installed = 0;
+ _xwin_keyboard_installed = 0;
XLOCK ();
@@ -799,8 +799,8 @@
"X11 keyboard",
"X11 keyboard",
FALSE,
- x_keyboard_init,
- x_keyboard_exit,
+ _xwin_keyboard_init,
+ _xwin_keyboard_exit,
NULL, // AL_METHOD(void, poll, (void));
x_set_leds,
NULL, // AL_METHOD(void, set_rate, (int delay, int rate));
Only in allegro-4.2.0/src/x: xkeyboard.c~
diff -ur allegro-4.2.0.orig/src/x/xwin.c allegro-4.2.0/src/x/xwin.c
--- allegro-4.2.0.orig/src/x/xwin.c 2005-10-27 23:23:40.000000000 +0200
+++ allegro-4.2.0/src/x/xwin.c 2006-03-02 14:48:00.000000000 +0100
@@ -130,6 +130,7 @@
0, /* num_modes */
0, /* mode_switched */
0, /* override_redirected */
+ 0, /* window_used */
#endif
XWIN_DEFAULT_WINDOW_TITLE, /* window_title */
@@ -322,20 +323,13 @@
}
}
-
-
-/* _xwin_hide_x_mouse:
- * Create invisible X cursor
+/* _xwin_free_cursor:
+ * Helper for freeing the cursor which is done in a number of different places.
*/
-static void _xwin_hide_x_mouse(void)
+static void _xwin_free_cursor(void)
{
- unsigned long gcmask;
- XGCValues gcvalues;
- Pixmap pixmap;
-
- XUndefineCursor(_xwin.display, _xwin.window);
-
if (_xwin.cursor != None) {
+ XUndefineCursor(_xwin.display, _xwin.window);
XFreeCursor(_xwin.display, _xwin.cursor);
_xwin.cursor = None;
}
@@ -346,7 +340,19 @@
_xwin.xcursor_image = None;
}
#endif
+}
+/* _xwin_hide_x_mouse:
+ * Create invisible X cursor
+ */
+static void _xwin_hide_x_mouse(void)
+{
+ unsigned long gcmask;
+ XGCValues gcvalues;
+ Pixmap pixmap;
+
+ _xwin_free_cursor();
+
pixmap = XCreatePixmap(_xwin.display, _xwin.window, 1, 1, 1);
if (pixmap != None) {
GC temp_gc;
@@ -462,20 +468,7 @@
static void _xwin_private_destroy_window(void)
{
_xwin_private_destroy_screen();
-
- if (_xwin.cursor != None) {
- XUndefineCursor(_xwin.display, _xwin.window);
- XFreeCursor(_xwin.display, _xwin.cursor);
- _xwin.cursor = None;
- }
-
-#ifdef ALLEGRO_XWINDOWS_WITH_XCURSOR
- if (_xwin.xcursor_image != None) {
- XcursorImageDestroy(_xwin.xcursor_image);
- _xwin.xcursor_image = None;
- }
-#endif
-
+ _xwin_free_cursor();
_xwin.visual = 0;
if (_xwin.gc != None) {
@@ -673,10 +666,6 @@
static BITMAP *_xwin_private_create_screen(GFX_DRIVER *drv, int w, int h,
int vw, int vh, int depth, int fullscreen)
{
-#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
- XSetWindowAttributes setattr;
-#endif
-
if (_xwin.window == None) {
ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("No window"));
return 0;
@@ -715,11 +704,50 @@
#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
/* If we are going fullscreen, disable window decorations. */
if (fullscreen) {
+ XSetWindowAttributes setattr;
+
+ /* HACK HACK HACK
+ We need to destroy the window if it has already been used once,
+ since doing fullscreen with a window wich has been mapped already
+ has issues. see: http:// mail not archived yet */
+ if (_xwin.window_used) {
+ /* remember if the keyboard was installed */
+ int keyb_installed = _xwin_keyboard_installed;
+
+ /* remember the cursor and set the cursor to None so that the
+ remembered cursor does not get freed. */
+ Cursor cursor = _xwin.cursor;
+#ifdef ALLEGRO_XWINDOWS_WITH_XCURSOR
+ XcursorImage *xcursor_image = _xwin.xcursor_image;
+ _xwin.xcursor_image = None;
+#endif
+ _xwin.cursor = None;
+
+ /* close keyboard & window, then recreate both */
+ _xwin_keyboard_exit();
+ _xwin_private_destroy_window();
+ if ((*_xwin_window_creator)()) {
+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Could not create window"));
+ return 0;
+ }
+ if (keyb_installed)
+ /* has a return value but can't fail */
+ _xwin_keyboard_init();
+
+ /* Free the new cursor and put the old one back */
+ _xwin_free_cursor();
+ _xwin.cursor = cursor;
+#ifdef ALLEGRO_XWINDOWS_WITH_XCURSOR
+ _xwin.xcursor_image = xcursor_image;
+#endif
+ XDefineCursor(_xwin.display, _xwin.window, _xwin.cursor);
+ }
setattr.override_redirect = True;
XChangeWindowAttributes(_xwin.display, _xwin.window,
CWOverrideRedirect, &setattr);
_xwin.override_redirected = 1;
}
+ _xwin.window_used = 1;
#endif
/* Set window size and save dimensions. */
Only in allegro-4.2.0/src/x: xwin.c~
allegro-4.2.0-fullscreen2.patch:
--- NEW FILE allegro-4.2.0-fullscreen2.patch ---
--- allegro-4.2.0/include/xalleg.h.fullscreen 2004-12-02 02:02:31.000000000 +0100
+++ allegro-4.2.0/include/xalleg.h 2006-03-03 23:10:18.000000000 +0100
@@ -124,8 +124,8 @@
#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
XF86VidModeModeInfo **modesinfo;
int num_modes;
- int mode_switched;
- int override_redirected;
+ int mode_switched; /* only kept around and set for ABI compat */
+ int override_redirected; /* no longer used, kept for ABI compat */
#endif
char window_title[1024];
@@ -139,6 +139,18 @@
#endif
void (*close_button_callback)(void);
+
+ /* These are at the end of the struct to maintain abi compat with
+ allegro-4.2.0 (if and only if compiled with the same configuration).
+ Notice that IMHO apps really shouldnot be using _xwin, but we export it,
+ so its fair game. */
+#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
+ XF86VidModeModeInfo *orig_modeinfo;
+#endif
+ /* Seperate fullscreen and managed window id's, see
+ _xwin_private_create_window in src/x/xwin.c for more details. */
+ Window fs_window;
+ Window wm_window;
} _xwin;
--- allegro-4.2.0/src/x/xwin.c.fullscreen 2005-10-27 23:23:40.000000000 +0200
+++ allegro-4.2.0/src/x/xwin.c 2006-03-03 23:52:22.000000000 +0100
@@ -142,7 +142,12 @@
NULL, /* mutex */
#endif
- NULL /* window close hook */
+ NULL, /* window close hook */
+#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
+ 0, /* orig_modeinfo */
+#endif
+ None, /* fs_window */
+ None /* wm_window */
};
void *allegro_icon = alex_xpm;
@@ -199,7 +204,6 @@
static void _xwin_private_set_palette_range(AL_CONST PALETTE p, int from, int to);
static void _xwin_private_set_window_defaults(void);
static void _xwin_private_flush_buffers(void);
-static void _xwin_private_resize_window(int w, int h);
static void _xwin_private_process_event(XEvent *event);
static void _xwin_private_set_warped_mouse_mode(int permanent);
static void _xwin_private_redraw_window(int x, int y, int w, int h);
@@ -261,7 +265,8 @@
static void _xwin_private_slow_palette_32(int sx, int sy, int sw, int sh);
#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
-static int _xvidmode_private_set_fullscreen(int w, int h);
+static void _xvidmode_private_set_fullscreen(int w, int h, int *vidmode_width,
+ int *vidmode_height);
static void _xvidmode_private_unset_fullscreen(void);
#endif
@@ -372,10 +377,31 @@
}
}
-
+/* _xwin_wait_mapped:
+ * wait for a window to become mapped. (shamelessly borrowed from SDL)
+ */
+static void _xwin_wait_mapped(Window win)
+{
+ XEvent event;
+ do {
+ XMaskEvent(_xwin.display, StructureNotifyMask, &event);
+ } while ( (event.type != MapNotify) || (event.xmap.event != win) );
+}
/* _xwin_create_window:
- * Wrapper for XCreateWindow.
+ * We use 3 windows:
+ * -fs_window (for fullscreen)
+ * -wm_window (window managed)
+ * -window (the real window)
+ * 2 of which will be created here: wm_window and window. The fullscreen
+ * window gets (re)created when needed, because reusing it causes trouble see:
+ * http://sourceforge.net/tracker/index.php?func=detail&aid=1441740&group_id=5665&atid=105665
+ * The real window uses wm_window as parent initially and will be reparened to
+ * the (freshly created) fullscreen window when requested and reparented
+ * back again in screen_destroy.
+ *
+ * Idea / concept of 3 windows borrowed from SDL. But somehow SDL manages
+ * to reuse the fullscreen window too.
*/
static int _xwin_private_create_window(void)
{
@@ -389,21 +415,23 @@
_mouse_on = FALSE;
- /* Create window. */
+ /* Create the managed window. */
+ setattr.background_pixel = XBlackPixel(_xwin.display, _xwin.screen);
setattr.border_pixel = XBlackPixel(_xwin.display, _xwin.screen);
- setattr.event_mask = (KeyPressMask | KeyReleaseMask
+ setattr.event_mask = (KeyPressMask | KeyReleaseMask | StructureNotifyMask
| EnterWindowMask | LeaveWindowMask
| FocusChangeMask | ExposureMask | PropertyChangeMask
| ButtonPressMask | ButtonReleaseMask | PointerMotionMask
/*| MappingNotifyMask (SubstructureRedirectMask?)*/);
- _xwin.window = XCreateWindow(_xwin.display, XDefaultRootWindow(_xwin.display),
+ _xwin.wm_window = XCreateWindow(_xwin.display,
+ XDefaultRootWindow(_xwin.display),
0, 0, 320, 200, 0,
CopyFromParent, InputOutput, CopyFromParent,
- CWBorderPixel | CWEventMask, &setattr);
-
+ CWBackPixel | CWBorderPixel | CWEventMask,
+ &setattr);
/* Get associated visual and window depth (bits per pixel). */
- XGetWindowAttributes(_xwin.display, _xwin.window, &getattr);
+ XGetWindowAttributes(_xwin.display, _xwin.wm_window, &getattr);
_xwin.visual = getattr.visual;
_xwin.window_depth = getattr.depth;
@@ -411,15 +439,27 @@
if ((_xwin.visual->class == PseudoColor)
|| (_xwin.visual->class == GrayScale)
|| (_xwin.visual->class == DirectColor))
- _xwin.colormap = XCreateColormap(_xwin.display, _xwin.window, _xwin.visual, AllocAll);
+ _xwin.colormap = XCreateColormap(_xwin.display, _xwin.wm_window, _xwin.visual, AllocAll);
else
- _xwin.colormap = XCreateColormap(_xwin.display, _xwin.window, _xwin.visual, AllocNone);
- XSetWindowColormap(_xwin.display, _xwin.window, _xwin.colormap);
+ _xwin.colormap = XCreateColormap(_xwin.display, _xwin.wm_window, _xwin.visual, AllocNone);
+ XSetWindowColormap(_xwin.display, _xwin.wm_window, _xwin.colormap);
XInstallColormap(_xwin.display, _xwin.colormap);
+
+ /* Create the real / drawing window (reuses setattr). */
+ setattr.colormap = _xwin.colormap;
+ _xwin.window = XCreateWindow(_xwin.display,
+ _xwin.wm_window,
+ 0, 0, 320, 200, 0,
+ CopyFromParent, InputOutput, CopyFromParent,
+ CWBackPixel | CWBorderPixel | CWEventMask |
+ CWColormap, &setattr);
+ /* Map the real / drawing window it won't appear untill the parent does */
+ XMapWindow(_xwin.display, _xwin.window);
+
/* Set WM_DELETE_WINDOW atom in WM_PROTOCOLS property (to get window_delete requests). */
wm_delete_window = XInternAtom (_xwin.display, "WM_DELETE_WINDOW", False);
- XSetWMProtocols (_xwin.display, _xwin.window, &wm_delete_window, 1);
+ XSetWMProtocols (_xwin.display, _xwin.wm_window, &wm_delete_window, 1);
/* Set default window parameters. */
(*_xwin_window_defaultor)();
@@ -494,6 +534,11 @@
XDestroyWindow(_xwin.display, _xwin.window);
_xwin.window = None;
}
+
+ if (_xwin.wm_window != None) {
+ XDestroyWindow(_xwin.display, _xwin.wm_window);
+ _xwin.wm_window = None;
+ }
}
void _xwin_destroy_window(void)
@@ -673,10 +718,6 @@
static BITMAP *_xwin_private_create_screen(GFX_DRIVER *drv, int w, int h,
int vw, int vh, int depth, int fullscreen)
{
-#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
- XSetWindowAttributes setattr;
-#endif
-
if (_xwin.window == None) {
ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("No window"));
return 0;
@@ -711,55 +752,48 @@
ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Unsupported color depth"));
return 0;
}
-
-#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
- /* If we are going fullscreen, disable window decorations. */
- if (fullscreen) {
- setattr.override_redirect = True;
- XChangeWindowAttributes(_xwin.display, _xwin.window,
- CWOverrideRedirect, &setattr);
- _xwin.override_redirected = 1;
- }
-#endif
-
- /* Set window size and save dimensions. */
- _xwin_private_resize_window(w, h);
+
+ /* Save dimensions. */
+ _xwin.window_width = w;
+ _xwin.window_height = h;
_xwin.screen_width = w;
_xwin.screen_height = h;
_xwin.screen_depth = depth;
_xwin.virtual_width = vw;
_xwin.virtual_height = vh;
-#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
- if (fullscreen) {
- AL_CONST char *fc;
- char tmp1[64], tmp2[128];
- int i;
-
- /* Switch video mode. */
- if (!_xvidmode_private_set_fullscreen(w, h)) {
- ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Can not set video mode"));
- return 0;
- }
+ /* Resize the (real) window */
+ XResizeWindow(_xwin.display, _xwin.window, w, h);
- /* Hack: make the window fully visible and center cursor. */
- XMoveWindow(_xwin.display, _xwin.window, 0, 0);
- XF86VidModeSetViewPort(_xwin.display, _xwin.screen, 0, 0);
-
- /* This chunk is disabled by default because of problems on KDE desktops. */
- fc = get_config_string(uconvert_ascii("graphics", tmp1),
- uconvert_ascii("force_centering", tmp2),
- NULL);
-
- if ((fc) && ((i = ugetc(fc)) != 0) && ((i == 'y') || (i == 'Y') || (i == '1'))) {
- XWarpPointer(_xwin.display, None, _xwin.window, 0, 0, 0, 0, 0, 0);
- XWarpPointer(_xwin.display, None, _xwin.window, 0, 0, 0, 0, w - 1, 0);
- XWarpPointer(_xwin.display, None, _xwin.window, 0, 0, 0, 0, 0, h - 1);
- XWarpPointer(_xwin.display, None, _xwin.window, 0, 0, 0, 0, w - 1, h - 1);
- }
+ if (fullscreen) {
+ XSetWindowAttributes setattr;
+ /* local width and height vars used for fullscreen window size and for
+ storing the video_mode size which is then used to center the window */
+ int fs_width = DisplayWidth(_xwin.display, _xwin.screen);
+ int fs_height = DisplayHeight(_xwin.display, _xwin.screen);
- XWarpPointer(_xwin.display, None, _xwin.window, 0, 0, 0, 0, w / 2, h / 2);
- XSync(_xwin.display, False);
+ /* Create the fullscreen window */
+ setattr.override_redirect = True;
+ setattr.background_pixel = XBlackPixel(_xwin.display, _xwin.screen);
+ setattr.border_pixel = XBlackPixel(_xwin.display, _xwin.screen);
+ setattr.event_mask = StructureNotifyMask;
+ setattr.colormap = _xwin.colormap;
+ _xwin.fs_window = XCreateWindow(_xwin.display,
+ XDefaultRootWindow(_xwin.display),
+ 0, 0, fs_width, fs_height, 0,
+ CopyFromParent, InputOutput,
+ CopyFromParent, CWOverrideRedirect |
+ CWBackPixel | CWColormap | CWBorderPixel |
+ CWEventMask, &setattr);
+
+ /* Map the fullscreen window */
+ XMapRaised(_xwin.display, _xwin.fs_window);
+ _xwin_wait_mapped(_xwin.fs_window);
+ /* Make sure we got to the top of the window stack */
+ XRaiseWindow(_xwin.display, _xwin.fs_window);
+
+ /* Reparent the real window */
+ XReparentWindow(_xwin.display, _xwin.window, _xwin.fs_window, 0, 0);
/* Grab the keyboard and mouse. */
if (XGrabKeyboard(_xwin.display, XDefaultRootWindow(_xwin.display), False,
@@ -775,8 +809,45 @@
return 0;
}
_xwin.mouse_grabbed = 1;
- }
+
+#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
+ /* Try to switch video mode. This must be done after the pointer is
+ grabbed, because otherwise it can be outside the window negating the
+ XF86VidModeSetViewPort done in set_fullscreen. This makes the old
+ center the window hack unnescesarry. Notice that since the XF86VM
+ extension requests do not go through the regular X output buffer? We
+ need to make sure that all above requests are processed first. */
+ XSync(_xwin.display, False);
+ _xvidmode_private_set_fullscreen(w, h, &fs_width, &fs_height);
#endif
+
+ /* Center the window (if nescesarry) */
+ if ((fs_width != w) || (fs_height != h))
+ XMoveWindow(_xwin.display, _xwin.window, (fs_width - w) / 2,
+ (fs_height - h) / 2);
+
+ /* Last: center the cursor */
+ XWarpPointer(_xwin.display, None, _xwin.window, 0, 0, 0, 0, w / 2, h / 2);
+ } else {
+ XSizeHints *hints = XAllocSizeHints();;
+
+ /* Resize managed window. */
+ XResizeWindow(_xwin.display, _xwin.wm_window, w, h);
+
+ /* Set size and position hints for Window Manager. */
+ if (hints) {
+ hints->flags = PMinSize | PMaxSize | PBaseSize;
+ hints->min_width = hints->max_width = hints->base_width = w;
+ hints->min_height = hints->max_height = hints->base_height = h;
+ XSetWMNormalHints(_xwin.display, _xwin.wm_window, hints);
+
+ XFree(hints);
+ }
+
+ /* Map the window managed window */
+ XMapWindow(_xwin.display, _xwin.wm_window);
+ _xwin_wait_mapped(_xwin.wm_window);
+ }
/* Create XImage with the size of virtual screen. */
if (_xwin_private_create_ximage(vw, vh) != 0) {
@@ -804,12 +875,6 @@
bmp = _xwin_private_create_screen(drv, w, h, vw, vh, depth, fullscreen);
if (bmp == 0) {
_xwin_private_destroy_screen();
- /* Work around a weird bug with some window managers (KWin, Window Maker). */
- if (fullscreen) {
- bmp = _xwin_private_create_screen(drv, w, h, vw, vh, depth, fullscreen);
- if (bmp == 0)
- _xwin_private_destroy_screen();
- }
}
XUNLOCK();
return bmp;
@@ -843,7 +908,6 @@
_xwin_private_destroy_ximage();
-#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
if (_xwin.mouse_grabbed) {
XUngrabPointer(_xwin.display, CurrentTime);
_xwin.mouse_grabbed = 0;
@@ -854,14 +918,8 @@
_xwin.keyboard_grabbed = 0;
}
+#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
_xvidmode_private_unset_fullscreen();
-
- if (_xwin.override_redirected) {
- setattr.override_redirect = False;
- XChangeWindowAttributes(_xwin.display, _xwin.window,
- CWOverrideRedirect, &setattr);
- _xwin.override_redirected = 0;
- }
#endif
/* whack color-conversion blitter */
@@ -869,8 +927,16 @@
_release_colorconv_blitter(blitter_func);
blitter_func = NULL;
}
-
- XUnmapWindow (_xwin.display, _xwin.window);
+
+ if (_xwin.fs_window != None) {
+ /* Reparent the real window! */
+ XReparentWindow(_xwin.display, _xwin.window, _xwin.wm_window, 0, 0);
+ XUnmapWindow(_xwin.display, _xwin.fs_window);
+ XDestroyWindow(_xwin.display, _xwin.fs_window);
+ _xwin.fs_window = None;
+ }
+ else
+ XUnmapWindow (_xwin.display, _xwin.wm_window);
(*_xwin_window_defaultor)();
}
@@ -2139,31 +2205,31 @@
XpmAttributes attributes;
#endif
- if (_xwin.window == None)
+ if (_xwin.wm_window == None)
return;
/* Set window title. */
- XStoreName(_xwin.display, _xwin.window, _xwin.window_title);
+ XStoreName(_xwin.display, _xwin.wm_window, _xwin.window_title);
/* Set hints. */
hint.res_name = _xwin.application_name;
hint.res_class = _xwin.application_class;
- XSetClassHint(_xwin.display, _xwin.window, &hint);
+ XSetClassHint(_xwin.display, _xwin.wm_window, &hint);
wm_hints.flags = InputHint | StateHint | WindowGroupHint;
wm_hints.input = True;
wm_hints.initial_state = NormalState;
- wm_hints.window_group = _xwin.window;
+ wm_hints.window_group = _xwin.wm_window;
#ifdef ALLEGRO_XWINDOWS_WITH_XPM
if (allegro_icon) {
wm_hints.flags |= IconPixmapHint | IconMaskHint;
attributes.valuemask = XpmReturnAllocPixels | XpmReturnExtensions;
- XpmCreatePixmapFromData(_xwin.display,_xwin.window,allegro_icon,&wm_hints.icon_pixmap,&wm_hints.icon_mask, &attributes);
+ XpmCreatePixmapFromData(_xwin.display,_xwin.wm_window,allegro_icon,&wm_hints.icon_pixmap,&wm_hints.icon_mask, &attributes);
}
#endif
- XSetWMHints(_xwin.display, _xwin.window, &wm_hints);
+ XSetWMHints(_xwin.display, _xwin.wm_window, &wm_hints);
}
@@ -2213,41 +2279,6 @@
}
-
-/* _xwin_resize_window:
- * Wrapper for XResizeWindow.
- */
-static void _xwin_private_resize_window(int w, int h)
-{
- XSizeHints *hints;
-
- if (_xwin.window == None)
- return;
-
- /* New window size. */
- _xwin.window_width = w;
- _xwin.window_height = h;
-
- /* Resize window. */
- XUnmapWindow(_xwin.display, _xwin.window);
- XResizeWindow(_xwin.display, _xwin.window, w, h);
- XMapWindow(_xwin.display, _xwin.window);
-
- hints = XAllocSizeHints();
- if (hints == 0)
- return;
-
- /* Set size and position hints for Window Manager. */
- hints->flags = PMinSize | PMaxSize | PBaseSize;
- hints->min_width = hints->max_width = hints->base_width = w;
- hints->min_height = hints->max_height = hints->base_height = h;
- XSetWMNormalHints(_xwin.display, _xwin.window, hints);
-
- XFree(hints);
-}
-
-
-
/* _xwin_process_event:
* Process one event.
*/
@@ -2723,51 +2754,93 @@
* Support for XF86VidMode extension.
*/
#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
+/* qsort comparison function for sorting the modes */
+static int cmpmodes(const void *va, const void *vb)
+{
+ const XF86VidModeModeInfo *a = *(const XF86VidModeModeInfo **)va;
+ const XF86VidModeModeInfo *b = *(const XF86VidModeModeInfo **)vb;
+ if ( a->hdisplay == b->hdisplay )
+ return b->vdisplay - a->vdisplay;
+ else
+ return b->hdisplay - a->hdisplay;
+}
+
/* _xvidmode_private_set_fullscreen:
- * Attempt to switch video mode and make window fullscreen.
+ * Attempt to switch to a better matching video mode.
+ * Matching code for non exact match (smallest bigger res) rather shamelessly
+ * taken from SDL.
*/
-static int _xvidmode_private_set_fullscreen(int w, int h)
+static void _xvidmode_private_set_fullscreen(int w, int h, int *vidmode_width,
+ int *vidmode_height)
{
int vid_event_base, vid_error_base;
int vid_major_version, vid_minor_version;
- XF86VidModeModeInfo *mode;
int i;
-
+
/* Test that display is local. */
- if (!_xwin_private_display_is_local()) {
- ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("VidMode extension requires local display"));
- return 0;
- }
+ if (!_xwin_private_display_is_local())
+ return;
/* Test for presence of VidMode extension. */
if (!XF86VidModeQueryExtension(_xwin.display, &vid_event_base, &vid_error_base)
- || !XF86VidModeQueryVersion(_xwin.display, &vid_major_version, &vid_minor_version)) {
- ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("VidMode extension is not supported"));
- return 0;
- }
+ || !XF86VidModeQueryVersion(_xwin.display, &vid_major_version, &vid_minor_version))
+ return;
/* Get list of modelines. */
if (!XF86VidModeGetAllModeLines(_xwin.display, _xwin.screen,
&_xwin.num_modes, &_xwin.modesinfo))
- return 0;
-
- /* Search for a matching video mode. */
- for (i = 0; i < _xwin.num_modes; i++) {
- mode = _xwin.modesinfo[i];
- if ((mode->hdisplay == w) && (mode->vdisplay == h)) {
- /* Switch video mode. */
- if (!XF86VidModeSwitchToMode(_xwin.display, _xwin.screen, mode))
- return 0;
+ return;
- /* Lock mode switching. */
- XF86VidModeLockModeSwitch(_xwin.display, _xwin.screen, True);
+ /* Remember the mode to restore */
+ _xwin.orig_modeinfo = _xwin.modesinfo[0];
- _xwin.mode_switched = 1;
- return 1;
- }
+ /* Search for an exact matching video mode. */
+ for (i = 0; i < _xwin.num_modes; i++) {
+ if ((_xwin.modesinfo[i]->hdisplay == w) &&
+ (_xwin.modesinfo[i]->vdisplay == h))
+ break;
}
- return 0;
+ /* Search for a non exact match (smallest bigger res). */
+ if (i == _xwin.num_modes) {
+ int best_width = 0, best_height = 0;
+ qsort(_xwin.modesinfo, _xwin.num_modes, sizeof(void *), cmpmodes);
+ for (i = _xwin.num_modes-1; i > 0; i--) {
+ if ( ! best_width ) {
+ if ( (_xwin.modesinfo[i]->hdisplay >= w) &&
+ (_xwin.modesinfo[i]->vdisplay >= h) ) {
+ best_width = _xwin.modesinfo[i]->hdisplay;
+ best_height = _xwin.modesinfo[i]->vdisplay;
+ }
+ } else {
+ if ( (_xwin.modesinfo[i]->hdisplay != best_width) ||
+ (_xwin.modesinfo[i]->vdisplay != best_height) ) {
+ i++;
+ break;
+ }
+ }
+ }
+ }
+
+ /* Switch video mode. */
+ if ((_xwin.modesinfo[i] == _xwin.orig_modeinfo) ||
+ !XF86VidModeSwitchToMode(_xwin.display, _xwin.screen,
+ _xwin.modesinfo[i])) {
+ *vidmode_width = _xwin.orig_modeinfo->hdisplay;
+ *vidmode_height = _xwin.orig_modeinfo->vdisplay;
+ _xwin.orig_modeinfo = NULL;
+ } else {
+ *vidmode_width = _xwin.modesinfo[i]->hdisplay;
+ *vidmode_height = _xwin.modesinfo[i]->vdisplay;
+ /* only kept / set for compatibility with apps which check this */
+ _xwin.mode_switched = 1;
+ }
+
+ /* Lock mode switching. */
+ XF86VidModeLockModeSwitch(_xwin.display, _xwin.screen, True);
+
+ /* Set viewport. */
+ XF86VidModeSetViewPort(_xwin.display, _xwin.screen, 0, 0);
}
@@ -2793,13 +2866,15 @@
static void _xvidmode_private_unset_fullscreen(void)
{
if (_xwin.num_modes > 0) {
- if (_xwin.mode_switched) {
- /* Unlock mode switching. */
- XF86VidModeLockModeSwitch(_xwin.display, _xwin.screen, False);
+ /* Unlock mode switching. */
+ XF86VidModeLockModeSwitch(_xwin.display, _xwin.screen, False);
+ if (_xwin.orig_modeinfo) {
/* Restore the original video mode. */
- XF86VidModeSwitchToMode(_xwin.display, _xwin.screen, _xwin.modesinfo[0]);
-
+ XF86VidModeSwitchToMode(_xwin.display, _xwin.screen,
+ _xwin.orig_modeinfo);
+ _xwin.orig_modeinfo = 0;
+ /* only kept / set for compatibility with apps which check this */
_xwin.mode_switched = 0;
}
@@ -2809,36 +2884,35 @@
_xwin.modesinfo = 0;
}
}
+#endif
-/* _xvidmode_private_fetch_mode_list:
+/* _xwin_private_fetch_mode_list:
* Generates a list of valid video modes.
*/
-static GFX_MODE_LIST *_xvidmode_private_fetch_mode_list(void)
+static GFX_MODE_LIST *_xwin_private_fetch_mode_list(void)
{
+ int num_modes = 1, num_bpp = 0;
+ GFX_MODE_LIST *mode_list;
+ int i, j;
+#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
+ int has_vidmode = 0;
int vid_event_base, vid_error_base;
int vid_major_version, vid_minor_version;
XF86VidModeModeInfo **modesinfo;
- int num_modes, num_bpp;
- GFX_MODE_LIST *mode_list;
- int i, j;
-
- /* Test that display is local. */
- if (!_xwin_private_display_is_local())
- return 0;
-
- /* Test for presence of VidMode extension. */
- if (!XF86VidModeQueryExtension(_xwin.display, &vid_event_base, &vid_error_base)
- || !XF86VidModeQueryVersion(_xwin.display, &vid_major_version, &vid_minor_version))
- return 0;
-
- /* Get list of modelines. */
- if (!XF86VidModeGetAllModeLines(_xwin.display, _xwin.screen, &num_modes, &modesinfo))
- return 0;
+
+ /* Test that display is local. */
+ if ( _xwin_private_display_is_local() &&
+ /* Test for presence of VidMode extension. */
+ XF86VidModeQueryExtension(_xwin.display, &vid_event_base, &vid_error_base) &&
+ XF86VidModeQueryVersion(_xwin.display, &vid_major_version, &vid_minor_version) &&
+ /* Get list of modelines. */
+ XF86VidModeGetAllModeLines(_xwin.display, _xwin.screen, &num_modes, &modesinfo))
+ has_vidmode = 1;
+#endif
/* Calculate the number of color depths we have to support. */
- num_bpp = 0;
#ifdef ALLEGRO_COLOR8
num_bpp++;
#endif
@@ -2857,25 +2931,48 @@
/* Allocate space for mode list. */
mode_list = malloc(sizeof(GFX_MODE_LIST));
if (!mode_list) {
- free_modelines(modesinfo, num_modes);
+#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
+ if (has_vidmode)
+ free_modelines(modesinfo, num_modes);
+#endif
return 0;
}
mode_list->mode = malloc(sizeof(GFX_MODE) * ((num_modes * num_bpp) + 1));
if (!mode_list->mode) {
free(mode_list);
- free_modelines(modesinfo, num_modes);
+#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
+ if (has_vidmode)
+ free_modelines(modesinfo, num_modes);
+#endif
return 0;
}
/* Fill in mode list. */
j = 0;
for (i = 0; i < num_modes; i++) {
-#define ADD_MODE(BPP) \
+
+#define ADD_SCREEN_MODE(BPP) \
+ mode_list->mode[j].width = DisplayWidth(_xwin.display, _xwin.screen); \
+ mode_list->mode[j].height = DisplayHeight(_xwin.display, _xwin.screen); \
+ mode_list->mode[j].bpp = BPP; \
+ j++
+#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
+#define ADD_VIDMODE_MODE(BPP) \
mode_list->mode[j].width = modesinfo[i]->hdisplay; \
mode_list->mode[j].height = modesinfo[i]->vdisplay; \
mode_list->mode[j].bpp = BPP; \
j++
+#define ADD_MODE(BPP) \
+ if (has_vidmode) { \
+ ADD_VIDMODE_MODE(BPP); \
+ } else { \
+ ADD_SCREEN_MODE(BPP); \
+ }
+#else
+#define ADD_MODE(BPP) ADD_SCREEN_MODE(BPP)
+#endif
+
#ifdef ALLEGRO_COLOR8
ADD_MODE(8);
#endif
@@ -2896,11 +2993,13 @@
mode_list->mode[j].bpp = 0;
mode_list->num_modes = j;
- free_modelines(modesinfo, num_modes);
+#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
+ if (has_vidmode)
+ free_modelines(modesinfo, num_modes);
+#endif
return mode_list;
}
-#endif
@@ -2909,15 +3008,11 @@
*/
GFX_MODE_LIST *_xwin_fetch_mode_list(void)
{
-#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
GFX_MODE_LIST *list;
XLOCK();
- list = _xvidmode_private_fetch_mode_list();
+ list = _xwin_private_fetch_mode_list();
XUNLOCK();
return list;
-#else
- return 0;
-#endif
}
--- allegro-4.2.0/src/x/xgfxdrv.c~ 2006-03-08 22:47:27.000000000 +0100
+++ allegro-4.2.0/src/x/xgfxdrv.c 2006-03-08 22:47:27.000000000 +0100
@@ -61,7 +61,6 @@
-#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
static BITMAP *_xwin_fullscreen_gfxdrv_init(int w, int h, int vw, int vh, int color_depth);
@@ -98,7 +97,6 @@
0,
FALSE
};
-#endif
@@ -109,9 +107,7 @@
{ GFX_XDGA2, &gfx_xdga2, FALSE },
{ GFX_XDGA2_SOFT, &gfx_xdga2_soft, FALSE },
#endif
-#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
{ GFX_XWINDOWS_FULLSCREEN, &gfx_xwin_fullscreen, TRUE },
-#endif
{ GFX_XWINDOWS, &gfx_xwin, TRUE },
{ 0, NULL, 0 }
};
@@ -138,7 +134,6 @@
-#ifdef ALLEGRO_XWINDOWS_WITH_XF86VIDMODE
/* _xwin_fullscreen_gfxdrv_init:
* Creates screen bitmap (with video mode extension).
*/
@@ -146,4 +141,3 @@
{
return _xwin_create_screen(&gfx_xwin_fullscreen, w, h, vw, vh, color_depth, TRUE);
}
-#endif
allegro-4.2.0-mprotect.patch:
--- NEW FILE allegro-4.2.0-mprotect.patch ---
--- allegro-4.2.0/tools/grabber.c.mprotect 2005-09-04 18:00:18.000000000 +0200
+++ allegro-4.2.0/tools/grabber.c 2006-03-08 23:13:39.000000000 +0100
@@ -3121,6 +3121,7 @@
case OSTYPE_SUNOS: s = "SunOS/Solaris"; break;
case OSTYPE_FREEBSD: s = "FreeBSD"; break;
case OSTYPE_NETBSD: s = "NetBSD"; break;
+ case OSTYPE_OPENBSD: s = "OpenBSD"; break;
case OSTYPE_IRIX: s = "IRIX"; break;
case OSTYPE_DARWIN: s = "Darwin"; break;
case OSTYPE_QNX: s = "QNX"; break;
--- allegro-4.2.0/include/allegro/platform/alunixac.hin.mprotect 2005-10-30 21:23:33.000000000 +0100
+++ allegro-4.2.0/include/allegro/platform/alunixac.hin 2006-03-08 23:13:39.000000000 +0100
@@ -169,6 +169,9 @@
/* Define to 1 if you have the `mmap' function. */
#undef HAVE_MMAP
+/* Define to 1 if you have the `mprotect' function. */
+#undef HAVE_MPROTECT
+
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
#undef HAVE_NDIR_H
--- allegro-4.2.0/include/allegro/system.h.mprotect 2005-03-15 21:32:43.000000000 +0100
+++ allegro-4.2.0/include/allegro/system.h 2006-03-08 23:13:39.000000000 +0100
@@ -53,6 +53,7 @@
#define OSTYPE_SUNOS AL_ID('S','U','N',' ')
#define OSTYPE_FREEBSD AL_ID('F','B','S','D')
#define OSTYPE_NETBSD AL_ID('N','B','S','D')
+#define OSTYPE_OPENBSD AL_ID('O','B','S','D')
#define OSTYPE_IRIX AL_ID('I','R','I','X')
#define OSTYPE_DARWIN AL_ID('D','A','R','W')
#define OSTYPE_QNX AL_ID('Q','N','X',' ')
--- allegro-4.2.0/configure.mprotect 2005-11-06 10:54:00.000000000 +0100
+++ allegro-4.2.0/configure 2006-03-08 23:13:39.000000000 +0100
@@ -11225,7 +11225,7 @@
-for ac_func in mmap memcmp mkstemp stricmp strlwr strupr vprintf
+for ac_func in mmap mprotect memcmp mkstemp stricmp strlwr strupr vprintf
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
echo "$as_me:$LINENO: checking for $ac_func" >&5
--- allegro-4.2.0/configure.in.mprotect 2005-08-07 23:50:49.000000000 +0200
+++ allegro-4.2.0/configure.in 2006-03-08 23:13:39.000000000 +0100
@@ -713,7 +713,7 @@
AC_STRUCT_TM
AC_TYPE_SIGNAL
-AC_CHECK_FUNCS(mmap memcmp mkstemp stricmp strlwr strupr vprintf)
+AC_CHECK_FUNCS(mmap mprotect memcmp mkstemp stricmp strlwr strupr vprintf)
dnl Tweak header files for library build
CFLAGS="$CFLAGS -DALLEGRO_LIB_BUILD"
--- allegro-4.2.0/src/unix/usystem.c.mprotect 2005-09-04 18:00:17.000000000 +0200
+++ allegro-4.2.0/src/unix/usystem.c 2006-03-08 23:13:39.000000000 +0100
@@ -196,6 +196,9 @@
else if (!strcmp(utsn.sysname, "NetBSD")) {
os_type = OSTYPE_NETBSD;
}
+ else if (!strcmp(utsn.sysname, "OpenBSD")) {
+ os_type = OSTYPE_OPENBSD;
+ }
else if ((!strcmp(utsn.sysname, "IRIX"))
|| (!strcmp(utsn.sysname, "IRIX64"))) {
os_type = OSTYPE_IRIX;
--- allegro-4.2.0/src/unix/uesd.c.mprotect 2005-03-12 08:54:27.000000000 +0100
+++ allegro-4.2.0/src/unix/uesd.c 2006-03-08 23:13:39.000000000 +0100
@@ -27,6 +27,7 @@
#include <sys/time.h>
#include <sys/types.h>
+#include <string.h> /* FD_ZERO() needs this */
#include <unistd.h>
#include <esd.h>
--- allegro-4.2.0/src/i386/istretch.c.mprotect 2005-03-15 19:02:22.000000000 +0100
+++ allegro-4.2.0/src/i386/istretch.c 2006-03-08 23:14:52.000000000 +0100
@@ -30,6 +30,10 @@
#include "winalleg.h" /* For VirtualProtect */
#endif /* ifdef ALLEGRO_WINDOWS */
+#ifdef HAVE_MPROTECT
+ #include <sys/types.h>
+ #include <sys/mman.h>
+#endif
/* helper macro for generating stretchers in each color depth */
@@ -435,7 +439,9 @@
#ifdef ALLEGRO_WINDOWS
/* Play nice with Windows executable memory protection */
VirtualProtect(_scratch_mem, _scratch_mem_size, PAGE_EXECUTE_READWRITE, &old_protect);
- #endif /* ifdef ALLEGRO_WINDOWS */
+ #elif defined(HAVE_MPROTECT)
+ mprotect(_scratch_mem, _scratch_mem_size, PROT_EXEC|PROT_READ|PROT_WRITE);
+ #endif
/* call the stretcher */
_do_stretch(source, dest, _scratch_mem, sx>>16, sy, syd,
Index: allegro.spec
===================================================================
RCS file: /cvs/extras/rpms/allegro/devel/allegro.spec,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- allegro.spec 27 Feb 2006 09:58:51 -0000 1.25
+++ allegro.spec 8 Mar 2006 22:12:12 -0000 1.26
@@ -18,6 +18,8 @@
Patch4: allegro-4.2.0-digmid.patch
Patch5: allegro-4.2.0-alsa-big-endian.patch
Patch6: allegro-4.2.0-64bit.patch
+Patch7: allegro-4.2.0-fullscreen2.patch
+Patch8: allegro-4.2.0-mprotect.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: esound-devel, texinfo, perl, arts-devel
BuildRequires: xorg-x11-proto-devel, libX11-devel, libXext-devel, libXt-devel
@@ -128,6 +130,9 @@
%patch4 -p1 -z .digmid
%patch5 -p1 -z .alsa-big-endian
%patch6 -p1 -z .64bit
+%patch7 -p1 -z .fullscreen
+%patch8 -p1 -z .mprotect
+
%build
%configure \
@@ -214,6 +219,10 @@
%changelog
+* Wed Mar 8 2006 Hans de Goede <j.w.r.degoede at hhs.nl> 4.2.0-9
+- fix fullscreen <-> window switching bug (bz 183645)
+- fix asm stretch code on i386 with NX processors, thanks to openBSD.
+
* Mon Feb 27 2006 Hans de Goede <j.w.r.degoede at hhs.nl> 4.2.0-8
- fix sound not working on PPC (bz 183112)
- fix allegro not finding and loading plugins/modules on x86_64 (bz 183113)
- Previous message (by thread): rpms/bash-completion/FC-4 .cvsignore, 1.9, 1.10 bash-completion.spec, 1.12, 1.13 sources, 1.9, 1.10 bash-completion-20050721-bash31quoting.patch, 1.1, NONE bash-completion-20050721-cvs-stat.patch, 1.1, NONE bash-completion-20050721-mtr.patch, 1.1, NONE bash-completion.profile, 1.3, NONE
- Next message (by thread): rpms/allegro/devel allegro.spec,1.26,1.27
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list