summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog84
-rw-r--r--macosx/Wish.pbproj/jingham.pbxuser1233
-rw-r--r--macosx/tkMacOSXEvent.c104
-rw-r--r--macosx/tkMacOSXEvent.h9
-rw-r--r--macosx/tkMacOSXKeyEvent.c853
-rw-r--r--macosx/tkMacOSXKeyboard.c29
-rw-r--r--macosx/tkMacOSXMenu.c26
-rw-r--r--macosx/tkMacOSXMouseEvent.c118
-rw-r--r--macosx/tkMacOSXWindowEvent.c7
9 files changed, 1188 insertions, 1275 deletions
diff --git a/ChangeLog b/ChangeLog
index 885de81..829de23 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,87 @@
+2003-02-19 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
+ & Jim Ingham <jingham@apple.com>
+
+ This patch changes the default Tk behavior so that events
+ are by default routed to the standard event handlers after
+ Tk has looked at them.
+
+ * macosx/tkMacOSXEvent.h: Rename "handledByTk" into
+ "stopProcessing".
+
+ * macosx/tkMacOSXEvent.c: Update erroneous comments and
+ remove unused includes.
+ (TkMacOSXProcessAppleEvent): Don't declare events
+ handled that we didn't even look at.
+ (TkMacOSXProcessEvent): Add a comment on policy for
+ "stopProcessing".
+ (TkMacOSXProcessEvent): Remove "handling" of events that
+ are not our business.
+ (TkMacOSXProcessEvent): Rename "handledByTk" into
+ "stopProcessing".
+ (ReceiveAndProcessEvent): Ditto.
+ (ReceiveAndProcessEvent): Tune error production of
+ message.
+
+ * macosx/tkMacOSXKeyEvent.c (TkMacOSXProcessKeyboardEvent):
+ Rename "handledByTk" into "stopProcessing".
+
+ * macosx/tkMacOSXWindowEvent.c: Ditto.
+
+ * macosx/tkMacOSXMouseEvent.c: Remove setting of
+ "handledByTk".
+ (TkMacOSXProcessMouseEvent): Handle clicks in the "traffic
+ lights" in the window title when the window (or app) is
+ in the background.
+
+
+ This patch changes the key event handling to use the MacOS
+ translation mechanisms. It also improves dead key handling.
+
+ * macosx/tkMacOSXKeyEvent.c (InitKeyData): Add.
+ (InitKeyEvent): Add.
+ (DecodeViaUnicodeResource): Rename
+ KeycodeToUnicodeViaUnicodeResource.
+ (DecodeViaKCHRResource): Rename KeycodeToUnicodeViaKCHRResource.
+ (GetKeyboardLayout): Use a boolean flag instead of a special
+ layout id.
+
+ (KeycodeToUnicodeViaUnicodeResource): Change interface and
+ implementation to return a Unicode string instead of directly
+ filling an XEvent.
+ (KeycodeToUnicodeViaKCHRResource): Ditto.
+ (KeycodeToUnicodeViaUnicodeResource): Add handling for callers
+ that don't want deadkey processing (i.e. XKeycodeToKeysym).
+ (KeycodeToUnicodeViaKCHRResource): Ditto.
+ (KeycodeToUnicodeViaUnicodeResource): Clear deadKeyState if a
+ character was produced.
+ (KeycodeToUnicodeViaKCHRResource): Use CFString and current
+ keyboard encoding instead of Tcl Tcl_ExternalToUtf() and fixed
+ TkMacOSXCarbonEncoding.
+ (TkMacOSXKeycodeToUnicode): Add.
+
+ (TkMacOSXProcessKeyboardEvent): Add some heuristics to improve
+ keyup events.
+ (deadKeyState): Split into deadKeyStateUp and deadKeyStateDown.
+ (GenerateKeyEvent): Change interface and implementation to accept
+ a Unicode string instead of individual characters.
+ (GenerateKeyEvent): Don't generate string representations for
+ special characters.
+
+ * macosx/tkMacOSXEvent.h (TkMacOSXKeycodeToUnicode): Add
+ prototype.
+
+ * macosx/tkMacOSXKeyboard.c (KCHRPtr): Remove.
+ (XKeycodeToKeysym): Use TkMacOSXKeycodeToUnicode instead of
+ KeyTranslate.
+ (XKeycodeToKeysym): Support latin-1 keysyms.
+
+ This patch reverts the hack to put icons in menus that Vince put
+ in yesterday (but preserves the bug fix in that submission.)
+
+ * macosx/tkMacOSXMenu.c (SetMenuTitle): revert treating
+ "<bullet> number" as a request to put icon number <number> in
+ the menu.
+
2003-02-18 Mo DeJong <mdejong@users.sourceforge.net>
* doc/entry.n:
diff --git a/macosx/Wish.pbproj/jingham.pbxuser b/macosx/Wish.pbproj/jingham.pbxuser
index e296d38..1e8adca 100644
--- a/macosx/Wish.pbproj/jingham.pbxuser
+++ b/macosx/Wish.pbproj/jingham.pbxuser
@@ -1,316 +1,218 @@
// !$*UTF8*$!
{
- F50F8E5B038B42BB01DC9062 = {
- fRef = F50F8E65038B42BB01DC9062;
+ 4C0152F403FC191100C916F0 = {
+ fRef = F5375541016C376E01DC9062;
isa = PBXTextBookmark;
- name = "Controls.h: 3044";
- rLen = 105;
- rLoc = 111248;
+ name = "tkMacOSXEvent.h: 76";
+ rLen = 5;
+ rLoc = 3095;
rType = 0;
- vrLen = 227;
- vrLoc = 669;
+ vrLen = 1556;
+ vrLoc = 2119;
};
- F50F8E5C038B42BB01DC9062 = {
- isa = PBXTargetBookmark;
- trg = F53755DF016C38D201DC9062;
- };
- F50F8E5D038B42BB01DC9062 = {
- bstl = F537552D016C352C01DC9062;
- isa = PBXBuildStyleBookmark;
- };
- F50F8E5E038B42BB01DC9062 = {
- bstl = F537552C016C352C01DC9062;
- isa = PBXBuildStyleBookmark;
- };
- F50F8E5F038B42BB01DC9062 = {
- fRef = F50F8E64038B42BB01DC9062;
- isa = PBXTextBookmark;
- name = "Controls.h: 3044";
- rLen = 105;
- rLoc = 111248;
- rType = 0;
- vrLen = 227;
- vrLoc = 669;
- };
- F50F8E60038B42BB01DC9062 = {
- isa = PBXTargetBookmark;
- trg = F53755DF016C38D201DC9062;
- };
- F50F8E61038B42BB01DC9062 = {
- bstl = F537552C016C352C01DC9062;
- isa = PBXBuildStyleBookmark;
- };
- F50F8E62038B42BB01DC9062 = {
- bstl = F537552D016C352C01DC9062;
- isa = PBXBuildStyleBookmark;
- };
- F50F8E63038B42BB01DC9062 = {
- bstl = F537552C016C352C01DC9062;
- isa = PBXBuildStyleBookmark;
- };
- F50F8E64038B42BB01DC9062 = {
- isa = PBXFileReference;
- name = Controls.h;
- path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Controls.h;
- refType = 0;
- };
- F50F8E65038B42BB01DC9062 = {
- isa = PBXFileReference;
- name = Controls.h;
- path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Controls.h;
- refType = 0;
- };
- F51925ED034C1D2501DC9062 = {
- exec = F53756AB016C4DD401DC9062;
- isa = PBXExecutableBookmark;
- };
- F51925F2034C1D2501DC9062 = {
- exec = F53756AB016C4DD401DC9062;
- isa = PBXExecutableBookmark;
- };
- F51925F3034C1D2501DC9062 = {
- fRef = F51925F8034C1D2501DC9062;
- isa = PBXTextBookmark;
- name = "ControlDefinitions.h: 2569";
- rLen = 105;
- rLoc = 97433;
- rType = 0;
- vrLen = 2139;
- vrLoc = 96836;
- };
- F51925F4034C1D2501DC9062 = {
- fRef = F51925FB034C1D2501DC9062;
- isa = PBXTextBookmark;
- name = "Controls.h: 2589";
- rLen = 166;
- rLoc = 98010;
- rType = 0;
- vrLen = 1190;
- vrLoc = 97831;
- };
- F51925F5034C1D2501DC9062 = {
- fRef = F5375560016C376E01DC9062;
+ 4C0152F503FC191100C916F0 = {
+ fRef = F5375558016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tkMacOSXScrlbr.c: TkpDisplayScrollbar";
- rLen = 0;
- rLoc = 8727;
+ name = "tkMacOSXKeyEvent.c: KeycodeToUnicodeViaUnicodeResource";
+ rLen = 13;
+ rLoc = 4184;
rType = 0;
- vrLen = 1442;
- vrLoc = 7571;
- };
- F51925F8034C1D2501DC9062 = {
- isa = PBXFileReference;
- name = ControlDefinitions.h;
- path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/ControlDefinitions.h;
- refType = 0;
- };
- F51925FB034C1D2501DC9062 = {
- isa = PBXFileReference;
- name = Controls.h;
- path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Controls.h;
- refType = 0;
+ vrLen = 2261;
+ vrLoc = 0;
};
- F525B3AB033EFBDF01DC9062 = {
+ 4C0152F603FC191100C916F0 = {
fRef = F5375562016C376E01DC9062;
isa = PBXTextBookmark;
name = "tkMacOSXSubwindows.c: __VERSION__";
rLen = 0;
rLoc = 0;
rType = 0;
- vrLen = 958;
- vrLoc = 0;
+ vrLen = 927;
+ vrLoc = 324;
};
- F525B3AC033EFBDF01DC9062 = {
- fRef = F537555D016C376E01DC9062;
+ 4C0152F703FC191100C916F0 = {
+ fRef = F5375553016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tkMacOSXNotify.c: NotifierThreadProc";
+ name = "tkMacOSXEvent.c: ReceiveAndProcessEvent";
rLen = 0;
- rLoc = 32349;
+ rLoc = 6759;
rType = 0;
- vrLen = 1083;
- vrLoc = 32042;
+ vrLen = 1325;
+ vrLoc = 5928;
};
- F525B3AD033EFBDF01DC9062 = {
- fRef = F5375567016C376E01DC9062;
+ 4C0152F803FC191100C916F0 = {
+ fRef = 4C01530803FC191100C916F0;
isa = PBXTextBookmark;
- name = "tkMacOSXWm.c: TkpIsWindowFloating";
- rLen = 0;
- rLoc = 160011;
+ name = "MacWindows.h: 429";
+ rLen = 31;
+ rLoc = 17203;
rType = 0;
- vrLen = 939;
- vrLoc = 159588;
+ vrLen = 1491;
+ vrLoc = 16372;
};
- F525B3AF033EFBDF01DC9062 = {
- fRef = F537556B016C37A601DC9062;
+ 4C0152F903FC191100C916F0 = {
+ fRef = F5375567016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tk.h: Tk_Window";
- rLen = 38;
- rLoc = 3271;
+ name = "tkMacOSXWm.c: TkMacOSXMakeRealWindowExist";
+ rLen = 0;
+ rLoc = 152257;
rType = 0;
- vrLen = 1169;
- vrLoc = 2662;
+ vrLen = 1336;
+ vrLoc = 151466;
};
- F525B3B0033EFBDF01DC9062 = {
- fRef = F5375574016C37A601DC9062;
+ 4C0152FB03FC191100C916F0 = {
+ fRef = F5375541016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tkInt.h: 663";
- rLen = 8;
- rLoc = 22835;
+ name = "tkMacOSXEvent.h: 76";
+ rLen = 5;
+ rLoc = 3095;
rType = 0;
- vrLen = 1611;
- vrLoc = 24698;
+ vrLen = 1556;
+ vrLoc = 2119;
};
- F525B3B1033EFBDF01DC9062 = {
- fRef = F5375542016C376E01DC9062;
+ 4C0152FC03FC191100C916F0 = {
+ fRef = F5375558016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tkMacOSXInt.h: 37";
- rLen = 68;
- rLoc = 629;
+ name = "tkMacOSXKeyEvent.c: 106";
+ rLen = 13;
+ rLoc = 4184;
rType = 0;
- vrLen = 1428;
- vrLoc = 548;
+ vrLen = 1172;
+ vrLoc = 3643;
};
- F525B3B3033EFBDF01DC9062 = {
- fRef = F5375560016C376E01DC9062;
+ 4C0152FD03FC191100C916F0 = {
+ fRef = F537555C016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tkMacOSXScrlbr.c: TkpDisplayScrollbar";
- rLen = 11;
- rLoc = 10051;
+ name = "tkMacOSXMouseEvent.c: TkMacOSXProcessMouseEvent";
+ rLen = 0;
+ rLoc = 4651;
rType = 0;
- vrLen = 1214;
- vrLoc = 9237;
+ vrLen = 1116;
+ vrLoc = 2672;
};
- F525B3B4033EFBDF01DC9062 = {
- fRef = F5375551016C376E01DC9062;
+ 4C0152FE03FC191100C916F0 = {
+ fRef = F5375558016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tkMacOSXDraw.c: 1361";
- rLen = 25;
- rLoc = 39929;
+ name = "tkMacOSXKeyEvent.c: KeycodeToUnicodeViaUnicodeResource";
+ rLen = 13;
+ rLoc = 4184;
rType = 0;
- vrLen = 964;
- vrLoc = 39556;
+ vrLen = 2261;
+ vrLoc = 0;
};
- F525B3B5033EFBDF01DC9062 = {
+ 4C0152FF03FC191100C916F0 = {
fRef = F5375562016C376E01DC9062;
isa = PBXTextBookmark;
name = "tkMacOSXSubwindows.c: __VERSION__";
rLen = 0;
rLoc = 0;
rType = 0;
- vrLen = 958;
- vrLoc = 0;
+ vrLen = 927;
+ vrLoc = 324;
};
- F525B3B6033EFBDF01DC9062 = {
- fRef = F5375567016C376E01DC9062;
+ 4C01530003FC191100C916F0 = {
+ fRef = F5375553016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tkMacOSXWm.c: 5198";
+ name = "tkMacOSXEvent.c: __VERSION__";
rLen = 0;
- rLoc = 159603;
+ rLoc = 0;
rType = 0;
- vrLen = 1235;
+ vrLen = 912;
vrLoc = 0;
};
- F525B3B7033EFBDF01DC9062 = {
- fRef = F537555D016C376E01DC9062;
+ 4C01530103FC191100C916F0 = {
+ fRef = F537555C016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tkMacOSXNotify.c: NotifierThreadProc";
+ name = "tkMacOSXMouseEvent.c: TkMacOSXProcessMouseEvent";
rLen = 0;
- rLoc = 32349;
+ rLoc = 4651;
rType = 0;
- vrLen = 1083;
- vrLoc = 32042;
+ vrLen = 1116;
+ vrLoc = 2672;
};
- F525B3B8033EFBDF01DC9062 = {
- fRef = F5375567016C376E01DC9062;
+ 4C01530203FC191100C916F0 = {
+ fRef = F5375553016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tkMacOSXWm.c: TkpIsWindowFloating";
+ name = "tkMacOSXEvent.c: ReceiveAndProcessEvent";
rLen = 0;
- rLoc = 160011;
+ rLoc = 6759;
rType = 0;
- vrLen = 939;
- vrLoc = 159588;
+ vrLen = 1325;
+ vrLoc = 5928;
};
- F525B3B9033EFBDF01DC9062 = {
- fRef = F5375560016C376E01DC9062;
+ 4C01530303FC191100C916F0 = {
+ fRef = F5375567016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tkMacOSXScrlbr.c: 53";
- rLen = 11;
- rLoc = 1330;
+ name = "tkMacOSXWm.c: TkMacOSXMakeRealWindowExist";
+ rLen = 0;
+ rLoc = 152257;
rType = 0;
- vrLen = 1864;
- vrLoc = 1086;
+ vrLen = 1336;
+ vrLoc = 151466;
};
- F525B3BA033EFBDF01DC9062 = {
- fRef = F537557D016C37A601DC9062;
- isa = PBXTextBookmark;
- name = "tkScrollbar.h: 33";
- rLen = 9;
- rLoc = 614;
- rType = 0;
- vrLen = 1978;
- vrLoc = 496;
+ 4C01530803FC191100C916F0 = {
+ isa = PBXFileReference;
+ name = MacWindows.h;
+ path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/MacWindows.h;
+ refType = 0;
};
- F525B3BB033EFBDF01DC9062 = {
- fRef = F537556B016C37A601DC9062;
+ 4C3917C403FC5E4E00C916F0 = {
+ fRef = F537555C016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tk.h: Tk_Window";
- rLen = 38;
- rLoc = 3271;
+ name = "tkMacOSXMouseEvent.c: 765";
+ rLen = 0;
+ rLoc = 22776;
rType = 0;
- vrLen = 1169;
- vrLoc = 2662;
+ vrLen = 1613;
+ vrLoc = 8967;
};
- F525B3BC033EFBDF01DC9062 = {
- fRef = F5375574016C37A601DC9062;
+ 4C3917C503FC5E4E00C916F0 = {
+ isa = PBXTargetBookmark;
+ trg = F53755DF016C38D201DC9062;
+ };
+ 4C3917C603FC5E4E00C916F0 = {
+ fRef = F537555C016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tkInt.h: 663";
- rLen = 8;
- rLoc = 22835;
+ name = "tkMacOSXMouseEvent.c: 765";
+ rLen = 0;
+ rLoc = 22776;
rType = 0;
- vrLen = 1611;
- vrLoc = 24698;
+ vrLen = 1613;
+ vrLoc = 8967;
};
- F525B3BD033EFBDF01DC9062 = {
- fRef = F5375542016C376E01DC9062;
+ 4C3917C703FC5E4E00C916F0 = {
+ isa = PBXTargetBookmark;
+ trg = F53755DF016C38D201DC9062;
+ };
+ 4CCAE6F203FAD35700C916F0 = {
+ fRef = F537554E016C376E01DC9062;
isa = PBXTextBookmark;
- name = "tkMacOSXInt.h: 37";
- rLen = 68;
- rLoc = 629;
+ name = "tkMacOSXCursor.c: 92";
+ rLen = 0;
+ rLoc = 3545;
rType = 0;
- vrLen = 1428;
- vrLoc = 548;
+ vrLen = 1747;
+ vrLoc = 2554;
};
- F531E5C803527DF501DC9062 = {
- fRef = F531E5CD03527DF501DC9062;
+ 4CCAE6F503FAD35700C916F0 = {
+ fRef = F537554E016C376E01DC9062;
isa = PBXTextBookmark;
- name = "ChangeLog: 1";
- rLen = 266;
- rLoc = 0;
+ name = "tkMacOSXCursor.c: 92";
+ rLen = 0;
+ rLoc = 3545;
rType = 0;
- vrLen = 1850;
- vrLoc = 0;
+ vrLen = 1747;
+ vrLoc = 2554;
};
- F531E5CA03527DF501DC9062 = {
- fRef = F531E5CE03527DF501DC9062;
+ 4CCAE6F603FAD35700C916F0 = {
+ fRef = F5375558016C376E01DC9062;
isa = PBXTextBookmark;
- name = "ChangeLog: 1";
- rLen = 266;
- rLoc = 0;
+ name = "tkMacOSXKeyEvent.c: 117";
+ rLen = 13;
+ rLoc = 4184;
rType = 0;
- vrLen = 1850;
- vrLoc = 0;
- };
- F531E5CD03527DF501DC9062 = {
- isa = PBXFileReference;
- name = ChangeLog;
- path = /Volumes/CodeBits/jingham/Tcl/Source/tk/ChangeLog;
- refType = 0;
- };
- F531E5CE03527DF501DC9062 = {
- isa = PBXFileReference;
- name = ChangeLog;
- path = /Volumes/CodeBits/jingham/Tcl/Source/tk/ChangeLog;
- refType = 0;
+ vrLen = 1181;
+ vrLoc = 3648;
};
F537552A016C352C01DC9062 = {
activeBuildStyle = F537552C016C352C01DC9062;
@@ -326,99 +228,177 @@
F53756AB016C4DD401DC9062,
);
perUserDictionary = {
- PBXPerProjectTemplateStateSaveDate = 59461698;
+ PBXPerProjectTemplateStateSaveDate = 67373224;
+ "PBXTemplateGeometry-F5314676015831810DCA290F" = {
+ ContentSize = "{685, 434}";
+ LeftSlideOut = {
+ Collapsed = NO;
+ Frame = "{{0, 23}, {685, 411}}";
+ Split0 = {
+ ActiveTab = 2;
+ ActiveTabName = PBXBuildResultsModule;
+ Collapsed = NO;
+ Frame = "{{0, 0}, {685, 411}}";
+ Split0 = {
+ Frame = "{{0, 301}, {685, 110}}";
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {952, 321}}";
+ };
+ Tab1 = {
+ Debugger = {
+ Collapsed = NO;
+ Frame = "{{0, 0}, {781, 452}}";
+ Split0 = {
+ Frame = "{{0, 24}, {781, 428}}";
+ Split0 = {
+ Frame = "{{0, 0}, {383, 428}}";
+ };
+ Split1 = {
+ DebugVariablesTableConfiguration = (
+ Name,
+ 123,
+ Value,
+ 85,
+ Summary,
+ 155.123,
+ );
+ Frame = "{{392, 0}, {389, 428}}";
+ };
+ SplitCount = 2;
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {100, 50}}";
+ };
+ Tab1 = {
+ Frame = "{{0, 0}, {100, 50}}";
+ };
+ TabCount = 2;
+ TabsVisible = YES;
+ };
+ Frame = "{{0, 0}, {781, 452}}";
+ LauncherConfigVersion = 7;
+ };
+ Tab2 = {
+ Frame = "{{0, 0}, {685, 198}}";
+ LauncherConfigVersion = 3;
+ Runner = {
+ Frame = "{{0, 0}, {685, 198}}";
+ };
+ };
+ Tab3 = {
+ BuildMessageFrame = "{{0, 0}, {687, 262}}";
+ BuildTranscriptFrame = "{{0, 271}, {687, 2}}";
+ BuildTranscriptFrameExpanded = YES;
+ Frame = "{{0, 0}, {685, 295}}";
+ };
+ Tab4 = {
+ Frame = "{{0, 0}, {612, 295}}";
+ };
+ TabCount = 5;
+ TabsVisible = NO;
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {300, 533}}";
+ GroupTreeTableConfiguration = (
+ TargetStatusColumn,
+ 18,
+ MainColumn,
+ 267,
+ );
+ };
+ Tab1 = {
+ ClassesFrame = "{{0, 0}, {280, 398}}";
+ ClassesTreeTableConfiguration = (
+ PBXBookColumnIdentifier,
+ 20,
+ PBXClassColumnIdentifier,
+ 237,
+ );
+ Frame = "{{0, 0}, {278, 659}}";
+ MembersFrame = "{{0, 407}, {280, 252}}";
+ MembersTreeTableConfiguration = (
+ PBXBookColumnIdentifier,
+ 20,
+ PBXMethodColumnIdentifier,
+ 236,
+ );
+ };
+ Tab2 = {
+ Frame = "{{0, 0}, {200, 100}}";
+ };
+ Tab3 = {
+ Frame = "{{0, 0}, {200, 100}}";
+ TargetTableConfiguration = (
+ ActiveObject,
+ 16,
+ ObjectNames,
+ 202.296,
+ );
+ };
+ Tab4 = {
+ BreakpointsTreeTableConfiguration = (
+ breakpointColumn,
+ 197,
+ enabledColumn,
+ 31,
+ );
+ Frame = "{{0, 0}, {250, 100}}";
+ };
+ TabCount = 5;
+ TabsVisible = NO;
+ };
+ NavBarShownByDefault = YES;
+ StatusViewVisible = YES;
+ Template = F5314676015831810DCA290F;
+ ToolbarVisible = YES;
+ WindowLocation = "{7, 502}";
+ };
PBXWorkspaceContents = (
{
LeftSlideOut = {
Split0 = {
Split0 = {
NavContent0 = {
- bookmark = F50F8E63038B42BB01DC9062;
+ bookmark = 4C3917C703FC5E4E00C916F0;
history = (
- F56F9699032D92AE01DC9062,
- F56F969A032D92AE01DC9062,
- F56F969C032D92AE01DC9062,
- F56F969D032D92AE01DC9062,
- F56F969E032D92AE01DC9062,
- F5979A0E033DAD6701DC9062,
- F525B3AB033EFBDF01DC9062,
- F525B3AC033EFBDF01DC9062,
- F525B3AD033EFBDF01DC9062,
- F525B3AF033EFBDF01DC9062,
- F525B3B0033EFBDF01DC9062,
- F525B3B1033EFBDF01DC9062,
- F51925ED034C1D2501DC9062,
- F531E5C803527DF501DC9062,
- F5ECAB86035A798D01DC9062,
- F5ECAB89035A798D01DC9062,
- F59B1688036E127001DC9062,
- F59B1689036E127001DC9062,
- F59B168A036E127001DC9062,
- F59B168B036E127001DC9062,
- F59B168C036E127001DC9062,
- F597EADD036E210C01DC9062,
- F597EADE036E210C01DC9062,
- F597EADF036E210C01DC9062,
- F597EAE0036E210C01DC9062,
- F50F8E5B038B42BB01DC9062,
- F50F8E5C038B42BB01DC9062,
- F50F8E5D038B42BB01DC9062,
- F50F8E5E038B42BB01DC9062,
+ 4CCAE6F203FAD35700C916F0,
+ 4C0152F403FC191100C916F0,
+ 4C0152F503FC191100C916F0,
+ 4C0152F603FC191100C916F0,
+ 4C0152F703FC191100C916F0,
+ 4C0152F803FC191100C916F0,
+ 4C0152F903FC191100C916F0,
+ 4C3917C403FC5E4E00C916F0,
+ 4C3917C503FC5E4E00C916F0,
);
prevStack = (
- F56F96A0032D92AE01DC9062,
- F56F96A1032D92AE01DC9062,
- F56F96A2032D92AE01DC9062,
- F56F96A3032D92AE01DC9062,
- F56F96A4032D92AE01DC9062,
- F56F96A5032D92AE01DC9062,
- F56F96A6032D92AE01DC9062,
- F5979A10033DAD6701DC9062,
- F5979A11033DAD6701DC9062,
- F5979A12033DAD6701DC9062,
- F525B3B3033EFBDF01DC9062,
- F525B3B4033EFBDF01DC9062,
- F525B3B5033EFBDF01DC9062,
- F525B3B6033EFBDF01DC9062,
- F525B3B7033EFBDF01DC9062,
- F525B3B8033EFBDF01DC9062,
- F525B3B9033EFBDF01DC9062,
- F525B3BA033EFBDF01DC9062,
- F525B3BB033EFBDF01DC9062,
- F525B3BC033EFBDF01DC9062,
- F525B3BD033EFBDF01DC9062,
- F576829E03493B6F01DC9062,
- F51925F2034C1D2501DC9062,
- F51925F3034C1D2501DC9062,
- F51925F4034C1D2501DC9062,
- F51925F5034C1D2501DC9062,
- F531E5CA03527DF501DC9062,
- F5ECAB8A035A798D01DC9062,
- F5ECAB8B035A798D01DC9062,
- F5ECAB8C035A798D01DC9062,
- F5ECAB8D035A798D01DC9062,
- F59B168D036E127001DC9062,
- F59B168E036E127001DC9062,
- F59B168F036E127001DC9062,
- F59B1690036E127001DC9062,
- F59B1691036E127001DC9062,
- F597EAE2036E210C01DC9062,
- F597EAE3036E210C01DC9062,
- F597EAE4036E210C01DC9062,
- F50F8E5F038B42BB01DC9062,
- F50F8E60038B42BB01DC9062,
- F50F8E61038B42BB01DC9062,
- F50F8E62038B42BB01DC9062,
+ 4CCAE6F503FAD35700C916F0,
+ 4CCAE6F603FAD35700C916F0,
+ 4C0152FB03FC191100C916F0,
+ 4C0152FC03FC191100C916F0,
+ 4C0152FD03FC191100C916F0,
+ 4C0152FE03FC191100C916F0,
+ 4C0152FF03FC191100C916F0,
+ 4C01530003FC191100C916F0,
+ 4C01530103FC191100C916F0,
+ 4C01530203FC191100C916F0,
+ 4C01530303FC191100C916F0,
+ 4C3917C603FC5E4E00C916F0,
);
};
NavCount = 1;
NavGeometry0 = {
- Frame = "{{0, 0}, {667, 651}}";
+ Frame = "{{0, 0}, {869, 865}}";
NavBarVisible = YES;
};
+ NavSplitVertical = NO;
};
SplitCount = 1;
- Tab0 = {
+ Tab1 = {
Debugger = {
Split0 = {
SplitCount = 2;
@@ -428,12 +408,12 @@
};
LauncherConfigVersion = 7;
};
- Tab1 = {
+ Tab2 = {
LauncherConfigVersion = 3;
Runner = {
};
};
- TabCount = 4;
+ TabCount = 5;
};
SplitCount = 1;
Tab1 = {
@@ -445,37 +425,41 @@
);
PBXWorkspaceGeometries = (
{
- ContentSize = "{930, 674}";
+ ContentSize = "{1132, 888}";
LeftSlideOut = {
ActiveTab = 3;
+ ActiveTabName = PBXTargetTreeModule;
Collapsed = NO;
- Frame = "{{0, 23}, {930, 651}}";
+ Frame = "{{0, 23}, {1132, 865}}";
Split0 = {
Collapsed = NO;
- Frame = "{{263, 0}, {667, 651}}";
+ Frame = "{{263, 0}, {869, 865}}";
Split0 = {
- Frame = "{{0, 0}, {667, 651}}";
+ Frame = "{{0, 0}, {869, 865}}";
};
SplitCount = 1;
Tab0 = {
+ Frame = "{{0, 0}, {681, 289}}";
+ };
+ Tab1 = {
Debugger = {
Collapsed = NO;
- Frame = "{{0, 0}, {681, 289}}";
+ Frame = "{{0, 0}, {681, 150}}";
Split0 = {
- Frame = "{{0, 24}, {681, 265}}";
+ Frame = "{{0, 24}, {681, 126}}";
Split0 = {
- Frame = "{{0, 0}, {333, 265}}";
+ Frame = "{{0, 0}, {333, 126}}";
};
Split1 = {
DebugVariablesTableConfiguration = (
Name,
- 82.80298,
+ 123,
Value,
- 104.074,
+ 85,
Summary,
- 126.123,
+ 105.123,
);
- Frame = "{{342, 0}, {339, 265}}";
+ Frame = "{{342, 0}, {339, 126}}";
};
SplitCount = 2;
};
@@ -489,30 +473,31 @@
TabCount = 2;
TabsVisible = YES;
};
- Frame = "{{0, 0}, {681, 289}}";
+ Frame = "{{0, 0}, {681, 120}}";
LauncherConfigVersion = 7;
};
- Tab1 = {
- Frame = "{{0, 0}, {681, 120}}";
+ Tab2 = {
+ Frame = "{{0, 0}, {681, 234}}";
LauncherConfigVersion = 3;
Runner = {
- Frame = "{{0, 0}, {681, 120}}";
+ Frame = "{{0, 0}, {681, 234}}";
};
};
- Tab2 = {
- BuildMessageFrame = "{{0, 0}, {683, 127}}";
- BuildTranscriptFrame = "{{0, 136}, {683, 100}}";
- Frame = "{{0, 0}, {681, 234}}";
- };
Tab3 = {
+ BuildMessageFrame = "{{0, 0}, {683, 205}}";
+ BuildTranscriptFrame = "{{0, 214}, {683, 2}}";
+ BuildTranscriptFrameExpanded = YES;
Frame = "{{0, 0}, {681, 238}}";
};
- TabCount = 4;
+ Tab4 = {
+ Frame = "{{0, 0}, {612, 295}}";
+ };
+ TabCount = 5;
TabsVisible = NO;
};
SplitCount = 1;
Tab0 = {
- Frame = "{{0, 0}, {260, 651}}";
+ Frame = "{{0, 0}, {260, 865}}";
GroupTreeTableConfiguration = (
SCMStatusColumn,
22,
@@ -543,7 +528,7 @@
Frame = "{{0, 0}, {217, 554}}";
};
Tab3 = {
- Frame = "{{0, 0}, {239, 651}}";
+ Frame = "{{0, 0}, {239, 865}}";
TargetTableConfiguration = (
ActiveObject,
16,
@@ -558,97 +543,47 @@
enabledColumn,
31,
);
- Frame = "{{0, 0}, {250, 651}}";
+ Frame = "{{0, 0}, {250, 810}}";
};
TabCount = 5;
TabsVisible = YES;
};
+ NavBarShownByDefault = YES;
StatusViewVisible = YES;
Template = 64ABBB4501FA494900185B06;
ToolbarVisible = YES;
- WindowLocation = "{38, 10}";
+ WindowLocation = "{-7, 60}";
},
);
- PBXWorkspaceStateSaveDate = 59461698;
+ PBXWorkspaceStateSaveDate = 67373224;
};
perUserProjectItems = {
- F50F8E5B038B42BB01DC9062 = F50F8E5B038B42BB01DC9062;
- F50F8E5C038B42BB01DC9062 = F50F8E5C038B42BB01DC9062;
- F50F8E5D038B42BB01DC9062 = F50F8E5D038B42BB01DC9062;
- F50F8E5E038B42BB01DC9062 = F50F8E5E038B42BB01DC9062;
- F50F8E5F038B42BB01DC9062 = F50F8E5F038B42BB01DC9062;
- F50F8E60038B42BB01DC9062 = F50F8E60038B42BB01DC9062;
- F50F8E61038B42BB01DC9062 = F50F8E61038B42BB01DC9062;
- F50F8E62038B42BB01DC9062 = F50F8E62038B42BB01DC9062;
- F50F8E63038B42BB01DC9062 = F50F8E63038B42BB01DC9062;
- F51925ED034C1D2501DC9062 = F51925ED034C1D2501DC9062;
- F51925F2034C1D2501DC9062 = F51925F2034C1D2501DC9062;
- F51925F3034C1D2501DC9062 = F51925F3034C1D2501DC9062;
- F51925F4034C1D2501DC9062 = F51925F4034C1D2501DC9062;
- F51925F5034C1D2501DC9062 = F51925F5034C1D2501DC9062;
- F525B3AB033EFBDF01DC9062 = F525B3AB033EFBDF01DC9062;
- F525B3AC033EFBDF01DC9062 = F525B3AC033EFBDF01DC9062;
- F525B3AD033EFBDF01DC9062 = F525B3AD033EFBDF01DC9062;
- F525B3AF033EFBDF01DC9062 = F525B3AF033EFBDF01DC9062;
- F525B3B0033EFBDF01DC9062 = F525B3B0033EFBDF01DC9062;
- F525B3B1033EFBDF01DC9062 = F525B3B1033EFBDF01DC9062;
- F525B3B3033EFBDF01DC9062 = F525B3B3033EFBDF01DC9062;
- F525B3B4033EFBDF01DC9062 = F525B3B4033EFBDF01DC9062;
- F525B3B5033EFBDF01DC9062 = F525B3B5033EFBDF01DC9062;
- F525B3B6033EFBDF01DC9062 = F525B3B6033EFBDF01DC9062;
- F525B3B7033EFBDF01DC9062 = F525B3B7033EFBDF01DC9062;
- F525B3B8033EFBDF01DC9062 = F525B3B8033EFBDF01DC9062;
- F525B3B9033EFBDF01DC9062 = F525B3B9033EFBDF01DC9062;
- F525B3BA033EFBDF01DC9062 = F525B3BA033EFBDF01DC9062;
- F525B3BB033EFBDF01DC9062 = F525B3BB033EFBDF01DC9062;
- F525B3BC033EFBDF01DC9062 = F525B3BC033EFBDF01DC9062;
- F525B3BD033EFBDF01DC9062 = F525B3BD033EFBDF01DC9062;
- F531E5C803527DF501DC9062 = F531E5C803527DF501DC9062;
- F531E5CA03527DF501DC9062 = F531E5CA03527DF501DC9062;
- F56F9699032D92AE01DC9062 = F56F9699032D92AE01DC9062;
- F56F969A032D92AE01DC9062 = F56F969A032D92AE01DC9062;
- F56F969C032D92AE01DC9062 = F56F969C032D92AE01DC9062;
- F56F969D032D92AE01DC9062 = F56F969D032D92AE01DC9062;
- F56F969E032D92AE01DC9062 = F56F969E032D92AE01DC9062;
- F56F96A0032D92AE01DC9062 = F56F96A0032D92AE01DC9062;
- F56F96A1032D92AE01DC9062 = F56F96A1032D92AE01DC9062;
- F56F96A2032D92AE01DC9062 = F56F96A2032D92AE01DC9062;
- F56F96A3032D92AE01DC9062 = F56F96A3032D92AE01DC9062;
- F56F96A4032D92AE01DC9062 = F56F96A4032D92AE01DC9062;
- F56F96A5032D92AE01DC9062 = F56F96A5032D92AE01DC9062;
- F56F96A6032D92AE01DC9062 = F56F96A6032D92AE01DC9062;
- F576829E03493B6F01DC9062 = F576829E03493B6F01DC9062;
- F5979A0E033DAD6701DC9062 = F5979A0E033DAD6701DC9062;
- F5979A10033DAD6701DC9062 = F5979A10033DAD6701DC9062;
- F5979A11033DAD6701DC9062 = F5979A11033DAD6701DC9062;
- F5979A12033DAD6701DC9062 = F5979A12033DAD6701DC9062;
- F597EADD036E210C01DC9062 = F597EADD036E210C01DC9062;
- F597EADE036E210C01DC9062 = F597EADE036E210C01DC9062;
- F597EADF036E210C01DC9062 = F597EADF036E210C01DC9062;
- F597EAE0036E210C01DC9062 = F597EAE0036E210C01DC9062;
- F597EAE2036E210C01DC9062 = F597EAE2036E210C01DC9062;
- F597EAE3036E210C01DC9062 = F597EAE3036E210C01DC9062;
- F597EAE4036E210C01DC9062 = F597EAE4036E210C01DC9062;
- F59B1688036E127001DC9062 = F59B1688036E127001DC9062;
- F59B1689036E127001DC9062 = F59B1689036E127001DC9062;
- F59B168A036E127001DC9062 = F59B168A036E127001DC9062;
- F59B168B036E127001DC9062 = F59B168B036E127001DC9062;
- F59B168C036E127001DC9062 = F59B168C036E127001DC9062;
- F59B168D036E127001DC9062 = F59B168D036E127001DC9062;
- F59B168E036E127001DC9062 = F59B168E036E127001DC9062;
- F59B168F036E127001DC9062 = F59B168F036E127001DC9062;
- F59B1690036E127001DC9062 = F59B1690036E127001DC9062;
- F59B1691036E127001DC9062 = F59B1691036E127001DC9062;
- F5ECAB86035A798D01DC9062 = F5ECAB86035A798D01DC9062;
- F5ECAB89035A798D01DC9062 = F5ECAB89035A798D01DC9062;
- F5ECAB8A035A798D01DC9062 = F5ECAB8A035A798D01DC9062;
- F5ECAB8B035A798D01DC9062 = F5ECAB8B035A798D01DC9062;
- F5ECAB8C035A798D01DC9062 = F5ECAB8C035A798D01DC9062;
- F5ECAB8D035A798D01DC9062 = F5ECAB8D035A798D01DC9062;
+ 4C0152F403FC191100C916F0 = 4C0152F403FC191100C916F0;
+ 4C0152F503FC191100C916F0 = 4C0152F503FC191100C916F0;
+ 4C0152F603FC191100C916F0 = 4C0152F603FC191100C916F0;
+ 4C0152F703FC191100C916F0 = 4C0152F703FC191100C916F0;
+ 4C0152F803FC191100C916F0 = 4C0152F803FC191100C916F0;
+ 4C0152F903FC191100C916F0 = 4C0152F903FC191100C916F0;
+ 4C0152FB03FC191100C916F0 = 4C0152FB03FC191100C916F0;
+ 4C0152FC03FC191100C916F0 = 4C0152FC03FC191100C916F0;
+ 4C0152FD03FC191100C916F0 = 4C0152FD03FC191100C916F0;
+ 4C0152FE03FC191100C916F0 = 4C0152FE03FC191100C916F0;
+ 4C0152FF03FC191100C916F0 = 4C0152FF03FC191100C916F0;
+ 4C01530003FC191100C916F0 = 4C01530003FC191100C916F0;
+ 4C01530103FC191100C916F0 = 4C01530103FC191100C916F0;
+ 4C01530203FC191100C916F0 = 4C01530203FC191100C916F0;
+ 4C01530303FC191100C916F0 = 4C01530303FC191100C916F0;
+ 4C3917C403FC5E4E00C916F0 = 4C3917C403FC5E4E00C916F0;
+ 4C3917C503FC5E4E00C916F0 = 4C3917C503FC5E4E00C916F0;
+ 4C3917C603FC5E4E00C916F0 = 4C3917C603FC5E4E00C916F0;
+ 4C3917C703FC5E4E00C916F0 = 4C3917C703FC5E4E00C916F0;
+ 4CCAE6F203FAD35700C916F0 = 4CCAE6F203FAD35700C916F0;
+ 4CCAE6F503FAD35700C916F0 = 4CCAE6F503FAD35700C916F0;
+ 4CCAE6F603FAD35700C916F0 = 4CCAE6F603FAD35700C916F0;
};
projectwideBuildSettings = {
- OBJROOT = /Volumes/CodeBits/jingham/Tcl/Objects;
- SYMROOT = /Volumes/CodeBits/jingham/Tcl/Products;
+ OBJROOT = "/Volumes/TheCloset/jingham/tcl-tk/Objects";
+ SYMROOT = "/Volumes/TheCloset/jingham/tcl-tk/Products";
};
wantsIndex = 1;
wantsSCM = -1;
@@ -664,8 +599,12 @@
};
F53756AB016C4DD401DC9062 = {
activeArgIndex = 2147483647;
+ activeArgIndices = (
+ );
argumentStrings = (
);
+ configStateDict = {
+ };
debuggerPlugin = GDBDebugging;
dylibVariantSuffix = "";
enableDebugStr = 1;
@@ -681,470 +620,10 @@
F548F8CE0313CEF0016F146B = {
activeExec = 0;
};
- F56F9699032D92AE01DC9062 = {
- fRef = F537555C016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXMouseEvent.c: GeneratePollingEvents";
- rLen = 0;
- rLoc = 13260;
- rType = 0;
- vrLen = 1112;
- vrLoc = 13089;
- };
- F56F969A032D92AE01DC9062 = {
- fRef = F5375568016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXXStubs.c: TkpCloseDisplay";
- rLen = 0;
- rLoc = 5311;
- rType = 0;
- vrLen = 1023;
- vrLoc = 4561;
- };
- F56F969C032D92AE01DC9062 = {
- fRef = F56F96AD032D92AE01DC9062;
- isa = PBXTextBookmark;
- name = "tclInt.h: 848";
- rLen = 17;
- rLoc = 32840;
- rType = 0;
- vrLen = 1623;
- vrLoc = 31910;
- };
- F56F969D032D92AE01DC9062 = {
- fRef = F56F96AE032D92AE01DC9062;
- isa = PBXTextBookmark;
- name = "tclDecls.h: 1000";
- rLen = 17;
- rLoc = 34621;
- rType = 0;
- vrLen = 1549;
- vrLoc = 33879;
- };
- F56F969E032D92AE01DC9062 = {
- fRef = F56F96AF032D92AE01DC9062;
- isa = PBXTextBookmark;
- name = "CarbonEventsCore.h: 746";
- rLen = 105;
- rLoc = 24230;
- rType = 0;
- vrLen = 1165;
- vrLoc = 23633;
- };
- F56F96A0032D92AE01DC9062 = {
- fRef = F5375568016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXXStubs.c: TkpCloseDisplay";
- rLen = 0;
- rLoc = 5311;
- rType = 0;
- vrLen = 1023;
- vrLoc = 4561;
- };
- F56F96A1032D92AE01DC9062 = {
- fRef = F537555D016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXNotify.c: 1153";
- rLen = 0;
- rLoc = 33125;
- rType = 0;
- vrLen = 1129;
- vrLoc = 0;
- };
- F56F96A2032D92AE01DC9062 = {
- fRef = F5375567016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXWm.c: TkpIsWindowFloating";
- rLen = 0;
- rLoc = 159603;
- rType = 0;
- vrLen = 951;
- vrLoc = 159038;
- };
- F56F96A3032D92AE01DC9062 = {
- fRef = F56F96AA032D92AE01DC9062;
- isa = PBXTextBookmark;
- name = "tclInt.h: 848";
- rLen = 17;
- rLoc = 32840;
- rType = 0;
- vrLen = 1623;
- vrLoc = 31910;
- };
- F56F96A4032D92AE01DC9062 = {
- fRef = F56F96AB032D92AE01DC9062;
- isa = PBXTextBookmark;
- name = "tclDecls.h: 1000";
- rLen = 17;
- rLoc = 34621;
- rType = 0;
- vrLen = 1549;
- vrLoc = 33879;
- };
- F56F96A5032D92AE01DC9062 = {
- fRef = F537555D016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXNotify.c: NotifierThreadProc";
- rLen = 0;
- rLoc = 31476;
- rType = 0;
- vrLen = 1952;
- vrLoc = 29655;
- };
- F56F96A6032D92AE01DC9062 = {
- fRef = F56F96AC032D92AE01DC9062;
- isa = PBXTextBookmark;
- name = "CarbonEventsCore.h: 746";
- rLen = 105;
- rLoc = 24230;
- rType = 0;
- vrLen = 1165;
- vrLoc = 23633;
- };
- F56F96AA032D92AE01DC9062 = {
- isa = PBXFileReference;
- name = tclInt.h;
- path = /Volumes/CodeBits/jingham/Tcl/Source/tcl/generic/tclInt.h;
- refType = 0;
- };
- F56F96AB032D92AE01DC9062 = {
- isa = PBXFileReference;
- name = tclDecls.h;
- path = /Volumes/CodeBits/jingham/Tcl/Source/tcl/generic/tclDecls.h;
- refType = 0;
- };
- F56F96AC032D92AE01DC9062 = {
- isa = PBXFileReference;
- name = CarbonEventsCore.h;
- path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/CarbonEventsCore.h;
- refType = 0;
- };
- F56F96AD032D92AE01DC9062 = {
- isa = PBXFileReference;
- name = tclInt.h;
- path = /Volumes/CodeBits/jingham/Tcl/Source/tcl/generic/tclInt.h;
- refType = 0;
- };
- F56F96AE032D92AE01DC9062 = {
- isa = PBXFileReference;
- name = tclDecls.h;
- path = /Volumes/CodeBits/jingham/Tcl/Source/tcl/generic/tclDecls.h;
- refType = 0;
- };
- F56F96AF032D92AE01DC9062 = {
- isa = PBXFileReference;
- name = CarbonEventsCore.h;
- path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/CarbonEventsCore.h;
- refType = 0;
- };
- F576829E03493B6F01DC9062 = {
- fRef = F5375560016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXScrlbr.c: TkpComputeScrollbarGeometry";
- rLen = 0;
- rLoc = 12482;
- rType = 0;
- vrLen = 1571;
- vrLoc = 12512;
- };
F5979A0A033DA68401DC9062 = {
fileReference = F5375560016C376E01DC9062;
isa = PBXFileBreakpoint;
lineNumber = 1082;
state = 2;
};
- F5979A0E033DAD6701DC9062 = {
- fRef = F5375580016C389901DC9062;
- isa = PBXTextBookmark;
- name = "tk3d.c: Tk_Get3DBorder";
- rLen = 32;
- rLoc = 6336;
- rType = 0;
- vrLen = 1226;
- vrLoc = 5724;
- };
- F5979A10033DAD6701DC9062 = {
- fRef = F537555D016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXNotify.c: TkMacOSXCreateFakeEvent";
- rLen = 6;
- rLoc = 33036;
- rType = 0;
- vrLen = 1083;
- vrLoc = 32042;
- };
- F5979A11033DAD6701DC9062 = {
- fRef = F5375560016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXScrlbr.c: UpdateControlValues";
- rLen = 0;
- rLoc = 37888;
- rType = 0;
- vrLen = 1558;
- vrLoc = 36106;
- };
- F5979A12033DAD6701DC9062 = {
- fRef = F5375580016C389901DC9062;
- isa = PBXTextBookmark;
- name = "tk3d.c: Tk_Get3DBorder";
- rLen = 32;
- rLoc = 6336;
- rType = 0;
- vrLen = 1226;
- vrLoc = 5724;
- };
- F597EADD036E210C01DC9062 = {
- fRef = F537554A016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXButton.c: TkMacOSXComputeControlParams";
- rLen = 22;
- rLoc = 46421;
- rType = 0;
- vrLen = 2037;
- vrLoc = 46050;
- };
- F597EADE036E210C01DC9062 = {
- fRef = F597EAED036E210D01DC9062;
- isa = PBXTextBookmark;
- name = "ControlDefinitions.h: 963";
- rLen = 17;
- rLoc = 38792;
- rType = 0;
- vrLen = 1564;
- vrLoc = 37892;
- };
- F597EADF036E210C01DC9062 = {
- fRef = F537557D016C37A601DC9062;
- isa = PBXTextBookmark;
- name = "tkScrollbar.h: 37";
- rLen = 0;
- rLoc = 817;
- rType = 0;
- vrLen = 973;
- vrLoc = 576;
- };
- F597EAE0036E210C01DC9062 = {
- fRef = F5375560016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXScrlbr.c: 53";
- rLen = 11;
- rLoc = 1330;
- rType = 0;
- vrLen = 608;
- vrLoc = 1121;
- };
- F597EAE2036E210C01DC9062 = {
- fRef = F537554A016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXButton.c: TkMacOSXComputeControlParams";
- rLen = 22;
- rLoc = 46421;
- rType = 0;
- vrLen = 2037;
- vrLoc = 46050;
- };
- F597EAE3036E210C01DC9062 = {
- fRef = F597EAEB036E210D01DC9062;
- isa = PBXTextBookmark;
- name = "ControlDefinitions.h: 963";
- rLen = 17;
- rLoc = 38792;
- rType = 0;
- vrLen = 1564;
- vrLoc = 37892;
- };
- F597EAE4036E210C01DC9062 = {
- fRef = F5375560016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXScrlbr.c: 53";
- rLen = 11;
- rLoc = 1330;
- rType = 0;
- vrLen = 608;
- vrLoc = 1121;
- };
- F597EAEB036E210D01DC9062 = {
- isa = PBXFileReference;
- name = ControlDefinitions.h;
- path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/ControlDefinitions.h;
- refType = 0;
- };
- F597EAED036E210D01DC9062 = {
- isa = PBXFileReference;
- name = ControlDefinitions.h;
- path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/ControlDefinitions.h;
- refType = 0;
- };
- F59B1688036E127001DC9062 = {
- fRef = F5375551016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXDraw.c: TkMacOSXSetUpGraphicsPort";
- rLen = 0;
- rLoc = 40093;
- rType = 0;
- vrLen = 1389;
- vrLoc = 39919;
- };
- F59B1689036E127001DC9062 = {
- fRef = F5375559016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXMenu.c: __VERSION__";
- rLen = 0;
- rLoc = 0;
- rType = 0;
- vrLen = 1121;
- vrLoc = 0;
- };
- F59B168A036E127001DC9062 = {
- fRef = F5375554016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXFont.c: __VERSION__";
- rLen = 0;
- rLoc = 0;
- rType = 0;
- vrLen = 1051;
- vrLoc = 0;
- };
- F59B168B036E127001DC9062 = {
- fRef = F5375548016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXAppInit.c: __VERSION__";
- rLen = 0;
- rLoc = 0;
- rType = 0;
- vrLen = 1158;
- vrLoc = 0;
- };
- F59B168C036E127001DC9062 = {
- fRef = F5375558016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXKeyEvent.c: GenerateKeyEvent";
- rLen = 28;
- rLoc = 12290;
- rType = 0;
- vrLen = 1480;
- vrLoc = 11578;
- };
- F59B168D036E127001DC9062 = {
- fRef = F5375551016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXDraw.c: TkMacOSXSetUpGraphicsPort";
- rLen = 0;
- rLoc = 40093;
- rType = 0;
- vrLen = 1389;
- vrLoc = 39919;
- };
- F59B168E036E127001DC9062 = {
- fRef = F5375559016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXMenu.c: __VERSION__";
- rLen = 0;
- rLoc = 0;
- rType = 0;
- vrLen = 1121;
- vrLoc = 0;
- };
- F59B168F036E127001DC9062 = {
- fRef = F5375554016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXFont.c: __VERSION__";
- rLen = 0;
- rLoc = 0;
- rType = 0;
- vrLen = 1051;
- vrLoc = 0;
- };
- F59B1690036E127001DC9062 = {
- fRef = F5375548016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXAppInit.c: __VERSION__";
- rLen = 0;
- rLoc = 0;
- rType = 0;
- vrLen = 1158;
- vrLoc = 0;
- };
- F59B1691036E127001DC9062 = {
- fRef = F5375558016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXKeyEvent.c: GenerateKeyEvent";
- rLen = 28;
- rLoc = 12290;
- rType = 0;
- vrLen = 1480;
- vrLoc = 11578;
- };
- F5ECAB86035A798D01DC9062 = {
- fRef = F5ECAB8F035A798E01DC9062;
- isa = PBXTextBookmark;
- name = "DefaultsDoc.rtf: 54";
- rLen = 0;
- rLoc = 4828;
- rType = 0;
- vrLen = 1484;
- vrLoc = 5646;
- };
- F5ECAB89035A798D01DC9062 = {
- fRef = F537554C016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXColor.c: TkSetMacColor";
- rLen = 0;
- rLoc = 2516;
- rType = 0;
- vrLen = 1144;
- vrLoc = 4392;
- };
- F5ECAB8A035A798D01DC9062 = {
- fRef = F5ECAB90035A798E01DC9062;
- isa = PBXTextBookmark;
- name = "DefaultsDoc.rtf: 54";
- rLen = 0;
- rLoc = 4828;
- rType = 0;
- vrLen = 1484;
- vrLoc = 5646;
- };
- F5ECAB8B035A798D01DC9062 = {
- fRef = F5375558016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXKeyEvent.c: GenerateKeyEvent";
- rLen = 28;
- rLoc = 12290;
- rType = 0;
- vrLen = 1516;
- vrLoc = 11579;
- };
- F5ECAB8C035A798D01DC9062 = {
- fRef = F537554A016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXButton.c: TkpDisplayButton";
- rLen = 0;
- rLoc = 9683;
- rType = 0;
- vrLen = 1616;
- vrLoc = 8380;
- };
- F5ECAB8D035A798D01DC9062 = {
- fRef = F537554C016C376E01DC9062;
- isa = PBXTextBookmark;
- name = "tkMacOSXColor.c: TkSetMacColor";
- rLen = 0;
- rLoc = 2516;
- rType = 0;
- vrLen = 1144;
- vrLoc = 4392;
- };
- F5ECAB8F035A798E01DC9062 = {
- isa = PBXFileReference;
- name = DefaultsDoc.rtf;
- path = "/Developer/Applications/Project Builder.app/Contents/Resources/DefaultsDoc.rtf";
- refType = 0;
- };
- F5ECAB90035A798E01DC9062 = {
- isa = PBXFileReference;
- name = DefaultsDoc.rtf;
- path = "/Developer/Applications/Project Builder.app/Contents/Resources/DefaultsDoc.rtf";
- refType = 0;
- };
}
diff --git a/macosx/tkMacOSXEvent.c b/macosx/tkMacOSXEvent.c
index a55d0fd..f0448e6 100644
--- a/macosx/tkMacOSXEvent.c
+++ b/macosx/tkMacOSXEvent.c
@@ -1,10 +1,7 @@
/*
* tkMacOSXEvent.c --
*
- * This file contains most of the X calls called by Tk. Many of
- * these calls are just stubs and either don't make sense on the
- * Macintosh or thier implamentation just doesn't do anything. Other
- * calls will eventually be moved into other files.
+ * This file contains the basic Mac OS X Event handling routines.
*
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
* Copyright 2001, Apple Computer, Inc.
@@ -12,57 +9,47 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkMacOSXEvent.c,v 1.2 2002/08/31 06:12:29 das Exp $
+ * RCS: @(#) $Id: tkMacOSXEvent.c,v 1.3 2003/02/19 19:27:46 wolfsuit Exp $
*/
#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <pthread.h>
-#include <sys/types.h>
-#include <sys/ioctl.h>
#include "tkMacOSXInt.h"
#include "tkMacOSXEvent.h"
#include "tkMacOSXDebug.h"
-#define TK_MAC_DEBUG 1
-
/*
- * The following are undocumented event classes
- *
+ * Enable this define to get debug printing for events not handled.
*/
-enum {
- kEventClassUser = 'user',
- kEventClassCgs = 'cgs ',
-};
-
-/*
- * The following are undocumented event kinds
- *
- */
-enum {
- kEventMouse8 = 8,
- kEventMouse9 = 9,
- kEventApp103 = 103
-};
-EventRef TkMacOSXCreateFakeEvent ();
+ /*#define TK_MAC_DEBUG 1 */
/*
* Forward declarations of procedures used in this file.
*/
-static int ReceiveAndProcessEvent _ANSI_ARGS_(());
+
+static int TkMacOSXProcessAppleEvent(
+ TkMacOSXEvent * eventPtr, MacEventStatus * statusPtr);
+static int TkMacOSXProcessEvent(
+ TkMacOSXEvent * eventPtr, MacEventStatus * statusPtr);
+
+static int ReceiveAndProcessEvent (void);
+
+/*
+ * Global data used in this file.
+ */
static EventTargetRef targetRef;
+
/*
*----------------------------------------------------------------------
*
* tkMacOSXFlushWindows --
*
- * This routine flushes all the Carbon windows of the application
- * It is called by the setup procedure for the Tcl/Carbon event source
+ * This routine flushes all the Carbon windows of the application. It
+ * is called by the setup procedure for the Tcl/Carbon event source.
+ *
* Results:
* None.
*
@@ -84,22 +71,24 @@ tkMacOSXFlushWindows ()
}
wRef=GetNextWindow(wRef);
}
-}
+}
+
/*
*----------------------------------------------------------------------
*
* TkMacOSXCountAndProcessMacEvents --
*
- * This routine receives any Carbon events that aare in the
- * queue and converts them to tk events
- * It is called by the event set-up and check routines
+ * This routine receives any Carbon events that are in the queue and
+ * converts them to Tk events. It is called by the event set-up and
+ * check routines
+ *
* Results:
* The number of events in the queue.
*
* Side effects:
- * Tells the Window Manager to deliver events to the event
- * queue of the current thread.
- * Receives any Carbon events on the queue and converts them to tk events
+ * Tells the Window Manager to deliver events to the event queue of the
+ * current thread. Receives any Carbon events on the queue and converts
+ * them to Tk events.
*
*----------------------------------------------------------------------
*/
@@ -118,7 +107,8 @@ TkMacOSXCountAndProcessMacEvents()
}
}
return eventCount;
-}
+}
+
/*
*----------------------------------------------------------------------
*
@@ -127,11 +117,11 @@ TkMacOSXCountAndProcessMacEvents()
* This processes Apple events
*
* Results:
- * 0 on success
- * -1 on failure
+ * 0 on success
+ * -1 on failure
*
* Side effects:
- * Calls the Tk high-level event handler
+ * Calls the Tk high-level event handler
*
*----------------------------------------------------------------------
*/
@@ -152,8 +142,6 @@ TkMacOSXProcessAppleEvent(TkMacOSXEvent * eventPtr, MacEventStatus * statusPtr)
CarbonEventToAscii(eventPtr->eventRef, buf1),
ClassicEventToAscii(&eventRecord,buf2), err);
statusPtr->err = 1;
- } else {
- statusPtr->handledByTk = 1;
}
} else {
statusPtr->err = 1;
@@ -162,6 +150,7 @@ TkMacOSXProcessAppleEvent(TkMacOSXEvent * eventPtr, MacEventStatus * statusPtr)
return 0;
}
+
/*
*----------------------------------------------------------------------
*
@@ -169,6 +158,12 @@ TkMacOSXProcessAppleEvent(TkMacOSXEvent * eventPtr, MacEventStatus * statusPtr)
*
* This dispatches a filtered Carbon event to the appropriate handler
*
+ * Note on MacEventStatus.stopProcessing: Please be conservative in the
+ * individual handlers and don't assume the event is fully handled
+ * unless you *really* need to ensure that other handlers don't see the
+ * event anymore. Some OS manager or library might be interested in
+ * events even after they are already handled on the Tk level.
+ *
* Results:
* 0 on success
* -1 on failure
@@ -198,10 +193,8 @@ TkMacOSXProcessEvent(TkMacOSXEvent * eventPtr, MacEventStatus * statusPtr)
case kEventClassAppleEvent:
TkMacOSXProcessAppleEvent(eventPtr, statusPtr);
break;
- case kEventClassCgs:
- case kEventClassUser:
case kEventClassWish:
- statusPtr->handledByTk = 1;
+ statusPtr->stopProcessing = 1;
break;
default:
#ifdef TK_MAC_DEBUG
@@ -217,21 +210,22 @@ TkMacOSXProcessEvent(TkMacOSXEvent * eventPtr, MacEventStatus * statusPtr)
}
return 0;
}
+
/*
*----------------------------------------------------------------------
*
* ReceiveAndProcessEvent --
*
- * This receives a carbon event and converts it to a tk event
+ * This receives a carbon event and converts it to a Tk event
*
* Results:
* 0 on success
* Mac OS error number on failure
*
* Side effects:
- * This receives the next Carbon event
- * and converts it to the appropriate tk event
+ * This receives the next Carbon event and converts it to the
+ * appropriate Tk event
*
*----------------------------------------------------------------------
*/
@@ -258,13 +252,17 @@ ReceiveAndProcessEvent()
macEvent.eKind = GetEventKind(macEvent.eventRef);
bzero(&eventStatus, sizeof(eventStatus));
TkMacOSXProcessEvent(&macEvent,&eventStatus);
- if (!eventStatus.handledByTk) {
+ if (!eventStatus.stopProcessing) {
if (!targetRef) {
targetRef=GetEventDispatcherTarget();
}
err= SendEventToEventTarget(macEvent.eventRef,targetRef);
- if (err != noErr /* && err != eventNotHandledErr */) {
+ if (err != noErr
+#if !TK_MAC_DEBUG
+ && err != eventNotHandledErr
+#endif
+ ) {
fprintf(stderr,
"RCNE SendEventToEventTarget (%s) failed, %d\n",
CarbonEventToAscii(macEvent.eventRef,buf ),err);
diff --git a/macosx/tkMacOSXEvent.h b/macosx/tkMacOSXEvent.h
index 2ce339b..4c5ad59 100644
--- a/macosx/tkMacOSXEvent.h
+++ b/macosx/tkMacOSXEvent.h
@@ -62,7 +62,7 @@ enum {
};
typedef struct {
- int handledByTk;
+ int stopProcessing;
int err;
char errMsg[1024];
} MacEventStatus;
@@ -83,4 +83,11 @@ int TkMacOSXProcessWindowEvent(TkMacOSXEvent * e, MacEventStatus * statusPtr);
int TkMacOSXProcessKeyboardEvent(TkMacOSXEvent * e, MacEventStatus * statusPtr);
int TkMacOSXProcessApplicationEvent(TkMacOSXEvent * e, MacEventStatus * statusPtr);
+int TkMacOSXKeycodeToUnicode(
+ UniChar * uniChars, int maxChars,
+ EventKind eKind,
+ UInt32 keycode, UInt32 modifiers,
+ UInt32 * deadKeyStatePtr);
+
+
#endif
diff --git a/macosx/tkMacOSXKeyEvent.c b/macosx/tkMacOSXKeyEvent.c
index 78a37eb..eee1844 100644
--- a/macosx/tkMacOSXKeyEvent.c
+++ b/macosx/tkMacOSXKeyEvent.c
@@ -1,7 +1,7 @@
/*
* tkMacOSXKeyEvent.c --
*
- * This file implements functions that decode & handle keyboard events
+ * This file implements functions that decode & handle keyboard events
* on MacOS X.
*
* Copyright 2001, Apple Computer, Inc.
@@ -66,35 +66,51 @@ typedef struct {
UInt32 message;
} KeyEventData;
-static Tk_Window gGrabWinPtr = NULL; /* Current grab window, NULL if no grab. */
+static Tk_Window gGrabWinPtr = NULL; /* Current grab window,
+ * NULL if no grab. */
static Tk_Window gKeyboardWinPtr = NULL; /* Current keyboard grab window. */
-static UInt32 deadKeyState = 0;
+static UInt32 deadKeyStateUp = 0; /* The deadkey state for the current
+ * sequence of keyup events or 0 if
+ * not in a deadkey sequence */
+static UInt32 deadKeyStateDown = 0; /* Ditto for keydown */
/*
* Declarations for functions used only in this file.
*/
-static int GenerateKeyEvent _ANSI_ARGS_(( EventKind eKind,
+static int InitKeyData(
+ KeyEventData * keyEventDataPtr);
+
+static int InitKeyEvent(
+ XEvent * eventPtr,
KeyEventData * e,
- Window window,
UInt32 savedKeyCode,
- UInt32 savedModifiers));
+ UInt32 savedModifiers);
+static int GenerateKeyEvent (
+ UInt32 eKind,
+ KeyEventData * e,
+ UInt32 savedKeyCode,
+ UInt32 savedModifiers,
+ const UniChar * chars, int numChars);
static int GetKeyboardLayout (
- Ptr * resource );
-
-static int DecodeViaUnicodeResource(
- Ptr uchr,
- EventKind eKind,
- const KeyEventData * e,
- XEvent * event );
-static int DecodeViaKCHRResource(
- Ptr kchr,
- const KeyEventData * e,
- XEvent * event );
-
+ Ptr * resource);
+
+static int KeycodeToUnicodeViaUnicodeResource(
+ UniChar * uniChars, int maxChars,
+ Ptr uchr,
+ EventKind eKind,
+ UInt32 keycode, UInt32 modifiers,
+ UInt32 * deadKeyStatePtr);
+
+static int KeycodeToUnicodeViaKCHRResource(
+ UniChar * uniChars, int maxChars,
+ Ptr kchr,
+ EventKind eKind,
+ UInt32 keycode, UInt32 modifiers,
+ UInt32 * deadKeyStatePtr);
/*
*----------------------------------------------------------------------
@@ -119,22 +135,22 @@ int TkMacOSXProcessKeyboardEvent(
{
static UInt32 savedKeyCode = 0;
static UInt32 savedModifiers = 0;
+ static UniChar savedChar = 0;
OSStatus status;
KeyEventData keyEventData;
- Window window;
+#if 0
MenuRef menuRef;
MenuItemIndex menuItemIndex;
+#endif
int eventGenerated;
-
- statusPtr->handledByTk = 1;
- keyEventData.whichWindow = FrontNonFloatingWindow();
- if (keyEventData.whichWindow == NULL) {
- return 0;
+ UniChar uniChars[5]; /* make this larger, if needed */
+ UInt32 uniCharsLen;
+
+ if (!InitKeyData(&keyEventData)) {
+ statusPtr->err = 1;
+ return false;
}
- GetMouse(&keyEventData.local);
- keyEventData.global = keyEventData.local;
- LocalToGlobal(&keyEventData.global);
- keyEventData.state = TkMacOSXButtonKeyState();
+
#if 0
/*
* This block of code seems like a good idea, to trap
@@ -163,7 +179,7 @@ int TkMacOSXProcessKeyboardEvent(
int selection;
menuID = GetMenuID(menuRef);
- selection = (menuID << 16 ) | menuItemIndex;
+ selection = (menuID << 16) | menuItemIndex;
GetKeys(theKeys);
oldMode = Tcl_SetServiceMode(TCL_SERVICE_ALL);
@@ -173,10 +189,10 @@ int TkMacOSXProcessKeyboardEvent(
* Handle -postcommand
*/
- TkMacOSXPreprocessMenu();
- TkMacOSXHandleMenuSelect(selection, theKeys[1] & 4);
- Tcl_SetServiceMode(oldMode);
- return 0; /* TODO: may not be on event on queue. */
+ TkMacOSXPreprocessMenu();
+ TkMacOSXHandleMenuSelect(selection, theKeys[1] & 4);
+ Tcl_SetServiceMode(oldMode);
+ return 0; /* TODO: may not be on event on queue. */
}
#endif
@@ -186,9 +202,9 @@ int TkMacOSXProcessKeyboardEvent(
sizeof(keyEventData.ch), NULL,
&keyEventData.ch);
if (status != noErr) {
- fprintf(stderr, "Failed to retrieve KeyMacCharCodes\n" );
+ fprintf (stderr, "Failed to retrieve KeyMacCharCodes\n");
statusPtr->err = 1;
- return 1;
+ return false;
}
status = GetEventParameter(eventPtr->eventRef,
kEventParamKeyCode,
@@ -196,9 +212,9 @@ int TkMacOSXProcessKeyboardEvent(
sizeof(keyEventData.keyCode), NULL,
&keyEventData.keyCode);
if (status != noErr) {
- fprintf(stderr, "Failed to retrieve KeyCode\n" );
+ fprintf (stderr, "Failed to retrieve KeyCode\n");
statusPtr->err = 1;
- return 1;
+ return false;
}
status = GetEventParameter(eventPtr->eventRef,
kEventParamKeyModifiers,
@@ -206,43 +222,102 @@ int TkMacOSXProcessKeyboardEvent(
sizeof(keyEventData.keyModifiers), NULL,
&keyEventData.keyModifiers);
if (status != noErr) {
- fprintf(stderr, "Failed to retrieve KeyModifiers\n" );
+ fprintf (stderr, "Failed to retrieve KeyModifiers\n");
statusPtr->err = 1;
- return 1;
+ return false;
+ }
+
+ switch (eventPtr->eKind) {
+ case kEventRawKeyUp:
+ case kEventRawKeyDown:
+ case kEventRawKeyRepeat:
+ {
+ UInt32 *deadKeyStatePtr;
+
+ if (kEventRawKeyDown == eventPtr->eKind) {
+ deadKeyStatePtr = &deadKeyStateDown;
+ } else {
+ deadKeyStatePtr = &deadKeyStateUp;
+ }
+
+ uniCharsLen = TkMacOSXKeycodeToUnicode(
+ uniChars, sizeof(uniChars)/sizeof(*uniChars),
+ eventPtr->eKind,
+ keyEventData.keyCode, keyEventData.keyModifiers,
+ deadKeyStatePtr);
+ }
+ }
+
+ if (kEventRawKeyUp == eventPtr->eKind) {
+ /*
+ * For some reason the deadkey processing for KeyUp doesn't work
+ * sometimes, so we fudge and use the last detected KeyDown.
+ */
+
+ if((0 == uniCharsLen) && (0 != savedChar)) {
+ uniChars[0] = savedChar;
+ uniCharsLen = 1;
+ }
+
+ /*
+ * Suppress keyup events while we have a deadkey sequence on keydown.
+ * We still *do* want to collect deadkey state in this situation if
+ * the system provides it, that's why we do this only after
+ * TkMacOSXKeycodeToUnicode().
+ */
+
+ if (0 != deadKeyStateDown) {
+ uniCharsLen = 0;
+ }
}
+
keyEventData.message = keyEventData.ch|(keyEventData.keyCode << 8);
- window = TkMacOSXGetXWindow(keyEventData.whichWindow);
-
- eventGenerated = GenerateKeyEvent(eventPtr->eKind, &keyEventData,
- window, savedKeyCode, savedModifiers);
+ eventGenerated = GenerateKeyEvent(
+ eventPtr->eKind, &keyEventData,
+ savedKeyCode, savedModifiers,
+ uniChars, uniCharsLen);
+
savedModifiers = keyEventData.keyModifiers;
+
+ if ((kEventRawKeyDown == eventPtr->eKind) && (uniCharsLen > 0)) {
+ savedChar = uniChars[0];
+ } else {
+ savedChar = 0;
+ }
+ statusPtr->stopProcessing = 1;
+
if (eventGenerated == 0) {
- savedKeyCode = keyEventData.message;
- return false;
+ savedKeyCode = keyEventData.message;
+ return false;
} else if (eventGenerated == -1) {
- savedKeyCode = 0;
- return false;
+ savedKeyCode = 0;
+ statusPtr->stopProcessing = 0;
+ return false;
} else {
- savedKeyCode = 0;
- return true;
+ savedKeyCode = 0;
+ return true;
}
}
-
+
/*
*----------------------------------------------------------------------
*
* GenerateKeyEvent --
*
- * Given Macintosh keyUp, keyDown & autoKey events this function
- * generates the appropiate X key events. The window that is passed
- * should represent the frontmost window - which will recieve the
- * event.
+ * Given Macintosh keyUp, keyDown & autoKey events (in their "raw"
+ * form) and a list of unicode characters this function generates the
+ * appropriate X key events.
+ *
+ * Parameter eKind is a raw keyboard event. e contains the data sent
+ * with the event. savedKeyCode and savedModifiers contain the values
+ * from the last event that came before (see
+ * TkMacOSXProcessKeyboardEvent()). chars/numChars has the Unicode
+ * characters for which we want to create events.
*
* Results:
- * 1 if an event was generated, 0 if we are waiting for another
- * byte of a multi-byte sequence, and -1 for any other error.
+ * 1 if an event was generated, -1 for any error.
*
* Side effects:
* Additional events may be place on the Tk event queue.
@@ -251,14 +326,173 @@ int TkMacOSXProcessKeyboardEvent(
*/
static int
-GenerateKeyEvent( EventKind eKind,
+GenerateKeyEvent(
+ UInt32 eKind,
KeyEventData * e,
- Window window,
UInt32 savedKeyCode,
- UInt32 savedModifiers )
+ UInt32 savedModifiers,
+ const UniChar * chars, int numChars)
{
- Tk_Window tkwin;
XEvent event;
+ int i;
+
+ if (-1 == InitKeyEvent(&event, e, savedKeyCode, savedModifiers)) {
+ return -1;
+ }
+
+ if (kEventRawKeyModifiersChanged == eKind) {
+
+ if (savedModifiers > e->keyModifiers) {
+ event.xany.type = KeyRelease;
+ } else {
+ event.xany.type = KeyPress;
+ }
+
+ /*
+ * Use special '-1' to signify a special keycode to our
+ * platform specific code in tkMacOSXKeyboard.c. This is
+ * rather like what happens on Windows.
+ */
+
+ event.xany.send_event = -1;
+
+ /*
+ * Set keycode (which was zero) to the changed modifier
+ */
+
+ event.xkey.keycode = (e->keyModifiers ^ savedModifiers);
+ Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
+
+ } else {
+
+ for (i=0; i<numChars; ++i) {
+
+ /*
+ * Encode one char in the trans_chars array that was already
+ * introduced for MS Windows. Don't encode the string, if it is
+ * a control character but was not generated with a real control
+ * modifier. Such control characters get generated by KeyTrans()
+ * for special keys, but we rather want to identify those by
+ * their KeySyms.
+ */
+
+ event.xkey.trans_chars[0] = 0;
+ if ((controlKey & e->keyModifiers) || (chars[i] >= ' ')) {
+ int done;
+ done = Tcl_UniCharToUtf(chars[i],event.xkey.trans_chars);
+ event.xkey.trans_chars[done] = 0;
+ }
+
+ switch(eKind) {
+ case kEventRawKeyDown:
+ event.xany.type = KeyPress;
+ Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
+ break;
+ case kEventRawKeyUp:
+ event.xany.type = KeyRelease;
+ Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
+ break;
+ case kEventRawKeyRepeat:
+ event.xany.type = KeyRelease;
+ Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
+ event.xany.type = KeyPress;
+ Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
+ break;
+ default:
+ fprintf (stderr,
+ "GenerateKeyEvent(): Invalid parameter eKind %d\n",
+ (int) eKind);
+ return -1;
+ }
+ }
+ }
+
+ return 1;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * InitKeyData --
+ *
+ * This routine initializes a KeyEventData structure by asking the OS
+ * and Tk for all the global information needed here.
+ *
+ * Results:
+ * True if the current front window can be found in Tk data structures
+ * - false otherwise.
+ *
+ * Side Effects:
+ * None
+ *
+ *----------------------------------------------------------------------
+ */
+static int
+InitKeyData(KeyEventData * keyEventDataPtr)
+{
+ memset (keyEventDataPtr, 0, sizeof(*keyEventDataPtr));
+
+ keyEventDataPtr->whichWindow = FrontNonFloatingWindow();
+ if (keyEventDataPtr->whichWindow == NULL) {
+ return false;
+ }
+ GetMouse(&keyEventDataPtr->local);
+ keyEventDataPtr->global = keyEventDataPtr->local;
+ LocalToGlobal(&keyEventDataPtr->global);
+ keyEventDataPtr->state = TkMacOSXButtonKeyState();
+
+ return true;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * InitKeyEvent --
+ *
+ * Initialize an XEvent structure by asking Tk for global information.
+ * Also uses a KeyEventData structure and other current state.
+ *
+ * Results:
+ * 1 on success, -1 for any error.
+ *
+ * Side effects:
+ * Additional events may be place on the Tk event queue.
+ *
+ *----------------------------------------------------------------------
+ */
+
+/*
+ * We have a general problem here. How do we handle 'Option-char'
+ * keypresses? The problem is that we might want to bind to some of these
+ * (e.g. Cmd-Opt-d is 'uncomment' in Alpha). OTOH Option-d actually produces
+ * a real character on MacOS, namely a mathematical delta.
+ *
+ * The current behaviour is that a binding goes by the combinations of
+ * modifiers and base keysym, that is Option-d. The string value of the
+ * event is the mathematical delta character, so if no binding calls
+ * [break], the text widget will insert that character.
+ *
+ * Note that this is similar to control combinations on all platforms. They
+ * also generate events that have the base character as keysym and a real
+ * control character as character value. So Ctrl+C gets us the keysym XK_C,
+ * the modifier Control (so you can bind <Control-C>) and a string value as
+ * "\u0003".
+ *
+ * For a different solutions we may want for the event to contain keysyms for
+ * *both* the 'Opt-d' side of things and the mathematical delta. Then a
+ * binding on Opt-d will trigger, but a binding on mathematical delta would
+ * also trigger. This would require changes in the core, though.
+ */
+
+static int
+InitKeyEvent(
+ XEvent * eventPtr,
+ KeyEventData * e,
+ UInt32 savedKeyCode,
+ UInt32 savedModifiers)
+{
+ Window window;
+ Tk_Window tkwin;
TkDisplay *dispPtr;
/*
@@ -267,6 +501,7 @@ GenerateKeyEvent( EventKind eKind,
* that owns the focus.
*/
+ window = TkMacOSXGetXWindow(e->whichWindow);
dispPtr = TkGetDisplayList();
tkwin = Tk_IdToWindow(dispPtr->display, window);
@@ -281,127 +516,58 @@ GenerateKeyEvent( EventKind eKind,
return -1;
}
- event.xkey.trans_chars[0] = 0;
-
- if (0 != e->ch) {
- Ptr resource = NULL;
- if (GetKeyboardLayout(&resource)) {
- if (0 == DecodeViaUnicodeResource(resource,eKind,e,&event))
- return 0;
- } else {
- if (0 == DecodeViaKCHRResource(resource,e,&event))
- return 0;
- }
- }
-
- event.xany.send_event = False;
- event.xkey.same_screen = true;
- event.xkey.subwindow = None;
- event.xkey.time = TkpGetMS();
-
- event.xkey.x_root = e->global.h;
- event.xkey.y_root = e->global.v;
- Tk_TopCoordsToWindow(tkwin, e->local.h, e->local.v,
- &event.xkey.x, &event.xkey.y);
-
- /*
- * Now, we may have a problem here. How do we handle 'Option-char'
- * keypresses? The problem is that we might want to bind to some of
- * these (e.g. Cmd-Opt-d is 'uncomment' in Alpha), but Option-d
- * generates a 'delta' symbol with some keycode unrelated to 'd', and so
- * the binding never triggers. In any case, the delta that is produced
- * is never mapped to an 'XK_Greek_DELTA' keysym so bindings on that
- * won't work either (a general KeyPress binding will of course trigger,
- * but a specific binding on XK_Greek_DELTA will not).
- *
- * I think what we want is for the event to contain information on
- * both the 'Opt-d' side of things and the 'delta'. Then a binding
- * on Opt-d will trigger, but the ascii/string representation of the
- * event will be a delta.
- *
- * A different way to look at this is that 'Opt-d' is delta, but that
- * Command-Opt-d is nothing to do with delta, but I'm not sure that is
- * helpful.
- *
- * Also some keypresses (Opt-e) are dead-keys to add accents to
- * letters. We don't handle them yet.
- *
- * Help needed!
- */
- event.xkey.keycode = e->ch |
+ eventPtr->xany.send_event = false;
+ eventPtr->xany.serial = Tk_Display(tkwin)->request;
+
+ eventPtr->xkey.same_screen = true;
+ eventPtr->xkey.subwindow = None;
+ eventPtr->xkey.time = TkpGetMS();
+ eventPtr->xkey.x_root = e->global.h;
+ eventPtr->xkey.y_root = e->global.v;
+ eventPtr->xkey.window = Tk_WindowId(tkwin);
+ eventPtr->xkey.display = Tk_Display(tkwin);
+ eventPtr->xkey.root = XRootWindow(Tk_Display(tkwin), 0);
+ eventPtr->xkey.state = e->state;
+ eventPtr->xkey.trans_chars[0] = 0;
+
+ Tk_TopCoordsToWindow(
+ tkwin, e->local.h, e->local.v,
+ &eventPtr->xkey.x, &eventPtr->xkey.y);
+
+ eventPtr->xkey.keycode = e->ch |
((savedKeyCode & charCodeMask) << 8) |
((e->message&keyCodeMask) << 8);
-
- event.xany.serial = Tk_Display(tkwin)->request;
- event.xkey.window = Tk_WindowId(tkwin);
- event.xkey.display = Tk_Display(tkwin);
- event.xkey.root = XRootWindow(Tk_Display(tkwin), 0);
- event.xkey.state = e->state;
-
- switch(eKind) {
- case kEventRawKeyDown:
- event.xany.type = KeyPress;
- Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
- break;
- case kEventRawKeyUp:
- event.xany.type = KeyRelease;
- Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
- break;
- case kEventRawKeyRepeat:
- event.xany.type = KeyRelease;
- Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
- event.xany.type = KeyPress;
- Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
- break;
- case kEventRawKeyModifiersChanged:
- if (savedModifiers > e->keyModifiers) {
- event.xany.type = KeyRelease;
- } else {
- event.xany.type = KeyPress;
- }
- /*
- * Use special '-1' to signify a special keycode to
- * our platform specific code in tkMacOSXKeyboard.c.
- * This is rather like what happens on Windows.
- */
- event.xany.send_event = -1;
- /* Set keycode (which was zero) to the changed modifier */
- event.xkey.keycode = (e->keyModifiers ^ savedModifiers);
- Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
- break;
- default:
- break;
- }
+
return 1;
}
+
/*
*----------------------------------------------------------------------
*
* GetKeyboardLayout --
*
- * Queries the OS for a pointer to a keyboard resource.
+ * Queries the OS for a pointer to a keyboard resource.
*
- * NB (benny): This function is supposed to work with the
- * keyboard layout switch menu that we have in 10.2. Currently
- * the menu is not enabled at all for wish, so I can not really
- * test it. We will probably have to use real TSM-style event
- * handling to get all those goodies, but I haven't figured out
- * those bits yet.
+ * This function works with the keyboard layout switch menu that
+ * we have in 10.2.
*
* Results:
- * 1 if there is returned a Unicode 'uchr' resource in
- * "*resource", 0 if it is a classic 'KCHR' resource.
+ * 1 if there is returned a Unicode 'uchr' resource in
+ * "*resource", 0 if it is a classic 'KCHR' resource. A pointer
+ * to the actual resource data goes into *resource.
*
* Side effects:
- * Sets some internal static variables.
+ * Sets some internal static variables.
*
*----------------------------------------------------------------------
*/
+
static int
-GetKeyboardLayout ( Ptr * resource )
+GetKeyboardLayout (Ptr * resource)
{
- static SInt16 lastKeyLayoutID = -1; /* should be safe */
+ static Boolean initialized = false;
+ static SInt16 lastKeyLayoutID = -1;
static Handle uchrHnd = NULL;
static Handle KCHRHnd = NULL;
@@ -411,182 +577,307 @@ GetKeyboardLayout ( Ptr * resource )
keyScript = GetScriptManagerVariable(smKeyScript);
keyLayoutID = GetScriptVariable(keyScript,smScriptKeys);
- if (lastKeyLayoutID != keyLayoutID) {
- deadKeyState = 0;
- lastKeyLayoutID = keyLayoutID;
- uchrHnd = GetResource('uchr',keyLayoutID);
- if (NULL == uchrHnd) {
- KCHRHnd = GetResource('KCHR',keyLayoutID);
- }
+ if (!initialized || (lastKeyLayoutID != keyLayoutID)) {
+ initialized = true;
+ deadKeyStateUp = deadKeyStateDown = 0;
+ lastKeyLayoutID = keyLayoutID;
+ uchrHnd = GetResource('uchr',keyLayoutID);
+ if (NULL == uchrHnd) {
+ KCHRHnd = GetResource('KCHR',keyLayoutID);
+ }
+ if ((NULL == uchrHnd) && (NULL == KCHRHnd)) {
+ initialized = false;
+ fprintf (stderr,
+ "GetKeyboardLayout(): "
+ "Can't get a keyboard layout for layout %d "
+ "(error code %d)?\n",
+ (int) keyLayoutID, (int) ResError());
+ *resource = (Ptr) GetScriptManagerVariable(smKCHRCache);
+ fprintf (stderr,
+ "GetKeyboardLayout(): Trying the cache: %p\n",
+ *resource);
+ return 0;
+ }
}
if (NULL != uchrHnd) {
- *resource = *uchrHnd;
- return 1;
+ *resource = *uchrHnd;
+ return 1;
} else {
- *resource = *KCHRHnd;
- return 0;
+ *resource = *KCHRHnd;
+ return 0;
}
}
+
/*
*----------------------------------------------------------------------
*
- * DecodeViaUnicodeResource --
+ * KeycodeToUnicodeViaUnicodeResource --
*
- * Given MacOS key event data this function generates the UTF-8
- * characters. It does this using a 'uchr' and the
- * UCKeyTranslate API.
+ * Given MacOS key event data this function generates the Unicode
+ * characters. It does this using a 'uchr' and the UCKeyTranslate
+ * API.
*
- * NB (benny): This function is not tested at all, because my
- * system does not actually return a 'uchr' resource in
- * GetKeyboardLayout currently. We probably need to do
- * TSM-style event handling to get keyboard layout switching
- * first.
+ * The parameter deadKeyStatePtr can be NULL, if no deadkey handling
+ * is needed.
+ *
+ * Tested and known to work with US, Hebrew, Greek and Russian layouts
+ * as well as "Unicode Hex Input".
*
* Results:
- * 1 if the data was generated, 0 if we are waiting for another
- * byte of a dead-key sequence.
+ * The number of characters generated if any, 0 if we are waiting for
+ * another byte of a dead-key sequence. Fills in the uniChars array
+ * with a Unicode string.
*
- * Side effects:
- * Sets the trans_chars array in the XEvent->xkey structure.
+ * Side Effects:
+ * None
*
*----------------------------------------------------------------------
*/
static int
-DecodeViaUnicodeResource(
- Ptr uchr,
- EventKind eKind,
- const KeyEventData * e,
- XEvent * event )
+KeycodeToUnicodeViaUnicodeResource(
+ UniChar * uniChars, int maxChars,
+ Ptr uchr,
+ EventKind eKind,
+ UInt32 keycode, UInt32 modifiers,
+ UInt32 * deadKeyStatePtr)
{
- /* input of UCKeyTranslate */
- unsigned vkey;
int action;
- unsigned modifiers;
unsigned long keyboardType;
-
- /* output of UCKeyTranslate */
- enum { BUFFER_SIZE = 16 };
- UniChar unistring[BUFFER_SIZE];
+ OptionBits options = 0;
+ UInt32 dummy_state;
UniCharCount actuallength;
OSStatus status;
- /* for converting the result */
- char utf8buffer[sizeof(event->xkey.trans_chars)+4];
- int s, d;
-
- vkey = ((e->message) >> 8) & 0xFF;
- modifiers = ((e->keyModifiers) >> 8) & 0xFF;
+ keycode &= 0xFF;
+ modifiers = (modifiers >> 8) & 0xFF;
keyboardType = LMGetKbdType();
- switch(eKind) {
- default: /* keep compilers happy */
- case kEventRawKeyDown: action = kUCKeyActionDown; break;
- case kEventRawKeyUp: action = kUCKeyActionUp; break;
- case kEventRawKeyRepeat: action = kUCKeyActionAutoKey; break;
+ if (NULL==deadKeyStatePtr) {
+ options = kUCKeyTranslateNoDeadKeysMask;
+ dummy_state = 0;
+ deadKeyStatePtr = &dummy_state;
+ }
+
+ switch(eKind) {
+ case kEventRawKeyDown:
+ action = kUCKeyActionDown;
+ break;
+ case kEventRawKeyUp:
+ action = kUCKeyActionUp;
+ break;
+ case kEventRawKeyRepeat:
+ action = kUCKeyActionAutoKey;
+ break;
+ default:
+ fprintf (stderr,
+ "KeycodeToUnicodeViaUnicodeResource(): "
+ "Invalid parameter eKind %d\n",
+ (int) eKind);
+ return 0;
}
status = UCKeyTranslate(
- (const UCKeyboardLayout *)uchr,
- vkey, action, modifiers, keyboardType,
- 0, &deadKeyState, BUFFER_SIZE, &actuallength, unistring);
+ (const UCKeyboardLayout *) uchr,
+ keycode, action, modifiers, keyboardType,
+ options, deadKeyStatePtr,
+ maxChars, &actuallength, uniChars);
- if (0 != deadKeyState)
- return 0; /* more data later */
+ if ((0 == actuallength) && (0 != *deadKeyStatePtr)) {
+ /*
+ * More data later
+ */
+
+ return 0;
+ }
+
+ /*
+ * some IMEs leave residue :-(
+ */
+
+ *deadKeyStatePtr = 0;
if (noErr != status) {
- fprintf(stderr,"UCKeyTranslate failed: %d", (int) status);
- actuallength = 0;
- }
- s = 0;
- d = 0;
- while (s<actuallength) {
- int newd = d + Tcl_UniCharToUtf(unistring[s],utf8buffer+d);
- if (newd > (sizeof(event->xkey.trans_chars)-1)) {
- break;
- }
- d = newd;
- ++s;
+ fprintf(stderr,"UCKeyTranslate failed: %d", (int) status);
+ actuallength = 0;
}
- utf8buffer[d] = 0;
- strcpy(event->xkey.trans_chars, utf8buffer);
- return 1;
+ return actuallength;
}
-
+
/*
*----------------------------------------------------------------------
*
- * DecodeViaKCHRResource --
+ * KeycodeToUnicodeViaKCHRResource --
*
- * Given MacOS key event data this function generates the UTF-8
- * characters. It does this using a 'KCHR' and the
- * KeyTranslate API.
+ * Given MacOS key event data this function generates the Unicode
+ * characters. It does this using a 'KCHR' and the KeyTranslate API.
*
- * NB (benny): The function is not actually tested with double
- * byte encodings yet.
+ * The parameter deadKeyStatePtr can be NULL, if no deadkey handling
+ * is needed.
*
* Results:
- * 1 if the data was generated, 0 if we are waiting for another
- * byte of a dead-key sequence.
+ * The number of characters generated if any, 0 if we are waiting for
+ * another byte of a dead-key sequence. Fills in the uniChars array
+ * with a Unicode string.
*
- * Side effects:
- * Sets the trans_chars array in the XEvent->xkey structure.
+ * Side Effects:
+ * None
*
*----------------------------------------------------------------------
*/
+
static int
-DecodeViaKCHRResource(
- Ptr kchr,
- const KeyEventData * e,
- XEvent * event )
+KeycodeToUnicodeViaKCHRResource(
+ UniChar * uniChars, int maxChars,
+ Ptr kchr,
+ EventKind eKind,
+ UInt32 keycode, UInt32 modifiers,
+ UInt32 * deadKeyStatePtr)
{
- /* input and output of KeyTranslate */
- UInt16 keycode;
UInt32 result;
+ char macBuff[3];
+ char * macStr;
+ int macStrLen;
+ UInt32 dummy_state = 0;
- /* for converting the result */
- char macbuff[2];
- char * macstr;
- int maclen;
- keycode = e->keyCode | e->keyModifiers;
- result = KeyTranslate(kchr, keycode, &deadKeyState);
+ if (NULL == deadKeyStatePtr) {
+ deadKeyStatePtr = &dummy_state;
+ }
+
+ keycode |= modifiers;
+ result = KeyTranslate(kchr, keycode, deadKeyStatePtr);
+
+ if ((0 == result) && (0 != dummy_state)) {
+ /*
+ * 'dummy_state' gets only filled if the caller did not want deadkey
+ * processing (deadKeyStatePtr was NULL originally), but we still
+ * have a deadkey. We just push the keycode for the space bar to get
+ * the real key value.
+ */
+
+ result = KeyTranslate(kchr, 0x31, deadKeyStatePtr);
+ *deadKeyStatePtr = 0;
+ }
- if (0 != deadKeyState)
- return 0; /* more data later */
+ if ((0 == result) && (0 != *deadKeyStatePtr)) {
+ /*
+ * More data later
+ */
+
+ return 0;
+ }
- macbuff[0] = (char) (result >> 16);
- macbuff[1] = (char) result;
+ macBuff[0] = (char) (result >> 16);
+ macBuff[1] = (char) result;
+ macBuff[2] = 0;
- if (0 != macbuff[0]) {
- /* if the first byte is valid, the second is too */
- macstr = macbuff;
- maclen = 2;
- } else if (0 != macbuff[1]) {
- /* only the second is valid */
- macstr = macbuff+1;
- maclen = 1;
+ if (0 != macBuff[0]) {
+ /*
+ * If the first byte is valid, the second is too
+ */
+
+ macStr = macBuff;
+ macStrLen = 2;
+ } else if (0 != macBuff[1]) {
+ /*
+ * Only the second is valid
+ */
+
+ macStr = macBuff+1;
+ macStrLen = 1;
} else {
- /* no valid bytes at all */
- macstr = NULL;
- maclen = 0;
+ /*
+ * No valid bytes at all -- shouldn't happen
+ */
+
+ macStr = NULL;
+ macStrLen = 0;
}
- if (maclen > 0) {
- int result = Tcl_ExternalToUtf(
- NULL, TkMacOSXCarbonEncoding,
- macstr, maclen, 0, NULL,
- event->xkey.trans_chars, sizeof(event->xkey.trans_chars),
- NULL, NULL, NULL);
+ if (macStrLen <= 0) {
+ return 0;
+ } else {
+ /*
+ * Use the CFString conversion routines. This is the easiest and
+ * most compatible way to get from an 8-bit string and a MacOS script
+ * code to a Unicode string.
+ */
+
+ CFStringRef cfString;
+ int uniStrLen;
+
+ cfString = CFStringCreateWithCStringNoCopy(
+ NULL, macStr,
+ GetScriptManagerVariable(smKeyScript),
+ kCFAllocatorNull);
+ uniStrLen = CFStringGetLength(cfString);
+ if (uniStrLen > maxChars) {
+ uniStrLen = maxChars;
+ }
+ CFStringGetCharacters(cfString, CFRangeMake(0,uniStrLen), uniChars);
+ CFRelease(cfString);
+
+ return uniStrLen;
}
+}
- return 1;
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TkMacOSXKeycodeToUnicode --
+ *
+ * Given MacOS key event data this function generates the Unicode
+ * characters. It does this using OS resources and APIs.
+ *
+ * The parameter deadKeyStatePtr can be NULL, if no deadkey handling
+ * is needed.
+ *
+ * This function is called from XKeycodeToKeysym() in
+ * tkMacOSKeyboard.c.
+ *
+ * Results:
+ * The number of characters generated if any, 0 if we are waiting for
+ * another byte of a dead-key sequence. Fills in the uniChars array
+ * with a Unicode string.
+ *
+ * Side Effects:
+ * None
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TkMacOSXKeycodeToUnicode(
+ UniChar * uniChars, int maxChars,
+ EventKind eKind,
+ UInt32 keycode, UInt32 modifiers,
+ UInt32 * deadKeyStatePtr)
+{
+ Ptr resource = NULL;
+ int len;
+
+
+ if (GetKeyboardLayout(&resource)) {
+ len = KeycodeToUnicodeViaUnicodeResource(
+ uniChars, maxChars, resource, eKind,
+ keycode, modifiers, deadKeyStatePtr);
+ } else {
+ len = KeycodeToUnicodeViaKCHRResource(
+ uniChars, maxChars, resource, eKind,
+ keycode, modifiers, deadKeyStatePtr);
+ }
+
+ return len;
}
+
+
/*
*----------------------------------------------------------------------
*
@@ -691,15 +982,15 @@ TkpSetCapture(
*
* Tk_SetCaretPos --
*
- * This enables correct placement of the XIM caret. This is called
- * by widgets to indicate their cursor placement, and the caret
- * location is used by TkpGetString to place the XIM caret.
+ * This enables correct placement of the XIM caret. This is called
+ * by widgets to indicate their cursor placement, and the caret
+ * location is used by TkpGetString to place the XIM caret.
*
* Results:
- * None
+ * None
*
* Side effects:
- * None
+ * None
*
*----------------------------------------------------------------------
*/
@@ -707,8 +998,8 @@ TkpSetCapture(
void
Tk_SetCaretPos(tkwin, x, y, height)
Tk_Window tkwin;
- int x;
- int y;
- int height;
+ int x;
+ int y;
+ int height;
{
}
diff --git a/macosx/tkMacOSXKeyboard.c b/macosx/tkMacOSXKeyboard.c
index 447da04..d20fae7 100644
--- a/macosx/tkMacOSXKeyboard.c
+++ b/macosx/tkMacOSXKeyboard.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkMacOSXKeyboard.c,v 1.4 2002/10/16 11:29:50 vincentdarley Exp $
+ * RCS: @(#) $Id: tkMacOSXKeyboard.c,v 1.5 2003/02/19 19:27:47 wolfsuit Exp $
*/
#include "tkInt.h"
@@ -17,6 +17,8 @@
#include "X11/keysym.h"
#include <Carbon/Carbon.h>
#include "tkMacOSXInt.h"
+#include "tkMacOSXEvent.h" /* TkMacOSXKeycodeToUnicode() FIXME: That
+ * function should probably move here */
typedef struct {
int keycode; /* Macintosh keycode */
@@ -66,7 +68,6 @@ static int initialized = 0;
static Tcl_HashTable keycodeTable; /* keyArray hashed by keycode value. */
static Tcl_HashTable vkeyTable; /* vituralkeyArray hashed by virtual
keycode value. */
-static Ptr KCHRPtr; /* Pointer to 'KCHR' resource. */
/*
* Prototypes for static functions used in this file.
@@ -109,10 +110,6 @@ InitKeyMaps()
&dummy);
Tcl_SetHashValue(hPtr, kPtr->keysym);
}
- KCHRPtr = (Ptr) GetScriptManagerVariable(smKCHRCache);
- if (!KCHRPtr){
- fprintf(stderr,"GetScriptManagerVariable failed\n");
- }
initialized = 1;
}
@@ -143,7 +140,7 @@ XKeycodeToKeysym(
int c;
int virtualKey;
int newKeycode;
- unsigned long dummy, newChar;
+ UniChar newChar;
if (!initialized) {
InitKeyMaps();
@@ -184,15 +181,21 @@ XKeycodeToKeysym(
* TODO: The index may also specify the NUM_LOCK.
*/
newKeycode = virtualKey;
- if (index & 0x01) {
+ if (index & 0x01) {
newKeycode += 0x0200;
}
- dummy = 0;
- newChar = KeyTranslate(KCHRPtr, (short) newKeycode, &dummy);
- c = newChar & charCodeMask;
- if (c >= XK_space && c < XK_asciitilde) {
- return c;
+ newChar = 0;
+ TkMacOSXKeycodeToUnicode(
+ &newChar, 1, kEventRawKeyDown,
+ newKeycode & 0x00FF, newKeycode & 0xFF00, NULL);
+
+ /*
+ * X11 keysyms are identical to Unicode for ASCII and Latin-1. Give up
+ * for other characters for now.
+ */
+ if (newChar >= XK_space && newChar <= 0x255) {
+ return newChar;
}
return NoSymbol;
diff --git a/macosx/tkMacOSXMenu.c b/macosx/tkMacOSXMenu.c
index bc01a32..d92a8fb 100644
--- a/macosx/tkMacOSXMenu.c
+++ b/macosx/tkMacOSXMenu.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkMacOSXMenu.c,v 1.5 2003/02/18 14:43:45 vincentdarley Exp $
+ * RCS: @(#) $Id: tkMacOSXMenu.c,v 1.6 2003/02/19 19:27:48 wolfsuit Exp $
*/
#include "tkMacOSXInt.h"
#include "tkMenuButton.h"
@@ -865,35 +865,15 @@ mySetMenuTitle(
MenuRef menuHdl, /* The menu we are setting the title of. */
Tcl_Obj *titlePtr) /* The C string to set the title to. */
{
- char localBuffer[7];
- Boolean success;
char *title = (titlePtr == NULL) ? ""
: Tcl_GetStringFromObj(titlePtr, NULL);
CFStringRef cf = CFStringCreateWithCString(NULL,
title, kCFStringEncodingUTF8);
- success = CFStringGetCString(cf, localBuffer, 7, kCFStringEncodingMacRoman);
- if (success && (localBuffer[0] == '\245')) {
- OSErr err;
- IconSuiteRef ref;
- int iconId = atoi(localBuffer + 1);
- /*
- * Until images/icons are properly supported on MacOS X,
- * we allow the user to specify a bullet followed by
- * a resource id to use an icon as a menu title
- */
- err = GetIconSuite( &ref, iconId, kSelectorAllAvailableData );
- if (err == noErr) {
- SetMenuTitleIcon(menuHdl,kMenuIconSuiteType,ref);
- /* DisposeIconSuite(ref,true); */
- } else {
- SetMenuTitleWithCFString(menuHdl, cf);
- }
- } else {
- SetMenuTitleWithCFString(menuHdl, cf);
- }
+ SetMenuTitleWithCFString(menuHdl, cf);
CFRelease(cf);
}
+
static int ParseAccelerators(char **accelStringPtr) {
char *accelString = *accelStringPtr;
int flags = 0;
diff --git a/macosx/tkMacOSXMouseEvent.c b/macosx/tkMacOSXMouseEvent.c
index 07c36c5..e771edb 100644
--- a/macosx/tkMacOSXMouseEvent.c
+++ b/macosx/tkMacOSXMouseEvent.c
@@ -82,6 +82,8 @@ static int gEatButtonUp = 0; /* 1 if we need to eat the next * up event */
static void BringWindowForward _ANSI_ARGS_((WindowRef wRef));
static int GeneratePollingEvents(MouseEventData * medPtr);
static int GenerateMouseWheelEvent(MouseEventData * medPtr);
+static int HandleInGoAway(Tk_Window tkwin, WindowRef winPtr, Point where);
+static OSErr HandleInCollapse(WindowRef win);
extern int TkMacOSXGetEatButtonUp();
extern void TkMacOSXSetEatButtonUp(int f);
@@ -124,11 +126,9 @@ TkMacOSXProcessMouseEvent(TkMacOSXEvent *eventPtr, MacEventStatus * statusPtr)
case kEventMouseWheelMoved:
break;
default:
- statusPtr->handledByTk = 1;
return 0;
break;
}
- statusPtr->handledByTk = 1;
status = GetEventParameter(eventPtr->eventRef,
kEventParamMouseLocation,
typeQDPoint, NULL,
@@ -172,7 +172,6 @@ TkMacOSXProcessMouseEvent(TkMacOSXEvent *eventPtr, MacEventStatus * statusPtr)
medPtr->windowPart= FindWindow(where, &medPtr->whichWin);
window = TkMacOSXGetXWindow(medPtr->whichWin);
if (medPtr->whichWin != NULL && window == None) {
- statusPtr->handledByTk = 0;
return 0;
}
@@ -279,9 +278,35 @@ TkMacOSXProcessMouseEvent(TkMacOSXEvent *eventPtr, MacEventStatus * statusPtr)
SysBeep(1);
return false;
}
- TkMacOSXSetEatButtonUp(true);
- BringWindowForward(medPtr->whichWin);
- return false;
+
+ /*
+ * Clicks in the stoplights on a MacOS X title bar are processed
+ * directly even for background windows. Do that here.
+ */
+
+ switch (medPtr->windowPart) {
+ case inGoAway:
+ return HandleInGoAway(tkwin, medPtr->whichWin, where);
+ break;
+ case inCollapseBox:
+ err = HandleInCollapse(medPtr->whichWin);
+ if (err = noErr) {
+ statusPtr->err = 1;
+ }
+ statusPtr->stopProcessing = 1;
+ return false;
+ break;
+ case inZoomIn:
+ return false;
+ break;
+ case inZoomOut:
+ return false;
+ break;
+ default:
+ TkMacOSXSetEatButtonUp(true);
+ BringWindowForward(medPtr->whichWin);
+ return false;
+ }
}
}
@@ -320,14 +345,7 @@ TkMacOSXProcessMouseEvent(TkMacOSXEvent *eventPtr, MacEventStatus * statusPtr)
}
break;
case inGoAway:
- if (TrackGoAway(medPtr->whichWin,where)) {
- if (tkwin == NULL) {
- return false;
- }
- TkGenWMDestroyEvent(tkwin);
- return true;
- }
- return false;
+ return HandleInGoAway(tkwin, medPtr->whichWin, where);
break;
case inMenuBar:
{
@@ -359,19 +377,77 @@ TkMacOSXProcessMouseEvent(TkMacOSXEvent *eventPtr, MacEventStatus * statusPtr)
}
break;
case inCollapseBox:
- if ((err = CollapseWindow(medPtr->whichWin,
- !IsWindowCollapsed(medPtr->whichWin)))!=noErr) {
- fprintf(stderr,"CollapseWindow failed,%d\n", err);
- statusPtr->err = 1;
- }
- break;
+ err = HandleInCollapse(medPtr->whichWin);
+ if (err == noErr) {
+ statusPtr->err = 1;
+ }
+ statusPtr->stopProcessing = 1;
+ break;
default:
return false;
break;
}
return 0;
}
-
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * HandleInGoAway --
+ *
+ * Tracks the cursor in the go away box and deletes the window
+ * if the button stays depressed on button up.
+ *
+ * Results:
+ * True if no errors - false otherwise.
+ *
+ * Side effects:
+ * The window tkwin may be destroyed.
+ *
+ *----------------------------------------------------------------------
+ */
+int
+HandleInGoAway(Tk_Window tkwin, WindowRef win, Point where)
+{
+ if (TrackGoAway(win, where)) {
+ if (tkwin == NULL) {
+ return false;
+ }
+ TkGenWMDestroyEvent(tkwin);
+ return true;
+ }
+ return false;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * HandleInCollapse --
+ *
+ * Tracks the cursor in the collapse box and colapses the window
+ * if the button stays depressed on button up.
+ *
+ * Results:
+ * Error return from CollapseWindow
+ *
+ * Side effects:
+ * The window win may be collapsed.
+ *
+ *----------------------------------------------------------------------
+ */
+OSErr
+HandleInCollapse(WindowRef win)
+{
+ OSErr err;
+
+ err = CollapseWindow(win,
+ !IsWindowCollapsed(win));
+ if (err != noErr) {
+ fprintf(stderr,"CollapseWindow failed,%d\n", err);
+ }
+ return err;
+}
+
/*
*----------------------------------------------------------------------
*
diff --git a/macosx/tkMacOSXWindowEvent.c b/macosx/tkMacOSXWindowEvent.c
index d21d1f1..af3619b 100644
--- a/macosx/tkMacOSXWindowEvent.c
+++ b/macosx/tkMacOSXWindowEvent.c
@@ -101,7 +101,6 @@ TkMacOSXProcessApplicationEvent(
TkMacOSXEvent *eventPtr,
MacEventStatus *statusPtr)
{
- statusPtr->handledByTk = 1;
switch (eventPtr->eKind) {
case kEventAppActivated:
tkMacOSXAppInFront = true;
@@ -155,11 +154,9 @@ TkMacOSXProcessWindowEvent(
case kEventWindowUpdate:
break;
default:
- statusPtr->handledByTk = 1;
return 0;
break;
}
- statusPtr->handledByTk = 1;
status = GetEventParameter(eventPtr->eventRef,
kEventParamDirectObject,
typeWindowRef, NULL,
@@ -184,8 +181,6 @@ TkMacOSXProcessWindowEvent(
case kEventWindowUpdate:
if (GenerateUpdateEvent(window)) {
eventFound = true;
- } else {
- statusPtr->handledByTk = 0;
}
break;
}
@@ -690,4 +685,4 @@ int
Tk_MacOSXIsAppInFront (void)
{
return tkMacOSXAppInFront;
-} \ No newline at end of file
+}