rpms/ClanLib06/F-11 ClanLib-0.6.5-extra-keys.patch, NONE, 1.1 ClanLib-0.6.5-iterator-abuse.patch, NONE, 1.1 ClanLib-0.6.5-xev-keycodes.patch, NONE, 1.1 ClanLib06.spec, 1.15, 1.16

Hans de Goede jwrdegoede at fedoraproject.org
Tue Dec 1 08:37:31 UTC 2009


Author: jwrdegoede

Update of /cvs/extras/rpms/ClanLib06/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv14903

Modified Files:
	ClanLib06.spec 
Added Files:
	ClanLib-0.6.5-extra-keys.patch 
	ClanLib-0.6.5-iterator-abuse.patch 
	ClanLib-0.6.5-xev-keycodes.patch 
Log Message:
* Sun Nov 29 2009 Hans de Goede <hdegoede at redhat.com> 0.6.5-16
- ClanLib06 used a hardcoded keycode table (lame), these have changed for some
  keys with us moving over to evdev, breaking the usage of these keys. Fix this
  by switching over to dynamically querying the X-server for keycodes
- Add a number of missing defines for non alpha-numerical keys
- Fix some abuse of iterators
- Remove smpflags, as that results in somehow broken libs (apps using them
  crash on exit ?)


ClanLib-0.6.5-extra-keys.patch:
 API/Display/Input/key.h            |   17 ++++++++++++++
 Display/Input/X11/keyboard_x11.cpp |   44 +++++++++++++++++++++++++++----------
 2 files changed, 50 insertions(+), 11 deletions(-)

--- NEW FILE ClanLib-0.6.5-extra-keys.patch ---
diff -up ClanLib-0.6.5/Sources/API/Display/Input/key.h~ ClanLib-0.6.5/Sources/API/Display/Input/key.h
--- ClanLib-0.6.5/Sources/API/Display/Input/key.h~	2001-10-18 11:23:04.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Display/Input/key.h	2009-11-29 20:44:19.000000000 +0100
@@ -56,6 +56,23 @@ enum
 	CL_MOUSE_WHEELDOWN,
 	CL_MOUSE_WHEELBUTTON,
 
+	/* Additional key enums added by Fedora for complete keyb coverage */
+	CL_KEY_GRAVE,
+	CL_KEY_SUBTRACT,
+	CL_KEY_EQUALS,
+	CL_KEY_LEFT_BRACKET,
+	CL_KEY_RIGHT_BRACKET,
+	CL_KEY_SEMICOLON,
+	CL_KEY_QUOTE,
+	CL_KEY_COMMA,
+	CL_KEY_PERIOD,
+	CL_KEY_DIVIDE,
+	CL_KEY_BACKSLASH,
+	CL_KEY_LWIN,
+	CL_KEY_RWIN,
+	CL_KEY_APPS,
+	CL_KEY_COMPOSE,
+
 	CL_NUM_KEYS
 };
 
diff -up ClanLib-0.6.5/Sources/Display/Input/X11/keyboard_x11.cpp~ ClanLib-0.6.5/Sources/Display/Input/X11/keyboard_x11.cpp
--- ClanLib-0.6.5/Sources/Display/Input/X11/keyboard_x11.cpp~	2002-03-02 17:43:48.000000000 +0100
+++ ClanLib-0.6.5/Sources/Display/Input/X11/keyboard_x11.cpp	2009-11-29 20:56:59.000000000 +0100
@@ -197,7 +197,7 @@ int CL_XWindowKeyboard::map_keysym_to_id
 //	case XK_Clear: return CL_KEY_CLEAR;
 	case XK_Return: return CL_KEY_ENTER;
 	case XK_Pause: return CL_KEY_PAUSE;
-//	case XK_Scroll_Lock: return CL_KEY_SCROLL;
+	case XK_Scroll_Lock: return CL_KEY_SCRLOCK;
 	case XK_Escape: return CL_KEY_ESCAPE;
 	case XK_Delete: return CL_KEY_DELETE;
 //	case XK_Kanji: return CL_KEY_KANJI;
@@ -243,12 +243,11 @@ int CL_XWindowKeyboard::map_keysym_to_id
 	case XK_Meta_R: return CL_KEY_ALTGR;
 	case XK_Alt_L: return CL_KEY_ALT;
 	case XK_Alt_R: return CL_KEY_ALTGR;
-
+	case XK_Super_L: return CL_KEY_LWIN;
+	case XK_Super_R: return CL_KEY_RWIN;
+	case XK_Menu: return CL_KEY_APPS;
+	case XK_Multi_key: return CL_KEY_COMPOSE;
 	case XK_space: return CL_KEY_SPACE;
-//	case XK_comma: return CL_KEY_COMMA;
-//	case XK_minus: return CL_KEY_MINUS;
-//	case XK_period: return CL_KEY_PERIOD;
-//	case XK_slash: return CL_KEY_SLASH;
 	case XK_0: return CL_KEY_0;
 	case XK_1: return CL_KEY_1;
 	case XK_2: return CL_KEY_2;
@@ -259,11 +258,6 @@ int CL_XWindowKeyboard::map_keysym_to_id
 	case XK_7: return CL_KEY_7;
 	case XK_8: return CL_KEY_8;
 	case XK_9: return CL_KEY_9;
-//	case XK_semicolon: return CL_KEY_PUNKTUM;
-//	case XK_equal: return CL_KEY_EQUAL;
-//	case XK_bracketleft: return CL_KEY_BRACKETLEFT;
-//	case XK_backslash: return CL_KEY_BACKSLASH;
-//	case XK_bracketright: return CL_KEY_BRACKETRIGHT;
 	case XK_a: return CL_KEY_A;
 	case XK_b: return CL_KEY_B;
 	case XK_c: return CL_KEY_C;
@@ -290,6 +284,17 @@ int CL_XWindowKeyboard::map_keysym_to_id
 	case XK_x: return CL_KEY_X;
 	case XK_y: return CL_KEY_Y;
 	case XK_z: return CL_KEY_Z;
+	case XK_grave: return CL_KEY_GRAVE;
+	case XK_minus: return CL_KEY_SUBTRACT;
+	case XK_equal: return CL_KEY_EQUALS;
+	case XK_bracketleft: return CL_KEY_LEFT_BRACKET;
+	case XK_bracketright: return CL_KEY_RIGHT_BRACKET;
+	case XK_semicolon: return CL_KEY_SEMICOLON;
+	case XK_apostrophe: return CL_KEY_QUOTE;
+	case XK_comma: return CL_KEY_COMMA;
+	case XK_period: return CL_KEY_PERIOD;
+	case XK_slash: return CL_KEY_DIVIDE;
+	case XK_backslash: return CL_KEY_BACKSLASH;
 	}
 
 	return CL_KEY_NONE_OF_THE_ABOVE;
@@ -386,6 +386,7 @@ int CL_XWindowKeyboard::map_id_to_keysym
 	case CL_KEY_KP_MINUS: return 82;
 	case CL_KEY_KP_PLUS: return 86;
 	case CL_KEY_KP_ENTER: return 108;
+	case CL_KEY_KP_DECIMAL: return 91;
  
  	/* Found these codes in /usr/X11R6/lib/X11/xkb/keycodes/xfree86
  	 * from an XFree86 4.0.1 installation. 
@@ -401,6 +402,22 @@ int CL_XWindowKeyboard::map_id_to_keysym
  	case CL_KEY_KP_7: return 79;
  	case CL_KEY_KP_8: return 80;
  	case CL_KEY_KP_9: return 81;
+
+	case CL_KEY_GRAVE: return 49;
+	case CL_KEY_SUBTRACT: return 20;
+	case CL_KEY_EQUALS: return 21;
+	case CL_KEY_LEFT_BRACKET: return 34;
+	case CL_KEY_RIGHT_BRACKET: return 35;
+	case CL_KEY_SEMICOLON: return 47;
+	case CL_KEY_QUOTE: return 48;
+	case CL_KEY_COMMA: return 59;
+	case CL_KEY_PERIOD: return 60;
+	case CL_KEY_DIVIDE: return 61;
+	case CL_KEY_BACKSLASH: return 51;
+	case CL_KEY_LWIN: return 133;
+	case CL_KEY_RWIN: return 134;
+	case CL_KEY_APPS: return 135;
+	case CL_KEY_COMPOSE: return 108;
 	}
 	
 	return -1;

ClanLib-0.6.5-iterator-abuse.patch:
 signal_v0.h |   22 ++++++----------------
 signal_v1.h |   27 +++++++++------------------
 signal_v2.h |   27 +++++++++------------------
 signal_v3.h |   27 +++++++++------------------
 signal_v4.h |   27 +++++++++------------------
 signal_v5.h |   27 +++++++++------------------
 6 files changed, 51 insertions(+), 106 deletions(-)

--- NEW FILE ClanLib-0.6.5-iterator-abuse.patch ---
diff -up ClanLib-0.6.5/Sources/API/Signals/signal_v0.h~ ClanLib-0.6.5/Sources/API/Signals/signal_v0.h
--- ClanLib-0.6.5/Sources/API/Signals/signal_v0.h~	2002-06-13 16:43:17.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Signals/signal_v0.h	2009-11-29 23:30:39.000000000 +0100
@@ -62,33 +62,23 @@ public:
 	//: Call
 	void call()
 	{
-		std::list<SlotIterator> remove_slots;
-
 		// call slots connected to signal:
 		CL_SlotParent_v0 super(slots.begin(), slots.end());
 		super();
 
 		// find slots to be removed:
-		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++)
+		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); )
 		{
 			Slot slot = *slot_it;
 
-			// skip slot if it has no more references left in application.
-			// (make it pending for removal)
+			// remove slot if it has no more references left in application.
 			if (slot->get_slot_ref() == 0)
 			{
-				remove_slots.push_back(slot_it);
-				continue;
+				slot->release_signal_ref();
+				slot_it = slots.erase(slot_it);
 			}
-		}
-
-		// remove all slots no longer connected to any CL_Slot.
-		std::list<SlotIterator>::iterator remove_it;
-		for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++)
-		{
-			Slot slot = **remove_it;
-			slot->release_signal_ref();
-			slots.erase(*remove_it);
+			else
+				slot_it++;
 		}
 	}
 
diff -up ClanLib-0.6.5/Sources/API/Signals/signal_v1.h~ ClanLib-0.6.5/Sources/API/Signals/signal_v1.h
--- ClanLib-0.6.5/Sources/API/Signals/signal_v1.h~	2002-06-13 16:43:17.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Signals/signal_v1.h	2009-11-29 23:24:20.000000000 +0100
@@ -63,31 +63,22 @@ public:
 	//: Call
 	void call(PARAM1 param1)
 	{
-		std::list<SlotIterator> remove_slots;
-
 		// call slots connected to signal:
-		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++)
+		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); )
 		{
 			Slot slot = *slot_it;
 
-			// skip slot if it has no more references left in application.
-			// (make it pending for removal)
+			// remove slot if it has no more references left in application.
 			if (slot->get_slot_ref() == 0)
 			{
-				remove_slots.push_back(slot_it);
-				continue;
+				slot->release_signal_ref();
+				slot_it = slots.erase(slot_it);
+			}
+			else
+			{
+				slot->call(param1);
+				slot_it++;
 			}
-			
-			slot->call(param1);
-		}
-
-		// remove all slots no longer connected to any CL_Slot.
-		typename std::list<SlotIterator>::iterator remove_it;
-		for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++)
-		{
-			Slot slot = **remove_it;
-			slot->release_signal_ref();
-			slots.erase(*remove_it);
 		}
 	}
 
diff -up ClanLib-0.6.5/Sources/API/Signals/signal_v2.h~ ClanLib-0.6.5/Sources/API/Signals/signal_v2.h
--- ClanLib-0.6.5/Sources/API/Signals/signal_v2.h~	2002-06-13 16:43:17.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Signals/signal_v2.h	2009-11-29 23:29:03.000000000 +0100
@@ -63,31 +63,22 @@ public:
 	//: Call
 	void call(PARAM1 param1, PARAM2 param2)
 	{
-		std::list<SlotIterator> remove_slots;
-
 		// call slots connected to signal:
-		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++)
+		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); )
 		{
 			Slot slot = *slot_it;
 
-			// skip slot if it has no more references left in application.
-			// (make it pending for removal)
+			// remove slot if it has no more references left in application.
 			if (slot->get_slot_ref() == 0)
 			{
-				remove_slots.push_back(slot_it);
-				continue;
+				slot->release_signal_ref();
+				slot_it = slots.erase(slot_it);
+			}
+			else
+			{
+				slot->call(param1, param2);
+				slot_it++;
 			}
-			
-			slot->call(param1, param2);
-		}
-
-		// remove all slots no longer connected to any CL_Slot.
-		typename std::list<SlotIterator>::iterator remove_it;
-		for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++)
-		{
-			Slot slot = **remove_it;
-			slot->release_signal_ref();
-			slots.erase(*remove_it);
 		}
 	}
 
diff -up ClanLib-0.6.5/Sources/API/Signals/signal_v3.h~ ClanLib-0.6.5/Sources/API/Signals/signal_v3.h
--- ClanLib-0.6.5/Sources/API/Signals/signal_v3.h~	2002-06-13 16:43:17.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Signals/signal_v3.h	2009-11-29 23:25:00.000000000 +0100
@@ -63,31 +63,22 @@ public:
 	//: Call
 	void call(PARAM1 param1, PARAM2 param2, PARAM3 param3)
 	{
-		std::list<SlotIterator> remove_slots;
-
 		// call slots connected to signal:
-		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++)
+		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); )
 		{
 			Slot slot = *slot_it;
 
-			// skip slot if it has no more references left in application.
-			// (make it pending for removal)
+			// remove slot if it has no more references left in application.
 			if (slot->get_slot_ref() == 0)
 			{
-				remove_slots.push_back(slot_it);
-				continue;
+				slot->release_signal_ref();
+				slot_it = slots.erase(slot_it);
+			}
+			else
+			{
+				slot->call(param1, param2, param3);
+				slot_it++;
 			}
-			
-			slot->call(param1, param2, param3);
-		}
-
-		// remove all slots no longer connected to any CL_Slot.
-		typename std::list<SlotIterator>::iterator remove_it;
-		for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++)
-		{
-			Slot slot = **remove_it;
-			slot->release_signal_ref();
-			slots.erase(*remove_it);
 		}
 	}
 
diff -up ClanLib-0.6.5/Sources/API/Signals/signal_v4.h~ ClanLib-0.6.5/Sources/API/Signals/signal_v4.h
--- ClanLib-0.6.5/Sources/API/Signals/signal_v4.h~	2002-06-13 16:43:17.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Signals/signal_v4.h	2009-11-29 23:23:14.000000000 +0100
@@ -63,31 +63,22 @@ public:
 	//: Call
 	void call(PARAM1 param1, PARAM2 param2, PARAM3 param3, PARAM4 param4)
 	{
-		std::list<SlotIterator> remove_slots;
-
 		// call slots connected to signal:
-		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++)
+		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); )
 		{
 			Slot slot = *slot_it;
 
-			// skip slot if it has no more references left in application.
-			// (make it pending for removal)
+			// remove slot if it has no more references left in application.
 			if (slot->get_slot_ref() == 0)
 			{
-				remove_slots.push_back(slot_it);
-				continue;
+				slot->release_signal_ref();
+				slot_it = slots.erase(slot_it);
+			}
+			else
+			{
+				slot->call(param1, param2, param3, param4);
+				slot_it++;
 			}
-			
-			slot->call(param1, param2, param3, param4);
-		}
-
-		// remove all slots no longer connected to any CL_Slot.
-		typename std::list<SlotIterator>::iterator remove_it;
-		for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++)
-		{
-			Slot slot = **remove_it;
-			slot->release_signal_ref();
-			slots.erase(*remove_it);
 		}
 	}
 
diff -up ClanLib-0.6.5/Sources/API/Signals/signal_v5.h~ ClanLib-0.6.5/Sources/API/Signals/signal_v5.h
--- ClanLib-0.6.5/Sources/API/Signals/signal_v5.h~	2002-06-13 16:43:17.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Signals/signal_v5.h	2009-11-29 23:16:15.000000000 +0100
@@ -63,31 +63,22 @@ public:
 	//: Call
 	void call(PARAM1 param1, PARAM2 param2, PARAM3 param3, PARAM4 param4, PARAM5 param5)
 	{
-		std::list<SlotIterator> remove_slots;
-
 		// call slots connected to signal:
-		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++)
+		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); )
 		{
 			Slot slot = *slot_it;
 
-			// skip slot if it has no more references left in application.
-			// (make it pending for removal)
+			// remove slot if it has no more references left in application.
 			if (slot->get_slot_ref() == 0)
 			{
-				remove_slots.push_back(slot_it);
-				continue;
+				slot->release_signal_ref();
+				slot_it = slots.erase(slot_it);
+			}
+			else
+			{
+				slot->call(param1, param2, param3, param4, param5);
+				slot_it++;
 			}
-			
-			slot->call(param1, param2, param3, param4, param5);
-		}
-
-		// remove all slots no longer connected to any CL_Slot.
-		typename std::list<SlotIterator>::iterator remove_it;
-		for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++)
-		{
-			Slot slot = **remove_it;
-			slot->release_signal_ref();
-			slots.erase(*remove_it);
 		}
 	}
 

ClanLib-0.6.5-xev-keycodes.patch:
 keyboard_x11.cpp |  135 +++++--------------------------------------------------
 keyboard_x11.h   |    4 +
 2 files changed, 16 insertions(+), 123 deletions(-)

--- NEW FILE ClanLib-0.6.5-xev-keycodes.patch ---
diff -up ClanLib-0.6.5/Sources/Display/Input/X11/keyboard_x11.cpp.keycode ClanLib-0.6.5/Sources/Display/Input/X11/keyboard_x11.cpp
--- ClanLib-0.6.5/Sources/Display/Input/X11/keyboard_x11.cpp.keycode	2009-11-30 16:13:22.000000000 +0100
+++ ClanLib-0.6.5/Sources/Display/Input/X11/keyboard_x11.cpp	2009-11-30 16:15:11.000000000 +0100
@@ -50,6 +50,16 @@ CL_XWindowKeyboard::CL_XWindowKeyboard(
 {
 	card = _card;
 
+	memset(keycodes, 0, sizeof(keycodes));
+	for (int i=0; i<256; i++)
+	{
+		KeySym sym = XKeycodeToKeysym(card->get_display(), i, 0);
+		int id = map_keysym_to_id(sym);
+
+		if (id != CL_KEY_NONE_OF_THE_ABOVE)
+			keycodes[id] = i;
+	}
+
 	for (int j=0; j<X_KEYBOARD_BUFFERSIZE; j++) keys_return[j]=0;
 
 	buttons = new CL_InputButton_XKeyboard*[CL_NUM_KEYS];
@@ -147,7 +157,7 @@ CL_InputButton *CL_XWindowKeyboard::get_
 {
 	if (buttons[button_num] != NULL) return buttons[button_num];
 
-	int translate_key = map_id_to_keysym(button_num);
+	int translate_key = map_id_to_keycode(button_num);
 	if (translate_key == -1) return NULL;
 
 	buttons[button_num] = 
@@ -205,7 +205,6 @@ int CL_XWindowKeyboard::map_keysym_to_id
 {
 	switch (keysym)
 	{
-	case 269025062: return CL_KEY_ESCAPE;
 	case XK_Select: return CL_KEY_ENTER;
 	case XK_BackSpace: return CL_KEY_BACKSPACE;
 	case XK_Tab: return CL_KEY_TAB;
@@ -300,127 +309,9 @@ int CL_XWindowKeyboard::map_keysym_to_id
 	return CL_KEY_NONE_OF_THE_ABOVE;
 }
 
-int CL_XWindowKeyboard::map_id_to_keysym(int id)
+int CL_XWindowKeyboard::map_id_to_keycode(int id)
 {
-	switch (id)
-	{
-	case CL_KEY_A: return 38;
-	case CL_KEY_B: return 56;
-	case CL_KEY_C: return 54;
-	case CL_KEY_D: return 40;
-	case CL_KEY_E: return 26;
-	case CL_KEY_F: return 41;
-	case CL_KEY_G: return 42;
-	case CL_KEY_H: return 43;
-	case CL_KEY_I: return 31;
-	case CL_KEY_J: return 44;
-	case CL_KEY_K: return 45;
-	case CL_KEY_L: return 46;
-	case CL_KEY_M: return 58;
-	case CL_KEY_N: return 57;
-	case CL_KEY_O: return 32;
-	case CL_KEY_P: return 33;
-	case CL_KEY_Q: return 24;
-	case CL_KEY_R: return 27;
-	case CL_KEY_S: return 39;
-	case CL_KEY_T: return 28;
-	case CL_KEY_U: return 30;
-	case CL_KEY_V: return 55;
-	case CL_KEY_W: return 25;
-	case CL_KEY_X: return 53;
-	case CL_KEY_Y: return 29;
-	case CL_KEY_Z: return 52;
-
-	case CL_KEY_0: return 19;
-	case CL_KEY_1: return 10;
-	case CL_KEY_2: return 11;
-	case CL_KEY_3: return 12;
-	case CL_KEY_4: return 13;
-	case CL_KEY_5: return 14;
-	case CL_KEY_6: return 15;
-	case CL_KEY_7: return 16;
-	case CL_KEY_8: return 17;
-	case CL_KEY_9: return 18;
-
-	case CL_KEY_F1: return 67;
-	case CL_KEY_F2: return 68;
-	case CL_KEY_F3: return 69;
-	case CL_KEY_F4: return 70;
-	case CL_KEY_F5: return 71;
-	case CL_KEY_F6: return 72;
-	case CL_KEY_F7: return 73;
-	case CL_KEY_F8: return 74;
-	case CL_KEY_F9: return 75;
-	case CL_KEY_F10: return 76;
-	case CL_KEY_F11: return 95;
-	case CL_KEY_F12: return 96;
-
-	case CL_KEY_ESCAPE: return 9; 
-	case CL_KEY_LEFT: return 100;
-	case CL_KEY_RIGHT: return 102;
-	case CL_KEY_UP: return 98;
-	case CL_KEY_DOWN: return 104;
-	case CL_KEY_LCTRL: return 37;
-	case CL_KEY_RCTRL: return 109;
-	case CL_KEY_LSHIFT: return 50;
-	case CL_KEY_RSHIFT: return 62;
-	case CL_KEY_ALT: return 64;
-	case CL_KEY_ALTGR: return 113;
-	case CL_KEY_TAB: return 23;
-	case CL_KEY_ENTER: return 36;
-	case CL_KEY_SPACE: return 65;
-	case CL_KEY_BACKSPACE: return 22;
-	case CL_KEY_INSERT: return 106;
-	case CL_KEY_DELETE: return 107;
-	case CL_KEY_HOME: return 97;
-	case CL_KEY_END: return 98;
-	case CL_KEY_PAGEUP: return 99;
-	case CL_KEY_PAGEDOWN: return 105;
-	case CL_KEY_CAPSLOCK: return 66;
-	case CL_KEY_NUMLOCK: return 77;
-	case CL_KEY_SCRLOCK: return 78;
-	case CL_KEY_PRINT: return 111;
-	case CL_KEY_PAUSE: return 110;
-	case CL_KEY_KP_DIV: return 112;
-	case CL_KEY_KP_MULT: return 63;
-	case CL_KEY_KP_MINUS: return 82;
-	case CL_KEY_KP_PLUS: return 86;
-	case CL_KEY_KP_ENTER: return 108;
-	case CL_KEY_KP_DECIMAL: return 91;
- 
- 	/* Found these codes in /usr/X11R6/lib/X11/xkb/keycodes/xfree86
- 	 * from an XFree86 4.0.1 installation. 
- 	 * Tested on US 105 key keyboard. <timcr038 at student.otago.ac.nz>
- 	 */
- 	case CL_KEY_KP_0: return 90;
- 	case CL_KEY_KP_1: return 87;
- 	case CL_KEY_KP_2: return 88;
- 	case CL_KEY_KP_3: return 89;
- 	case CL_KEY_KP_4: return 83;
- 	case CL_KEY_KP_5: return 84;
- 	case CL_KEY_KP_6: return 85;
- 	case CL_KEY_KP_7: return 79;
- 	case CL_KEY_KP_8: return 80;
- 	case CL_KEY_KP_9: return 81;
-
-	case CL_KEY_GRAVE: return 49;
-	case CL_KEY_SUBTRACT: return 20;
-	case CL_KEY_EQUALS: return 21;
-	case CL_KEY_LEFT_BRACKET: return 34;
-	case CL_KEY_RIGHT_BRACKET: return 35;
-	case CL_KEY_SEMICOLON: return 47;
-	case CL_KEY_QUOTE: return 48;
-	case CL_KEY_COMMA: return 59;
-	case CL_KEY_PERIOD: return 60;
-	case CL_KEY_DIVIDE: return 61;
-	case CL_KEY_BACKSLASH: return 51;
-	case CL_KEY_LWIN: return 133;
-	case CL_KEY_RWIN: return 134;
-	case CL_KEY_APPS: return 135;
-	case CL_KEY_COMPOSE: return 108;
-	}
-	
-	return -1;
+	return keycodes[id];
 }
 
 /***************************
diff -up ClanLib-0.6.5/Sources/Display/Input/X11/keyboard_x11.h.keycode ClanLib-0.6.5/Sources/Display/Input/X11/keyboard_x11.h
--- ClanLib-0.6.5/Sources/Display/Input/X11/keyboard_x11.h.keycode	2001-11-30 23:38:42.000000000 +0100
+++ ClanLib-0.6.5/Sources/Display/Input/X11/keyboard_x11.h	2009-11-30 16:15:41.000000000 +0100
@@ -19,6 +19,7 @@
 
 #include "API/Display/Input/inputbutton.h"
 #include "API/Display/Input/keyboard.h"
+#include "API/Display/Input/key.h"
 #include "Core/System/Unix/init_linux.h"
 #include "API/Core/System/keep_alive.h"
 #include "API/signals.h"
@@ -64,12 +65,13 @@ public:
 
 private:
 	static int map_keysym_to_id(int keysym);
-	static int map_id_to_keysym(int id);
+	int map_id_to_keycode(int id);
 	
 	void on_xevent(XEvent &event);
 	CL_Slot slot_xevent;
 
 	char keys_return[X_KEYBOARD_BUFFERSIZE];
+	int keycodes[CL_NUM_KEYS];
 	
 	CL_InputButton_XKeyboard **buttons;
 	CL_XWindow_CompatibleCard *card;


Index: ClanLib06.spec
===================================================================
RCS file: /cvs/extras/rpms/ClanLib06/F-11/ClanLib06.spec,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -p -r1.15 -r1.16
--- ClanLib06.spec	23 Feb 2009 20:10:11 -0000	1.15
+++ ClanLib06.spec	1 Dec 2009 08:37:31 -0000	1.16
@@ -1,7 +1,7 @@
 Summary:        Version 0.6 of this Cross platform C++ game library
 Name:           ClanLib06
 Version:        0.6.5
-Release:        14%{?dist}
+Release:        16%{?dist}
 Group:          System Environment/Libraries
 License:        LGPLv2
 URL:            http://www.clanlib.org/
@@ -17,6 +17,9 @@ Patch3:         ClanLib-0.6.5-smalljpg.p
 Patch4:         ClanLib-0.6.5-gcc4.3.patch
 Patch5:         ClanLib-0.6.5-mikmod32.patch
 Patch6:         ClanLib-0.6.5-alsa.patch
+Patch7:         ClanLib-0.6.5-extra-keys.patch
+Patch8:         ClanLib-0.6.5-xev-keycodes.patch
+Patch9:         ClanLib-0.6.5-iterator-abuse.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires:  libX11-devel libXext-devel libXt-devel libGLU-devel
 BuildRequires:  libICE-devel libXxf86vm-devel xorg-x11-proto-devel
@@ -50,6 +53,9 @@ ClanLib 0.6 development headers and libr
 %patch4 -p1 -z .gcc43
 %patch5 -p1 -z .mikmod32
 %patch6 -p1 -z .alsa
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
 # mark asm files as NOT needing execstack
 for i in `find Sources -name '*.s'`; do
   echo '.section .note.GNU-stack,"", at progbits' >> $i
@@ -62,10 +68,10 @@ autoconf
 ARCH_CONFIG_FLAGS=--enable-asm386
 %endif
 cp -a -f /usr/lib/rpm/redhat/config.sub .
-%configure --disable-dependency-tracking --disable-debug --enable-dyn \
-  --disable-directfb $ARCH_CONFIG_FLAGS
+%configure --disable-debug --enable-dyn --disable-directfb $ARCH_CONFIG_FLAGS
 tolua++ -o Sources/Lua/clanbindings.cpp Sources/Lua/clanbindings.pkg
-make %{?_smp_mflags}
+# no smpflags, it somehow brakes the libs (apps using them crash on exit ?)
+make
 
 
 %install
@@ -99,6 +105,18 @@ rm -rf $RPM_BUILD_ROOT
 
 
 %changelog
+* Sun Nov 29 2009 Hans de Goede <hdegoede at redhat.com> 0.6.5-16
+- ClanLib06 used a hardcoded keycode table (lame), these have changed for some
+  keys with us moving over to evdev, breaking the usage of these keys. Fix this
+  by switching over to dynamically querying the X-server for keycodes
+- Add a number of missing defines for non alpha-numerical keys
+- Fix some abuse of iterators
+- Remove smpflags, as that results in somehow broken libs (apps using them
+  crash on exit ?)
+
+* Fri Jul 24 2009 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.6.5-15
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
+
 * Mon Feb 23 2009 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.6.5-14
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
 




More information about the scm-commits mailing list