[Xfce4-commits] r25666 - xfwm4/trunk/src

Olivier Fourdan olivier at xfce.org
Wed May 2 07:40:38 CEST 2007


Author: olivier
Date: 2007-05-02 05:40:38 +0000 (Wed, 02 May 2007)
New Revision: 25666

Modified:
   xfwm4/trunk/src/keyboard.c
Log:
Fix memleak in modifier mapping

Modified: xfwm4/trunk/src/keyboard.c
===================================================================
--- xfwm4/trunk/src/keyboard.c	2007-05-01 22:22:37 UTC (rev 25665)
+++ xfwm4/trunk/src/keyboard.c	2007-05-02 05:40:38 UTC (rev 25666)
@@ -306,7 +306,6 @@
     }
 }
 
-#define set_mask(m_mask, mask_cnt) if (!m_mask) m_mask = (1 << mask_cnt);	
 void
 initModifiers (Display * dpy)
 {
@@ -332,7 +331,7 @@
     modmap = XGetModifierMapping (dpy);
     keymap = XGetKeyboardMapping (dpy, min_keycode, max_keycode - min_keycode + 1, &keysyms_per_keycode);
 
-    if (modmap)
+    if (modmap && keymap)
     {    
 		for (i = 3 * modmap->max_keypermod; i < 8 * modmap->max_keypermod; i++)
 		{
@@ -344,60 +343,47 @@
 
 				for (j = 0; j < keysyms_per_keycode; j++)
 				{
-					if (syms[j] == XK_Num_Lock)
+					if (!NumLockMask && (syms[j] == XK_Num_Lock))
 					{
-						set_mask(NumLockMask, (i / modmap->max_keypermod));
+						NumLockMask = (1 << (i / modmap->max_keypermod));
 					}
-					else if (syms[j] == XK_Scroll_Lock)
+					else if (!ScrollLockMask && (syms[j] == XK_Scroll_Lock))
 					{
-						set_mask(ScrollLockMask, (i / modmap->max_keypermod));
+						ScrollLockMask = (1 << (i / modmap->max_keypermod));
 					}
-					else if ((syms[j] == XK_Alt_L) || (syms[j] == XK_Alt_R))
+					else if (!AltMask && ((syms[j] == XK_Alt_L) || (syms[j] == XK_Alt_R)))
 					{
-						set_mask(AltMask, (i / modmap->max_keypermod));
+						AltMask = (1 << (i / modmap->max_keypermod));
 					}
-					else if ((syms[j] == XK_Super_L) || (syms[j] == XK_Super_R))
+					else if (!SuperMask && ((syms[j] == XK_Super_L) || (syms[j] == XK_Super_R)))
 					{
-						set_mask(SuperMask, (i / modmap->max_keypermod));
+						SuperMask = (1 << (i / modmap->max_keypermod));
 					}
-					else if ((syms[j] == XK_Hyper_L) || (syms[j] == XK_Hyper_R))
+					else if (!HyperMask && ((syms[j] == XK_Hyper_L) || (syms[j] == XK_Hyper_R)))
 					{
-						set_mask(HyperMask, (i / modmap->max_keypermod));
+						HyperMask = (1 << (i / modmap->max_keypermod));
 					}       
-					else if ((syms[j] == XK_Meta_L) || (syms[j] == XK_Meta_R))
+					else if (!MetaMask && ((syms[j] == XK_Meta_L) || (syms[j] == XK_Meta_R)))
 					{
-						set_mask(MetaMask, (i / modmap->max_keypermod));
+						MetaMask = (1 << (i / modmap->max_keypermod));
 					}
 				}
 			}
 		}
-        XFreeModifiermap (modmap);
     }
 
-    if (MetaMask == AltMask)
+    /* Cleanup memory */
+    if (modmap)
     {
-        MetaMask = 0;
+    	XFreeModifiermap (modmap);
     }
 
-    if ((AltMask != 0) && (MetaMask == Mod1Mask))
+    if (keymap)
     {
-        MetaMask = AltMask;
-        AltMask = Mod1Mask;
+    	XFree (keymap);
     }
 
-    if ((AltMask == 0) && (MetaMask != 0))
-    {
-        if (MetaMask != Mod1Mask)
-        {
-            AltMask = Mod1Mask;
-        }
-        else
-        {
-            AltMask = MetaMask;
-            MetaMask = 0;
-        }
-    }
-
+    /* In case we didn't find AltMask, use Mod1Mask */
     if (AltMask == 0)
     {
         AltMask = Mod1Mask;



More information about the Xfce4-commits mailing list