xserver: Branch 'master' - 2 commits

Ben Byer bbyer at kemper.freedesktop.org
Mon Mar 5 13:49:08 EET 2007


 hw/darwin/apple/X11Application.m |   97 ++++++++++++++++++++++-----------------
 hw/darwin/darwin.h               |    4 +
 hw/darwin/darwinEvents.c         |    8 ++-
 3 files changed, 66 insertions(+), 43 deletions(-)

New commits:
diff-tree fe7b8f4237874e3e45fe25a6bf06faddfa1ab8e1 (from 537dc5ecde46d0525c503d1d2b39b6eb89a1298e)
Author: Ben Byer <bbyer at bbyer.(none)>
Date:   Mon Mar 5 03:48:27 2007 -0800

    began to factor out code to move to darwinEvents.c

diff --git a/hw/darwin/apple/X11Application.m b/hw/darwin/apple/X11Application.m
index c50f704..cfc9750 100644
--- a/hw/darwin/apple/X11Application.m
+++ b/hw/darwin/apple/X11Application.m
@@ -855,21 +855,58 @@ convert_flags (unsigned int nsflags) {
     return xflags;
 }
 
+/* Sends a null byte down darwinEventWriteFD, which will cause the
+   Dispatch() event loop to check out event queue */
+void DarwinPokeEQ(void) {
+  char nullbyte=0;
+  input_check_flag++;
+  //  <daniels> bushing: oh, i ... er ... christ.
+  write(darwinEventWriteFD, &nullbyte, 1);
+}
+
+void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int pointer_y) {
+  int i;
+  int valuators[2] = {pointer_x, pointer_y};
+  int num_events = GetPointerEvents(darwinEvents, darwinPointer, ev_type, ev_button, 
+				    POINTER_ABSOLUTE, 0, 2, valuators);
+      
+  for(i=0; i<num_events; i++) mieqEnqueue (darwinPointer,&darwinEvents[i]);
+  DarwinPokeEQ();
+}
+
+void DarwinSendKeyboardEvents(int ev_type, int keycode) {
+  int i;
+  int num_events = GetKeyboardEvents(darwinEvents, darwinKeyboard, ev_type, keycode + MIN_KEYCODE);
+  for(i=0; i<num_events; i++) mieqEnqueue(darwinKeyboard,&darwinEvents[i]);
+  DarwinPokeEQ();
+}
+
+/* Send the appropriate number of button 4 / 5 clicks to emulate scroll wheel */
+void DarwinSendScrollEvents(float count, int pointer_x, int pointer_y) {
+  int i;
+  int ev_button = count > 0.0f ? 4 : 5;
+  int valuators[2] = {pointer_x, pointer_y};
+
+  for (count = fabs(count); count > 0.0; count = count - 1.0f) {
+    int num_events = GetPointerEvents(darwinEvents, darwinPointer, ButtonPress, ev_button, 
+				      POINTER_ABSOLUTE, 0, 2, valuators);
+    for(i=0; i<num_events; i++) mieqEnqueue(darwinPointer,&darwinEvents[i]);
+    num_events = GetPointerEvents(darwinEvents, darwinPointer, ButtonRelease, ev_button, 
+				      POINTER_ABSOLUTE, 0, 2, valuators);
+    for(i=0; i<num_events; i++) mieqEnqueue(darwinPointer,&darwinEvents[i]);
+  }
+  DarwinPokeEQ();
+}
+
 // This code should probably be merged with that in XDarwin's XServer.m - BB
 static void send_nsevent (NSEventType type, NSEvent *e) {
-    static unsigned int button_state = 0;
+  //    static unsigned int button_state = 0;
     NSRect screen;
     NSPoint location;
     NSWindow *window;
     int pointer_x, pointer_y, ev_button, ev_type; 
-    int num_events=0, i=0, state;
-    int valuators[2];
-    float count;
+    //    int num_events=0, i=0, state;
     xEvent xe;
-    char nullbyte=0;
-
-    bzero(&xe, sizeof(xe));
-    input_check_flag++;
 	
     /* convert location to global top-left coordinates */
     location = [e locationInWindow];
@@ -886,11 +923,8 @@ static void send_nsevent (NSEventType ty
       pointer_y = (screen.origin.y + screen.size.height) - location.y;
     }
     
-//    ErrorF("send_nsevent: type=%d pointer=(%d,%d)\n", type, pointer_x, pointer_y);
-    
-    valuators[0] = pointer_x;
-    valuators[1] = pointer_y - aquaMenuBarHeight;
-    state = convert_flags ([e modifierFlags]);
+    pointer_y -= aquaMenuBarHeight;
+    //    state = convert_flags ([e modifierFlags]);
     
     switch (type) {
     case NSLeftMouseDown:    ev_button=1; ev_type=ButtonPress; goto handle_mouse;
@@ -905,50 +939,34 @@ static void send_nsevent (NSEventType ty
     case NSMouseMoved: ev_button=0; ev_type=MotionNotify; goto handle_mouse;
     handle_mouse:
       
-      if(ev_type==ButtonPress) {
+      /* I'm not sure the below code is necessary or useful (-bb)
+	if(ev_type==ButtonPress) {
 	if (!quartzProcs->IsX11Window([e window], [e windowNumber])) {
 	  fprintf(stderr, "Dropping event because it's not a window\n");
 	  break;
 	}
 	button_state |= (1 << ev_button);
+	DarwinSendPointerEvents(ev_type, ev_button, pointer_x, pointer_y);
       } else if (ev_type==ButtonRelease && (button_state & (1 << ev_button)) == 0) break;
-      
-      num_events = GetPointerEvents(darwinEvents, darwinPointer, ev_type, ev_button, 
-				    POINTER_ABSOLUTE, 0, 2, valuators);
-      
-      for(i=0; i<num_events; i++)
-	mieqEnqueue (darwinPointer,&darwinEvents[i]);
+      */
+      DarwinSendPointerEvents(ev_type, ev_button, pointer_x, pointer_y);
       break;
     case NSScrollWheel: 
-      count = [e deltaY];
-      ev_button = count > 0.0f ? 4 : 5;
-      for (count = fabs(count); count > 0.0; count = count - 1.0f) {
-	num_events = GetPointerEvents(darwinEvents, darwinPointer, ButtonPress, ev_button, 
-				      POINTER_ABSOLUTE, 0, 2, valuators);
-	for(i=0; i<num_events; i++) 
-	  mieqEnqueue(darwinPointer,&darwinEvents[i]);
-	num_events = GetPointerEvents(darwinEvents, darwinPointer, ButtonRelease, ev_button, 
-				      POINTER_ABSOLUTE, 0, 2, valuators);
-	for(i=0; i<num_events; i++)
-	  mieqEnqueue(darwinPointer,&darwinEvents[i]);
-      }
+      DarwinSendScrollEvents([e deltaY], pointer_x, pointer_y);
       break;
       
     case NSKeyDown:  // do we need to translate these keyCodes?
     case NSKeyUp:
-      num_events = GetKeyboardEvents(darwinEvents, darwinKeyboard, 
-				     (type == NSKeyDown)?KeyPress:KeyRelease, [e keyCode]);
-      for(i=0; i<num_events; i++) 
-	mieqEnqueue(darwinKeyboard,&darwinEvents[i]);
+      DarwinSendKeyboardEvents((type == NSKeyDown)?KeyPress:KeyRelease, [e keyCode]);
       break;
 
     case NSFlagsChanged:
+      bzero(&xe, sizeof(xe));
       xe.u.u.type = kXDarwinUpdateModifiers;
       xe.u.clientMessage.u.l.longs0 = [e modifierFlags];
       DarwinEQEnqueue (&xe);
+      DarwinPokeEQ();
       break;
     default: break; /* for gcc */
     }	
-    //  <daniels> bushing: oh, i ... er ... christ.
-    write(darwinEventWriteFD, &nullbyte, 1);
 }
diff --git a/hw/darwin/darwin.h b/hw/darwin/darwin.h
index 48a2224..fc4a58a 100644
--- a/hw/darwin/darwin.h
+++ b/hw/darwin/darwin.h
@@ -58,6 +58,10 @@ Bool DarwinEQInit(DevicePtr pKbd, Device
 void DarwinEQEnqueue(const xEvent *e);
 void DarwinEQPointerPost(xEvent *e);
 void DarwinEQSwitchScreen(ScreenPtr pScreen, Bool fromDIX);
+void DarwinPokeEQ(void);
+void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int pointer_y);
+void DarwinSendKeyboardEvents(int ev_type, int keycode);
+void DarwinSendScrollEvents(float count, int pointer_x, int pointer_y);
 
 // From darwinKeyboard.c
 int DarwinModifierNXKeyToNXKeycode(int key, int side);
diff --git a/hw/darwin/darwinEvents.c b/hw/darwin/darwinEvents.c
index 1eb2336..ac03e5a 100644
--- a/hw/darwin/darwinEvents.c
+++ b/hw/darwin/darwinEvents.c
@@ -269,7 +269,7 @@ void ProcessInputEvents(void) {
     static int darwinFakeMouseButtonMask = 0;
     input_check_flag=0;
 
-    ErrorF("calling mieqProcessInputEvents\n");
+    //    ErrorF("calling mieqProcessInputEvents\n");
     mieqProcessInputEvents();
 
     // Empty the signaling pipe
@@ -292,12 +292,12 @@ void ProcessInputEvents(void) {
         xe.u.keyButtonPointer.rootY -= darwinMainScreenY +
                 dixScreenOrigins[miPointerCurrentScreen()->myNum].y;
 	
-	ErrorF("old rootX = (%d,%d) darwinMainScreen = (%d,%d) dixScreenOrigins[%d]=(%d,%d)\n",
+	/*	ErrorF("old rootX = (%d,%d) darwinMainScreen = (%d,%d) dixScreenOrigins[%d]=(%d,%d)\n",
 	       xe.u.keyButtonPointer.rootX, xe.u.keyButtonPointer.rootY,
 	       darwinMainScreenX, darwinMainScreenY,
 	       miPointerCurrentScreen()->myNum,
 	       dixScreenOrigins[miPointerCurrentScreen()->myNum].x,
-	       dixScreenOrigins[miPointerCurrentScreen()->myNum].y);
+	       dixScreenOrigins[miPointerCurrentScreen()->myNum].y); */
 
 	//Assumption - screen switching can only occur on motion events
 
diff-tree 537dc5ecde46d0525c503d1d2b39b6eb89a1298e (from 8ba5e8d82014b774a52f3e050ddbbb8bde4e0933)
Author: Ben Byer <bbyer at bbyer.(none)>
Date:   Mon Mar 5 02:30:56 2007 -0800

    started moving new input code into darwinEvents.c so that it may be shared by the three servers

diff --git a/hw/darwin/apple/X11Application.m b/hw/darwin/apple/X11Application.m
index 0be1e40..c50f704 100644
--- a/hw/darwin/apple/X11Application.m
+++ b/hw/darwin/apple/X11Application.m
@@ -56,7 +56,7 @@ extern int darwinFakeButtons, input_chec
 // extern Bool enable_stereo; 
 Bool enable_stereo;  //<-- this needs to go back to being an extern once glxCGL is fixed
 
-static xEvent *quartzEvents;
+extern xEvent *darwinEvents;
 
 X11Application *X11App;
 
@@ -805,7 +805,6 @@ void X11ApplicationMain (int argc, const
     pool = [[NSAutoreleasePool alloc] init];
 	
     X11App = (X11Application *) [X11Application sharedApplication];
-    quartzEvents = (xEvent *)malloc(sizeof(xEvent) * GetMaximumEventsNum());
 
     init_ports ();
 	
@@ -914,33 +913,33 @@ static void send_nsevent (NSEventType ty
 	button_state |= (1 << ev_button);
       } else if (ev_type==ButtonRelease && (button_state & (1 << ev_button)) == 0) break;
       
-      num_events = GetPointerEvents(quartzEvents, darwinPointer, ev_type, ev_button, 
+      num_events = GetPointerEvents(darwinEvents, darwinPointer, ev_type, ev_button, 
 				    POINTER_ABSOLUTE, 0, 2, valuators);
       
       for(i=0; i<num_events; i++)
-	mieqEnqueue (darwinPointer,&quartzEvents[i]);
+	mieqEnqueue (darwinPointer,&darwinEvents[i]);
       break;
     case NSScrollWheel: 
       count = [e deltaY];
       ev_button = count > 0.0f ? 4 : 5;
       for (count = fabs(count); count > 0.0; count = count - 1.0f) {
-	num_events = GetPointerEvents(quartzEvents, darwinPointer, ButtonPress, ev_button, 
+	num_events = GetPointerEvents(darwinEvents, darwinPointer, ButtonPress, ev_button, 
 				      POINTER_ABSOLUTE, 0, 2, valuators);
 	for(i=0; i<num_events; i++) 
-	  mieqEnqueue(darwinPointer,&quartzEvents[i]);
-	num_events = GetPointerEvents(quartzEvents, darwinPointer, ButtonRelease, ev_button, 
+	  mieqEnqueue(darwinPointer,&darwinEvents[i]);
+	num_events = GetPointerEvents(darwinEvents, darwinPointer, ButtonRelease, ev_button, 
 				      POINTER_ABSOLUTE, 0, 2, valuators);
 	for(i=0; i<num_events; i++)
-	  mieqEnqueue(darwinPointer,&quartzEvents[i]);
+	  mieqEnqueue(darwinPointer,&darwinEvents[i]);
       }
       break;
       
     case NSKeyDown:  // do we need to translate these keyCodes?
     case NSKeyUp:
-      num_events = GetKeyboardEvents(quartzEvents, darwinKeyboard, 
+      num_events = GetKeyboardEvents(darwinEvents, darwinKeyboard, 
 				     (type == NSKeyDown)?KeyPress:KeyRelease, [e keyCode]);
       for(i=0; i<num_events; i++) 
-	mieqEnqueue(darwinKeyboard,&quartzEvents[i]);
+	mieqEnqueue(darwinKeyboard,&darwinEvents[i]);
       break;
 
     case NSFlagsChanged:
diff --git a/hw/darwin/darwinEvents.c b/hw/darwin/darwinEvents.c
index 2a27ac4..1eb2336 100644
--- a/hw/darwin/darwinEvents.c
+++ b/hw/darwin/darwinEvents.c
@@ -74,6 +74,7 @@ typedef struct _EventQueue {
 } EventQueueRec, *EventQueuePtr;
 
 static EventQueueRec darwinEventQueue;
+xEvent *darwinEvents;
 
 /*
  * DarwinPressModifierMask
@@ -179,6 +180,7 @@ static void DarwinSimulateMouseClick(
 
 
 Bool DarwinEQInit(DevicePtr pKbd, DevicePtr pPtr) { 
+    darwinEvents = (xEvent *)malloc(sizeof(xEvent) * GetMaximumEventsNum());
     mieqInit();
     darwinEventQueue.head = darwinEventQueue.tail = 0;
     darwinEventQueue.lastEventTime = GetTimeInMillis ();



More information about the xorg-commit mailing list