From 0ec00d1093ef76d236d50c2076dc0db5632ef89c Mon Sep 17 00:00:00 2001 From: Adam Fedor Date: Wed, 5 Nov 2003 18:39:20 +0000 Subject: [PATCH] Break off -processEvent: from -receivedEvent:type:extra:forMode: git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@18056 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 5 +++++ Source/x11/XGServerEvent.m | 44 ++++++++++++++++++++++++++------------ 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index ed48cd6..6970ad4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2003-11-05 Adam Fedor + + * Source/x11/XGServerEvent.m ([XGServer -processEvent:]): New + method broken off from -receivedEvent:type:extra:forMode:. + 2003-11-05 03:29 Alexander Malmberg * Source/x11/XGServerEvent.m (-receivedEvent:type:extra:forMode:): diff --git a/Source/x11/XGServerEvent.m b/Source/x11/XGServerEvent.m index 0a78cfd..ce4e733 100644 --- a/Source/x11/XGServerEvent.m +++ b/Source/x11/XGServerEvent.m @@ -83,6 +83,8 @@ void __objc_xgcontextevent_linking (void) { } +static SEL procSel = 0; +static void (*procEvent)(id, SEL, XEvent*) = 0; @interface XGServer (Private) - (void) receivedEvent: (void*)data @@ -94,6 +96,7 @@ void __objc_xgcontextevent_linking (void) type: (RunLoopEventType)type forMode: (NSString*)mode; - (int) XGErrorHandler: (Display*)display : (XErrorEvent*)err; +- (void) processEvent: (XEvent *) event; @end @@ -209,6 +212,12 @@ static inline int check_modifier (XEvent *xEvent, KeyCode key_code) watcher: (id)self forMode: mode]; #endif + if (procSel == 0) + { + procSel = @selector(processEvent:); + procEvent = (void (*)(id, SEL, XEvent*)) + [self methodForSelector: procSel]; + } } #if LIB_FOUNDATION_LIBRARY @@ -234,20 +243,7 @@ static inline int check_modifier (XEvent *xEvent, KeyCode key_code) extra: (void*)extra forMode: (NSString*)mode { - static int clickCount = 1; - static unsigned int eventFlags; - NSEvent *e = nil; XEvent xEvent; - static NSPoint eventLocation; - NSWindow *nswin; - Window xWin; - NSEventType eventType; - NSGraphicsContext *gcontext; - float deltaX; - float deltaY; - - /* FIXME: How do you guarentee a context is associated with an event? */ - gcontext = GSCurrentContext(); // loop and grab all of the events from the X queue while (XPending(dpy) > 0) @@ -262,6 +258,27 @@ static inline int check_modifier (XEvent *xEvent, KeyCode key_code) } #endif + (*procEvent)(self, procSel, &xEvent); + } +} + +- (void) processEvent: (XEvent *) event +{ + static int clickCount = 1; + static unsigned int eventFlags; + NSEvent *e = nil; + XEvent xEvent; + static NSPoint eventLocation; + NSWindow *nswin; + Window xWin; + NSEventType eventType; + NSGraphicsContext *gcontext; + float deltaX; + float deltaY; + + gcontext = GSCurrentContext(); + xEvent = *event; + switch (xEvent.type) { // mouse button events @@ -1272,7 +1289,6 @@ static inline int check_modifier (XEvent *xEvent, KeyCode key_code) if (e) [event_queue addObject: e]; e = nil; - } } // Return the key_code corresponding to the user defaults string