diff options
author | das <das> | 2005-09-10 14:54:17 (GMT) |
---|---|---|
committer | das <das> | 2005-09-10 14:54:17 (GMT) |
commit | b9cdc82d5a519ef9d27ee4bb737b1f4f8117b3de (patch) | |
tree | c5d114fa56aed882bdf4f126b2e1efcf0d19cb72 /macosx/tkMacOSXCarbonEvents.c | |
parent | 2fa6889f4c599bda43fd66dbc9d1c04870413e59 (diff) | |
download | tk-b9cdc82d5a519ef9d27ee4bb737b1f4f8117b3de.zip tk-b9cdc82d5a519ef9d27ee4bb737b1f4f8117b3de.tar.gz tk-b9cdc82d5a519ef9d27ee4bb737b1f4f8117b3de.tar.bz2 |
* macosx/tkMacOSXMouseEvent.c (TkMacOSXProcessMouseEvent): check if
process is in front on MouseDown, otherwise request process activation
from BringWindowForward() via new isFrontProcess param.
* macosx/tkMacOSXCarbonEvents.c (TkMacOSXInitCarbonEvents): register our
event handler on the dispatcher target for all carbon events of interest
to TkAqua; this replaces event processing directly from the event queue
and thus allows to capture events that are syntesized by Carbon and sent
directly to the dispatcher and not to the event queue.
* macosx/tkMacOSXEvent.c: remove TkMacOSXCountAndProcessMacEvents(),
rename ReceiveAndProcessEvent() to TkMacOSXReceiveAndProcessEvent().
(TkMacOSXReceiveAndProcessEvent): remove tk event processing before
sending events to the dispatcher, all events of interest are now
processed in our dispatcher target event handler.
* macosx/tkMacOSXNotify.c (CarbonEventsCheckProc): dispatch events
directly via TkMacOSXReceiveAndProcessEvent(), but dispatch no more than
four carbon events at one time to avoid starving other event sources.
* macosx/tkMacOSXEvent.c: formatting cleanup, move XSync() to XStubs,
* macosx/tkMacOSXEvent.h: removed obsolete kEventClassWish handling.
* macosx/tkMacOSXXStubs.c
* macosx/tkMacOSXButton.c: conditionalize all debug message printing to
* macosx/tkMacOSXCursor.c: stderr via TK_MAC_DEBUG define.
* macosx/tkMacOSXDebug.c:
* macosx/tkMacOSXDebug.h:
* macosx/tkMacOSXDialog.c:
* macosx/tkMacOSXEvent.c:
* macosx/tkMacOSXInit.c:
* macosx/tkMacOSXKeyEvent.c:
* macosx/tkMacOSXMenu.c:
* macosx/tkMacOSXMenubutton.c:
* macosx/tkMacOSXScale.c:
* macosx/tkMacOSXWindowEvent.c:
* macosx/tkMacOSXWm.c:
* unix/configure.in: define TK_MAC_DEBUG on aqua when symbols enabled.
* unix/configure: autoconf-2.13
* library/listbox.tcl: corrected comments.
* library/text.tcl:
* xlib/xcolors.c: fixed warning
Diffstat (limited to 'macosx/tkMacOSXCarbonEvents.c')
-rw-r--r-- | macosx/tkMacOSXCarbonEvents.c | 104 |
1 files changed, 80 insertions, 24 deletions
diff --git a/macosx/tkMacOSXCarbonEvents.c b/macosx/tkMacOSXCarbonEvents.c index c0539d2..ddeec64 100644 --- a/macosx/tkMacOSXCarbonEvents.c +++ b/macosx/tkMacOSXCarbonEvents.c @@ -53,30 +53,32 @@ * software in accordance with the terms specified in this * license. * - * RCS: @(#) $Id: tkMacOSXCarbonEvents.c,v 1.3.2.2 2005/08/09 07:39:54 das Exp $ + * RCS: @(#) $Id: tkMacOSXCarbonEvents.c,v 1.3.2.3 2005/09/10 14:54:17 das Exp $ */ #include "tkInt.h" #include "tkMacOSXInt.h" #include "tkMacOSXEvent.h" +#include "tkMacOSXDebug.h" -static EventHandlerRef ApplicationCarbonEventHandler; +/* +#ifdef TK_MAC_DEBUG +#define TK_MAC_DEBUG_CARBON_EVENTS +#endif +*/ -/* Definitions of functions used only in this file */ -static OSStatus AppEventHandlerProc ( +/* Declarations of functions used only in this file */ +static OSStatus CarbonEventHandlerProc ( EventHandlerCallRef callRef, EventRef inEvent, void *userData); - /* *---------------------------------------------------------------------- * - * AppEventHandlerProc -- + * CarbonEventHandlerProc -- * - * This procedure is the Application CarbonEvent - * handler. Currently, it handles the Hide & Show - * events. + * This procedure is the handler for all registered CarbonEvents. * * Results: * None. @@ -88,7 +90,7 @@ static OSStatus AppEventHandlerProc ( */ static OSStatus -AppEventHandlerProc ( +CarbonEventHandlerProc ( EventHandlerCallRef callRef, EventRef inEvent, void *inUserData) @@ -97,15 +99,27 @@ AppEventHandlerProc ( TkMacOSXEvent macEvent; MacEventStatus eventStatus; +#ifdef TK_MAC_DEBUG_CARBON_EVENTS + char buf [256]; + CarbonEventToAscii(inEvent, buf); + fprintf(stderr, "CarbonEventHandlerProc started handling %s\n", buf); + _DebugPrintEvent(inEvent); +#endif /* TK_MAC_DEBUG_CARBON_EVENTS */ + macEvent.eventRef = inEvent; macEvent.eClass = GetEventClass(macEvent.eventRef); macEvent.eKind = GetEventKind(macEvent.eventRef); macEvent.interp = (Tcl_Interp *) inUserData; bzero(&eventStatus, sizeof(eventStatus)); TkMacOSXProcessEvent(&macEvent,&eventStatus); - if (!eventStatus.stopProcessing) { + if (eventStatus.stopProcessing) { result = noErr; } + +#ifdef TK_MAC_DEBUG_CARBON_EVENTS + fprintf(stderr, "CarbonEventHandlerProc finished handling %s: %s handled\n", buf, + eventStatus.stopProcessing ? " " : "not"); +#endif /* TK_MAC_DEBUG_CARBON_EVENTS */ return result; } @@ -114,14 +128,13 @@ AppEventHandlerProc ( * * TkMacOSXInitCarbonEvents -- * - * This procedure initializes the Application CarbonEvent - * handler. + * This procedure initializes all CarbonEvent handlers. * * Results: * None. * * Side effects: - * A handler for Application targeted Carbon Events is registered. + * Handlers for Carbon Events are registered. * *---------------------------------------------------------------------- */ @@ -130,17 +143,60 @@ void TkMacOSXInitCarbonEvents ( Tcl_Interp *interp) { - const EventTypeSpec inAppEventTypes[] = { - {kEventClassApplication, kEventAppHidden}, - {kEventClassApplication, kEventAppShown}, - {kEventClassWindow, kEventWindowExpanded}, + const EventTypeSpec dispatcherEventTypes[] = { + {kEventClassMouse, kEventMouseDown}, + {kEventClassMouse, kEventMouseUp}, + {kEventClassMouse, kEventMouseMoved}, + {kEventClassMouse, kEventMouseDragged}, + {kEventClassMouse, kEventMouseWheelMoved}, + {kEventClassWindow, kEventWindowUpdate}, + {kEventClassWindow, kEventWindowActivated}, + {kEventClassWindow, kEventWindowDeactivated}, + {kEventClassKeyboard, kEventRawKeyDown}, + {kEventClassKeyboard, kEventRawKeyRepeat}, + {kEventClassKeyboard, kEventRawKeyUp}, + {kEventClassKeyboard, kEventRawKeyModifiersChanged}, + {kEventClassKeyboard, kEventRawKeyRepeat}, + {kEventClassApplication, kEventAppActivated}, + {kEventClassApplication, kEventAppDeactivated}, + {kEventClassApplication, kEventAppQuit}, + {kEventClassAppleEvent, kEventAppleEvent}, + }; + const EventTypeSpec applicationEventTypes[] = { + {kEventClassWindow, kEventWindowExpanded}, + {kEventClassApplication, kEventAppHidden}, + {kEventClassApplication, kEventAppShown}, }; + EventHandlerUPP handler = NewEventHandlerUPP(CarbonEventHandlerProc); + + InstallEventHandler(GetEventDispatcherTarget(), handler, + GetEventTypeCount(dispatcherEventTypes), dispatcherEventTypes, + (void *) interp, NULL); + InstallEventHandler(GetApplicationEventTarget(), handler, + GetEventTypeCount(applicationEventTypes), applicationEventTypes, + (void *) interp, NULL); - InstallEventHandler(GetApplicationEventTarget(), - NewEventHandlerUPP(AppEventHandlerProc), - GetEventTypeCount(inAppEventTypes), - inAppEventTypes, (void *) interp, - &ApplicationCarbonEventHandler); - +#ifdef TK_MAC_DEBUG_CARBON_EVENTS + _TraceEventByName(CFSTR("kEventMouseDown")); + _TraceEventByName(CFSTR("kEventMouseUp")); + _TraceEventByName(CFSTR("kEventMouseMoved")); + _TraceEventByName(CFSTR("kEventMouseDragged")); + _TraceEventByName(CFSTR("kEventMouseWheelMoved")); + _TraceEventByName(CFSTR("kEventWindowUpdate")); + _TraceEventByName(CFSTR("kEventWindowActivated")); + _TraceEventByName(CFSTR("kEventWindowDeactivated")); + _TraceEventByName(CFSTR("kEventRawKeyDown")); + _TraceEventByName(CFSTR("kEventRawKeyRepeat")); + _TraceEventByName(CFSTR("kEventRawKeyUp")); + _TraceEventByName(CFSTR("kEventRawKeyModifiersChanged")); + _TraceEventByName(CFSTR("kEventRawKeyRepeat")); + _TraceEventByName(CFSTR("kEventAppActivated")); + _TraceEventByName(CFSTR("kEventAppDeactivated")); + _TraceEventByName(CFSTR("kEventAppQuit")); + _TraceEventByName(CFSTR("kEventAppleEvent")); + _TraceEventByName(CFSTR("kEventWindowExpanded")); + _TraceEventByName(CFSTR("kEventAppHidden")); + _TraceEventByName(CFSTR("kEventAppShown")); +#endif /* TK_MAC_DEBUG_CARBON_EVENTS */ } |