began to factor out code to move to darwinEvents.c
This commit is contained in:
		
							parent
							
								
									537dc5ecde
								
							
						
					
					
						commit
						fe7b8f4237
					
				|  | @ -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 type, NSEvent *e) { | |||
|       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 type, NSEvent *e) { | |||
|     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); | ||||
| } | ||||
|  |  | |||
|  | @ -58,6 +58,10 @@ Bool DarwinEQInit(DevicePtr pKbd, DevicePtr pPtr); | |||
| 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); | ||||
|  |  | |||
|  | @ -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
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue