summaryrefslogtreecommitdiffstats
path: root/macosx/tkMacOSXCarbonEvents.c
diff options
context:
space:
mode:
authordas <das>2005-09-10 14:53:20 (GMT)
committerdas <das>2005-09-10 14:53:20 (GMT)
commit772a802bd1a149cefda0f2fb72e01c827e2eec09 (patch)
treeeb43350948b33779841a8e19cbb6b55c5f48f690 /macosx/tkMacOSXCarbonEvents.c
parent4b772de94c71a044fa1a55d3e325b99807c0ba6a (diff)
downloadtk-772a802bd1a149cefda0f2fb72e01c827e2eec09.zip
tk-772a802bd1a149cefda0f2fb72e01c827e2eec09.tar.gz
tk-772a802bd1a149cefda0f2fb72e01c827e2eec09.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/tkMacOSXEvent.h: declare macosx internal procs as MODULE_SCOPE. * macosx/tkMacOSXEvent.c: * macosx/tkMacOSXKeyEvent.c: * macosx/tkMacOSXMouseEvent.c: * macosx/tkMacOSXWindowEvent.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.59 * unix/tkConfig.h.in: autoheader-2.59 * library/listbox.tcl: synced aqua MouseWheel bindings with * library/scrlbar.tcl: core-8-4-branch. * library/text.tcl: * xlib/xcolors.c: fixed warning
Diffstat (limited to 'macosx/tkMacOSXCarbonEvents.c')
-rw-r--r--macosx/tkMacOSXCarbonEvents.c104
1 files changed, 80 insertions, 24 deletions
diff --git a/macosx/tkMacOSXCarbonEvents.c b/macosx/tkMacOSXCarbonEvents.c
index daeea6b..e946df5 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 2005/08/09 07:39:20 das Exp $
+ * RCS: @(#) $Id: tkMacOSXCarbonEvents.c,v 1.4 2005/09/10 14:53:20 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 @@ MODULE_SCOPE 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 */
}