diff --git a/hw/darwin/apple/X11Application.m b/hw/darwin/apple/X11Application.m index c50f70482..cfc975037 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++; + // 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 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; iIsX11Window([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 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 bushing: oh, i ... er ... christ. - write(darwinEventWriteFD, &nullbyte, 1); } diff --git a/hw/darwin/darwin.h b/hw/darwin/darwin.h index 48a2224f1..fc4a58a95 100644 --- a/hw/darwin/darwin.h +++ b/hw/darwin/darwin.h @@ -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); diff --git a/hw/darwin/darwinEvents.c b/hw/darwin/darwinEvents.c index 1eb2336fd..ac03e5a70 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