rpms/dosbox/F-10 dosbox-0.72-evdev.patch, NONE, 1.1 dosbox.spec, 1.31, 1.32

Lubomir Rintel lkundrak at fedoraproject.org
Sun Mar 8 22:09:12 UTC 2009


Author: lkundrak

Update of /cvs/pkgs/rpms/dosbox/F-10
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv6671

Modified Files:
	dosbox.spec 
Added Files:
	dosbox-0.72-evdev.patch 
Log Message:
* Sun Mar 08 2009 Lubomir Rintel <lkundrak at v3.sk> - 0.72-5.1
- Fix key mapping with evdev driver (#473875)


dosbox-0.72-evdev.patch:

--- NEW FILE dosbox-0.72-evdev.patch ---
Fix support for evdev (#473875)
Following upstream commits:

Author: c2woody <c2woody>
Date:   Wed Dec 31 16:33:46 2008 +0000

    add evdev-kbd compatible scancode remapping (disabled atm)

Author: qbix79 <qbix79>
Date:   Thu Jan 22 13:14:33 2009 +0000

    Add experimental evdev detection.

Author: qbix79 <qbix79>
Date:   Thu Jan 22 21:44:14 2009 +0000

    counting is hard

diff -up dosbox-0.72/src/gui/sdl_mapper.cpp.evdev dosbox-0.72/src/gui/sdl_mapper.cpp
--- dosbox-0.72/src/gui/sdl_mapper.cpp.evdev	2007-08-17 14:49:56.000000000 -0400
+++ dosbox-0.72/src/gui/sdl_mapper.cpp	2009-03-08 21:41:46.000000000 -0400
@@ -1614,7 +1614,7 @@ static struct {
 
 
 static void change_action_text(const char* text,Bit8u col) {
-	bind_but.action->Change(text);
+	bind_but.action->Change(text,"");
 	bind_but.action->SetColor(col);
 }
 
@@ -2172,7 +2172,7 @@ static void CreateBindGroups(void) {
 		if (mapper.sticks.num) SDL_JoystickEventState(SDL_DISABLE);
 #else
 		// enable joystick event handling
-		if (numsticks) SDL_JoystickEventState(SDL_ENABLE);
+		if (mapper.sticks.num) SDL_JoystickEventState(SDL_ENABLE);
 		else return;
 #endif
 		Bit8u joyno=0;
@@ -2276,6 +2276,11 @@ void MAPPER_Init(void) {
 	if (!MAPPER_LoadBinds()) CreateDefaultBinds();
 }
 
+//Somehow including them at the top conflicts with something in setup.h
+#ifdef LINUX
+#include "SDL_syswm.h"
+#include <X11/XKBlib.h>
+#endif
 void MAPPER_StartUp(Section * sec) {
 	Section_prop * section=static_cast<Section_prop *>(sec);
 	mapper.sticks.num=0;
@@ -2292,7 +2297,7 @@ void MAPPER_StartUp(Section * sec) {
 		virtual_joysticks[0].axis_pos[i]=0;
 	}
 
-	usescancodes=false;
+	usescancodes = false;
 
 	if (section->Get_bool("usescancodes")) {
 		usescancodes=true;
@@ -2319,23 +2324,63 @@ void MAPPER_StartUp(Section * sec) {
 		sdlkey_map[0x5E]=SDLK_RALT;
 		sdlkey_map[0x40]=SDLK_KP5;
 		sdlkey_map[0x41]=SDLK_KP6;
-#elif !defined (WIN32) /* => Linux */
-		sdlkey_map[0x5a]=SDLK_UP;
-		sdlkey_map[0x60]=SDLK_DOWN;
-		sdlkey_map[0x5c]=SDLK_LEFT;
-		sdlkey_map[0x5e]=SDLK_RIGHT;
-		sdlkey_map[0x59]=SDLK_HOME;
-		sdlkey_map[0x5f]=SDLK_END;
-		sdlkey_map[0x5b]=SDLK_PAGEUP;
-		sdlkey_map[0x61]=SDLK_PAGEDOWN;
-		sdlkey_map[0x62]=SDLK_INSERT;
-		sdlkey_map[0x63]=SDLK_DELETE;
-		sdlkey_map[0x68]=SDLK_KP_DIVIDE;
-		sdlkey_map[0x64]=SDLK_KP_ENTER;
-		sdlkey_map[0x65]=SDLK_RCTRL;
-		sdlkey_map[0x66]=SDLK_PAUSE;
-		sdlkey_map[0x67]=SDLK_PRINT;
-		sdlkey_map[0x69]=SDLK_RALT;
+#elif !defined (WIN32) /* => Linux & BSDs */
+		//bool evdev_input = false;
+		bool evdev_input = true;
+#ifdef LINUX
+		SDL_SysWMinfo info;
+		SDL_VERSION(&info.version);
+		if (SDL_GetWMInfo(&info)) {
+			XkbDescPtr desc = NULL;
+			if((desc = XkbGetMap(info.info.x11.display,XkbAllComponentsMask,XkbUseCoreKbd))) {
+				if(XkbGetNames(info.info.x11.display,XkbAllNamesMask,desc) == 0) {
+					const char* keycodes = XGetAtomName(info.info.x11.display, desc->names->keycodes);
+//					const char* geom = XGetAtomName(info.info.x11.display, desc->names->geometry);
+					if(keycodes) {
+						LOG(LOG_MISC,LOG_NORMAL)("keyboard type %s",keycodes);
+						if (strncmp(keycodes,"evdev",5) == 0) evdev_input = true;
+					}
+					XkbFreeNames(desc,XkbAllNamesMask,True);
+				}
+			XkbFreeClientMap(desc,0,True);
+			}
+		}
+#endif
+		if (evdev_input) {
+			sdlkey_map[0x67]=SDLK_UP;
+			sdlkey_map[0x6c]=SDLK_DOWN;
+			sdlkey_map[0x69]=SDLK_LEFT;
+			sdlkey_map[0x6a]=SDLK_RIGHT;
+			sdlkey_map[0x66]=SDLK_HOME;
+			sdlkey_map[0x6b]=SDLK_END;
+			sdlkey_map[0x68]=SDLK_PAGEUP;
+			sdlkey_map[0x6d]=SDLK_PAGEDOWN;
+			sdlkey_map[0x6e]=SDLK_INSERT;
+			sdlkey_map[0x6f]=SDLK_DELETE;
+			sdlkey_map[0x62]=SDLK_KP_DIVIDE;
+			sdlkey_map[0x60]=SDLK_KP_ENTER;
+			sdlkey_map[0x61]=SDLK_RCTRL;
+			sdlkey_map[0x77]=SDLK_PAUSE;
+			sdlkey_map[0x63]=SDLK_PRINT;
+			sdlkey_map[0x64]=SDLK_RALT;
+		} else {
+			sdlkey_map[0x5a]=SDLK_UP;
+			sdlkey_map[0x60]=SDLK_DOWN;
+			sdlkey_map[0x5c]=SDLK_LEFT;
+			sdlkey_map[0x5e]=SDLK_RIGHT;
+			sdlkey_map[0x59]=SDLK_HOME;
+			sdlkey_map[0x5f]=SDLK_END;
+			sdlkey_map[0x5b]=SDLK_PAGEUP;
+			sdlkey_map[0x61]=SDLK_PAGEDOWN;
+			sdlkey_map[0x62]=SDLK_INSERT;
+			sdlkey_map[0x63]=SDLK_DELETE;
+			sdlkey_map[0x68]=SDLK_KP_DIVIDE;
+			sdlkey_map[0x64]=SDLK_KP_ENTER;
+			sdlkey_map[0x65]=SDLK_RCTRL;
+			sdlkey_map[0x66]=SDLK_PAUSE;
+			sdlkey_map[0x67]=SDLK_PRINT;
+			sdlkey_map[0x69]=SDLK_RALT;
+		}
 #else
 		sdlkey_map[0xc8]=SDLK_UP;
 		sdlkey_map[0xd0]=SDLK_DOWN;


Index: dosbox.spec
===================================================================
RCS file: /cvs/pkgs/rpms/dosbox/F-10/dosbox.spec,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- dosbox.spec	21 Sep 2008 08:27:20 -0000	1.31
+++ dosbox.spec	8 Mar 2009 22:08:42 -0000	1.32
@@ -1,6 +1,6 @@
 Name:           dosbox
 Version:        0.72
-Release:        5%{?dist}
+Release:        5%{?dist}.1
 
 Summary:        x86/DOS emulator with sound and graphics
 
@@ -11,6 +11,7 @@
 Source1:        dosbox.desktop
 Source2:        dosbox.png
 Patch0:         dosbox-gcc43.patch
+Patch1:         dosbox-0.72-evdev.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root
 
 BuildRequires:  libpng-devel
@@ -38,6 +39,7 @@
 %prep
 %setup -q
 %patch0 -p1
+%patch1 -p1 -b .evdev
 
 %build
 %configure --enable-core-inline
@@ -75,6 +77,9 @@
 
 
 %changelog
+* Sun Mar 08 2009 Lubomir Rintel <lkundrak at v3.sk> - 0.72-5.1
+- Fix key mapping with evdev driver (#473875)
+
 * Sun Sep 21 2008 Ville Skyttä <ville.skytta at iki.fi> - 0.72-5
 - Fix Patch0:/%%patch mismatch.
 




More information about the fedora-extras-commits mailing list