From 149a85dff3e7fd908c2935a6ba8784e848d53110 Mon Sep 17 00:00:00 2001 From: André Fabian Silva Delgado Date: Sun, 28 Sep 2014 21:30:21 -0300 Subject: sdl-1.2.15-7.parabola1: import most of Fedora's patches (FS#39227 -> https://bugs.archlinux.org/task/39227) --- libre/sdl/PKGBUILD | 31 ++++++--- libre/sdl/SDL-1.2.10-GrabNotViewable.patch | 22 +++++++ ...5-SDL_EnableUNICODE_drops_keyboard_events.patch | 73 ++++++++++++++++++++++ libre/sdl/SDL-1.2.15-const_XData32.patch | 16 +++++ .../SDL-1.2.15-ignore_insane_joystick_axis.patch | 20 ++++++ .../sdl/SDL-1.2.15-no-default-backing-store.patch | 24 +++++++ ...1-Bypass-SetGammaRamp-when-changing-gamma.patch | 44 +++++++++++++ libre/sdl/fix_joystick_misc_axes.diff | 13 ---- libre/sdl/sdl_x11sym.patch | 12 ---- 9 files changed, 222 insertions(+), 33 deletions(-) create mode 100644 libre/sdl/SDL-1.2.10-GrabNotViewable.patch create mode 100644 libre/sdl/SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch create mode 100644 libre/sdl/SDL-1.2.15-const_XData32.patch create mode 100644 libre/sdl/SDL-1.2.15-ignore_insane_joystick_axis.patch create mode 100644 libre/sdl/SDL-1.2.15-no-default-backing-store.patch create mode 100644 libre/sdl/SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch delete mode 100644 libre/sdl/fix_joystick_misc_axes.diff delete mode 100644 libre/sdl/sdl_x11sym.patch (limited to 'libre') diff --git a/libre/sdl/PKGBUILD b/libre/sdl/PKGBUILD index 957598225..c958e8d09 100644 --- a/libre/sdl/PKGBUILD +++ b/libre/sdl/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 212210 2014-05-10 21:41:06Z heftig $ +# $Id: PKGBUILD 223594 2014-09-27 21:07:22Z heftig $ # Maintainer (Arch): Jan Alexander Steffens (heftig) # Contributor (Arch): Allan McRae # Contributor (Arch): dorphell @@ -8,7 +8,7 @@ pkgname=sdl pkgver=1.2.15 -pkgrel=6.parabola1 +pkgrel=7.parabola1 pkgdesc="A library for portable low-level access to a video framebuffer, audio output, mouse, and keyboard, without nonfree riva_mmio.h file" arch=('i686' 'x86_64' 'mips64el') url="http://www.libsdl.org" @@ -23,20 +23,28 @@ options=('staticlibs') mksource=(http://www.libsdl.org/release/SDL-${pkgver}.tar.gz libre.patch) source=(https://repo.parabolagnulinux.org/other/${pkgname}-libre/SDL-libre-${pkgver}.tar.gz + SDL-1.2.10-GrabNotViewable.patch + SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch + SDL-1.2.15-const_XData32.patch + SDL-1.2.15-ignore_insane_joystick_axis.patch + SDL-1.2.15-no-default-backing-store.patch + SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch sdl-1.2.14-fix-mouse-clicking.patch sdl-1.2.14-disable-mmx.patch - fix_joystick_misc_axes.diff libsdl-1.2.15-resizing.patch - sdl_x11sym.patch X11_KeyToUnicode.patch) mkmd5sums=('9d96df8417572a2afb781a7c4c811a85' '5c665f72b8a2adc97a91f6db6f2da79a') md5sums=('c6e53ef16fa347ed066c3d68fe93c378' + '37ad001a4d2ff924a5fab356b49f8a78' + '8d5a61a0adf1a302695a30141f402712' + 'd6a1bfa054507f281338626e5f12d74b' + 'e382e5b7449e95969c5ba4084b0aab39' + '1b0578c76453813eb4eaf0125ce242db' + '321377e38e2db7f1baf43c392e165dd5' '04d8c179f125e04bcd4c9d60e013c2d7' 'e5c16b7611f62c7cb25f0534eff68852' - '687586a108b597a2a6b73070c1d37e51' '3dd50347d8856160a9cbd7f80383a1f8' - '148b285bccee9d21bb96db807363b962' 'edea272dff4698470877c016d818918d') mksource() { @@ -46,11 +54,18 @@ mksource() { prepare() { cd SDL-$pkgver + patch -Np1 -i ../SDL-1.2.10-GrabNotViewable.patch + patch -Np1 -i ../SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch + patch -Np1 -i ../SDL-1.2.15-const_XData32.patch + patch -Np1 -i ../SDL-1.2.15-ignore_insane_joystick_axis.patch + patch -Np1 -i ../SDL-1.2.15-no-default-backing-store.patch + + # https://bugs.freedesktop.org/show_bug.cgi?id=27222 + patch -Np1 -i ../SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch + patch -Np1 -i ../sdl-1.2.14-fix-mouse-clicking.patch patch -Np1 -i ../sdl-1.2.14-disable-mmx.patch - patch -Np1 -i ../fix_joystick_misc_axes.diff patch -Np1 -i ../libsdl-1.2.15-resizing.patch - patch -Np0 -i ../sdl_x11sym.patch patch -Np1 -i ../X11_KeyToUnicode.patch } diff --git a/libre/sdl/SDL-1.2.10-GrabNotViewable.patch b/libre/sdl/SDL-1.2.10-GrabNotViewable.patch new file mode 100644 index 000000000..128cf3510 --- /dev/null +++ b/libre/sdl/SDL-1.2.10-GrabNotViewable.patch @@ -0,0 +1,22 @@ +Makes SDL-1.2 SDL_WM_GrabInput() non-blocking in case of SDL window is not +viewable. Patch provided by . +See . + +--- ./src/video/x11/SDL_x11wm.c 2007-12-31 04:48:13.000000000 +0000 ++++ ./src/video/x11/SDL_x11wm.c 2009-01-15 10:27:14.000000000 +0000 +@@ -351,13 +351,14 @@ SDL_GrabMode X11_GrabInputNoLock(_THIS, + result = XGrabPointer(SDL_Display, SDL_Window, True, 0, + GrabModeAsync, GrabModeAsync, + SDL_Window, None, CurrentTime); +- if ( result == GrabSuccess ) { ++ if ( result == GrabSuccess || result == GrabNotViewable ) { + break; + } + SDL_Delay(100); + } + if ( result != GrabSuccess ) { + /* Uh, oh, what do we do here? */ ; ++ return(SDL_GRAB_OFF); + } + /* Now grab the keyboard */ + XGrabKeyboard(SDL_Display, WMwindow, True, diff --git a/libre/sdl/SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch b/libre/sdl/SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch new file mode 100644 index 000000000..fdf910e03 --- /dev/null +++ b/libre/sdl/SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch @@ -0,0 +1,73 @@ +# HG changeset patch +# User Sam Lantinga +# Date 1397799374 25200 +# Thu Apr 17 22:36:14 2014 -0700 +# Branch SDL-1.2 +# Node ID 0aade9c0203f717fe4b823a176c3c040f1a709f8 +# Parent 22a7f096bb9d4d596f35a93e33608825693462b0 +Fixed bug 2325 - SDL_EnableUNICODE sometimes drops keyboard events completely + +Rafał Mużyło + +The most annoying part of this bug is that though I've found it in two separate apps, I don't have a trivial testcase for it. + +The problem seems to be a condition race, as it's triggered quite randomly (therefore it will be hard to tell whether it really gets fixed, if a probable fix is found). + +While it's specific to SDL 1.2, it seems quite similar to the problem described and fixed in http://forums.libsdl.org/viewtopic.php?p=40503. + +Now, I should start describing the problem. + +A game uses Escape to open menu (the exact key might not be important). Upon opening, it calls SDL_EnableUNICODE(1). Upon closing it calls SDL_EnableUNICODE(0). + +I have an IME running. + +Game uses SDL_PollEvent to get the events. + +If Escape is pressed repeatedly, menu is opened and closed, till it eventually freezes in open state. +"freezes" in this context means "app itself still runs, but no keyboard events are getting delivered (though - for example - mouse events still are)". "getting delivered" should mean "SDL_PollEvent is not receiving any". +If it matters, the last delivered keyboard event is a keypress, the release never arrives. + +It seems (no guarantees, due to random nature of the freeze) that unsetting XMODIFIERS (which - AFAIU - will disable IME as far as SDL is concerned) prevents the freeze, therefore the reference to that SDL2 thread. + +diff -r 22a7f096bb9d -r 0aade9c0203f src/video/x11/SDL_x11events.c +--- a/src/video/x11/SDL_x11events.c Sun Dec 01 00:00:17 2013 -0500 ++++ b/src/video/x11/SDL_x11events.c Thu Apr 17 22:36:14 2014 -0700 +@@ -395,6 +395,8 @@ + { + int posted; + XEvent xevent; ++ int orig_event_type; ++ KeyCode orig_keycode; + + SDL_memset(&xevent, '\0', sizeof (XEvent)); /* valgrind fix. --ryan. */ + XNextEvent(SDL_Display, &xevent); +@@ -410,9 +412,29 @@ + #ifdef X_HAVE_UTF8_STRING + /* If we are translating with IM, we need to pass all events + to XFilterEvent, and discard those filtered events immediately. */ ++ orig_event_type = xevent.type; ++ if (orig_event_type == KeyPress || orig_event_type == KeyRelease) { ++ orig_keycode = xevent.xkey.keycode; ++ } else { ++ orig_keycode = 0; ++ } + if ( SDL_TranslateUNICODE + && SDL_IM != NULL + && XFilterEvent(&xevent, None) ) { ++ if (orig_keycode) { ++ SDL_keysym keysym; ++ static XComposeStatus state; ++ char keybuf[32]; ++ ++ keysym.scancode = xevent.xkey.keycode; ++ keysym.sym = X11_TranslateKeycode(SDL_Display, xevent.xkey.keycode); ++ keysym.mod = KMOD_NONE; ++ keysym.unicode = 0; ++ if (orig_event_type == KeyPress && XLookupString(&xevent.xkey, keybuf, sizeof(keybuf), NULL, &state)) ++ keysym.unicode = (Uint8)keybuf[0]; ++ ++ SDL_PrivateKeyboard(orig_event_type == KeyPress ? SDL_PRESSED : SDL_RELEASED, &keysym); ++ } + return 0; + } + #endif diff --git a/libre/sdl/SDL-1.2.15-const_XData32.patch b/libre/sdl/SDL-1.2.15-const_XData32.patch new file mode 100644 index 000000000..0f1c07cfb --- /dev/null +++ b/libre/sdl/SDL-1.2.15-const_XData32.patch @@ -0,0 +1,16 @@ +libX11-1.5.99.901 has changed prototype of _XData32 + + + +diff -r b6b2829cd7ef src/video/x11/SDL_x11sym.h +--- a/src/video/x11/SDL_x11sym.h Wed Feb 27 15:20:31 2013 -0800 ++++ b/src/video/x11/SDL_x11sym.h Wed Mar 27 16:07:23 2013 +0100 +@@ -165,7 +165,7 @@ + */ + #ifdef LONG64 + SDL_X11_MODULE(IO_32BIT) +-SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return) ++SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return) + SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),) + #endif + diff --git a/libre/sdl/SDL-1.2.15-ignore_insane_joystick_axis.patch b/libre/sdl/SDL-1.2.15-ignore_insane_joystick_axis.patch new file mode 100644 index 000000000..33340fd1b --- /dev/null +++ b/libre/sdl/SDL-1.2.15-ignore_insane_joystick_axis.patch @@ -0,0 +1,20 @@ +changeset: 6324:95abff7adcc2 +branch: SDL-1.2 +parent: 6306:2b923729fd01 +user: Ryan C. Gordon +date: Sun Jun 03 04:49:25 2012 -0400 +summary: Linux evdev: ignore joystick axis events if they aren't in a sane range. + +diff -r 2b923729fd01 -r 95abff7adcc2 src/joystick/linux/SDL_sysjoystick.c +--- a/src/joystick/linux/SDL_sysjoystick.c Sat May 12 23:32:51 2012 -0700 ++++ b/src/joystick/linux/SDL_sysjoystick.c Sun Jun 03 04:49:25 2012 -0400 +@@ -1106,6 +1106,9 @@ + } + break; + case EV_ABS: ++ if (code > ABS_MISC) { ++ break; ++ } + switch (code) { + case ABS_HAT0X: + case ABS_HAT0Y: diff --git a/libre/sdl/SDL-1.2.15-no-default-backing-store.patch b/libre/sdl/SDL-1.2.15-no-default-backing-store.patch new file mode 100644 index 000000000..4d5209d1e --- /dev/null +++ b/libre/sdl/SDL-1.2.15-no-default-backing-store.patch @@ -0,0 +1,24 @@ +Do not harness backing store by default + +xorg-server 1.15 enables backing store if composite extension is enabled +(default settings). Harnessing backing store through compositor leads to +tearing effect. + +This patch reverts default harnessing backing store to conditional use if +SDL_VIDEO_X11_BACKINGSTORE environment variable exists. + + + + +diff -up SDL-1.2.15/src/video/x11/SDL_x11video.c.jx SDL-1.2.15/src/video/x11/SDL_x11video.c +--- SDL-1.2.15/src/video/x11/SDL_x11video.c.jx 2012-01-19 01:30:06.000000000 -0500 ++++ SDL-1.2.15/src/video/x11/SDL_x11video.c 2014-03-04 14:39:34.691545549 -0500 +@@ -1088,7 +1088,7 @@ static int X11_CreateWindow(_THIS, SDL_S + } + } + +-#if 0 /* This is an experiment - are the graphics faster now? - nope. */ ++#if 1 /* This is an experiment - are the graphics faster now? - nope. */ + if ( SDL_getenv("SDL_VIDEO_X11_BACKINGSTORE") ) + #endif + /* Cache the window in the server, when possible */ diff --git a/libre/sdl/SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch b/libre/sdl/SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch new file mode 100644 index 000000000..087a13476 --- /dev/null +++ b/libre/sdl/SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch @@ -0,0 +1,44 @@ +From 4b56fa058a45b7c804d1a5fcaf7a70db0bd0581c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Tue, 1 Jan 2013 21:25:15 +0100 +Subject: [PATCH] x11: Bypass SetGammaRamp when changing gamma + +Recent Xorg has broken dynamic colors setting, so calling SDL_SetGamme() +does not have any effect here. Recent means xorg-server >= 1.7, since 2010. +See . +--- + src/video/SDL_gamma.c | 15 ++------------- + 1 files changed, 2 insertions(+), 13 deletions(-) + +diff --git a/src/video/SDL_gamma.c b/src/video/SDL_gamma.c +index 4fd0370..464ab88 100644 +--- a/src/video/SDL_gamma.c ++++ b/src/video/SDL_gamma.c +@@ -92,22 +92,11 @@ static void CalculateGammaFromRamp(float *gamma, Uint16 *ramp) + + int SDL_SetGamma(float red, float green, float blue) + { +- int succeeded; ++ int succeeded = -1; + SDL_VideoDevice *video = current_video; + SDL_VideoDevice *this = current_video; + +- succeeded = -1; +- /* Prefer using SetGammaRamp(), as it's more flexible */ +- { +- Uint16 ramp[3][256]; +- +- CalculateGammaRamp(red, ramp[0]); +- CalculateGammaRamp(green, ramp[1]); +- CalculateGammaRamp(blue, ramp[2]); +- succeeded = SDL_SetGammaRamp(ramp[0], ramp[1], ramp[2]); +- } +- if ( (succeeded < 0) && video->SetGamma ) { +- SDL_ClearError(); ++ if ( video->SetGamma ) { + succeeded = video->SetGamma(this, red, green, blue); + } + return succeeded; +-- +1.7.8.6 + diff --git a/libre/sdl/fix_joystick_misc_axes.diff b/libre/sdl/fix_joystick_misc_axes.diff deleted file mode 100644 index 75e3755c9..000000000 --- a/libre/sdl/fix_joystick_misc_axes.diff +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/joystick/linux/SDL_sysjoystick.c b/src/joystick/linux/SDL_sysjoystick.c -index ee43974..80e46e4 100644 ---- a/src/joystick/linux/SDL_sysjoystick.c -+++ b/src/joystick/linux/SDL_sysjoystick.c -@@ -702,7 +702,7 @@ static SDL_bool EV_ConfigJoystick(SDL_Joystick *joystick, int fd) - ++joystick->nbuttons; - } - } -- for ( i=0; i