xserver: Branch 'xorg-server-1.2-apple' - 2 commits

Ben Byer bbyer at kemper.freedesktop.org
Mon Nov 12 17:02:57 PST 2007


 hw/darwin/darwinEvents.c   |   44 +++++++++++++++++++++++++++++++++++++-------
 hw/darwin/darwinKeyboard.c |    2 ++
 hw/darwin/quartz/quartz.c  |   17 ++++++++++-------
 hw/darwin/quartz/quartz.h  |    8 ++++++++
 4 files changed, 57 insertions(+), 14 deletions(-)

New commits:
commit 3a532addbd820e1f4420f811f27dfd9dd5b079d5
Author: Ben Byer <bbyer at bbyer.apple.com>
Date:   Mon Nov 12 16:42:00 2007 -0800

    converted some debugging prints to TRACE() statements

diff --git a/hw/darwin/quartz/quartz.c b/hw/darwin/quartz/quartz.c
index 34f5e45..c0666e6 100644
--- a/hw/darwin/quartz/quartz.c
+++ b/hw/darwin/quartz/quartz.c
@@ -253,7 +253,7 @@ static void QuartzUpdateScreens(void)
     int x, y, width, height, sx, sy;
     xEvent e;
 
-    ErrorF("QuartzUpdateScreens()\n");
+    TRACE("QuartzUpdateScreens()\n");
     if (noPseudoramiXExtension || screenInfo.numScreens != 1)
     {
         /* FIXME: if not using Xinerama, we have multiple screens, and
@@ -421,6 +421,7 @@ void DarwinModeProcessEvent(
 {
     switch (xe->u.u.type) {
         case kXDarwinControllerNotify:
+	  TRACE("kXDarwinControllerNotify\n");
             AppleWMSendEvent(AppleWMControllerNotify,
                              AppleWMControllerNotifyMask,
                              xe->u.clientMessage.u.l.longs0,
@@ -428,6 +429,7 @@ void DarwinModeProcessEvent(
             break;
 
         case kXDarwinPasteboardNotify:
+	  TRACE("kXDarwinPasteboardNotify\n");
             AppleWMSendEvent(AppleWMPasteboardNotify,
                              AppleWMPasteboardNotifyMask,
                              xe->u.clientMessage.u.l.longs0,
@@ -435,7 +437,7 @@ void DarwinModeProcessEvent(
             break;
 
         case kXDarwinActivate:
-  //	  ErrorF("kXDarwinActivate\n");
+	  TRACE("kXDarwinActivate\n");
             QuartzShow(xe->u.keyButtonPointer.rootX,
                        xe->u.keyButtonPointer.rootY);
             AppleWMSendEvent(AppleWMActivationNotify,
@@ -444,7 +446,7 @@ void DarwinModeProcessEvent(
             break;
 
         case kXDarwinDeactivate:
-  //	  ErrorF("kXDarwinDeactivate\n");
+  	  TRACE("kXDarwinDeactivate\n");
             AppleWMSendEvent(AppleWMActivationNotify,
                              AppleWMActivationNotifyMask,
                              AppleWMIsInactive, 0);
@@ -452,22 +454,23 @@ void DarwinModeProcessEvent(
             break;
 
         case kXDarwinDisplayChanged:
-  //	  ErrorF("kXDarwinDisplayChanged\n");
+	    TRACE("kXDarwinDisplayChanged\n");
             QuartzUpdateScreens();
             break;
 
         case kXDarwinWindowState:
-  //	  ErrorF("kXDarwinWindowState\n");
+	  TRACE("kXDarwinWindowState\n");
             RootlessNativeWindowStateChanged(xe->u.clientMessage.u.l.longs0,
 		  			     xe->u.clientMessage.u.l.longs1);
 	    break;
 	  
         case kXDarwinWindowMoved:
-  //	  ErrorF("kXDarwinWindowMoved\n");
+	  TRACE("kXDarwinWindowMoved\n");
             RootlessNativeWindowMoved (xe->u.clientMessage.u.l.longs0);
 	    break;
 
         case kXDarwinToggleFullscreen:
+	  TRACE("kXDarwinToggleFullscreen\n");
 #ifdef DARWIN_DDX_MISSING
             if (quartzEnableRootless) QuartzSetFullscreen(!quartzHasRoot);
             else if (quartzHasRoot) QuartzHide();
@@ -503,7 +506,7 @@ void DarwinModeProcessEvent(
             break;
 
         case kXDarwinBringAllToFront:
-  //	  ErrorF("kXDarwinBringAllToFront\n");
+  	  TRACE("kXDarwinBringAllToFront\n");
 	    RootlessOrderAllWindows();
             break;
 
diff --git a/hw/darwin/quartz/quartz.h b/hw/darwin/quartz/quartz.h
index 172f323..febc51a 100644
--- a/hw/darwin/quartz/quartz.h
+++ b/hw/darwin/quartz/quartz.h
@@ -38,6 +38,14 @@
 #include "screenint.h"
 #include "window.h"
 
+//#define DEBUG 1
+
+#ifdef DEBUG
+#define TRACE(msg, args...) ErrorF("%s:%d: " msg, __FUNCTION__, __LINE__, ##args )
+#else
+#define TRACE(msg, args...) 
+#endif
+
 /*------------------------------------------
    Quartz display mode function types
   ------------------------------------------*/
commit 65b4e4733ffe425c19902af035eb7b49642ed034
Author: Ben Byer <bbyer at bbyer.apple.com>
Date:   Mon Nov 12 16:41:13 2007 -0800

    Fix for stuck modifier keys, attempt 2!

diff --git a/hw/darwin/darwinEvents.c b/hw/darwin/darwinEvents.c
index 6293d6b..c9b30ee 100644
--- a/hw/darwin/darwinEvents.c
+++ b/hw/darwin/darwinEvents.c
@@ -41,7 +41,6 @@ in this Software without prior written authorization from The Open Group.
 #include   "mi.h"
 #include   "scrnintstr.h"
 #include   "mipointer.h"
-
 #include "darwin.h"
 #include "darwinKeyboard.h"
 
@@ -72,7 +71,8 @@ typedef struct _EventQueue {
 } EventQueueRec, *EventQueuePtr;
 
 static EventQueueRec darwinEventQueue;
-
+extern KeyClassPtr darwinKeyc;
+#define KeyPressed(k) (darwinKeyc->down[k >> 3] & (1 << (k & 7)))
 
 /*
  * DarwinPressModifierMask
@@ -150,8 +150,37 @@ static void DarwinUpdateModifiers(
  * are held down during a "context" switch -- otherwise, we would miss the KeyUp.
  */
 static void DarwinReleaseModifiers(void) {
-	xEvent e;
-	DarwinUpdateModifiers(&e, KeyRelease, COMMAND_MASK(-1) | CONTROL_MASK(-1) | ALTERNATE_MASK(-1) | SHIFT_MASK(-1));
+  KeySym *map = NULL;
+  xEvent ke;
+  int i = 0, j = 0, nevents = 0; 
+ 
+  map = darwinKeyc->curKeySyms.map;
+  
+  for (i = darwinKeyc->curKeySyms.minKeyCode, map = darwinKeyc->curKeySyms.map;
+       i < darwinKeyc->curKeySyms.maxKeyCode;
+       i++, map += darwinKeyc->curKeySyms.mapWidth) {
+    if (KeyPressed(i)) {
+      switch (*map) {
+	/* Don't release the lock keys */
+      case XK_Caps_Lock:
+      case XK_Shift_Lock:
+      case XK_Num_Lock:
+      case XK_Scroll_Lock:
+      case XK_Kana_Lock:
+	break;
+      default:
+	  ke.u.keyButtonPointer.time = GetTimeInMillis();
+	  ke.u.keyButtonPointer.rootX = 0;
+	  ke.u.keyButtonPointer.rootY = 0;
+	  ke.u.u.type = KeyRelease;
+	  ke.u.u.detail = i;
+	  (*darwinEventQueue.pKbd->processInputProc)(&ke,
+		    (DeviceIntPtr)darwinEventQueue.pKbd, 1);
+	break;
+      }
+    }
+  }
+  ProcessInputEvents();
 }
 
 /*
@@ -477,9 +506,10 @@ void ProcessInputEvents(void)
                 break;
             }
 
-			case kXDarwinDeactivate:
-				DarwinReleaseModifiers();
-				// fall through
+	    case kXDarwinDeactivate:
+	      DarwinReleaseModifiers();
+	      old_flags=0;
+	      // fall through
             default:
                 // Check for mode specific event
                 DarwinModeProcessEvent(&xe);
diff --git a/hw/darwin/darwinKeyboard.c b/hw/darwin/darwinKeyboard.c
index 2a10496..3685bff 100644
--- a/hw/darwin/darwinKeyboard.c
+++ b/hw/darwin/darwinKeyboard.c
@@ -220,6 +220,7 @@ static void DarwinChangeKeyboardControl( DeviceIntPtr device, KeybdCtrl *ctrl )
 static darwinKeyboardInfo keyInfo;
 static FILE *fref = NULL;
 static char *inBuffer = NULL;
+KeyClassPtr darwinKeyc = NULL;
 
 //-----------------------------------------------------------------------------
 // Data Stream Object
@@ -835,6 +836,7 @@ InitModMap(register KeyClassPtr keyc)
     CARD8 keysPerModifier[8];
     CARD8 mask;
 
+    darwinKeyc = keyc;
     if (keyc->modifierKeyMap != NULL)
         xfree (keyc->modifierKeyMap);
 


More information about the xorg-commit mailing list