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