Merge tag 'upstream/8.6.1'
Upstream version 8.6.1
Sergei Golovan authored 10 years ago
Sergei Golovan committed 6 years ago
0 | A NOTE ON THE CHANGELOG: | |
1 | Starting in early 2011, Tk source code has been under the management of | |
2 | fossil, hosted at http://core.tcl.tk/tk/ . Fossil presents a "Timeline" | |
3 | view of changes made that is superior in every way to a hand edited log file. | |
4 | Because of this, many Tk developers are now out of the habit of maintaining | |
5 | this log file. You may still find useful things in it, but the Timeline is | |
6 | a better first place to look now. | |
7 | ============================================================================ | |
8 | ||
9 | 2013-08-30 Don Porter <dgp@users.sourceforge.net> | |
10 | ||
11 | *** 8.6.1 TAGGED FOR RELEASE *** | |
12 | ||
13 | * README: Bump version number to 8.6.1 | |
14 | * generic/tk.h: | |
15 | * library/tk.tcl: | |
16 | * unix/configure.in: | |
17 | * unix/tk.spec: | |
18 | * win/configure.in: | |
19 | ||
20 | * unix/configure: autoconf-2.59 | |
21 | * win/configure: | |
22 | ||
23 | 2013-08-25 Kevin Walzer <wordtech@users.sourceforge.net> | |
24 | ||
25 | * macosx/tkMacOSXButton.c: Bug [3016181]: Crash after scrollbar | |
26 | * macosx/tkMacOSXMenu.c: destroyed, Tk Cocoa. | |
27 | * macosx/tkMacOSXScrlbr.c: | |
28 | * macosx/tkMacOSXWm.c: | |
29 | ||
30 | 2012-08-15 Joe English <jenglish@users.sourceforge.net> | |
31 | ||
32 | * library/ttk/progress.tcl: Bug [c597acdab3]: Call [$pb step] | |
33 | in tail position in ttk::progressbar::Autoincrement, so that | |
34 | the widget is in a consistent state when any write traces on | |
35 | the linked -variable are fired. | |
36 | ||
37 | 2013-08-14 Jan Nijtmans <nijtmans@users.sf.net> | |
38 | ||
39 | * generic/tkConfig.c: Bug [069c9e43c4]: FreeOptionInternalRep() breaks | |
40 | * tests/config.test: Tk_CreateOptionTable() | |
41 | ||
42 | 2013-07-02 Jan Nijtmans <nijtmans@users.sf.net> | |
43 | ||
44 | * unix/tcl.m4: Bug [32afa6e256]: dirent64 check is incorrect in tcl.m4 | |
45 | * unix/configure: (thanks to Brian Griffin) | |
46 | ||
47 | 2012-06-28 Jan Nijtmans <nijtmans@users.sf.net> | |
48 | ||
49 | * library/ttk/scale.tcl: [Bug 2501278]: ttk::scale keyboard binding | |
50 | problem. | |
51 | ||
52 | 2013-06-05 Jan Nijtmans <nijtmans@users.sf.net> | |
53 | ||
54 | * generic/ttk/ttkScroll.c: [Bug 3613759]: ttk::entry and symbolic | |
55 | index names. | |
56 | * generic/ttk/ttkEntry.c: [Bug 2100430]: ttk::entry widget index | |
57 | must be integer | |
58 | * generic/tkEntry.c: Don't set interp result when it will be | |
59 | overwritten later. | |
60 | ||
61 | 2013-06-04 Jan Nijtmans <nijtmans@users.sf.net> | |
62 | ||
63 | * unix/tcl.m4: Eliminate NO_VIZ macro as current | |
64 | zlib uses HAVE_HIDDEN in stead. One more last-moment | |
65 | fix for FreeBSD by Pietro Cerutti | |
66 | ||
67 | 2013-05-23 Jan Nijtmans <nijtmans@users.sf.net> | |
68 | ||
69 | * unix/tcl.m4: [Bug 3613668]: XFilterEvent() hangs. | |
70 | * unix/configure: | |
71 | * unix/tkUnixEvent.c: | |
72 | ||
73 | 2013-05-19 Jan Nijtmans <nijtmans@users.sf.net> | |
74 | ||
75 | * unix/tcl.m4: Fix for FreeBSD, and remove support for older | |
76 | * unix/configure: FreeBSD versions. Patch by Pietro Cerutti. | |
77 | ||
78 | 2013-04-10 Jan Nijtmans <nijtmans@users.sf.net> | |
79 | ||
80 | * win/makefile.vc: [Bug 3568760]: Tk documentation fails to build | |
81 | ||
82 | 2013-04-01 Don Porter <dgp@users.sourceforge.net> | |
83 | ||
84 | * tests/window.test: Bring back test window-2.9. No longer hangs. | |
85 | ||
86 | * generic/tkInt.h: [Bug 3607830] Runtime checks that Xkb is | |
87 | * unix/tkUnixEvent.c: available in the X server before trying to | |
88 | * unix/tkUnixKey.c: use. Adapted from patch from Brian Griffin. | |
89 | ||
90 | 2013-03-27 Jan Nijtmans <nijtmans@users.sf.net> | |
91 | ||
92 | * library/button.tcl: [Bug 3608074]: Add <<Invoke>> bindings to | |
93 | * library/listbox.tcl: Button's, Listbox and Menu. | |
94 | * library/menu.tcl: | |
95 | * doc/event.n: Document <<Invoke>>, <<ThemeChanged>>, | |
96 | * doc/ttk_panedwindow.n: <<EnteredChild>> (ttk_pandedwindow only) and | |
97 | * doc/ttk_spinbox.n: <<Increment/Decrement>> (ttk_spinbox only) | |
98 | ||
99 | 2013-03-13 Jan Nijtmans <nijtmans@users.sf.net> | |
100 | ||
101 | * unix/tcl.m4: Patch by Andrew Shadura, providing better support for | |
102 | three architectures they have in Debian. | |
103 | ||
104 | 2013-03-11 Don Porter <dgp@users.sourceforge.net> | |
105 | ||
106 | * generic/tkListbox.c: [Bug 3607326] Stop segfault from | |
107 | * tests/listbox.test: [listbox .l -listvariable $array]. | |
108 | ||
109 | 2013-02-28 Donal K. Fellows <dkf@users.sf.net> | |
110 | ||
111 | * unix/tkUnixKey.c (TkpGetKeySym): [Bug 3599312]: Put the | |
112 | initialization of the key mapping before the input method handling so | |
113 | that Alt key handling is correct on non-OSX Unix. Thanks to Colin | |
114 | McDonald for developing the fix. | |
115 | ||
116 | 2013-02-18 Jan Nijtmans <nijtmans@users.sf.net> | |
117 | ||
118 | * unix/tkUnixEvent.c: Call XInitThreads once before the first Xlib | |
119 | call. Suggested by Brian Griffin. | |
120 | ||
121 | 2013-01-14 Jan Nijtmans <nijtmans@users.sf.net> | |
122 | ||
123 | * win/tcl.m4: More flexible search for win32 tclConfig.sh, | |
124 | * win/configure: backported from TEA. | |
125 | ||
126 | 2013-01-13 Jan Nijtmans <nijtmans@users.sf.net> | |
127 | ||
128 | * library/tk.tcl: [Bug 3600390]: tk_strictMotif not tested for. Now | |
129 | * library/ttk/entry.tcl: all key-bindings for Control-a,b,e,f,n,p and | |
130 | their shift variants respect tk_strictMotif. | |
131 | ||
132 | 2013-01-10 Jan Nijtmans <nijtmans@users.sf.net> | |
133 | ||
134 | * library/text.tcl: [Bug 3600251]: Inappropriate replacement of Mac | |
135 | binding. | |
136 | * library/tk.tcl: [Bug 3600260]: Errors in new virtual event | |
137 | definitions | |
138 | ||
0 | 139 | 2012-12-11 Don Porter <dgp@users.sourceforge.net> |
1 | 140 | |
2 | 141 | *** 8.6.0 TAGGED FOR RELEASE *** |
11 | 150 | * unix/configure: autoconf-2.59 |
12 | 151 | * win/configure: |
13 | 152 | |
14 | 2012-12-04 Francois Vogel <fvogelnew1@free.fr> | |
153 | 2012-12-04 François Vogel <fvogelnew1@free.fr> | |
15 | 154 | |
16 | 155 | * generic/tkTextIndex.c: [Bug 3588824]: bug in image index handling |
17 | 156 | * tests/textIndex.test: for weird image names |
19 | 158 | 2012-11-14 Jan Nijtmans <nijtmans@users.sf.net> |
20 | 159 | |
21 | 160 | * win/tkWinDialog.c: [Bug 3500545]: tk_getOpenFile -multiple 1 wrong |
22 | on windows | |
161 | on windows. | |
162 | [Bug 3416492]: Crash in open/save file dialog in Windows 7 libraries. | |
163 | [Bug 3095112]: crash when selecting file from Win7 Library. | |
23 | 164 | |
24 | 165 | 2012-11-11 Jan Nijtmans <nijtmans@users.sf.net> |
25 | 166 | |
174 | 315 | |
175 | 316 | * win/rules.vc: Sync with tcl version of rules.vc |
176 | 317 | |
177 | 2012-08-11 Francois Vogel <fvogelnew1@free.fr> | |
318 | 2012-08-11 François Vogel <fvogelnew1@free.fr> | |
178 | 319 | |
179 | 320 | * generic/tkTextTag.c: [Bug 3554273]: Test textDisp-32.2 failed |
180 | 321 | |
311 | 452 | to allow retrieval of the drawing surface. Allows Canvas3d to be |
312 | 453 | adapted to 8.6. |
313 | 454 | |
314 | 2012-05-28 Francois Vogel <fvogelnew1@free.fr> | |
455 | 2012-05-28 François Vogel <fvogelnew1@free.fr> | |
315 | 456 | |
316 | 457 | * doc/text.n: [Bug 1630251]: Doc for -endline option was wrong |
317 | 458 | |
318 | 2012-05-28 Francois Vogel <fvogelnew1@free.fr> | |
459 | 2012-05-28 François Vogel <fvogelnew1@free.fr> | |
319 | 460 | |
320 | 461 | * generic/tkTextDisp.c: [Bug 1630254]: missing scrolling of text widget |
321 | 462 | when from a -startline == -endline initial state it is configured to |
431 | 572 | * unix/tcl.m4: Patch from the cygwin folks |
432 | 573 | * unix/configure: (re-generated) |
433 | 574 | |
434 | 2012-02-28 Francois Vogel <fvogelnew1@free.fr> | |
575 | 2012-02-28 François Vogel <fvogelnew1@free.fr> | |
435 | 576 | |
436 | 577 | * generic/tkText.c: [Bug 1630262, Bug 1615425]: segfault |
437 | 578 | * generic/tkTextBTree.c when deleting lines or tagging outside of |
482 | 623 | |
483 | 624 | * win/tkWinDialog.c: [Bug 3480471]: tk_getOpenFile crashes on Win64 |
484 | 625 | |
485 | 2012-01-26 Francois Vogel <fvogelnew1@free.fr> | |
626 | 2012-01-26 François Vogel <fvogelnew1@free.fr> | |
486 | 627 | |
487 | 628 | * generic/tkTextDisp.c: [Bug-1754043] and [Bug-2321450]: When |
488 | 629 | -blockcursor is true, the cursor appears as a blinking bar which |
493 | 634 | * generic/tkImgPhoto.c: [Bug 2433260]: non-critical error in |
494 | 635 | Tk_PhotoPutBlock |
495 | 636 | |
496 | 2012-01-25 Francois Vogel <fvogelnew1@free.fr> | |
637 | 2012-01-25 François Vogel <fvogelnew1@free.fr> | |
497 | 638 | |
498 | 639 | * generic/tkText.c: Don't increase the epoch twice |
499 | 640 | |
500 | 2012-01-25 Francois Vogel <fvogelnew1@free.fr> | |
641 | 2012-01-25 François Vogel <fvogelnew1@free.fr> | |
501 | 642 | |
502 | 643 | * generic/tkText.c: [Bug-1630271]: segfault/infinite loop |
503 | 644 | * generic/tkTextMark.c: when a mark is before -startline |
504 | 645 | * tests/textMark.test: |
505 | 646 | |
506 | 2012-01-25 Francois Vogel <fvogelnew1@free.fr> | |
647 | 2012-01-25 François Vogel <fvogelnew1@free.fr> | |
507 | 648 | |
508 | 649 | * generic/tkText.c: [Bug-3475627]: Test text-31.11 fails |
509 | 650 | |
510 | 2012-01-22 Francois Vogel <fvogelnew1@free.fr> | |
651 | 2012-01-22 François Vogel <fvogelnew1@free.fr> | |
511 | 652 | |
512 | 653 | * generic/tkTextMark.c: [Bug-3288113,3288121]: Missing marks/endless |
513 | 654 | * tests/textMark.test: loop in text mark prev/next |
514 | 655 | |
515 | 2012-01-19 Francois Vogel <fvogelnew1@free.fr> | |
656 | 2012-01-19 François Vogel <fvogelnew1@free.fr> | |
516 | 657 | |
517 | 658 | * generic/tkText.c: [Bug-3021557]: Moving the cursor in |
518 | 659 | * tests/text.test: elided text freezes Tk |
0 | 0 | README: Tk |
1 | This is the Tk 8.6.0 source distribution. | |
2 | http://tcl.sourceforge.net/ | |
3 | You can get any source release of Tcl from the file distributions | |
4 | link at the above URL. | |
1 | This is the Tk 8.6.1 source distribution. | |
2 | http://sourceforge.net/projects/tcl/files/Tcl/ | |
3 | You can get any source release of Tk from the URL above. | |
5 | 4 | |
6 | 5 | 1. Introduction |
7 | 6 | --------------- |
17 | 16 | or refer to the "changes" file in this directory, which contains a |
18 | 17 | historical record of all changes to Tk. |
19 | 18 | |
20 | Tk is maintained, enhanced, and distributed freely by members of the | |
21 | Tcl community. The home for Tcl/Tk sources and bug database is on | |
22 | SourceForge at: | |
19 | Tk is maintained, enhanced, and distributed freely by the Tcl community. | |
20 | Source code development and tracking of bug reports and feature requests | |
21 | takes place at: | |
23 | 22 | |
24 | http://tcl.sourceforge.net/ | |
23 | http://core.tcl.tk/tk/ | |
25 | 24 | |
26 | 25 | with the Tcl Developer Xchange at: |
27 | 26 |
7030 | 7030 | 2012-12-06 (bug fix)[3592736] stop pink greys from buggy mingw builds (fellows) |
7031 | 7031 | |
7032 | 7032 | --- Released 8.6.0, December 20, 2012 --- See ChangeLog for details --- |
7033 | ||
7034 | 2013-01-04 (bug fix) Tk_InitStubs("8.6") rejected in 8.60 interp (nijtmans) | |
7035 | ||
7036 | 2013-01-10 (bug fix)[3600251] Mac <Control-v> binding (kjnash,nijtmans) | |
7037 | ||
7038 | 2013-01-10 (bug fix)[3600260] <<SelectNextPara>> binding (kjnash,nijtmans) | |
7039 | ||
7040 | 2013-01-13 (bug fix)[3600290] restore $tk_strictMotif respect (kjnash,nijtmans) | |
7041 | ||
7042 | 2013-01-22 (bug fix)[3601782] Tcl_InitStubs failure message (nijtmans) | |
7043 | ||
7044 | 2013-01-31 (bug fix)[3599928] use XKeycodeToKeysym on old systems (cassoff) | |
7045 | ||
7046 | 2013-02-04 (bug fix)[3603077] treeview update on tag add/remove (english) | |
7047 | ||
7048 | 2013-02-28 (bug fix)[3599312] First Alt key event is lost (mcdonald) | |
7049 | ||
7050 | 2013-03-11 (bug fix)[3607326] Crash [listbox .l -listvariable $array] (porter) | |
7051 | ||
7052 | 2013-03-13 (enhancement) better build support for Debian arch (shadura) | |
7053 | ||
7054 | 2013-03-27 (bug fix)[3608074] button, listbox, menu <<Invoke>> (nijtmans) | |
7055 | ||
7056 | 2013-04-01 (bug fix)[3607830] Xkb runtime checks (griffin) | |
7057 | ||
7058 | 2013-05-19 (platform support) FreeBSD updates (cerutti) | |
7059 | ||
7060 | 2013-06-05 (bug fix)[3613759] [ttk::entry .e; .e xview end] (nijtmans) | |
7061 | ||
7062 | 2013-06-05 (bug fix)[2100430] [ttk::entry .e; .e xview insert] (nijtmans) | |
7063 | ||
7064 | 2013-06-28 (bug fix)[2501278] reverse ttk::scale key bindings {mcdonald) | |
7065 | ||
7066 | 2013-07-02 (bug fix)[32afa6] corrected dirent64 check (griffin) | |
7067 | ||
7068 | 2013-08-14 (bug fix)[069c9e] "option" value refcount crash (tim,nijtmans) | |
7069 | ||
7070 | 2013-08-15 (bug fix)[c597acd] [$pb step] work with traces (english) | |
7071 | ||
7072 | 2013-08-25 (bug fix)[3016181] Cocoa: [destroy $scrollbar] => crash (goddard) | |
7073 | ||
7074 | --- Released 8.6.1, September 19, 2013 --- http://core.tcl.tk/tk/ for details |
13 | 13 | #ifndef _UNISTD |
14 | 14 | #define _UNISTD |
15 | 15 | |
16 | #include "tcl.h" | |
17 | 16 | #include <sys/types.h> |
18 | 17 | |
19 | 18 | #ifndef NULL |
316 | 316 | this is to either focus into the widget (or some related widget) or to |
317 | 317 | invoke the widget. |
318 | 318 | .TP |
319 | \fB<<Invoke>>\fR | |
320 | This can be sent to some widgets (e.g. button, listbox, menu) as an | |
321 | alternative to <space>. | |
322 | .TP | |
319 | 323 | \fB<<ListboxSelect>>\fR |
320 | 324 | This is sent to a listbox when the set of selected item(s) in the |
321 | 325 | listbox is updated. |
331 | 335 | \fB<<Selection>>\fR |
332 | 336 | This is sent to a text widget when the selection in the widget is |
333 | 337 | changed. |
338 | .TP | |
339 | \fB<<ThemeChanged>>\fR | |
340 | This is sent to a text widget when the ttk (Tile) theme changed. | |
334 | 341 | .TP |
335 | 342 | \fB<<TraverseIn>>\fR |
336 | 343 | This is sent to a widget when the focus enters the widget because of a |
104 | 104 | .\" depending on which changed most recently. |
105 | 105 | Returns the new position of sash number \fIindex\fR. |
106 | 106 | .\" Full story: new position may be different than the requested position. |
107 | .SH "VIRTUAL EVENTS" | |
108 | .PP | |
109 | The panedwindow widget generates an \fB<<EnteredChild>>\fR virtual event on | |
110 | LeaveNotify/NotifyInferior events, because Tk does not execute binding scripts | |
111 | for <Leave> events when the pointer crosses from a parent to a child. The | |
112 | panedwindow widget needs to know when that happens. | |
107 | 113 | .SH "SEE ALSO" |
108 | 114 | ttk::widget(n), ttk::notebook(n), panedwindow(n) |
109 | 115 | '\" Local Variables: |
76 | 76 | been configured then this format will be applied. If formatting fails |
77 | 77 | or is not set or the \fB\-values\fR option has been used then the value |
78 | 78 | is set directly. |
79 | .SH "VIRTUAL EVENTS" | |
80 | .PP | |
81 | The spinbox widget generates a \fB<<Increment>>\fR virtual event when | |
82 | the user presses <Up>, and a \fB<<Decrement>>\fR virtual event when the | |
83 | user presses <Down>. | |
79 | 84 | .SH "SEE ALSO" |
80 | 85 | ttk::widget(n), ttk::entry(n), spinbox(n) |
81 | 86 | .SH KEYWORDS |
1068 | 1068 | void Tk_CreateOldPhotoImageFormat(const Tk_PhotoImageFormat *formatPtr) |
1069 | 1069 | } |
1070 | 1070 | |
1071 | declare 274 { | |
1072 | void reserved274(void) | |
1073 | } | |
1074 | declare 275 { | |
1075 | void reserved275(void) | |
1076 | } | |
1077 | ||
1078 | 1071 | # Define the platform specific public Tk interface. These functions are |
1079 | 1072 | # only available on the designated platform. |
1080 | 1073 |
19 | 19 | #if (TCL_MAJOR_VERSION != 8) || (TCL_MINOR_VERSION < 6) |
20 | 20 | # error Tk 8.6 must be compiled with tcl.h from Tcl 8.6 or better |
21 | 21 | #endif |
22 | ||
22 | ||
23 | #ifndef CONST84 | |
24 | # define CONST84 const | |
25 | # define CONST84_RETURN const | |
26 | #endif | |
27 | #ifndef CONST86 | |
28 | # define CONST86 CONST84 | |
29 | #endif | |
30 | #ifndef EXTERN | |
31 | # define EXTERN extern TCL_STORAGE_CLASS | |
32 | #endif | |
33 | ||
34 | /* | |
35 | * Utility macros: STRINGIFY takes an argument and wraps it in "" (double | |
36 | * quotation marks), JOIN joins two arguments. | |
37 | */ | |
38 | ||
39 | #ifndef STRINGIFY | |
40 | # define STRINGIFY(x) STRINGIFY1(x) | |
41 | # define STRINGIFY1(x) #x | |
42 | #endif | |
43 | #ifndef JOIN | |
44 | # define JOIN(a,b) JOIN1(a,b) | |
45 | # define JOIN1(a,b) a##b | |
46 | #endif | |
47 | ||
23 | 48 | /* |
24 | 49 | * For C++ compilers, use extern "C" |
25 | 50 | */ |
52 | 77 | #define TK_RELEASE_SERIAL 0 |
53 | 78 | |
54 | 79 | #define TK_VERSION "8.6" |
55 | #define TK_PATCH_LEVEL "8.6.0" | |
80 | #define TK_PATCH_LEVEL "8.6.1" | |
56 | 81 | |
57 | 82 | /* |
58 | 83 | * A special definition used to allow this header file to be included from |
623 | 623 | * from. */ |
624 | 624 | int *resultPtr) /* Where to place the answer. */ |
625 | 625 | { |
626 | return Tcl_GetIndexFromObj(interp, objPtr, reliefStrings, "relief", 0, | |
627 | resultPtr); | |
626 | return Tcl_GetIndexFromObjStruct(interp, objPtr, reliefStrings, | |
627 | sizeof(char *), "relief", 0, resultPtr); | |
628 | 628 | } |
629 | 629 | |
630 | 630 | /* |
2296 | 2296 | int code; |
2297 | 2297 | |
2298 | 2298 | Tcl_IncrRefCount(cmdObj); |
2299 | code = Tcl_GlobalEvalObj(interp, cmdObj); | |
2299 | code = Tcl_EvalObjEx(interp, cmdObj, TCL_EVAL_GLOBAL); | |
2300 | 2300 | if (code != TCL_OK) { |
2301 | 2301 | Tcl_AddErrorInfo(interp, |
2302 | 2302 | "\n (changing screen in event binding)"); |
2348 | 2348 | Tcl_WrongNumArgs(interp, 1, objv, "option ?arg?"); |
2349 | 2349 | return TCL_ERROR; |
2350 | 2350 | } |
2351 | if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, | |
2352 | &index) != TCL_OK) { | |
2351 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], optionStrings, | |
2352 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
2353 | 2353 | return TCL_ERROR; |
2354 | 2354 | } |
2355 | 2355 | |
2642 | 2642 | eventPSPtr = FindSequence(interp, &vetPtr->patternTable, NULL, |
2643 | 2643 | eventString, 0, 0, &eventMask); |
2644 | 2644 | if (eventPSPtr == NULL) { |
2645 | const char *string = Tcl_GetStringResult(interp); | |
2645 | const char *string = Tcl_GetString(Tcl_GetObjResult(interp)); | |
2646 | 2646 | |
2647 | 2647 | return (string[0] != '\0') ? TCL_ERROR : TCL_OK; |
2648 | 2648 | } |
3005 | 3005 | optionPtr = objv[i]; |
3006 | 3006 | valuePtr = objv[i + 1]; |
3007 | 3007 | |
3008 | if (Tcl_GetIndexFromObj(interp, optionPtr, fieldStrings, "option", | |
3009 | TCL_EXACT, &index) != TCL_OK) { | |
3008 | if (Tcl_GetIndexFromObjStruct(interp, optionPtr, fieldStrings, | |
3009 | sizeof(char *), "option", TCL_EXACT, &index) != TCL_OK) { | |
3010 | 3010 | return TCL_ERROR; |
3011 | 3011 | } |
3012 | 3012 | if (objc & 1) { |
42 | 42 | static int ConfigureBusy(Tcl_Interp *interp, Busy *busyPtr, |
43 | 43 | int objc, Tcl_Obj *const objv[]); |
44 | 44 | static Busy * CreateBusy(Tcl_Interp *interp, Tk_Window tkRef); |
45 | static void DestroyBusy(char *dataPtr); | |
45 | static void DestroyBusy(void *dataPtr); | |
46 | 46 | static void DoConfigureNotify(Tk_FakeWin *winPtr); |
47 | 47 | static inline Tk_Window FirstChild(Tk_Window parent); |
48 | 48 | static Busy * GetBusy(Tcl_Interp *interp, |
135 | 135 | busyPtr); |
136 | 136 | TkpHideBusyWindow(busyPtr); |
137 | 137 | busyPtr->tkBusy = NULL; |
138 | Tcl_EventuallyFree(busyPtr, DestroyBusy); | |
138 | Tcl_EventuallyFree(busyPtr, (Tcl_FreeProc *)DestroyBusy); | |
139 | 139 | } |
140 | 140 | |
141 | 141 | /* |
261 | 261 | * Arrange for the busy structure to be removed at a proper time. |
262 | 262 | */ |
263 | 263 | |
264 | Tcl_EventuallyFree(busyPtr, DestroyBusy); | |
264 | Tcl_EventuallyFree(busyPtr, (Tcl_FreeProc *)DestroyBusy); | |
265 | 265 | break; |
266 | 266 | |
267 | 267 | case ConfigureNotify: |
332 | 332 | |
333 | 333 | static void |
334 | 334 | DestroyBusy( |
335 | char *data) /* Busy window structure record */ | |
336 | { | |
337 | register Busy *busyPtr = (Busy *) data; | |
335 | void *data) /* Busy window structure record */ | |
336 | { | |
337 | register Busy *busyPtr = data; | |
338 | 338 | |
339 | 339 | if (busyPtr->hashPtr != NULL) { |
340 | 340 | Tcl_DeleteHashEntry(busyPtr->hashPtr); |
382 | 382 | |
383 | 383 | if (eventPtr->type == DestroyNotify) { |
384 | 384 | busyPtr->tkBusy = NULL; |
385 | Tcl_EventuallyFree(busyPtr, DestroyBusy); | |
385 | Tcl_EventuallyFree(busyPtr, (Tcl_FreeProc *)DestroyBusy); | |
386 | 386 | } |
387 | 387 | } |
388 | 388 | |
815 | 815 | return HoldBusy(busyTablePtr, interp, objv[1], objc-2, objv+2); |
816 | 816 | } |
817 | 817 | |
818 | if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, | |
819 | &index) != TCL_OK) { | |
818 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], optionStrings, | |
819 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
820 | 820 | return TCL_ERROR; |
821 | 821 | } |
822 | 822 | switch ((enum options) index) { |
894 | 894 | return TCL_ERROR; |
895 | 895 | } |
896 | 896 | TkpHideBusyWindow(busyPtr); |
897 | Tcl_EventuallyFree(busyPtr, DestroyBusy); | |
897 | Tcl_EventuallyFree(busyPtr, (Tcl_FreeProc *)DestroyBusy); | |
898 | 898 | return TCL_OK; |
899 | 899 | |
900 | 900 | case BUSY_HOLD: |
796 | 796 | Tcl_WrongNumArgs(interp, 1, objv, "option ?arg ...?"); |
797 | 797 | return TCL_ERROR; |
798 | 798 | } |
799 | result = Tcl_GetIndexFromObj(interp, objv[1], commandNames[butPtr->type], | |
800 | "option", 0, &index); | |
799 | result = Tcl_GetIndexFromObjStruct(interp, objv[1], commandNames[butPtr->type], | |
800 | sizeof(char *), "option", 0, &index); | |
801 | 801 | if (result != TCL_OK) { |
802 | 802 | return result; |
803 | 803 | } |
961 | 961 | |
962 | 962 | Tcl_DeleteCommandFromToken(butPtr->interp, butPtr->widgetCmd); |
963 | 963 | if (butPtr->textVarNamePtr != NULL) { |
964 | Tcl_UntraceVar(butPtr->interp, Tcl_GetString(butPtr->textVarNamePtr), | |
965 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
964 | Tcl_UntraceVar2(butPtr->interp, Tcl_GetString(butPtr->textVarNamePtr), | |
965 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
966 | 966 | ButtonTextVarProc, butPtr); |
967 | 967 | } |
968 | 968 | if (butPtr->image != NULL) { |
996 | 996 | Tk_FreeTextLayout(butPtr->textLayout); |
997 | 997 | } |
998 | 998 | if (butPtr->selVarNamePtr != NULL) { |
999 | Tcl_UntraceVar(butPtr->interp, Tcl_GetString(butPtr->selVarNamePtr), | |
1000 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
999 | Tcl_UntraceVar2(butPtr->interp, Tcl_GetString(butPtr->selVarNamePtr), | |
1000 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1001 | 1001 | ButtonVarProc, butPtr); |
1002 | 1002 | } |
1003 | 1003 | Tk_FreeConfigOptions((char *) butPtr, butPtr->optionTable, |
1044 | 1044 | */ |
1045 | 1045 | |
1046 | 1046 | if (butPtr->textVarNamePtr != NULL) { |
1047 | Tcl_UntraceVar(interp, Tcl_GetString(butPtr->textVarNamePtr), | |
1048 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1047 | Tcl_UntraceVar2(interp, Tcl_GetString(butPtr->textVarNamePtr), | |
1048 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1049 | 1049 | ButtonTextVarProc, butPtr); |
1050 | 1050 | } |
1051 | 1051 | if (butPtr->selVarNamePtr != NULL) { |
1052 | Tcl_UntraceVar(interp, Tcl_GetString(butPtr->selVarNamePtr), | |
1053 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1052 | Tcl_UntraceVar2(interp, Tcl_GetString(butPtr->selVarNamePtr), | |
1053 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1054 | 1054 | ButtonVarProc, butPtr); |
1055 | 1055 | } |
1056 | 1056 | |
1296 | 1296 | */ |
1297 | 1297 | |
1298 | 1298 | if (butPtr->textVarNamePtr != NULL) { |
1299 | Tcl_TraceVar(interp, Tcl_GetString(butPtr->textVarNamePtr), | |
1300 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1299 | Tcl_TraceVar2(interp, Tcl_GetString(butPtr->textVarNamePtr), | |
1300 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1301 | 1301 | ButtonTextVarProc, butPtr); |
1302 | 1302 | } |
1303 | 1303 | if (butPtr->selVarNamePtr != NULL) { |
1304 | Tcl_TraceVar(interp, Tcl_GetString(butPtr->selVarNamePtr), | |
1305 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1304 | Tcl_TraceVar2(interp, Tcl_GetString(butPtr->selVarNamePtr), | |
1305 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1306 | 1306 | ButtonVarProc, butPtr); |
1307 | 1307 | } |
1308 | 1308 | |
1617 | 1617 | if (flags & TCL_TRACE_UNSETS) { |
1618 | 1618 | butPtr->flags &= ~(SELECTED | TRISTATED); |
1619 | 1619 | if ((flags & TCL_TRACE_DESTROYED) && !(flags & TCL_INTERP_DESTROYED)) { |
1620 | Tcl_TraceVar(interp, Tcl_GetString(butPtr->selVarNamePtr), | |
1621 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1620 | Tcl_TraceVar2(interp, Tcl_GetString(butPtr->selVarNamePtr), | |
1621 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1622 | 1622 | ButtonVarProc, clientData); |
1623 | 1623 | } |
1624 | 1624 | goto redisplay; |
1642 | 1642 | } |
1643 | 1643 | butPtr->flags |= SELECTED; |
1644 | 1644 | butPtr->flags &= ~TRISTATED; |
1645 | } else if (butPtr->offValuePtr | |
1645 | } else if (butPtr->offValuePtr | |
1646 | 1646 | && strcmp(value, Tcl_GetString(butPtr->offValuePtr)) == 0) { |
1647 | 1647 | if (!(butPtr->flags & (SELECTED | TRISTATED))) { |
1648 | 1648 | return NULL; |
1711 | 1711 | if ((flags & TCL_TRACE_DESTROYED) && !(flags & TCL_INTERP_DESTROYED)) { |
1712 | 1712 | Tcl_ObjSetVar2(interp, butPtr->textVarNamePtr, NULL, |
1713 | 1713 | butPtr->textPtr, TCL_GLOBAL_ONLY); |
1714 | Tcl_TraceVar(interp, Tcl_GetString(butPtr->textVarNamePtr), | |
1715 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1714 | Tcl_TraceVar2(interp, Tcl_GetString(butPtr->textVarNamePtr), | |
1715 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1716 | 1716 | ButtonTextVarProc, clientData); |
1717 | 1717 | } |
1718 | 1718 | return NULL; |
1742 | 1742 | int *indexPtr) /* Where to store converted index. */ |
1743 | 1743 | { |
1744 | 1744 | LineItem *linePtr = (LineItem *) itemPtr; |
1745 | int length; | |
1746 | const char *string = Tcl_GetStringFromObj(obj, &length); | |
1745 | const char *string = Tcl_GetString(obj); | |
1747 | 1746 | |
1748 | 1747 | if (string[0] == 'e') { |
1749 | if (strncmp(string, "end", (unsigned) length) == 0) { | |
1748 | if (strncmp(string, "end", obj->length) == 0) { | |
1750 | 1749 | *indexPtr = 2*linePtr->numPoints; |
1751 | 1750 | } else { |
1752 | 1751 | goto badIndex; |
1672 | 1672 | int *indexPtr) /* Where to store converted index. */ |
1673 | 1673 | { |
1674 | 1674 | PolygonItem *polyPtr = (PolygonItem *) itemPtr; |
1675 | int length; | |
1676 | const char *string = Tcl_GetStringFromObj(obj, &length); | |
1675 | const char *string = Tcl_GetString(obj); | |
1677 | 1676 | |
1678 | 1677 | if (string[0] == 'e') { |
1679 | if (strncmp(string, "end", (unsigned)length) != 0) { | |
1678 | if (strncmp(string, "end", obj->length) != 0) { | |
1680 | 1679 | goto badIndex; |
1681 | 1680 | } |
1682 | 1681 | *indexPtr = 2*(polyPtr->numPoints - polyPtr->autoClosed); |
192 | 192 | * such. |
193 | 193 | */ |
194 | 194 | |
195 | result = Tcl_Eval(interp, "::tk::ensure_psenc_is_loaded"); | |
195 | result = Tcl_EvalEx(interp, "::tk::ensure_psenc_is_loaded", -1, 0); | |
196 | 196 | if (result != TCL_OK) { |
197 | 197 | return result; |
198 | 198 | } |
1046 | 1046 | command = Tk_GetBinding(interp, canvasPtr->bindingTable, |
1047 | 1047 | object, Tcl_GetString(objv[3])); |
1048 | 1048 | if (command == NULL) { |
1049 | const char *string = Tcl_GetStringResult(interp); | |
1049 | const char *string = Tcl_GetString(Tcl_GetObjResult(interp)); | |
1050 | 1050 | |
1051 | 1051 | /* |
1052 | 1052 | * Ignore missing binding errors. This is a special hack that |
1241 | 1241 | int isNew = 0; |
1242 | 1242 | Tcl_HashEntry *entryPtr; |
1243 | 1243 | const char *arg; |
1244 | int length; | |
1244 | size_t length; | |
1245 | 1245 | |
1246 | 1246 | if (objc < 3) { |
1247 | 1247 | Tcl_WrongNumArgs(interp, 2, objv, "type coords ?arg ...?"); |
1248 | 1248 | result = TCL_ERROR; |
1249 | 1249 | goto done; |
1250 | 1250 | } |
1251 | arg = Tcl_GetStringFromObj(objv[2], &length); | |
1251 | arg = Tcl_GetString(objv[2]); | |
1252 | length = objv[2]->length; | |
1252 | 1253 | c = arg[0]; |
1253 | 1254 | |
1254 | 1255 | /* |
1260 | 1261 | Tcl_MutexLock(&typeListMutex); |
1261 | 1262 | for (typePtr = typeList; typePtr != NULL; typePtr = typePtr->nextPtr){ |
1262 | 1263 | if ((c == typePtr->name[0]) |
1263 | && (!strncmp(arg, typePtr->name, (unsigned)length))) { | |
1264 | && (!strncmp(arg, typePtr->name, length))) { | |
1264 | 1265 | if (matchPtr != NULL) { |
1265 | 1266 | Tcl_MutexUnlock(&typeListMutex); |
1266 | 1267 | goto badType; |
5538 | 5539 | int xOrigin, yOrigin, inset, width, height; |
5539 | 5540 | int scrollX1, scrollX2, scrollY1, scrollY2; |
5540 | 5541 | char *xScrollCmd, *yScrollCmd; |
5542 | Tcl_DString buf; | |
5541 | 5543 | |
5542 | 5544 | /* |
5543 | 5545 | * Save all the relevant values from the canvasPtr, because it might be |
5568 | 5570 | Tcl_Obj *fractions = ScrollFractions(xOrigin + inset, |
5569 | 5571 | xOrigin + width - inset, scrollX1, scrollX2); |
5570 | 5572 | |
5571 | result = Tcl_VarEval(interp, xScrollCmd," ",Tcl_GetString(fractions), | |
5572 | NULL); | |
5573 | Tcl_DStringInit(&buf); | |
5574 | Tcl_DStringAppend(&buf, xScrollCmd, -1); | |
5575 | Tcl_DStringAppend(&buf, " ", -1); | |
5576 | Tcl_DStringAppend(&buf, Tcl_GetString(fractions), -1); | |
5577 | result = Tcl_EvalEx(interp, Tcl_DStringValue(&buf), -1, 0); | |
5578 | Tcl_DStringFree(&buf); | |
5573 | 5579 | Tcl_DecrRefCount(fractions); |
5574 | 5580 | if (result != TCL_OK) { |
5575 | 5581 | Tcl_BackgroundException(interp, result); |
5582 | 5588 | Tcl_Obj *fractions = ScrollFractions(yOrigin + inset, |
5583 | 5589 | yOrigin + height - inset, scrollY1, scrollY2); |
5584 | 5590 | |
5585 | result = Tcl_VarEval(interp, yScrollCmd," ",Tcl_GetString(fractions), | |
5586 | NULL); | |
5591 | Tcl_DStringInit(&buf); | |
5592 | Tcl_DStringAppend(&buf, yScrollCmd, -1); | |
5593 | Tcl_DStringAppend(&buf, " ", -1); | |
5594 | Tcl_DStringAppend(&buf, Tcl_GetString(fractions), -1); | |
5595 | result = Tcl_EvalEx(interp, Tcl_DStringValue(&buf), -1, 0); | |
5596 | Tcl_DStringFree(&buf); | |
5587 | 5597 | Tcl_DecrRefCount(fractions); |
5588 | 5598 | if (result != TCL_OK) { |
5589 | 5599 | Tcl_BackgroundException(interp, result); |
108 | 108 | } |
109 | 109 | |
110 | 110 | for (i = 1; i < objc; i++) { |
111 | if (Tcl_GetIndexFromObj(interp, objv[i], bellOptions, "option", 0, | |
112 | &index) != TCL_OK) { | |
111 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], bellOptions, | |
112 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
113 | 113 | return TCL_ERROR; |
114 | 114 | } |
115 | 115 | switch ((enum options) index) { |
451 | 451 | * have to be freed. |
452 | 452 | */ |
453 | 453 | |
454 | ckfree(p); | |
454 | ckfree((char *)p); | |
455 | 455 | } |
456 | 456 | } |
457 | 457 | ckfree(winPtr->tagPtr); |
1017 | 1017 | |
1018 | 1018 | switch ((enum options) index) { |
1019 | 1019 | case TKWAIT_VARIABLE: |
1020 | if (Tcl_TraceVar(interp, Tcl_GetString(objv[2]), | |
1021 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1020 | if (Tcl_TraceVar2(interp, Tcl_GetString(objv[2]), | |
1021 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1022 | 1022 | WaitVariableProc, &done) != TCL_OK) { |
1023 | 1023 | return TCL_ERROR; |
1024 | 1024 | } |
1030 | 1030 | } |
1031 | 1031 | Tcl_DoOneEvent(0); |
1032 | 1032 | } |
1033 | Tcl_UntraceVar(interp, Tcl_GetString(objv[2]), | |
1034 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1033 | Tcl_UntraceVar2(interp, Tcl_GetString(objv[2]), | |
1034 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1035 | 1035 | WaitVariableProc, &done); |
1036 | 1036 | break; |
1037 | 1037 | |
2117 | 2117 | const char **argv) /* Argument strings. */ |
2118 | 2118 | { |
2119 | 2119 | Tcl_SetObjResult(interp, Tcl_ObjPrintf( |
2120 | "can't invoke \"%s\" command: application has been destroyed", | |
2120 | "can't invoke \"%s\" command: application has been destroyed", | |
2121 | 2121 | argv[0])); |
2122 | 2122 | return TCL_ERROR; |
2123 | 2123 | } |
26 | 26 | #include "tkFont.h" |
27 | 27 | |
28 | 28 | /* |
29 | * The following definition is an AssocData key used to keep track of all of | |
30 | * the option tables that have been created for an interpreter. | |
31 | */ | |
32 | ||
33 | #define OPTION_HASH_KEY "TkOptionTable" | |
29 | * The following definition keeps track of all of | |
30 | * the option tables that have been created for a thread. | |
31 | */ | |
32 | ||
33 | typedef struct ThreadSpecificData { | |
34 | int initialized; /* 0 means table below needs initializing. */ | |
35 | Tcl_HashTable hashTable; | |
36 | } ThreadSpecificData; | |
37 | static Tcl_ThreadDataKey dataKey; | |
38 | ||
34 | 39 | |
35 | 40 | /* |
36 | 41 | * The following two structures are used along with Tk_OptionSpec structures |
99 | 104 | * chain. */ |
100 | 105 | int numOptions; /* The number of items in the options array |
101 | 106 | * below. */ |
102 | int refCount2; /* Reference counter for controlling the freeing | |
103 | * of the memory occupied by this OptionTable */ | |
104 | 107 | Option options[1]; /* Information about the individual options in |
105 | 108 | * the table. This must be the last field in |
106 | 109 | * the structure: the actual size of the array |
114 | 117 | static int DoObjConfig(Tcl_Interp *interp, char *recordPtr, |
115 | 118 | Option *optionPtr, Tcl_Obj *valuePtr, |
116 | 119 | Tk_Window tkwin, Tk_SavedOption *savePtr); |
117 | static void DestroyOptionHashTable(ClientData clientData, | |
118 | Tcl_Interp *interp); | |
119 | 120 | static void FreeResources(Option *optionPtr, Tcl_Obj *objPtr, |
120 | 121 | char *internalPtr, Tk_Window tkwin); |
121 | 122 | static Tcl_Obj * GetConfigList(char *recordPtr, |
127 | 128 | Tcl_Obj *objPtr, OptionTable *tablePtr); |
128 | 129 | static int ObjectIsEmpty(Tcl_Obj *objPtr); |
129 | 130 | static void FreeOptionInternalRep(Tcl_Obj *objPtr); |
130 | static int SetOptionFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr); | |
131 | static void DupOptionInternalRep(Tcl_Obj *, Tcl_Obj *); | |
131 | 132 | |
132 | 133 | /* |
133 | 134 | * The structure below defines an object type that is used to cache the result |
139 | 140 | static const Tcl_ObjType optionObjType = { |
140 | 141 | "option", /* name */ |
141 | 142 | FreeOptionInternalRep, /* freeIntRepProc */ |
142 | NULL, /* dupIntRepProc */ | |
143 | DupOptionInternalRep, /* dupIntRepProc */ | |
143 | 144 | NULL, /* updateStringProc */ |
144 | SetOptionFromAny /* setFromAnyProc */ | |
145 | NULL /* setFromAnyProc */ | |
145 | 146 | }; |
146 | 147 | |
147 | 148 | /* |
170 | 171 | /* Static information about the configuration |
171 | 172 | * options. */ |
172 | 173 | { |
173 | Tcl_HashTable *hashTablePtr; | |
174 | 174 | Tcl_HashEntry *hashEntryPtr; |
175 | 175 | int newEntry; |
176 | 176 | OptionTable *tablePtr; |
177 | 177 | const Tk_OptionSpec *specPtr, *specPtr2; |
178 | 178 | Option *optionPtr; |
179 | 179 | int numOptions, i; |
180 | ThreadSpecificData *tsdPtr = | |
181 | Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); | |
180 | 182 | |
181 | 183 | /* |
182 | * We use an AssocData value in the interpreter to keep a hash table of | |
183 | * all the option tables we've created for this application. This is used | |
184 | * for two purposes. First, it allows us to share the tables (e.g. in | |
185 | * several chains) and second, we use the deletion callback for the | |
186 | * AssocData to delete all the option tables when the interpreter is | |
187 | * deleted. The code below finds the hash table or creates a new one if it | |
184 | * We use an TSD in the thread to keep a hash table of | |
185 | * all the option tables we've created for this application. This is | |
186 | * used for allowing us to share the tables (e.g. in several chains). | |
187 | * The code below finds the hash table or creates a new one if it | |
188 | 188 | * doesn't already exist. |
189 | 189 | */ |
190 | 190 | |
191 | hashTablePtr = Tcl_GetAssocData(interp, OPTION_HASH_KEY, NULL); | |
192 | if (hashTablePtr == NULL) { | |
193 | hashTablePtr = ckalloc(sizeof(Tcl_HashTable)); | |
194 | Tcl_InitHashTable(hashTablePtr, TCL_ONE_WORD_KEYS); | |
195 | Tcl_SetAssocData(interp, OPTION_HASH_KEY, DestroyOptionHashTable, | |
196 | hashTablePtr); | |
191 | if (!tsdPtr->initialized) { | |
192 | Tcl_InitHashTable(&tsdPtr->hashTable, TCL_ONE_WORD_KEYS); | |
193 | tsdPtr->initialized = 1; | |
197 | 194 | } |
198 | 195 | |
199 | 196 | /* |
201 | 198 | * reuse the existing table. |
202 | 199 | */ |
203 | 200 | |
204 | hashEntryPtr = Tcl_CreateHashEntry(hashTablePtr, (char *) templatePtr, | |
201 | hashEntryPtr = Tcl_CreateHashEntry(&tsdPtr->hashTable, (char *) templatePtr, | |
205 | 202 | &newEntry); |
206 | 203 | if (!newEntry) { |
207 | 204 | tablePtr = Tcl_GetHashValue(hashEntryPtr); |
220 | 217 | } |
221 | 218 | tablePtr = ckalloc(sizeof(OptionTable) + (numOptions * sizeof(Option))); |
222 | 219 | tablePtr->refCount = 1; |
223 | tablePtr->refCount2 = 1; | |
224 | 220 | tablePtr->hashEntryPtr = hashEntryPtr; |
225 | 221 | tablePtr->nextPtr = NULL; |
226 | 222 | tablePtr->numOptions = numOptions; |
356 | 352 | } |
357 | 353 | } |
358 | 354 | Tcl_DeleteHashEntry(tablePtr->hashEntryPtr); |
359 | tablePtr->refCount2--; | |
360 | if (tablePtr->refCount2 <= 0) { | |
361 | ckfree(tablePtr); | |
362 | } | |
363 | } | |
364 | ||
365 | /* | |
366 | *---------------------------------------------------------------------- | |
367 | * | |
368 | * DestroyOptionHashTable -- | |
369 | * | |
370 | * This function is the deletion callback associated with the AssocData | |
371 | * entry created by Tk_CreateOptionTable. It is invoked when an | |
372 | * interpreter is deleted, and deletes all of the option tables | |
373 | * associated with that interpreter. | |
374 | * | |
375 | * Results: | |
376 | * None. | |
377 | * | |
378 | * Side effects: | |
379 | * The option hash table is destroyed along with all of the OptionTable | |
380 | * structures that it refers to. | |
381 | * | |
382 | *---------------------------------------------------------------------- | |
383 | */ | |
384 | ||
385 | static void | |
386 | DestroyOptionHashTable( | |
387 | ClientData clientData, /* The hash table we are destroying */ | |
388 | Tcl_Interp *interp) /* The interpreter we are destroying */ | |
389 | { | |
390 | Tcl_HashTable *hashTablePtr = clientData; | |
391 | Tcl_HashSearch search; | |
392 | Tcl_HashEntry *hashEntryPtr; | |
393 | ||
394 | for (hashEntryPtr = Tcl_FirstHashEntry(hashTablePtr, &search); | |
395 | hashEntryPtr != NULL; | |
396 | hashEntryPtr = Tcl_NextHashEntry(&search)) { | |
397 | OptionTable *tablePtr = Tcl_GetHashValue(hashEntryPtr); | |
398 | ||
399 | /* | |
400 | * The following statements do two tricky things: | |
401 | * 1. They ensure that the option table is deleted, even if there are | |
402 | * outstanding references to it. | |
403 | * 2. They ensure that Tk_DeleteOptionTable doesn't delete other | |
404 | * tables chained from this one; we'll do it when we come across | |
405 | * the hash table entry for the chained table (in fact, the chained | |
406 | * table may already have been deleted). | |
407 | */ | |
408 | ||
409 | tablePtr->refCount = 1; | |
410 | tablePtr->nextPtr = NULL; | |
411 | Tk_DeleteOptionTable((Tk_OptionTable) tablePtr); | |
412 | } | |
413 | Tcl_DeleteHashTable(hashTablePtr); | |
414 | ckfree(hashTablePtr); | |
355 | ckfree(tablePtr); | |
415 | 356 | } |
416 | 357 | |
417 | 358 | /* |
736 | 677 | case TK_OPTION_STRING_TABLE: { |
737 | 678 | int newValue; |
738 | 679 | |
739 | if (Tcl_GetIndexFromObj(interp, valuePtr, | |
740 | optionPtr->specPtr->clientData, | |
680 | if (Tcl_GetIndexFromObjStruct(interp, valuePtr, | |
681 | optionPtr->specPtr->clientData, sizeof(char *), | |
741 | 682 | optionPtr->specPtr->optionName+1, 0, &newValue) != TCL_OK) { |
742 | 683 | return TCL_ERROR; |
743 | 684 | } |
1003 | 944 | if (objPtr->bytes != NULL) { |
1004 | 945 | return (objPtr->length == 0); |
1005 | 946 | } |
1006 | Tcl_GetStringFromObj(objPtr, &length); | |
947 | (void)Tcl_GetStringFromObj(objPtr, &length); | |
1007 | 948 | return (length == 0); |
1008 | 949 | } |
1009 | 950 | |
1151 | 1092 | objPtr->internalRep.twoPtrValue.ptr1 = (void *) tablePtr; |
1152 | 1093 | objPtr->internalRep.twoPtrValue.ptr2 = (void *) bestPtr; |
1153 | 1094 | objPtr->typePtr = &optionObjType; |
1154 | tablePtr->refCount2++; | |
1095 | tablePtr->refCount++; | |
1155 | 1096 | return bestPtr; |
1156 | 1097 | |
1157 | 1098 | error: |
1203 | 1144 | /* |
1204 | 1145 | *---------------------------------------------------------------------- |
1205 | 1146 | * |
1206 | * SetOptionFromAny -- | |
1207 | * | |
1208 | * This function is called to convert a Tcl object to option internal | |
1209 | * form. However, this doesn't make sense (need to have a table of | |
1210 | * options in order to do the conversion) so the function always | |
1211 | * generates an error. | |
1212 | * | |
1213 | * Results: | |
1214 | * The return value is always TCL_ERROR, and an error message is left in | |
1215 | * interp's result if interp isn't NULL. | |
1216 | * | |
1217 | * Side effects: | |
1218 | * None. | |
1219 | * | |
1220 | *---------------------------------------------------------------------- | |
1221 | */ | |
1222 | ||
1223 | static int | |
1224 | SetOptionFromAny( | |
1225 | Tcl_Interp *interp, /* Used for error reporting if not NULL. */ | |
1226 | register Tcl_Obj *objPtr) /* The object to convert. */ | |
1227 | { | |
1228 | Tcl_SetObjResult(interp, Tcl_NewStringObj( | |
1229 | "can't convert value to option except via GetOptionFromObj API", | |
1230 | -1)); | |
1231 | Tcl_SetErrorCode(interp, "TK", "API_ABUSE", NULL); | |
1232 | return TCL_ERROR; | |
1233 | } | |
1234 | ||
1235 | /* | |
1236 | *---------------------------------------------------------------------- | |
1237 | * | |
1238 | 1147 | * FreeOptionInternalRep -- |
1239 | 1148 | * |
1240 | 1149 | * Part of the option Tcl object type implementation. Frees the storage |
1256 | 1165 | FreeOptionInternalRep( |
1257 | 1166 | register Tcl_Obj *objPtr) /* Object whose internal rep to free. */ |
1258 | 1167 | { |
1259 | register OptionTable *tablePtr = (OptionTable *) objPtr->internalRep.twoPtrValue.ptr1; | |
1260 | ||
1261 | tablePtr->refCount2--; | |
1262 | if (tablePtr->refCount2 <= 0) { | |
1263 | ckfree(tablePtr); | |
1264 | } | |
1168 | register Tk_OptionTable tablePtr = (Tk_OptionTable) objPtr->internalRep.twoPtrValue.ptr1; | |
1169 | ||
1170 | Tk_DeleteOptionTable(tablePtr); | |
1265 | 1171 | objPtr->typePtr = NULL; |
1266 | 1172 | objPtr->internalRep.twoPtrValue.ptr1 = NULL; |
1267 | 1173 | objPtr->internalRep.twoPtrValue.ptr2 = NULL; |
1174 | } | |
1175 | ||
1176 | /* | |
1177 | *--------------------------------------------------------------------------- | |
1178 | * | |
1179 | * DupOptionInternalRep -- | |
1180 | * | |
1181 | * When a cached option object is duplicated, this is called to update the | |
1182 | * internal reps. | |
1183 | * | |
1184 | *--------------------------------------------------------------------------- | |
1185 | */ | |
1186 | ||
1187 | static void | |
1188 | DupOptionInternalRep( | |
1189 | Tcl_Obj *srcObjPtr, /* The object we are copying from. */ | |
1190 | Tcl_Obj *dupObjPtr) /* The object we are copying to. */ | |
1191 | { | |
1192 | register OptionTable *tablePtr = (OptionTable *) srcObjPtr->internalRep.twoPtrValue.ptr1; | |
1193 | tablePtr->refCount++; | |
1194 | dupObjPtr->typePtr = srcObjPtr->typePtr; | |
1195 | dupObjPtr->internalRep = srcObjPtr->internalRep; | |
1268 | 1196 | } |
1269 | 1197 | |
1270 | 1198 | /* |
1346 | 1274 | if (interp != NULL) { |
1347 | 1275 | Tcl_SetObjResult(interp, Tcl_ObjPrintf( |
1348 | 1276 | "value for \"%s\" missing", |
1349 | Tcl_GetStringFromObj(*objv, NULL))); | |
1277 | Tcl_GetString(*objv))); | |
1350 | 1278 | Tcl_SetErrorCode(interp, "TK", "VALUE_MISSING", NULL); |
1351 | 1279 | goto error; |
1352 | 1280 | } |
1371 | 1299 | : NULL) != TCL_OK) { |
1372 | 1300 | Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( |
1373 | 1301 | "\n (processing \"%.40s\" option)", |
1374 | Tcl_GetStringFromObj(*objv, NULL))); | |
1302 | Tcl_GetString(*objv))); | |
1375 | 1303 | goto error; |
1376 | 1304 | } |
1377 | 1305 | if (savePtr != NULL) { |
2145 | 2073 | * interpreter anymore. */ |
2146 | 2074 | { |
2147 | 2075 | OptionTable *tablePtr = (OptionTable *) table; |
2148 | Tcl_HashTable *hashTablePtr; | |
2149 | 2076 | Tcl_HashEntry *hashEntryPtr; |
2150 | 2077 | Tcl_HashSearch search; |
2151 | 2078 | Tcl_Obj *objPtr; |
2079 | ThreadSpecificData *tsdPtr = | |
2080 | Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); | |
2152 | 2081 | |
2153 | 2082 | objPtr = Tcl_NewObj(); |
2154 | hashTablePtr = Tcl_GetAssocData(interp, OPTION_HASH_KEY, NULL); | |
2155 | if (hashTablePtr == NULL) { | |
2083 | if (!tablePtr || !tsdPtr->initialized) { | |
2156 | 2084 | return objPtr; |
2157 | 2085 | } |
2158 | 2086 | |
2161 | 2089 | * want still is valid. |
2162 | 2090 | */ |
2163 | 2091 | |
2164 | for (hashEntryPtr = Tcl_FirstHashEntry(hashTablePtr, &search); | |
2092 | for (hashEntryPtr = Tcl_FirstHashEntry(&tsdPtr->hashTable, &search); | |
2165 | 2093 | hashEntryPtr != NULL; |
2166 | 2094 | hashEntryPtr = Tcl_NextHashEntry(&search)) { |
2167 | 2095 | if (tablePtr == (OptionTable *) Tcl_GetHashValue(hashEntryPtr)) { |
219 | 219 | Tcl_Channel consoleChannel; |
220 | 220 | |
221 | 221 | /* |
222 | * Ensure that we are getting a compatible version of Tcl. This is really | |
223 | * only an issue when Tk is loaded dynamically. | |
222 | * Ensure that we are getting a compatible version of Tcl. | |
224 | 223 | */ |
225 | 224 | |
226 | if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) { | |
225 | if (Tcl_InitStubs(interp, "8.6", 0) == NULL) { | |
227 | 226 | return; |
228 | 227 | } |
229 | 228 | |
438 | 437 | } |
439 | 438 | |
440 | 439 | Tcl_Preserve(consoleInterp); |
441 | result = Tcl_GlobalEval(consoleInterp, "source $tk_library/console.tcl"); | |
440 | result = Tcl_EvalEx(consoleInterp, "source $tk_library/console.tcl", | |
441 | -1, TCL_EVAL_GLOBAL); | |
442 | 442 | if (result == TCL_ERROR) { |
443 | 443 | Tcl_SetReturnOptions(interp, |
444 | 444 | Tcl_GetReturnOptions(consoleInterp, result)); |
530 | 530 | |
531 | 531 | Tcl_DStringFree(&ds); |
532 | 532 | Tcl_IncrRefCount(cmd); |
533 | Tcl_GlobalEvalObj(consoleInterp, cmd); | |
533 | Tcl_EvalObjEx(consoleInterp, cmd, TCL_EVAL_GLOBAL); | |
534 | 534 | Tcl_DecrRefCount(cmd); |
535 | 535 | } |
536 | 536 | } |
696 | 696 | Tcl_WrongNumArgs(interp, 1, objv, "option ?arg?"); |
697 | 697 | return TCL_ERROR; |
698 | 698 | } |
699 | if (Tcl_GetIndexFromObj(interp, objv[1], options, "option", 0, &index) | |
700 | != TCL_OK) { | |
699 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], options, | |
700 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
701 | 701 | return TCL_ERROR; |
702 | 702 | } |
703 | 703 | |
740 | 740 | Tcl_IncrRefCount(cmd); |
741 | 741 | if (consoleInterp && !Tcl_InterpDeleted(consoleInterp)) { |
742 | 742 | Tcl_Preserve(consoleInterp); |
743 | result = Tcl_GlobalEvalObj(consoleInterp, cmd); | |
743 | result = Tcl_EvalObjEx(consoleInterp, cmd, TCL_EVAL_GLOBAL); | |
744 | 744 | Tcl_SetReturnOptions(interp, |
745 | 745 | Tcl_GetReturnOptions(consoleInterp, result)); |
746 | 746 | Tcl_SetObjResult(interp, Tcl_GetObjResult(consoleInterp)); |
786 | 786 | Tcl_WrongNumArgs(interp, 1, objv, "option arg"); |
787 | 787 | return TCL_ERROR; |
788 | 788 | } |
789 | if (Tcl_GetIndexFromObj(interp, objv[1], options, "option", 0, &index) | |
790 | != TCL_OK) { | |
789 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], options, | |
790 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
791 | 791 | return TCL_ERROR; |
792 | 792 | } |
793 | 793 | |
806 | 806 | Tcl_Preserve(otherInterp); |
807 | 807 | switch ((enum option) index) { |
808 | 808 | case OTHER_EVAL: |
809 | result = Tcl_GlobalEvalObj(otherInterp, objv[2]); | |
809 | result = Tcl_EvalObjEx(otherInterp, objv[2], TCL_EVAL_GLOBAL); | |
810 | 810 | |
811 | 811 | /* |
812 | 812 | * TODO: Should exceptions be filtered here? |
945 | 945 | Tcl_Interp *consoleInterp = info->consoleInterp; |
946 | 946 | |
947 | 947 | if (consoleInterp && !Tcl_InterpDeleted(consoleInterp)) { |
948 | Tcl_GlobalEval(consoleInterp, "tk::ConsoleExit"); | |
948 | Tcl_EvalEx(consoleInterp, "tk::ConsoleExit", -1, TCL_EVAL_GLOBAL); | |
949 | 949 | } |
950 | 950 | |
951 | 951 | if (--info->refCount <= 0) { |
859 | 859 | /* 273 */ |
860 | 860 | EXTERN void Tk_CreateOldPhotoImageFormat( |
861 | 861 | const Tk_PhotoImageFormat *formatPtr); |
862 | /* 274 */ | |
863 | EXTERN void reserved274(void); | |
864 | /* 275 */ | |
865 | EXTERN void reserved275(void); | |
866 | 862 | |
867 | 863 | typedef struct { |
868 | 864 | const struct TkPlatStubs *tkPlatStubs; |
1149 | 1145 | Tcl_Interp * (*tk_Interp) (Tk_Window tkwin); /* 271 */ |
1150 | 1146 | void (*tk_CreateOldImageType) (const Tk_ImageType *typePtr); /* 272 */ |
1151 | 1147 | void (*tk_CreateOldPhotoImageFormat) (const Tk_PhotoImageFormat *formatPtr); /* 273 */ |
1152 | void (*reserved274) (void); /* 274 */ | |
1153 | void (*reserved275) (void); /* 275 */ | |
1154 | 1148 | } TkStubs; |
1155 | 1149 | |
1156 | 1150 | #ifdef __cplusplus |
1713 | 1707 | (tkStubsPtr->tk_CreateOldImageType) /* 272 */ |
1714 | 1708 | #define Tk_CreateOldPhotoImageFormat \ |
1715 | 1709 | (tkStubsPtr->tk_CreateOldPhotoImageFormat) /* 273 */ |
1716 | #define reserved274 \ | |
1717 | (tkStubsPtr->reserved274) /* 274 */ | |
1718 | #define reserved275 \ | |
1719 | (tkStubsPtr->reserved275) /* 275 */ | |
1720 | 1710 | |
1721 | 1711 | #endif /* defined(USE_TK_STUBS) */ |
1722 | 1712 |
391 | 391 | static int ConfigureEntry(Tcl_Interp *interp, Entry *entryPtr, |
392 | 392 | int objc, Tcl_Obj *const objv[], int flags); |
393 | 393 | static void DeleteChars(Entry *entryPtr, int index, int count); |
394 | static void DestroyEntry(char *memPtr); | |
394 | static void DestroyEntry(void *memPtr); | |
395 | 395 | static void DisplayEntry(ClientData clientData); |
396 | 396 | static void EntryBlinkProc(ClientData clientData); |
397 | 397 | static void EntryCmdDeletedProc(ClientData clientData); |
1009 | 1009 | |
1010 | 1010 | static void |
1011 | 1011 | DestroyEntry( |
1012 | char *memPtr) /* Info about entry widget. */ | |
1012 | void *memPtr) /* Info about entry widget. */ | |
1013 | 1013 | { |
1014 | Entry *entryPtr = (Entry *) memPtr; | |
1014 | Entry *entryPtr = memPtr; | |
1015 | 1015 | |
1016 | 1016 | /* |
1017 | 1017 | * Free up all the stuff that requires special handling, then let |
1018 | 1018 | * Tk_FreeOptions handle all the standard option-related stuff. |
1019 | 1019 | */ |
1020 | 1020 | |
1021 | ckfree(entryPtr->string); | |
1021 | ckfree((char *)entryPtr->string); | |
1022 | 1022 | if (entryPtr->textVarName != NULL) { |
1023 | Tcl_UntraceVar(entryPtr->interp, entryPtr->textVarName, | |
1024 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1023 | Tcl_UntraceVar2(entryPtr->interp, entryPtr->textVarName, | |
1024 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1025 | 1025 | EntryTextVarProc, entryPtr); |
1026 | 1026 | entryPtr->flags &= ~ENTRY_VAR_TRACED; |
1027 | 1027 | } |
1033 | 1033 | } |
1034 | 1034 | Tcl_DeleteTimerHandler(entryPtr->insertBlinkHandler); |
1035 | 1035 | if (entryPtr->displayString != entryPtr->string) { |
1036 | ckfree(entryPtr->displayString); | |
1036 | ckfree((char *)entryPtr->displayString); | |
1037 | 1037 | } |
1038 | 1038 | if (entryPtr->type == TK_SPINBOX) { |
1039 | 1039 | Spinbox *sbPtr = (Spinbox *) entryPtr; |
1104 | 1104 | |
1105 | 1105 | if ((entryPtr->textVarName != NULL) |
1106 | 1106 | && (entryPtr->flags & ENTRY_VAR_TRACED)) { |
1107 | Tcl_UntraceVar(interp, entryPtr->textVarName, | |
1107 | Tcl_UntraceVar2(interp, entryPtr->textVarName, NULL, | |
1108 | 1108 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
1109 | 1109 | EntryTextVarProc, entryPtr); |
1110 | 1110 | entryPtr->flags &= ~ENTRY_VAR_TRACED; |
1302 | 1302 | if (entryPtr->textVarName != NULL) { |
1303 | 1303 | const char *value; |
1304 | 1304 | |
1305 | value = Tcl_GetVar(interp, entryPtr->textVarName, TCL_GLOBAL_ONLY); | |
1305 | value = Tcl_GetVar2(interp, entryPtr->textVarName, NULL, TCL_GLOBAL_ONLY); | |
1306 | 1306 | if (value == NULL) { |
1307 | 1307 | EntryValueChanged(entryPtr, NULL); |
1308 | 1308 | } else { |
1356 | 1356 | |
1357 | 1357 | if ((entryPtr->textVarName != NULL) |
1358 | 1358 | && !(entryPtr->flags & ENTRY_VAR_TRACED)) { |
1359 | Tcl_TraceVar(interp, entryPtr->textVarName, | |
1360 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1359 | Tcl_TraceVar2(interp, entryPtr->textVarName, | |
1360 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1361 | 1361 | EntryTextVarProc, entryPtr); |
1362 | 1362 | entryPtr->flags |= ENTRY_VAR_TRACED; |
1363 | 1363 | } |
1880 | 1880 | char *p; |
1881 | 1881 | |
1882 | 1882 | if (entryPtr->displayString != entryPtr->string) { |
1883 | ckfree(entryPtr->displayString); | |
1883 | ckfree((char *)entryPtr->displayString); | |
1884 | 1884 | entryPtr->displayString = entryPtr->string; |
1885 | 1885 | entryPtr->numDisplayBytes = entryPtr->numBytes; |
1886 | 1886 | } |
2036 | 2036 | return; |
2037 | 2037 | } |
2038 | 2038 | |
2039 | ckfree(string); | |
2039 | ckfree((char *)string); | |
2040 | 2040 | entryPtr->string = newStr; |
2041 | 2041 | |
2042 | 2042 | /* |
2141 | 2141 | } |
2142 | 2142 | |
2143 | 2143 | ckfree(toDelete); |
2144 | ckfree(entryPtr->string); | |
2144 | ckfree((char *)entryPtr->string); | |
2145 | 2145 | entryPtr->string = newStr; |
2146 | 2146 | entryPtr->numChars -= count; |
2147 | 2147 | entryPtr->numBytes -= byteCount; |
2230 | 2230 | if (entryPtr->textVarName == NULL) { |
2231 | 2231 | newValue = NULL; |
2232 | 2232 | } else { |
2233 | newValue = Tcl_SetVar(entryPtr->interp, entryPtr->textVarName, | |
2234 | entryPtr->string, TCL_GLOBAL_ONLY); | |
2233 | newValue = Tcl_SetVar2(entryPtr->interp, entryPtr->textVarName, | |
2234 | NULL, entryPtr->string, TCL_GLOBAL_ONLY); | |
2235 | 2235 | } |
2236 | 2236 | |
2237 | 2237 | if ((newValue != NULL) && (strcmp(newValue, entryPtr->string) != 0)) { |
2317 | 2317 | |
2318 | 2318 | if (entryPtr->flags & VALIDATE_ABORT) { |
2319 | 2319 | entryPtr->flags &= ~VALIDATE_ABORT; |
2320 | ckfree(value); | |
2320 | ckfree((char *)value); | |
2321 | 2321 | return; |
2322 | 2322 | } |
2323 | 2323 | } |
2324 | 2324 | |
2325 | 2325 | oldSource = entryPtr->string; |
2326 | ckfree(entryPtr->string); | |
2326 | ckfree((char *)entryPtr->string); | |
2327 | 2327 | |
2328 | 2328 | if (malloced) { |
2329 | 2329 | entryPtr->string = value; |
2428 | 2428 | if (entryPtr->flags & REDRAW_PENDING) { |
2429 | 2429 | Tcl_CancelIdleCall(DisplayEntry, clientData); |
2430 | 2430 | } |
2431 | Tcl_EventuallyFree(clientData, DestroyEntry); | |
2431 | Tcl_EventuallyFree(clientData, (Tcl_FreeProc *) DestroyEntry); | |
2432 | 2432 | } |
2433 | 2433 | break; |
2434 | 2434 | case ConfigureNotify: |
2559 | 2559 | case '@': { |
2560 | 2560 | int x, roundUp, maxWidth; |
2561 | 2561 | |
2562 | if (Tcl_GetInt(interp, string + 1, &x) != TCL_OK) { | |
2562 | if (Tcl_GetInt(NULL, string + 1, &x) != TCL_OK) { | |
2563 | 2563 | goto badIndex; |
2564 | 2564 | } |
2565 | 2565 | if (x < entryPtr->inset) { |
2588 | 2588 | break; |
2589 | 2589 | } |
2590 | 2590 | default: |
2591 | if (Tcl_GetInt(interp, string, indexPtr) != TCL_OK) { | |
2591 | if (Tcl_GetInt(NULL, string, indexPtr) != TCL_OK) { | |
2592 | 2592 | goto badIndex; |
2593 | 2593 | } |
2594 | 2594 | if (*indexPtr < 0){ |
2938 | 2938 | int code; |
2939 | 2939 | double first, last; |
2940 | 2940 | Tcl_Interp *interp; |
2941 | Tcl_DString buf; | |
2941 | 2942 | |
2942 | 2943 | if (entryPtr->scrollCmd == NULL) { |
2943 | 2944 | return; |
2948 | 2949 | EntryVisibleRange(entryPtr, &first, &last); |
2949 | 2950 | Tcl_PrintDouble(NULL, first, firstStr); |
2950 | 2951 | Tcl_PrintDouble(NULL, last, lastStr); |
2951 | code = Tcl_VarEval(interp, entryPtr->scrollCmd, " ", firstStr, " ", | |
2952 | lastStr, NULL); | |
2952 | Tcl_DStringInit(&buf); | |
2953 | Tcl_DStringAppend(&buf, entryPtr->scrollCmd, -1); | |
2954 | Tcl_DStringAppend(&buf, " ", -1); | |
2955 | Tcl_DStringAppend(&buf, firstStr, -1); | |
2956 | Tcl_DStringAppend(&buf, " ", -1); | |
2957 | Tcl_DStringAppend(&buf, lastStr, -1); | |
2958 | code = Tcl_EvalEx(interp, Tcl_DStringValue(&buf), -1, 0); | |
2959 | Tcl_DStringFree(&buf); | |
2953 | 2960 | if (code != TCL_OK) { |
2954 | 2961 | Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( |
2955 | 2962 | "\n (horizontal scrolling command executed by %s)", |
3094 | 3101 | |
3095 | 3102 | if (flags & TCL_TRACE_UNSETS) { |
3096 | 3103 | if ((flags & TCL_TRACE_DESTROYED) && !(flags & TCL_INTERP_DESTROYED)) { |
3097 | Tcl_SetVar(interp, entryPtr->textVarName, entryPtr->string, | |
3098 | TCL_GLOBAL_ONLY); | |
3099 | Tcl_TraceVar(interp, entryPtr->textVarName, | |
3104 | Tcl_SetVar2(interp, entryPtr->textVarName, NULL, | |
3105 | entryPtr->string, TCL_GLOBAL_ONLY); | |
3106 | Tcl_TraceVar2(interp, entryPtr->textVarName, NULL, | |
3100 | 3107 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
3101 | 3108 | EntryTextVarProc, clientData); |
3102 | 3109 | entryPtr->flags |= ENTRY_VAR_TRACED; |
3110 | 3117 | * value because we changed it because someone typed in the entry). |
3111 | 3118 | */ |
3112 | 3119 | |
3113 | value = Tcl_GetVar(interp, entryPtr->textVarName, TCL_GLOBAL_ONLY); | |
3120 | value = Tcl_GetVar2(interp, entryPtr->textVarName, NULL, TCL_GLOBAL_ONLY); | |
3114 | 3121 | if (value == NULL) { |
3115 | 3122 | value = ""; |
3116 | 3123 | } |
3170 | 3177 | &bool) != TCL_OK) { |
3171 | 3178 | Tcl_AddErrorInfo(interp, |
3172 | 3179 | "\n (invalid boolean result from validation command)"); |
3173 | Tcl_BackgroundError(interp); | |
3180 | Tcl_BackgroundException(interp, TCL_ERROR); | |
3174 | 3181 | Tcl_ResetResult(interp); |
3175 | 3182 | return TCL_ERROR; |
3176 | 3183 | } |
161 | 161 | * We have a subcommand to parse and act upon. |
162 | 162 | */ |
163 | 163 | |
164 | if (Tcl_GetIndexFromObj(interp, objv[1], focusOptions, "option", 0, | |
165 | &index) != TCL_OK) { | |
164 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], focusOptions, | |
165 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
166 | 166 | return TCL_ERROR; |
167 | 167 | } |
168 | 168 | if (objc != 3) { |
307 | 307 | static int CreateFrame(ClientData clientData, Tcl_Interp *interp, |
308 | 308 | int objc, Tcl_Obj *const argv[], |
309 | 309 | enum FrameType type, const char *appName); |
310 | static void DestroyFrame(char *memPtr); | |
310 | static void DestroyFrame(void *memPtr); | |
311 | 311 | static void DestroyFramePartly(Frame *framePtr); |
312 | 312 | static void DisplayFrame(ClientData clientData); |
313 | 313 | static void FrameCmdDeletedProc(ClientData clientData); |
726 | 726 | Tcl_WrongNumArgs(interp, 1, objv, "option ?arg ...?"); |
727 | 727 | return TCL_ERROR; |
728 | 728 | } |
729 | if (Tcl_GetIndexFromObj(interp, objv[1], frameOptions, "option", 0, | |
730 | &index) != TCL_OK) { | |
729 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], frameOptions, | |
730 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
731 | 731 | return TCL_ERROR; |
732 | 732 | } |
733 | 733 | Tcl_Preserve(framePtr); |
833 | 833 | |
834 | 834 | static void |
835 | 835 | DestroyFrame( |
836 | char *memPtr) /* Info about frame widget. */ | |
836 | void *memPtr) /* Info about frame widget. */ | |
837 | 837 | { |
838 | register Frame *framePtr = (Frame *) memPtr; | |
839 | register Labelframe *labelframePtr = (Labelframe *) memPtr; | |
838 | register Frame *framePtr = memPtr; | |
839 | register Labelframe *labelframePtr = memPtr; | |
840 | 840 | |
841 | 841 | if (framePtr->type == TYPE_LABELFRAME) { |
842 | 842 | Tk_FreeTextLayout(labelframePtr->textLayout); |
1655 | 1655 | Tcl_CancelIdleCall(DisplayFrame, framePtr); |
1656 | 1656 | } |
1657 | 1657 | Tcl_CancelIdleCall(MapFrame, framePtr); |
1658 | Tcl_EventuallyFree(framePtr, DestroyFrame); | |
1658 | Tcl_EventuallyFree(framePtr, (Tcl_FreeProc *) DestroyFrame); | |
1659 | 1659 | } else if (eventPtr->type == FocusIn) { |
1660 | 1660 | if (eventPtr->xfocus.detail != NotifyInferior) { |
1661 | 1661 | framePtr->flags |= GOT_FOCUS; |
241 | 241 | * Tk will set its requested size to fit the |
242 | 242 | * needs of its slaves. |
243 | 243 | * ALLOCED_MASTER 1 means that Grid has allocated itself as |
244 | * geometry master for this window. | |
244 | * geometry master for this window. | |
245 | 245 | */ |
246 | 246 | |
247 | 247 | #define REQUESTED_RELAYOUT 1 |
261 | 261 | int slotType, int checkOnly); |
262 | 262 | static int ConfigureSlaves(Tcl_Interp *interp, Tk_Window tkwin, |
263 | 263 | int objc, Tcl_Obj *const objv[]); |
264 | static void DestroyGrid(char *memPtr); | |
264 | static void DestroyGrid(void *memPtr); | |
265 | 265 | static Gridder * GetGrid(Tk_Window tkwin); |
266 | 266 | static int GridAnchorCommand(Tk_Window tkwin, Tcl_Interp *interp, |
267 | 267 | int objc, Tcl_Obj *const objv[]); |
360 | 360 | return TCL_ERROR; |
361 | 361 | } |
362 | 362 | |
363 | if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, | |
364 | &index) != TCL_OK) { | |
363 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], optionStrings, | |
364 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
365 | 365 | return TCL_ERROR; |
366 | 366 | } |
367 | 367 | |
909 | 909 | |
910 | 910 | if (masterPtr->slavePtr != NULL) { |
911 | 911 | if (TkSetGeometryMaster(interp, master, "grid") != TCL_OK) { |
912 | return TCL_ERROR; | |
912 | return TCL_ERROR; | |
913 | 913 | } |
914 | 914 | masterPtr->flags |= ALLOCED_MASTER; |
915 | 915 | } |
1075 | 1075 | * returned. |
1076 | 1076 | */ |
1077 | 1077 | |
1078 | if (Tcl_GetIndexFromObj(interp, objv[4], optionStrings, "option", 0, | |
1079 | &index) != TCL_OK) { | |
1078 | if (Tcl_GetIndexFromObjStruct(interp, objv[4], optionStrings, | |
1079 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
1080 | 1080 | Tcl_DecrRefCount(listCopy); |
1081 | 1081 | return TCL_ERROR; |
1082 | 1082 | } |
1174 | 1174 | */ |
1175 | 1175 | |
1176 | 1176 | for (i = 4; i < objc; i += 2) { |
1177 | if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, | |
1178 | "option", 0, &index) != TCL_OK) { | |
1177 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, | |
1178 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
1179 | 1179 | Tcl_DecrRefCount(listCopy); |
1180 | 1180 | return TCL_ERROR; |
1181 | 1181 | } |
1363 | 1363 | } |
1364 | 1364 | |
1365 | 1365 | for (i = 3; i < objc; i += 2) { |
1366 | if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, "option", 0, | |
1367 | &index) != TCL_OK) { | |
1366 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, | |
1367 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
1368 | 1368 | return TCL_ERROR; |
1369 | 1369 | } |
1370 | 1370 | if (Tcl_GetIntFromObj(interp, objv[i+1], &value) != TCL_OK) { |
2806 | 2806 | |
2807 | 2807 | static void |
2808 | 2808 | DestroyGrid( |
2809 | char *memPtr) /* Info about window that is now dead. */ | |
2809 | void *memPtr) /* Info about window that is now dead. */ | |
2810 | 2810 | { |
2811 | register Gridder *gridPtr = (Gridder *) memPtr; | |
2811 | register Gridder *gridPtr = memPtr; | |
2812 | 2812 | |
2813 | 2813 | if (gridPtr->masterDataPtr != NULL) { |
2814 | 2814 | if (gridPtr->masterDataPtr->rowPtr != NULL) { |
2885 | 2885 | Tcl_CancelIdleCall(ArrangeGrid, gridPtr); |
2886 | 2886 | } |
2887 | 2887 | gridPtr->tkwin = NULL; |
2888 | Tcl_EventuallyFree(gridPtr, DestroyGrid); | |
2888 | Tcl_EventuallyFree(gridPtr, (Tcl_FreeProc *)DestroyGrid); | |
2889 | 2889 | } else if (eventPtr->type == MapNotify) { |
2890 | 2890 | if ((gridPtr->slavePtr != NULL) |
2891 | 2891 | && !(gridPtr->flags & REQUESTED_RELAYOUT)) { |
3057 | 3057 | */ |
3058 | 3058 | |
3059 | 3059 | for (i = numWindows; i < objc; i += 2) { |
3060 | if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, "option", 0, | |
3061 | &index) != TCL_OK) { | |
3060 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, | |
3061 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
3062 | 3062 | return TCL_ERROR; |
3063 | 3063 | } |
3064 | 3064 | if (index == CONF_IN) { |
3160 | 3160 | */ |
3161 | 3161 | |
3162 | 3162 | for (i = numWindows; i < objc; i += 2) { |
3163 | Tcl_GetIndexFromObj(interp, objv[i], optionStrings, "option", 0, | |
3164 | &index); | |
3163 | Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, | |
3164 | sizeof(char *), "option", 0, &index); | |
3165 | 3165 | switch ((enum options) index) { |
3166 | 3166 | case CONF_COLUMN: |
3167 | 3167 | if (Tcl_GetIntFromObj(NULL, objv[i+1], &tmp) != TCL_OK |
233 | 233 | return TCL_ERROR; |
234 | 234 | } |
235 | 235 | |
236 | if (Tcl_GetIndexFromObj(interp, objv[1], imageOptions, "option", 0, | |
237 | &index) != TCL_OK) { | |
236 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], imageOptions, | |
237 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
238 | 238 | return TCL_ERROR; |
239 | 239 | } |
240 | 240 | switch ((enum options) index) { |
329 | 329 | * None. |
330 | 330 | * |
331 | 331 | * Side effects: |
332 | * Generates errors via Tcl_BackgroundError if there are problems in | |
332 | * Generates errors via Tcl_BackgroundException if there are problems in | |
333 | 333 | * setting up the instance. |
334 | 334 | * |
335 | 335 | *---------------------------------------------------------------------- |
447 | 447 | Tcl_AppendObjToErrorInfo(masterPtr->interp, Tcl_ObjPrintf( |
448 | 448 | "\n (while configuring image \"%s\")", Tk_NameOfImage( |
449 | 449 | masterPtr->tkMaster))); |
450 | Tcl_BackgroundError(masterPtr->interp); | |
450 | Tcl_BackgroundException(masterPtr->interp, TCL_ERROR); | |
451 | 451 | } |
452 | 452 | |
453 | 453 | /* |
763 | 763 | Tcl_WrongNumArgs(interp, 1, objv, "option ?arg ...?"); |
764 | 764 | return TCL_ERROR; |
765 | 765 | } |
766 | if (Tcl_GetIndexFromObj(interp, objv[1], bmapOptions, "option", 0, | |
767 | &index) != TCL_OK) { | |
766 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], bmapOptions, | |
767 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
768 | 768 | return TCL_ERROR; |
769 | 769 | } |
770 | 770 | switch (index) { |
424 | 424 | return TCL_ERROR; |
425 | 425 | } |
426 | 426 | for (i = 1; i < argc; i++) { |
427 | if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, "option name", | |
428 | 0, &nBytes) != TCL_OK) { | |
427 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, | |
428 | sizeof(char *), "option name", 0, &nBytes) != TCL_OK) { | |
429 | 429 | return TCL_ERROR; |
430 | 430 | } |
431 | 431 | if (i == (argc-1)) { |
333 | 333 | |
334 | 334 | if (Tcl_ZlibStreamInit(NULL, dir, TCL_ZLIB_FORMAT_ZLIB, |
335 | 335 | TCL_ZLIB_COMPRESS_DEFAULT, NULL, &pngPtr->stream) != TCL_OK) { |
336 | Tcl_SetObjResult(interp, Tcl_NewStringObj( | |
337 | "zlib initialization failed", -1)); | |
338 | Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "ZLIB_INIT", NULL); | |
336 | if (interp) { | |
337 | Tcl_SetObjResult(interp, Tcl_NewStringObj( | |
338 | "zlib initialization failed", -1)); | |
339 | Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "ZLIB_INIT", NULL); | |
340 | } | |
339 | 341 | if (objPtr) { |
340 | 342 | Tcl_DecrRefCount(objPtr); |
341 | 343 | } |
798 | 800 | /* |
799 | 801 | * 4.3. Summary of standard chunks |
800 | 802 | * |
801 | * This table summarizes some properties of the standard chunk types. | |
803 | * This table summarizes some properties of the standard chunk types. | |
802 | 804 | * |
803 | 805 | * Critical chunks (must appear in this order, except PLTE is optional): |
804 | 806 | * |
2298 | 2300 | for (; objc>0 ; objc--, objv++) { |
2299 | 2301 | int optIndex; |
2300 | 2302 | |
2301 | if (Tcl_GetIndexFromObj(interp, objv[0], fmtOptions, "option", 0, | |
2302 | &optIndex) == TCL_ERROR) { | |
2303 | if (Tcl_GetIndexFromObjStruct(interp, objv[0], fmtOptions, | |
2304 | sizeof(char *), "option", 0, &optIndex) == TCL_ERROR) { | |
2303 | 2305 | return TCL_ERROR; |
2304 | 2306 | } |
2305 | 2307 | |
2666 | 2668 | { |
2667 | 2669 | PNGImage png; |
2668 | 2670 | int match = 0; |
2669 | Tcl_SavedResult sya; | |
2670 | ||
2671 | Tcl_SaveResult(interp, &sya); | |
2672 | ||
2673 | InitPNGImage(interp, &png, chan, NULL, TCL_ZLIB_STREAM_INFLATE); | |
2671 | ||
2672 | InitPNGImage(NULL, &png, chan, NULL, TCL_ZLIB_STREAM_INFLATE); | |
2674 | 2673 | |
2675 | 2674 | if (ReadIHDR(interp, &png) == TCL_OK) { |
2676 | 2675 | *widthPtr = png.block.width; |
2679 | 2678 | } |
2680 | 2679 | |
2681 | 2680 | CleanupPNGImage(&png); |
2682 | Tcl_RestoreResult(interp, &sya); | |
2683 | 2681 | |
2684 | 2682 | return match; |
2685 | 2683 | } |
2758 | 2756 | { |
2759 | 2757 | PNGImage png; |
2760 | 2758 | int match = 0; |
2761 | Tcl_SavedResult sya; | |
2762 | ||
2763 | Tcl_SaveResult(interp, &sya); | |
2764 | InitPNGImage(interp, &png, NULL, pObjData, TCL_ZLIB_STREAM_INFLATE); | |
2759 | ||
2760 | InitPNGImage(NULL, &png, NULL, pObjData, TCL_ZLIB_STREAM_INFLATE); | |
2765 | 2761 | |
2766 | 2762 | png.strDataBuf = Tcl_GetByteArrayFromObj(pObjData, &png.strDataLen); |
2767 | 2763 | |
2772 | 2768 | } |
2773 | 2769 | |
2774 | 2770 | CleanupPNGImage(&png); |
2775 | Tcl_RestoreResult(interp, &sya); | |
2776 | 2771 | return match; |
2777 | 2772 | } |
2778 | 2773 | |
3162 | 3157 | |
3163 | 3158 | *destPtr++ = srcPtr[blockPtr->offset[0]]; |
3164 | 3159 | |
3165 | /* | |
3160 | /* | |
3166 | 3161 | * If not grayscale, copy the green and blue channels. |
3167 | 3162 | */ |
3168 | 3163 |
63 | 63 | * None. |
64 | 64 | * |
65 | 65 | * Side effects: |
66 | * Generates errors via Tcl_BackgroundError if there are problems in | |
66 | * Generates errors via Tcl_BackgroundException if there are problems in | |
67 | 67 | * setting up the instance. |
68 | 68 | * |
69 | 69 | *---------------------------------------------------------------------- |
229 | 229 | while (tsdPtr->formatList != NULL) { |
230 | 230 | freePtr = tsdPtr->formatList; |
231 | 231 | tsdPtr->formatList = tsdPtr->formatList->nextPtr; |
232 | ckfree(freePtr->name); | |
232 | ckfree((char *)freePtr->name); | |
233 | 233 | ckfree(freePtr); |
234 | 234 | } |
235 | 235 | } |
525 | 525 | #define TK_DISPLAY_USE_IM (1 << 1) |
526 | 526 | #define TK_DISPLAY_WM_TRACING (1 << 3) |
527 | 527 | #define TK_DISPLAY_IN_WARP (1 << 4) |
528 | #define TK_DISPLAY_USE_XKB (1 << 5) | |
528 | 529 | |
529 | 530 | /* |
530 | 531 | * One of the following structures exists for each error handler created by a |
391 | 391 | Tcl_Obj *const objv[], int index); |
392 | 392 | static int ListboxDeleteSubCmd(Listbox *listPtr, |
393 | 393 | int first, int last); |
394 | static void DestroyListbox(char *memPtr); | |
394 | static void DestroyListbox(void *memPtr); | |
395 | 395 | static void DestroyListboxOptionTables(ClientData clientData, |
396 | 396 | Tcl_Interp *interp); |
397 | 397 | static void DisplayListbox(ClientData clientData); |
1427 | 1427 | |
1428 | 1428 | static void |
1429 | 1429 | DestroyListbox( |
1430 | char *memPtr) /* Info about listbox widget. */ | |
1430 | void *memPtr) /* Info about listbox widget. */ | |
1431 | 1431 | { |
1432 | register Listbox *listPtr = (Listbox *) memPtr; | |
1432 | register Listbox *listPtr = memPtr; | |
1433 | 1433 | Tcl_HashEntry *entry; |
1434 | 1434 | Tcl_HashSearch search; |
1435 | 1435 | |
1443 | 1443 | } |
1444 | 1444 | |
1445 | 1445 | if (listPtr->listVarName != NULL) { |
1446 | Tcl_UntraceVar(listPtr->interp, listPtr->listVarName, | |
1446 | Tcl_UntraceVar2(listPtr->interp, listPtr->listVarName, NULL, | |
1447 | 1447 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
1448 | 1448 | ListboxListVarProc, listPtr); |
1449 | 1449 | } |
1551 | 1551 | |
1552 | 1552 | oldExport = listPtr->exportSelection; |
1553 | 1553 | if (listPtr->listVarName != NULL) { |
1554 | Tcl_UntraceVar(interp, listPtr->listVarName, | |
1554 | Tcl_UntraceVar2(interp, listPtr->listVarName, NULL, | |
1555 | 1555 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
1556 | 1556 | ListboxListVarProc, listPtr); |
1557 | 1557 | } |
1628 | 1628 | if (Tcl_SetVar2Ex(interp, listPtr->listVarName, NULL, |
1629 | 1629 | listVarObj, TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG) |
1630 | 1630 | == NULL) { |
1631 | if (oldListObj == NULL) { | |
1632 | Tcl_DecrRefCount(listVarObj); | |
1633 | } | |
1634 | 1631 | continue; |
1635 | 1632 | } |
1636 | 1633 | } |
1647 | 1644 | } |
1648 | 1645 | |
1649 | 1646 | listPtr->listObj = listVarObj; |
1650 | Tcl_TraceVar(listPtr->interp, listPtr->listVarName, | |
1651 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1647 | Tcl_TraceVar2(listPtr->interp, listPtr->listVarName, | |
1648 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1652 | 1649 | ListboxListVarProc, listPtr); |
1653 | 1650 | } else if (listPtr->listObj == NULL) { |
1654 | 1651 | listPtr->listObj = Tcl_NewObj(); |
2600 | 2597 | if (listPtr->flags & REDRAW_PENDING) { |
2601 | 2598 | Tcl_CancelIdleCall(DisplayListbox, clientData); |
2602 | 2599 | } |
2603 | Tcl_EventuallyFree(clientData, DestroyListbox); | |
2600 | Tcl_EventuallyFree(clientData, (Tcl_FreeProc *) DestroyListbox); | |
2604 | 2601 | } |
2605 | 2602 | } else if (eventPtr->type == ConfigureNotify) { |
2606 | 2603 | int vertSpace; |
3243 | 3240 | double first, last; |
3244 | 3241 | int result; |
3245 | 3242 | Tcl_Interp *interp; |
3243 | Tcl_DString buf; | |
3246 | 3244 | |
3247 | 3245 | if (listPtr->yScrollCmd == NULL) { |
3248 | 3246 | return; |
3268 | 3266 | |
3269 | 3267 | interp = listPtr->interp; |
3270 | 3268 | Tcl_Preserve(interp); |
3271 | result = Tcl_VarEval(interp, listPtr->yScrollCmd, " ", firstStr, " ", | |
3272 | lastStr, NULL); | |
3269 | Tcl_DStringInit(&buf); | |
3270 | Tcl_DStringAppend(&buf, listPtr->yScrollCmd, -1); | |
3271 | Tcl_DStringAppend(&buf, " ", -1); | |
3272 | Tcl_DStringAppend(&buf, firstStr, -1); | |
3273 | Tcl_DStringAppend(&buf, " ", -1); | |
3274 | Tcl_DStringAppend(&buf, lastStr, -1); | |
3275 | result = Tcl_EvalEx(interp, Tcl_DStringValue(&buf), -1, 0); | |
3276 | Tcl_DStringFree(&buf); | |
3273 | 3277 | if (result != TCL_OK) { |
3274 | 3278 | Tcl_AddErrorInfo(interp, |
3275 | 3279 | "\n (vertical scrolling command executed by listbox)"); |
3306 | 3310 | int result, windowWidth; |
3307 | 3311 | double first, last; |
3308 | 3312 | Tcl_Interp *interp; |
3313 | Tcl_DString buf; | |
3309 | 3314 | |
3310 | 3315 | if (listPtr->xScrollCmd == NULL) { |
3311 | 3316 | return; |
3333 | 3338 | |
3334 | 3339 | interp = listPtr->interp; |
3335 | 3340 | Tcl_Preserve(interp); |
3336 | result = Tcl_VarEval(interp, listPtr->xScrollCmd, " ", firstStr, " ", | |
3337 | lastStr, NULL); | |
3341 | Tcl_DStringInit(&buf); | |
3342 | Tcl_DStringAppend(&buf, listPtr->xScrollCmd, -1); | |
3343 | Tcl_DStringAppend(&buf, " ", -1); | |
3344 | Tcl_DStringAppend(&buf, firstStr, -1); | |
3345 | Tcl_DStringAppend(&buf, " ", -1); | |
3346 | Tcl_DStringAppend(&buf, lastStr, -1); | |
3347 | result = Tcl_EvalEx(interp, Tcl_DStringValue(&buf), -1, 0); | |
3348 | Tcl_DStringFree(&buf); | |
3338 | 3349 | if (result != TCL_OK) { |
3339 | 3350 | Tcl_AddErrorInfo(interp, |
3340 | 3351 | "\n (horizontal scrolling command executed by listbox)"); |
3380 | 3391 | if ((flags & TCL_TRACE_DESTROYED) && !(flags & TCL_INTERP_DESTROYED)) { |
3381 | 3392 | Tcl_SetVar2Ex(interp, listPtr->listVarName, NULL, |
3382 | 3393 | listPtr->listObj, TCL_GLOBAL_ONLY); |
3383 | Tcl_TraceVar(interp, listPtr->listVarName, | |
3384 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
3394 | Tcl_TraceVar2(interp, listPtr->listVarName, | |
3395 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
3385 | 3396 | ListboxListVarProc, clientData); |
3386 | 3397 | return NULL; |
3387 | 3398 | } |
183 | 183 | InteractiveState is; |
184 | 184 | |
185 | 185 | /* |
186 | * Ensure that we are getting a compatible version of Tcl. This is really | |
187 | * only an issue when Tk is loaded dynamically. | |
188 | */ | |
189 | ||
190 | if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) { | |
191 | abort(); | |
192 | } | |
193 | ||
194 | #if defined(__WIN32__) && !defined(__WIN64__) && !defined(UNICODE) && !defined(STATIC_BUILD) | |
186 | * Ensure that we are getting a compatible version of Tcl. | |
187 | */ | |
188 | ||
189 | if (Tcl_InitStubs(interp, "8.6", 0) == NULL) { | |
190 | if (Tcl_InitStubs(interp, "8.1", 0) == NULL) { | |
191 | abort(); | |
192 | } else { | |
193 | Tcl_Panic("%s", Tcl_GetString(Tcl_GetObjResult(interp))); | |
194 | } | |
195 | } | |
196 | ||
197 | #if defined(__WIN32__) && !defined(UNICODE) && !defined(STATIC_BUILD) | |
195 | 198 | |
196 | 199 | if (tclStubsPtr->reserved9) { |
197 | 200 | /* We are running win32 Tk under Cygwin, so let's check |
314 | 317 | */ |
315 | 318 | |
316 | 319 | if (appInitProc(interp) != TCL_OK) { |
317 | TkpDisplayWarning(Tcl_GetStringResult(interp), | |
320 | TkpDisplayWarning(Tcl_GetString(Tcl_GetObjResult(interp)), | |
318 | 321 | "application-specific initialization failed"); |
319 | 322 | } |
320 | 323 | |
334 | 337 | */ |
335 | 338 | |
336 | 339 | Tcl_AddErrorInfo(interp, ""); |
337 | TkpDisplayWarning(Tcl_GetVar(interp, "errorInfo", | |
340 | TkpDisplayWarning(Tcl_GetVar2(interp, "errorInfo", NULL, | |
338 | 341 | TCL_GLOBAL_ONLY), "Error in startup script"); |
339 | 342 | Tcl_DeleteInterp(interp); |
340 | 343 | Tcl_Exit(1); |
447 | 450 | Tcl_CreateChannelHandler(isPtr->input, TCL_READABLE, StdinProc, isPtr); |
448 | 451 | } |
449 | 452 | Tcl_DStringFree(&isPtr->command); |
450 | if (Tcl_GetStringResult(interp)[0] != '\0') { | |
453 | if (Tcl_GetString(Tcl_GetObjResult(interp))[0] != '\0') { | |
451 | 454 | if ((code != TCL_OK) || (isPtr->tty)) { |
452 | 455 | chan = Tcl_GetStdChannel((code != TCL_OK) ? TCL_STDERR : TCL_STDOUT); |
453 | 456 | if (chan) { |
510 | 513 | if (code != TCL_OK) { |
511 | 514 | Tcl_AddErrorInfo(interp, |
512 | 515 | "\n (script that generates prompt)"); |
513 | if (Tcl_GetStringResult(interp)[0] != '\0') { | |
516 | if (Tcl_GetString(Tcl_GetObjResult(interp))[0] != '\0') { | |
514 | 517 | chan = Tcl_GetStdChannel(TCL_STDERR); |
515 | 518 | if (chan != NULL) { |
516 | 519 | Tcl_WriteObj(chan, Tcl_GetObjResult(interp)); |
337 | 337 | static void DestroyMenuHashTable(ClientData clientData, |
338 | 338 | Tcl_Interp *interp); |
339 | 339 | static void DestroyMenuInstance(TkMenu *menuPtr); |
340 | static void DestroyMenuEntry(char *memPtr); | |
340 | static void DestroyMenuEntry(void *memPtr); | |
341 | 341 | static int GetIndexFromCoords(Tcl_Interp *interp, |
342 | 342 | TkMenu *menuPtr, const char *string, |
343 | 343 | int *indexPtr); |
475 | 475 | |
476 | 476 | toplevel = 1; |
477 | 477 | for (i = 2; i < (objc - 1); i++) { |
478 | if (Tcl_GetIndexFromObj(NULL, objv[i], typeStringList, NULL, 0, | |
479 | &index) != TCL_ERROR) { | |
480 | if ((Tcl_GetIndexFromObj(NULL, objv[i + 1], menuTypeStrings, NULL, | |
481 | 0, &index) == TCL_OK) && (index == MENUBAR)) { | |
478 | if (Tcl_GetIndexFromObjStruct(NULL, objv[i], typeStringList, | |
479 | sizeof(char *), NULL, 0, &index) != TCL_ERROR) { | |
480 | if ((Tcl_GetIndexFromObjStruct(NULL, objv[i + 1], menuTypeStrings, | |
481 | sizeof(char *), NULL, 0, &index) == TCL_OK) && (index == MENUBAR)) { | |
482 | 482 | toplevel = 0; |
483 | 483 | } |
484 | 484 | break; |
679 | 679 | Tcl_WrongNumArgs(interp, 1, objv, "option ?arg ...?"); |
680 | 680 | return TCL_ERROR; |
681 | 681 | } |
682 | if (Tcl_GetIndexFromObj(interp, objv[1], menuOptions, "option", 0, | |
683 | &option) != TCL_OK) { | |
682 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], menuOptions, | |
683 | sizeof(char *), "option", 0, &option) != TCL_OK) { | |
684 | 684 | return TCL_ERROR; |
685 | 685 | } |
686 | 686 | Tcl_Preserve(menuPtr); |
1060 | 1060 | Tcl_DStringInit(&ds); |
1061 | 1061 | Tcl_DStringAppend(&ds, "tk::TearOffMenu ", -1); |
1062 | 1062 | Tcl_DStringAppend(&ds, Tk_PathName(menuPtr->tkwin), -1); |
1063 | result = Tcl_Eval(interp, Tcl_DStringValue(&ds)); | |
1063 | result = Tcl_EvalEx(interp, Tcl_DStringValue(&ds), -1, 0); | |
1064 | 1064 | Tcl_DStringFree(&ds); |
1065 | 1065 | } else if ((mePtr->type == CHECK_BUTTON_ENTRY) |
1066 | 1066 | && (mePtr->namePtr != NULL)) { |
1224 | 1224 | * for menu entries (i+1)...numEntries. |
1225 | 1225 | */ |
1226 | 1226 | |
1227 | DestroyMenuEntry((char *) menuPtr->entries[i]); | |
1227 | DestroyMenuEntry(menuPtr->entries[i]); | |
1228 | 1228 | menuPtr->numEntries = i; |
1229 | 1229 | } |
1230 | 1230 | if (menuPtr->entries != NULL) { |
1422 | 1422 | |
1423 | 1423 | static void |
1424 | 1424 | DestroyMenuEntry( |
1425 | char *memPtr) /* Pointer to entry to be freed. */ | |
1425 | void *memPtr) /* Pointer to entry to be freed. */ | |
1426 | 1426 | { |
1427 | register TkMenuEntry *mePtr = (TkMenuEntry *) memPtr; | |
1427 | register TkMenuEntry *mePtr = memPtr; | |
1428 | 1428 | TkMenu *menuPtr = mePtr->menuPtr; |
1429 | 1429 | |
1430 | 1430 | if (menuPtr->postedCascade == mePtr) { |
1491 | 1491 | && (mePtr->namePtr != NULL)) { |
1492 | 1492 | const char *varName = Tcl_GetString(mePtr->namePtr); |
1493 | 1493 | |
1494 | Tcl_UntraceVar(menuPtr->interp, varName, | |
1494 | Tcl_UntraceVar2(menuPtr->interp, varName, NULL, | |
1495 | 1495 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
1496 | 1496 | MenuVarProc, mePtr); |
1497 | 1497 | } |
1596 | 1596 | */ |
1597 | 1597 | |
1598 | 1598 | if (menuListPtr->menuType == UNKNOWN_TYPE) { |
1599 | Tcl_GetIndexFromObj(NULL, menuListPtr->menuTypePtr, | |
1600 | menuTypeStrings, NULL, 0, &menuListPtr->menuType); | |
1599 | Tcl_GetIndexFromObjStruct(NULL, menuListPtr->menuTypePtr, | |
1600 | menuTypeStrings, sizeof(char *), NULL, 0, &menuListPtr->menuType); | |
1601 | 1601 | |
1602 | 1602 | /* |
1603 | 1603 | * Configure the new window to be either a pop-up menu or a |
1661 | 1661 | && (menuListPtr->entries[0]->type == TEAROFF_ENTRY)) { |
1662 | 1662 | int i; |
1663 | 1663 | |
1664 | Tcl_EventuallyFree(menuListPtr->entries[0], DestroyMenuEntry); | |
1664 | Tcl_EventuallyFree(menuListPtr->entries[0], (Tcl_FreeProc *) DestroyMenuEntry); | |
1665 | 1665 | |
1666 | 1666 | for (i = 0; i < menuListPtr->numEntries - 1; i++) { |
1667 | 1667 | menuListPtr->entries[i] = menuListPtr->entries[i + 1]; |
1741 | 1741 | if (mePtr->labelPtr == NULL) { |
1742 | 1742 | mePtr->labelLength = 0; |
1743 | 1743 | } else { |
1744 | Tcl_GetStringFromObj(mePtr->labelPtr, &mePtr->labelLength); | |
1744 | (void)Tcl_GetStringFromObj(mePtr->labelPtr, &mePtr->labelLength); | |
1745 | 1745 | } |
1746 | 1746 | if (mePtr->accelPtr == NULL) { |
1747 | 1747 | mePtr->accelLength = 0; |
1748 | 1748 | } else { |
1749 | Tcl_GetStringFromObj(mePtr->accelPtr, &mePtr->accelLength); | |
1749 | (void)Tcl_GetStringFromObj(mePtr->accelPtr, &mePtr->accelLength); | |
1750 | 1750 | } |
1751 | 1751 | |
1752 | 1752 | /* |
1905 | 1905 | } |
1906 | 1906 | if (mePtr->namePtr != NULL) { |
1907 | 1907 | name = Tcl_GetString(mePtr->namePtr); |
1908 | Tcl_TraceVar(menuPtr->interp, name, | |
1909 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1908 | Tcl_TraceVar2(menuPtr->interp, name, | |
1909 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1910 | 1910 | MenuVarProc, mePtr); |
1911 | 1911 | } |
1912 | 1912 | } |
1958 | 1958 | || (mePtr->type == RADIO_BUTTON_ENTRY))) { |
1959 | 1959 | const char *name = Tcl_GetString(mePtr->namePtr); |
1960 | 1960 | |
1961 | Tcl_UntraceVar(menuPtr->interp, name, | |
1961 | Tcl_UntraceVar2(menuPtr->interp, name, NULL, | |
1962 | 1962 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
1963 | 1963 | MenuVarProc, mePtr); |
1964 | 1964 | } |
2405 | 2405 | * Figure out the type of the new entry. |
2406 | 2406 | */ |
2407 | 2407 | |
2408 | if (Tcl_GetIndexFromObj(interp, objv[0], menuEntryTypeStrings, | |
2409 | "menu entry type", 0, &type) != TCL_OK) { | |
2408 | if (Tcl_GetIndexFromObjStruct(interp, objv[0], menuEntryTypeStrings, | |
2409 | sizeof(char *), "menu entry type", 0, &type) != TCL_OK) { | |
2410 | 2410 | return TCL_ERROR; |
2411 | 2411 | } |
2412 | 2412 | |
2429 | 2429 | errorMenuPtr != NULL; |
2430 | 2430 | errorMenuPtr = errorMenuPtr->nextInstancePtr) { |
2431 | 2431 | Tcl_EventuallyFree(errorMenuPtr->entries[index], |
2432 | DestroyMenuEntry); | |
2432 | (Tcl_FreeProc *) DestroyMenuEntry); | |
2433 | 2433 | for (i = index; i < errorMenuPtr->numEntries - 1; i++) { |
2434 | 2434 | errorMenuPtr->entries[i] = errorMenuPtr->entries[i + 1]; |
2435 | 2435 | errorMenuPtr->entries[i]->index = i; |
2543 | 2543 | if (flags & TCL_TRACE_UNSETS) { |
2544 | 2544 | mePtr->entryFlags &= ~ENTRY_SELECTED; |
2545 | 2545 | if (flags & TCL_TRACE_DESTROYED) { |
2546 | Tcl_TraceVar(interp, name, | |
2546 | Tcl_TraceVar2(interp, name, NULL, | |
2547 | 2547 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
2548 | 2548 | MenuVarProc, clientData); |
2549 | 2549 | } |
2557 | 2557 | * entry. |
2558 | 2558 | */ |
2559 | 2559 | |
2560 | value = Tcl_GetVar(interp, name, TCL_GLOBAL_ONLY); | |
2560 | value = Tcl_GetVar2(interp, name, NULL, TCL_GLOBAL_ONLY); | |
2561 | 2561 | if (value == NULL) { |
2562 | 2562 | value = ""; |
2563 | 2563 | } |
2710 | 2710 | if (newMenuTypePtr == NULL) { |
2711 | 2711 | menuType = MASTER_MENU; |
2712 | 2712 | } else { |
2713 | if (Tcl_GetIndexFromObj(menuPtr->interp, newMenuTypePtr, | |
2714 | menuTypeStrings, "menu type", 0, &menuType) != TCL_OK) { | |
2713 | if (Tcl_GetIndexFromObjStruct(menuPtr->interp, newMenuTypePtr, | |
2714 | menuTypeStrings, sizeof(char *), "menu type", 0, &menuType) != TCL_OK) { | |
2715 | 2715 | return TCL_ERROR; |
2716 | 2716 | } |
2717 | 2717 | } |
2986 | 2986 | |
2987 | 2987 | *indexPtr = -1; |
2988 | 2988 | |
2989 | /* set the width of the final column to the remainder of the window | |
2989 | /* set the width of the final column to the remainder of the window | |
2990 | 2990 | * being aware of windows that may not be mapped yet. |
2991 | 2991 | */ |
2992 | max = Tk_IsMapped(menuPtr->tkwin) | |
2992 | max = Tk_IsMapped(menuPtr->tkwin) | |
2993 | 2993 | ? Tk_Width(menuPtr->tkwin) : Tk_ReqWidth(menuPtr->tkwin); |
2994 | 2994 | max -= borderwidth; |
2995 | 2995 | |
3539 | 3539 | for (menuListPtr = menuPtr->masterMenuPtr; menuListPtr != NULL; |
3540 | 3540 | menuListPtr = menuListPtr->nextInstancePtr) { |
3541 | 3541 | for (i = last; i >= first; i--) { |
3542 | Tcl_EventuallyFree(menuListPtr->entries[i], DestroyMenuEntry); | |
3542 | Tcl_EventuallyFree(menuListPtr->entries[i], (Tcl_FreeProc *) DestroyMenuEntry); | |
3543 | 3543 | } |
3544 | 3544 | for (i = last + 1; i < menuListPtr->numEntries; i++) { |
3545 | 3545 | j = i - numDeleted; |
354 | 354 | Tcl_WrongNumArgs(interp, 1, objv, "option ?arg ...?"); |
355 | 355 | return TCL_ERROR; |
356 | 356 | } |
357 | result = Tcl_GetIndexFromObj(interp, objv[1], commandNames, "option", 0, | |
358 | &index); | |
357 | result = Tcl_GetIndexFromObjStruct(interp, objv[1], commandNames, | |
358 | sizeof(char *), "option", 0, &index); | |
359 | 359 | if (result != TCL_OK) { |
360 | 360 | return result; |
361 | 361 | } |
435 | 435 | |
436 | 436 | Tcl_DeleteCommandFromToken(mbPtr->interp, mbPtr->widgetCmd); |
437 | 437 | if (mbPtr->textVarName != NULL) { |
438 | Tcl_UntraceVar(mbPtr->interp, mbPtr->textVarName, | |
438 | Tcl_UntraceVar2(mbPtr->interp, mbPtr->textVarName, NULL, | |
439 | 439 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
440 | 440 | MenuButtonTextVarProc, mbPtr); |
441 | 441 | } |
505 | 505 | */ |
506 | 506 | |
507 | 507 | if (mbPtr->textVarName != NULL) { |
508 | Tcl_UntraceVar(interp, mbPtr->textVarName, | |
508 | Tcl_UntraceVar2(interp, mbPtr->textVarName, NULL, | |
509 | 509 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
510 | 510 | MenuButtonTextVarProc, mbPtr); |
511 | 511 | } |
624 | 624 | */ |
625 | 625 | const char *value; |
626 | 626 | |
627 | value = Tcl_GetVar(interp, mbPtr->textVarName, TCL_GLOBAL_ONLY); | |
627 | value = Tcl_GetVar2(interp, mbPtr->textVarName, NULL, TCL_GLOBAL_ONLY); | |
628 | 628 | if (value == NULL) { |
629 | Tcl_SetVar(interp, mbPtr->textVarName, mbPtr->text, | |
629 | Tcl_SetVar2(interp, mbPtr->textVarName, NULL, mbPtr->text, | |
630 | 630 | TCL_GLOBAL_ONLY); |
631 | 631 | } else { |
632 | 632 | if (mbPtr->text != NULL) { |
635 | 635 | mbPtr->text = ckalloc(strlen(value) + 1); |
636 | 636 | strcpy(mbPtr->text, value); |
637 | 637 | } |
638 | Tcl_TraceVar(interp, mbPtr->textVarName, | |
638 | Tcl_TraceVar2(interp, mbPtr->textVarName, NULL, | |
639 | 639 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
640 | 640 | MenuButtonTextVarProc, mbPtr); |
641 | 641 | } |
887 | 887 | |
888 | 888 | if (flags & TCL_TRACE_UNSETS) { |
889 | 889 | if ((flags & TCL_TRACE_DESTROYED) && !(flags & TCL_INTERP_DESTROYED)) { |
890 | Tcl_SetVar(interp, mbPtr->textVarName, mbPtr->text, | |
890 | Tcl_SetVar2(interp, mbPtr->textVarName, NULL, mbPtr->text, | |
891 | 891 | TCL_GLOBAL_ONLY); |
892 | Tcl_TraceVar(interp, mbPtr->textVarName, | |
892 | Tcl_TraceVar2(interp, mbPtr->textVarName, NULL, | |
893 | 893 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
894 | 894 | MenuButtonTextVarProc, clientData); |
895 | 895 | } |
896 | 896 | return NULL; |
897 | 897 | } |
898 | 898 | |
899 | value = Tcl_GetVar(interp, mbPtr->textVarName, TCL_GLOBAL_ONLY); | |
899 | value = Tcl_GetVar2(interp, mbPtr->textVarName, NULL, TCL_GLOBAL_ONLY); | |
900 | 900 | if (value == NULL) { |
901 | 901 | value = ""; |
902 | 902 | } |
317 | 317 | return TCL_ERROR; |
318 | 318 | } |
319 | 319 | |
320 | if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, | |
321 | &index) != TCL_OK) { | |
320 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], optionStrings, | |
321 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
322 | 322 | return TCL_ERROR; |
323 | 323 | } |
324 | 324 | |
404 | 404 | Tk_FreeTextLayout(msgPtr->textLayout); |
405 | 405 | } |
406 | 406 | if (msgPtr->textVarName != NULL) { |
407 | Tcl_UntraceVar(msgPtr->interp, msgPtr->textVarName, | |
407 | Tcl_UntraceVar2(msgPtr->interp, msgPtr->textVarName, NULL, | |
408 | 408 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
409 | 409 | MessageTextVarProc, msgPtr); |
410 | 410 | } |
449 | 449 | */ |
450 | 450 | |
451 | 451 | if (msgPtr->textVarName != NULL) { |
452 | Tcl_UntraceVar(interp, msgPtr->textVarName, | |
452 | Tcl_UntraceVar2(interp, msgPtr->textVarName, NULL, | |
453 | 453 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
454 | 454 | MessageTextVarProc, msgPtr); |
455 | 455 | } |
469 | 469 | if (msgPtr->textVarName != NULL) { |
470 | 470 | const char *value; |
471 | 471 | |
472 | value = Tcl_GetVar(interp, msgPtr->textVarName, TCL_GLOBAL_ONLY); | |
472 | value = Tcl_GetVar2(interp, msgPtr->textVarName, NULL, TCL_GLOBAL_ONLY); | |
473 | 473 | if (value == NULL) { |
474 | Tcl_SetVar(interp, msgPtr->textVarName, msgPtr->string, | |
474 | Tcl_SetVar2(interp, msgPtr->textVarName, NULL, msgPtr->string, | |
475 | 475 | TCL_GLOBAL_ONLY); |
476 | 476 | } else { |
477 | 477 | if (msgPtr->string != NULL) { |
479 | 479 | } |
480 | 480 | msgPtr->string = strcpy(ckalloc(strlen(value) + 1), value); |
481 | 481 | } |
482 | Tcl_TraceVar(interp, msgPtr->textVarName, | |
482 | Tcl_TraceVar2(interp, msgPtr->textVarName, NULL, | |
483 | 483 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
484 | 484 | MessageTextVarProc, msgPtr); |
485 | 485 | } |
844 | 844 | |
845 | 845 | if (flags & TCL_TRACE_UNSETS) { |
846 | 846 | if ((flags & TCL_TRACE_DESTROYED) && !(flags & TCL_INTERP_DESTROYED)) { |
847 | Tcl_SetVar(interp, msgPtr->textVarName, msgPtr->string, | |
847 | Tcl_SetVar2(interp, msgPtr->textVarName, NULL, msgPtr->string, | |
848 | 848 | TCL_GLOBAL_ONLY); |
849 | Tcl_TraceVar(interp, msgPtr->textVarName, | |
849 | Tcl_TraceVar2(interp, msgPtr->textVarName, NULL, | |
850 | 850 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
851 | 851 | MessageTextVarProc, clientData); |
852 | 852 | } |
853 | 853 | return NULL; |
854 | 854 | } |
855 | 855 | |
856 | value = Tcl_GetVar(interp, msgPtr->textVarName, TCL_GLOBAL_ONLY); | |
856 | value = Tcl_GetVar2(interp, msgPtr->textVarName, NULL, TCL_GLOBAL_ONLY); | |
857 | 857 | if (value == NULL) { |
858 | 858 | value = ""; |
859 | 859 | } |
32 | 32 | (PTR2INT((objPtr)->internalRep.twoPtrValue.ptr1)) |
33 | 33 | |
34 | 34 | #define SET_COMPLEXPIXEL(objPtr, repPtr) \ |
35 | (objPtr)->internalRep.twoPtrValue.ptr1 = 0; \ | |
35 | (objPtr)->internalRep.twoPtrValue.ptr1 = NULL; \ | |
36 | 36 | (objPtr)->internalRep.twoPtrValue.ptr2 = repPtr |
37 | 37 | |
38 | 38 | #define GET_COMPLEXPIXEL(objPtr) \ |
446 | 446 | double d; |
447 | 447 | int i, units; |
448 | 448 | |
449 | string = Tcl_GetStringFromObj(objPtr, NULL); | |
449 | string = Tcl_GetString(objPtr); | |
450 | 450 | |
451 | 451 | d = strtod(string, &rest); |
452 | 452 | if (rest == string) { |
552 | 552 | } |
553 | 553 | } |
554 | 554 | |
555 | mmPtr = objPtr->internalRep.otherValuePtr; | |
555 | mmPtr = objPtr->internalRep.twoPtrValue.ptr1; | |
556 | 556 | if (mmPtr->tkwin != tkwin) { |
557 | 557 | d = mmPtr->value; |
558 | 558 | if (mmPtr->units == -1) { |
591 | 591 | FreeMMInternalRep( |
592 | 592 | Tcl_Obj *objPtr) /* MM object with internal rep to free. */ |
593 | 593 | { |
594 | ckfree(objPtr->internalRep.otherValuePtr); | |
595 | objPtr->internalRep.otherValuePtr = NULL; | |
594 | ckfree(objPtr->internalRep.twoPtrValue.ptr1); | |
595 | objPtr->internalRep.twoPtrValue.ptr1 = NULL; | |
596 | 596 | objPtr->typePtr = NULL; |
597 | 597 | } |
598 | 598 | |
622 | 622 | MMRep *oldPtr, *newPtr; |
623 | 623 | |
624 | 624 | copyPtr->typePtr = srcPtr->typePtr; |
625 | oldPtr = srcPtr->internalRep.otherValuePtr; | |
625 | oldPtr = srcPtr->internalRep.twoPtrValue.ptr1; | |
626 | 626 | newPtr = ckalloc(sizeof(MMRep)); |
627 | 627 | newPtr->value = oldPtr->value; |
628 | 628 | newPtr->units = oldPtr->units; |
629 | 629 | newPtr->tkwin = oldPtr->tkwin; |
630 | 630 | newPtr->returnValue = oldPtr->returnValue; |
631 | copyPtr->internalRep.otherValuePtr = newPtr; | |
631 | copyPtr->internalRep.twoPtrValue.ptr1 = newPtr; | |
632 | 632 | } |
633 | 633 | |
634 | 634 | /* |
658 | 658 | char buffer[TCL_DOUBLE_SPACE]; |
659 | 659 | register int len; |
660 | 660 | |
661 | mmPtr = objPtr->internalRep.otherValuePtr; | |
661 | mmPtr = objPtr->internalRep.twoPtrValue.ptr1; | |
662 | 662 | /* assert( mmPtr->units == -1 && objPtr->bytes == NULL ); */ |
663 | 663 | if ((mmPtr->units != -1) || (objPtr->bytes != NULL)) { |
664 | 664 | Tcl_Panic("UpdateStringOfMM: false precondition"); |
718 | 718 | * ints again from mm obj types. |
719 | 719 | */ |
720 | 720 | |
721 | (void) Tcl_GetStringFromObj(objPtr, NULL); | |
721 | (void) Tcl_GetString(objPtr); | |
722 | 722 | } else { |
723 | 723 | /* |
724 | 724 | * It wasn't a known int or double, so parse it. |
725 | 725 | */ |
726 | 726 | |
727 | string = Tcl_GetStringFromObj(objPtr, NULL); | |
727 | string = Tcl_GetString(objPtr); | |
728 | 728 | |
729 | 729 | d = strtod(string, &rest); |
730 | 730 | if (rest == string) { |
781 | 781 | mmPtr->tkwin = NULL; |
782 | 782 | mmPtr->returnValue = d; |
783 | 783 | |
784 | objPtr->internalRep.otherValuePtr = mmPtr; | |
784 | objPtr->internalRep.twoPtrValue.ptr1 = mmPtr; | |
785 | 785 | |
786 | 786 | return TCL_OK; |
787 | 787 | } |
816 | 816 | { |
817 | 817 | TkMainInfo *mainPtr = ((TkWindow *) tkwin)->mainPtr; |
818 | 818 | register WindowRep *winPtr; |
819 | int result; | |
820 | ||
821 | result = Tcl_ConvertToType(interp, objPtr, &windowObjType); | |
822 | if (result != TCL_OK) { | |
823 | return result; | |
824 | } | |
825 | ||
826 | winPtr = objPtr->internalRep.otherValuePtr; | |
819 | ||
820 | if (objPtr->typePtr != &windowObjType) { | |
821 | int result = SetWindowFromAny(interp, objPtr); | |
822 | if (result != TCL_OK) { | |
823 | return result; | |
824 | } | |
825 | } | |
826 | ||
827 | winPtr = objPtr->internalRep.twoPtrValue.ptr1; | |
827 | 828 | if (winPtr->tkwin == NULL |
828 | 829 | || winPtr->mainPtr == NULL |
829 | 830 | || winPtr->mainPtr != mainPtr |
833 | 834 | */ |
834 | 835 | |
835 | 836 | winPtr->tkwin = Tk_NameToWindow(interp, |
836 | Tcl_GetStringFromObj(objPtr, NULL), tkwin); | |
837 | Tcl_GetString(objPtr), tkwin); | |
837 | 838 | if (winPtr->tkwin == NULL) { |
838 | 839 | /* ASSERT: Tk_NameToWindow has left error message in interp */ |
839 | 840 | return TCL_ERROR; |
879 | 880 | * Free the old internalRep before setting the new one. |
880 | 881 | */ |
881 | 882 | |
882 | Tcl_GetStringFromObj(objPtr, NULL); | |
883 | (void)Tcl_GetString(objPtr); | |
883 | 884 | typePtr = objPtr->typePtr; |
884 | 885 | if ((typePtr != NULL) && (typePtr->freeIntRepProc != NULL)) { |
885 | 886 | typePtr->freeIntRepProc(objPtr); |
890 | 891 | winPtr->mainPtr = NULL; |
891 | 892 | winPtr->epoch = 0; |
892 | 893 | |
893 | objPtr->internalRep.otherValuePtr = winPtr; | |
894 | objPtr->internalRep.twoPtrValue.ptr1 = winPtr; | |
894 | 895 | objPtr->typePtr = &windowObjType; |
895 | 896 | |
896 | 897 | return TCL_OK; |
921 | 922 | { |
922 | 923 | register WindowRep *oldPtr, *newPtr; |
923 | 924 | |
924 | oldPtr = srcPtr->internalRep.otherValuePtr; | |
925 | oldPtr = srcPtr->internalRep.twoPtrValue.ptr1; | |
925 | 926 | newPtr = ckalloc(sizeof(WindowRep)); |
926 | 927 | newPtr->tkwin = oldPtr->tkwin; |
927 | 928 | newPtr->mainPtr = oldPtr->mainPtr; |
928 | 929 | newPtr->epoch = oldPtr->epoch; |
929 | copyPtr->internalRep.otherValuePtr = newPtr; | |
930 | copyPtr->internalRep.twoPtrValue.ptr1 = newPtr; | |
930 | 931 | copyPtr->typePtr = srcPtr->typePtr; |
931 | 932 | } |
932 | 933 | |
952 | 953 | FreeWindowInternalRep( |
953 | 954 | Tcl_Obj *objPtr) /* Window object with internal rep to free. */ |
954 | 955 | { |
955 | ckfree(objPtr->internalRep.otherValuePtr); | |
956 | objPtr->internalRep.otherValuePtr = NULL; | |
956 | ckfree(objPtr->internalRep.twoPtrValue.ptr1); | |
957 | objPtr->internalRep.twoPtrValue.ptr1 = NULL; | |
957 | 958 | objPtr->typePtr = NULL; |
958 | 959 | } |
959 | 960 | |
984 | 985 | |
985 | 986 | SetWindowFromAny(NULL, objPtr); |
986 | 987 | |
987 | winPtr = objPtr->internalRep.otherValuePtr; | |
988 | winPtr = objPtr->internalRep.twoPtrValue.ptr1; | |
988 | 989 | winPtr->tkwin = tkwin; |
989 | 990 | winPtr->mainPtr = mainPtr; |
990 | 991 | winPtr->epoch = mainPtr->deletionEpoch; |
121 | 121 | const char *arg; |
122 | 122 | |
123 | 123 | if (flags & TK_CONFIG_OBJS) { |
124 | arg = Tcl_GetStringFromObj((Tcl_Obj *) *argv, NULL); | |
124 | arg = Tcl_GetString((Tcl_Obj *) *argv); | |
125 | 125 | } else { |
126 | 126 | arg = *argv; |
127 | 127 | } |
717 | 717 | result = Tcl_Merge(5, argv); |
718 | 718 | if (freeProc != NULL) { |
719 | 719 | if ((freeProc == TCL_DYNAMIC) || (freeProc == (Tcl_FreeProc *) free)) { |
720 | ckfree(argv[4]); | |
720 | ckfree((char *) argv[4]); | |
721 | 721 | } else { |
722 | 722 | freeProc((char *) argv[4]); |
723 | 723 | } |
938 | 938 | Tcl_SetObjResult(interp, Tcl_NewStringObj(result, -1)); |
939 | 939 | if (freeProc != NULL) { |
940 | 940 | if ((freeProc == TCL_DYNAMIC) || (freeProc == (Tcl_FreeProc *) free)) { |
941 | ckfree(result); | |
941 | ckfree((char *) result); | |
942 | 942 | } else { |
943 | 943 | freeProc((char *) result); |
944 | 944 | } |
267 | 267 | XGCValues gcValues; |
268 | 268 | |
269 | 269 | sprintf(buffer, "%s get", timPtr->imageName); |
270 | Tcl_SetVar(timPtr->interp, timPtr->varName, buffer, | |
270 | Tcl_SetVar2(timPtr->interp, timPtr->varName, NULL, buffer, | |
271 | 271 | TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT); |
272 | 272 | |
273 | 273 | instPtr = ckalloc(sizeof(TImageInstance)); |
314 | 314 | sprintf(buffer, "%s display %d %d %d %d %d %d", |
315 | 315 | instPtr->masterPtr->imageName, imageX, imageY, width, height, |
316 | 316 | drawableX, drawableY); |
317 | Tcl_SetVar(instPtr->masterPtr->interp, instPtr->masterPtr->varName, buffer, | |
318 | TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT); | |
317 | Tcl_SetVar2(instPtr->masterPtr->interp, instPtr->masterPtr->varName, NULL, | |
318 | buffer, TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT); | |
319 | 319 | if (width > (instPtr->masterPtr->width - imageX)) { |
320 | 320 | width = instPtr->masterPtr->width - imageX; |
321 | 321 | } |
357 | 357 | char buffer[200]; |
358 | 358 | |
359 | 359 | sprintf(buffer, "%s free", instPtr->masterPtr->imageName); |
360 | Tcl_SetVar(instPtr->masterPtr->interp, instPtr->masterPtr->varName, buffer, | |
361 | TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT); | |
360 | Tcl_SetVar2(instPtr->masterPtr->interp, instPtr->masterPtr->varName, NULL, | |
361 | buffer, TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT); | |
362 | 362 | Tk_FreeColor(instPtr->fg); |
363 | 363 | Tk_FreeGC(display, instPtr->gc); |
364 | 364 | ckfree(instPtr); |
391 | 391 | char buffer[100]; |
392 | 392 | |
393 | 393 | sprintf(buffer, "%s delete", timPtr->imageName); |
394 | Tcl_SetVar(timPtr->interp, timPtr->varName, buffer, | |
394 | Tcl_SetVar2(timPtr->interp, timPtr->varName, NULL, buffer, | |
395 | 395 | TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT); |
396 | 396 | |
397 | 397 | Tcl_DeleteCommand(timPtr->interp, timPtr->imageName); |
630 | 630 | return TCL_ERROR; |
631 | 631 | } |
632 | 632 | |
633 | result = Tcl_GetIndexFromObj(interp, objv[1], optionCmds, "option", 0, | |
634 | &index); | |
633 | result = Tcl_GetIndexFromObjStruct(interp, objv[1], optionCmds, | |
634 | sizeof(char *), "option", 0, &index); | |
635 | 635 | if (result != TCL_OK) { |
636 | 636 | return result; |
637 | 637 | } |
87 | 87 | * Tk will set its requested size to fit the |
88 | 88 | * needs of its slaves. |
89 | 89 | * ALLOCED_MASTER 1 means that Pack has allocated itself as |
90 | * geometry master for this window. | |
90 | * geometry master for this window. | |
91 | 91 | */ |
92 | 92 | |
93 | 93 | #define REQUESTED_REPACK 1 |
119 | 119 | static void ArrangePacking(ClientData clientData); |
120 | 120 | static int ConfigureSlaves(Tcl_Interp *interp, Tk_Window tkwin, |
121 | 121 | int objc, Tcl_Obj *const objv[]); |
122 | static void DestroyPacker(char *memPtr); | |
122 | static void DestroyPacker(void *memPtr); | |
123 | 123 | static Packer * GetPacker(Tk_Window tkwin); |
124 | 124 | static int PackAfter(Tcl_Interp *interp, Packer *prevPtr, |
125 | 125 | Packer *masterPtr, int objc,Tcl_Obj *const objv[]); |
216 | 216 | return TCL_ERROR; |
217 | 217 | } |
218 | 218 | |
219 | if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, | |
220 | &index) != TCL_OK) { | |
219 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], optionStrings, | |
220 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
221 | 221 | /* |
222 | 222 | * Call it again without the deprecated ones to get a proper error |
223 | 223 | * message. This works well since there can't be any ambiguity between |
225 | 225 | */ |
226 | 226 | |
227 | 227 | Tcl_ResetResult(interp); |
228 | Tcl_GetIndexFromObj(interp, objv[1], &optionStrings[4], "option", 0, | |
229 | &index); | |
228 | Tcl_GetIndexFromObjStruct(interp, objv[1], &optionStrings[4], | |
229 | sizeof(char *), "option", 0, &index); | |
230 | 230 | return TCL_ERROR; |
231 | 231 | } |
232 | 232 | |
408 | 408 | |
409 | 409 | if (masterPtr->slavePtr != NULL) { |
410 | 410 | if (TkSetGeometryMaster(interp, master, "pack") != TCL_OK) { |
411 | return TCL_ERROR; | |
411 | return TCL_ERROR; | |
412 | 412 | } |
413 | 413 | masterPtr->flags |= ALLOCED_MASTER; |
414 | 414 | } |
1100 | 1100 | { |
1101 | 1101 | register Packer *packPtr; |
1102 | 1102 | Tk_Window tkwin, ancestor, parent; |
1103 | int length; | |
1104 | 1103 | Tcl_Obj **options; |
1105 | 1104 | int index, optionCount, c; |
1106 | 1105 | |
1169 | 1168 | packPtr->flags |= OLD_STYLE; |
1170 | 1169 | for (index = 0 ; index < optionCount; index++) { |
1171 | 1170 | Tcl_Obj *curOptPtr = options[index]; |
1172 | const char *curOpt = Tcl_GetStringFromObj(curOptPtr, &length); | |
1171 | const char *curOpt = Tcl_GetString(curOptPtr); | |
1172 | size_t length = curOptPtr->length; | |
1173 | 1173 | |
1174 | 1174 | c = curOpt[0]; |
1175 | 1175 | |
1176 | 1176 | if ((c == 't') |
1177 | && (strncmp(curOpt, "top", (size_t) length)) == 0) { | |
1177 | && (strncmp(curOpt, "top", length)) == 0) { | |
1178 | 1178 | packPtr->side = TOP; |
1179 | 1179 | } else if ((c == 'b') |
1180 | && (strncmp(curOpt, "bottom", (size_t) length)) == 0) { | |
1180 | && (strncmp(curOpt, "bottom", length)) == 0) { | |
1181 | 1181 | packPtr->side = BOTTOM; |
1182 | 1182 | } else if ((c == 'l') |
1183 | && (strncmp(curOpt, "left", (size_t) length)) == 0) { | |
1183 | && (strncmp(curOpt, "left", length)) == 0) { | |
1184 | 1184 | packPtr->side = LEFT; |
1185 | 1185 | } else if ((c == 'r') |
1186 | && (strncmp(curOpt, "right", (size_t) length)) == 0) { | |
1186 | && (strncmp(curOpt, "right", length)) == 0) { | |
1187 | 1187 | packPtr->side = RIGHT; |
1188 | 1188 | } else if ((c == 'e') |
1189 | && (strncmp(curOpt, "expand", (size_t) length)) == 0) { | |
1189 | && (strncmp(curOpt, "expand", length)) == 0) { | |
1190 | 1190 | packPtr->flags |= EXPAND; |
1191 | 1191 | } else if ((c == 'f') |
1192 | 1192 | && (strcmp(curOpt, "fill")) == 0) { |
1286 | 1286 | != TCL_OK) { |
1287 | 1287 | Tk_ManageGeometry(tkwin, NULL, NULL); |
1288 | 1288 | Unlink(packPtr); |
1289 | return TCL_ERROR; | |
1289 | return TCL_ERROR; | |
1290 | 1290 | } |
1291 | 1291 | masterPtr->flags |= ALLOCED_MASTER; |
1292 | 1292 | } |
1388 | 1388 | |
1389 | 1389 | static void |
1390 | 1390 | DestroyPacker( |
1391 | char *memPtr) /* Info about packed window that is now | |
1391 | void *memPtr) /* Info about packed window that is now | |
1392 | 1392 | * dead. */ |
1393 | 1393 | { |
1394 | register Packer *packPtr = (Packer *) memPtr; | |
1394 | register Packer *packPtr = memPtr; | |
1395 | 1395 | |
1396 | 1396 | ckfree(packPtr); |
1397 | 1397 | } |
1462 | 1462 | Tcl_CancelIdleCall(ArrangePacking, packPtr); |
1463 | 1463 | } |
1464 | 1464 | packPtr->tkwin = NULL; |
1465 | Tcl_EventuallyFree(packPtr, DestroyPacker); | |
1465 | Tcl_EventuallyFree(packPtr, (Tcl_FreeProc *) DestroyPacker); | |
1466 | 1466 | } else if (eventPtr->type == MapNotify) { |
1467 | 1467 | /* |
1468 | 1468 | * When a master gets mapped, must redo the geometry computation so |
1592 | 1592 | Tcl_SetErrorCode(interp, "TK", "PACK", "BAD_PARAMETER", NULL); |
1593 | 1593 | return TCL_ERROR; |
1594 | 1594 | } |
1595 | if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, "option", | |
1596 | 0, &index) != TCL_OK) { | |
1595 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, | |
1596 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
1597 | 1597 | return TCL_ERROR; |
1598 | 1598 | } |
1599 | 1599 | |
1724 | 1724 | } |
1725 | 1725 | break; |
1726 | 1726 | case CONF_SIDE: |
1727 | if (Tcl_GetIndexFromObj(interp, objv[i+1], sideNames, "side", | |
1728 | TCL_EXACT, &side) != TCL_OK) { | |
1727 | if (Tcl_GetIndexFromObjStruct(interp, objv[i+1], sideNames, | |
1728 | sizeof(char *), "side", TCL_EXACT, &side) != TCL_OK) { | |
1729 | 1729 | return TCL_ERROR; |
1730 | 1730 | } |
1731 | 1731 | slavePtr->side = (Side) side; |
1828 | 1828 | != TCL_OK) { |
1829 | 1829 | Tk_ManageGeometry(slave, NULL, NULL); |
1830 | 1830 | Unlink(slavePtr); |
1831 | return TCL_ERROR; | |
1831 | return TCL_ERROR; | |
1832 | 1832 | } |
1833 | 1833 | masterPtr->flags |= ALLOCED_MASTER; |
1834 | 1834 | } |
383 | 383 | } |
384 | 384 | |
385 | 385 | tkwin = Tk_CreateWindowFromPath(interp, Tk_MainWindow(interp), |
386 | Tcl_GetStringFromObj(objv[1], NULL), NULL); | |
386 | Tcl_GetString(objv[1]), NULL); | |
387 | 387 | if (tkwin == NULL) { |
388 | 388 | return TCL_ERROR; |
389 | 389 | } |
2904 | 2904 | if (objPtr->bytes != NULL) { |
2905 | 2905 | return (objPtr->length == 0); |
2906 | 2906 | } |
2907 | Tcl_GetStringFromObj(objPtr, &length); | |
2907 | (void)Tcl_GetStringFromObj(objPtr, &length); | |
2908 | 2908 | return (length == 0); |
2909 | 2909 | } |
2910 | 2910 |
275 | 275 | dispPtr->placeInit = 1; |
276 | 276 | } |
277 | 277 | |
278 | if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, | |
279 | &index) != TCL_OK) { | |
278 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], optionStrings, | |
279 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
280 | 280 | return TCL_ERROR; |
281 | 281 | } |
282 | 282 |
339 | 339 | Tcl_WrongNumArgs(interp, 1, objv, "option ?arg ...?"); |
340 | 340 | return TCL_ERROR; |
341 | 341 | } |
342 | result = Tcl_GetIndexFromObj(interp, objv[1], commandNames, | |
343 | "option", 0, &index); | |
342 | result = Tcl_GetIndexFromObjStruct(interp, objv[1], commandNames, | |
343 | sizeof(char *), "option", 0, &index); | |
344 | 344 | if (result != TCL_OK) { |
345 | 345 | return result; |
346 | 346 | } |
503 | 503 | */ |
504 | 504 | |
505 | 505 | if (scalePtr->varNamePtr != NULL) { |
506 | Tcl_UntraceVar(scalePtr->interp, Tcl_GetString(scalePtr->varNamePtr), | |
507 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
506 | Tcl_UntraceVar2(scalePtr->interp, Tcl_GetString(scalePtr->varNamePtr), | |
507 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
508 | 508 | ScaleVarProc, scalePtr); |
509 | 509 | } |
510 | 510 | if (scalePtr->troughGC != None) { |
560 | 560 | */ |
561 | 561 | |
562 | 562 | if (scalePtr->varNamePtr != NULL) { |
563 | Tcl_UntraceVar(interp, Tcl_GetString(scalePtr->varNamePtr), | |
564 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
563 | Tcl_UntraceVar2(interp, Tcl_GetString(scalePtr->varNamePtr), | |
564 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
565 | 565 | ScaleVarProc, scalePtr); |
566 | 566 | } |
567 | 567 | |
676 | 676 | ScaleSetVariable(scalePtr); |
677 | 677 | } |
678 | 678 | } |
679 | Tcl_TraceVar(interp, Tcl_GetString(scalePtr->varNamePtr), | |
680 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
679 | Tcl_TraceVar2(interp, Tcl_GetString(scalePtr->varNamePtr), | |
680 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
681 | 681 | ScaleVarProc, scalePtr); |
682 | 682 | } |
683 | 683 | |
1179 | 1179 | |
1180 | 1180 | if (flags & TCL_TRACE_UNSETS) { |
1181 | 1181 | if ((flags & TCL_TRACE_DESTROYED) && !(flags & TCL_INTERP_DESTROYED)) { |
1182 | Tcl_TraceVar(interp, Tcl_GetString(scalePtr->varNamePtr), | |
1183 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1182 | Tcl_TraceVar2(interp, Tcl_GetString(scalePtr->varNamePtr), | |
1183 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
1184 | 1184 | ScaleVarProc, clientData); |
1185 | 1185 | scalePtr->flags |= NEVER_SET; |
1186 | 1186 | TkScaleSetValue(scalePtr, scalePtr->value, 1, 0); |
97 | 97 | |
98 | 98 | static void SquareDeletedProc(ClientData clientData); |
99 | 99 | static int SquareConfigure(Tcl_Interp *interp, Square *squarePtr); |
100 | static void SquareDestroy(char *memPtr); | |
100 | static void SquareDestroy(void *memPtr); | |
101 | 101 | static void SquareDisplay(ClientData clientData); |
102 | 102 | static void KeepInWindow(Square *squarePtr); |
103 | 103 | static void SquareObjEventProc(ClientData clientData, |
236 | 236 | return TCL_ERROR; |
237 | 237 | } |
238 | 238 | |
239 | if (Tcl_GetIndexFromObj(interp, objv[1], squareOptions, "command", | |
240 | 0, &index) != TCL_OK) { | |
239 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], squareOptions, | |
240 | sizeof(char *), "command", 0, &index) != TCL_OK) { | |
241 | 241 | return TCL_ERROR; |
242 | 242 | } |
243 | 243 | |
409 | 409 | if (squarePtr->updatePending) { |
410 | 410 | Tcl_CancelIdleCall(SquareDisplay, squarePtr); |
411 | 411 | } |
412 | Tcl_EventuallyFree(squarePtr, SquareDestroy); | |
412 | Tcl_EventuallyFree(squarePtr, (Tcl_FreeProc *) SquareDestroy); | |
413 | 413 | } |
414 | 414 | } |
415 | 415 | |
553 | 553 | |
554 | 554 | static void |
555 | 555 | SquareDestroy( |
556 | char *memPtr) /* Info about square widget. */ | |
557 | { | |
558 | Square *squarePtr = (Square *) memPtr; | |
556 | void *memPtr) /* Info about square widget. */ | |
557 | { | |
558 | Square *squarePtr = memPtr; | |
559 | 559 | |
560 | 560 | ckfree(squarePtr); |
561 | 561 | } |
224 | 224 | # define TkSubtractRegion (void (*) (TkRegion, TkRegion, TkRegion)) XSubtractRegion |
225 | 225 | # endif |
226 | 226 | #endif /* !__WIN32__ */ |
227 | ||
228 | #define reserved274 (void (*)(void)) Tk_DefineBitmap | |
229 | #define reserved275 (void (*)(void)) Tk_GetBitmapFromData | |
230 | 227 | |
231 | 228 | /* |
232 | 229 | * WARNING: The contents of this file is automatically generated by the |
1105 | 1102 | Tk_Interp, /* 271 */ |
1106 | 1103 | Tk_CreateOldImageType, /* 272 */ |
1107 | 1104 | Tk_CreateOldPhotoImageFormat, /* 273 */ |
1108 | reserved274, /* 274 */ | |
1109 | reserved275, /* 275 */ | |
1110 | 1105 | }; |
1111 | 1106 | |
1112 | 1107 | /* !END!: Do not edit above this line. */ |
0 | 0 | /* |
1 | 1 | * tkStubLib.c -- |
2 | 2 | * |
3 | * Stub object that will be statically linked into extensions that wish | |
3 | * Stub object that will be statically linked into extensions that want | |
4 | 4 | * to access Tk. |
5 | 5 | * |
6 | * Copyright (c) 1998-1999 by Scriptics Corporation. | |
6 | 7 | * Copyright (c) 1998 Paul Duffin. |
7 | * Copyright (c) 1998-1999 by Scriptics Corporation. | |
8 | 8 | * |
9 | 9 | * See the file "license.terms" for information on usage and redistribution of |
10 | 10 | * this file, and for a DISCLAIMER OF ALL WARRANTIES. |
11 | 11 | */ |
12 | ||
13 | /* | |
14 | * We need to ensure that we use the stub macros so that this file contains no | |
15 | * references to any of the stub functions. This will make it possible to | |
16 | * build an extension that references Tk_InitStubs but doesn't end up | |
17 | * including the rest of the stub functions. | |
18 | */ | |
19 | ||
20 | #undef USE_TCL_STUBS | |
21 | #define USE_TCL_STUBS | |
22 | ||
23 | #define USE_TK_STUBS | |
24 | 12 | |
25 | 13 | #include "tkInt.h" |
26 | 14 | |
57 | 45 | */ |
58 | 46 | |
59 | 47 | static int |
60 | isDigit( | |
61 | const int c) | |
48 | isDigit(const int c) | |
62 | 49 | { |
63 | 50 | return (c >= '0' && c <= '9'); |
64 | 51 | } |
80 | 67 | * |
81 | 68 | *---------------------------------------------------------------------- |
82 | 69 | */ |
83 | ||
70 | #undef Tk_InitStubs | |
84 | 71 | MODULE_SCOPE const char * |
85 | 72 | Tk_InitStubs( |
86 | 73 | Tcl_Interp *interp, |
87 | 74 | const char *version, |
88 | 75 | int exact) |
89 | 76 | { |
90 | ClientData pkgClientData = NULL; | |
91 | const char *actualVersion = Tcl_PkgRequireEx(interp, "Tk", version, 0, | |
92 | &pkgClientData); | |
93 | const TkStubs *stubsPtr = pkgClientData; | |
77 | const char *packageName = "Tk"; | |
78 | const char *errMsg = NULL; | |
79 | ClientData clientData = NULL; | |
80 | const char *actualVersion = tclStubsPtr->tcl_PkgRequireEx(interp, | |
81 | packageName, version, 0, &clientData); | |
82 | const TkStubs *stubsPtr = clientData; | |
94 | 83 | |
95 | if (!actualVersion) { | |
84 | if (actualVersion == NULL) { | |
96 | 85 | return NULL; |
97 | 86 | } |
87 | ||
98 | 88 | if (exact) { |
99 | const char *p = version; | |
100 | int count = 0; | |
89 | const char *p = version; | |
90 | int count = 0; | |
101 | 91 | |
102 | while (*p) { | |
103 | count += !isDigit(*p++); | |
104 | } | |
105 | if (count == 1) { | |
92 | while (*p) { | |
93 | count += !isDigit(*p++); | |
94 | } | |
95 | if (count == 1) { | |
106 | 96 | const char *q = actualVersion; |
107 | 97 | |
108 | 98 | p = version; |
109 | 99 | while (*p && (*p == *q)) { |
110 | 100 | p++; q++; |
111 | 101 | } |
112 | if (*p) { | |
102 | if (*p || isDigit(*q)) { | |
113 | 103 | /* Construct error message */ |
114 | Tcl_PkgRequireEx(interp, "Tk", version, 1, NULL); | |
115 | return NULL; | |
116 | } | |
117 | } else { | |
118 | actualVersion = Tcl_PkgRequireEx(interp, "Tk", version, 1, NULL); | |
119 | if (actualVersion == NULL) { | |
120 | return NULL; | |
121 | } | |
122 | } | |
104 | tclStubsPtr->tcl_PkgRequireEx(interp, packageName, version, 1, NULL); | |
105 | return NULL; | |
106 | } | |
107 | } else { | |
108 | actualVersion = tclStubsPtr->tcl_PkgRequireEx(interp, packageName, | |
109 | version, 1, NULL); | |
110 | if (actualVersion == NULL) { | |
111 | return NULL; | |
112 | } | |
113 | } | |
123 | 114 | } |
124 | ||
125 | if (!stubsPtr) { | |
126 | Tcl_SetObjResult(interp, Tcl_NewStringObj( | |
127 | "this implementation of Tk does not support stubs", -1)); | |
128 | return NULL; | |
115 | if (stubsPtr == NULL) { | |
116 | errMsg = "missing stub table pointer"; | |
117 | } else { | |
118 | tkStubsPtr = stubsPtr; | |
119 | if (stubsPtr->hooks) { | |
120 | tkPlatStubsPtr = stubsPtr->hooks->tkPlatStubs; | |
121 | tkIntStubsPtr = stubsPtr->hooks->tkIntStubs; | |
122 | tkIntPlatStubsPtr = stubsPtr->hooks->tkIntPlatStubs; | |
123 | tkIntXlibStubsPtr = stubsPtr->hooks->tkIntXlibStubs; | |
124 | } else { | |
125 | tkPlatStubsPtr = NULL; | |
126 | tkIntStubsPtr = NULL; | |
127 | tkIntPlatStubsPtr = NULL; | |
128 | tkIntXlibStubsPtr = NULL; | |
129 | } | |
130 | return actualVersion; | |
129 | 131 | } |
130 | ||
131 | tkPlatStubsPtr = stubsPtr->hooks->tkPlatStubs; | |
132 | tkIntStubsPtr = stubsPtr->hooks->tkIntStubs; | |
133 | tkIntPlatStubsPtr = stubsPtr->hooks->tkIntPlatStubs; | |
134 | tkIntXlibStubsPtr = stubsPtr->hooks->tkIntXlibStubs; | |
135 | tkStubsPtr = stubsPtr; | |
136 | ||
137 | return actualVersion; | |
132 | tclStubsPtr->tcl_ResetResult(interp); | |
133 | tclStubsPtr->tcl_AppendResult(interp, "Error loading ", packageName, | |
134 | " (requested version ", version, ", actual version ", | |
135 | actualVersion, "): ", errMsg, NULL); | |
136 | return NULL; | |
138 | 137 | } |
139 | 138 | |
140 | 139 | /* |
145 | 145 | |
146 | 146 | /* |
147 | 147 | * The following structure defines the implementation of the "style" Tcl |
148 | * object, used for drawing. The internalRep.otherValuePtr field of each style | |
149 | * object points to the Style structure for the stylefont, or NULL. | |
148 | * object, used for drawing. The internalRep.twoPtrValue.ptr1 field of each | |
149 | * style object points to the Style structure for the stylefont, or NULL. | |
150 | 150 | */ |
151 | 151 | |
152 | 152 | static const Tcl_ObjType styleObjType = { |
1409 | 1409 | if (objPtr->typePtr != &styleObjType) { |
1410 | 1410 | SetStyleFromAny(interp, objPtr); |
1411 | 1411 | } |
1412 | stylePtr = objPtr->internalRep.otherValuePtr; | |
1412 | stylePtr = objPtr->internalRep.twoPtrValue.ptr1; | |
1413 | 1413 | |
1414 | 1414 | return (Tk_Style) stylePtr; |
1415 | 1415 | } |
1441 | 1441 | SetStyleFromAny(NULL, objPtr); |
1442 | 1442 | } |
1443 | 1443 | |
1444 | return objPtr->internalRep.otherValuePtr; | |
1444 | return objPtr->internalRep.twoPtrValue.ptr1; | |
1445 | 1445 | } |
1446 | 1446 | |
1447 | 1447 | /* |
1496 | 1496 | } |
1497 | 1497 | |
1498 | 1498 | objPtr->typePtr = &styleObjType; |
1499 | objPtr->internalRep.otherValuePtr = Tk_GetStyle(interp, name); | |
1499 | objPtr->internalRep.twoPtrValue.ptr1 = Tk_GetStyle(interp, name); | |
1500 | 1500 | |
1501 | 1501 | return TCL_OK; |
1502 | 1502 | } |
1519 | 1519 | FreeStyleObjProc( |
1520 | 1520 | Tcl_Obj *objPtr) /* The object we are releasing. */ |
1521 | 1521 | { |
1522 | objPtr->internalRep.otherValuePtr = NULL; | |
1522 | objPtr->internalRep.twoPtrValue.ptr1 = NULL; | |
1523 | 1523 | objPtr->typePtr = NULL; |
1524 | 1524 | } |
1525 | 1525 | |
1540 | 1540 | Tcl_Obj *dupObjPtr) /* The object we are copying to. */ |
1541 | 1541 | { |
1542 | 1542 | dupObjPtr->typePtr = srcObjPtr->typePtr; |
1543 | dupObjPtr->internalRep.otherValuePtr = | |
1544 | srcObjPtr->internalRep.otherValuePtr; | |
1543 | dupObjPtr->internalRep.twoPtrValue.ptr1 = | |
1544 | srcObjPtr->internalRep.twoPtrValue.ptr1; | |
1545 | 1545 | } |
1546 | 1546 | |
1547 | 1547 | /* |
159 | 159 | Tcl_Obj *const objv[]); |
160 | 160 | static int TestmakeexistCmd(ClientData dummy, |
161 | 161 | Tcl_Interp *interp, int argc, const char **argv); |
162 | #if !(defined(__WIN32__) || defined(MAC_OSX_TK)) | |
162 | #if !(defined(__WIN32__) || defined(MAC_OSX_TK) || defined(__CYGWIN__)) | |
163 | 163 | static int TestmenubarCmd(ClientData dummy, |
164 | 164 | Tcl_Interp *interp, int argc, const char **argv); |
165 | 165 | #endif |
185 | 185 | Tk_Window tkwin, char *internalPtr); |
186 | 186 | static int TestpropCmd(ClientData dummy, |
187 | 187 | Tcl_Interp *interp, int argc, const char **argv); |
188 | #if !(defined(__WIN32__) || defined(MAC_OSX_TK)) | |
188 | #if !(defined(__WIN32__) || defined(MAC_OSX_TK) || defined(__CYGWIN__)) | |
189 | 189 | static int TestwrapperCmd(ClientData dummy, |
190 | 190 | Tcl_Interp *interp, int argc, const char **argv); |
191 | 191 | #endif |
222 | 222 | if (Tcl_InitStubs(interp, "8.1", 0) == NULL) { |
223 | 223 | return TCL_ERROR; |
224 | 224 | } |
225 | if (Tk_InitStubs(interp, "8.1", 0) == NULL) { | |
225 | if (Tk_InitStubs(interp, TK_VERSION, 0) == NULL) { | |
226 | 226 | return TCL_ERROR; |
227 | 227 | } |
228 | 228 | |
230 | 230 | * Create additional commands for testing Tk. |
231 | 231 | */ |
232 | 232 | |
233 | if (Tcl_PkgProvide(interp, "Tktest", TK_VERSION) == TCL_ERROR) { | |
233 | if (Tcl_PkgProvideEx(interp, "Tktest", TK_VERSION, NULL) == TCL_ERROR) { | |
234 | 234 | return TCL_ERROR; |
235 | 235 | } |
236 | 236 | |
261 | 261 | #if defined(__WIN32__) || defined(MAC_OSX_TK) |
262 | 262 | Tcl_CreateCommand(interp, "testmetrics", TestmetricsCmd, |
263 | 263 | (ClientData) Tk_MainWindow(interp), NULL); |
264 | #else | |
264 | #elif !defined(__CYGWIN__) | |
265 | 265 | Tcl_CreateCommand(interp, "testmenubar", TestmenubarCmd, |
266 | 266 | (ClientData) Tk_MainWindow(interp), NULL); |
267 | 267 | Tcl_CreateCommand(interp, "testsend", TkpTestsendCmd, |
496 | 496 | Tcl_Obj *const objv[]) /* Argument objects. */ |
497 | 497 | { |
498 | 498 | static const char *const options[] = { |
499 | "alltypes", "chain1", "chain2", "configerror", "delete", "info", | |
499 | "alltypes", "chain1", "chain2", "chain3", "configerror", "delete", "info", | |
500 | 500 | "internal", "new", "notenoughparams", "twowindows", NULL |
501 | 501 | }; |
502 | 502 | enum { |
503 | ALL_TYPES, CHAIN1, CHAIN2, CONFIG_ERROR, | |
503 | ALL_TYPES, CHAIN1, CHAIN2, CHAIN3, CONFIG_ERROR, | |
504 | 504 | DEL, /* Can't use DELETE: VC++ compiler barfs. */ |
505 | 505 | INFO, INTERNAL, NEW, NOT_ENOUGH_PARAMS, TWO_WINDOWS |
506 | 506 | }; |
546 | 546 | return TCL_ERROR; |
547 | 547 | } |
548 | 548 | |
549 | if (Tcl_GetIndexFromObj(interp, objv[1], options, "command", 0, &index) | |
550 | != TCL_OK) { | |
549 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], options, | |
550 | sizeof(char *), "command", 0, &index)!= TCL_OK) { | |
551 | 551 | return TCL_ERROR; |
552 | 552 | } |
553 | 553 | |
719 | 719 | break; |
720 | 720 | } |
721 | 721 | |
722 | case CHAIN2: { | |
722 | case CHAIN2: | |
723 | case CHAIN3: { | |
723 | 724 | ExtensionWidgetRecord *recordPtr; |
724 | 725 | static const Tk_OptionSpec extensionSpecs[] = { |
725 | 726 | {TK_OPTION_STRING, "-three", "three", "Three", "three", |
796 | 797 | Tcl_WrongNumArgs(interp, 2, objv, "tableName"); |
797 | 798 | return TCL_ERROR; |
798 | 799 | } |
799 | if (Tcl_GetIndexFromObj(interp, objv[2], options, "table", 0, | |
800 | &index) != TCL_OK) { | |
800 | if (Tcl_GetIndexFromObjStruct(interp, objv[2], options, | |
801 | sizeof(char *), "table", 0, &index) != TCL_OK) { | |
801 | 802 | return TCL_ERROR; |
802 | 803 | } |
803 | 804 | if (tables[index] != NULL) { |
804 | 805 | Tk_DeleteOptionTable(tables[index]); |
806 | /* Make sure that Tk_DeleteOptionTable() is never done | |
807 | * twice for the same table. */ | |
808 | tables[index] = NULL; | |
805 | 809 | } |
806 | 810 | break; |
807 | 811 | |
810 | 814 | Tcl_WrongNumArgs(interp, 2, objv, "tableName"); |
811 | 815 | return TCL_ERROR; |
812 | 816 | } |
813 | if (Tcl_GetIndexFromObj(interp, objv[2], options, "table", 0, | |
814 | &index) != TCL_OK) { | |
817 | if (Tcl_GetIndexFromObjStruct(interp, objv[2], options, | |
818 | sizeof(char *), "table", 0, &index) != TCL_OK) { | |
815 | 819 | return TCL_ERROR; |
816 | 820 | } |
817 | 821 | Tcl_SetObjResult(interp, TkDebugConfig(interp, tables[index])); |
1142 | 1146 | return TCL_ERROR; |
1143 | 1147 | } |
1144 | 1148 | |
1145 | if (Tcl_GetIndexFromObj(interp, objv[1], options, "command", 0, | |
1146 | &index) != TCL_OK) { | |
1149 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], options, | |
1150 | sizeof(char *), "command", 0, &index) != TCL_OK) { | |
1147 | 1151 | return TCL_ERROR; |
1148 | 1152 | } |
1149 | 1153 | |
1320 | 1324 | return TCL_ERROR; |
1321 | 1325 | } |
1322 | 1326 | |
1323 | if (Tcl_GetIndexFromObj(interp, objv[1], options, "command", 0, &index) | |
1324 | != TCL_OK) { | |
1327 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], options, | |
1328 | sizeof(char *), "command", 0, &index)!= TCL_OK) { | |
1325 | 1329 | return TCL_ERROR; |
1326 | 1330 | } |
1327 | 1331 | |
1495 | 1499 | XGCValues gcValues; |
1496 | 1500 | |
1497 | 1501 | sprintf(buffer, "%s get", timPtr->imageName); |
1498 | Tcl_SetVar(timPtr->interp, timPtr->varName, buffer, | |
1502 | Tcl_SetVar2(timPtr->interp, timPtr->varName, NULL, buffer, | |
1499 | 1503 | TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT); |
1500 | 1504 | |
1501 | 1505 | instPtr = ckalloc(sizeof(TImageInstance)); |
1542 | 1546 | sprintf(buffer, "%s display %d %d %d %d %d %d", |
1543 | 1547 | instPtr->masterPtr->imageName, imageX, imageY, width, height, |
1544 | 1548 | drawableX, drawableY); |
1545 | Tcl_SetVar(instPtr->masterPtr->interp, instPtr->masterPtr->varName, buffer, | |
1546 | TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT); | |
1549 | Tcl_SetVar2(instPtr->masterPtr->interp, instPtr->masterPtr->varName, NULL, | |
1550 | buffer, TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT); | |
1547 | 1551 | if (width > (instPtr->masterPtr->width - imageX)) { |
1548 | 1552 | width = instPtr->masterPtr->width - imageX; |
1549 | 1553 | } |
1585 | 1589 | char buffer[200]; |
1586 | 1590 | |
1587 | 1591 | sprintf(buffer, "%s free", instPtr->masterPtr->imageName); |
1588 | Tcl_SetVar(instPtr->masterPtr->interp, instPtr->masterPtr->varName, buffer, | |
1589 | TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT); | |
1592 | Tcl_SetVar2(instPtr->masterPtr->interp, instPtr->masterPtr->varName, NULL, | |
1593 | buffer, TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT); | |
1590 | 1594 | Tk_FreeColor(instPtr->fg); |
1591 | 1595 | Tk_FreeGC(display, instPtr->gc); |
1592 | 1596 | ckfree(instPtr); |
1619 | 1623 | char buffer[100]; |
1620 | 1624 | |
1621 | 1625 | sprintf(buffer, "%s delete", timPtr->imageName); |
1622 | Tcl_SetVar(timPtr->interp, timPtr->varName, buffer, | |
1626 | Tcl_SetVar2(timPtr->interp, timPtr->varName, NULL, buffer, | |
1623 | 1627 | TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT); |
1624 | 1628 | |
1625 | 1629 | Tcl_DeleteCommand(timPtr->interp, timPtr->imageName); |
1688 | 1692 | */ |
1689 | 1693 | |
1690 | 1694 | /* ARGSUSED */ |
1691 | #if !(defined(__WIN32__) || defined(MAC_OSX_TK)) | |
1695 | #if !(defined(__WIN32__) || defined(MAC_OSX_TK) || defined(__CYGWIN__)) | |
1692 | 1696 | static int |
1693 | 1697 | TestmenubarCmd( |
1694 | 1698 | ClientData clientData, /* Main window for application. */ |
1733 | 1737 | |
1734 | 1738 | return TCL_OK; |
1735 | 1739 | #else |
1736 | Tcl_SetResult(interp, "testmenubar is supported only under Unix", | |
1737 | TCL_STATIC); | |
1740 | Tcl_AppendResult(interp, "testmenubar is supported only under Unix", NULL); | |
1738 | 1741 | return TCL_ERROR; |
1739 | 1742 | #endif |
1740 | 1743 | } |
1867 | 1870 | *p = '\n'; |
1868 | 1871 | } |
1869 | 1872 | } |
1870 | Tcl_SetResult(interp, (/*!unsigned*/char*)property, TCL_VOLATILE); | |
1873 | Tcl_SetObjResult(interp, Tcl_NewStringObj((/*!unsigned*/char*)property, -1)); | |
1871 | 1874 | } else { |
1872 | 1875 | for (p = property; length > 0; length--) { |
1873 | 1876 | if (actualFormat == 32) { |
1891 | 1894 | return TCL_OK; |
1892 | 1895 | } |
1893 | 1896 | |
1894 | #if !(defined(__WIN32__) || defined(MAC_OSX_TK)) | |
1897 | #if !(defined(__WIN32__) || defined(MAC_OSX_TK) || defined(__CYGWIN__)) | |
1895 | 1898 | /* |
1896 | 1899 | *---------------------------------------------------------------------- |
1897 | 1900 | * |
1938 | 1941 | char buf[TCL_INTEGER_SPACE]; |
1939 | 1942 | |
1940 | 1943 | TkpPrintWindowId(buf, Tk_WindowId(wrapperPtr)); |
1941 | Tcl_SetResult(interp, buf, TCL_VOLATILE); | |
1944 | Tcl_SetObjResult(interp, Tcl_NewStringObj(buf, -1)); | |
1942 | 1945 | } |
1943 | 1946 | return TCL_OK; |
1944 | 1947 | } |
1981 | 1984 | char *saveInternalPtr, |
1982 | 1985 | int flags) |
1983 | 1986 | { |
1984 | int objEmpty, length; | |
1987 | int objEmpty; | |
1985 | 1988 | char *newStr, *string, *internalPtr; |
1986 | 1989 | |
1987 | 1990 | objEmpty = 0; |
2002 | 2005 | } else if ((*value)->bytes != NULL) { |
2003 | 2006 | objEmpty = ((*value)->length == 0); |
2004 | 2007 | } else { |
2005 | Tcl_GetStringFromObj((*value), &length); | |
2006 | objEmpty = (length == 0); | |
2008 | (void)Tcl_GetString(*value); | |
2009 | objEmpty = ((*value)->length == 0); | |
2007 | 2010 | } |
2008 | 2011 | |
2009 | 2012 | if ((flags & TK_OPTION_NULL_OK) && objEmpty) { |
2010 | 2013 | *value = NULL; |
2011 | 2014 | } else { |
2012 | string = Tcl_GetStringFromObj((*value), &length); | |
2015 | string = Tcl_GetString(*value); | |
2013 | 2016 | Tcl_UtfToUpper(string); |
2014 | 2017 | if (strcmp(string, "BAD") == 0) { |
2015 | Tcl_SetResult(interp, "expected good value, got \"BAD\"", | |
2016 | TCL_STATIC); | |
2018 | Tcl_SetObjResult(interp, Tcl_NewStringObj("expected good value, got \"BAD\"", -1)); | |
2017 | 2019 | return TCL_ERROR; |
2018 | 2020 | } |
2019 | 2021 | } |
2020 | 2022 | if (internalPtr != NULL) { |
2021 | if ((*value) != NULL) { | |
2022 | string = Tcl_GetStringFromObj((*value), &length); | |
2023 | newStr = ckalloc(length + 1); | |
2023 | if (*value != NULL) { | |
2024 | string = Tcl_GetString(*value); | |
2025 | newStr = ckalloc((*value)->length + 1); | |
2024 | 2026 | strcpy(newStr, string); |
2025 | 2027 | } else { |
2026 | 2028 | newStr = NULL; |
717 | 717 | return TCL_ERROR; |
718 | 718 | } |
719 | 719 | |
720 | if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, | |
721 | &index) != TCL_OK) { | |
720 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], optionStrings, | |
721 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
722 | 722 | return TCL_ERROR; |
723 | 723 | } |
724 | 724 | textPtr->refCount++; |
858 | 858 | |
859 | 859 | for (i = 2; i < objc-2; i++) { |
860 | 860 | int value, length; |
861 | const char *option = Tcl_GetStringFromObj(objv[i], &length); | |
861 | const char *option = Tcl_GetString(objv[i]); | |
862 | 862 | char c; |
863 | 863 | |
864 | length = objv[i]->length; | |
864 | 865 | if (length < 2 || option[0] != '-') { |
865 | 866 | goto badOption; |
866 | 867 | } |
1259 | 1260 | |
1260 | 1261 | i = 2; |
1261 | 1262 | if (objc > 3) { |
1262 | name = Tcl_GetStringFromObj(objv[i], &length); | |
1263 | name = Tcl_GetString(objv[i]); | |
1264 | length = objv[i]->length; | |
1263 | 1265 | if (length > 1 && name[0] == '-') { |
1264 | 1266 | if (strncmp("-displaychars", name, (unsigned) length) == 0) { |
1265 | 1267 | i++; |
1266 | 1268 | visible = 1; |
1267 | name = Tcl_GetStringFromObj(objv[i], &length); | |
1269 | name = Tcl_GetString(objv[i]); | |
1270 | length = objv[i]->length; | |
1268 | 1271 | } |
1269 | 1272 | if ((i < objc-1) && (length == 2) && !strcmp("--", name)) { |
1270 | 1273 | i++; |
1558 | 1561 | return TCL_ERROR; |
1559 | 1562 | } |
1560 | 1563 | |
1561 | if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, | |
1562 | &index) != TCL_OK) { | |
1564 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], optionStrings, | |
1565 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
1563 | 1566 | return TCL_ERROR; |
1564 | 1567 | } |
1565 | 1568 | |
1663 | 1666 | return TCL_ERROR; |
1664 | 1667 | } |
1665 | 1668 | |
1666 | if (Tcl_GetIndexFromObj(interp, objv[2], peerOptionStrings, | |
1667 | "peer option", 0, &index) != TCL_OK) { | |
1669 | if (Tcl_GetIndexFromObjStruct(interp, objv[2], peerOptionStrings, | |
1670 | sizeof(char *), "peer option", 0, &index) != TCL_OK) { | |
1668 | 1671 | return TCL_ERROR; |
1669 | 1672 | } |
1670 | 1673 | |
2551 | 2554 | int *lineAndByteIndex; |
2552 | 2555 | int resetViewCount; |
2553 | 2556 | int pixels[2*PIXEL_CLIENTS]; |
2554 | ||
2555 | const char *string = Tcl_GetStringFromObj(stringPtr, &length); | |
2556 | ||
2557 | const char *string = Tcl_GetString(stringPtr); | |
2558 | ||
2559 | length = stringPtr->length; | |
2557 | 2560 | if (sharedTextPtr == NULL) { |
2558 | 2561 | sharedTextPtr = textPtr->sharedTextPtr; |
2559 | 2562 | } |
3712 | 3715 | break; |
3713 | 3716 | } |
3714 | 3717 | |
3715 | if (Tcl_GetIndexFromObj(NULL, objv[i], switchStrings, "switch", 0, | |
3716 | &index) != TCL_OK) { | |
3718 | if (Tcl_GetIndexFromObjStruct(NULL, objv[i], switchStrings, | |
3719 | sizeof(char *), "switch", 0, &index) != TCL_OK) { | |
3717 | 3720 | /* |
3718 | 3721 | * Hide the -hidden option, generating the error description with |
3719 | 3722 | * the side effects of T_GIFO. |
3720 | 3723 | */ |
3721 | 3724 | |
3722 | (void) Tcl_GetIndexFromObj(interp, objv[i], switchStrings+1, | |
3723 | "switch", 0, &index); | |
3725 | (void) Tcl_GetIndexFromObjStruct(interp, objv[i], switchStrings+1, | |
3726 | sizeof(char *), "switch", 0, &index); | |
3724 | 3727 | return TCL_ERROR; |
3725 | 3728 | } |
3726 | 3729 | |
4092 | 4095 | |
4093 | 4096 | if (lenPtr != NULL) { |
4094 | 4097 | if (searchSpecPtr->exact) { |
4095 | Tcl_GetStringFromObj(theLine, lenPtr); | |
4098 | (void)Tcl_GetString(theLine); | |
4099 | *lenPtr = theLine->length; | |
4096 | 4100 | } else { |
4097 | 4101 | *lenPtr = Tcl_GetCharLength(theLine); |
4098 | 4102 | } |
4481 | 4485 | } |
4482 | 4486 | i += 1; |
4483 | 4487 | |
4484 | if (Tcl_GetIndexFromObj(interp, objv[i], tabOptionStrings, | |
4485 | "tab alignment", 0, &index) != TCL_OK) { | |
4488 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], tabOptionStrings, | |
4489 | sizeof(char *), "tab alignment", 0, &index) != TCL_OK) { | |
4486 | 4490 | goto error; |
4487 | 4491 | } |
4488 | 4492 | tabPtr->alignment = (TkTextTabAlign) index; |
4559 | 4563 | if (Tcl_GetString(objv[arg])[0] != '-') { |
4560 | 4564 | break; |
4561 | 4565 | } |
4562 | if (Tcl_GetIndexFromObj(interp, objv[arg], optStrings, "option", 0, | |
4563 | &index) != TCL_OK) { | |
4566 | if (Tcl_GetIndexFromObjStruct(interp, objv[arg], optStrings, | |
4567 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
4564 | 4568 | return TCL_ERROR; |
4565 | 4569 | } |
4566 | 4570 | switch ((enum opts) index) { |
4618 | 4622 | if (TkTextGetObjIndex(interp, textPtr, objv[arg], &index2) != TCL_OK) { |
4619 | 4623 | return TCL_ERROR; |
4620 | 4624 | } |
4621 | str = Tcl_GetStringFromObj(objv[arg], &length); | |
4625 | str = Tcl_GetString(objv[arg]); | |
4626 | length = objv[arg]->length; | |
4622 | 4627 | if (strncmp(str, "end", (unsigned) length) == 0) { |
4623 | 4628 | atEnd = 1; |
4624 | 4629 | } |
4935 | 4940 | return 0; |
4936 | 4941 | } else { |
4937 | 4942 | int oldStateEpoch = TkBTreeEpoch(textPtr->sharedTextPtr->tree); |
4938 | ||
4939 | Tcl_VarEval(interp, Tcl_GetString(command), " ", Tcl_GetString(tuple), | |
4940 | NULL); | |
4943 | Tcl_DString buf; | |
4944 | int code; | |
4945 | ||
4946 | Tcl_DStringInit(&buf); | |
4947 | Tcl_DStringAppend(&buf, Tcl_GetString(command), -1); | |
4948 | Tcl_DStringAppend(&buf, " ", -1); | |
4949 | Tcl_DStringAppend(&buf, Tcl_GetString(tuple), -1); | |
4950 | code = Tcl_EvalEx(interp, Tcl_DStringValue(&buf), -1, 0); | |
4951 | Tcl_DStringFree(&buf); | |
4952 | if (code != TCL_OK) { | |
4953 | Tcl_AddErrorInfo(interp, | |
4954 | "\n (segment dumping command executed by text)"); | |
4955 | Tcl_BackgroundException(interp, code); | |
4956 | } | |
4941 | 4957 | Tcl_DecrRefCount(tuple); |
4942 | 4958 | return ((textPtr->flags & DESTROYED) || |
4943 | 4959 | TkBTreeEpoch(textPtr->sharedTextPtr->tree) != oldStateEpoch); |
5076 | 5092 | return TCL_ERROR; |
5077 | 5093 | } |
5078 | 5094 | |
5079 | if (Tcl_GetIndexFromObj(interp, objv[2], editOptionStrings, | |
5080 | "edit option", 0, &index) != TCL_OK) { | |
5095 | if (Tcl_GetIndexFromObjStruct(interp, objv[2], editOptionStrings, | |
5096 | sizeof(char *), "edit option", 0, &index) != TCL_OK) { | |
5081 | 5097 | return TCL_ERROR; |
5082 | 5098 | } |
5083 | 5099 | |
5540 | 5556 | * it has dual purpose. |
5541 | 5557 | */ |
5542 | 5558 | |
5543 | pattern = Tcl_GetStringFromObj(patObj, &matchLength); | |
5559 | pattern = Tcl_GetString(patObj); | |
5560 | matchLength = patObj->length; | |
5544 | 5561 | nl = strchr(pattern, '\n'); |
5545 | 5562 | |
5546 | 5563 | /* |
6608 | 6625 | ObjectIsEmpty( |
6609 | 6626 | Tcl_Obj *objPtr) /* Object to test. May be NULL. */ |
6610 | 6627 | { |
6611 | int length; | |
6612 | ||
6613 | 6628 | if (objPtr == NULL) { |
6614 | 6629 | return 1; |
6615 | 6630 | } |
6616 | 6631 | if (objPtr->bytes != NULL) { |
6617 | 6632 | return (objPtr->length == 0); |
6618 | 6633 | } |
6619 | Tcl_GetStringFromObj(objPtr, &length); | |
6620 | return (length == 0); | |
6634 | (void)Tcl_GetString(objPtr); | |
6635 | return (objPtr->length == 0); | |
6621 | 6636 | } |
6622 | 6637 | |
6623 | 6638 | /* |
6063 | 6063 | if (textPtr->xScrollCmd != NULL) { |
6064 | 6064 | char buf1[TCL_DOUBLE_SPACE+1]; |
6065 | 6065 | char buf2[TCL_DOUBLE_SPACE+1]; |
6066 | Tcl_DString buf; | |
6066 | 6067 | |
6067 | 6068 | buf1[0] = ' '; |
6068 | 6069 | buf2[0] = ' '; |
6069 | 6070 | Tcl_PrintDouble(NULL, first, buf1+1); |
6070 | 6071 | Tcl_PrintDouble(NULL, last, buf2+1); |
6071 | code = Tcl_VarEval(interp, textPtr->xScrollCmd, buf1, buf2, NULL); | |
6072 | Tcl_DStringInit(&buf); | |
6073 | Tcl_DStringAppend(&buf, textPtr->xScrollCmd, -1); | |
6074 | Tcl_DStringAppend(&buf, buf1, -1); | |
6075 | Tcl_DStringAppend(&buf, buf2, -1); | |
6076 | code = Tcl_EvalEx(interp, Tcl_DStringValue(&buf), -1, 0); | |
6077 | Tcl_DStringFree(&buf); | |
6072 | 6078 | if (code != TCL_OK) { |
6073 | 6079 | Tcl_AddErrorInfo(interp, |
6074 | 6080 | "\n (horizontal scrolling command executed by text)"); |
6345 | 6351 | if (textPtr->yScrollCmd != NULL) { |
6346 | 6352 | char buf1[TCL_DOUBLE_SPACE+1]; |
6347 | 6353 | char buf2[TCL_DOUBLE_SPACE+1]; |
6354 | Tcl_DString buf; | |
6348 | 6355 | |
6349 | 6356 | buf1[0] = ' '; |
6350 | 6357 | buf2[0] = ' '; |
6351 | 6358 | Tcl_PrintDouble(NULL, first, buf1+1); |
6352 | 6359 | Tcl_PrintDouble(NULL, last, buf2+1); |
6353 | code = Tcl_VarEval(interp, textPtr->yScrollCmd, buf1, buf2, NULL); | |
6360 | Tcl_DStringInit(&buf); | |
6361 | Tcl_DStringAppend(&buf, textPtr->yScrollCmd, -1); | |
6362 | Tcl_DStringAppend(&buf, buf1, -1); | |
6363 | Tcl_DStringAppend(&buf, buf2, -1); | |
6364 | code = Tcl_EvalEx(interp, Tcl_DStringValue(&buf), -1, 0); | |
6365 | Tcl_DStringFree(&buf); | |
6354 | 6366 | if (code != TCL_OK) { |
6355 | 6367 | Tcl_AddErrorInfo(interp, |
6356 | 6368 | "\n (vertical scrolling command executed by text)"); |
8195 | 8207 | }; |
8196 | 8208 | int index; |
8197 | 8209 | |
8198 | if (Tcl_GetIndexFromObj(interp, objv[2], subcommands, "option", 0, | |
8199 | &index) != TCL_OK) { | |
8210 | if (Tcl_GetIndexFromObjStruct(interp, objv[2], subcommands, | |
8211 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
8200 | 8212 | return TKTEXT_SCROLL_ERROR; |
8201 | 8213 | } |
8202 | 8214 | |
8215 | 8227 | Tcl_WrongNumArgs(interp, 3, objv, "number units|pages|pixels"); |
8216 | 8228 | return TKTEXT_SCROLL_ERROR; |
8217 | 8229 | } |
8218 | if (Tcl_GetIndexFromObj(interp, objv[4], units, "argument", 0, | |
8219 | &index) != TCL_OK) { | |
8230 | if (Tcl_GetIndexFromObjStruct(interp, objv[4], units, | |
8231 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
8220 | 8232 | return TKTEXT_SCROLL_ERROR; |
8221 | 8233 | } |
8222 | 8234 | switch ((enum viewUnits) index) { |
137 | 137 | Tcl_WrongNumArgs(interp, 2, objv, "option ?arg ...?"); |
138 | 138 | return TCL_ERROR; |
139 | 139 | } |
140 | if (Tcl_GetIndexFromObj(interp, objv[2], optionStrings, "option", 0, | |
141 | &idx) != TCL_OK) { | |
140 | if (Tcl_GetIndexFromObjStruct(interp, objv[2], optionStrings, | |
141 | sizeof(char *), "option", 0, &idx) != TCL_OK) { | |
142 | 142 | return TCL_ERROR; |
143 | 143 | } |
144 | 144 | switch ((enum opts) idx) { |
47 | 47 | static void DupTextIndexInternalRep(Tcl_Obj *srcPtr, |
48 | 48 | Tcl_Obj *copyPtr); |
49 | 49 | static void FreeTextIndexInternalRep(Tcl_Obj *listPtr); |
50 | static int SetTextIndexFromAny(Tcl_Interp *interp, | |
51 | Tcl_Obj *objPtr); | |
52 | 50 | static void UpdateStringOfTextIndex(Tcl_Obj *objPtr); |
53 | 51 | |
54 | 52 | /* |
74 | 72 | FreeTextIndexInternalRep, /* freeIntRepProc */ |
75 | 73 | DupTextIndexInternalRep, /* dupIntRepProc */ |
76 | 74 | NULL, /* updateStringProc */ |
77 | SetTextIndexFromAny /* setFromAnyProc */ | |
75 | NULL /* setFromAnyProc */ | |
78 | 76 | }; |
79 | 77 | |
80 | 78 | static void |
140 | 138 | objPtr->bytes = ckalloc(len + 1); |
141 | 139 | strcpy(objPtr->bytes, buffer); |
142 | 140 | objPtr->length = len; |
143 | } | |
144 | ||
145 | static int | |
146 | SetTextIndexFromAny( | |
147 | Tcl_Interp *interp, /* Used for error reporting if not NULL. */ | |
148 | Tcl_Obj *objPtr) /* The object to convert. */ | |
149 | { | |
150 | Tcl_SetObjResult(interp, Tcl_NewStringObj( | |
151 | "can't convert value to textindex except via" | |
152 | " TkTextGetIndexFromObj API", -1)); | |
153 | Tcl_SetErrorCode(interp, "TK", "API_ABUSE", NULL); | |
154 | return TCL_ERROR; | |
155 | 141 | } |
156 | 142 | |
157 | 143 | /* |
117 | 117 | Tcl_WrongNumArgs(interp, 2, objv, "option ?arg ...?"); |
118 | 118 | return TCL_ERROR; |
119 | 119 | } |
120 | if (Tcl_GetIndexFromObj(interp, objv[2], markOptionStrings, "mark option", | |
121 | 0, &optionIndex) != TCL_OK) { | |
120 | if (Tcl_GetIndexFromObjStruct(interp, objv[2], markOptionStrings, | |
121 | sizeof(char *), "mark option", 0, &optionIndex) != TCL_OK) { | |
122 | 122 | return TCL_ERROR; |
123 | 123 | } |
124 | 124 |
147 | 147 | return TCL_ERROR; |
148 | 148 | } |
149 | 149 | |
150 | if (Tcl_GetIndexFromObj(interp, objv[2], tagOptionStrings, | |
151 | "tag option", 0, &optionIndex) != TCL_OK) { | |
150 | if (Tcl_GetIndexFromObjStruct(interp, objv[2], tagOptionStrings, | |
151 | sizeof(char *), "tag option", 0, &optionIndex) != TCL_OK) { | |
152 | 152 | return TCL_ERROR; |
153 | 153 | } |
154 | 154 | |
288 | 288 | textPtr->sharedTextPtr->bindingTable, |
289 | 289 | (ClientData) tagPtr->name, Tcl_GetString(objv[4])); |
290 | 290 | if (command == NULL) { |
291 | const char *string = Tcl_GetStringResult(interp); | |
291 | const char *string = Tcl_GetString(Tcl_GetObjResult(interp)); | |
292 | 292 | |
293 | 293 | /* |
294 | 294 | * Ignore missing binding errors. This is a special hack that |
152 | 152 | Tcl_WrongNumArgs(interp, 2, objv, "option ?arg ...?"); |
153 | 153 | return TCL_ERROR; |
154 | 154 | } |
155 | if (Tcl_GetIndexFromObj(interp, objv[2], windOptionStrings, | |
156 | "window option", 0, &optionIndex) != TCL_OK) { | |
155 | if (Tcl_GetIndexFromObjStruct(interp, objv[2], windOptionStrings, | |
156 | sizeof(char *), "window option", 0, &optionIndex) != TCL_OK) { | |
157 | 157 | return TCL_ERROR; |
158 | 158 | } |
159 | 159 | switch ((enum windOptions) optionIndex) { |
910 | 910 | |
911 | 911 | if (dsPtr != NULL) { |
912 | 912 | Tcl_DStringAppend(dsPtr, before, (int) (string-before)); |
913 | code = Tcl_GlobalEval(textPtr->interp, Tcl_DStringValue(dsPtr)); | |
913 | code = Tcl_EvalEx(textPtr->interp, Tcl_DStringValue(dsPtr), -1, TCL_EVAL_GLOBAL); | |
914 | 914 | Tcl_DStringFree(dsPtr); |
915 | 915 | } else { |
916 | code = Tcl_GlobalEval(textPtr->interp, ewPtr->body.ew.create); | |
916 | code = Tcl_EvalEx(textPtr->interp, ewPtr->body.ew.create, -1, TCL_EVAL_GLOBAL); | |
917 | 917 | } |
918 | 918 | if (code != TCL_OK) { |
919 | 919 | Tcl_BackgroundException(textPtr->interp, code); |
926 | 926 | Tcl_GetString(nameObj), textPtr->tkwin); |
927 | 927 | Tcl_DecrRefCount(nameObj); |
928 | 928 | if (ewPtr->body.ew.tkwin == NULL) { |
929 | Tcl_BackgroundError(textPtr->interp); | |
929 | Tcl_BackgroundException(textPtr->interp, TCL_ERROR); | |
930 | 930 | goto gotWindow; |
931 | 931 | } |
932 | 932 | |
947 | 947 | Tk_PathName(textPtr->tkwin))); |
948 | 948 | Tcl_SetErrorCode(textPtr->interp, "TK", "GEOMETRY", "HIERARCHY", |
949 | 949 | NULL); |
950 | Tcl_BackgroundError(textPtr->interp); | |
950 | Tcl_BackgroundException(textPtr->interp, TCL_ERROR); | |
951 | 951 | ewPtr->body.ew.tkwin = NULL; |
952 | 952 | goto gotWindow; |
953 | 953 | } |
728 | 728 | int *intPtr) /* Filled in with number of pages or lines to |
729 | 729 | * scroll, if any. */ |
730 | 730 | { |
731 | int length; | |
732 | const char *arg = Tcl_GetStringFromObj(objv[2], &length); | |
731 | const char *arg = Tcl_GetString(objv[2]); | |
732 | size_t length = objv[2]->length; | |
733 | 733 | |
734 | 734 | #define ArgPfxEq(str) \ |
735 | 735 | ((arg[0] == str[0]) && !strncmp(arg, str, (unsigned)length)) |
752 | 752 | return TK_SCROLL_ERROR; |
753 | 753 | } |
754 | 754 | |
755 | arg = Tcl_GetStringFromObj(objv[4], &length); | |
755 | arg = Tcl_GetString(objv[4]); | |
756 | length = objv[4]->length; | |
756 | 757 | if (ArgPfxEq("pages")) { |
757 | 758 | return TK_SCROLL_PAGES; |
758 | 759 | } else if (ArgPfxEq("units")) { |
969 | 970 | * Not there. Look in the state map. |
970 | 971 | */ |
971 | 972 | |
972 | key = Tcl_GetStringFromObj(keyPtr, NULL); | |
973 | key = Tcl_GetString(keyPtr); | |
973 | 974 | for (mPtr = mapPtr; mPtr->strKey != NULL; mPtr++) { |
974 | 975 | if (strcmp(key, mPtr->strKey) == 0) { |
975 | 976 | typePtr = keyPtr->typePtr; |
992 | 992 | * Set variables for the intepreter. |
993 | 993 | */ |
994 | 994 | |
995 | Tcl_SetVar(interp, "tk_patchLevel", TK_PATCH_LEVEL, TCL_GLOBAL_ONLY); | |
996 | Tcl_SetVar(interp, "tk_version", TK_VERSION, TCL_GLOBAL_ONLY); | |
995 | Tcl_SetVar2(interp, "tk_patchLevel", NULL, TK_PATCH_LEVEL, TCL_GLOBAL_ONLY); | |
996 | Tcl_SetVar2(interp, "tk_version", NULL, TK_VERSION, TCL_GLOBAL_ONLY); | |
997 | 997 | |
998 | 998 | tsdPtr->numMainWindows++; |
999 | 999 | return tkwin; |
2851 | 2851 | tsdPtr->initialized = 0; |
2852 | 2852 | } |
2853 | 2853 | |
2854 | #if defined(__WIN32__) && !defined(__WIN64__) | |
2854 | #if defined(__WIN32__) | |
2855 | 2855 | |
2856 | 2856 | static HMODULE tkcygwindll = NULL; |
2857 | 2857 | |
2897 | 2897 | tkmainex(argc, argv, appInitProc, interp); |
2898 | 2898 | return 1; |
2899 | 2899 | } |
2900 | #endif /* __WIN32__ && !__WIN64__ */ | |
2900 | #endif /* __WIN32__ */ | |
2901 | 2901 | |
2902 | 2902 | /* |
2903 | 2903 | *---------------------------------------------------------------------- |
2926 | 2926 | Tk_Init( |
2927 | 2927 | Tcl_Interp *interp) /* Interpreter to initialize. */ |
2928 | 2928 | { |
2929 | #if defined(__WIN32__) && !defined(__WIN64__) | |
2929 | #if defined(__WIN32__) | |
2930 | 2930 | if (tkcygwindll) { |
2931 | 2931 | int (*tkinit)(Tcl_Interp *); |
2932 | 2932 | |
2935 | 2935 | return tkinit(interp); |
2936 | 2936 | } |
2937 | 2937 | } |
2938 | #endif /* __WIN32__ && !__WIN64__ */ | |
2938 | #endif /* __WIN32__ */ | |
2939 | 2939 | return Initialize(interp); |
2940 | 2940 | } |
2941 | 2941 | |
2999 | 2999 | * checked at several places to differentiate the two initialisations. |
3000 | 3000 | */ |
3001 | 3001 | |
3002 | #if defined(__WIN32__) && !defined(__WIN64__) | |
3002 | #if defined(__WIN32__) | |
3003 | 3003 | if (tkcygwindll) { |
3004 | 3004 | int (*tksafeinit)(Tcl_Interp *); |
3005 | 3005 | |
3009 | 3009 | return tksafeinit(interp); |
3010 | 3010 | } |
3011 | 3011 | } |
3012 | #endif /* __WIN32__ && !__WIN64__ */ | |
3012 | #endif /* __WIN32__ */ | |
3013 | 3013 | return Initialize(interp); |
3014 | 3014 | } |
3015 | 3015 | |
3046 | 3046 | ThreadSpecificData *tsdPtr; |
3047 | 3047 | |
3048 | 3048 | /* |
3049 | * Ensure that we are getting a compatible version of Tcl. This is really | |
3050 | * only an issue when Tk is loaded dynamically. | |
3051 | */ | |
3052 | ||
3053 | if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) { | |
3049 | * Ensure that we are getting a compatible version of Tcl. | |
3050 | */ | |
3051 | ||
3052 | if (Tcl_InitStubs(interp, "8.6", 0) == NULL) { | |
3054 | 3053 | return TCL_ERROR; |
3055 | 3054 | } |
3056 | 3055 | |
3135 | 3134 | |
3136 | 3135 | Tcl_DStringInit(&ds); |
3137 | 3136 | Tcl_DStringAppendElement(&ds, "::safe::TkInit"); |
3138 | Tcl_DStringAppendElement(&ds, Tcl_GetStringResult(master)); | |
3137 | Tcl_DStringAppendElement(&ds, Tcl_GetString(Tcl_GetObjResult(master))); | |
3139 | 3138 | |
3140 | 3139 | /* |
3141 | 3140 | * Step 2 : Eval in the master. The argument is the *reversed* interp |
3142 | 3141 | * path of the slave. |
3143 | 3142 | */ |
3144 | 3143 | |
3145 | code = Tcl_Eval(master, Tcl_DStringValue(&ds)); | |
3144 | code = Tcl_EvalEx(master, Tcl_DStringValue(&ds), -1, 0); | |
3146 | 3145 | if (code != TCL_OK) { |
3147 | 3146 | /* |
3148 | 3147 | * We might want to transfer the error message or not. We don't. |
3163 | 3162 | * changing the code below. |
3164 | 3163 | */ |
3165 | 3164 | |
3166 | argString = Tcl_GetStringResult(master); | |
3165 | argString = Tcl_GetString(Tcl_GetObjResult(master)); | |
3167 | 3166 | } else { |
3168 | 3167 | /* |
3169 | 3168 | * If there is an "argv" variable, get its value, extract out relevant |
3278 | 3277 | */ |
3279 | 3278 | |
3280 | 3279 | if (geometry != NULL) { |
3281 | Tcl_SetVar(interp, "geometry", geometry, TCL_GLOBAL_ONLY); | |
3282 | code = Tcl_VarEval(interp, "wm geometry . ", geometry, NULL); | |
3280 | Tcl_DString buf; | |
3281 | ||
3282 | Tcl_SetVar2(interp, "geometry", NULL, geometry, TCL_GLOBAL_ONLY); | |
3283 | Tcl_DStringInit(&buf); | |
3284 | Tcl_DStringAppend(&buf, "wm geometry . ", -1); | |
3285 | Tcl_DStringAppend(&buf, geometry, -1); | |
3286 | code = Tcl_EvalEx(interp, Tcl_DStringValue(&buf), -1, 0); | |
3287 | Tcl_DStringFree(&buf); | |
3283 | 3288 | if (code != TCL_OK) { |
3284 | 3289 | goto done; |
3285 | 3290 | } |
3286 | 3291 | geometry = NULL; |
3287 | } | |
3288 | ||
3289 | if (Tcl_PkgRequire(interp, "Tcl", TCL_VERSION, 0) == NULL) { | |
3290 | code = TCL_ERROR; | |
3291 | goto done; | |
3292 | 3292 | } |
3293 | 3293 | |
3294 | 3294 | /* |
3342 | 3342 | * an alternate [tkInit] command before calling Tk_Init(). |
3343 | 3343 | */ |
3344 | 3344 | |
3345 | code = Tcl_Eval(interp, | |
3345 | code = Tcl_EvalEx(interp, | |
3346 | 3346 | "if {[namespace which -command tkInit] eq \"\"} {\n\ |
3347 | 3347 | proc tkInit {} {\n\ |
3348 | 3348 | global tk_library tk_version tk_patchLevel\n\ |
3350 | 3350 | tcl_findLibrary tk $tk_version $tk_patchLevel tk.tcl TK_LIBRARY tk_library\n\ |
3351 | 3351 | }\n\ |
3352 | 3352 | }\n\ |
3353 | tkInit"); | |
3353 | tkInit", -1, 0); | |
3354 | 3354 | } |
3355 | 3355 | if (code == TCL_OK) { |
3356 | 3356 | /* |
3396 | 3396 | const char * version, |
3397 | 3397 | int exact) |
3398 | 3398 | { |
3399 | const char *actualVersion = Tcl_PkgRequire(interp, "Tk", version, 0); | |
3399 | const char *actualVersion = Tcl_PkgRequireEx(interp, "Tk", version, 0, NULL); | |
3400 | 3400 | |
3401 | 3401 | if (exact && actualVersion) { |
3402 | 3402 | const char *p = version; |
3408 | 3408 | if (count == 1) { |
3409 | 3409 | if (0 != strncmp(version, actualVersion, strlen(version))) { |
3410 | 3410 | /* Construct error message */ |
3411 | Tcl_PkgPresent(interp, "Tk", version, 1); | |
3411 | Tcl_PkgPresentEx(interp, "Tk", version, 1, NULL); | |
3412 | 3412 | return NULL; |
3413 | 3413 | } |
3414 | 3414 | } else { |
3415 | return Tcl_PkgPresent(interp, "Tk", version, 1); | |
3415 | return Tcl_PkgPresentEx(interp, "Tk", version, 1, NULL); | |
3416 | 3416 | } |
3417 | 3417 | } |
3418 | 3418 | return actualVersion; |
269 | 269 | } else { |
270 | 270 | Tcl_DecrRefCount(cacheObj); |
271 | 271 | Tcl_SetHashValue(entryPtr, NULL); |
272 | Tcl_BackgroundError(interp); | |
272 | Tcl_BackgroundException(interp, TCL_ERROR); | |
273 | 273 | return NULL; |
274 | 274 | } |
275 | 275 | } |
340 | 340 | Tcl_SetHashValue(entryPtr, image); |
341 | 341 | |
342 | 342 | if (!image) { |
343 | Tcl_BackgroundError(cache->interp); | |
343 | Tcl_BackgroundException(cache->interp, TCL_ERROR); | |
344 | 344 | } |
345 | 345 | |
346 | 346 | return image; |
12 | 12 | interp, TTK_VERSION, TTK_STUBS_EPOCH, TTK_STUBS_REVISION) |
13 | 13 | #else |
14 | 14 | |
15 | #define Ttk_InitStubs(interp) Tcl_PkgRequire(interp, "Ttk", TTK_VERSION, 0) | |
15 | #define Ttk_InitStubs(interp) Tcl_PkgRequireEx(interp, "Ttk", TTK_VERSION, 0, NULL) | |
16 | 16 | |
17 | 17 | #endif |
18 | 18 |
721 | 721 | int width = 0, height = 0; |
722 | 722 | |
723 | 723 | Tk_GetPixelsFromObj(NULL, tkwin, arrow->sizeObj, &size); |
724 | Tcl_GetIndexFromObj(NULL, arrow->directionObj, directionStrings, | |
725 | ""/*message*/, 0/*flags*/, &postDirection); | |
724 | Tcl_GetIndexFromObjStruct(NULL, arrow->directionObj, directionStrings, | |
725 | sizeof(char *), ""/*message*/, 0/*flags*/, &postDirection); | |
726 | 726 | |
727 | 727 | /* ... this might not be such a great idea ... */ |
728 | 728 | switch (postDirection) { |
1274 | 1274 | /* |
1275 | 1275 | * Register "default" as a user-loadable theme (for now): |
1276 | 1276 | */ |
1277 | Tcl_PkgProvide(interp, "ttk::theme::default", TTK_VERSION); | |
1277 | Tcl_PkgProvideEx(interp, "ttk::theme::default", TTK_VERSION, NULL); | |
1278 | 1278 | } |
1279 | 1279 | |
1280 | 1280 | /*EOF*/ |
651 | 651 | { |
652 | 652 | Tcl_Interp *interp = entryPtr->core.interp; |
653 | 653 | if (EntryRevalidate(interp, entryPtr, reason) == TCL_ERROR) { |
654 | Tcl_BackgroundError(interp); | |
654 | Tcl_BackgroundException(interp, TCL_ERROR); | |
655 | 655 | } |
656 | 656 | } |
657 | 657 | |
757 | 757 | Tcl_GetString(entryPtr->entry.textVariableObj); |
758 | 758 | if (textVarName && *textVarName) { |
759 | 759 | entryPtr->core.flags |= SYNCING_VARIABLE; |
760 | value = Tcl_SetVar(entryPtr->core.interp, textVarName, | |
761 | value, TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG); | |
760 | value = Tcl_SetVar2(entryPtr->core.interp, textVarName, | |
761 | NULL, value, TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG); | |
762 | 762 | entryPtr->core.flags &= ~SYNCING_VARIABLE; |
763 | 763 | if (!value || WidgetDestroyed(&entryPtr->core)) { |
764 | 764 | return TCL_ERROR; |
785 | 785 | } |
786 | 786 | |
787 | 787 | if (entryPtr->core.flags & SYNCING_VARIABLE) { |
788 | /* Trace was fired due to Tcl_SetVar call in EntrySetValue. | |
788 | /* Trace was fired due to Tcl_SetVar2 call in EntrySetValue. | |
789 | 789 | * Don't do anything. |
790 | 790 | */ |
791 | 791 | return; |
1313 | 1313 | int *indexPtr) /* Return value */ |
1314 | 1314 | { |
1315 | 1315 | # define EntryWidth(e) (Tk_Width(entryPtr->core.tkwin)) /* Not Right */ |
1316 | int length; | |
1317 | const char *string = Tcl_GetStringFromObj(indexObj, &length); | |
1316 | const char *string = Tcl_GetString(indexObj); | |
1317 | size_t length = indexObj->length; | |
1318 | 1318 | |
1319 | 1319 | if (strncmp(string, "end", length) == 0) { |
1320 | 1320 | *indexPtr = entryPtr->entry.numChars; |
1643 | 1643 | void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) |
1644 | 1644 | { |
1645 | 1645 | Entry *entryPtr = recordPtr; |
1646 | if (objc == 3) { | |
1647 | int newFirst; | |
1648 | if (EntryIndex(interp, entryPtr, objv[2], &newFirst) != TCL_OK) { | |
1649 | return TCL_ERROR; | |
1650 | } | |
1651 | TtkScrollTo(entryPtr->entry.xscrollHandle, newFirst); | |
1652 | return TCL_OK; | |
1653 | } | |
1646 | 1654 | return TtkScrollviewCommand(interp, objc, objv, entryPtr->entry.xscrollHandle); |
1647 | 1655 | } |
1648 | 1656 |
35 | 35 | |
36 | 36 | /* TtkGetImageSpec -- |
37 | 37 | * Constructs a Ttk_ImageSpec * from a Tcl_Obj *. |
38 | * Result must be released using TtkFreeImageSpec. | |
38 | * Result must be released using TtkFreeImageSpec. | |
39 | 39 | * |
40 | 40 | * TODO: Need a variant of this that takes a user-specified ImageChanged proc |
41 | 41 | */ |
363 | 363 | } |
364 | 364 | #endif |
365 | 365 | |
366 | if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, | |
367 | "option", 0, &option) != TCL_OK) { | |
366 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, | |
367 | sizeof(char *), "option", 0, &option) != TCL_OK) { | |
368 | 368 | goto error; |
369 | 369 | } |
370 | 370 |
20 | 20 | Tcl_Interp *interp, Tcl_Obj *objPtr, int *statePtr) |
21 | 21 | { |
22 | 22 | *statePtr = TTK_BUTTON_DEFAULT_DISABLED; |
23 | return Tcl_GetIndexFromObj(interp, objPtr, | |
24 | ttkDefaultStrings, "default state", 0, statePtr); | |
23 | return Tcl_GetIndexFromObjStruct(interp, objPtr, ttkDefaultStrings, | |
24 | sizeof(char *), "default state", 0, statePtr); | |
25 | 25 | } |
26 | 26 | |
27 | 27 | /* |
37 | 37 | Tcl_Interp *interp, Tcl_Obj *objPtr, int *statePtr) |
38 | 38 | { |
39 | 39 | *statePtr = TTK_COMPOUND_NONE; |
40 | return Tcl_GetIndexFromObj(interp, objPtr, | |
41 | ttkCompoundStrings, "compound layout", 0, statePtr); | |
40 | return Tcl_GetIndexFromObjStruct(interp, objPtr, ttkCompoundStrings, | |
41 | sizeof(char *), "compound layout", 0, statePtr); | |
42 | 42 | } |
43 | 43 | |
44 | 44 | /* |
53 | 53 | Tcl_Interp *interp, Tcl_Obj *objPtr, int *resultPtr) |
54 | 54 | { |
55 | 55 | *resultPtr = TTK_ORIENT_HORIZONTAL; |
56 | return Tcl_GetIndexFromObj(interp, objPtr, | |
57 | ttkOrientStrings, "orientation", 0, resultPtr); | |
56 | return Tcl_GetIndexFromObjStruct(interp, objPtr, ttkOrientStrings, | |
57 | sizeof(char *), "orientation", 0, resultPtr); | |
58 | 58 | } |
59 | 59 | |
60 | 60 | /* |
64 | 64 | static const char *ttkStateStrings[] = { |
65 | 65 | "normal", "readonly", "disabled", "active", NULL |
66 | 66 | }; |
67 | enum { | |
67 | enum { | |
68 | 68 | TTK_COMPAT_STATE_NORMAL, |
69 | 69 | TTK_COMPAT_STATE_READONLY, |
70 | 70 | TTK_COMPAT_STATE_DISABLED, |
71 | 71 | TTK_COMPAT_STATE_ACTIVE |
72 | 72 | }; |
73 | 73 | |
74 | /* TtkCheckStateOption -- | |
74 | /* TtkCheckStateOption -- | |
75 | 75 | * Handle -state compatibility option. |
76 | 76 | * |
77 | * NOTE: setting -state disabled / -state enabled affects the | |
78 | * widget state, but the internal widget state does *not* affect | |
77 | * NOTE: setting -state disabled / -state enabled affects the | |
78 | * widget state, but the internal widget state does *not* affect | |
79 | 79 | * the value of the -state option. |
80 | 80 | * This option is present for compatibility only. |
81 | 81 | */ |
85 | 85 | unsigned all = TTK_STATE_DISABLED|TTK_STATE_READONLY|TTK_STATE_ACTIVE; |
86 | 86 | # define SETFLAGS(f) TtkWidgetChangeState(corePtr, f, all^f) |
87 | 87 | |
88 | (void)Tcl_GetIndexFromObj(NULL,objPtr,ttkStateStrings,"",0,&stateOption); | |
88 | (void)Tcl_GetIndexFromObjStruct(NULL, objPtr, ttkStateStrings, | |
89 | sizeof(char *), "", 0, &stateOption); | |
89 | 90 | switch (stateOption) { |
90 | 91 | case TTK_COMPAT_STATE_NORMAL: |
91 | 92 | default: |
173 | 174 | * type name dbName dbClass default objOffset intOffset flags clientData mask |
174 | 175 | */ |
175 | 176 | |
176 | /* public */ | |
177 | /* public */ | |
177 | 178 | Tk_OptionSpec ttkCoreOptionSpecs[] = |
178 | 179 | { |
179 | 180 | {TK_OPTION_CURSOR, "-cursor", "cursor", "Cursor", NULL, |
635 | 635 | if (optName[0] != '-') |
636 | 636 | break; |
637 | 637 | |
638 | if (Tcl_GetIndexFromObj( | |
639 | interp, objv[i], optStrings, "option", 0, &option) | |
638 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], optStrings, | |
639 | sizeof(char *), "option", 0, &option) | |
640 | 640 | != TCL_OK) |
641 | 641 | { |
642 | 642 | goto error; |
652 | 652 | |
653 | 653 | switch (option) { |
654 | 654 | case OP_SIDE: /* <<NOTE-PACKSIDE>> */ |
655 | if (Tcl_GetIndexFromObj(interp, objv[i], packSideStrings, | |
656 | "side", 0, &value) != TCL_OK) | |
655 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], packSideStrings, | |
656 | sizeof(char *), "side", 0, &value) != TCL_OK) | |
657 | 657 | { |
658 | 658 | goto error; |
659 | 659 | } |
236 | 236 | ckfree(mgr->slaves); |
237 | 237 | } |
238 | 238 | |
239 | Tk_CancelIdleCall(ManagerIdleProc, mgr); | |
239 | Tcl_CancelIdleCall(ManagerIdleProc, mgr); | |
240 | 240 | |
241 | 241 | ckfree(mgr); |
242 | 242 | } |
1057 | 1057 | |
1058 | 1058 | if ( Tcl_GetIntFromObj(interp, objv[objc-2], &x) != TCL_OK |
1059 | 1059 | || Tcl_GetIntFromObj(interp, objv[objc-1], &y) != TCL_OK |
1060 | || (objc == 5 && | |
1061 | Tcl_GetIndexFromObj(interp, objv[2], whatTable, "option", 0, &what) | |
1062 | != TCL_OK) | |
1060 | || (objc == 5 && Tcl_GetIndexFromObjStruct(interp, objv[2], whatTable, | |
1061 | sizeof(char *), "option", 0, &what) != TCL_OK) | |
1063 | 1062 | ) { |
1064 | 1063 | return TCL_ERROR; |
1065 | 1064 | } |
730 | 730 | |
731 | 731 | if ( Tcl_GetIntFromObj(interp, objv[objc-2], &x) != TCL_OK |
732 | 732 | || Tcl_GetIntFromObj(interp, objv[objc-1], &y) != TCL_OK |
733 | || (objc == 5 && | |
734 | Tcl_GetIndexFromObj(interp, objv[2], whatTable, "option", 0, &what) | |
735 | != TCL_OK) | |
733 | || (objc == 5 && Tcl_GetIndexFromObjStruct(interp, objv[2], whatTable, | |
734 | sizeof(char *), "option", 0, &what) != TCL_OK) | |
736 | 735 | ) { |
737 | 736 | return TCL_ERROR; |
738 | 737 | } |
6 | 6 | * |
7 | 7 | * Scrollable interface: |
8 | 8 | * |
9 | * + 'first' is controlled by [xy]view widget command | |
9 | * + 'first' is controlled by [xy]view widget command | |
10 | 10 | * and other scrolling commands like 'see'; |
11 | 11 | * + 'total' depends on widget contents; |
12 | 12 | * + 'last' depends on first, total, and widget size. |
15 | 15 | * |
16 | 16 | * 1. User adjusts scrollbar, scrollbar widget calls its -command |
17 | 17 | * 2. Scrollbar -command invokes the scrollee [xy]view widget method |
18 | * 3. TtkScrollviewCommand calls TtkScrollTo(), which updates | |
18 | * 3. TtkScrollviewCommand calls TtkScrollTo(), which updates | |
19 | 19 | * 'first' and schedules a redisplay. |
20 | * 4. Once the scrollee knows 'total' and 'last' (typically in | |
21 | * the LayoutProc), call TtkScrolled(h,first,last,total) to | |
20 | * 4. Once the scrollee knows 'total' and 'last' (typically in | |
21 | * the LayoutProc), call TtkScrolled(h,first,last,total) to | |
22 | 22 | * synchronize the scrollbar. |
23 | 23 | * 5. The scrollee -[xy]scrollcommand is called (in an idle callback) |
24 | 24 | * 6. Which calls the scrollbar 'set' method and redisplays the scrollbar. |
25 | 25 | * |
26 | * If the scrollee has internal scrolling (e.g., a 'see' method), | |
26 | * If the scrollee has internal scrolling (e.g., a 'see' method), | |
27 | 27 | * it should TtkScrollTo() directly (step 2). |
28 | 28 | * |
29 | 29 | * If the widget value changes, it should call TtkScrolled() (step 4). |
33 | 33 | * TtkScrollbarUpdateRequired, which will invoke step (5) (@@@ Fix this) |
34 | 34 | */ |
35 | 35 | |
36 | #include <tk.h> | |
36 | #include <tkInt.h> | |
37 | 37 | #include "ttkTheme.h" |
38 | 38 | #include "ttkWidget.h" |
39 | 39 | |
77 | 77 | char arg1[TCL_DOUBLE_SPACE + 2]; |
78 | 78 | char arg2[TCL_DOUBLE_SPACE + 2]; |
79 | 79 | int code; |
80 | Tcl_DString buf; | |
80 | 81 | |
81 | 82 | h->flags &= ~SCROLL_UPDATE_REQUIRED; |
82 | 83 | |
87 | 88 | arg1[0] = arg2[0] = ' '; |
88 | 89 | Tcl_PrintDouble(interp, (double)s->first / s->total, arg1+1); |
89 | 90 | Tcl_PrintDouble(interp, (double)s->last / s->total, arg2+1); |
91 | Tcl_DStringInit(&buf); | |
92 | Tcl_DStringAppend(&buf, s->scrollCmd, -1); | |
93 | Tcl_DStringAppend(&buf, arg1, -1); | |
94 | Tcl_DStringAppend(&buf, arg2, -1); | |
90 | 95 | |
91 | 96 | Tcl_Preserve(corePtr); |
92 | code = Tcl_VarEval(interp, s->scrollCmd, arg1, arg2, NULL); | |
97 | code = Tcl_EvalEx(interp, Tcl_DStringValue(&buf), -1, TCL_EVAL_GLOBAL); | |
98 | Tcl_DStringFree(&buf); | |
93 | 99 | if (WidgetDestroyed(corePtr)) { |
94 | 100 | Tcl_Release(corePtr); |
95 | 101 | return TCL_ERROR; |
123 | 129 | Tcl_Preserve((ClientData) interp); |
124 | 130 | code = UpdateScrollbar(interp, h); |
125 | 131 | if (code == TCL_ERROR && !Tcl_InterpDeleted(interp)) { |
126 | Tcl_BackgroundError(interp); | |
132 | Tcl_BackgroundException(interp, code); | |
127 | 133 | } |
128 | 134 | Tcl_Release((ClientData) interp); |
129 | 135 | } |
134 | 140 | void TtkScrolled(ScrollHandle h, int first, int last, int total) |
135 | 141 | { |
136 | 142 | Scrollable *s = h->scrollPtr; |
137 | ||
143 | ||
138 | 144 | /* Sanity-check inputs: |
139 | 145 | */ |
140 | 146 | if (total <= 0) { |
507 | 507 | static char ThemeChangedScript[] = "ttk::ThemeChanged"; |
508 | 508 | StylePackageData *pkgPtr = clientData; |
509 | 509 | |
510 | if (Tcl_GlobalEval(pkgPtr->interp, ThemeChangedScript) != TCL_OK) { | |
511 | Tcl_BackgroundError(pkgPtr->interp); | |
510 | int code = Tcl_EvalEx(pkgPtr->interp, ThemeChangedScript, -1, TCL_EVAL_GLOBAL); | |
511 | if (code != TCL_OK) { | |
512 | Tcl_BackgroundException(pkgPtr->interp, code); | |
512 | 513 | } |
513 | 514 | pkgPtr->themeChangePending = 0; |
514 | 515 | } |
1392 | 1393 | |
1393 | 1394 | for (i=4; i < objc; i +=2) { |
1394 | 1395 | int option; |
1395 | if (Tcl_GetIndexFromObj( | |
1396 | interp, objv[i], optStrings, "option", 0, &option) != TCL_OK) | |
1396 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], optStrings, | |
1397 | sizeof(char *), "option", 0, &option) != TCL_OK) | |
1397 | 1398 | { |
1398 | 1399 | return TCL_ERROR; |
1399 | 1400 | } |
1672 | 1673 | return Ttk_InvokeEnsemble(StyleEnsemble, 1, clientData,interp,objc,objv); |
1673 | 1674 | } |
1674 | 1675 | |
1675 | MODULE_SCOPE | |
1676 | MODULE_SCOPE | |
1676 | 1677 | int Ttk_InvokeEnsemble( /* Run an ensemble command */ |
1677 | 1678 | const Ttk_Ensemble *ensemble, int cmdIndex, |
1678 | 1679 | void *clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) |
53 | 53 | ckfree((ClientData)tracePtr); |
54 | 54 | return NULL; |
55 | 55 | } |
56 | Tcl_TraceVar(interp, name, | |
56 | Tcl_TraceVar2(interp, name, NULL, | |
57 | 57 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, |
58 | 58 | VarTraceProc, clientData); |
59 | 59 | tracePtr->callback(tracePtr->clientData, NULL); |
93 | 93 | h->clientData = clientData; |
94 | 94 | h->callback = callback; |
95 | 95 | |
96 | status = Tcl_TraceVar(interp, Tcl_GetString(varnameObj), | |
97 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
96 | status = Tcl_TraceVar2(interp, Tcl_GetString(varnameObj), | |
97 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
98 | 98 | VarTraceProc, (ClientData)h); |
99 | 99 | |
100 | 100 | if (status != TCL_OK) { |
149 | 149 | h->interp = NULL; |
150 | 150 | return; |
151 | 151 | } |
152 | Tcl_UntraceVar(h->interp, Tcl_GetString(h->varnameObj), | |
153 | TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
152 | Tcl_UntraceVar2(h->interp, Tcl_GetString(h->varnameObj), | |
153 | NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, | |
154 | 154 | VarTraceProc, (ClientData)h); |
155 | 155 | Tcl_DecrRefCount(h->varnameObj); |
156 | 156 | ckfree(h); |
339 | 339 | |
340 | 340 | for (i = 0; i < objc; ++i) { |
341 | 341 | int index; |
342 | if (TCL_OK != Tcl_GetIndexFromObj( | |
343 | interp, objv[i], table, "value", TCL_EXACT, &index)) | |
342 | if (TCL_OK != Tcl_GetIndexFromObjStruct(interp, objv[i], table, | |
343 | sizeof(char *), "value", TCL_EXACT, &index)) | |
344 | 344 | { |
345 | 345 | return TCL_ERROR; |
346 | 346 | } |
2286 | 2286 | return TCL_ERROR; |
2287 | 2287 | } |
2288 | 2288 | |
2289 | if ( Tcl_GetIndexFromObj(interp, objv[2], | |
2290 | submethodStrings, "command", TCL_EXACT, &submethod) != TCL_OK | |
2289 | if (Tcl_GetIndexFromObjStruct(interp, objv[2], submethodStrings, | |
2290 | sizeof(char *), "command", TCL_EXACT, &submethod) != TCL_OK | |
2291 | 2291 | || Tcl_GetIntFromObj(interp, objv[3], &x) != TCL_OK |
2292 | 2292 | || Tcl_GetIntFromObj(interp, objv[4], &y) != TCL_OK |
2293 | 2293 | ) { |
2954 | 2954 | return TCL_ERROR; |
2955 | 2955 | } |
2956 | 2956 | |
2957 | if (Tcl_GetIndexFromObj(interp, objv[2], selopStrings, | |
2958 | "selection operation", 0, &selop) != TCL_OK) { | |
2957 | if (Tcl_GetIndexFromObjStruct(interp, objv[2], selopStrings, | |
2958 | sizeof(char *), "selection operation", 0, &selop) != TCL_OK) { | |
2959 | 2959 | return TCL_ERROR; |
2960 | 2960 | } |
2961 | 2961 | |
3169 | 3169 | AddTag(items[i], tag); |
3170 | 3170 | } |
3171 | 3171 | |
3172 | TtkRedisplayWidget(&tv->core); | |
3173 | ||
3172 | 3174 | return TCL_OK; |
3173 | 3175 | } |
3174 | 3176 | |
3213 | 3215 | item=NextPreorder(item); |
3214 | 3216 | } |
3215 | 3217 | } |
3218 | ||
3219 | TtkRedisplayWidget(&tv->core); | |
3220 | ||
3216 | 3221 | return TCL_OK; |
3217 | 3222 | } |
3218 | 3223 |
197 | 197 | * Final cleanup for widget; called via Tcl_EventuallyFree(). |
198 | 198 | */ |
199 | 199 | static void |
200 | FreeWidget(char *memPtr) | |
200 | FreeWidget(void *memPtr) | |
201 | 201 | { |
202 | 202 | ckfree(memPtr); |
203 | 203 | } |
230 | 230 | /* NB: this can reenter the interpreter via a command traces */ |
231 | 231 | Tcl_DeleteCommandFromToken(corePtr->interp, cmd); |
232 | 232 | } |
233 | Tcl_EventuallyFree(corePtr, FreeWidget); | |
233 | Tcl_EventuallyFree(corePtr, (Tcl_FreeProc *) FreeWidget); | |
234 | 234 | } |
235 | 235 | |
236 | 236 | /* |
765 | 765 | } |
766 | 766 | if (objc == 5) { |
767 | 767 | /* $w identify element $x $y */ |
768 | if (Tcl_GetIndexFromObj(interp,objv[2],whatTable,"option",0,&what) | |
769 | != TCL_OK) | |
768 | if (Tcl_GetIndexFromObjStruct(interp, objv[2], whatTable, | |
769 | sizeof(char *), "option", 0, &what) != TCL_OK) | |
770 | 770 | { |
771 | 771 | return TCL_ERROR; |
772 | 772 | } |
106 | 106 | tk::CheckRadioInvoke %W |
107 | 107 | } |
108 | 108 | bind Radiobutton <space> { |
109 | tk::CheckRadioInvoke %W | |
110 | } | |
111 | bind Button <<Invoke>> { | |
112 | tk::ButtonInvoke %W | |
113 | } | |
114 | bind Checkbutton <<Invoke>> { | |
115 | tk::CheckRadioInvoke %W | |
116 | } | |
117 | bind Radiobutton <<Invoke>> { | |
109 | 118 | tk::CheckRadioInvoke %W |
110 | 119 | } |
111 | 120 |
139 | 139 | } |
140 | 140 | } |
141 | 141 | bind Listbox <space> { |
142 | tk::ListboxBeginSelect %W [%W index active] | |
143 | } | |
144 | bind Listbox <<Invoke>> { | |
142 | 145 | tk::ListboxBeginSelect %W [%W index active] |
143 | 146 | } |
144 | 147 | bind Listbox <Select> { |
105 | 105 | tk::MbPost %W |
106 | 106 | tk::MenuFirstEntry [%W cget -menu] |
107 | 107 | } |
108 | bind Menubutton <<Invoke>> { | |
109 | tk::MbPost %W | |
110 | tk::MenuFirstEntry [%W cget -menu] | |
111 | } | |
108 | 112 | |
109 | 113 | # Must set focus when mouse enters a menu, in order to allow |
110 | 114 | # mixed-mode processing using both the mouse and the keyboard. |
140 | 144 | tk::MenuInvoke %W 1 |
141 | 145 | } |
142 | 146 | bind Menu <space> { |
147 | tk::MenuInvoke %W 0 | |
148 | } | |
149 | bind Menu <<Invoke>> { | |
143 | 150 | tk::MenuInvoke %W 0 |
144 | 151 | } |
145 | 152 | bind Menu <Return> { |
359 | 359 | # Macintosh only bindings: |
360 | 360 | |
361 | 361 | if {[tk windowingsystem] eq "aqua"} { |
362 | bind Text <<Paste>> { | |
362 | bind Text <Control-v> { | |
363 | 363 | tk::TextScrollPages %W 1 |
364 | 364 | } |
365 | 365 |
12 | 12 | # Insist on running with compatible version of Tcl |
13 | 13 | package require Tcl 8.6 |
14 | 14 | # Verify that we have Tk binary and script components from the same release |
15 | package require -exact Tk 8.6.0 | |
15 | package require -exact Tk 8.6.1 | |
16 | 16 | |
17 | 17 | # Create a ::tk namespace |
18 | 18 | namespace eval ::tk { |
308 | 308 | set op add |
309 | 309 | } |
310 | 310 | |
311 | event $op <<Cut>> <Control-Key-w> <Shift-Key-Delete> | |
312 | event $op <<Copy>> <Meta-Key-w> <Control-Key-Insert> | |
313 | event $op <<Paste>> <Control-Key-y> <Shift-Key-Insert> | |
311 | event $op <<Cut>> <Control-Key-w> <Control-Lock-Key-W> <Shift-Key-Delete> | |
312 | event $op <<Copy>> <Meta-Key-w> <Meta-Lock-Key-W> <Control-Key-Insert> | |
313 | event $op <<Paste>> <Control-Key-y> <Control-Lock-Key-Y> <Shift-Key-Insert> | |
314 | 314 | event $op <<Undo>> <Control-underscore> |
315 | event $op <<PrevChar>> <Control-Key-b> <Control-Lock-Key-B> | |
316 | event $op <<NextChar>> <Control-Key-f> <Control-Lock-Key-F> | |
317 | event $op <<PrevLine>> <Control-Key-p> <Control-Lock-Key-P> | |
318 | event $op <<NextLine>> <Control-Key-n> <Control-Lock-Key-N> | |
319 | event $op <<LineStart>> <Control-Key-a> <Control-Lock-Key-A> | |
320 | event $op <<LineEnd>> <Control-Key-e> <Control-Lock-Key-E> | |
321 | event $op <<SelectPrevChar>> <Control-Key-B> <Control-Lock-Key-b> | |
322 | event $op <<SelectNextChar>> <Control-Key-F> <Control-Lock-Key-f> | |
323 | event $op <<SelectPrevLine>> <Control-Key-P> <Control-Lock-Key-p> | |
324 | event $op <<SelectNextLine>> <Control-Key-N> <Control-Lock-Key-n> | |
325 | event $op <<SelectLineStart>> <Control-Key-A> <Control-Lock-Key-a> | |
326 | event $op <<SelectLineEnd>> <Control-Key-E> <Control-Lock-Key-e> | |
315 | 327 | } |
316 | 328 | |
317 | 329 | #---------------------------------------------------------------------- |
366 | 378 | event add <<Undo>> <Control-Key-z> <Control-Lock-Key-Z> |
367 | 379 | event add <<Redo>> <Control-Key-Z> <Control-Lock-Key-z> |
368 | 380 | event add <<ContextMenu>> <Button-3> |
369 | if {[info exists tcl_platform(os)] && $tcl_platform(os) eq "Darwin"} { | |
370 | event add <<ContextMenu>> <Button-2> | |
371 | } | |
381 | # On Darwin/Aqua, buttons from left to right are 1,3,2. On Darwin/X11 with recent | |
382 | # XQuartz as the X server, they are 1,2,3; other X servers may differ. | |
372 | 383 | |
373 | 384 | event add <<SelectAll>> <Control-Key-slash> |
374 | 385 | event add <<SelectNone>> <Control-Key-backslash> |
375 | event add <<NextChar>> <Right> <Control-Key-f> <Control-Lock-Key-F> | |
376 | event add <<SelectNextChar>> <Shift-Right> <Control-Key-F> <Control-Lock-Key-f> | |
377 | event add <<PrevChar>> <Left> <Control-Key-b> <Control-Lock-Key-B> | |
378 | event add <<SelectPrevChar>> <Shift-Left> <Control-Key-B> <Control-Lock-Key-b> | |
386 | event add <<NextChar>> <Right> | |
387 | event add <<SelectNextChar>> <Shift-Right> | |
388 | event add <<PrevChar>> <Left> | |
389 | event add <<SelectPrevChar>> <Shift-Left> | |
379 | 390 | event add <<NextWord>> <Control-Right> |
380 | 391 | event add <<SelectNextWord>> <Control-Shift-Right> |
381 | 392 | event add <<PrevWord>> <Control-Left> |
382 | 393 | event add <<SelectPrevWord>> <Control-Shift-Left> |
383 | event add <<LineStart>> <Home> <Control-Key-a> <Control-Lock-Key-A> | |
384 | event add <<SelectLineStart>> <Shift-Home> <Control-Key-A> <Control-Lock-Key-a> | |
385 | event add <<LineEnd>> <End> <Control-Key-e> <Control-Lock-Key-E> | |
386 | event add <<SelectLineEnd>> <Shift-End> <Control-Key-E> <Control-Lock-Key-e> | |
387 | event add <<PrevLine>> <Up> <Control-Key-p> <Control-Lock-Key-P> | |
388 | event add <<NextLine>> <Down> <Control-Key-n> <Control-Lock-Key-N> | |
389 | event add <<SelectPrevLine>> <Shift-Up> <Control-Key-P> <Control-Lock-Key-p> | |
390 | event add <<SelectNextLine>> <Shift-Down> <Control-Key-N> <Control-Lock-Key-n> | |
394 | event add <<LineStart>> <Home> | |
395 | event add <<SelectLineStart>> <Shift-Home> | |
396 | event add <<LineEnd>> <End> | |
397 | event add <<SelectLineEnd>> <Shift-End> | |
398 | event add <<PrevLine>> <Up> | |
399 | event add <<NextLine>> <Down> | |
400 | event add <<SelectPrevLine>> <Shift-Up> | |
401 | event add <<SelectNextLine>> <Shift-Down> | |
391 | 402 | event add <<PrevPara>> <Control-Up> |
392 | 403 | event add <<NextPara>> <Control-Down> |
393 | 404 | event add <<SelectPrevPara>> <Control-Shift-Up> |
394 | event add <<SelectPrevPara>> <Control-Shift-Down> | |
405 | event add <<SelectNextPara>> <Control-Shift-Down> | |
395 | 406 | event add <<ToggleSelection>> <Control-ButtonPress-1> |
396 | 407 | |
397 | 408 | # Some OS's define a goofy (as in, not <Shift-Tab>) keysym that is |
440 | 451 | event add <<PrevPara>> <Control-Up> |
441 | 452 | event add <<NextPara>> <Control-Down> |
442 | 453 | event add <<SelectPrevPara>> <Control-Shift-Up> |
443 | event add <<SelectPrevPara>> <Control-Shift-Down> | |
454 | event add <<SelectNextPara>> <Control-Shift-Down> | |
444 | 455 | event add <<ToggleSelection>> <Control-ButtonPress-1> |
445 | 456 | } |
446 | 457 | "aqua" { |
447 | event add <<Cut>> <Command-Key-x> <Key-F2> <Control-Lock-Key-X> | |
448 | event add <<Copy>> <Command-Key-c> <Key-F3> <Control-Lock-Key-C> | |
449 | event add <<Paste>> <Command-Key-v> <Key-F4> <Control-Lock-Key-V> | |
450 | event add <<PasteSelection>> <ButtonRelease-2> | |
458 | event add <<Cut>> <Command-Key-x> <Key-F2> <Command-Lock-Key-X> | |
459 | event add <<Copy>> <Command-Key-c> <Key-F3> <Command-Lock-Key-C> | |
460 | event add <<Paste>> <Command-Key-v> <Key-F4> <Command-Lock-Key-V> | |
461 | event add <<PasteSelection>> <ButtonRelease-3> | |
451 | 462 | event add <<Clear>> <Clear> |
452 | 463 | event add <<ContextMenu>> <Button-2> |
453 | 464 | |
455 | 466 | # See http://support.apple.com/kb/HT1343 |
456 | 467 | event add <<SelectAll>> <Command-Key-a> |
457 | 468 | event add <<SelectNone>> <Option-Command-Key-a> |
458 | event add <<Undo>> <Command-Key-z> <Control-Lock-Key-Z> | |
459 | event add <<Redo>> <Command-Key-Z> <Control-Lock-Key-z> | |
469 | event add <<Undo>> <Command-Key-z> <Command-Lock-Key-Z> | |
470 | event add <<Redo>> <Shift-Command-Key-z> <Shift-Command-Lock-Key-z> | |
460 | 471 | event add <<NextChar>> <Right> <Control-Key-f> <Control-Lock-Key-F> |
461 | event add <<SelectNextChar>> <Shift-Right> <Control-Key-F> <Control-Lock-Key-f> | |
472 | event add <<SelectNextChar>> <Shift-Right> <Shift-Control-Key-F> <Shift-Control-Lock-Key-F> | |
462 | 473 | event add <<PrevChar>> <Left> <Control-Key-b> <Control-Lock-Key-B> |
463 | event add <<SelectPrevChar>> <Shift-Left> <Control-Key-B> <Control-Lock-Key-b> | |
474 | event add <<SelectPrevChar>> <Shift-Left> <Shift-Control-Key-B> <Shift-Control-Lock-Key-B> | |
464 | 475 | event add <<NextWord>> <Option-Right> |
465 | 476 | event add <<SelectNextWord>> <Shift-Option-Right> |
466 | 477 | event add <<PrevWord>> <Option-Left> |
467 | 478 | event add <<SelectPrevWord>> <Shift-Option-Left> |
468 | 479 | event add <<LineStart>> <Home> <Command-Left> <Control-Key-a> <Control-Lock-Key-A> |
469 | event add <<SelectLineStart>> <Shift-Home> <Shift-Command-Left> <Control-Key-A> <Control-Lock-Key-a> | |
480 | event add <<SelectLineStart>> <Shift-Home> <Shift-Command-Left> <Shift-Control-Key-A> <Shift-Control-Lock-Key-A> | |
470 | 481 | event add <<LineEnd>> <End> <Command-Right> <Control-Key-e> <Control-Lock-Key-E> |
471 | event add <<SelectLineEnd>> <Shift-End> <Shift-Command-Right> <Control-Key-E> <Control-Lock-Key-e> | |
482 | event add <<SelectLineEnd>> <Shift-End> <Shift-Command-Right> <Shift-Control-Key-E> <Shift-Control-Lock-Key-E> | |
472 | 483 | event add <<PrevLine>> <Up> <Control-Key-p> <Control-Lock-Key-P> |
473 | event add <<SelectPrevLine>> <Shift-Up> <Control-Key-P> <Control-Lock-Key-p> | |
484 | event add <<SelectPrevLine>> <Shift-Up> <Shift-Control-Key-P> <Shift-Control-Lock-Key-P> | |
474 | 485 | event add <<NextLine>> <Down> <Control-Key-n> <Control-Lock-Key-N> |
475 | event add <<SelectNextLine>> <Shift-Down> <Control-Key-N> <Control-Lock-Key-n> | |
486 | event add <<SelectNextLine>> <Shift-Down> <Shift-Control-Key-N> <Shift-Control-Lock-Key-N> | |
476 | 487 | # Not official, but logical extensions of above. Also derived from |
477 | 488 | # bindings present in MS Word on OSX. |
478 | 489 | event add <<PrevPara>> <Option-Up> |
479 | 490 | event add <<NextPara>> <Option-Down> |
480 | 491 | event add <<SelectPrevPara>> <Shift-Option-Up> |
481 | event add <<SelectPrevPara>> <Shift-Option-Down> | |
492 | event add <<SelectNextPara>> <Shift-Option-Down> | |
482 | 493 | event add <<ToggleSelection>> <Command-ButtonPress-1> |
483 | 494 | } |
484 | 495 | } |
140 | 140 | |
141 | 141 | ## Additional emacs-like bindings: |
142 | 142 | # |
143 | bind TEntry <Control-Key-b> { ttk::entry::Move %W prevchar } | |
144 | bind TEntry <Control-Key-d> { ttk::entry::Delete %W } | |
145 | bind TEntry <Control-Key-f> { ttk::entry::Move %W nextchar } | |
143 | bind TEntry <Control-Key-d> { ttk::entry::Delete %W } | |
146 | 144 | bind TEntry <Control-Key-h> { ttk::entry::Backspace %W } |
147 | 145 | bind TEntry <Control-Key-k> { %W delete insert end } |
148 | 146 |
17 | 17 | return |
18 | 18 | } |
19 | 19 | |
20 | $pb step $stepsize | |
21 | ||
22 | 20 | set Timers($pb) [after $steptime \ |
23 | 21 | [list ttk::progressbar::Autoincrement $pb $steptime $stepsize] ] |
22 | ||
23 | $pb step $stepsize | |
24 | 24 | } |
25 | 25 | |
26 | 26 | # ttk::progressbar::start -- |
41 | 41 | switch -glob -- [$w identify $x $y] { |
42 | 42 | *track - |
43 | 43 | *trough { |
44 | set inc [expr {([$w get $x $y] <= [$w get]) ? -1 : 1}] | |
44 | set inc [expr {([$w get $x $y] <= [$w get]) ^ ([$w cget -from] > [$w cget -to]) ? -1 : 1}] | |
45 | 45 | ttk::Repeatedly Increment $w $inc |
46 | 46 | } |
47 | 47 | *slider { |
86 | 86 | |
87 | 87 | proc ttk::scale::Increment {w delta} { |
88 | 88 | if {![winfo exists $w]} return |
89 | if {([$w cget -from] > [$w cget -to])} { | |
90 | set delta [expr {-$delta}] | |
91 | } | |
89 | 92 | $w set [expr {[$w get] + $delta}] |
90 | 93 | } |
18 | 18 | http://wiki.tcl.tk/_/ref?N=3753 |
19 | 19 | http://wiki.tcl.tk/_/ref?N=8361 |
20 | 20 | |
21 | - Please report bugs with Tcl or Tk on Mac OS X to the sourceforge bug trackers: | |
22 | http://tcl.sourceforge.net/ | |
21 | - Please report bugs with Tk on Mac OS X to the tracker: | |
22 | http://core.tcl.tk/tk/reportlist | |
23 | 23 | |
24 | 24 | 2. Using Tcl/Tk on Mac OS X |
25 | 25 | --------------------------- |
307 | 307 | # include <unistd.h> |
308 | 308 | #endif" |
309 | 309 | |
310 | ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS TCL_VERSION TCL_PATCH_LEVEL TCL_BIN_DIR TCL_SRC_DIR TCL_LIB_FILE TCL_LIB_FLAG TCL_LIB_SPEC TCL_STUB_LIB_FILE TCL_STUB_LIB_FLAG TCL_STUB_LIB_SPEC TCLSH_PROG BUILD_TCLSH MAN_FLAGS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP TCL_THREADS RANLIB ac_ct_RANLIB AR ac_ct_AR LIBOBJS TCL_LIBS DL_LIBS DL_OBJS PLAT_OBJS PLAT_SRCS LDAIX_SRC CFLAGS_DEBUG CFLAGS_OPTIMIZE CFLAGS_WARNING LDFLAGS_DEBUG LDFLAGS_OPTIMIZE CC_SEARCH_FLAGS LD_SEARCH_FLAGS STLIB_LD SHLIB_LD TCL_SHLIB_LD_EXTRAS TK_SHLIB_LD_EXTRAS SHLIB_LD_LIBS SHLIB_CFLAGS SHLIB_SUFFIX MAKE_LIB MAKE_STUB_LIB INSTALL_LIB DLL_INSTALL_DIR INSTALL_STUB_LIB CFLAGS_DEFAULT LDFLAGS_DEFAULT XFT_CFLAGS XFT_LIBS UNIX_FONT_OBJS TK_VERSION TK_MAJOR_VERSION TK_MINOR_VERSION TK_PATCH_LEVEL TK_YEAR TK_LIB_FILE TK_LIB_FLAG TK_LIB_SPEC TK_STUB_LIB_FILE TK_STUB_LIB_FLAG TK_STUB_LIB_SPEC TK_STUB_LIB_PATH TK_INCLUDE_SPEC TK_BUILD_STUB_LIB_SPEC TK_BUILD_STUB_LIB_PATH TK_SRC_DIR TK_SHARED_BUILD LD_LIBRARY_PATH_VAR TK_BUILD_LIB_SPEC WISH_BUILD_LIB_SPEC TCL_STUB_FLAGS XINCLUDES XLIBSW LOCALES TK_WINDOWINGSYSTEM TK_PKG_DIR TK_LIBRARY LIB_RUNTIME_DIR PRIVATE_INCLUDE_DIR HTML_DIR EXTRA_CC_SWITCHES EXTRA_APP_CC_SWITCHES EXTRA_INSTALL EXTRA_INSTALL_BINARIES EXTRA_BUILD_HTML EXTRA_WISH_LIBS EXTRA_AQUA_OBJS EXTRA_AQUA_SRCS CFBUNDLELOCALIZATIONS MACOSX_SRC_DIR TK_RSRC_FILE WISH_RSRC_FILE LIB_RSRC_FILE APP_RSRC_FILE REZ REZ_FLAGS LTLIBOBJS' | |
310 | ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS TCL_VERSION TCL_PATCH_LEVEL TCL_BIN_DIR TCL_SRC_DIR TCL_LIB_FILE TCL_LIB_FLAG TCL_LIB_SPEC TCL_STUB_LIB_FILE TCL_STUB_LIB_FLAG TCL_STUB_LIB_SPEC TCLSH_PROG BUILD_TCLSH MAN_FLAGS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP TCL_THREADS RANLIB ac_ct_RANLIB AR ac_ct_AR LIBOBJS TCL_LIBS DL_LIBS DL_OBJS PLAT_OBJS PLAT_SRCS LDAIX_SRC CFLAGS_DEBUG CFLAGS_OPTIMIZE CFLAGS_WARNING LDFLAGS_DEBUG LDFLAGS_OPTIMIZE CC_SEARCH_FLAGS LD_SEARCH_FLAGS STLIB_LD SHLIB_LD TCL_SHLIB_LD_EXTRAS TK_SHLIB_LD_EXTRAS SHLIB_LD_LIBS SHLIB_CFLAGS SHLIB_SUFFIX MAKE_LIB MAKE_STUB_LIB INSTALL_LIB DLL_INSTALL_DIR INSTALL_STUB_LIB CFLAGS_DEFAULT LDFLAGS_DEFAULT XFT_CFLAGS XFT_LIBS UNIX_FONT_OBJS TK_VERSION TK_MAJOR_VERSION TK_MINOR_VERSION TK_PATCH_LEVEL TK_YEAR TK_LIB_FILE TK_LIB_FLAG TK_LIB_SPEC TK_STUB_LIB_FILE TK_STUB_LIB_FLAG TK_STUB_LIB_SPEC TK_STUB_LIB_PATH TK_INCLUDE_SPEC TK_BUILD_STUB_LIB_SPEC TK_BUILD_STUB_LIB_PATH TK_SRC_DIR TK_SHARED_BUILD LD_LIBRARY_PATH_VAR TK_BUILD_LIB_SPEC TCL_STUB_FLAGS XINCLUDES XLIBSW LOCALES TK_WINDOWINGSYSTEM TK_PKG_DIR TK_LIBRARY LIB_RUNTIME_DIR PRIVATE_INCLUDE_DIR HTML_DIR EXTRA_CC_SWITCHES EXTRA_APP_CC_SWITCHES EXTRA_INSTALL EXTRA_INSTALL_BINARIES EXTRA_BUILD_HTML EXTRA_WISH_LIBS CFBUNDLELOCALIZATIONS TK_RSRC_FILE WISH_RSRC_FILE LIB_RSRC_FILE APP_RSRC_FILE REZ REZ_FLAGS LTLIBOBJS' | |
311 | 311 | ac_subst_files='' |
312 | 312 | |
313 | 313 | # Initialize some variables set by options. |
860 | 860 | --enable-load allow dynamic loading and "load" command (default: |
861 | 861 | on) |
862 | 862 | --enable-symbols build with debugging symbols (default: off) |
863 | --enable-aqua=yes|carbon|no | |
864 | use Aqua windowingsystem on Mac OS X (default: no) | |
863 | --enable-aqua=yes|no use Aqua windowingsystem on Mac OS X (default: no) | |
864 | --enable-xft use freetype/fontconfig/xft (default: on) | |
865 | 865 | --enable-xss use XScreenSaver for activity timer (default: on) |
866 | --enable-xft use freetype/fontconfig/xft (default: on) | |
867 | 866 | --enable-framework package shared libraries in MacOSX frameworks |
868 | 867 | (default: off) |
869 | 868 | |
1346 | 1345 | TK_VERSION=8.6 |
1347 | 1346 | TK_MAJOR_VERSION=8 |
1348 | 1347 | TK_MINOR_VERSION=6 |
1349 | TK_PATCH_LEVEL=".0" | |
1348 | TK_PATCH_LEVEL=".1" | |
1350 | 1349 | VERSION=${TK_VERSION} |
1351 | 1350 | LOCALES="cs da de el en en_gb eo es fr hu it nl pl pt ru sv" |
1352 | 1351 | |
4043 | 4042 | # Does the pthread-implementation provide |
4044 | 4043 | # 'pthread_attr_setstacksize' ? |
4045 | 4044 | |
4046 | for ac_func in pthread_attr_setstacksize | |
4045 | ac_saved_libs=$LIBS | |
4046 | LIBS="$LIBS $THREADS_LIBS" | |
4047 | ||
4048 | ||
4049 | for ac_func in pthread_attr_setstacksize pthread_atfork | |
4047 | 4050 | do |
4048 | 4051 | as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` |
4049 | 4052 | echo "$as_me:$LINENO: checking for $ac_func" >&5 |
4144 | 4147 | fi |
4145 | 4148 | done |
4146 | 4149 | |
4150 | LIBS=$ac_saved_libs | |
4147 | 4151 | else |
4148 | 4152 | TCL_THREADS=0 |
4149 | 4153 | fi |
4467 | 4471 | |
4468 | 4472 | cat >>confdefs.h <<\_ACEOF |
4469 | 4473 | #define MODULE_SCOPE extern __attribute__((__visibility__("hidden"))) |
4474 | _ACEOF | |
4475 | ||
4476 | ||
4477 | cat >>confdefs.h <<\_ACEOF | |
4478 | #define HAVE_HIDDEN 1 | |
4470 | 4479 | _ACEOF |
4471 | 4480 | |
4472 | 4481 | |
4916 | 4925 | SHLIB_CFLAGS="" |
4917 | 4926 | SHLIB_LD='${CC} -shared' |
4918 | 4927 | SHLIB_SUFFIX=".dll" |
4919 | DL_OBJS="tclLoadDl.o tclWinError.o" | |
4928 | DL_OBJS="tclLoadDl.o" | |
4929 | PLAT_OBJS='${CYGWIN_OBJS}' | |
4930 | PLAT_SRCS='${CYGWIN_SRCS}' | |
4920 | 4931 | DL_LIBS="-ldl" |
4921 | 4932 | CC_SEARCH_FLAGS="" |
4922 | 4933 | LD_SEARCH_FLAGS="" |
5430 | 5441 | fi |
5431 | 5442 | |
5432 | 5443 | ;; |
5433 | Linux*) | |
5444 | Linux*|GNU*|NetBSD-Debian) | |
5434 | 5445 | SHLIB_CFLAGS="-fPIC" |
5435 | 5446 | SHLIB_SUFFIX=".so" |
5436 | 5447 | |
5533 | 5544 | |
5534 | 5545 | if test x"${USE_COMPAT}" != x; then |
5535 | 5546 | CFLAGS="$CFLAGS -fno-inline" |
5536 | fi | |
5537 | ||
5538 | ;; | |
5539 | GNU*) | |
5540 | SHLIB_CFLAGS="-fPIC" | |
5541 | SHLIB_SUFFIX=".so" | |
5542 | ||
5543 | SHLIB_LD='${CC} -shared' | |
5544 | DL_OBJS="" | |
5545 | DL_LIBS="-ldl" | |
5546 | LDFLAGS="$LDFLAGS -Wl,--export-dynamic" | |
5547 | CC_SEARCH_FLAGS="" | |
5548 | LD_SEARCH_FLAGS="" | |
5549 | if test "`uname -m`" = "alpha"; then | |
5550 | CFLAGS="$CFLAGS -mieee" | |
5551 | 5547 | fi |
5552 | 5548 | |
5553 | 5549 | ;; |
5587 | 5583 | CC_SEARCH_FLAGS="" |
5588 | 5584 | LD_SEARCH_FLAGS="" |
5589 | 5585 | ;; |
5590 | NetBSD-1.*|FreeBSD-[1-2].*) | |
5591 | SHLIB_CFLAGS="-fPIC" | |
5592 | SHLIB_LD="ld -Bshareable -x" | |
5593 | SHLIB_SUFFIX=".so" | |
5594 | DL_OBJS="tclLoadDl.o" | |
5595 | DL_LIBS="" | |
5596 | if test $doRpath = yes; then | |
5597 | ||
5598 | CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' | |
5599 | LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' | |
5600 | fi | |
5601 | ||
5602 | echo "$as_me:$LINENO: checking for ELF" >&5 | |
5603 | echo $ECHO_N "checking for ELF... $ECHO_C" >&6 | |
5604 | if test "${tcl_cv_ld_elf+set}" = set; then | |
5605 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
5606 | else | |
5607 | ||
5608 | cat >conftest.$ac_ext <<_ACEOF | |
5609 | /* confdefs.h. */ | |
5610 | _ACEOF | |
5611 | cat confdefs.h >>conftest.$ac_ext | |
5612 | cat >>conftest.$ac_ext <<_ACEOF | |
5613 | /* end confdefs.h. */ | |
5614 | ||
5615 | #ifdef __ELF__ | |
5616 | yes | |
5617 | #endif | |
5618 | ||
5619 | _ACEOF | |
5620 | if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | | |
5621 | $EGREP "yes" >/dev/null 2>&1; then | |
5622 | tcl_cv_ld_elf=yes | |
5623 | else | |
5624 | tcl_cv_ld_elf=no | |
5625 | fi | |
5626 | rm -f conftest* | |
5627 | ||
5628 | fi | |
5629 | echo "$as_me:$LINENO: result: $tcl_cv_ld_elf" >&5 | |
5630 | echo "${ECHO_T}$tcl_cv_ld_elf" >&6 | |
5631 | if test $tcl_cv_ld_elf = yes; then | |
5632 | ||
5633 | SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' | |
5634 | ||
5635 | else | |
5636 | ||
5637 | SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' | |
5638 | ||
5639 | fi | |
5640 | ||
5641 | ||
5642 | # Ancient FreeBSD doesn't handle version numbers with dots. | |
5643 | ||
5644 | UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' | |
5645 | TCL_LIB_VERSIONS_OK=nodots | |
5646 | ;; | |
5647 | 5586 | OpenBSD-*) |
5648 | 5587 | arch=`arch -s` |
5649 | 5588 | case "$arch" in |
5650 | m88k|vax) | |
5589 | vax) | |
5651 | 5590 | # Equivalent using configure option --disable-load |
5652 | 5591 | # Step 4 will set the necessary variables |
5653 | 5592 | DL_OBJS="" |
5654 | 5593 | SHLIB_LD_LIBS="" |
5594 | LDFLAGS="" | |
5655 | 5595 | ;; |
5656 | 5596 | *) |
5657 | 5597 | SHLIB_CFLAGS="-fPIC" |
5666 | 5606 | |
5667 | 5607 | LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} |
5668 | 5608 | SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' |
5609 | LDFLAGS="-Wl,-export-dynamic" | |
5669 | 5610 | ;; |
5670 | 5611 | esac |
5671 | 5612 | case "$arch" in |
5672 | m88k|vax) | |
5613 | vax) | |
5673 | 5614 | CFLAGS_OPTIMIZE="-O1" |
5674 | 5615 | ;; |
5675 | 5616 | sh) |
5679 | 5620 | CFLAGS_OPTIMIZE="-O2" |
5680 | 5621 | ;; |
5681 | 5622 | esac |
5682 | echo "$as_me:$LINENO: checking for ELF" >&5 | |
5683 | echo $ECHO_N "checking for ELF... $ECHO_C" >&6 | |
5684 | if test "${tcl_cv_ld_elf+set}" = set; then | |
5685 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
5686 | else | |
5687 | ||
5688 | cat >conftest.$ac_ext <<_ACEOF | |
5689 | /* confdefs.h. */ | |
5690 | _ACEOF | |
5691 | cat confdefs.h >>conftest.$ac_ext | |
5692 | cat >>conftest.$ac_ext <<_ACEOF | |
5693 | /* end confdefs.h. */ | |
5694 | ||
5695 | #ifdef __ELF__ | |
5696 | yes | |
5697 | #endif | |
5698 | ||
5699 | _ACEOF | |
5700 | if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | | |
5701 | $EGREP "yes" >/dev/null 2>&1; then | |
5702 | tcl_cv_ld_elf=yes | |
5703 | else | |
5704 | tcl_cv_ld_elf=no | |
5705 | fi | |
5706 | rm -f conftest* | |
5707 | ||
5708 | fi | |
5709 | echo "$as_me:$LINENO: result: $tcl_cv_ld_elf" >&5 | |
5710 | echo "${ECHO_T}$tcl_cv_ld_elf" >&6 | |
5711 | if test $tcl_cv_ld_elf = yes; then | |
5712 | ||
5713 | LDFLAGS=-Wl,-export-dynamic | |
5714 | ||
5715 | else | |
5716 | LDFLAGS="" | |
5717 | fi | |
5718 | ||
5719 | 5623 | if test "${TCL_THREADS}" = "1"; then |
5720 | 5624 | |
5721 | 5625 | # On OpenBSD: Compile with -pthread |
5729 | 5633 | UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' |
5730 | 5634 | TCL_LIB_VERSIONS_OK=nodots |
5731 | 5635 | ;; |
5732 | NetBSD-*|FreeBSD-[3-4].*) | |
5733 | # FreeBSD 3.* and greater have ELF. | |
5734 | # NetBSD 2.* has ELF and can use 'cc -shared' to build shared libs | |
5636 | NetBSD-*) | |
5637 | # NetBSD has ELF and can use 'cc -shared' to build shared libs | |
5735 | 5638 | SHLIB_CFLAGS="-fPIC" |
5736 | 5639 | SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' |
5737 | 5640 | SHLIB_SUFFIX=".so" |
5753 | 5656 | |
5754 | 5657 | fi |
5755 | 5658 | |
5756 | case $system in | |
5757 | FreeBSD-3.*) | |
5758 | # FreeBSD-3 doesn't handle version numbers with dots. | |
5759 | UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' | |
5760 | SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' | |
5761 | TCL_LIB_VERSIONS_OK=nodots | |
5762 | ;; | |
5763 | esac | |
5764 | 5659 | ;; |
5765 | 5660 | FreeBSD-*) |
5766 | 5661 | # This configuration from FreeBSD Ports. |
5767 | 5662 | SHLIB_CFLAGS="-fPIC" |
5768 | 5663 | SHLIB_LD="${CC} -shared" |
5769 | TCL_SHLIB_LD_EXTRAS="-soname \$@" | |
5664 | TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$@" | |
5770 | 5665 | SHLIB_SUFFIX=".so" |
5771 | 5666 | DL_OBJS="tclLoadDl.o" |
5772 | 5667 | DL_LIBS="" |
5774 | 5669 | if test $doRpath = yes; then |
5775 | 5670 | |
5776 | 5671 | CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' |
5777 | LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' | |
5672 | LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' | |
5778 | 5673 | fi |
5779 | 5674 | |
5780 | 5675 | if test "${TCL_THREADS}" = "1"; then |
6983 | 6878 | _ACEOF |
6984 | 6879 | |
6985 | 6880 | |
6986 | cat >>confdefs.h <<\_ACEOF | |
6987 | #define NO_VIZ | |
6988 | _ACEOF | |
6989 | ||
6990 | ||
6991 | 6881 | fi |
6992 | 6882 | |
6993 | 6883 | |
7700 | 7590 | cat >>conftest.$ac_ext <<_ACEOF |
7701 | 7591 | /* end confdefs.h. */ |
7702 | 7592 | #include <sys/types.h> |
7703 | #include <sys/dirent.h> | |
7593 | #include <dirent.h> | |
7704 | 7594 | int |
7705 | 7595 | main () |
7706 | 7596 | { |
9340 | 9230 | # On Mac OS X, we can build either with X11 or with Aqua |
9341 | 9231 | #-------------------------------------------------------------------- |
9342 | 9232 | |
9343 | MACOSX_SRC_DIR=macosx | |
9344 | 9233 | if test "`uname -s`" = "Darwin" ; then |
9345 | 9234 | echo "$as_me:$LINENO: checking whether to use Aqua" >&5 |
9346 | 9235 | echo $ECHO_N "checking whether to use Aqua... $ECHO_C" >&6 |
9353 | 9242 | fi; |
9354 | 9243 | if test $tk_aqua = yes -o $tk_aqua = cocoa; then |
9355 | 9244 | tk_aqua=yes |
9245 | if test $tcl_corefoundation = no; then | |
9246 | { echo "$as_me:$LINENO: WARNING: Aqua can only be used when CoreFoundation is available" >&5 | |
9247 | echo "$as_me: WARNING: Aqua can only be used when CoreFoundation is available" >&2;} | |
9248 | tk_aqua=no | |
9249 | fi | |
9356 | 9250 | if test ! -d /System/Library/Frameworks/Cocoa.framework; then |
9357 | 9251 | { echo "$as_me:$LINENO: WARNING: Aqua can only be used when Cocoa is available" >&5 |
9358 | 9252 | echo "$as_me: WARNING: Aqua can only be used when Cocoa is available" >&2;} |
9363 | 9257 | echo "$as_me: WARNING: Aqua requires Mac OS X 10.5 or later" >&2;} |
9364 | 9258 | tk_aqua=no |
9365 | 9259 | fi |
9366 | elif test $tk_aqua = carbon; then | |
9367 | if test ! -d /System/Library/Frameworks/Carbon.framework; then | |
9368 | { echo "$as_me:$LINENO: WARNING: Aqua can only be used when Carbon is available" >&5 | |
9369 | echo "$as_me: WARNING: Aqua can only be used when Carbon is available" >&2;} | |
9370 | tk_aqua=no | |
9371 | fi | |
9372 | if test "`uname -r | awk -F. '{print $1}'`" -lt 6; then | |
9373 | { echo "$as_me:$LINENO: WARNING: Aqua requires Mac OS X 10.2 or later" >&5 | |
9374 | echo "$as_me: WARNING: Aqua requires Mac OS X 10.2 or later" >&2;} | |
9375 | tk_aqua=no | |
9376 | fi | |
9377 | else | |
9378 | tk_aqua=no | |
9379 | 9260 | fi |
9380 | if test $tk_aqua != no -a $tcl_corefoundation = no; then | |
9381 | { echo "$as_me:$LINENO: WARNING: Aqua can only be used when CoreFoundation is available" >&5 | |
9382 | echo "$as_me: WARNING: Aqua can only be used when CoreFoundation is available" >&2;} | |
9383 | tk_aqua=no | |
9384 | fi | |
9385 | if test $tk_aqua = carbon; then | |
9386 | MACOSX_SRC_DIR=carbon | |
9387 | echo "$as_me:$LINENO: result: yes (deprecated legacy Carbon implementation)" >&5 | |
9388 | echo "${ECHO_T}yes (deprecated legacy Carbon implementation)" >&6 | |
9389 | else | |
9390 | echo "$as_me:$LINENO: result: $tk_aqua" >&5 | |
9261 | echo "$as_me:$LINENO: result: $tk_aqua" >&5 | |
9391 | 9262 | echo "${ECHO_T}$tk_aqua" >&6 |
9392 | fi | |
9393 | 9263 | if test "$fat_32_64" = yes; then |
9394 | 9264 | if test $tk_aqua = no; then |
9395 | 9265 | echo "$as_me:$LINENO: checking for 64-bit X11" >&5 |
9458 | 9328 | fi |
9459 | 9329 | # remove 64-bit arch flags from CFLAGS et al. for combined 32 & 64 bit |
9460 | 9330 | # fat builds if configuration does not support 64-bit. |
9461 | if test $tk_aqua = carbon -o "$tcl_cv_lib_x11_64" = no; then | |
9331 | if test "$tcl_cv_lib_x11_64" = no; then | |
9462 | 9332 | { echo "$as_me:$LINENO: Removing 64-bit architectures from compiler & linker flags" >&5 |
9463 | 9333 | echo "$as_me: Removing 64-bit architectures from compiler & linker flags" >&6;} |
9464 | 9334 | for v in CFLAGS CPPFLAGS LDFLAGS; do |
9829 | 9699 | tk_aqua=no |
9830 | 9700 | fi |
9831 | 9701 | |
9832 | if test $tk_aqua != no; then | |
9833 | if test $tk_aqua = yes; then | |
9834 | LIBS="$LIBS -framework Cocoa -framework Carbon -framework IOKit" | |
9835 | EXTRA_CC_SWITCHES='-std=gnu99 -x objective-c -fobjc-gc' | |
9836 | else | |
9837 | LIBS="$LIBS -framework Carbon -framework IOKit" | |
9838 | CFLAGS="$CFLAGS -fpascal-strings" | |
9839 | fi | |
9702 | if test $tk_aqua = yes; then | |
9840 | 9703 | |
9841 | 9704 | cat >>confdefs.h <<\_ACEOF |
9842 | 9705 | #define MAC_OSX_TK 1 |
9843 | 9706 | _ACEOF |
9844 | 9707 | |
9708 | LIBS="$LIBS -framework Cocoa -framework Carbon -framework IOKit" | |
9709 | EXTRA_CC_SWITCHES='-std=gnu99 -x objective-c -fobjc-gc' | |
9845 | 9710 | TK_WINDOWINGSYSTEM=AQUA |
9846 | 9711 | if test -n "${enable_symbols}" -a "${enable_symbols}" != no; then |
9847 | 9712 | |
10104 | 9969 | cat confdefs.h >>conftest.$ac_ext |
10105 | 9970 | cat >>conftest.$ac_ext <<_ACEOF |
10106 | 9971 | /* end confdefs.h. */ |
10107 | #include <X11/XIntrinsic.h> | |
9972 | #include <X11/Xlib.h> | |
10108 | 9973 | _ACEOF |
10109 | 9974 | if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 |
10110 | 9975 | (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 |
10133 | 9998 | fi |
10134 | 9999 | rm -f conftest.err conftest.$ac_ext |
10135 | 10000 | else |
10136 | if test ! -r $x_includes/X11/Intrinsic.h; then | |
10001 | if test ! -r $x_includes/X11/Xlib.h; then | |
10137 | 10002 | not_really_there="yes" |
10138 | 10003 | fi |
10139 | 10004 | fi |
10148 | 10013 | cat confdefs.h >>conftest.$ac_ext |
10149 | 10014 | cat >>conftest.$ac_ext <<_ACEOF |
10150 | 10015 | /* end confdefs.h. */ |
10151 | #include <X11/Intrinsic.h> | |
10016 | #include <X11/Xlib.h> | |
10152 | 10017 | _ACEOF |
10153 | 10018 | if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 |
10154 | 10019 | (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 |
10179 | 10044 | if test "$found_xincludes" = "no"; then |
10180 | 10045 | dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" |
10181 | 10046 | for i in $dirs ; do |
10182 | if test -r $i/X11/Intrinsic.h; then | |
10047 | if test -r $i/X11/Xlib.h; then | |
10183 | 10048 | echo "$as_me:$LINENO: result: $i" >&5 |
10184 | 10049 | echo "${ECHO_T}$i" >&6 |
10185 | 10050 | XINCLUDES=" -I$i" |
10479 | 10344 | fi |
10480 | 10345 | rm -f conftest.err conftest.$ac_objext \ |
10481 | 10346 | conftest$ac_exeext conftest.$ac_ext |
10482 | CFLAGS=$tk_oldCFlags | |
10483 | LIBS=$tk_oldLibs | |
10484 | fi | |
10485 | ||
10486 | #-------------------------------------------------------------------- | |
10487 | # Check whether the header and library for the XScreenSaver | |
10488 | # extension are available, and set HAVE_XSS if so. | |
10489 | # XScreenSaver is needed for Tk_GetUserInactiveTime(). | |
10490 | #-------------------------------------------------------------------- | |
10491 | ||
10492 | if test $tk_aqua = no; then | |
10493 | tk_oldCFlags=$CFLAGS | |
10494 | CFLAGS="$CFLAGS $XINCLUDES" | |
10495 | tk_oldLibs=$LIBS | |
10496 | LIBS="$tk_oldLibs $XLIBSW" | |
10497 | xss_header_found=no | |
10498 | xss_lib_found=no | |
10499 | echo "$as_me:$LINENO: checking whether to try to use XScreenSaver" >&5 | |
10500 | echo $ECHO_N "checking whether to try to use XScreenSaver... $ECHO_C" >&6 | |
10501 | # Check whether --enable-xss or --disable-xss was given. | |
10502 | if test "${enable_xss+set}" = set; then | |
10503 | enableval="$enable_xss" | |
10504 | enable_xss=$enableval | |
10505 | else | |
10506 | enable_xss=yes | |
10507 | fi; | |
10508 | if test "$enable_xss" = "no" ; then | |
10509 | echo "$as_me:$LINENO: result: $enable_xss" >&5 | |
10510 | echo "${ECHO_T}$enable_xss" >&6 | |
10511 | else | |
10512 | echo "$as_me:$LINENO: result: $enable_xss" >&5 | |
10513 | echo "${ECHO_T}$enable_xss" >&6 | |
10514 | echo "$as_me:$LINENO: checking for X11/extensions/scrnsaver.h" >&5 | |
10515 | echo $ECHO_N "checking for X11/extensions/scrnsaver.h... $ECHO_C" >&6 | |
10516 | if test "${ac_cv_header_X11_extensions_scrnsaver_h+set}" = set; then | |
10517 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10518 | else | |
10519 | cat >conftest.$ac_ext <<_ACEOF | |
10520 | /* confdefs.h. */ | |
10521 | _ACEOF | |
10522 | cat confdefs.h >>conftest.$ac_ext | |
10523 | cat >>conftest.$ac_ext <<_ACEOF | |
10524 | /* end confdefs.h. */ | |
10525 | #include <X11/Xlib.h> | |
10526 | ||
10527 | #include <X11/extensions/scrnsaver.h> | |
10528 | _ACEOF | |
10529 | rm -f conftest.$ac_objext | |
10530 | if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 | |
10531 | (eval $ac_compile) 2>conftest.er1 | |
10532 | ac_status=$? | |
10533 | grep -v '^ *+' conftest.er1 >conftest.err | |
10534 | rm -f conftest.er1 | |
10535 | cat conftest.err >&5 | |
10536 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10537 | (exit $ac_status); } && | |
10538 | { ac_try='test -z "$ac_c_werror_flag" | |
10539 | || test ! -s conftest.err' | |
10540 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10541 | (eval $ac_try) 2>&5 | |
10542 | ac_status=$? | |
10543 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10544 | (exit $ac_status); }; } && | |
10545 | { ac_try='test -s conftest.$ac_objext' | |
10546 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10547 | (eval $ac_try) 2>&5 | |
10548 | ac_status=$? | |
10549 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10550 | (exit $ac_status); }; }; then | |
10551 | ac_cv_header_X11_extensions_scrnsaver_h=yes | |
10552 | else | |
10553 | echo "$as_me: failed program was:" >&5 | |
10554 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10555 | ||
10556 | ac_cv_header_X11_extensions_scrnsaver_h=no | |
10557 | fi | |
10558 | rm -f conftest.err conftest.$ac_objext conftest.$ac_ext | |
10559 | fi | |
10560 | echo "$as_me:$LINENO: result: $ac_cv_header_X11_extensions_scrnsaver_h" >&5 | |
10561 | echo "${ECHO_T}$ac_cv_header_X11_extensions_scrnsaver_h" >&6 | |
10562 | if test $ac_cv_header_X11_extensions_scrnsaver_h = yes; then | |
10563 | ||
10564 | xss_header_found=yes | |
10565 | ||
10566 | fi | |
10567 | ||
10568 | ||
10569 | echo "$as_me:$LINENO: checking for XScreenSaverQueryInfo" >&5 | |
10570 | echo $ECHO_N "checking for XScreenSaverQueryInfo... $ECHO_C" >&6 | |
10571 | if test "${ac_cv_func_XScreenSaverQueryInfo+set}" = set; then | |
10572 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10573 | else | |
10574 | cat >conftest.$ac_ext <<_ACEOF | |
10575 | /* confdefs.h. */ | |
10576 | _ACEOF | |
10577 | cat confdefs.h >>conftest.$ac_ext | |
10578 | cat >>conftest.$ac_ext <<_ACEOF | |
10579 | /* end confdefs.h. */ | |
10580 | /* Define XScreenSaverQueryInfo to an innocuous variant, in case <limits.h> declares XScreenSaverQueryInfo. | |
10581 | For example, HP-UX 11i <limits.h> declares gettimeofday. */ | |
10582 | #define XScreenSaverQueryInfo innocuous_XScreenSaverQueryInfo | |
10583 | ||
10584 | /* System header to define __stub macros and hopefully few prototypes, | |
10585 | which can conflict with char XScreenSaverQueryInfo (); below. | |
10586 | Prefer <limits.h> to <assert.h> if __STDC__ is defined, since | |
10587 | <limits.h> exists even on freestanding compilers. */ | |
10588 | ||
10589 | #ifdef __STDC__ | |
10590 | # include <limits.h> | |
10591 | #else | |
10592 | # include <assert.h> | |
10593 | #endif | |
10594 | ||
10595 | #undef XScreenSaverQueryInfo | |
10596 | ||
10597 | /* Override any gcc2 internal prototype to avoid an error. */ | |
10598 | #ifdef __cplusplus | |
10599 | extern "C" | |
10600 | { | |
10601 | #endif | |
10602 | /* We use char because int might match the return type of a gcc2 | |
10603 | builtin and then its argument prototype would still apply. */ | |
10604 | char XScreenSaverQueryInfo (); | |
10605 | /* The GNU C library defines this for functions which it implements | |
10606 | to always fail with ENOSYS. Some functions are actually named | |
10607 | something starting with __ and the normal name is an alias. */ | |
10608 | #if defined (__stub_XScreenSaverQueryInfo) || defined (__stub___XScreenSaverQueryInfo) | |
10609 | choke me | |
10610 | #else | |
10611 | char (*f) () = XScreenSaverQueryInfo; | |
10612 | #endif | |
10613 | #ifdef __cplusplus | |
10614 | } | |
10615 | #endif | |
10616 | ||
10617 | int | |
10618 | main () | |
10619 | { | |
10620 | return f != XScreenSaverQueryInfo; | |
10621 | ; | |
10622 | return 0; | |
10623 | } | |
10624 | _ACEOF | |
10625 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10626 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10627 | (eval $ac_link) 2>conftest.er1 | |
10628 | ac_status=$? | |
10629 | grep -v '^ *+' conftest.er1 >conftest.err | |
10630 | rm -f conftest.er1 | |
10631 | cat conftest.err >&5 | |
10632 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10633 | (exit $ac_status); } && | |
10634 | { ac_try='test -z "$ac_c_werror_flag" | |
10635 | || test ! -s conftest.err' | |
10636 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10637 | (eval $ac_try) 2>&5 | |
10638 | ac_status=$? | |
10639 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10640 | (exit $ac_status); }; } && | |
10641 | { ac_try='test -s conftest$ac_exeext' | |
10642 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10643 | (eval $ac_try) 2>&5 | |
10644 | ac_status=$? | |
10645 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10646 | (exit $ac_status); }; }; then | |
10647 | ac_cv_func_XScreenSaverQueryInfo=yes | |
10648 | else | |
10649 | echo "$as_me: failed program was:" >&5 | |
10650 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10651 | ||
10652 | ac_cv_func_XScreenSaverQueryInfo=no | |
10653 | fi | |
10654 | rm -f conftest.err conftest.$ac_objext \ | |
10655 | conftest$ac_exeext conftest.$ac_ext | |
10656 | fi | |
10657 | echo "$as_me:$LINENO: result: $ac_cv_func_XScreenSaverQueryInfo" >&5 | |
10658 | echo "${ECHO_T}$ac_cv_func_XScreenSaverQueryInfo" >&6 | |
10659 | if test $ac_cv_func_XScreenSaverQueryInfo = yes; then | |
10660 | : | |
10661 | else | |
10662 | ||
10663 | echo "$as_me:$LINENO: checking for XScreenSaverQueryInfo in -lXext" >&5 | |
10664 | echo $ECHO_N "checking for XScreenSaverQueryInfo in -lXext... $ECHO_C" >&6 | |
10665 | if test "${ac_cv_lib_Xext_XScreenSaverQueryInfo+set}" = set; then | |
10666 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10667 | else | |
10668 | ac_check_lib_save_LIBS=$LIBS | |
10669 | LIBS="-lXext $LIBS" | |
10670 | cat >conftest.$ac_ext <<_ACEOF | |
10671 | /* confdefs.h. */ | |
10672 | _ACEOF | |
10673 | cat confdefs.h >>conftest.$ac_ext | |
10674 | cat >>conftest.$ac_ext <<_ACEOF | |
10675 | /* end confdefs.h. */ | |
10676 | ||
10677 | /* Override any gcc2 internal prototype to avoid an error. */ | |
10678 | #ifdef __cplusplus | |
10679 | extern "C" | |
10680 | #endif | |
10681 | /* We use char because int might match the return type of a gcc2 | |
10682 | builtin and then its argument prototype would still apply. */ | |
10683 | char XScreenSaverQueryInfo (); | |
10684 | int | |
10685 | main () | |
10686 | { | |
10687 | XScreenSaverQueryInfo (); | |
10688 | ; | |
10689 | return 0; | |
10690 | } | |
10691 | _ACEOF | |
10692 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10693 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10694 | (eval $ac_link) 2>conftest.er1 | |
10695 | ac_status=$? | |
10696 | grep -v '^ *+' conftest.er1 >conftest.err | |
10697 | rm -f conftest.er1 | |
10698 | cat conftest.err >&5 | |
10699 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10700 | (exit $ac_status); } && | |
10701 | { ac_try='test -z "$ac_c_werror_flag" | |
10702 | || test ! -s conftest.err' | |
10703 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10704 | (eval $ac_try) 2>&5 | |
10705 | ac_status=$? | |
10706 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10707 | (exit $ac_status); }; } && | |
10708 | { ac_try='test -s conftest$ac_exeext' | |
10709 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10710 | (eval $ac_try) 2>&5 | |
10711 | ac_status=$? | |
10712 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10713 | (exit $ac_status); }; }; then | |
10714 | ac_cv_lib_Xext_XScreenSaverQueryInfo=yes | |
10715 | else | |
10716 | echo "$as_me: failed program was:" >&5 | |
10717 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10718 | ||
10719 | ac_cv_lib_Xext_XScreenSaverQueryInfo=no | |
10720 | fi | |
10721 | rm -f conftest.err conftest.$ac_objext \ | |
10722 | conftest$ac_exeext conftest.$ac_ext | |
10723 | LIBS=$ac_check_lib_save_LIBS | |
10724 | fi | |
10725 | echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XScreenSaverQueryInfo" >&5 | |
10726 | echo "${ECHO_T}$ac_cv_lib_Xext_XScreenSaverQueryInfo" >&6 | |
10727 | if test $ac_cv_lib_Xext_XScreenSaverQueryInfo = yes; then | |
10728 | ||
10729 | XLIBSW="$XLIBSW -lXext" | |
10730 | xss_lib_found=yes | |
10731 | ||
10732 | else | |
10733 | ||
10734 | echo "$as_me:$LINENO: checking for XScreenSaverQueryInfo in -lXss" >&5 | |
10735 | echo $ECHO_N "checking for XScreenSaverQueryInfo in -lXss... $ECHO_C" >&6 | |
10736 | if test "${ac_cv_lib_Xss_XScreenSaverQueryInfo+set}" = set; then | |
10737 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10738 | else | |
10739 | ac_check_lib_save_LIBS=$LIBS | |
10740 | LIBS="-lXss -lXext $LIBS" | |
10741 | cat >conftest.$ac_ext <<_ACEOF | |
10742 | /* confdefs.h. */ | |
10743 | _ACEOF | |
10744 | cat confdefs.h >>conftest.$ac_ext | |
10745 | cat >>conftest.$ac_ext <<_ACEOF | |
10746 | /* end confdefs.h. */ | |
10747 | ||
10748 | /* Override any gcc2 internal prototype to avoid an error. */ | |
10749 | #ifdef __cplusplus | |
10750 | extern "C" | |
10751 | #endif | |
10752 | /* We use char because int might match the return type of a gcc2 | |
10753 | builtin and then its argument prototype would still apply. */ | |
10754 | char XScreenSaverQueryInfo (); | |
10755 | int | |
10756 | main () | |
10757 | { | |
10758 | XScreenSaverQueryInfo (); | |
10759 | ; | |
10760 | return 0; | |
10761 | } | |
10762 | _ACEOF | |
10763 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10764 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10765 | (eval $ac_link) 2>conftest.er1 | |
10766 | ac_status=$? | |
10767 | grep -v '^ *+' conftest.er1 >conftest.err | |
10768 | rm -f conftest.er1 | |
10769 | cat conftest.err >&5 | |
10770 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10771 | (exit $ac_status); } && | |
10772 | { ac_try='test -z "$ac_c_werror_flag" | |
10773 | || test ! -s conftest.err' | |
10774 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10775 | (eval $ac_try) 2>&5 | |
10776 | ac_status=$? | |
10777 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10778 | (exit $ac_status); }; } && | |
10779 | { ac_try='test -s conftest$ac_exeext' | |
10780 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10781 | (eval $ac_try) 2>&5 | |
10782 | ac_status=$? | |
10783 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10784 | (exit $ac_status); }; }; then | |
10785 | ac_cv_lib_Xss_XScreenSaverQueryInfo=yes | |
10786 | else | |
10787 | echo "$as_me: failed program was:" >&5 | |
10788 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10789 | ||
10790 | ac_cv_lib_Xss_XScreenSaverQueryInfo=no | |
10791 | fi | |
10792 | rm -f conftest.err conftest.$ac_objext \ | |
10793 | conftest$ac_exeext conftest.$ac_ext | |
10794 | LIBS=$ac_check_lib_save_LIBS | |
10795 | fi | |
10796 | echo "$as_me:$LINENO: result: $ac_cv_lib_Xss_XScreenSaverQueryInfo" >&5 | |
10797 | echo "${ECHO_T}$ac_cv_lib_Xss_XScreenSaverQueryInfo" >&6 | |
10798 | if test $ac_cv_lib_Xss_XScreenSaverQueryInfo = yes; then | |
10799 | ||
10800 | if test "$tcl_cv_ld_weak_l" = yes; then | |
10801 | # On Darwin, weak link libXss if possible, | |
10802 | # as it is only available on Tiger or later. | |
10803 | XLIBSW="$XLIBSW -Wl,-weak-lXss -lXext" | |
10804 | else | |
10805 | XLIBSW="$XLIBSW -lXss -lXext" | |
10806 | fi | |
10807 | xss_lib_found=yes | |
10808 | ||
10809 | fi | |
10810 | ||
10811 | ||
10812 | fi | |
10813 | ||
10814 | ||
10815 | fi | |
10816 | ||
10817 | fi | |
10818 | if test $enable_xss = yes -a $xss_lib_found = yes -a $xss_header_found = yes; then | |
10819 | ||
10820 | cat >>confdefs.h <<\_ACEOF | |
10821 | #define HAVE_XSS 1 | |
10822 | _ACEOF | |
10823 | ||
10824 | fi | |
10825 | 10347 | CFLAGS=$tk_oldCFlags |
10826 | 10348 | LIBS=$tk_oldLibs |
10827 | 10349 | fi |
11032 | 10554 | |
11033 | 10555 | |
11034 | 10556 | |
10557 | fi | |
10558 | ||
10559 | #-------------------------------------------------------------------- | |
10560 | # Check for XkbKeycodeToKeysym. | |
10561 | #-------------------------------------------------------------------- | |
10562 | ||
10563 | if test $tk_aqua = no; then | |
10564 | tk_oldCFlags=$CFLAGS | |
10565 | tk_oldLibs=$LIBS | |
10566 | CFLAGS="$CFLAGS $XINCLUDES" | |
10567 | LIBS="$LIBS $XLIBSW" | |
10568 | echo "$as_me:$LINENO: checking for X11/XKBlib.h" >&5 | |
10569 | echo $ECHO_N "checking for X11/XKBlib.h... $ECHO_C" >&6 | |
10570 | if test "${ac_cv_header_X11_XKBlib_h+set}" = set; then | |
10571 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10572 | else | |
10573 | cat >conftest.$ac_ext <<_ACEOF | |
10574 | /* confdefs.h. */ | |
10575 | _ACEOF | |
10576 | cat confdefs.h >>conftest.$ac_ext | |
10577 | cat >>conftest.$ac_ext <<_ACEOF | |
10578 | /* end confdefs.h. */ | |
10579 | #include <X11/Xlib.h> | |
10580 | ||
10581 | #include <X11/XKBlib.h> | |
10582 | _ACEOF | |
10583 | rm -f conftest.$ac_objext | |
10584 | if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 | |
10585 | (eval $ac_compile) 2>conftest.er1 | |
10586 | ac_status=$? | |
10587 | grep -v '^ *+' conftest.er1 >conftest.err | |
10588 | rm -f conftest.er1 | |
10589 | cat conftest.err >&5 | |
10590 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10591 | (exit $ac_status); } && | |
10592 | { ac_try='test -z "$ac_c_werror_flag" | |
10593 | || test ! -s conftest.err' | |
10594 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10595 | (eval $ac_try) 2>&5 | |
10596 | ac_status=$? | |
10597 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10598 | (exit $ac_status); }; } && | |
10599 | { ac_try='test -s conftest.$ac_objext' | |
10600 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10601 | (eval $ac_try) 2>&5 | |
10602 | ac_status=$? | |
10603 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10604 | (exit $ac_status); }; }; then | |
10605 | ac_cv_header_X11_XKBlib_h=yes | |
10606 | else | |
10607 | echo "$as_me: failed program was:" >&5 | |
10608 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10609 | ||
10610 | ac_cv_header_X11_XKBlib_h=no | |
10611 | fi | |
10612 | rm -f conftest.err conftest.$ac_objext conftest.$ac_ext | |
10613 | fi | |
10614 | echo "$as_me:$LINENO: result: $ac_cv_header_X11_XKBlib_h" >&5 | |
10615 | echo "${ECHO_T}$ac_cv_header_X11_XKBlib_h" >&6 | |
10616 | if test $ac_cv_header_X11_XKBlib_h = yes; then | |
10617 | ||
10618 | xkblib_header_found=yes | |
10619 | ||
10620 | else | |
10621 | ||
10622 | xkblib_header_found=no | |
10623 | ||
10624 | fi | |
10625 | ||
10626 | ||
10627 | if test $xkblib_header_found = "yes" ; then | |
10628 | echo "$as_me:$LINENO: checking for XkbKeycodeToKeysym in -lX11" >&5 | |
10629 | echo $ECHO_N "checking for XkbKeycodeToKeysym in -lX11... $ECHO_C" >&6 | |
10630 | if test "${ac_cv_lib_X11_XkbKeycodeToKeysym+set}" = set; then | |
10631 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10632 | else | |
10633 | ac_check_lib_save_LIBS=$LIBS | |
10634 | LIBS="-lX11 $LIBS" | |
10635 | cat >conftest.$ac_ext <<_ACEOF | |
10636 | /* confdefs.h. */ | |
10637 | _ACEOF | |
10638 | cat confdefs.h >>conftest.$ac_ext | |
10639 | cat >>conftest.$ac_ext <<_ACEOF | |
10640 | /* end confdefs.h. */ | |
10641 | ||
10642 | /* Override any gcc2 internal prototype to avoid an error. */ | |
10643 | #ifdef __cplusplus | |
10644 | extern "C" | |
10645 | #endif | |
10646 | /* We use char because int might match the return type of a gcc2 | |
10647 | builtin and then its argument prototype would still apply. */ | |
10648 | char XkbKeycodeToKeysym (); | |
10649 | int | |
10650 | main () | |
10651 | { | |
10652 | XkbKeycodeToKeysym (); | |
10653 | ; | |
10654 | return 0; | |
10655 | } | |
10656 | _ACEOF | |
10657 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10658 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10659 | (eval $ac_link) 2>conftest.er1 | |
10660 | ac_status=$? | |
10661 | grep -v '^ *+' conftest.er1 >conftest.err | |
10662 | rm -f conftest.er1 | |
10663 | cat conftest.err >&5 | |
10664 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10665 | (exit $ac_status); } && | |
10666 | { ac_try='test -z "$ac_c_werror_flag" | |
10667 | || test ! -s conftest.err' | |
10668 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10669 | (eval $ac_try) 2>&5 | |
10670 | ac_status=$? | |
10671 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10672 | (exit $ac_status); }; } && | |
10673 | { ac_try='test -s conftest$ac_exeext' | |
10674 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10675 | (eval $ac_try) 2>&5 | |
10676 | ac_status=$? | |
10677 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10678 | (exit $ac_status); }; }; then | |
10679 | ac_cv_lib_X11_XkbKeycodeToKeysym=yes | |
10680 | else | |
10681 | echo "$as_me: failed program was:" >&5 | |
10682 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10683 | ||
10684 | ac_cv_lib_X11_XkbKeycodeToKeysym=no | |
10685 | fi | |
10686 | rm -f conftest.err conftest.$ac_objext \ | |
10687 | conftest$ac_exeext conftest.$ac_ext | |
10688 | LIBS=$ac_check_lib_save_LIBS | |
10689 | fi | |
10690 | echo "$as_me:$LINENO: result: $ac_cv_lib_X11_XkbKeycodeToKeysym" >&5 | |
10691 | echo "${ECHO_T}$ac_cv_lib_X11_XkbKeycodeToKeysym" >&6 | |
10692 | if test $ac_cv_lib_X11_XkbKeycodeToKeysym = yes; then | |
10693 | ||
10694 | xkbkeycodetokeysym_found=yes | |
10695 | ||
10696 | else | |
10697 | ||
10698 | xkbkeycodetokeysym_found=no | |
10699 | ||
10700 | fi | |
10701 | ||
10702 | else | |
10703 | xkbkeycodetokeysym_found=no | |
10704 | fi | |
10705 | if test $xkbkeycodetokeysym_found = "yes" ; then | |
10706 | ||
10707 | cat >>confdefs.h <<\_ACEOF | |
10708 | #define HAVE_XKBKEYCODETOKEYSYM 1 | |
10709 | _ACEOF | |
10710 | ||
10711 | fi | |
10712 | CFLAGS=$tk_oldCFlags | |
10713 | LIBS=$tk_oldLibs | |
10714 | fi | |
10715 | ||
10716 | #-------------------------------------------------------------------- | |
10717 | # Check whether XKeycodeToKeysym is deprecated in X11 headers. | |
10718 | #-------------------------------------------------------------------- | |
10719 | ||
10720 | if test $tk_aqua = no && test "$GCC" = yes; then | |
10721 | echo "$as_me:$LINENO: checking whether XKeycodeToKeysym is deprecated" >&5 | |
10722 | echo $ECHO_N "checking whether XKeycodeToKeysym is deprecated... $ECHO_C" >&6 | |
10723 | tk_oldCFlags=$CFLAGS | |
10724 | CFLAGS="$CFLAGS -Werror" | |
10725 | cat >conftest.$ac_ext <<_ACEOF | |
10726 | /* confdefs.h. */ | |
10727 | _ACEOF | |
10728 | cat confdefs.h >>conftest.$ac_ext | |
10729 | cat >>conftest.$ac_ext <<_ACEOF | |
10730 | /* end confdefs.h. */ | |
10731 | ||
10732 | #include <X11/Xlib.h> | |
10733 | ||
10734 | int | |
10735 | main () | |
10736 | { | |
10737 | ||
10738 | XKeycodeToKeysym(0,0,0); | |
10739 | ||
10740 | ; | |
10741 | return 0; | |
10742 | } | |
10743 | _ACEOF | |
10744 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10745 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10746 | (eval $ac_link) 2>conftest.er1 | |
10747 | ac_status=$? | |
10748 | grep -v '^ *+' conftest.er1 >conftest.err | |
10749 | rm -f conftest.er1 | |
10750 | cat conftest.err >&5 | |
10751 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10752 | (exit $ac_status); } && | |
10753 | { ac_try='test -z "$ac_c_werror_flag" | |
10754 | || test ! -s conftest.err' | |
10755 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10756 | (eval $ac_try) 2>&5 | |
10757 | ac_status=$? | |
10758 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10759 | (exit $ac_status); }; } && | |
10760 | { ac_try='test -s conftest$ac_exeext' | |
10761 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10762 | (eval $ac_try) 2>&5 | |
10763 | ac_status=$? | |
10764 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10765 | (exit $ac_status); }; }; then | |
10766 | ||
10767 | echo "$as_me:$LINENO: result: no" >&5 | |
10768 | echo "${ECHO_T}no" >&6 | |
10769 | ||
10770 | else | |
10771 | echo "$as_me: failed program was:" >&5 | |
10772 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10773 | ||
10774 | ||
10775 | echo "$as_me:$LINENO: result: yes" >&5 | |
10776 | echo "${ECHO_T}yes" >&6 | |
10777 | ||
10778 | cat >>confdefs.h <<\_ACEOF | |
10779 | #define XKEYCODETOKEYSYM_IS_DEPRECATED 1 | |
10780 | _ACEOF | |
10781 | ||
10782 | ||
10783 | fi | |
10784 | rm -f conftest.err conftest.$ac_objext \ | |
10785 | conftest$ac_exeext conftest.$ac_ext | |
10786 | CFLAGS=$tk_oldCFlags | |
10787 | fi | |
10788 | ||
10789 | #-------------------------------------------------------------------- | |
10790 | # XXX Do this last. | |
10791 | # It might modify XLIBSW which could affect other tests. | |
10792 | # | |
10793 | # Check whether the header and library for the XScreenSaver | |
10794 | # extension are available, and set HAVE_XSS if so. | |
10795 | # XScreenSaver is needed for Tk_GetUserInactiveTime(). | |
10796 | #-------------------------------------------------------------------- | |
10797 | ||
10798 | if test $tk_aqua = no; then | |
10799 | tk_oldCFlags=$CFLAGS | |
10800 | CFLAGS="$CFLAGS $XINCLUDES" | |
10801 | tk_oldLibs=$LIBS | |
10802 | LIBS="$tk_oldLibs $XLIBSW" | |
10803 | xss_header_found=no | |
10804 | xss_lib_found=no | |
10805 | echo "$as_me:$LINENO: checking whether to try to use XScreenSaver" >&5 | |
10806 | echo $ECHO_N "checking whether to try to use XScreenSaver... $ECHO_C" >&6 | |
10807 | # Check whether --enable-xss or --disable-xss was given. | |
10808 | if test "${enable_xss+set}" = set; then | |
10809 | enableval="$enable_xss" | |
10810 | enable_xss=$enableval | |
10811 | else | |
10812 | enable_xss=yes | |
10813 | fi; | |
10814 | if test "$enable_xss" = "no" ; then | |
10815 | echo "$as_me:$LINENO: result: $enable_xss" >&5 | |
10816 | echo "${ECHO_T}$enable_xss" >&6 | |
10817 | else | |
10818 | echo "$as_me:$LINENO: result: $enable_xss" >&5 | |
10819 | echo "${ECHO_T}$enable_xss" >&6 | |
10820 | echo "$as_me:$LINENO: checking for X11/extensions/scrnsaver.h" >&5 | |
10821 | echo $ECHO_N "checking for X11/extensions/scrnsaver.h... $ECHO_C" >&6 | |
10822 | if test "${ac_cv_header_X11_extensions_scrnsaver_h+set}" = set; then | |
10823 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10824 | else | |
10825 | cat >conftest.$ac_ext <<_ACEOF | |
10826 | /* confdefs.h. */ | |
10827 | _ACEOF | |
10828 | cat confdefs.h >>conftest.$ac_ext | |
10829 | cat >>conftest.$ac_ext <<_ACEOF | |
10830 | /* end confdefs.h. */ | |
10831 | #include <X11/Xlib.h> | |
10832 | ||
10833 | #include <X11/extensions/scrnsaver.h> | |
10834 | _ACEOF | |
10835 | rm -f conftest.$ac_objext | |
10836 | if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 | |
10837 | (eval $ac_compile) 2>conftest.er1 | |
10838 | ac_status=$? | |
10839 | grep -v '^ *+' conftest.er1 >conftest.err | |
10840 | rm -f conftest.er1 | |
10841 | cat conftest.err >&5 | |
10842 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10843 | (exit $ac_status); } && | |
10844 | { ac_try='test -z "$ac_c_werror_flag" | |
10845 | || test ! -s conftest.err' | |
10846 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10847 | (eval $ac_try) 2>&5 | |
10848 | ac_status=$? | |
10849 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10850 | (exit $ac_status); }; } && | |
10851 | { ac_try='test -s conftest.$ac_objext' | |
10852 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10853 | (eval $ac_try) 2>&5 | |
10854 | ac_status=$? | |
10855 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10856 | (exit $ac_status); }; }; then | |
10857 | ac_cv_header_X11_extensions_scrnsaver_h=yes | |
10858 | else | |
10859 | echo "$as_me: failed program was:" >&5 | |
10860 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10861 | ||
10862 | ac_cv_header_X11_extensions_scrnsaver_h=no | |
10863 | fi | |
10864 | rm -f conftest.err conftest.$ac_objext conftest.$ac_ext | |
10865 | fi | |
10866 | echo "$as_me:$LINENO: result: $ac_cv_header_X11_extensions_scrnsaver_h" >&5 | |
10867 | echo "${ECHO_T}$ac_cv_header_X11_extensions_scrnsaver_h" >&6 | |
10868 | if test $ac_cv_header_X11_extensions_scrnsaver_h = yes; then | |
10869 | ||
10870 | xss_header_found=yes | |
10871 | ||
10872 | fi | |
10873 | ||
10874 | ||
10875 | echo "$as_me:$LINENO: checking for XScreenSaverQueryInfo" >&5 | |
10876 | echo $ECHO_N "checking for XScreenSaverQueryInfo... $ECHO_C" >&6 | |
10877 | if test "${ac_cv_func_XScreenSaverQueryInfo+set}" = set; then | |
10878 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10879 | else | |
10880 | cat >conftest.$ac_ext <<_ACEOF | |
10881 | /* confdefs.h. */ | |
10882 | _ACEOF | |
10883 | cat confdefs.h >>conftest.$ac_ext | |
10884 | cat >>conftest.$ac_ext <<_ACEOF | |
10885 | /* end confdefs.h. */ | |
10886 | /* Define XScreenSaverQueryInfo to an innocuous variant, in case <limits.h> declares XScreenSaverQueryInfo. | |
10887 | For example, HP-UX 11i <limits.h> declares gettimeofday. */ | |
10888 | #define XScreenSaverQueryInfo innocuous_XScreenSaverQueryInfo | |
10889 | ||
10890 | /* System header to define __stub macros and hopefully few prototypes, | |
10891 | which can conflict with char XScreenSaverQueryInfo (); below. | |
10892 | Prefer <limits.h> to <assert.h> if __STDC__ is defined, since | |
10893 | <limits.h> exists even on freestanding compilers. */ | |
10894 | ||
10895 | #ifdef __STDC__ | |
10896 | # include <limits.h> | |
10897 | #else | |
10898 | # include <assert.h> | |
10899 | #endif | |
10900 | ||
10901 | #undef XScreenSaverQueryInfo | |
10902 | ||
10903 | /* Override any gcc2 internal prototype to avoid an error. */ | |
10904 | #ifdef __cplusplus | |
10905 | extern "C" | |
10906 | { | |
10907 | #endif | |
10908 | /* We use char because int might match the return type of a gcc2 | |
10909 | builtin and then its argument prototype would still apply. */ | |
10910 | char XScreenSaverQueryInfo (); | |
10911 | /* The GNU C library defines this for functions which it implements | |
10912 | to always fail with ENOSYS. Some functions are actually named | |
10913 | something starting with __ and the normal name is an alias. */ | |
10914 | #if defined (__stub_XScreenSaverQueryInfo) || defined (__stub___XScreenSaverQueryInfo) | |
10915 | choke me | |
10916 | #else | |
10917 | char (*f) () = XScreenSaverQueryInfo; | |
10918 | #endif | |
10919 | #ifdef __cplusplus | |
10920 | } | |
10921 | #endif | |
10922 | ||
10923 | int | |
10924 | main () | |
10925 | { | |
10926 | return f != XScreenSaverQueryInfo; | |
10927 | ; | |
10928 | return 0; | |
10929 | } | |
10930 | _ACEOF | |
10931 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10932 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10933 | (eval $ac_link) 2>conftest.er1 | |
10934 | ac_status=$? | |
10935 | grep -v '^ *+' conftest.er1 >conftest.err | |
10936 | rm -f conftest.er1 | |
10937 | cat conftest.err >&5 | |
10938 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10939 | (exit $ac_status); } && | |
10940 | { ac_try='test -z "$ac_c_werror_flag" | |
10941 | || test ! -s conftest.err' | |
10942 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10943 | (eval $ac_try) 2>&5 | |
10944 | ac_status=$? | |
10945 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10946 | (exit $ac_status); }; } && | |
10947 | { ac_try='test -s conftest$ac_exeext' | |
10948 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10949 | (eval $ac_try) 2>&5 | |
10950 | ac_status=$? | |
10951 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10952 | (exit $ac_status); }; }; then | |
10953 | ac_cv_func_XScreenSaverQueryInfo=yes | |
10954 | else | |
10955 | echo "$as_me: failed program was:" >&5 | |
10956 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10957 | ||
10958 | ac_cv_func_XScreenSaverQueryInfo=no | |
10959 | fi | |
10960 | rm -f conftest.err conftest.$ac_objext \ | |
10961 | conftest$ac_exeext conftest.$ac_ext | |
10962 | fi | |
10963 | echo "$as_me:$LINENO: result: $ac_cv_func_XScreenSaverQueryInfo" >&5 | |
10964 | echo "${ECHO_T}$ac_cv_func_XScreenSaverQueryInfo" >&6 | |
10965 | if test $ac_cv_func_XScreenSaverQueryInfo = yes; then | |
10966 | : | |
10967 | else | |
10968 | ||
10969 | echo "$as_me:$LINENO: checking for XScreenSaverQueryInfo in -lXext" >&5 | |
10970 | echo $ECHO_N "checking for XScreenSaverQueryInfo in -lXext... $ECHO_C" >&6 | |
10971 | if test "${ac_cv_lib_Xext_XScreenSaverQueryInfo+set}" = set; then | |
10972 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10973 | else | |
10974 | ac_check_lib_save_LIBS=$LIBS | |
10975 | LIBS="-lXext $LIBS" | |
10976 | cat >conftest.$ac_ext <<_ACEOF | |
10977 | /* confdefs.h. */ | |
10978 | _ACEOF | |
10979 | cat confdefs.h >>conftest.$ac_ext | |
10980 | cat >>conftest.$ac_ext <<_ACEOF | |
10981 | /* end confdefs.h. */ | |
10982 | ||
10983 | /* Override any gcc2 internal prototype to avoid an error. */ | |
10984 | #ifdef __cplusplus | |
10985 | extern "C" | |
10986 | #endif | |
10987 | /* We use char because int might match the return type of a gcc2 | |
10988 | builtin and then its argument prototype would still apply. */ | |
10989 | char XScreenSaverQueryInfo (); | |
10990 | int | |
10991 | main () | |
10992 | { | |
10993 | XScreenSaverQueryInfo (); | |
10994 | ; | |
10995 | return 0; | |
10996 | } | |
10997 | _ACEOF | |
10998 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10999 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
11000 | (eval $ac_link) 2>conftest.er1 | |
11001 | ac_status=$? | |
11002 | grep -v '^ *+' conftest.er1 >conftest.err | |
11003 | rm -f conftest.er1 | |
11004 | cat conftest.err >&5 | |
11005 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
11006 | (exit $ac_status); } && | |
11007 | { ac_try='test -z "$ac_c_werror_flag" | |
11008 | || test ! -s conftest.err' | |
11009 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
11010 | (eval $ac_try) 2>&5 | |
11011 | ac_status=$? | |
11012 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
11013 | (exit $ac_status); }; } && | |
11014 | { ac_try='test -s conftest$ac_exeext' | |
11015 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
11016 | (eval $ac_try) 2>&5 | |
11017 | ac_status=$? | |
11018 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
11019 | (exit $ac_status); }; }; then | |
11020 | ac_cv_lib_Xext_XScreenSaverQueryInfo=yes | |
11021 | else | |
11022 | echo "$as_me: failed program was:" >&5 | |
11023 | sed 's/^/| /' conftest.$ac_ext >&5 | |
11024 | ||
11025 | ac_cv_lib_Xext_XScreenSaverQueryInfo=no | |
11026 | fi | |
11027 | rm -f conftest.err conftest.$ac_objext \ | |
11028 | conftest$ac_exeext conftest.$ac_ext | |
11029 | LIBS=$ac_check_lib_save_LIBS | |
11030 | fi | |
11031 | echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XScreenSaverQueryInfo" >&5 | |
11032 | echo "${ECHO_T}$ac_cv_lib_Xext_XScreenSaverQueryInfo" >&6 | |
11033 | if test $ac_cv_lib_Xext_XScreenSaverQueryInfo = yes; then | |
11034 | ||
11035 | XLIBSW="$XLIBSW -lXext" | |
11036 | xss_lib_found=yes | |
11037 | ||
11038 | else | |
11039 | ||
11040 | echo "$as_me:$LINENO: checking for XScreenSaverQueryInfo in -lXss" >&5 | |
11041 | echo $ECHO_N "checking for XScreenSaverQueryInfo in -lXss... $ECHO_C" >&6 | |
11042 | if test "${ac_cv_lib_Xss_XScreenSaverQueryInfo+set}" = set; then | |
11043 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
11044 | else | |
11045 | ac_check_lib_save_LIBS=$LIBS | |
11046 | LIBS="-lXss -lXext $LIBS" | |
11047 | cat >conftest.$ac_ext <<_ACEOF | |
11048 | /* confdefs.h. */ | |
11049 | _ACEOF | |
11050 | cat confdefs.h >>conftest.$ac_ext | |
11051 | cat >>conftest.$ac_ext <<_ACEOF | |
11052 | /* end confdefs.h. */ | |
11053 | ||
11054 | /* Override any gcc2 internal prototype to avoid an error. */ | |
11055 | #ifdef __cplusplus | |
11056 | extern "C" | |
11057 | #endif | |
11058 | /* We use char because int might match the return type of a gcc2 | |
11059 | builtin and then its argument prototype would still apply. */ | |
11060 | char XScreenSaverQueryInfo (); | |
11061 | int | |
11062 | main () | |
11063 | { | |
11064 | XScreenSaverQueryInfo (); | |
11065 | ; | |
11066 | return 0; | |
11067 | } | |
11068 | _ACEOF | |
11069 | rm -f conftest.$ac_objext conftest$ac_exeext | |
11070 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
11071 | (eval $ac_link) 2>conftest.er1 | |
11072 | ac_status=$? | |
11073 | grep -v '^ *+' conftest.er1 >conftest.err | |
11074 | rm -f conftest.er1 | |
11075 | cat conftest.err >&5 | |
11076 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
11077 | (exit $ac_status); } && | |
11078 | { ac_try='test -z "$ac_c_werror_flag" | |
11079 | || test ! -s conftest.err' | |
11080 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
11081 | (eval $ac_try) 2>&5 | |
11082 | ac_status=$? | |
11083 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
11084 | (exit $ac_status); }; } && | |
11085 | { ac_try='test -s conftest$ac_exeext' | |
11086 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
11087 | (eval $ac_try) 2>&5 | |
11088 | ac_status=$? | |
11089 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
11090 | (exit $ac_status); }; }; then | |
11091 | ac_cv_lib_Xss_XScreenSaverQueryInfo=yes | |
11092 | else | |
11093 | echo "$as_me: failed program was:" >&5 | |
11094 | sed 's/^/| /' conftest.$ac_ext >&5 | |
11095 | ||
11096 | ac_cv_lib_Xss_XScreenSaverQueryInfo=no | |
11097 | fi | |
11098 | rm -f conftest.err conftest.$ac_objext \ | |
11099 | conftest$ac_exeext conftest.$ac_ext | |
11100 | LIBS=$ac_check_lib_save_LIBS | |
11101 | fi | |
11102 | echo "$as_me:$LINENO: result: $ac_cv_lib_Xss_XScreenSaverQueryInfo" >&5 | |
11103 | echo "${ECHO_T}$ac_cv_lib_Xss_XScreenSaverQueryInfo" >&6 | |
11104 | if test $ac_cv_lib_Xss_XScreenSaverQueryInfo = yes; then | |
11105 | ||
11106 | if test "$tcl_cv_ld_weak_l" = yes; then | |
11107 | # On Darwin, weak link libXss if possible, | |
11108 | # as it is only available on Tiger or later. | |
11109 | XLIBSW="$XLIBSW -Wl,-weak-lXss -lXext" | |
11110 | else | |
11111 | XLIBSW="$XLIBSW -lXss -lXext" | |
11112 | fi | |
11113 | xss_lib_found=yes | |
11114 | ||
11115 | fi | |
11116 | ||
11117 | ||
11118 | fi | |
11119 | ||
11120 | ||
11121 | fi | |
11122 | ||
11123 | fi | |
11124 | if test $enable_xss = yes -a $xss_lib_found = yes -a $xss_header_found = yes; then | |
11125 | ||
11126 | cat >>confdefs.h <<\_ACEOF | |
11127 | #define HAVE_XSS 1 | |
11128 | _ACEOF | |
11129 | ||
11130 | fi | |
11131 | CFLAGS=$tk_oldCFlags | |
11132 | LIBS=$tk_oldLibs | |
11035 | 11133 | fi |
11036 | 11134 | |
11037 | 11135 | #-------------------------------------------------------------------- |
11175 | 11273 | fi |
11176 | 11274 | |
11177 | 11275 | TK_SHLIB_LD_EXTRAS="-compatibility_version ${TK_VERSION} -current_version ${TK_VERSION}`echo ${TK_PATCH_LEVEL} | awk '{match($0, "\\\.[0-9]+"); print substr($0,RSTART,RLENGTH)}'`" |
11178 | TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -install_name "${DYLIB_INSTALL_DIR}/${TK_LIB_FILE}"' | |
11179 | if test $tk_aqua = yes; then | |
11180 | TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -unexported_symbols_list $$(f=$(TK_LIB_FILE).E && nm -gp tkMacOSX*.o 2>/dev/null | awk "/^[0-9a-f]+ . \.objc/ {print \$$3}" > $$f && echo $$f)' | |
11181 | fi | |
11276 | TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -install_name "${DYLIB_INSTALL_DIR}/${TK_LIB_FILE}" -unexported_symbols_list $$(f=$(TK_LIB_FILE).E && nm -gp tkMacOSX*.o 2>/dev/null | awk "/^[0-9a-f]+ . \.objc/ {print \$$3}" > $$f && nm -gjp "$(TCL_BIN_DIR)"/$(TCL_STUB_LIB_FILE) | grep ^_[^_] >> $$f && echo $$f)' | |
11182 | 11277 | echo "$LDFLAGS " | grep -q -- '-prebind ' && TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -seg1addr 0xb000000' |
11183 | 11278 | TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -sectcreate __TEXT __info_plist Tk-Info.plist' |
11184 | 11279 | EXTRA_WISH_LIBS='-sectcreate __TEXT __info_plist Wish-Info.plist' |
11185 | 11280 | EXTRA_APP_CC_SWITCHES="${EXTRA_APP_CC_SWITCHES}"' -mdynamic-no-pic' |
11186 | ac_config_files="$ac_config_files Tk-Info.plist:../${MACOSX_SRC_DIR}/Tk-Info.plist.in Wish-Info.plist:../${MACOSX_SRC_DIR}/Wish-Info.plist.in" | |
11281 | ac_config_files="$ac_config_files Tk-Info.plist:../macosx/Tk-Info.plist.in Wish-Info.plist:../macosx/Wish-Info.plist.in" | |
11187 | 11282 | |
11188 | 11283 | for l in ${LOCALES}; do CFBUNDLELOCALIZATIONS="${CFBUNDLELOCALIZATIONS}<string>$l</string>"; done |
11189 | 11284 | TK_YEAR="`date +%Y`" |
11207 | 11302 | TK_LIB_FILE="Tk" |
11208 | 11303 | TK_LIB_FLAG="-framework Tk" |
11209 | 11304 | TK_BUILD_LIB_SPEC="-F`pwd | sed -e 's/ /\\\\ /g'` -framework Tk" |
11210 | WISH_BUILD_LIB_SPEC="-F`pwd | sed -e 's/ /\\\\ /g'` -framework Tk \${WISH_LIBS}" | |
11211 | 11305 | TK_LIB_SPEC="-F${libdir} -framework Tk" |
11212 | 11306 | libdir="${libdir}/Tk.framework/Versions/\${VERSION}" |
11213 | 11307 | TK_LIBRARY="${libdir}/Resources/Scripts" |
11221 | 11315 | EXTRA_BUILD_HTML='@ln -fs contents.htm "$(HTML_INSTALL_DIR)"/TkTOC.html' |
11222 | 11316 | EXTRA_INSTALL_BINARIES='@echo "Installing Info.plist to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && $(INSTALL_DATA) Tk-Info.plist "$(LIB_INSTALL_DIR)/Resources/Info.plist"' |
11223 | 11317 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing license.terms to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA) "$(TOP_DIR)/license.terms" "$(LIB_INSTALL_DIR)/Resources"' |
11224 | if test $tk_aqua != no; then | |
11225 | if test $tk_aqua = yes; then | |
11226 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Images to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && for i in Tk.tiff Tk.icns; do $(INSTALL_DATA) "$(MAC_OSX_DIR)/$$i" "$(LIB_INSTALL_DIR)/Resources"; done' | |
11227 | else | |
11228 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing ${TK_RSRC_FILE} to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && $(INSTALL_DATA) "${TK_RSRC_FILE}" "$(LIB_INSTALL_DIR)/Resources"' | |
11229 | fi | |
11230 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing wish$(VERSION) script to $(INSTALL_ROOT)/'"${bindir}"'/" && $(INSTALL_DATA_DIR) "$(INSTALL_ROOT)/'"${bindir}"'" && printf > "$(INSTALL_ROOT)/'"${bindir}"'/wish$(VERSION)" "#!/bin/sh\n\"\$$(dirname \$$0)'"`eval d="${bindir}"; echo "$d" | sed -e 's#/[^/][^/]*#/..#g'`"'$(bindir)/Wish\" \"\$$@\"" && chmod +x "$(INSTALL_ROOT)/'"${bindir}"'/wish$(VERSION)"' | |
11231 | bindir="${libdir}/Resources/Wish.app/Contents/MacOS" | |
11232 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Info.plist to $(BIN_INSTALL_DIR)/../" && $(INSTALL_DATA) Wish-Info.plist "$(BIN_INSTALL_DIR)/../Info.plist" && mv -f "$(BIN_INSTALL_DIR)/wish$(VERSION)" "$(BIN_INSTALL_DIR)/Wish"' | |
11233 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Wish.icns to $(BIN_INSTALL_DIR)/../Resources/" && $(INSTALL_DATA_DIR) "$(BIN_INSTALL_DIR)/../Resources"' | |
11234 | if test $tk_aqua = yes; then | |
11235 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Tk.icns" "$(BIN_INSTALL_DIR)/../Resources/Wish.icns"' | |
11236 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Wish.sdef to $(BIN_INSTALL_DIR)/../Resources/" && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Wish.sdef" "$(BIN_INSTALL_DIR)/../Resources"' | |
11237 | else | |
11238 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Wish.icns" "$(BIN_INSTALL_DIR)/../Resources" && echo "Installing ${WISH_RSRC_FILE} to $(BIN_INSTALL_DIR)/../Resources/" && $(INSTALL_DATA) "${WISH_RSRC_FILE}" "$(BIN_INSTALL_DIR)/../Resources"' | |
11239 | fi | |
11318 | if test $tk_aqua = yes; then | |
11319 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Images to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && for i in Tk.tiff Tk.icns; do $(INSTALL_DATA) "$(MAC_OSX_DIR)/$$i" "$(LIB_INSTALL_DIR)/Resources"; done' | |
11320 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing wish$(VERSION) script to $(INSTALL_ROOT)/'"${bindir}"'/" && $(INSTALL_DATA_DIR) "$(INSTALL_ROOT)/'"${bindir}"'" && printf > "$(INSTALL_ROOT)/'"${bindir}"'/wish$(VERSION)" "#!/bin/sh\n\"\$$(dirname \$$0)'"`eval d="${bindir}"; echo "$d" | sed -e 's#/[^/][^/]*#/..#g'`"'$(bindir)/Wish\" \"\$$@\"" && chmod +x "$(INSTALL_ROOT)/'"${bindir}"'/wish$(VERSION)"' | |
11321 | bindir="${libdir}/Resources/Wish.app/Contents/MacOS" | |
11322 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Info.plist to $(BIN_INSTALL_DIR)/.." && $(INSTALL_DATA) Wish-Info.plist "$(BIN_INSTALL_DIR)/../Info.plist" && mv -f "$(BIN_INSTALL_DIR)/wish$(VERSION)" "$(BIN_INSTALL_DIR)/Wish"' | |
11323 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Wish.icns to $(BIN_INSTALL_DIR)/../Resources" && $(INSTALL_DATA_DIR) "$(BIN_INSTALL_DIR)/../Resources"' | |
11324 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Tk.icns" "$(BIN_INSTALL_DIR)/../Resources/Wish.icns"' | |
11325 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Wish.sdef to $(BIN_INSTALL_DIR)/../Resources" && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Wish.sdef" "$(BIN_INSTALL_DIR)/../Resources"' | |
11240 | 11326 | fi |
11241 | 11327 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Finalizing Tk.framework" && rm -f "$(LIB_INSTALL_DIR)/../Current" && ln -s "$(VERSION)" "$(LIB_INSTALL_DIR)/../Current" && for f in "$(LIB_FILE)" tkConfig.sh Resources Headers PrivateHeaders; do rm -f "$(LIB_INSTALL_DIR)/../../$$f" && ln -s "Versions/Current/$$f" "$(LIB_INSTALL_DIR)/../.."; done && f="$(STUB_LIB_FILE)" && rm -f "$(LIB_INSTALL_DIR)/../../$$f" && ln -s "Versions/$(VERSION)/$$f" "$(LIB_INSTALL_DIR)/../.."' |
11242 | 11328 | # Don't use AC_DEFINE for the following as the framework version define |
11250 | 11336 | fi |
11251 | 11337 | # libdir must be a fully qualified path and not ${exec_prefix}/lib |
11252 | 11338 | eval libdir="$libdir" |
11253 | if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then | |
11254 | TK_LIB_FLAG="-ltk${TK_VERSION}" | |
11339 | if test "${ac_cv_cygwin}" = "yes" -a "$SHARED_BUILD" = "1"; then | |
11340 | TK_LIB_FLAG="-ltk`echo ${TK_VERSION} | tr -d .`" | |
11341 | TK_BUILD_LIB_SPEC="-L\$(TOP_DIR)/win ${TK_LIB_FLAG}" | |
11255 | 11342 | else |
11256 | TK_LIB_FLAG="-ltk`echo ${TK_VERSION} | tr -d .`" | |
11257 | fi | |
11258 | TK_BUILD_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TK_LIB_FLAG}" | |
11259 | if test "${ac_cv_cygwin}" = "yes" -a "$SHARED_BUILD" = "1"; then | |
11260 | WISH_BUILD_LIB_SPEC="-L\$(TOP_DIR)/win -ltk${TK_MAJOR_VERSION}${TK_MINOR_VERSION} \${TCL_LIB_SPEC}" | |
11261 | else | |
11262 | WISH_BUILD_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TK_LIB_FLAG} \${WISH_LIBS}" | |
11343 | if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then | |
11344 | TK_LIB_FLAG="-ltk${TK_VERSION}" | |
11345 | else | |
11346 | TK_LIB_FLAG="-ltk`echo ${TK_VERSION} | tr -d .`" | |
11347 | fi | |
11348 | TK_BUILD_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TK_LIB_FLAG}" | |
11263 | 11349 | fi |
11264 | 11350 | TK_LIB_SPEC="-L${libdir} ${TK_LIB_FLAG}" |
11265 | fi | |
11266 | ||
11267 | # Extra bits for legacy Aqua Carbon build (carbon sources and resource files) | |
11268 | if test $tk_aqua = carbon; then | |
11269 | EXTRA_AQUA_OBJS='tkMacOSXCarbonEvents.o' | |
11270 | EXTRA_AQUA_SRCS='$(TOP_DIR)/carbon/tkMacOSXCarbonEvents.c' | |
11271 | LIB_RSRC_FILE='${TK_RSRC_FILE}' | |
11272 | APP_RSRC_FILE='${WISH_RSRC_FILE}' | |
11273 | REZ=/Developer/Tools/Rez | |
11274 | REZ_FLAGS='-d "SystemSevenOrLater=1" -useDF -ro' | |
11275 | if test "$SHARED_BUILD" = 0; then | |
11276 | EXTRA_INSTALL_BINARIES='@echo "Installing $(TK_RSRC_FILE) to $(LIB_INSTALL_DIR)/" && $(INSTALL_DATA) $(TK_RSRC_FILE) "$(LIB_INSTALL_DIR)"' | |
11277 | TK_BUILD_LIB_SPEC="$TK_BUILD_LIB_SPEC -sectcreate __TEXT __tk_rsrc `pwd | sed -e 's/ /\\\\ /g'`/\${TK_RSRC_FILE}" | |
11278 | WISH_BUILD_LIB_SPEC="$WISH_BUILD_LIB_SPEC -sectcreate __TEXT __tk_rsrc `pwd | sed -e 's/ /\\\\ /g'`/\${TK_RSRC_FILE}" | |
11279 | TK_LIB_SPEC="$TK_LIB_SPEC -sectcreate __TEXT __tk_rsrc ${libdir}/\${TK_RSRC_FILE}" | |
11280 | else | |
11281 | TK_SHLIB_LD_EXTRAS="$TK_SHLIB_LD_EXTRAS -sectcreate __TEXT __tk_rsrc \${TK_RSRC_FILE}" | |
11282 | fi | |
11283 | 11351 | fi |
11284 | 11352 | |
11285 | 11353 | #-------------------------------------------------------------------- |
11310 | 11378 | #------------------------------------------------------------------------ |
11311 | 11379 | |
11312 | 11380 | TK_SHARED_BUILD=${SHARED_BUILD} |
11313 | ||
11314 | ||
11315 | ||
11316 | ||
11317 | 11381 | |
11318 | 11382 | |
11319 | 11383 | |
11904 | 11968 | do |
11905 | 11969 | case "$ac_config_target" in |
11906 | 11970 | # Handling of arguments. |
11907 | "Tk-Info.plist" ) CONFIG_FILES="$CONFIG_FILES Tk-Info.plist:../${MACOSX_SRC_DIR}/Tk-Info.plist.in" ;; | |
11908 | "Wish-Info.plist" ) CONFIG_FILES="$CONFIG_FILES Wish-Info.plist:../${MACOSX_SRC_DIR}/Wish-Info.plist.in" ;; | |
11971 | "Tk-Info.plist" ) CONFIG_FILES="$CONFIG_FILES Tk-Info.plist:../macosx/Tk-Info.plist.in" ;; | |
11972 | "Wish-Info.plist" ) CONFIG_FILES="$CONFIG_FILES Wish-Info.plist:../macosx/Wish-Info.plist.in" ;; | |
11909 | 11973 | "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile:../unix/Makefile.in" ;; |
11910 | 11974 | "tkConfig.sh" ) CONFIG_FILES="$CONFIG_FILES tkConfig.sh:../unix/tkConfig.sh.in" ;; |
11911 | 11975 | "tk.pc" ) CONFIG_FILES="$CONFIG_FILES tk.pc:../unix/tk.pc.in" ;; |
12073 | 12137 | s,@TK_SHARED_BUILD@,$TK_SHARED_BUILD,;t t |
12074 | 12138 | s,@LD_LIBRARY_PATH_VAR@,$LD_LIBRARY_PATH_VAR,;t t |
12075 | 12139 | s,@TK_BUILD_LIB_SPEC@,$TK_BUILD_LIB_SPEC,;t t |
12076 | s,@WISH_BUILD_LIB_SPEC@,$WISH_BUILD_LIB_SPEC,;t t | |
12077 | 12140 | s,@TCL_STUB_FLAGS@,$TCL_STUB_FLAGS,;t t |
12078 | 12141 | s,@XINCLUDES@,$XINCLUDES,;t t |
12079 | 12142 | s,@XLIBSW@,$XLIBSW,;t t |
12090 | 12153 | s,@EXTRA_INSTALL_BINARIES@,$EXTRA_INSTALL_BINARIES,;t t |
12091 | 12154 | s,@EXTRA_BUILD_HTML@,$EXTRA_BUILD_HTML,;t t |
12092 | 12155 | s,@EXTRA_WISH_LIBS@,$EXTRA_WISH_LIBS,;t t |
12093 | s,@EXTRA_AQUA_OBJS@,$EXTRA_AQUA_OBJS,;t t | |
12094 | s,@EXTRA_AQUA_SRCS@,$EXTRA_AQUA_SRCS,;t t | |
12095 | 12156 | s,@CFBUNDLELOCALIZATIONS@,$CFBUNDLELOCALIZATIONS,;t t |
12096 | s,@MACOSX_SRC_DIR@,$MACOSX_SRC_DIR,;t t | |
12097 | 12157 | s,@TK_RSRC_FILE@,$TK_RSRC_FILE,;t t |
12098 | 12158 | s,@WISH_RSRC_FILE@,$WISH_RSRC_FILE,;t t |
12099 | 12159 | s,@LIB_RSRC_FILE@,$LIB_RSRC_FILE,;t t |
12676 | 12736 | rm -rf $f && mkdir -p $f/$v/Resources && |
12677 | 12737 | ln -s $v/$n $v/Resources $f && ln -s ../../../$n $f/$v && |
12678 | 12738 | ln -s ../../../../$n-Info.plist $f/$v/Resources/Info.plist && |
12679 | if test $tk_aqua != no; then ln -s ../../../../$n.rsrc $f/$v/Resources; fi && | |
12739 | if test $tk_aqua = yes; then ln -s ../../../../$n.rsrc $f/$v/Resources; fi && | |
12680 | 12740 | unset n f v |
12681 | 12741 | ;; |
12682 | 12742 | esac |
403 | 403 | if (Tcl_GetIntFromObj(interp, objv[i++], &ib.height) != TCL_OK) { |
404 | 404 | goto end; |
405 | 405 | } |
406 | if (Tcl_GetIndexFromObj(interp, objv[i++], iconBitmapOptionStrings, | |
407 | "kind", TCL_EXACT, &ib.kind) != TCL_OK) { | |
406 | if (Tcl_GetIndexFromObjStruct(interp, objv[i++], iconBitmapOptionStrings, | |
407 | sizeof(char *), "kind", TCL_EXACT, &ib.kind) != TCL_OK) { | |
408 | 408 | goto end; |
409 | 409 | } |
410 | 410 | value = Tcl_GetStringFromObj(objv[i++], &len); |
258 | 258 | int index; |
259 | 259 | const char *value; |
260 | 260 | |
261 | if (Tcl_GetIndexFromObj(interp, objv[i], colorOptionStrings, "option", | |
262 | TCL_EXACT, &index) != TCL_OK) { | |
261 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], colorOptionStrings, | |
262 | sizeof(char *), "option", TCL_EXACT, &index) != TCL_OK) { | |
263 | 263 | goto end; |
264 | 264 | } |
265 | 265 | if (i + 1 == objc) { |
372 | 372 | |
373 | 373 | TkInitFileFilters(&fl); |
374 | 374 | for (i = 1; i < objc; i += 2) { |
375 | if (Tcl_GetIndexFromObj(interp, objv[i], openOptionStrings, "option", | |
376 | TCL_EXACT, &index) != TCL_OK) { | |
375 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], openOptionStrings, | |
376 | sizeof(char *), "option", TCL_EXACT, &index) != TCL_OK) { | |
377 | 377 | goto end; |
378 | 378 | } |
379 | 379 | if (i + 1 == objc) { |
501 | 501 | * The -typevariable option is not really supported. |
502 | 502 | */ |
503 | 503 | |
504 | Tcl_SetVar(interp, Tcl_GetString(typeVariablePtr), "", | |
505 | TCL_GLOBAL_ONLY); | |
504 | Tcl_SetVar2(interp, Tcl_GetString(typeVariablePtr), NULL, | |
505 | "", TCL_GLOBAL_ONLY); | |
506 | 506 | } |
507 | 507 | |
508 | 508 | end: |
551 | 551 | |
552 | 552 | TkInitFileFilters(&fl); |
553 | 553 | for (i = 1; i < objc; i += 2) { |
554 | if (Tcl_GetIndexFromObj(interp, objv[i], saveOptionStrings, "option", | |
555 | TCL_EXACT, &index) != TCL_OK) { | |
554 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], saveOptionStrings, | |
555 | sizeof(char *), "option", TCL_EXACT, &index) != TCL_OK) { | |
556 | 556 | goto end; |
557 | 557 | } |
558 | 558 | if (i + 1 == objc) { |
721 | 721 | NSInteger returnCode = NSAlertErrorReturn; |
722 | 722 | |
723 | 723 | for (i = 1; i < objc; i += 2) { |
724 | if (Tcl_GetIndexFromObj(interp, objv[i], chooseOptionStrings, "option", | |
725 | TCL_EXACT, &index) != TCL_OK) { | |
724 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], chooseOptionStrings, | |
725 | sizeof(char *), "option", TCL_EXACT, &index) != TCL_OK) { | |
726 | 726 | goto end; |
727 | 727 | } |
728 | 728 | if (i + 1 == objc) { |
938 | 938 | iconIndex = ICON_INFO; |
939 | 939 | typeIndex = TYPE_OK; |
940 | 940 | for (i = 1; i < objc; i += 2) { |
941 | if (Tcl_GetIndexFromObj(interp, objv[i], alertOptionStrings, "option", | |
942 | TCL_EXACT, &index) != TCL_OK) { | |
941 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], alertOptionStrings, | |
942 | sizeof(char *), "option", TCL_EXACT, &index) != TCL_OK) { | |
943 | 943 | goto end; |
944 | 944 | } |
945 | 945 | if (i + 1 == objc) { |
966 | 966 | break; |
967 | 967 | |
968 | 968 | case ALERT_ICON: |
969 | if (Tcl_GetIndexFromObj(interp, objv[i + 1], alertIconStrings, | |
970 | "value", TCL_EXACT, &iconIndex) != TCL_OK) { | |
969 | if (Tcl_GetIndexFromObjStruct(interp, objv[i + 1], alertIconStrings, | |
970 | sizeof(char *), "value", TCL_EXACT, &iconIndex) != TCL_OK) { | |
971 | 971 | goto end; |
972 | 972 | } |
973 | 973 | break; |
996 | 996 | break; |
997 | 997 | |
998 | 998 | case ALERT_TYPE: |
999 | if (Tcl_GetIndexFromObj(interp, objv[i + 1], alertTypeStrings, | |
1000 | "value", TCL_EXACT, &typeIndex) != TCL_OK) { | |
999 | if (Tcl_GetIndexFromObjStruct(interp, objv[i + 1], alertTypeStrings, | |
1000 | sizeof(char *), "value", TCL_EXACT, &typeIndex) != TCL_OK) { | |
1001 | 1001 | goto end; |
1002 | 1002 | } |
1003 | 1003 | break; |
1012 | 1012 | * why we do this here. |
1013 | 1013 | */ |
1014 | 1014 | |
1015 | if (Tcl_GetIndexFromObj(interp, objv[indexDefaultOption + 1], | |
1016 | alertButtonStrings, "value", TCL_EXACT, &index) != TCL_OK) { | |
1015 | if (Tcl_GetIndexFromObjStruct(interp, objv[indexDefaultOption + 1], | |
1016 | alertButtonStrings, sizeof(char *), "value", TCL_EXACT, &index) != TCL_OK) { | |
1017 | 1017 | goto end; |
1018 | 1018 | } |
1019 | 1019 | |
1356 | 1356 | for (i = 1; i < objc; i += 2) { |
1357 | 1357 | int optionIndex, len; |
1358 | 1358 | |
1359 | if (Tcl_GetIndexFromObj(interp, objv[i], fontchooserOptionStrings, | |
1360 | "option", 0, &optionIndex) != TCL_OK) { | |
1359 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], fontchooserOptionStrings, | |
1360 | sizeof(char *), "option", 0, &optionIndex) != TCL_OK) { | |
1361 | 1361 | return TCL_ERROR; |
1362 | 1362 | } |
1363 | 1363 | if (objc == 2) { |
221 | 221 | |
222 | 222 | if (interp && |
223 | 223 | Tcl_GetCommandInfo(interp, "::tk::mac::OpenApplication", &dummy)){ |
224 | int code = Tcl_GlobalEval(interp, "::tk::mac::OpenApplication"); | |
224 | int code = Tcl_EvalEx(interp, "::tk::mac::OpenApplication", -1, TCL_EVAL_GLOBAL); | |
225 | 225 | if (code != TCL_OK) { |
226 | 226 | Tcl_BackgroundException(interp, code); |
227 | 227 | } |
258 | 258 | |
259 | 259 | if (interp && Tcl_GetCommandInfo(interp, |
260 | 260 | "::tk::mac::ReopenApplication", &dummy)) { |
261 | int code = Tcl_GlobalEval(interp, "::tk::mac::ReopenApplication"); | |
261 | int code = Tcl_EvalEx(interp, "::tk::mac::ReopenApplication", -1, TCL_EVAL_GLOBAL); | |
262 | 262 | if (code != TCL_OK){ |
263 | 263 | Tcl_BackgroundException(interp, code); |
264 | 264 | } |
294 | 294 | |
295 | 295 | if (interp && |
296 | 296 | Tcl_GetCommandInfo(interp, "::tk::mac::ShowPreferences", &dummy)){ |
297 | int code = Tcl_GlobalEval(interp, "::tk::mac::ShowPreferences"); | |
297 | int code = Tcl_EvalEx(interp, "::tk::mac::ShowPreferences", -1, TCL_EVAL_GLOBAL); | |
298 | 298 | if (code != TCL_OK) { |
299 | 299 | Tcl_BackgroundException(interp, code); |
300 | 300 | } |
544 | 544 | |
545 | 545 | theErr = FSRefToDString(&file, &scriptName); |
546 | 546 | if (theErr == noErr) { |
547 | tclErr = Tcl_EvalFile(interp, Tcl_DStringValue(&scriptName)); | |
547 | tclErr = Tcl_FSEvalFileEx(interp, Tcl_DStringValue(&scriptName), NULL); | |
548 | 548 | Tcl_DStringFree(&scriptName); |
549 | 549 | } else { |
550 | 550 | sprintf(errString, "AEDoScriptHandler: file not found"); |
624 | 624 | Tcl_Interp *interp = ((KillEvent *) eventPtr)->interp; |
625 | 625 | Tcl_CmdInfo dummy; |
626 | 626 | int quit = Tcl_GetCommandInfo(interp, "::tk::mac::Quit", &dummy); |
627 | int code = Tcl_GlobalEval(interp, quit ? "::tk::mac::Quit" : "exit"); | |
627 | int code = Tcl_EvalEx(interp, quit ? "::tk::mac::Quit" : "exit", -1, TCL_EVAL_GLOBAL); | |
628 | 628 | |
629 | 629 | if (code != TCL_OK) { |
630 | 630 | /* |
362 | 362 | */ |
363 | 363 | |
364 | 364 | if (Tcl_GetStartupScript(NULL) == NULL) { |
365 | const char *intvar = Tcl_GetVar(interp, | |
366 | "tcl_interactive", TCL_GLOBAL_ONLY); | |
365 | const char *intvar = Tcl_GetVar2(interp, | |
366 | "tcl_interactive", NULL, TCL_GLOBAL_ONLY); | |
367 | 367 | |
368 | 368 | if (intvar == NULL) { |
369 | Tcl_SetVar(interp, "tcl_interactive", "1", | |
369 | Tcl_SetVar2(interp, "tcl_interactive", NULL, "1", | |
370 | 370 | TCL_GLOBAL_ONLY); |
371 | 371 | } |
372 | 372 | } |
379 | 379 | Tk_MacOSXSetupTkNotifier(); |
380 | 380 | |
381 | 381 | if (tkLibPath[0] != '\0') { |
382 | Tcl_SetVar(interp, "tk_library", tkLibPath, TCL_GLOBAL_ONLY); | |
382 | Tcl_SetVar2(interp, "tk_library", NULL, tkLibPath, TCL_GLOBAL_ONLY); | |
383 | 383 | } |
384 | 384 | |
385 | 385 | if (scriptPath[0] != '\0') { |
386 | Tcl_SetVar(interp, "auto_path", scriptPath, | |
386 | Tcl_SetVar2(interp, "auto_path", NULL, scriptPath, | |
387 | 387 | TCL_GLOBAL_ONLY|TCL_LIST_ELEMENT|TCL_APPEND_VALUE); |
388 | 388 | } |
389 | 389 | |
420 | 420 | { |
421 | 421 | const char *p, *name; |
422 | 422 | |
423 | name = Tcl_GetVar(interp, "argv0", TCL_GLOBAL_ONLY); | |
423 | name = Tcl_GetVar2(interp, "argv0", NULL, TCL_GLOBAL_ONLY); | |
424 | 424 | if ((name == NULL) || (*name == 0)) { |
425 | 425 | name = "tk"; |
426 | 426 | } else { |
215 | 215 | if (len) { |
216 | 216 | Tcl_IncrRefCount(path); |
217 | 217 | |
218 | int code = Tcl_FSEvalFile(_eventInterp, path); | |
218 | int code = Tcl_FSEvalFileEx(_eventInterp, path, NULL); | |
219 | 219 | |
220 | 220 | if (code != TCL_OK) { |
221 | 221 | Tcl_BackgroundException(_eventInterp, code); |
235 | 235 | if (path) { |
236 | 236 | Tcl_IncrRefCount(path); |
237 | 237 | |
238 | int code = Tcl_FSEvalFile(_eventInterp, path); | |
238 | int code = Tcl_FSEvalFileEx(_eventInterp, path, NULL); | |
239 | 239 | |
240 | 240 | if (code != TCL_OK) { |
241 | 241 | Tcl_BackgroundException(_eventInterp, code); |
153 | 153 | MacDrawable *macDraw; |
154 | 154 | SInt32 initialValue, minValue, maxValue; |
155 | 155 | UInt16 numTicks; |
156 | Tcl_DString buf; | |
156 | 157 | |
157 | 158 | #ifdef TK_MAC_DEBUG_SCALE |
158 | 159 | TkMacOSXDbgMsg("TkpDisplayScale"); |
170 | 171 | if ((scalePtr->flags & INVOKE_COMMAND) && (scalePtr->command != NULL)) { |
171 | 172 | Tcl_Preserve((ClientData) interp); |
172 | 173 | sprintf(string, scalePtr->format, scalePtr->value); |
173 | result = Tcl_VarEval(interp, scalePtr->command, " ", string, NULL); | |
174 | Tcl_DStringInit(&buf); | |
175 | Tcl_DStringAppend(&buf, scalePtr->command, -1); | |
176 | Tcl_DStringAppend(&buf, " ", -1); | |
177 | Tcl_DStringAppend(&buf, string, -1); | |
178 | result = Tcl_EvalEx(interp, Tcl_DStringValue(&buf), -1, 0); | |
179 | Tcl_DStringFree(&buf); | |
174 | 180 | if (result != TCL_OK) { |
175 | 181 | Tcl_AddErrorInfo(interp, "\n (command executed by scale)"); |
176 | 182 | Tcl_BackgroundException(interp, result); |
253 | 253 | TkScrollbar *scrollPtr) |
254 | 254 | { |
255 | 255 | MacScrollbar *macScrollPtr = (MacScrollbar *) scrollPtr; |
256 | NSScroller *scroller = macScrollPtr->scroller; | |
257 | [scroller setTag:(NSInteger)0]; | |
256 | 258 | |
257 | 259 | TkMacOSXMakeCollectableAndRelease(macScrollPtr->scroller); |
258 | 260 | } |
335 | 335 | for (i = 1; i < (objc - 1); ) { |
336 | 336 | stringRep = Tcl_GetString(objv[i]); |
337 | 337 | if (stringRep[0] == '-') { |
338 | if (Tcl_GetIndexFromObj(interp, objv[i], sendOptions, "option", 0, | |
339 | &index) != TCL_OK) { | |
338 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], sendOptions, | |
339 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
340 | 340 | return TCL_ERROR; |
341 | 341 | } |
342 | 342 | if (index == 0) { |
271 | 271 | int code = Tcl_EvalEx(_eventInterp, cmd, -1, TCL_EVAL_GLOBAL); |
272 | 272 | |
273 | 273 | if (code != TCL_OK) { |
274 | Tcl_BackgroundError(_eventInterp); | |
274 | Tcl_BackgroundException(_eventInterp, code); | |
275 | 275 | } |
276 | 276 | Tcl_ResetResult(_eventInterp); |
277 | 277 | } |
700 | 700 | Tcl_Preserve(protPtr); |
701 | 701 | interp = protPtr->interp; |
702 | 702 | Tcl_Preserve(interp); |
703 | result = Tcl_GlobalEval(interp, protPtr->command); | |
703 | result = Tcl_EvalEx(interp, protPtr->command, -1, TCL_EVAL_GLOBAL); | |
704 | 704 | if (result != TCL_OK) { |
705 | 705 | Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( |
706 | 706 | "\n (command for \"%s\" window manager protocol)", |
707 | 707 | Tk_GetAtomName((Tk_Window) winPtr, protocol))); |
708 | Tcl_BackgroundError(interp); | |
708 | Tcl_BackgroundException(interp, result); | |
709 | 709 | } |
710 | 710 | Tcl_Release(interp); |
711 | 711 | Tcl_Release(protPtr); |
666 | 666 | |
667 | 667 | wmPtr->flags |= WM_ABOUT_TO_MAP; |
668 | 668 | if (wmPtr->flags & WM_UPDATE_PENDING) { |
669 | Tk_CancelIdleCall(UpdateGeometryInfo, winPtr); | |
669 | Tcl_CancelIdleCall(UpdateGeometryInfo, winPtr); | |
670 | 670 | } |
671 | 671 | UpdateGeometryInfo(winPtr); |
672 | 672 | wmPtr->flags &= ~WM_ABOUT_TO_MAP; |
769 | 769 | ckfree(wmPtr->clientMachine); |
770 | 770 | } |
771 | 771 | if (wmPtr->flags & WM_UPDATE_PENDING) { |
772 | Tk_CancelIdleCall(UpdateGeometryInfo, winPtr); | |
772 | Tcl_CancelIdleCall(UpdateGeometryInfo, winPtr); | |
773 | 773 | } |
774 | 774 | |
775 | 775 | /* |
891 | 891 | return Tcl_GetBooleanFromObj(interp, objv[2], &wmTracing); |
892 | 892 | } |
893 | 893 | |
894 | if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, | |
895 | &index) != TCL_OK) { | |
894 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], optionStrings, | |
895 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
896 | 896 | return TCL_ERROR; |
897 | 897 | } |
898 | 898 | |
1292 | 1292 | } |
1293 | 1293 | Tcl_SetObjResult(interp, result); |
1294 | 1294 | } else if (objc == 4) { /* wm attributes $win -attribute */ |
1295 | if (Tcl_GetIndexFromObj(interp, objv[3], WmAttributeNames, | |
1296 | "attribute", 0, &attribute) != TCL_OK) { | |
1295 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], WmAttributeNames, | |
1296 | sizeof(char *), "attribute", 0, &attribute) != TCL_OK) { | |
1297 | 1297 | return TCL_ERROR; |
1298 | 1298 | } |
1299 | 1299 | Tcl_SetObjResult(interp, WmGetAttribute(winPtr, macWindow, attribute)); |
1301 | 1301 | int i; |
1302 | 1302 | |
1303 | 1303 | for (i = 3; i < objc; i += 2) { |
1304 | if (Tcl_GetIndexFromObj(interp, objv[i], WmAttributeNames, | |
1305 | "attribute", 0, &attribute) != TCL_OK) { | |
1304 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], WmAttributeNames, | |
1305 | sizeof(char *), "attribute", 0, &attribute) != TCL_OK) { | |
1306 | 1306 | return TCL_ERROR; |
1307 | 1307 | } |
1308 | 1308 | if (WmSetAttribute(winPtr, macWindow, interp, attribute, objv[i+1]) |
1612 | 1612 | return TCL_OK; |
1613 | 1613 | } |
1614 | 1614 | |
1615 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
1616 | &index) != TCL_OK) { | |
1615 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
1616 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
1617 | 1617 | return TCL_ERROR; |
1618 | 1618 | } |
1619 | 1619 | if (index == OPT_ACTIVE) { |
2671 | 2671 | if (*Tcl_GetString(objv[3]) == '\0') { |
2672 | 2672 | wmPtr->sizeHintsFlags &= ~(USPosition|PPosition); |
2673 | 2673 | } else { |
2674 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
2675 | &index) != TCL_OK) { | |
2674 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
2675 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
2676 | 2676 | return TCL_ERROR; |
2677 | 2677 | } |
2678 | 2678 | if (index == OPT_USER) { |
2912 | 2912 | if (*Tcl_GetString(objv[3]) == '\0') { |
2913 | 2913 | wmPtr->sizeHintsFlags &= ~(USSize|PSize); |
2914 | 2914 | } else { |
2915 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
2916 | &index) != TCL_OK) { | |
2915 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
2916 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
2917 | 2917 | return TCL_ERROR; |
2918 | 2918 | } |
2919 | 2919 | if (index == OPT_USER) { |
3041 | 3041 | |
3042 | 3042 | ckfree(windows); |
3043 | 3043 | |
3044 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
3045 | &index) != TCL_OK) { | |
3044 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
3045 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
3046 | 3046 | return TCL_ERROR; |
3047 | 3047 | } |
3048 | 3048 | if (index == OPT_ISABOVE) { |
3108 | 3108 | return TCL_ERROR; |
3109 | 3109 | } |
3110 | 3110 | |
3111 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
3112 | &index) != TCL_OK) { | |
3111 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
3112 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
3113 | 3113 | return TCL_ERROR; |
3114 | 3114 | } |
3115 | 3115 | |
4475 | 4475 | |
4476 | 4476 | if (!(wmPtr->flags & WM_NEVER_MAPPED)) { |
4477 | 4477 | if (wmPtr->flags & WM_UPDATE_PENDING) { |
4478 | Tk_CancelIdleCall(UpdateGeometryInfo, winPtr); | |
4478 | Tcl_CancelIdleCall(UpdateGeometryInfo, winPtr); | |
4479 | 4479 | } |
4480 | 4480 | UpdateGeometryInfo(winPtr); |
4481 | 4481 | } |
5131 | 5131 | return TCL_ERROR; |
5132 | 5132 | } |
5133 | 5133 | |
5134 | if (Tcl_GetIndexFromObj(interp, objv[1], subcmds, "option", 0, | |
5135 | &index) != TCL_OK) { | |
5134 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], subcmds, | |
5135 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
5136 | 5136 | return TCL_ERROR; |
5137 | 5137 | } |
5138 | 5138 | if (((enum SubCmds) index) == TKMWS_STYLE) { |
84 | 84 | test bitmap-4.1 {FreeBitmapObjProc} -constraints { |
85 | 85 | testbitmap |
86 | 86 | } -body { |
87 | set x [format questhead] | |
87 | set x [join questhead] | |
88 | 88 | button .b -bitmap $x |
89 | set y [format questhead] | |
89 | set y [join questhead] | |
90 | 90 | .b configure -bitmap $y |
91 | set z [format questhead] | |
91 | set z [join questhead] | |
92 | 92 | .b configure -bitmap $z |
93 | 93 | set result {} |
94 | 94 | lappend result [testbitmap questhead] |
131 | 131 | } -setup { |
132 | 132 | set result {} |
133 | 133 | } -body { |
134 | set x [format purple] | |
134 | set x [join purple] | |
135 | 135 | button .b -bg $x -text .b1 |
136 | set y [format purple] | |
136 | set y [join purple] | |
137 | 137 | .b configure -bg $y |
138 | set z [format purple] | |
138 | set z [join purple] | |
139 | 139 | .b configure -bg $z |
140 | 140 | lappend result [testborder purple] |
141 | 141 | set x red |
15 | 15 | # chain2 depends on chain1. If chain1 is deleted first, the |
16 | 16 | # delete of chain2 will crash. |
17 | 17 | deleteWindows |
18 | foreach t {alltypes chain2 chain1 configerror internal new notenoughparams | |
19 | twowindows} { | |
18 | foreach t {alltypes chain3 chain2 chain1 configerror internal | |
19 | new notenoughparams twowindows} { | |
20 | 20 | while {[testobjconfig info $t] != ""} { |
21 | 21 | testobjconfig delete $t |
22 | 22 | } |
125 | 125 | set x {} |
126 | 126 | testobjconfig chain1 .a |
127 | 127 | testobjconfig chain2 .b |
128 | testobjconfig chain2 .c | |
128 | testobjconfig chain3 .c | |
129 | 129 | deleteWindows |
130 | testobjconfig delete chain2 | |
130 | testobjconfig delete chain3 | |
131 | 131 | lappend x [testobjconfig info chain2] [testobjconfig info chain1] |
132 | 132 | testobjconfig delete chain2 |
133 | 133 | lappend x [testobjconfig info chain2] [testobjconfig info chain1] |
134 | 134 | } -cleanup { |
135 | 135 | killTables |
136 | } -result {{1 4 -three 2 2 -one} {2 2 -one} {} {1 2 -one}} | |
136 | } -result {{3 4 -three 2 2 -one} {2 2 -one} {} {2 2 -one}} | |
137 | 137 | |
138 | 138 | # No tests for DestroyOptionHashTable; couldn't figure out how to test. |
139 | 139 |
144 | 144 | test cursor-4.1 {FreeCursorObjProc} -constraints { |
145 | 145 | testcursor |
146 | 146 | } -body { |
147 | set x [format heart] | |
147 | set x [join heart] | |
148 | 148 | button .b -cursor $x |
149 | set y [format heart] | |
149 | set y [join heart] | |
150 | 150 | .b configure -cursor $y |
151 | set z [format heart] | |
151 | set z [join heart] | |
152 | 152 | .b configure -cursor $z |
153 | 153 | set result {} |
154 | 154 | lappend result [testcursor heart] |
18 | 18 | wm geom .t +0+0 |
19 | 19 | update idletasks |
20 | 20 | |
21 | case [tk windowingsystem] { | |
21 | switch [tk windowingsystem] { | |
22 | 22 | x11 {set fixed "fixed"} |
23 | 23 | win32 {set fixed "courier 12"} |
24 | classic - | |
25 | 24 | aqua {set fixed "monaco 9"} |
26 | 25 | } |
27 | 26 | |
798 | 797 | destroy .b1 |
799 | 798 | set result {} |
800 | 799 | } -body { |
801 | set x [format {Courier 12}] | |
800 | set x [join {Courier 12} { }] | |
802 | 801 | button .b1 -font $x |
803 | set y [format {Courier 12}] | |
802 | set y [join {Courier 12} { }] | |
804 | 803 | .b1 configure -font $y |
805 | set z [format {Courier 12}] | |
804 | set z [join {Courier 12} { }] | |
806 | 805 | .b1 configure -font $z |
807 | 806 | lappend result [testfont counts {Courier 12}] |
808 | 807 | set x red |
3056 | 3056 | destroy .l |
3057 | 3057 | } -result {1 1 2} |
3058 | 3058 | |
3059 | test listbox-30.1 {Bug 3607326} -setup { | |
3060 | destroy .l | |
3061 | unset -nocomplain a | |
3062 | } -body { | |
3063 | array set a {} | |
3064 | listbox .l -listvariable a | |
3065 | } -cleanup { | |
3066 | destroy .l | |
3067 | unset -nocomplain a | |
3068 | } -result * -match glob -returnCodes error | |
3069 | ||
3059 | 3070 | resetGridInfo |
3060 | 3071 | deleteWindows |
3061 | 3072 | option clear |
8 | 8 | namespace import ::tcltest::* |
9 | 9 | tcltest::configure {*}$argv |
10 | 10 | tcltest::loadTestedCommands |
11 | testConstraint unthreaded [expr { | |
12 | (![info exist tcl_platform(threaded)] || !$tcl_platform(threaded)) | |
13 | }] | |
14 | 11 | namespace import ::tk::test::loadTkCommand |
15 | 12 | update |
16 | 13 | |
191 | 188 | list $error $msg |
192 | 189 | } -result {0 {}} |
193 | 190 | |
194 | # window-2.9 deadlocks threaded Tk [Bug 1715716] | |
195 | 191 | test window-2.9 {Tk_DestroyWindow, Destroy bindings evaluated after exit} -constraints { |
196 | unixOrWin unthreaded | |
192 | unixOrWin | |
197 | 193 | } -body { |
198 | 194 | set code [loadTkCommand] |
199 | 195 | append code { |
398 | 398 | tkMacOSXMenubutton.o tkMacOSXMenus.o tkMacOSXMouseEvent.o \ |
399 | 399 | tkMacOSXNotify.o tkMacOSXRegion.o tkMacOSXScrlbr.o tkMacOSXSend.o \ |
400 | 400 | tkMacOSXSubwindows.o tkMacOSXWindowEvent.o \ |
401 | tkMacOSXWm.o tkMacOSXXStubs.o @EXTRA_AQUA_OBJS@ \ | |
401 | tkMacOSXWm.o tkMacOSXXStubs.o \ | |
402 | 402 | tkFileFilter.o tkMacWinMenu.o tkPointer.o tkUnix3d.o tkUnixScale.o \ |
403 | 403 | xcolors.o xdraw.o xgc.o ximage.o xutil.o \ |
404 | 404 | ttkMacOSXTheme.o |
526 | 526 | $(MAC_OSX_DIR)/tkMacOSXSend.c $(MAC_OSX_DIR)/tkMacOSXSubwindows.c \ |
527 | 527 | $(MAC_OSX_DIR)/tkMacOSXTest.c $(MAC_OSX_DIR)/tkMacOSXWindowEvent.c \ |
528 | 528 | $(MAC_OSX_DIR)/tkMacOSXWm.c $(MAC_OSX_DIR)/tkMacOSXXStubs.c \ |
529 | @EXTRA_AQUA_SRCS@ \ | |
530 | 529 | $(GENERIC_DIR)/tkFileFilter.c $(GENERIC_DIR)/tkMacWinMenu.c \ |
531 | 530 | $(GENERIC_DIR)/tkPointer.c $(UNIX_DIR)/tkUnix3d.c \ |
532 | 531 | $(UNIX_DIR)/tkUnixScale.c $(XLIB_DIR)/xcolors.c $(XLIB_DIR)/xdraw.c \ |
547 | 546 | |
548 | 547 | AQUA_PRIVATE_HDRS = $(MAC_OSX_DIR)/tkMacOSXPort.h $(MAC_OSX_DIR)/tkMacOSXInt.h |
549 | 548 | |
550 | X11_PRIVATE_HDRS = $(UNIX_DIR)/tkUnixPort.h $(UNIX_DIR)/tkUnixInt.h | |
549 | X11_PRIVATE_HDRS = $(UNIX_DIR)/tkUnixPort.h $(UNIX_DIR)/tkUnixInt.h $(GENERIC_DIR)/tkIntXlibDecls.h | |
551 | 550 | |
552 | 551 | # Currently private, eventually public |
553 | 552 | TTK_HDRS = $(TTK_DIR)/ttkTheme.h $(TTK_DIR)/ttkDecls.h |
615 | 614 | -f "${TOP_DIR}/win/tk${MAJOR_VERSION}${MINOR_VERSION}.dll"; then \ |
616 | 615 | cp "${TOP_DIR}/win/tk${MAJOR_VERSION}${MINOR_VERSION}.dll" .; \ |
617 | 616 | fi |
618 | ${CC} ${CFLAGS} ${LDFLAGS} $(WISH_OBJS) @WISH_BUILD_LIB_SPEC@ \ | |
619 | $(CC_SEARCH_FLAGS) -o ${WISH_EXE} | |
617 | ${CC} ${CFLAGS} ${LDFLAGS} $(WISH_OBJS) @TK_BUILD_LIB_SPEC@ \ | |
618 | $(WISH_LIBS) $(CC_SEARCH_FLAGS) -o ${WISH_EXE} | |
620 | 619 | |
621 | 620 | # Resetting the LIB_RUNTIME_DIR below is required so that |
622 | 621 | # the generated tktest executable gets the build directory |
727 | 726 | echo "Creating package index $(PKG_INDEX)"; \ |
728 | 727 | rm -f "$(PKG_INDEX)"; \ |
729 | 728 | (\ |
730 | echo "if {[catch {package present Tcl $(TCLVERSION)$(TCLPATCHL)}]} return";\ | |
729 | echo "if {[catch {package present Tcl 8.6.0}]} return";\ | |
731 | 730 | relative=`echo | awk '{ORS=" "; split("$(TK_PKG_DIR)",a,"/"); for (f in a) {print ".."}}'`;\ |
732 | 731 | if test "x$(DLL_INSTALL_DIR)" != "x$(BIN_INSTALL_DIR)"; then \ |
733 | echo "package ifneeded Tk $(MAJOR_VERSION).$(MINOR_VERSION)$(PATCH_LEVEL) [list load [file join \$$dir $${relative}$(TK_LIB_FILE)] Tk]";\ | |
732 | echo "package ifneeded Tk $(MAJOR_VERSION).$(MINOR_VERSION)$(PATCH_LEVEL) [list load [file normalize [file join \$$dir $${relative}$(TK_LIB_FILE)]] Tk]";\ | |
734 | 733 | else \ |
735 | 734 | echo "if {(\$$::tcl_platform(platform) eq \"unix\") && ([info exists ::env(DISPLAY)]";\ |
736 | 735 | echo " || ([info exists ::argv] && (\"-display\" in \$$::argv)))} {";\ |
737 | echo " package ifneeded Tk $(MAJOR_VERSION).$(MINOR_VERSION)$(PATCH_LEVEL) [list load [file join \$$dir $${relative}.. bin $(TK_LIB_FILE)] Tk]";\ | |
736 | echo " package ifneeded Tk $(MAJOR_VERSION).$(MINOR_VERSION)$(PATCH_LEVEL) [list load [file normalize [file join \$$dir $${relative}.. bin $(TK_LIB_FILE)]] Tk]";\ | |
738 | 737 | echo "} else {";\ |
739 | echo " package ifneeded Tk $(MAJOR_VERSION).$(MINOR_VERSION)$(PATCH_LEVEL) [list load [file join \$$dir $${relative}.. bin tk${MAJOR_VERSION}${MINOR_VERSION}.dll] Tk]";\ | |
738 | echo " package ifneeded Tk $(MAJOR_VERSION).$(MINOR_VERSION)$(PATCH_LEVEL) [list load [file normalize [file join \$$dir $${relative}.. bin tk${MAJOR_VERSION}${MINOR_VERSION}.dll]] Tk]";\ | |
740 | 739 | echo "}";\ |
741 | 740 | fi \ |
742 | 741 | ) > "$(PKG_INDEX)"; \ |
747 | 746 | @if test -f "tk${MAJOR_VERSION}${MINOR_VERSION}.dll"; then \ |
748 | 747 | $(INSTALL_LIBRARY) "tk${MAJOR_VERSION}${MINOR_VERSION}.dll" "$(DLL_INSTALL_DIR)";\ |
749 | 748 | chmod 555 "$(DLL_INSTALL_DIR)/tk${MAJOR_VERSION}${MINOR_VERSION}.dll";\ |
749 | $(INSTALL_LIBRARY) "../win/libtk${MAJOR_VERSION}${MINOR_VERSION}.a" "$(LIB_INSTALL_DIR)";\ | |
750 | chmod 555 "$(LIB_INSTALL_DIR)/libtk${MAJOR_VERSION}${MINOR_VERSION}.a";\ | |
750 | 751 | fi |
751 | 752 | @echo "Installing ${WISH_EXE} as $(BIN_INSTALL_DIR)/wish$(VERSION)${EXE_SUFFIX}" |
752 | 753 | @$(INSTALL_PROGRAM) ${WISH_EXE} "$(BIN_INSTALL_DIR)/wish$(VERSION)${EXE_SUFFIX}" |
1593 | 1594 | $(MAC_OSX_DIR)/*.icns $(MAC_OSX_DIR)/*.tiff \ |
1594 | 1595 | $(MAC_OSX_DIR)/*.[ch] $(MAC_OSX_DIR)/*.in \ |
1595 | 1596 | $(MAC_OSX_DIR)/*.ac $(MAC_OSX_DIR)/*.xcconfig \ |
1596 | $(MAC_OSX_DIR)/*.sdef $(MAC_OSX_DIR)/configure \ | |
1597 | $(MAC_OSX_DIR)/*.sdef $(MAC_OSX_DIR)/configure \ | |
1597 | 1598 | $(DISTDIR)/macosx |
1598 | 1599 | cp -p $(TOP_DIR)/license.terms $(DISTDIR)/macosx |
1599 | 1600 | mkdir $(DISTDIR)/macosx/Tk.xcode |
307 | 307 | # include <unistd.h> |
308 | 308 | #endif" |
309 | 309 | |
310 | ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS TCL_VERSION TCL_PATCH_LEVEL TCL_BIN_DIR TCL_SRC_DIR TCL_LIB_FILE TCL_LIB_FLAG TCL_LIB_SPEC TCL_STUB_LIB_FILE TCL_STUB_LIB_FLAG TCL_STUB_LIB_SPEC TCLSH_PROG BUILD_TCLSH MAN_FLAGS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP TCL_THREADS RANLIB ac_ct_RANLIB AR ac_ct_AR LIBOBJS TCL_LIBS DL_LIBS DL_OBJS PLAT_OBJS PLAT_SRCS LDAIX_SRC CFLAGS_DEBUG CFLAGS_OPTIMIZE CFLAGS_WARNING LDFLAGS_DEBUG LDFLAGS_OPTIMIZE CC_SEARCH_FLAGS LD_SEARCH_FLAGS STLIB_LD SHLIB_LD TCL_SHLIB_LD_EXTRAS TK_SHLIB_LD_EXTRAS SHLIB_LD_LIBS SHLIB_CFLAGS SHLIB_SUFFIX MAKE_LIB MAKE_STUB_LIB INSTALL_LIB DLL_INSTALL_DIR INSTALL_STUB_LIB CFLAGS_DEFAULT LDFLAGS_DEFAULT XFT_CFLAGS XFT_LIBS UNIX_FONT_OBJS TK_VERSION TK_MAJOR_VERSION TK_MINOR_VERSION TK_PATCH_LEVEL TK_YEAR TK_LIB_FILE TK_LIB_FLAG TK_LIB_SPEC TK_STUB_LIB_FILE TK_STUB_LIB_FLAG TK_STUB_LIB_SPEC TK_STUB_LIB_PATH TK_INCLUDE_SPEC TK_BUILD_STUB_LIB_SPEC TK_BUILD_STUB_LIB_PATH TK_SRC_DIR TK_SHARED_BUILD LD_LIBRARY_PATH_VAR TK_BUILD_LIB_SPEC WISH_BUILD_LIB_SPEC TCL_STUB_FLAGS XINCLUDES XLIBSW LOCALES TK_WINDOWINGSYSTEM TK_PKG_DIR TK_LIBRARY LIB_RUNTIME_DIR PRIVATE_INCLUDE_DIR HTML_DIR EXTRA_CC_SWITCHES EXTRA_APP_CC_SWITCHES EXTRA_INSTALL EXTRA_INSTALL_BINARIES EXTRA_BUILD_HTML EXTRA_WISH_LIBS EXTRA_AQUA_OBJS EXTRA_AQUA_SRCS CFBUNDLELOCALIZATIONS MACOSX_SRC_DIR TK_RSRC_FILE WISH_RSRC_FILE LIB_RSRC_FILE APP_RSRC_FILE REZ REZ_FLAGS LTLIBOBJS' | |
310 | ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS TCL_VERSION TCL_PATCH_LEVEL TCL_BIN_DIR TCL_SRC_DIR TCL_LIB_FILE TCL_LIB_FLAG TCL_LIB_SPEC TCL_STUB_LIB_FILE TCL_STUB_LIB_FLAG TCL_STUB_LIB_SPEC TCLSH_PROG BUILD_TCLSH MAN_FLAGS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP TCL_THREADS RANLIB ac_ct_RANLIB AR ac_ct_AR LIBOBJS TCL_LIBS DL_LIBS DL_OBJS PLAT_OBJS PLAT_SRCS LDAIX_SRC CFLAGS_DEBUG CFLAGS_OPTIMIZE CFLAGS_WARNING LDFLAGS_DEBUG LDFLAGS_OPTIMIZE CC_SEARCH_FLAGS LD_SEARCH_FLAGS STLIB_LD SHLIB_LD TCL_SHLIB_LD_EXTRAS TK_SHLIB_LD_EXTRAS SHLIB_LD_LIBS SHLIB_CFLAGS SHLIB_SUFFIX MAKE_LIB MAKE_STUB_LIB INSTALL_LIB DLL_INSTALL_DIR INSTALL_STUB_LIB CFLAGS_DEFAULT LDFLAGS_DEFAULT XFT_CFLAGS XFT_LIBS UNIX_FONT_OBJS TK_VERSION TK_MAJOR_VERSION TK_MINOR_VERSION TK_PATCH_LEVEL TK_YEAR TK_LIB_FILE TK_LIB_FLAG TK_LIB_SPEC TK_STUB_LIB_FILE TK_STUB_LIB_FLAG TK_STUB_LIB_SPEC TK_STUB_LIB_PATH TK_INCLUDE_SPEC TK_BUILD_STUB_LIB_SPEC TK_BUILD_STUB_LIB_PATH TK_SRC_DIR TK_SHARED_BUILD LD_LIBRARY_PATH_VAR TK_BUILD_LIB_SPEC TCL_STUB_FLAGS XINCLUDES XLIBSW LOCALES TK_WINDOWINGSYSTEM TK_PKG_DIR TK_LIBRARY LIB_RUNTIME_DIR PRIVATE_INCLUDE_DIR HTML_DIR EXTRA_CC_SWITCHES EXTRA_APP_CC_SWITCHES EXTRA_INSTALL EXTRA_INSTALL_BINARIES EXTRA_BUILD_HTML EXTRA_WISH_LIBS CFBUNDLELOCALIZATIONS TK_RSRC_FILE WISH_RSRC_FILE LIB_RSRC_FILE APP_RSRC_FILE REZ REZ_FLAGS LTLIBOBJS' | |
311 | 311 | ac_subst_files='' |
312 | 312 | |
313 | 313 | # Initialize some variables set by options. |
860 | 860 | --enable-load allow dynamic loading and "load" command (default: |
861 | 861 | on) |
862 | 862 | --enable-symbols build with debugging symbols (default: off) |
863 | --enable-aqua=yes|carbon|no | |
864 | use Aqua windowingsystem on Mac OS X (default: no) | |
863 | --enable-aqua=yes|no use Aqua windowingsystem on Mac OS X (default: no) | |
864 | --enable-xft use freetype/fontconfig/xft (default: on) | |
865 | 865 | --enable-xss use XScreenSaver for activity timer (default: on) |
866 | --enable-xft use freetype/fontconfig/xft (default: on) | |
867 | 866 | --enable-framework package shared libraries in MacOSX frameworks |
868 | 867 | (default: off) |
869 | 868 | |
1338 | 1337 | TK_VERSION=8.6 |
1339 | 1338 | TK_MAJOR_VERSION=8 |
1340 | 1339 | TK_MINOR_VERSION=6 |
1341 | TK_PATCH_LEVEL=".0" | |
1340 | TK_PATCH_LEVEL=".1" | |
1342 | 1341 | VERSION=${TK_VERSION} |
1343 | 1342 | LOCALES="cs da de el en en_gb eo es fr hu it nl pl pt ru sv" |
1344 | 1343 | |
4035 | 4034 | # Does the pthread-implementation provide |
4036 | 4035 | # 'pthread_attr_setstacksize' ? |
4037 | 4036 | |
4038 | for ac_func in pthread_attr_setstacksize | |
4037 | ac_saved_libs=$LIBS | |
4038 | LIBS="$LIBS $THREADS_LIBS" | |
4039 | ||
4040 | ||
4041 | for ac_func in pthread_attr_setstacksize pthread_atfork | |
4039 | 4042 | do |
4040 | 4043 | as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` |
4041 | 4044 | echo "$as_me:$LINENO: checking for $ac_func" >&5 |
4136 | 4139 | fi |
4137 | 4140 | done |
4138 | 4141 | |
4142 | LIBS=$ac_saved_libs | |
4139 | 4143 | else |
4140 | 4144 | TCL_THREADS=0 |
4141 | 4145 | fi |
4459 | 4463 | |
4460 | 4464 | cat >>confdefs.h <<\_ACEOF |
4461 | 4465 | #define MODULE_SCOPE extern __attribute__((__visibility__("hidden"))) |
4466 | _ACEOF | |
4467 | ||
4468 | ||
4469 | cat >>confdefs.h <<\_ACEOF | |
4470 | #define HAVE_HIDDEN 1 | |
4462 | 4471 | _ACEOF |
4463 | 4472 | |
4464 | 4473 | |
4908 | 4917 | SHLIB_CFLAGS="" |
4909 | 4918 | SHLIB_LD='${CC} -shared' |
4910 | 4919 | SHLIB_SUFFIX=".dll" |
4911 | DL_OBJS="tclLoadDl.o tclWinError.o" | |
4920 | DL_OBJS="tclLoadDl.o" | |
4921 | PLAT_OBJS='${CYGWIN_OBJS}' | |
4922 | PLAT_SRCS='${CYGWIN_SRCS}' | |
4912 | 4923 | DL_LIBS="-ldl" |
4913 | 4924 | CC_SEARCH_FLAGS="" |
4914 | 4925 | LD_SEARCH_FLAGS="" |
5422 | 5433 | fi |
5423 | 5434 | |
5424 | 5435 | ;; |
5425 | Linux*) | |
5436 | Linux*|GNU*|NetBSD-Debian) | |
5426 | 5437 | SHLIB_CFLAGS="-fPIC" |
5427 | 5438 | SHLIB_SUFFIX=".so" |
5428 | 5439 | |
5525 | 5536 | |
5526 | 5537 | if test x"${USE_COMPAT}" != x; then |
5527 | 5538 | CFLAGS="$CFLAGS -fno-inline" |
5528 | fi | |
5529 | ||
5530 | ;; | |
5531 | GNU*) | |
5532 | SHLIB_CFLAGS="-fPIC" | |
5533 | SHLIB_SUFFIX=".so" | |
5534 | ||
5535 | SHLIB_LD='${CC} -shared' | |
5536 | DL_OBJS="" | |
5537 | DL_LIBS="-ldl" | |
5538 | LDFLAGS="$LDFLAGS -Wl,--export-dynamic" | |
5539 | CC_SEARCH_FLAGS="" | |
5540 | LD_SEARCH_FLAGS="" | |
5541 | if test "`uname -m`" = "alpha"; then | |
5542 | CFLAGS="$CFLAGS -mieee" | |
5543 | 5539 | fi |
5544 | 5540 | |
5545 | 5541 | ;; |
5579 | 5575 | CC_SEARCH_FLAGS="" |
5580 | 5576 | LD_SEARCH_FLAGS="" |
5581 | 5577 | ;; |
5582 | NetBSD-1.*|FreeBSD-[1-2].*) | |
5583 | SHLIB_CFLAGS="-fPIC" | |
5584 | SHLIB_LD="ld -Bshareable -x" | |
5585 | SHLIB_SUFFIX=".so" | |
5586 | DL_OBJS="tclLoadDl.o" | |
5587 | DL_LIBS="" | |
5588 | if test $doRpath = yes; then | |
5589 | ||
5590 | CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' | |
5591 | LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' | |
5592 | fi | |
5593 | ||
5594 | echo "$as_me:$LINENO: checking for ELF" >&5 | |
5595 | echo $ECHO_N "checking for ELF... $ECHO_C" >&6 | |
5596 | if test "${tcl_cv_ld_elf+set}" = set; then | |
5597 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
5598 | else | |
5599 | ||
5600 | cat >conftest.$ac_ext <<_ACEOF | |
5601 | /* confdefs.h. */ | |
5602 | _ACEOF | |
5603 | cat confdefs.h >>conftest.$ac_ext | |
5604 | cat >>conftest.$ac_ext <<_ACEOF | |
5605 | /* end confdefs.h. */ | |
5606 | ||
5607 | #ifdef __ELF__ | |
5608 | yes | |
5609 | #endif | |
5610 | ||
5611 | _ACEOF | |
5612 | if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | | |
5613 | $EGREP "yes" >/dev/null 2>&1; then | |
5614 | tcl_cv_ld_elf=yes | |
5615 | else | |
5616 | tcl_cv_ld_elf=no | |
5617 | fi | |
5618 | rm -f conftest* | |
5619 | ||
5620 | fi | |
5621 | echo "$as_me:$LINENO: result: $tcl_cv_ld_elf" >&5 | |
5622 | echo "${ECHO_T}$tcl_cv_ld_elf" >&6 | |
5623 | if test $tcl_cv_ld_elf = yes; then | |
5624 | ||
5625 | SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' | |
5626 | ||
5627 | else | |
5628 | ||
5629 | SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' | |
5630 | ||
5631 | fi | |
5632 | ||
5633 | ||
5634 | # Ancient FreeBSD doesn't handle version numbers with dots. | |
5635 | ||
5636 | UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' | |
5637 | TCL_LIB_VERSIONS_OK=nodots | |
5638 | ;; | |
5639 | 5578 | OpenBSD-*) |
5640 | 5579 | arch=`arch -s` |
5641 | 5580 | case "$arch" in |
5642 | m88k|vax) | |
5581 | vax) | |
5643 | 5582 | # Equivalent using configure option --disable-load |
5644 | 5583 | # Step 4 will set the necessary variables |
5645 | 5584 | DL_OBJS="" |
5646 | 5585 | SHLIB_LD_LIBS="" |
5586 | LDFLAGS="" | |
5647 | 5587 | ;; |
5648 | 5588 | *) |
5649 | 5589 | SHLIB_CFLAGS="-fPIC" |
5658 | 5598 | |
5659 | 5599 | LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} |
5660 | 5600 | SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' |
5601 | LDFLAGS="-Wl,-export-dynamic" | |
5661 | 5602 | ;; |
5662 | 5603 | esac |
5663 | 5604 | case "$arch" in |
5664 | m88k|vax) | |
5605 | vax) | |
5665 | 5606 | CFLAGS_OPTIMIZE="-O1" |
5666 | 5607 | ;; |
5667 | 5608 | sh) |
5671 | 5612 | CFLAGS_OPTIMIZE="-O2" |
5672 | 5613 | ;; |
5673 | 5614 | esac |
5674 | echo "$as_me:$LINENO: checking for ELF" >&5 | |
5675 | echo $ECHO_N "checking for ELF... $ECHO_C" >&6 | |
5676 | if test "${tcl_cv_ld_elf+set}" = set; then | |
5677 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
5678 | else | |
5679 | ||
5680 | cat >conftest.$ac_ext <<_ACEOF | |
5681 | /* confdefs.h. */ | |
5682 | _ACEOF | |
5683 | cat confdefs.h >>conftest.$ac_ext | |
5684 | cat >>conftest.$ac_ext <<_ACEOF | |
5685 | /* end confdefs.h. */ | |
5686 | ||
5687 | #ifdef __ELF__ | |
5688 | yes | |
5689 | #endif | |
5690 | ||
5691 | _ACEOF | |
5692 | if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | | |
5693 | $EGREP "yes" >/dev/null 2>&1; then | |
5694 | tcl_cv_ld_elf=yes | |
5695 | else | |
5696 | tcl_cv_ld_elf=no | |
5697 | fi | |
5698 | rm -f conftest* | |
5699 | ||
5700 | fi | |
5701 | echo "$as_me:$LINENO: result: $tcl_cv_ld_elf" >&5 | |
5702 | echo "${ECHO_T}$tcl_cv_ld_elf" >&6 | |
5703 | if test $tcl_cv_ld_elf = yes; then | |
5704 | ||
5705 | LDFLAGS=-Wl,-export-dynamic | |
5706 | ||
5707 | else | |
5708 | LDFLAGS="" | |
5709 | fi | |
5710 | ||
5711 | 5615 | if test "${TCL_THREADS}" = "1"; then |
5712 | 5616 | |
5713 | 5617 | # On OpenBSD: Compile with -pthread |
5721 | 5625 | UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' |
5722 | 5626 | TCL_LIB_VERSIONS_OK=nodots |
5723 | 5627 | ;; |
5724 | NetBSD-*|FreeBSD-[3-4].*) | |
5725 | # FreeBSD 3.* and greater have ELF. | |
5726 | # NetBSD 2.* has ELF and can use 'cc -shared' to build shared libs | |
5628 | NetBSD-*) | |
5629 | # NetBSD has ELF and can use 'cc -shared' to build shared libs | |
5727 | 5630 | SHLIB_CFLAGS="-fPIC" |
5728 | 5631 | SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' |
5729 | 5632 | SHLIB_SUFFIX=".so" |
5745 | 5648 | |
5746 | 5649 | fi |
5747 | 5650 | |
5748 | case $system in | |
5749 | FreeBSD-3.*) | |
5750 | # FreeBSD-3 doesn't handle version numbers with dots. | |
5751 | UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' | |
5752 | SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' | |
5753 | TCL_LIB_VERSIONS_OK=nodots | |
5754 | ;; | |
5755 | esac | |
5756 | 5651 | ;; |
5757 | 5652 | FreeBSD-*) |
5758 | 5653 | # This configuration from FreeBSD Ports. |
5759 | 5654 | SHLIB_CFLAGS="-fPIC" |
5760 | 5655 | SHLIB_LD="${CC} -shared" |
5761 | TCL_SHLIB_LD_EXTRAS="-soname \$@" | |
5656 | TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$@" | |
5762 | 5657 | SHLIB_SUFFIX=".so" |
5763 | 5658 | DL_OBJS="tclLoadDl.o" |
5764 | 5659 | DL_LIBS="" |
5766 | 5661 | if test $doRpath = yes; then |
5767 | 5662 | |
5768 | 5663 | CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' |
5769 | LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' | |
5664 | LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' | |
5770 | 5665 | fi |
5771 | 5666 | |
5772 | 5667 | if test "${TCL_THREADS}" = "1"; then |
6975 | 6870 | _ACEOF |
6976 | 6871 | |
6977 | 6872 | |
6978 | cat >>confdefs.h <<\_ACEOF | |
6979 | #define NO_VIZ | |
6980 | _ACEOF | |
6981 | ||
6982 | ||
6983 | 6873 | fi |
6984 | 6874 | |
6985 | 6875 | |
7692 | 7582 | cat >>conftest.$ac_ext <<_ACEOF |
7693 | 7583 | /* end confdefs.h. */ |
7694 | 7584 | #include <sys/types.h> |
7695 | #include <sys/dirent.h> | |
7585 | #include <dirent.h> | |
7696 | 7586 | int |
7697 | 7587 | main () |
7698 | 7588 | { |
9332 | 9222 | # On Mac OS X, we can build either with X11 or with Aqua |
9333 | 9223 | #-------------------------------------------------------------------- |
9334 | 9224 | |
9335 | MACOSX_SRC_DIR=macosx | |
9336 | 9225 | if test "`uname -s`" = "Darwin" ; then |
9337 | 9226 | echo "$as_me:$LINENO: checking whether to use Aqua" >&5 |
9338 | 9227 | echo $ECHO_N "checking whether to use Aqua... $ECHO_C" >&6 |
9345 | 9234 | fi; |
9346 | 9235 | if test $tk_aqua = yes -o $tk_aqua = cocoa; then |
9347 | 9236 | tk_aqua=yes |
9237 | if test $tcl_corefoundation = no; then | |
9238 | { echo "$as_me:$LINENO: WARNING: Aqua can only be used when CoreFoundation is available" >&5 | |
9239 | echo "$as_me: WARNING: Aqua can only be used when CoreFoundation is available" >&2;} | |
9240 | tk_aqua=no | |
9241 | fi | |
9348 | 9242 | if test ! -d /System/Library/Frameworks/Cocoa.framework; then |
9349 | 9243 | { echo "$as_me:$LINENO: WARNING: Aqua can only be used when Cocoa is available" >&5 |
9350 | 9244 | echo "$as_me: WARNING: Aqua can only be used when Cocoa is available" >&2;} |
9355 | 9249 | echo "$as_me: WARNING: Aqua requires Mac OS X 10.5 or later" >&2;} |
9356 | 9250 | tk_aqua=no |
9357 | 9251 | fi |
9358 | elif test $tk_aqua = carbon; then | |
9359 | if test ! -d /System/Library/Frameworks/Carbon.framework; then | |
9360 | { echo "$as_me:$LINENO: WARNING: Aqua can only be used when Carbon is available" >&5 | |
9361 | echo "$as_me: WARNING: Aqua can only be used when Carbon is available" >&2;} | |
9362 | tk_aqua=no | |
9363 | fi | |
9364 | if test "`uname -r | awk -F. '{print $1}'`" -lt 6; then | |
9365 | { echo "$as_me:$LINENO: WARNING: Aqua requires Mac OS X 10.2 or later" >&5 | |
9366 | echo "$as_me: WARNING: Aqua requires Mac OS X 10.2 or later" >&2;} | |
9367 | tk_aqua=no | |
9368 | fi | |
9369 | else | |
9370 | tk_aqua=no | |
9371 | 9252 | fi |
9372 | if test $tk_aqua != no -a $tcl_corefoundation = no; then | |
9373 | { echo "$as_me:$LINENO: WARNING: Aqua can only be used when CoreFoundation is available" >&5 | |
9374 | echo "$as_me: WARNING: Aqua can only be used when CoreFoundation is available" >&2;} | |
9375 | tk_aqua=no | |
9376 | fi | |
9377 | if test $tk_aqua = carbon; then | |
9378 | MACOSX_SRC_DIR=carbon | |
9379 | echo "$as_me:$LINENO: result: yes (deprecated legacy Carbon implementation)" >&5 | |
9380 | echo "${ECHO_T}yes (deprecated legacy Carbon implementation)" >&6 | |
9381 | else | |
9382 | echo "$as_me:$LINENO: result: $tk_aqua" >&5 | |
9253 | echo "$as_me:$LINENO: result: $tk_aqua" >&5 | |
9383 | 9254 | echo "${ECHO_T}$tk_aqua" >&6 |
9384 | fi | |
9385 | 9255 | if test "$fat_32_64" = yes; then |
9386 | 9256 | if test $tk_aqua = no; then |
9387 | 9257 | echo "$as_me:$LINENO: checking for 64-bit X11" >&5 |
9450 | 9320 | fi |
9451 | 9321 | # remove 64-bit arch flags from CFLAGS et al. for combined 32 & 64 bit |
9452 | 9322 | # fat builds if configuration does not support 64-bit. |
9453 | if test $tk_aqua = carbon -o "$tcl_cv_lib_x11_64" = no; then | |
9323 | if test "$tcl_cv_lib_x11_64" = no; then | |
9454 | 9324 | { echo "$as_me:$LINENO: Removing 64-bit architectures from compiler & linker flags" >&5 |
9455 | 9325 | echo "$as_me: Removing 64-bit architectures from compiler & linker flags" >&6;} |
9456 | 9326 | for v in CFLAGS CPPFLAGS LDFLAGS; do |
9821 | 9691 | tk_aqua=no |
9822 | 9692 | fi |
9823 | 9693 | |
9824 | if test $tk_aqua != no; then | |
9825 | if test $tk_aqua = yes; then | |
9826 | LIBS="$LIBS -framework Cocoa -framework Carbon -framework IOKit" | |
9827 | EXTRA_CC_SWITCHES='-std=gnu99 -x objective-c -fobjc-gc' | |
9828 | else | |
9829 | LIBS="$LIBS -framework Carbon -framework IOKit" | |
9830 | CFLAGS="$CFLAGS -fpascal-strings" | |
9831 | fi | |
9694 | if test $tk_aqua = yes; then | |
9832 | 9695 | |
9833 | 9696 | cat >>confdefs.h <<\_ACEOF |
9834 | 9697 | #define MAC_OSX_TK 1 |
9835 | 9698 | _ACEOF |
9836 | 9699 | |
9700 | LIBS="$LIBS -framework Cocoa -framework Carbon -framework IOKit" | |
9701 | EXTRA_CC_SWITCHES='-std=gnu99 -x objective-c -fobjc-gc' | |
9837 | 9702 | TK_WINDOWINGSYSTEM=AQUA |
9838 | 9703 | if test -n "${enable_symbols}" -a "${enable_symbols}" != no; then |
9839 | 9704 | |
10096 | 9961 | cat confdefs.h >>conftest.$ac_ext |
10097 | 9962 | cat >>conftest.$ac_ext <<_ACEOF |
10098 | 9963 | /* end confdefs.h. */ |
10099 | #include <X11/XIntrinsic.h> | |
9964 | #include <X11/Xlib.h> | |
10100 | 9965 | _ACEOF |
10101 | 9966 | if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 |
10102 | 9967 | (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 |
10125 | 9990 | fi |
10126 | 9991 | rm -f conftest.err conftest.$ac_ext |
10127 | 9992 | else |
10128 | if test ! -r $x_includes/X11/Intrinsic.h; then | |
9993 | if test ! -r $x_includes/X11/Xlib.h; then | |
10129 | 9994 | not_really_there="yes" |
10130 | 9995 | fi |
10131 | 9996 | fi |
10140 | 10005 | cat confdefs.h >>conftest.$ac_ext |
10141 | 10006 | cat >>conftest.$ac_ext <<_ACEOF |
10142 | 10007 | /* end confdefs.h. */ |
10143 | #include <X11/Intrinsic.h> | |
10008 | #include <X11/Xlib.h> | |
10144 | 10009 | _ACEOF |
10145 | 10010 | if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 |
10146 | 10011 | (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 |
10171 | 10036 | if test "$found_xincludes" = "no"; then |
10172 | 10037 | dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" |
10173 | 10038 | for i in $dirs ; do |
10174 | if test -r $i/X11/Intrinsic.h; then | |
10039 | if test -r $i/X11/Xlib.h; then | |
10175 | 10040 | echo "$as_me:$LINENO: result: $i" >&5 |
10176 | 10041 | echo "${ECHO_T}$i" >&6 |
10177 | 10042 | XINCLUDES=" -I$i" |
10471 | 10336 | fi |
10472 | 10337 | rm -f conftest.err conftest.$ac_objext \ |
10473 | 10338 | conftest$ac_exeext conftest.$ac_ext |
10474 | CFLAGS=$tk_oldCFlags | |
10475 | LIBS=$tk_oldLibs | |
10476 | fi | |
10477 | ||
10478 | #-------------------------------------------------------------------- | |
10479 | # Check whether the header and library for the XScreenSaver | |
10480 | # extension are available, and set HAVE_XSS if so. | |
10481 | # XScreenSaver is needed for Tk_GetUserInactiveTime(). | |
10482 | #-------------------------------------------------------------------- | |
10483 | ||
10484 | if test $tk_aqua = no; then | |
10485 | tk_oldCFlags=$CFLAGS | |
10486 | CFLAGS="$CFLAGS $XINCLUDES" | |
10487 | tk_oldLibs=$LIBS | |
10488 | LIBS="$tk_oldLibs $XLIBSW" | |
10489 | xss_header_found=no | |
10490 | xss_lib_found=no | |
10491 | echo "$as_me:$LINENO: checking whether to try to use XScreenSaver" >&5 | |
10492 | echo $ECHO_N "checking whether to try to use XScreenSaver... $ECHO_C" >&6 | |
10493 | # Check whether --enable-xss or --disable-xss was given. | |
10494 | if test "${enable_xss+set}" = set; then | |
10495 | enableval="$enable_xss" | |
10496 | enable_xss=$enableval | |
10497 | else | |
10498 | enable_xss=yes | |
10499 | fi; | |
10500 | if test "$enable_xss" = "no" ; then | |
10501 | echo "$as_me:$LINENO: result: $enable_xss" >&5 | |
10502 | echo "${ECHO_T}$enable_xss" >&6 | |
10503 | else | |
10504 | echo "$as_me:$LINENO: result: $enable_xss" >&5 | |
10505 | echo "${ECHO_T}$enable_xss" >&6 | |
10506 | echo "$as_me:$LINENO: checking for X11/extensions/scrnsaver.h" >&5 | |
10507 | echo $ECHO_N "checking for X11/extensions/scrnsaver.h... $ECHO_C" >&6 | |
10508 | if test "${ac_cv_header_X11_extensions_scrnsaver_h+set}" = set; then | |
10509 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10510 | else | |
10511 | cat >conftest.$ac_ext <<_ACEOF | |
10512 | /* confdefs.h. */ | |
10513 | _ACEOF | |
10514 | cat confdefs.h >>conftest.$ac_ext | |
10515 | cat >>conftest.$ac_ext <<_ACEOF | |
10516 | /* end confdefs.h. */ | |
10517 | #include <X11/Xlib.h> | |
10518 | ||
10519 | #include <X11/extensions/scrnsaver.h> | |
10520 | _ACEOF | |
10521 | rm -f conftest.$ac_objext | |
10522 | if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 | |
10523 | (eval $ac_compile) 2>conftest.er1 | |
10524 | ac_status=$? | |
10525 | grep -v '^ *+' conftest.er1 >conftest.err | |
10526 | rm -f conftest.er1 | |
10527 | cat conftest.err >&5 | |
10528 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10529 | (exit $ac_status); } && | |
10530 | { ac_try='test -z "$ac_c_werror_flag" | |
10531 | || test ! -s conftest.err' | |
10532 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10533 | (eval $ac_try) 2>&5 | |
10534 | ac_status=$? | |
10535 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10536 | (exit $ac_status); }; } && | |
10537 | { ac_try='test -s conftest.$ac_objext' | |
10538 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10539 | (eval $ac_try) 2>&5 | |
10540 | ac_status=$? | |
10541 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10542 | (exit $ac_status); }; }; then | |
10543 | ac_cv_header_X11_extensions_scrnsaver_h=yes | |
10544 | else | |
10545 | echo "$as_me: failed program was:" >&5 | |
10546 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10547 | ||
10548 | ac_cv_header_X11_extensions_scrnsaver_h=no | |
10549 | fi | |
10550 | rm -f conftest.err conftest.$ac_objext conftest.$ac_ext | |
10551 | fi | |
10552 | echo "$as_me:$LINENO: result: $ac_cv_header_X11_extensions_scrnsaver_h" >&5 | |
10553 | echo "${ECHO_T}$ac_cv_header_X11_extensions_scrnsaver_h" >&6 | |
10554 | if test $ac_cv_header_X11_extensions_scrnsaver_h = yes; then | |
10555 | ||
10556 | xss_header_found=yes | |
10557 | ||
10558 | fi | |
10559 | ||
10560 | ||
10561 | echo "$as_me:$LINENO: checking for XScreenSaverQueryInfo" >&5 | |
10562 | echo $ECHO_N "checking for XScreenSaverQueryInfo... $ECHO_C" >&6 | |
10563 | if test "${ac_cv_func_XScreenSaverQueryInfo+set}" = set; then | |
10564 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10565 | else | |
10566 | cat >conftest.$ac_ext <<_ACEOF | |
10567 | /* confdefs.h. */ | |
10568 | _ACEOF | |
10569 | cat confdefs.h >>conftest.$ac_ext | |
10570 | cat >>conftest.$ac_ext <<_ACEOF | |
10571 | /* end confdefs.h. */ | |
10572 | /* Define XScreenSaverQueryInfo to an innocuous variant, in case <limits.h> declares XScreenSaverQueryInfo. | |
10573 | For example, HP-UX 11i <limits.h> declares gettimeofday. */ | |
10574 | #define XScreenSaverQueryInfo innocuous_XScreenSaverQueryInfo | |
10575 | ||
10576 | /* System header to define __stub macros and hopefully few prototypes, | |
10577 | which can conflict with char XScreenSaverQueryInfo (); below. | |
10578 | Prefer <limits.h> to <assert.h> if __STDC__ is defined, since | |
10579 | <limits.h> exists even on freestanding compilers. */ | |
10580 | ||
10581 | #ifdef __STDC__ | |
10582 | # include <limits.h> | |
10583 | #else | |
10584 | # include <assert.h> | |
10585 | #endif | |
10586 | ||
10587 | #undef XScreenSaverQueryInfo | |
10588 | ||
10589 | /* Override any gcc2 internal prototype to avoid an error. */ | |
10590 | #ifdef __cplusplus | |
10591 | extern "C" | |
10592 | { | |
10593 | #endif | |
10594 | /* We use char because int might match the return type of a gcc2 | |
10595 | builtin and then its argument prototype would still apply. */ | |
10596 | char XScreenSaverQueryInfo (); | |
10597 | /* The GNU C library defines this for functions which it implements | |
10598 | to always fail with ENOSYS. Some functions are actually named | |
10599 | something starting with __ and the normal name is an alias. */ | |
10600 | #if defined (__stub_XScreenSaverQueryInfo) || defined (__stub___XScreenSaverQueryInfo) | |
10601 | choke me | |
10602 | #else | |
10603 | char (*f) () = XScreenSaverQueryInfo; | |
10604 | #endif | |
10605 | #ifdef __cplusplus | |
10606 | } | |
10607 | #endif | |
10608 | ||
10609 | int | |
10610 | main () | |
10611 | { | |
10612 | return f != XScreenSaverQueryInfo; | |
10613 | ; | |
10614 | return 0; | |
10615 | } | |
10616 | _ACEOF | |
10617 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10618 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10619 | (eval $ac_link) 2>conftest.er1 | |
10620 | ac_status=$? | |
10621 | grep -v '^ *+' conftest.er1 >conftest.err | |
10622 | rm -f conftest.er1 | |
10623 | cat conftest.err >&5 | |
10624 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10625 | (exit $ac_status); } && | |
10626 | { ac_try='test -z "$ac_c_werror_flag" | |
10627 | || test ! -s conftest.err' | |
10628 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10629 | (eval $ac_try) 2>&5 | |
10630 | ac_status=$? | |
10631 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10632 | (exit $ac_status); }; } && | |
10633 | { ac_try='test -s conftest$ac_exeext' | |
10634 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10635 | (eval $ac_try) 2>&5 | |
10636 | ac_status=$? | |
10637 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10638 | (exit $ac_status); }; }; then | |
10639 | ac_cv_func_XScreenSaverQueryInfo=yes | |
10640 | else | |
10641 | echo "$as_me: failed program was:" >&5 | |
10642 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10643 | ||
10644 | ac_cv_func_XScreenSaverQueryInfo=no | |
10645 | fi | |
10646 | rm -f conftest.err conftest.$ac_objext \ | |
10647 | conftest$ac_exeext conftest.$ac_ext | |
10648 | fi | |
10649 | echo "$as_me:$LINENO: result: $ac_cv_func_XScreenSaverQueryInfo" >&5 | |
10650 | echo "${ECHO_T}$ac_cv_func_XScreenSaverQueryInfo" >&6 | |
10651 | if test $ac_cv_func_XScreenSaverQueryInfo = yes; then | |
10652 | : | |
10653 | else | |
10654 | ||
10655 | echo "$as_me:$LINENO: checking for XScreenSaverQueryInfo in -lXext" >&5 | |
10656 | echo $ECHO_N "checking for XScreenSaverQueryInfo in -lXext... $ECHO_C" >&6 | |
10657 | if test "${ac_cv_lib_Xext_XScreenSaverQueryInfo+set}" = set; then | |
10658 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10659 | else | |
10660 | ac_check_lib_save_LIBS=$LIBS | |
10661 | LIBS="-lXext $LIBS" | |
10662 | cat >conftest.$ac_ext <<_ACEOF | |
10663 | /* confdefs.h. */ | |
10664 | _ACEOF | |
10665 | cat confdefs.h >>conftest.$ac_ext | |
10666 | cat >>conftest.$ac_ext <<_ACEOF | |
10667 | /* end confdefs.h. */ | |
10668 | ||
10669 | /* Override any gcc2 internal prototype to avoid an error. */ | |
10670 | #ifdef __cplusplus | |
10671 | extern "C" | |
10672 | #endif | |
10673 | /* We use char because int might match the return type of a gcc2 | |
10674 | builtin and then its argument prototype would still apply. */ | |
10675 | char XScreenSaverQueryInfo (); | |
10676 | int | |
10677 | main () | |
10678 | { | |
10679 | XScreenSaverQueryInfo (); | |
10680 | ; | |
10681 | return 0; | |
10682 | } | |
10683 | _ACEOF | |
10684 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10685 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10686 | (eval $ac_link) 2>conftest.er1 | |
10687 | ac_status=$? | |
10688 | grep -v '^ *+' conftest.er1 >conftest.err | |
10689 | rm -f conftest.er1 | |
10690 | cat conftest.err >&5 | |
10691 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10692 | (exit $ac_status); } && | |
10693 | { ac_try='test -z "$ac_c_werror_flag" | |
10694 | || test ! -s conftest.err' | |
10695 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10696 | (eval $ac_try) 2>&5 | |
10697 | ac_status=$? | |
10698 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10699 | (exit $ac_status); }; } && | |
10700 | { ac_try='test -s conftest$ac_exeext' | |
10701 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10702 | (eval $ac_try) 2>&5 | |
10703 | ac_status=$? | |
10704 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10705 | (exit $ac_status); }; }; then | |
10706 | ac_cv_lib_Xext_XScreenSaverQueryInfo=yes | |
10707 | else | |
10708 | echo "$as_me: failed program was:" >&5 | |
10709 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10710 | ||
10711 | ac_cv_lib_Xext_XScreenSaverQueryInfo=no | |
10712 | fi | |
10713 | rm -f conftest.err conftest.$ac_objext \ | |
10714 | conftest$ac_exeext conftest.$ac_ext | |
10715 | LIBS=$ac_check_lib_save_LIBS | |
10716 | fi | |
10717 | echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XScreenSaverQueryInfo" >&5 | |
10718 | echo "${ECHO_T}$ac_cv_lib_Xext_XScreenSaverQueryInfo" >&6 | |
10719 | if test $ac_cv_lib_Xext_XScreenSaverQueryInfo = yes; then | |
10720 | ||
10721 | XLIBSW="$XLIBSW -lXext" | |
10722 | xss_lib_found=yes | |
10723 | ||
10724 | else | |
10725 | ||
10726 | echo "$as_me:$LINENO: checking for XScreenSaverQueryInfo in -lXss" >&5 | |
10727 | echo $ECHO_N "checking for XScreenSaverQueryInfo in -lXss... $ECHO_C" >&6 | |
10728 | if test "${ac_cv_lib_Xss_XScreenSaverQueryInfo+set}" = set; then | |
10729 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10730 | else | |
10731 | ac_check_lib_save_LIBS=$LIBS | |
10732 | LIBS="-lXss -lXext $LIBS" | |
10733 | cat >conftest.$ac_ext <<_ACEOF | |
10734 | /* confdefs.h. */ | |
10735 | _ACEOF | |
10736 | cat confdefs.h >>conftest.$ac_ext | |
10737 | cat >>conftest.$ac_ext <<_ACEOF | |
10738 | /* end confdefs.h. */ | |
10739 | ||
10740 | /* Override any gcc2 internal prototype to avoid an error. */ | |
10741 | #ifdef __cplusplus | |
10742 | extern "C" | |
10743 | #endif | |
10744 | /* We use char because int might match the return type of a gcc2 | |
10745 | builtin and then its argument prototype would still apply. */ | |
10746 | char XScreenSaverQueryInfo (); | |
10747 | int | |
10748 | main () | |
10749 | { | |
10750 | XScreenSaverQueryInfo (); | |
10751 | ; | |
10752 | return 0; | |
10753 | } | |
10754 | _ACEOF | |
10755 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10756 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10757 | (eval $ac_link) 2>conftest.er1 | |
10758 | ac_status=$? | |
10759 | grep -v '^ *+' conftest.er1 >conftest.err | |
10760 | rm -f conftest.er1 | |
10761 | cat conftest.err >&5 | |
10762 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10763 | (exit $ac_status); } && | |
10764 | { ac_try='test -z "$ac_c_werror_flag" | |
10765 | || test ! -s conftest.err' | |
10766 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10767 | (eval $ac_try) 2>&5 | |
10768 | ac_status=$? | |
10769 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10770 | (exit $ac_status); }; } && | |
10771 | { ac_try='test -s conftest$ac_exeext' | |
10772 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10773 | (eval $ac_try) 2>&5 | |
10774 | ac_status=$? | |
10775 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10776 | (exit $ac_status); }; }; then | |
10777 | ac_cv_lib_Xss_XScreenSaverQueryInfo=yes | |
10778 | else | |
10779 | echo "$as_me: failed program was:" >&5 | |
10780 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10781 | ||
10782 | ac_cv_lib_Xss_XScreenSaverQueryInfo=no | |
10783 | fi | |
10784 | rm -f conftest.err conftest.$ac_objext \ | |
10785 | conftest$ac_exeext conftest.$ac_ext | |
10786 | LIBS=$ac_check_lib_save_LIBS | |
10787 | fi | |
10788 | echo "$as_me:$LINENO: result: $ac_cv_lib_Xss_XScreenSaverQueryInfo" >&5 | |
10789 | echo "${ECHO_T}$ac_cv_lib_Xss_XScreenSaverQueryInfo" >&6 | |
10790 | if test $ac_cv_lib_Xss_XScreenSaverQueryInfo = yes; then | |
10791 | ||
10792 | if test "$tcl_cv_ld_weak_l" = yes; then | |
10793 | # On Darwin, weak link libXss if possible, | |
10794 | # as it is only available on Tiger or later. | |
10795 | XLIBSW="$XLIBSW -Wl,-weak-lXss -lXext" | |
10796 | else | |
10797 | XLIBSW="$XLIBSW -lXss -lXext" | |
10798 | fi | |
10799 | xss_lib_found=yes | |
10800 | ||
10801 | fi | |
10802 | ||
10803 | ||
10804 | fi | |
10805 | ||
10806 | ||
10807 | fi | |
10808 | ||
10809 | fi | |
10810 | if test $enable_xss = yes -a $xss_lib_found = yes -a $xss_header_found = yes; then | |
10811 | ||
10812 | cat >>confdefs.h <<\_ACEOF | |
10813 | #define HAVE_XSS 1 | |
10814 | _ACEOF | |
10815 | ||
10816 | fi | |
10817 | 10339 | CFLAGS=$tk_oldCFlags |
10818 | 10340 | LIBS=$tk_oldLibs |
10819 | 10341 | fi |
11024 | 10546 | |
11025 | 10547 | |
11026 | 10548 | |
10549 | fi | |
10550 | ||
10551 | #-------------------------------------------------------------------- | |
10552 | # Check for XkbKeycodeToKeysym. | |
10553 | #-------------------------------------------------------------------- | |
10554 | ||
10555 | if test $tk_aqua = no; then | |
10556 | tk_oldCFlags=$CFLAGS | |
10557 | tk_oldLibs=$LIBS | |
10558 | CFLAGS="$CFLAGS $XINCLUDES" | |
10559 | LIBS="$LIBS $XLIBSW" | |
10560 | echo "$as_me:$LINENO: checking for X11/XKBlib.h" >&5 | |
10561 | echo $ECHO_N "checking for X11/XKBlib.h... $ECHO_C" >&6 | |
10562 | if test "${ac_cv_header_X11_XKBlib_h+set}" = set; then | |
10563 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10564 | else | |
10565 | cat >conftest.$ac_ext <<_ACEOF | |
10566 | /* confdefs.h. */ | |
10567 | _ACEOF | |
10568 | cat confdefs.h >>conftest.$ac_ext | |
10569 | cat >>conftest.$ac_ext <<_ACEOF | |
10570 | /* end confdefs.h. */ | |
10571 | #include <X11/Xlib.h> | |
10572 | ||
10573 | #include <X11/XKBlib.h> | |
10574 | _ACEOF | |
10575 | rm -f conftest.$ac_objext | |
10576 | if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 | |
10577 | (eval $ac_compile) 2>conftest.er1 | |
10578 | ac_status=$? | |
10579 | grep -v '^ *+' conftest.er1 >conftest.err | |
10580 | rm -f conftest.er1 | |
10581 | cat conftest.err >&5 | |
10582 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10583 | (exit $ac_status); } && | |
10584 | { ac_try='test -z "$ac_c_werror_flag" | |
10585 | || test ! -s conftest.err' | |
10586 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10587 | (eval $ac_try) 2>&5 | |
10588 | ac_status=$? | |
10589 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10590 | (exit $ac_status); }; } && | |
10591 | { ac_try='test -s conftest.$ac_objext' | |
10592 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10593 | (eval $ac_try) 2>&5 | |
10594 | ac_status=$? | |
10595 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10596 | (exit $ac_status); }; }; then | |
10597 | ac_cv_header_X11_XKBlib_h=yes | |
10598 | else | |
10599 | echo "$as_me: failed program was:" >&5 | |
10600 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10601 | ||
10602 | ac_cv_header_X11_XKBlib_h=no | |
10603 | fi | |
10604 | rm -f conftest.err conftest.$ac_objext conftest.$ac_ext | |
10605 | fi | |
10606 | echo "$as_me:$LINENO: result: $ac_cv_header_X11_XKBlib_h" >&5 | |
10607 | echo "${ECHO_T}$ac_cv_header_X11_XKBlib_h" >&6 | |
10608 | if test $ac_cv_header_X11_XKBlib_h = yes; then | |
10609 | ||
10610 | xkblib_header_found=yes | |
10611 | ||
10612 | else | |
10613 | ||
10614 | xkblib_header_found=no | |
10615 | ||
10616 | fi | |
10617 | ||
10618 | ||
10619 | if test $xkblib_header_found = "yes" ; then | |
10620 | echo "$as_me:$LINENO: checking for XkbKeycodeToKeysym in -lX11" >&5 | |
10621 | echo $ECHO_N "checking for XkbKeycodeToKeysym in -lX11... $ECHO_C" >&6 | |
10622 | if test "${ac_cv_lib_X11_XkbKeycodeToKeysym+set}" = set; then | |
10623 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10624 | else | |
10625 | ac_check_lib_save_LIBS=$LIBS | |
10626 | LIBS="-lX11 $LIBS" | |
10627 | cat >conftest.$ac_ext <<_ACEOF | |
10628 | /* confdefs.h. */ | |
10629 | _ACEOF | |
10630 | cat confdefs.h >>conftest.$ac_ext | |
10631 | cat >>conftest.$ac_ext <<_ACEOF | |
10632 | /* end confdefs.h. */ | |
10633 | ||
10634 | /* Override any gcc2 internal prototype to avoid an error. */ | |
10635 | #ifdef __cplusplus | |
10636 | extern "C" | |
10637 | #endif | |
10638 | /* We use char because int might match the return type of a gcc2 | |
10639 | builtin and then its argument prototype would still apply. */ | |
10640 | char XkbKeycodeToKeysym (); | |
10641 | int | |
10642 | main () | |
10643 | { | |
10644 | XkbKeycodeToKeysym (); | |
10645 | ; | |
10646 | return 0; | |
10647 | } | |
10648 | _ACEOF | |
10649 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10650 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10651 | (eval $ac_link) 2>conftest.er1 | |
10652 | ac_status=$? | |
10653 | grep -v '^ *+' conftest.er1 >conftest.err | |
10654 | rm -f conftest.er1 | |
10655 | cat conftest.err >&5 | |
10656 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10657 | (exit $ac_status); } && | |
10658 | { ac_try='test -z "$ac_c_werror_flag" | |
10659 | || test ! -s conftest.err' | |
10660 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10661 | (eval $ac_try) 2>&5 | |
10662 | ac_status=$? | |
10663 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10664 | (exit $ac_status); }; } && | |
10665 | { ac_try='test -s conftest$ac_exeext' | |
10666 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10667 | (eval $ac_try) 2>&5 | |
10668 | ac_status=$? | |
10669 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10670 | (exit $ac_status); }; }; then | |
10671 | ac_cv_lib_X11_XkbKeycodeToKeysym=yes | |
10672 | else | |
10673 | echo "$as_me: failed program was:" >&5 | |
10674 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10675 | ||
10676 | ac_cv_lib_X11_XkbKeycodeToKeysym=no | |
10677 | fi | |
10678 | rm -f conftest.err conftest.$ac_objext \ | |
10679 | conftest$ac_exeext conftest.$ac_ext | |
10680 | LIBS=$ac_check_lib_save_LIBS | |
10681 | fi | |
10682 | echo "$as_me:$LINENO: result: $ac_cv_lib_X11_XkbKeycodeToKeysym" >&5 | |
10683 | echo "${ECHO_T}$ac_cv_lib_X11_XkbKeycodeToKeysym" >&6 | |
10684 | if test $ac_cv_lib_X11_XkbKeycodeToKeysym = yes; then | |
10685 | ||
10686 | xkbkeycodetokeysym_found=yes | |
10687 | ||
10688 | else | |
10689 | ||
10690 | xkbkeycodetokeysym_found=no | |
10691 | ||
10692 | fi | |
10693 | ||
10694 | else | |
10695 | xkbkeycodetokeysym_found=no | |
10696 | fi | |
10697 | if test $xkbkeycodetokeysym_found = "yes" ; then | |
10698 | ||
10699 | cat >>confdefs.h <<\_ACEOF | |
10700 | #define HAVE_XKBKEYCODETOKEYSYM 1 | |
10701 | _ACEOF | |
10702 | ||
10703 | fi | |
10704 | CFLAGS=$tk_oldCFlags | |
10705 | LIBS=$tk_oldLibs | |
10706 | fi | |
10707 | ||
10708 | #-------------------------------------------------------------------- | |
10709 | # Check whether XKeycodeToKeysym is deprecated in X11 headers. | |
10710 | #-------------------------------------------------------------------- | |
10711 | ||
10712 | if test $tk_aqua = no && test "$GCC" = yes; then | |
10713 | echo "$as_me:$LINENO: checking whether XKeycodeToKeysym is deprecated" >&5 | |
10714 | echo $ECHO_N "checking whether XKeycodeToKeysym is deprecated... $ECHO_C" >&6 | |
10715 | tk_oldCFlags=$CFLAGS | |
10716 | CFLAGS="$CFLAGS -Werror" | |
10717 | cat >conftest.$ac_ext <<_ACEOF | |
10718 | /* confdefs.h. */ | |
10719 | _ACEOF | |
10720 | cat confdefs.h >>conftest.$ac_ext | |
10721 | cat >>conftest.$ac_ext <<_ACEOF | |
10722 | /* end confdefs.h. */ | |
10723 | ||
10724 | #include <X11/Xlib.h> | |
10725 | ||
10726 | int | |
10727 | main () | |
10728 | { | |
10729 | ||
10730 | XKeycodeToKeysym(0,0,0); | |
10731 | ||
10732 | ; | |
10733 | return 0; | |
10734 | } | |
10735 | _ACEOF | |
10736 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10737 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10738 | (eval $ac_link) 2>conftest.er1 | |
10739 | ac_status=$? | |
10740 | grep -v '^ *+' conftest.er1 >conftest.err | |
10741 | rm -f conftest.er1 | |
10742 | cat conftest.err >&5 | |
10743 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10744 | (exit $ac_status); } && | |
10745 | { ac_try='test -z "$ac_c_werror_flag" | |
10746 | || test ! -s conftest.err' | |
10747 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10748 | (eval $ac_try) 2>&5 | |
10749 | ac_status=$? | |
10750 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10751 | (exit $ac_status); }; } && | |
10752 | { ac_try='test -s conftest$ac_exeext' | |
10753 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10754 | (eval $ac_try) 2>&5 | |
10755 | ac_status=$? | |
10756 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10757 | (exit $ac_status); }; }; then | |
10758 | ||
10759 | echo "$as_me:$LINENO: result: no" >&5 | |
10760 | echo "${ECHO_T}no" >&6 | |
10761 | ||
10762 | else | |
10763 | echo "$as_me: failed program was:" >&5 | |
10764 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10765 | ||
10766 | ||
10767 | echo "$as_me:$LINENO: result: yes" >&5 | |
10768 | echo "${ECHO_T}yes" >&6 | |
10769 | ||
10770 | cat >>confdefs.h <<\_ACEOF | |
10771 | #define XKEYCODETOKEYSYM_IS_DEPRECATED 1 | |
10772 | _ACEOF | |
10773 | ||
10774 | ||
10775 | fi | |
10776 | rm -f conftest.err conftest.$ac_objext \ | |
10777 | conftest$ac_exeext conftest.$ac_ext | |
10778 | CFLAGS=$tk_oldCFlags | |
10779 | fi | |
10780 | ||
10781 | #-------------------------------------------------------------------- | |
10782 | # XXX Do this last. | |
10783 | # It might modify XLIBSW which could affect other tests. | |
10784 | # | |
10785 | # Check whether the header and library for the XScreenSaver | |
10786 | # extension are available, and set HAVE_XSS if so. | |
10787 | # XScreenSaver is needed for Tk_GetUserInactiveTime(). | |
10788 | #-------------------------------------------------------------------- | |
10789 | ||
10790 | if test $tk_aqua = no; then | |
10791 | tk_oldCFlags=$CFLAGS | |
10792 | CFLAGS="$CFLAGS $XINCLUDES" | |
10793 | tk_oldLibs=$LIBS | |
10794 | LIBS="$tk_oldLibs $XLIBSW" | |
10795 | xss_header_found=no | |
10796 | xss_lib_found=no | |
10797 | echo "$as_me:$LINENO: checking whether to try to use XScreenSaver" >&5 | |
10798 | echo $ECHO_N "checking whether to try to use XScreenSaver... $ECHO_C" >&6 | |
10799 | # Check whether --enable-xss or --disable-xss was given. | |
10800 | if test "${enable_xss+set}" = set; then | |
10801 | enableval="$enable_xss" | |
10802 | enable_xss=$enableval | |
10803 | else | |
10804 | enable_xss=yes | |
10805 | fi; | |
10806 | if test "$enable_xss" = "no" ; then | |
10807 | echo "$as_me:$LINENO: result: $enable_xss" >&5 | |
10808 | echo "${ECHO_T}$enable_xss" >&6 | |
10809 | else | |
10810 | echo "$as_me:$LINENO: result: $enable_xss" >&5 | |
10811 | echo "${ECHO_T}$enable_xss" >&6 | |
10812 | echo "$as_me:$LINENO: checking for X11/extensions/scrnsaver.h" >&5 | |
10813 | echo $ECHO_N "checking for X11/extensions/scrnsaver.h... $ECHO_C" >&6 | |
10814 | if test "${ac_cv_header_X11_extensions_scrnsaver_h+set}" = set; then | |
10815 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10816 | else | |
10817 | cat >conftest.$ac_ext <<_ACEOF | |
10818 | /* confdefs.h. */ | |
10819 | _ACEOF | |
10820 | cat confdefs.h >>conftest.$ac_ext | |
10821 | cat >>conftest.$ac_ext <<_ACEOF | |
10822 | /* end confdefs.h. */ | |
10823 | #include <X11/Xlib.h> | |
10824 | ||
10825 | #include <X11/extensions/scrnsaver.h> | |
10826 | _ACEOF | |
10827 | rm -f conftest.$ac_objext | |
10828 | if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 | |
10829 | (eval $ac_compile) 2>conftest.er1 | |
10830 | ac_status=$? | |
10831 | grep -v '^ *+' conftest.er1 >conftest.err | |
10832 | rm -f conftest.er1 | |
10833 | cat conftest.err >&5 | |
10834 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10835 | (exit $ac_status); } && | |
10836 | { ac_try='test -z "$ac_c_werror_flag" | |
10837 | || test ! -s conftest.err' | |
10838 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10839 | (eval $ac_try) 2>&5 | |
10840 | ac_status=$? | |
10841 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10842 | (exit $ac_status); }; } && | |
10843 | { ac_try='test -s conftest.$ac_objext' | |
10844 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10845 | (eval $ac_try) 2>&5 | |
10846 | ac_status=$? | |
10847 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10848 | (exit $ac_status); }; }; then | |
10849 | ac_cv_header_X11_extensions_scrnsaver_h=yes | |
10850 | else | |
10851 | echo "$as_me: failed program was:" >&5 | |
10852 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10853 | ||
10854 | ac_cv_header_X11_extensions_scrnsaver_h=no | |
10855 | fi | |
10856 | rm -f conftest.err conftest.$ac_objext conftest.$ac_ext | |
10857 | fi | |
10858 | echo "$as_me:$LINENO: result: $ac_cv_header_X11_extensions_scrnsaver_h" >&5 | |
10859 | echo "${ECHO_T}$ac_cv_header_X11_extensions_scrnsaver_h" >&6 | |
10860 | if test $ac_cv_header_X11_extensions_scrnsaver_h = yes; then | |
10861 | ||
10862 | xss_header_found=yes | |
10863 | ||
10864 | fi | |
10865 | ||
10866 | ||
10867 | echo "$as_me:$LINENO: checking for XScreenSaverQueryInfo" >&5 | |
10868 | echo $ECHO_N "checking for XScreenSaverQueryInfo... $ECHO_C" >&6 | |
10869 | if test "${ac_cv_func_XScreenSaverQueryInfo+set}" = set; then | |
10870 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10871 | else | |
10872 | cat >conftest.$ac_ext <<_ACEOF | |
10873 | /* confdefs.h. */ | |
10874 | _ACEOF | |
10875 | cat confdefs.h >>conftest.$ac_ext | |
10876 | cat >>conftest.$ac_ext <<_ACEOF | |
10877 | /* end confdefs.h. */ | |
10878 | /* Define XScreenSaverQueryInfo to an innocuous variant, in case <limits.h> declares XScreenSaverQueryInfo. | |
10879 | For example, HP-UX 11i <limits.h> declares gettimeofday. */ | |
10880 | #define XScreenSaverQueryInfo innocuous_XScreenSaverQueryInfo | |
10881 | ||
10882 | /* System header to define __stub macros and hopefully few prototypes, | |
10883 | which can conflict with char XScreenSaverQueryInfo (); below. | |
10884 | Prefer <limits.h> to <assert.h> if __STDC__ is defined, since | |
10885 | <limits.h> exists even on freestanding compilers. */ | |
10886 | ||
10887 | #ifdef __STDC__ | |
10888 | # include <limits.h> | |
10889 | #else | |
10890 | # include <assert.h> | |
10891 | #endif | |
10892 | ||
10893 | #undef XScreenSaverQueryInfo | |
10894 | ||
10895 | /* Override any gcc2 internal prototype to avoid an error. */ | |
10896 | #ifdef __cplusplus | |
10897 | extern "C" | |
10898 | { | |
10899 | #endif | |
10900 | /* We use char because int might match the return type of a gcc2 | |
10901 | builtin and then its argument prototype would still apply. */ | |
10902 | char XScreenSaverQueryInfo (); | |
10903 | /* The GNU C library defines this for functions which it implements | |
10904 | to always fail with ENOSYS. Some functions are actually named | |
10905 | something starting with __ and the normal name is an alias. */ | |
10906 | #if defined (__stub_XScreenSaverQueryInfo) || defined (__stub___XScreenSaverQueryInfo) | |
10907 | choke me | |
10908 | #else | |
10909 | char (*f) () = XScreenSaverQueryInfo; | |
10910 | #endif | |
10911 | #ifdef __cplusplus | |
10912 | } | |
10913 | #endif | |
10914 | ||
10915 | int | |
10916 | main () | |
10917 | { | |
10918 | return f != XScreenSaverQueryInfo; | |
10919 | ; | |
10920 | return 0; | |
10921 | } | |
10922 | _ACEOF | |
10923 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10924 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10925 | (eval $ac_link) 2>conftest.er1 | |
10926 | ac_status=$? | |
10927 | grep -v '^ *+' conftest.er1 >conftest.err | |
10928 | rm -f conftest.er1 | |
10929 | cat conftest.err >&5 | |
10930 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10931 | (exit $ac_status); } && | |
10932 | { ac_try='test -z "$ac_c_werror_flag" | |
10933 | || test ! -s conftest.err' | |
10934 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10935 | (eval $ac_try) 2>&5 | |
10936 | ac_status=$? | |
10937 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10938 | (exit $ac_status); }; } && | |
10939 | { ac_try='test -s conftest$ac_exeext' | |
10940 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
10941 | (eval $ac_try) 2>&5 | |
10942 | ac_status=$? | |
10943 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10944 | (exit $ac_status); }; }; then | |
10945 | ac_cv_func_XScreenSaverQueryInfo=yes | |
10946 | else | |
10947 | echo "$as_me: failed program was:" >&5 | |
10948 | sed 's/^/| /' conftest.$ac_ext >&5 | |
10949 | ||
10950 | ac_cv_func_XScreenSaverQueryInfo=no | |
10951 | fi | |
10952 | rm -f conftest.err conftest.$ac_objext \ | |
10953 | conftest$ac_exeext conftest.$ac_ext | |
10954 | fi | |
10955 | echo "$as_me:$LINENO: result: $ac_cv_func_XScreenSaverQueryInfo" >&5 | |
10956 | echo "${ECHO_T}$ac_cv_func_XScreenSaverQueryInfo" >&6 | |
10957 | if test $ac_cv_func_XScreenSaverQueryInfo = yes; then | |
10958 | : | |
10959 | else | |
10960 | ||
10961 | echo "$as_me:$LINENO: checking for XScreenSaverQueryInfo in -lXext" >&5 | |
10962 | echo $ECHO_N "checking for XScreenSaverQueryInfo in -lXext... $ECHO_C" >&6 | |
10963 | if test "${ac_cv_lib_Xext_XScreenSaverQueryInfo+set}" = set; then | |
10964 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
10965 | else | |
10966 | ac_check_lib_save_LIBS=$LIBS | |
10967 | LIBS="-lXext $LIBS" | |
10968 | cat >conftest.$ac_ext <<_ACEOF | |
10969 | /* confdefs.h. */ | |
10970 | _ACEOF | |
10971 | cat confdefs.h >>conftest.$ac_ext | |
10972 | cat >>conftest.$ac_ext <<_ACEOF | |
10973 | /* end confdefs.h. */ | |
10974 | ||
10975 | /* Override any gcc2 internal prototype to avoid an error. */ | |
10976 | #ifdef __cplusplus | |
10977 | extern "C" | |
10978 | #endif | |
10979 | /* We use char because int might match the return type of a gcc2 | |
10980 | builtin and then its argument prototype would still apply. */ | |
10981 | char XScreenSaverQueryInfo (); | |
10982 | int | |
10983 | main () | |
10984 | { | |
10985 | XScreenSaverQueryInfo (); | |
10986 | ; | |
10987 | return 0; | |
10988 | } | |
10989 | _ACEOF | |
10990 | rm -f conftest.$ac_objext conftest$ac_exeext | |
10991 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
10992 | (eval $ac_link) 2>conftest.er1 | |
10993 | ac_status=$? | |
10994 | grep -v '^ *+' conftest.er1 >conftest.err | |
10995 | rm -f conftest.er1 | |
10996 | cat conftest.err >&5 | |
10997 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
10998 | (exit $ac_status); } && | |
10999 | { ac_try='test -z "$ac_c_werror_flag" | |
11000 | || test ! -s conftest.err' | |
11001 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
11002 | (eval $ac_try) 2>&5 | |
11003 | ac_status=$? | |
11004 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
11005 | (exit $ac_status); }; } && | |
11006 | { ac_try='test -s conftest$ac_exeext' | |
11007 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
11008 | (eval $ac_try) 2>&5 | |
11009 | ac_status=$? | |
11010 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
11011 | (exit $ac_status); }; }; then | |
11012 | ac_cv_lib_Xext_XScreenSaverQueryInfo=yes | |
11013 | else | |
11014 | echo "$as_me: failed program was:" >&5 | |
11015 | sed 's/^/| /' conftest.$ac_ext >&5 | |
11016 | ||
11017 | ac_cv_lib_Xext_XScreenSaverQueryInfo=no | |
11018 | fi | |
11019 | rm -f conftest.err conftest.$ac_objext \ | |
11020 | conftest$ac_exeext conftest.$ac_ext | |
11021 | LIBS=$ac_check_lib_save_LIBS | |
11022 | fi | |
11023 | echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XScreenSaverQueryInfo" >&5 | |
11024 | echo "${ECHO_T}$ac_cv_lib_Xext_XScreenSaverQueryInfo" >&6 | |
11025 | if test $ac_cv_lib_Xext_XScreenSaverQueryInfo = yes; then | |
11026 | ||
11027 | XLIBSW="$XLIBSW -lXext" | |
11028 | xss_lib_found=yes | |
11029 | ||
11030 | else | |
11031 | ||
11032 | echo "$as_me:$LINENO: checking for XScreenSaverQueryInfo in -lXss" >&5 | |
11033 | echo $ECHO_N "checking for XScreenSaverQueryInfo in -lXss... $ECHO_C" >&6 | |
11034 | if test "${ac_cv_lib_Xss_XScreenSaverQueryInfo+set}" = set; then | |
11035 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
11036 | else | |
11037 | ac_check_lib_save_LIBS=$LIBS | |
11038 | LIBS="-lXss -lXext $LIBS" | |
11039 | cat >conftest.$ac_ext <<_ACEOF | |
11040 | /* confdefs.h. */ | |
11041 | _ACEOF | |
11042 | cat confdefs.h >>conftest.$ac_ext | |
11043 | cat >>conftest.$ac_ext <<_ACEOF | |
11044 | /* end confdefs.h. */ | |
11045 | ||
11046 | /* Override any gcc2 internal prototype to avoid an error. */ | |
11047 | #ifdef __cplusplus | |
11048 | extern "C" | |
11049 | #endif | |
11050 | /* We use char because int might match the return type of a gcc2 | |
11051 | builtin and then its argument prototype would still apply. */ | |
11052 | char XScreenSaverQueryInfo (); | |
11053 | int | |
11054 | main () | |
11055 | { | |
11056 | XScreenSaverQueryInfo (); | |
11057 | ; | |
11058 | return 0; | |
11059 | } | |
11060 | _ACEOF | |
11061 | rm -f conftest.$ac_objext conftest$ac_exeext | |
11062 | if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 | |
11063 | (eval $ac_link) 2>conftest.er1 | |
11064 | ac_status=$? | |
11065 | grep -v '^ *+' conftest.er1 >conftest.err | |
11066 | rm -f conftest.er1 | |
11067 | cat conftest.err >&5 | |
11068 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
11069 | (exit $ac_status); } && | |
11070 | { ac_try='test -z "$ac_c_werror_flag" | |
11071 | || test ! -s conftest.err' | |
11072 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
11073 | (eval $ac_try) 2>&5 | |
11074 | ac_status=$? | |
11075 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
11076 | (exit $ac_status); }; } && | |
11077 | { ac_try='test -s conftest$ac_exeext' | |
11078 | { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 | |
11079 | (eval $ac_try) 2>&5 | |
11080 | ac_status=$? | |
11081 | echo "$as_me:$LINENO: \$? = $ac_status" >&5 | |
11082 | (exit $ac_status); }; }; then | |
11083 | ac_cv_lib_Xss_XScreenSaverQueryInfo=yes | |
11084 | else | |
11085 | echo "$as_me: failed program was:" >&5 | |
11086 | sed 's/^/| /' conftest.$ac_ext >&5 | |
11087 | ||
11088 | ac_cv_lib_Xss_XScreenSaverQueryInfo=no | |
11089 | fi | |
11090 | rm -f conftest.err conftest.$ac_objext \ | |
11091 | conftest$ac_exeext conftest.$ac_ext | |
11092 | LIBS=$ac_check_lib_save_LIBS | |
11093 | fi | |
11094 | echo "$as_me:$LINENO: result: $ac_cv_lib_Xss_XScreenSaverQueryInfo" >&5 | |
11095 | echo "${ECHO_T}$ac_cv_lib_Xss_XScreenSaverQueryInfo" >&6 | |
11096 | if test $ac_cv_lib_Xss_XScreenSaverQueryInfo = yes; then | |
11097 | ||
11098 | if test "$tcl_cv_ld_weak_l" = yes; then | |
11099 | # On Darwin, weak link libXss if possible, | |
11100 | # as it is only available on Tiger or later. | |
11101 | XLIBSW="$XLIBSW -Wl,-weak-lXss -lXext" | |
11102 | else | |
11103 | XLIBSW="$XLIBSW -lXss -lXext" | |
11104 | fi | |
11105 | xss_lib_found=yes | |
11106 | ||
11107 | fi | |
11108 | ||
11109 | ||
11110 | fi | |
11111 | ||
11112 | ||
11113 | fi | |
11114 | ||
11115 | fi | |
11116 | if test $enable_xss = yes -a $xss_lib_found = yes -a $xss_header_found = yes; then | |
11117 | ||
11118 | cat >>confdefs.h <<\_ACEOF | |
11119 | #define HAVE_XSS 1 | |
11120 | _ACEOF | |
11121 | ||
11122 | fi | |
11123 | CFLAGS=$tk_oldCFlags | |
11124 | LIBS=$tk_oldLibs | |
11027 | 11125 | fi |
11028 | 11126 | |
11029 | 11127 | #-------------------------------------------------------------------- |
11167 | 11265 | fi |
11168 | 11266 | |
11169 | 11267 | TK_SHLIB_LD_EXTRAS="-compatibility_version ${TK_VERSION} -current_version ${TK_VERSION}`echo ${TK_PATCH_LEVEL} | awk '{match($0, "\\\.[0-9]+"); print substr($0,RSTART,RLENGTH)}'`" |
11170 | TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -install_name "${DYLIB_INSTALL_DIR}/${TK_LIB_FILE}"' | |
11171 | if test $tk_aqua = yes; then | |
11172 | TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -unexported_symbols_list $$(f=$(TK_LIB_FILE).E && nm -gp tkMacOSX*.o 2>/dev/null | awk "/^[0-9a-f]+ . \.objc/ {print \$$3}" > $$f && echo $$f)' | |
11173 | fi | |
11268 | TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -install_name "${DYLIB_INSTALL_DIR}/${TK_LIB_FILE}" -unexported_symbols_list $$(f=$(TK_LIB_FILE).E && nm -gp tkMacOSX*.o 2>/dev/null | awk "/^[0-9a-f]+ . \.objc/ {print \$$3}" > $$f && nm -gjp "$(TCL_BIN_DIR)"/$(TCL_STUB_LIB_FILE) | grep ^_[^_] >> $$f && echo $$f)' | |
11174 | 11269 | echo "$LDFLAGS " | grep -q -- '-prebind ' && TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -seg1addr 0xb000000' |
11175 | 11270 | TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -sectcreate __TEXT __info_plist Tk-Info.plist' |
11176 | 11271 | EXTRA_WISH_LIBS='-sectcreate __TEXT __info_plist Wish-Info.plist' |
11177 | 11272 | EXTRA_APP_CC_SWITCHES="${EXTRA_APP_CC_SWITCHES}"' -mdynamic-no-pic' |
11178 | ac_config_files="$ac_config_files Tk-Info.plist:../${MACOSX_SRC_DIR}/Tk-Info.plist.in Wish-Info.plist:../${MACOSX_SRC_DIR}/Wish-Info.plist.in" | |
11273 | ac_config_files="$ac_config_files Tk-Info.plist:../macosx/Tk-Info.plist.in Wish-Info.plist:../macosx/Wish-Info.plist.in" | |
11179 | 11274 | |
11180 | 11275 | for l in ${LOCALES}; do CFBUNDLELOCALIZATIONS="${CFBUNDLELOCALIZATIONS}<string>$l</string>"; done |
11181 | 11276 | TK_YEAR="`date +%Y`" |
11199 | 11294 | TK_LIB_FILE="Tk" |
11200 | 11295 | TK_LIB_FLAG="-framework Tk" |
11201 | 11296 | TK_BUILD_LIB_SPEC="-F`pwd | sed -e 's/ /\\\\ /g'` -framework Tk" |
11202 | WISH_BUILD_LIB_SPEC="-F`pwd | sed -e 's/ /\\\\ /g'` -framework Tk \${WISH_LIBS}" | |
11203 | 11297 | TK_LIB_SPEC="-F${libdir} -framework Tk" |
11204 | 11298 | libdir="${libdir}/Tk.framework/Versions/\${VERSION}" |
11205 | 11299 | TK_LIBRARY="${libdir}/Resources/Scripts" |
11213 | 11307 | EXTRA_BUILD_HTML='@ln -fs contents.htm "$(HTML_INSTALL_DIR)"/TkTOC.html' |
11214 | 11308 | EXTRA_INSTALL_BINARIES='@echo "Installing Info.plist to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && $(INSTALL_DATA) Tk-Info.plist "$(LIB_INSTALL_DIR)/Resources/Info.plist"' |
11215 | 11309 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing license.terms to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA) "$(TOP_DIR)/license.terms" "$(LIB_INSTALL_DIR)/Resources"' |
11216 | if test $tk_aqua != no; then | |
11217 | if test $tk_aqua = yes; then | |
11218 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Images to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && for i in Tk.tiff Tk.icns; do $(INSTALL_DATA) "$(MAC_OSX_DIR)/$$i" "$(LIB_INSTALL_DIR)/Resources"; done' | |
11219 | else | |
11220 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing ${TK_RSRC_FILE} to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && $(INSTALL_DATA) "${TK_RSRC_FILE}" "$(LIB_INSTALL_DIR)/Resources"' | |
11221 | fi | |
11222 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing wish$(VERSION) script to $(INSTALL_ROOT)/'"${bindir}"'/" && $(INSTALL_DATA_DIR) "$(INSTALL_ROOT)/'"${bindir}"'" && printf > "$(INSTALL_ROOT)/'"${bindir}"'/wish$(VERSION)" "#!/bin/sh\n\"\$$(dirname \$$0)'"`eval d="${bindir}"; echo "$d" | sed -e 's#/[^/][^/]*#/..#g'`"'$(bindir)/Wish\" \"\$$@\"" && chmod +x "$(INSTALL_ROOT)/'"${bindir}"'/wish$(VERSION)"' | |
11223 | bindir="${libdir}/Resources/Wish.app/Contents/MacOS" | |
11224 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Info.plist to $(BIN_INSTALL_DIR)/../" && $(INSTALL_DATA) Wish-Info.plist "$(BIN_INSTALL_DIR)/../Info.plist" && mv -f "$(BIN_INSTALL_DIR)/wish$(VERSION)" "$(BIN_INSTALL_DIR)/Wish"' | |
11225 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Wish.icns to $(BIN_INSTALL_DIR)/../Resources/" && $(INSTALL_DATA_DIR) "$(BIN_INSTALL_DIR)/../Resources"' | |
11226 | if test $tk_aqua = yes; then | |
11227 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Tk.icns" "$(BIN_INSTALL_DIR)/../Resources/Wish.icns"' | |
11228 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Wish.sdef to $(BIN_INSTALL_DIR)/../Resources/" && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Wish.sdef" "$(BIN_INSTALL_DIR)/../Resources"' | |
11229 | else | |
11230 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Wish.icns" "$(BIN_INSTALL_DIR)/../Resources" && echo "Installing ${WISH_RSRC_FILE} to $(BIN_INSTALL_DIR)/../Resources/" && $(INSTALL_DATA) "${WISH_RSRC_FILE}" "$(BIN_INSTALL_DIR)/../Resources"' | |
11231 | fi | |
11310 | if test $tk_aqua = yes; then | |
11311 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Images to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && for i in Tk.tiff Tk.icns; do $(INSTALL_DATA) "$(MAC_OSX_DIR)/$$i" "$(LIB_INSTALL_DIR)/Resources"; done' | |
11312 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing wish$(VERSION) script to $(INSTALL_ROOT)/'"${bindir}"'/" && $(INSTALL_DATA_DIR) "$(INSTALL_ROOT)/'"${bindir}"'" && printf > "$(INSTALL_ROOT)/'"${bindir}"'/wish$(VERSION)" "#!/bin/sh\n\"\$$(dirname \$$0)'"`eval d="${bindir}"; echo "$d" | sed -e 's#/[^/][^/]*#/..#g'`"'$(bindir)/Wish\" \"\$$@\"" && chmod +x "$(INSTALL_ROOT)/'"${bindir}"'/wish$(VERSION)"' | |
11313 | bindir="${libdir}/Resources/Wish.app/Contents/MacOS" | |
11314 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Info.plist to $(BIN_INSTALL_DIR)/.." && $(INSTALL_DATA) Wish-Info.plist "$(BIN_INSTALL_DIR)/../Info.plist" && mv -f "$(BIN_INSTALL_DIR)/wish$(VERSION)" "$(BIN_INSTALL_DIR)/Wish"' | |
11315 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Wish.icns to $(BIN_INSTALL_DIR)/../Resources" && $(INSTALL_DATA_DIR) "$(BIN_INSTALL_DIR)/../Resources"' | |
11316 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Tk.icns" "$(BIN_INSTALL_DIR)/../Resources/Wish.icns"' | |
11317 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Wish.sdef to $(BIN_INSTALL_DIR)/../Resources" && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Wish.sdef" "$(BIN_INSTALL_DIR)/../Resources"' | |
11232 | 11318 | fi |
11233 | 11319 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Finalizing Tk.framework" && rm -f "$(LIB_INSTALL_DIR)/../Current" && ln -s "$(VERSION)" "$(LIB_INSTALL_DIR)/../Current" && for f in "$(LIB_FILE)" tkConfig.sh Resources Headers PrivateHeaders; do rm -f "$(LIB_INSTALL_DIR)/../../$$f" && ln -s "Versions/Current/$$f" "$(LIB_INSTALL_DIR)/../.."; done && f="$(STUB_LIB_FILE)" && rm -f "$(LIB_INSTALL_DIR)/../../$$f" && ln -s "Versions/$(VERSION)/$$f" "$(LIB_INSTALL_DIR)/../.."' |
11234 | 11320 | # Don't use AC_DEFINE for the following as the framework version define |
11242 | 11328 | fi |
11243 | 11329 | # libdir must be a fully qualified path and not ${exec_prefix}/lib |
11244 | 11330 | eval libdir="$libdir" |
11245 | if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then | |
11246 | TK_LIB_FLAG="-ltk${TK_VERSION}" | |
11331 | if test "${ac_cv_cygwin}" = "yes" -a "$SHARED_BUILD" = "1"; then | |
11332 | TK_LIB_FLAG="-ltk`echo ${TK_VERSION} | tr -d .`" | |
11333 | TK_BUILD_LIB_SPEC="-L\$(TOP_DIR)/win ${TK_LIB_FLAG}" | |
11247 | 11334 | else |
11248 | TK_LIB_FLAG="-ltk`echo ${TK_VERSION} | tr -d .`" | |
11249 | fi | |
11250 | TK_BUILD_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TK_LIB_FLAG}" | |
11251 | if test "${ac_cv_cygwin}" = "yes" -a "$SHARED_BUILD" = "1"; then | |
11252 | WISH_BUILD_LIB_SPEC="-L\$(TOP_DIR)/win -ltk${TK_MAJOR_VERSION}${TK_MINOR_VERSION} \${TCL_LIB_SPEC}" | |
11253 | else | |
11254 | WISH_BUILD_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TK_LIB_FLAG} \${WISH_LIBS}" | |
11335 | if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then | |
11336 | TK_LIB_FLAG="-ltk${TK_VERSION}" | |
11337 | else | |
11338 | TK_LIB_FLAG="-ltk`echo ${TK_VERSION} | tr -d .`" | |
11339 | fi | |
11340 | TK_BUILD_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TK_LIB_FLAG}" | |
11255 | 11341 | fi |
11256 | 11342 | TK_LIB_SPEC="-L${libdir} ${TK_LIB_FLAG}" |
11257 | fi | |
11258 | ||
11259 | # Extra bits for legacy Aqua Carbon build (carbon sources and resource files) | |
11260 | if test $tk_aqua = carbon; then | |
11261 | EXTRA_AQUA_OBJS='tkMacOSXCarbonEvents.o' | |
11262 | EXTRA_AQUA_SRCS='$(TOP_DIR)/carbon/tkMacOSXCarbonEvents.c' | |
11263 | LIB_RSRC_FILE='${TK_RSRC_FILE}' | |
11264 | APP_RSRC_FILE='${WISH_RSRC_FILE}' | |
11265 | REZ=/Developer/Tools/Rez | |
11266 | REZ_FLAGS='-d "SystemSevenOrLater=1" -useDF -ro' | |
11267 | if test "$SHARED_BUILD" = 0; then | |
11268 | EXTRA_INSTALL_BINARIES='@echo "Installing $(TK_RSRC_FILE) to $(LIB_INSTALL_DIR)/" && $(INSTALL_DATA) $(TK_RSRC_FILE) "$(LIB_INSTALL_DIR)"' | |
11269 | TK_BUILD_LIB_SPEC="$TK_BUILD_LIB_SPEC -sectcreate __TEXT __tk_rsrc `pwd | sed -e 's/ /\\\\ /g'`/\${TK_RSRC_FILE}" | |
11270 | WISH_BUILD_LIB_SPEC="$WISH_BUILD_LIB_SPEC -sectcreate __TEXT __tk_rsrc `pwd | sed -e 's/ /\\\\ /g'`/\${TK_RSRC_FILE}" | |
11271 | TK_LIB_SPEC="$TK_LIB_SPEC -sectcreate __TEXT __tk_rsrc ${libdir}/\${TK_RSRC_FILE}" | |
11272 | else | |
11273 | TK_SHLIB_LD_EXTRAS="$TK_SHLIB_LD_EXTRAS -sectcreate __TEXT __tk_rsrc \${TK_RSRC_FILE}" | |
11274 | fi | |
11275 | 11343 | fi |
11276 | 11344 | |
11277 | 11345 | #-------------------------------------------------------------------- |
11302 | 11370 | #------------------------------------------------------------------------ |
11303 | 11371 | |
11304 | 11372 | TK_SHARED_BUILD=${SHARED_BUILD} |
11305 | ||
11306 | ||
11307 | ||
11308 | ||
11309 | 11373 | |
11310 | 11374 | |
11311 | 11375 | |
11921 | 11985 | do |
11922 | 11986 | case "$ac_config_target" in |
11923 | 11987 | # Handling of arguments. |
11924 | "Tk-Info.plist" ) CONFIG_FILES="$CONFIG_FILES Tk-Info.plist:../${MACOSX_SRC_DIR}/Tk-Info.plist.in" ;; | |
11925 | "Wish-Info.plist" ) CONFIG_FILES="$CONFIG_FILES Wish-Info.plist:../${MACOSX_SRC_DIR}/Wish-Info.plist.in" ;; | |
11988 | "Tk-Info.plist" ) CONFIG_FILES="$CONFIG_FILES Tk-Info.plist:../macosx/Tk-Info.plist.in" ;; | |
11989 | "Wish-Info.plist" ) CONFIG_FILES="$CONFIG_FILES Wish-Info.plist:../macosx/Wish-Info.plist.in" ;; | |
11926 | 11990 | "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile:../unix/Makefile.in" ;; |
11927 | 11991 | "tkConfig.sh" ) CONFIG_FILES="$CONFIG_FILES tkConfig.sh:../unix/tkConfig.sh.in" ;; |
11928 | 11992 | "tk.pc" ) CONFIG_FILES="$CONFIG_FILES tk.pc:../unix/tk.pc.in" ;; |
12088 | 12152 | s,@TK_SHARED_BUILD@,$TK_SHARED_BUILD,;t t |
12089 | 12153 | s,@LD_LIBRARY_PATH_VAR@,$LD_LIBRARY_PATH_VAR,;t t |
12090 | 12154 | s,@TK_BUILD_LIB_SPEC@,$TK_BUILD_LIB_SPEC,;t t |
12091 | s,@WISH_BUILD_LIB_SPEC@,$WISH_BUILD_LIB_SPEC,;t t | |
12092 | 12155 | s,@TCL_STUB_FLAGS@,$TCL_STUB_FLAGS,;t t |
12093 | 12156 | s,@XINCLUDES@,$XINCLUDES,;t t |
12094 | 12157 | s,@XLIBSW@,$XLIBSW,;t t |
12105 | 12168 | s,@EXTRA_INSTALL_BINARIES@,$EXTRA_INSTALL_BINARIES,;t t |
12106 | 12169 | s,@EXTRA_BUILD_HTML@,$EXTRA_BUILD_HTML,;t t |
12107 | 12170 | s,@EXTRA_WISH_LIBS@,$EXTRA_WISH_LIBS,;t t |
12108 | s,@EXTRA_AQUA_OBJS@,$EXTRA_AQUA_OBJS,;t t | |
12109 | s,@EXTRA_AQUA_SRCS@,$EXTRA_AQUA_SRCS,;t t | |
12110 | 12171 | s,@CFBUNDLELOCALIZATIONS@,$CFBUNDLELOCALIZATIONS,;t t |
12111 | s,@MACOSX_SRC_DIR@,$MACOSX_SRC_DIR,;t t | |
12112 | 12172 | s,@TK_RSRC_FILE@,$TK_RSRC_FILE,;t t |
12113 | 12173 | s,@WISH_RSRC_FILE@,$WISH_RSRC_FILE,;t t |
12114 | 12174 | s,@LIB_RSRC_FILE@,$LIB_RSRC_FILE,;t t |
12468 | 12528 | rm -rf $f && mkdir -p $f/$v/Resources && |
12469 | 12529 | ln -s $v/$n $v/Resources $f && ln -s ../../../$n $f/$v && |
12470 | 12530 | ln -s ../../../../$n-Info.plist $f/$v/Resources/Info.plist && |
12471 | if test $tk_aqua != no; then ln -s ../../../../$n.rsrc $f/$v/Resources; fi && | |
12531 | if test $tk_aqua = yes; then ln -s ../../../../$n.rsrc $f/$v/Resources; fi && | |
12472 | 12532 | unset n f v |
12473 | 12533 | ;; |
12474 | 12534 | esac |
24 | 24 | TK_VERSION=8.6 |
25 | 25 | TK_MAJOR_VERSION=8 |
26 | 26 | TK_MINOR_VERSION=6 |
27 | TK_PATCH_LEVEL=".0" | |
27 | TK_PATCH_LEVEL=".1" | |
28 | 28 | VERSION=${TK_VERSION} |
29 | 29 | LOCALES="cs da de el en en_gb eo es fr hu it nl pl pt ru sv" |
30 | 30 | |
268 | 268 | # On Mac OS X, we can build either with X11 or with Aqua |
269 | 269 | #-------------------------------------------------------------------- |
270 | 270 | |
271 | MACOSX_SRC_DIR=macosx | |
272 | 271 | if test "`uname -s`" = "Darwin" ; then |
273 | 272 | AC_MSG_CHECKING([whether to use Aqua]) |
274 | 273 | AC_ARG_ENABLE(aqua, |
275 | AC_HELP_STRING([--enable-aqua=yes|carbon|no], | |
274 | AC_HELP_STRING([--enable-aqua=yes|no], | |
276 | 275 | [use Aqua windowingsystem on Mac OS X (default: no)]), |
277 | 276 | [tk_aqua=$enableval], [tk_aqua=no]) |
278 | 277 | if test $tk_aqua = yes -o $tk_aqua = cocoa; then |
279 | 278 | tk_aqua=yes |
279 | if test $tcl_corefoundation = no; then | |
280 | AC_MSG_WARN([Aqua can only be used when CoreFoundation is available]) | |
281 | tk_aqua=no | |
282 | fi | |
280 | 283 | if test ! -d /System/Library/Frameworks/Cocoa.framework; then |
281 | 284 | AC_MSG_WARN([Aqua can only be used when Cocoa is available]) |
282 | 285 | tk_aqua=no |
285 | 288 | AC_MSG_WARN([Aqua requires Mac OS X 10.5 or later]) |
286 | 289 | tk_aqua=no |
287 | 290 | fi |
288 | elif test $tk_aqua = carbon; then | |
289 | if test ! -d /System/Library/Frameworks/Carbon.framework; then | |
290 | AC_MSG_WARN([Aqua can only be used when Carbon is available]) | |
291 | tk_aqua=no | |
292 | fi | |
293 | if test "`uname -r | awk -F. '{print [$]1}'`" -lt 6; then | |
294 | AC_MSG_WARN([Aqua requires Mac OS X 10.2 or later]) | |
295 | tk_aqua=no | |
296 | fi | |
297 | else | |
298 | tk_aqua=no | |
299 | fi | |
300 | if test $tk_aqua != no -a $tcl_corefoundation = no; then | |
301 | AC_MSG_WARN([Aqua can only be used when CoreFoundation is available]) | |
302 | tk_aqua=no | |
303 | fi | |
304 | if test $tk_aqua = carbon; then | |
305 | MACOSX_SRC_DIR=carbon | |
306 | AC_MSG_RESULT([yes (deprecated legacy Carbon implementation)]) | |
307 | else | |
308 | AC_MSG_RESULT([$tk_aqua]) | |
309 | fi | |
291 | fi | |
292 | AC_MSG_RESULT([$tk_aqua]) | |
310 | 293 | if test "$fat_32_64" = yes; then |
311 | 294 | if test $tk_aqua = no; then |
312 | 295 | AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [ |
323 | 306 | fi |
324 | 307 | # remove 64-bit arch flags from CFLAGS et al. for combined 32 & 64 bit |
325 | 308 | # fat builds if configuration does not support 64-bit. |
326 | if test $tk_aqua = carbon -o "$tcl_cv_lib_x11_64" = no; then | |
309 | if test "$tcl_cv_lib_x11_64" = no; then | |
327 | 310 | AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) |
328 | 311 | for v in CFLAGS CPPFLAGS LDFLAGS; do |
329 | 312 | eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' |
382 | 365 | tk_aqua=no |
383 | 366 | fi |
384 | 367 | |
385 | if test $tk_aqua != no; then | |
386 | if test $tk_aqua = yes; then | |
387 | LIBS="$LIBS -framework Cocoa -framework Carbon -framework IOKit" | |
388 | EXTRA_CC_SWITCHES='-std=gnu99 -x objective-c -fobjc-gc' | |
389 | else | |
390 | LIBS="$LIBS -framework Carbon -framework IOKit" | |
391 | CFLAGS="$CFLAGS -fpascal-strings" | |
392 | fi | |
368 | if test $tk_aqua = yes; then | |
393 | 369 | AC_DEFINE(MAC_OSX_TK, 1, [Are we building TkAqua?]) |
370 | LIBS="$LIBS -framework Cocoa -framework Carbon -framework IOKit" | |
371 | EXTRA_CC_SWITCHES='-std=gnu99 -x objective-c -fobjc-gc' | |
394 | 372 | TK_WINDOWINGSYSTEM=AQUA |
395 | 373 | if test -n "${enable_symbols}" -a "${enable_symbols}" != no; then |
396 | 374 | AC_DEFINE(TK_MAC_DEBUG, 1, [Are TkAqua debug messages enabled?]) |
485 | 463 | fi |
486 | 464 | |
487 | 465 | #-------------------------------------------------------------------- |
466 | # Check for freetype / fontconfig / Xft support. | |
467 | #-------------------------------------------------------------------- | |
468 | ||
469 | if test $tk_aqua = no; then | |
470 | AC_MSG_CHECKING([whether to use xft]) | |
471 | AC_ARG_ENABLE(xft, | |
472 | AC_HELP_STRING([--enable-xft], | |
473 | [use freetype/fontconfig/xft (default: on)]), | |
474 | [enable_xft=$enableval], [enable_xft="default"]) | |
475 | XFT_CFLAGS="" | |
476 | XFT_LIBS="" | |
477 | if test "$enable_xft" = "no" ; then | |
478 | AC_MSG_RESULT([$enable_xft]) | |
479 | else | |
480 | found_xft="yes" | |
481 | dnl make sure package configurator (xft-config or pkg-config | |
482 | dnl says that xft is present. | |
483 | XFT_CFLAGS=`xft-config --cflags 2>/dev/null` || found_xft="no" | |
484 | XFT_LIBS=`xft-config --libs 2>/dev/null` || found_xft="no" | |
485 | if test "$found_xft" = "no" ; then | |
486 | found_xft=yes | |
487 | XFT_CFLAGS=`pkg-config --cflags xft 2>/dev/null` || found_xft="no" | |
488 | XFT_LIBS=`pkg-config --libs xft 2>/dev/null` || found_xft="no" | |
489 | fi | |
490 | AC_MSG_RESULT([$found_xft]) | |
491 | dnl make sure that compiling against Xft header file doesn't bomb | |
492 | if test "$found_xft" = "yes" ; then | |
493 | tk_oldCFlags=$CFLAGS | |
494 | CFLAGS="$CFLAGS $XINCLUDES $XFT_CFLAGS" | |
495 | tk_oldLibs=$LIBS | |
496 | LIBS="$tk_oldLIBS $XFT_LIBS $XLIBSW" | |
497 | AC_CHECK_HEADER(X11/Xft/Xft.h, [], [ | |
498 | found_xft=no | |
499 | ],[#include <X11/Xlib.h>]) | |
500 | CFLAGS=$tk_oldCFlags | |
501 | LIBS=$tk_oldLibs | |
502 | fi | |
503 | dnl make sure that linking against Xft libraries finds freetype | |
504 | if test "$found_xft" = "yes" ; then | |
505 | tk_oldCFlags=$CFLAGS | |
506 | CFLAGS="$CFLAGS $XINCLUDES $XFT_CFLAGS" | |
507 | tk_oldLibs=$LIBS | |
508 | LIBS="$tk_oldLIBS $XFT_LIBS $XLIBSW" | |
509 | AC_CHECK_LIB(Xft, XftFontOpen, [], [ | |
510 | found_xft=no | |
511 | ]) | |
512 | CFLAGS=$tk_oldCFlags | |
513 | LIBS=$tk_oldLibs | |
514 | fi | |
515 | dnl print a warning if xft is unusable and was specifically requested | |
516 | if test "$found_xft" = "no" ; then | |
517 | if test "$enable_xft" = "yes" ; then | |
518 | AC_MSG_WARN([Can't find xft configuration, or xft is unusable]) | |
519 | fi | |
520 | enable_xft=no | |
521 | XFT_CFLAGS="" | |
522 | XFT_LIBS="" | |
523 | else | |
524 | enable_xft=yes | |
525 | fi | |
526 | fi | |
527 | if test $enable_xft = "yes" ; then | |
528 | UNIX_FONT_OBJS=tkUnixRFont.o | |
529 | AC_DEFINE(HAVE_XFT, 1, [Have we turned on XFT (antialiased fonts)?]) | |
530 | else | |
531 | UNIX_FONT_OBJS=tkUnixFont.o | |
532 | fi | |
533 | AC_SUBST(XFT_CFLAGS) | |
534 | AC_SUBST(XFT_LIBS) | |
535 | AC_SUBST(UNIX_FONT_OBJS) | |
536 | fi | |
537 | ||
538 | #-------------------------------------------------------------------- | |
539 | # Check for XkbKeycodeToKeysym. | |
540 | #-------------------------------------------------------------------- | |
541 | ||
542 | if test $tk_aqua = no; then | |
543 | tk_oldCFlags=$CFLAGS | |
544 | tk_oldLibs=$LIBS | |
545 | CFLAGS="$CFLAGS $XINCLUDES" | |
546 | LIBS="$LIBS $XLIBSW" | |
547 | AC_CHECK_HEADER(X11/XKBlib.h, [ | |
548 | xkblib_header_found=yes | |
549 | ], [ | |
550 | xkblib_header_found=no | |
551 | ], [#include <X11/Xlib.h>]) | |
552 | if test $xkblib_header_found = "yes" ; then | |
553 | AC_CHECK_LIB(X11, XkbKeycodeToKeysym, [ | |
554 | xkbkeycodetokeysym_found=yes | |
555 | ], [ | |
556 | xkbkeycodetokeysym_found=no | |
557 | ]) | |
558 | else | |
559 | xkbkeycodetokeysym_found=no | |
560 | fi | |
561 | if test $xkbkeycodetokeysym_found = "yes" ; then | |
562 | AC_DEFINE(HAVE_XKBKEYCODETOKEYSYM, 1, [Do we have XkbKeycodeToKeysym?]) | |
563 | fi | |
564 | CFLAGS=$tk_oldCFlags | |
565 | LIBS=$tk_oldLibs | |
566 | fi | |
567 | ||
568 | #-------------------------------------------------------------------- | |
569 | # Check whether XKeycodeToKeysym is deprecated in X11 headers. | |
570 | #-------------------------------------------------------------------- | |
571 | ||
572 | if test $tk_aqua = no && test "$GCC" = yes; then | |
573 | AC_MSG_CHECKING([whether XKeycodeToKeysym is deprecated]) | |
574 | tk_oldCFlags=$CFLAGS | |
575 | CFLAGS="$CFLAGS -Werror" | |
576 | AC_TRY_LINK([ | |
577 | #include <X11/Xlib.h> | |
578 | ], [ | |
579 | XKeycodeToKeysym(0,0,0); | |
580 | ], [ | |
581 | AC_MSG_RESULT([no]) | |
582 | ], [ | |
583 | AC_MSG_RESULT([yes]) | |
584 | AC_DEFINE(XKEYCODETOKEYSYM_IS_DEPRECATED, 1, [Is XKeycodeToKeysym deprecated?]) | |
585 | ]) | |
586 | CFLAGS=$tk_oldCFlags | |
587 | fi | |
588 | ||
589 | #-------------------------------------------------------------------- | |
590 | # XXX Do this last. | |
591 | # It might modify XLIBSW which could affect other tests. | |
592 | # | |
488 | 593 | # Check whether the header and library for the XScreenSaver |
489 | 594 | # extension are available, and set HAVE_XSS if so. |
490 | 595 | # XScreenSaver is needed for Tk_GetUserInactiveTime(). |
535 | 640 | fi |
536 | 641 | |
537 | 642 | #-------------------------------------------------------------------- |
538 | # Check for freetype / fontconfig / Xft support. | |
539 | #-------------------------------------------------------------------- | |
540 | ||
541 | if test $tk_aqua = no; then | |
542 | AC_MSG_CHECKING([whether to use xft]) | |
543 | AC_ARG_ENABLE(xft, | |
544 | AC_HELP_STRING([--enable-xft], | |
545 | [use freetype/fontconfig/xft (default: on)]), | |
546 | [enable_xft=$enableval], [enable_xft="default"]) | |
547 | XFT_CFLAGS="" | |
548 | XFT_LIBS="" | |
549 | if test "$enable_xft" = "no" ; then | |
550 | AC_MSG_RESULT([$enable_xft]) | |
551 | else | |
552 | found_xft="yes" | |
553 | dnl make sure package configurator (xft-config or pkg-config | |
554 | dnl says that xft is present. | |
555 | XFT_CFLAGS=`xft-config --cflags 2>/dev/null` || found_xft="no" | |
556 | XFT_LIBS=`xft-config --libs 2>/dev/null` || found_xft="no" | |
557 | if test "$found_xft" = "no" ; then | |
558 | found_xft=yes | |
559 | XFT_CFLAGS=`pkg-config --cflags xft 2>/dev/null` || found_xft="no" | |
560 | XFT_LIBS=`pkg-config --libs xft 2>/dev/null` || found_xft="no" | |
561 | fi | |
562 | AC_MSG_RESULT([$found_xft]) | |
563 | dnl make sure that compiling against Xft header file doesn't bomb | |
564 | if test "$found_xft" = "yes" ; then | |
565 | tk_oldCFlags=$CFLAGS | |
566 | CFLAGS="$CFLAGS $XINCLUDES $XFT_CFLAGS" | |
567 | tk_oldLibs=$LIBS | |
568 | LIBS="$tk_oldLIBS $XFT_LIBS $XLIBSW" | |
569 | AC_CHECK_HEADER(X11/Xft/Xft.h, [], [ | |
570 | found_xft=no | |
571 | ],[#include <X11/Xlib.h>]) | |
572 | CFLAGS=$tk_oldCFlags | |
573 | LIBS=$tk_oldLibs | |
574 | fi | |
575 | dnl make sure that linking against Xft libraries finds freetype | |
576 | if test "$found_xft" = "yes" ; then | |
577 | tk_oldCFlags=$CFLAGS | |
578 | CFLAGS="$CFLAGS $XINCLUDES $XFT_CFLAGS" | |
579 | tk_oldLibs=$LIBS | |
580 | LIBS="$tk_oldLIBS $XFT_LIBS $XLIBSW" | |
581 | AC_CHECK_LIB(Xft, XftFontOpen, [], [ | |
582 | found_xft=no | |
583 | ]) | |
584 | CFLAGS=$tk_oldCFlags | |
585 | LIBS=$tk_oldLibs | |
586 | fi | |
587 | dnl print a warning if xft is unusable and was specifically requested | |
588 | if test "$found_xft" = "no" ; then | |
589 | if test "$enable_xft" = "yes" ; then | |
590 | AC_MSG_WARN([Can't find xft configuration, or xft is unusable]) | |
591 | fi | |
592 | enable_xft=no | |
593 | XFT_CFLAGS="" | |
594 | XFT_LIBS="" | |
595 | else | |
596 | enable_xft=yes | |
597 | fi | |
598 | fi | |
599 | if test $enable_xft = "yes" ; then | |
600 | UNIX_FONT_OBJS=tkUnixRFont.o | |
601 | AC_DEFINE(HAVE_XFT, 1, [Have we turned on XFT (antialiased fonts)?]) | |
602 | else | |
603 | UNIX_FONT_OBJS=tkUnixFont.o | |
604 | fi | |
605 | AC_SUBST(XFT_CFLAGS) | |
606 | AC_SUBST(XFT_LIBS) | |
607 | AC_SUBST(UNIX_FONT_OBJS) | |
608 | fi | |
609 | ||
610 | #-------------------------------------------------------------------- | |
611 | 643 | # Figure out whether "char" is unsigned. If so, set a |
612 | 644 | # #define for __CHAR_UNSIGNED__. |
613 | 645 | #-------------------------------------------------------------------- |
648 | 680 | if test "`uname -s`" = "Darwin" ; then |
649 | 681 | SC_ENABLE_FRAMEWORK |
650 | 682 | TK_SHLIB_LD_EXTRAS="-compatibility_version ${TK_VERSION} -current_version ${TK_VERSION}`echo ${TK_PATCH_LEVEL} | awk ['{match($0, "\\\.[0-9]+"); print substr($0,RSTART,RLENGTH)}']`" |
651 | TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -install_name "${DYLIB_INSTALL_DIR}/${TK_LIB_FILE}"' | |
652 | if test $tk_aqua = yes; then | |
653 | TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -unexported_symbols_list $$(f=$(TK_LIB_FILE).E && nm -gp tkMacOSX*.o 2>/dev/null | awk "/^[[0-9a-f]]+ . \.objc/ {print \$$3}" > $$f && echo $$f)' | |
654 | fi | |
683 | TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -install_name "${DYLIB_INSTALL_DIR}/${TK_LIB_FILE}" -unexported_symbols_list $$(f=$(TK_LIB_FILE).E && nm -gp tkMacOSX*.o 2>/dev/null | awk "/^[[0-9a-f]]+ . \.objc/ {print \$$3}" > $$f && nm -gjp "$(TCL_BIN_DIR)"/$(TCL_STUB_LIB_FILE) | grep ^_[[^_]] >> $$f && echo $$f)' | |
655 | 684 | echo "$LDFLAGS " | grep -q -- '-prebind ' && TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -seg1addr 0xb000000' |
656 | 685 | TK_SHLIB_LD_EXTRAS="${TK_SHLIB_LD_EXTRAS}"' -sectcreate __TEXT __info_plist Tk-Info.plist' |
657 | 686 | EXTRA_WISH_LIBS='-sectcreate __TEXT __info_plist Wish-Info.plist' |
658 | 687 | EXTRA_APP_CC_SWITCHES="${EXTRA_APP_CC_SWITCHES}"' -mdynamic-no-pic' |
659 | AC_CONFIG_FILES([Tk-Info.plist:../${MACOSX_SRC_DIR}/Tk-Info.plist.in Wish-Info.plist:../${MACOSX_SRC_DIR}/Wish-Info.plist.in]) | |
688 | AC_CONFIG_FILES([Tk-Info.plist:../macosx/Tk-Info.plist.in Wish-Info.plist:../macosx/Wish-Info.plist.in]) | |
660 | 689 | for l in ${LOCALES}; do CFBUNDLELOCALIZATIONS="${CFBUNDLELOCALIZATIONS}<string>$l</string>"; done |
661 | 690 | TK_YEAR="`date +%Y`" |
662 | 691 | fi |
670 | 699 | rm -rf $f && mkdir -p $f/$v/Resources && |
671 | 700 | ln -s $v/$n $v/Resources $f && ln -s ../../../$n $f/$v && |
672 | 701 | ln -s ../../../../$n-Info.plist $f/$v/Resources/Info.plist && |
673 | if test $tk_aqua != no; then ln -s ../../../../$n.rsrc $f/$v/Resources; fi && | |
702 | if test $tk_aqua = yes; then ln -s ../../../../$n.rsrc $f/$v/Resources; fi && | |
674 | 703 | unset n f v |
675 | 704 | ], VERSION=${TK_VERSION} && tk_aqua=${tk_aqua}) |
676 | 705 | LD_LIBRARY_PATH_VAR="DYLD_FRAMEWORK_PATH" |
681 | 710 | TK_LIB_FILE="Tk" |
682 | 711 | TK_LIB_FLAG="-framework Tk" |
683 | 712 | TK_BUILD_LIB_SPEC="-F`pwd | sed -e 's/ /\\\\ /g'` -framework Tk" |
684 | WISH_BUILD_LIB_SPEC="-F`pwd | sed -e 's/ /\\\\ /g'` -framework Tk \${WISH_LIBS}" | |
685 | 713 | TK_LIB_SPEC="-F${libdir} -framework Tk" |
686 | 714 | libdir="${libdir}/Tk.framework/Versions/\${VERSION}" |
687 | 715 | TK_LIBRARY="${libdir}/Resources/Scripts" |
695 | 723 | EXTRA_BUILD_HTML='@ln -fs contents.htm "$(HTML_INSTALL_DIR)"/TkTOC.html' |
696 | 724 | EXTRA_INSTALL_BINARIES='@echo "Installing Info.plist to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && $(INSTALL_DATA) Tk-Info.plist "$(LIB_INSTALL_DIR)/Resources/Info.plist"' |
697 | 725 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing license.terms to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA) "$(TOP_DIR)/license.terms" "$(LIB_INSTALL_DIR)/Resources"' |
698 | if test $tk_aqua != no; then | |
699 | if test $tk_aqua = yes; then | |
700 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Images to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && for i in Tk.tiff Tk.icns; do $(INSTALL_DATA) "$(MAC_OSX_DIR)/$$i" "$(LIB_INSTALL_DIR)/Resources"; done' | |
701 | else | |
702 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing ${TK_RSRC_FILE} to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && $(INSTALL_DATA) "${TK_RSRC_FILE}" "$(LIB_INSTALL_DIR)/Resources"' | |
703 | fi | |
704 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing wish$(VERSION) script to $(INSTALL_ROOT)/'"${bindir}"'/" && $(INSTALL_DATA_DIR) "$(INSTALL_ROOT)/'"${bindir}"'" && printf > "$(INSTALL_ROOT)/'"${bindir}"'/wish$(VERSION)" "#!/bin/sh\n\"\$$(dirname \$$0)'"`eval d="${bindir}"; echo "$d" | sed -e 's#/[^/][^/]*#/..#g'`"'$(bindir)/Wish\" \"\$$@\"" && chmod +x "$(INSTALL_ROOT)/'"${bindir}"'/wish$(VERSION)"' | |
705 | bindir="${libdir}/Resources/Wish.app/Contents/MacOS" | |
706 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Info.plist to $(BIN_INSTALL_DIR)/../" && $(INSTALL_DATA) Wish-Info.plist "$(BIN_INSTALL_DIR)/../Info.plist" && mv -f "$(BIN_INSTALL_DIR)/wish$(VERSION)" "$(BIN_INSTALL_DIR)/Wish"' | |
707 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Wish.icns to $(BIN_INSTALL_DIR)/../Resources/" && $(INSTALL_DATA_DIR) "$(BIN_INSTALL_DIR)/../Resources"' | |
708 | if test $tk_aqua = yes; then | |
709 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Tk.icns" "$(BIN_INSTALL_DIR)/../Resources/Wish.icns"' | |
710 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Wish.sdef to $(BIN_INSTALL_DIR)/../Resources/" && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Wish.sdef" "$(BIN_INSTALL_DIR)/../Resources"' | |
711 | else | |
712 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Wish.icns" "$(BIN_INSTALL_DIR)/../Resources" && echo "Installing ${WISH_RSRC_FILE} to $(BIN_INSTALL_DIR)/../Resources/" && $(INSTALL_DATA) "${WISH_RSRC_FILE}" "$(BIN_INSTALL_DIR)/../Resources"' | |
713 | fi | |
726 | if test $tk_aqua = yes; then | |
727 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Images to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && for i in Tk.tiff Tk.icns; do $(INSTALL_DATA) "$(MAC_OSX_DIR)/$$i" "$(LIB_INSTALL_DIR)/Resources"; done' | |
728 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing wish$(VERSION) script to $(INSTALL_ROOT)/'"${bindir}"'/" && $(INSTALL_DATA_DIR) "$(INSTALL_ROOT)/'"${bindir}"'" && printf > "$(INSTALL_ROOT)/'"${bindir}"'/wish$(VERSION)" "#!/bin/sh\n\"\$$(dirname \$$0)'"`eval d="${bindir}"; echo "$d" | sed -e 's#/[^/][^/]*#/..#g'`"'$(bindir)/Wish\" \"\$$@\"" && chmod +x "$(INSTALL_ROOT)/'"${bindir}"'/wish$(VERSION)"' | |
729 | bindir="${libdir}/Resources/Wish.app/Contents/MacOS" | |
730 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Info.plist to $(BIN_INSTALL_DIR)/.." && $(INSTALL_DATA) Wish-Info.plist "$(BIN_INSTALL_DIR)/../Info.plist" && mv -f "$(BIN_INSTALL_DIR)/wish$(VERSION)" "$(BIN_INSTALL_DIR)/Wish"' | |
731 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Wish.icns to $(BIN_INSTALL_DIR)/../Resources" && $(INSTALL_DATA_DIR) "$(BIN_INSTALL_DIR)/../Resources"' | |
732 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Tk.icns" "$(BIN_INSTALL_DIR)/../Resources/Wish.icns"' | |
733 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing Wish.sdef to $(BIN_INSTALL_DIR)/../Resources" && $(INSTALL_DATA) "$(MAC_OSX_DIR)/Wish.sdef" "$(BIN_INSTALL_DIR)/../Resources"' | |
714 | 734 | fi |
715 | 735 | EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Finalizing Tk.framework" && rm -f "$(LIB_INSTALL_DIR)/../Current" && ln -s "$(VERSION)" "$(LIB_INSTALL_DIR)/../Current" && for f in "$(LIB_FILE)" tkConfig.sh Resources Headers PrivateHeaders; do rm -f "$(LIB_INSTALL_DIR)/../../$$f" && ln -s "Versions/Current/$$f" "$(LIB_INSTALL_DIR)/../.."; done && f="$(STUB_LIB_FILE)" && rm -f "$(LIB_INSTALL_DIR)/../../$$f" && ln -s "Versions/$(VERSION)/$$f" "$(LIB_INSTALL_DIR)/../.."' |
716 | 736 | # Don't use AC_DEFINE for the following as the framework version define |
724 | 744 | fi |
725 | 745 | # libdir must be a fully qualified path and not ${exec_prefix}/lib |
726 | 746 | eval libdir="$libdir" |
727 | if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then | |
728 | TK_LIB_FLAG="-ltk${TK_VERSION}" | |
747 | if test "${ac_cv_cygwin}" = "yes" -a "$SHARED_BUILD" = "1"; then | |
748 | TK_LIB_FLAG="-ltk`echo ${TK_VERSION} | tr -d .`" | |
749 | TK_BUILD_LIB_SPEC="-L\$(TOP_DIR)/win ${TK_LIB_FLAG}" | |
729 | 750 | else |
730 | TK_LIB_FLAG="-ltk`echo ${TK_VERSION} | tr -d .`" | |
731 | fi | |
732 | TK_BUILD_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TK_LIB_FLAG}" | |
733 | if test "${ac_cv_cygwin}" = "yes" -a "$SHARED_BUILD" = "1"; then | |
734 | WISH_BUILD_LIB_SPEC="-L\$(TOP_DIR)/win -ltk${TK_MAJOR_VERSION}${TK_MINOR_VERSION} \${TCL_LIB_SPEC}" | |
735 | else | |
736 | WISH_BUILD_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TK_LIB_FLAG} \${WISH_LIBS}" | |
751 | if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then | |
752 | TK_LIB_FLAG="-ltk${TK_VERSION}" | |
753 | else | |
754 | TK_LIB_FLAG="-ltk`echo ${TK_VERSION} | tr -d .`" | |
755 | fi | |
756 | TK_BUILD_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TK_LIB_FLAG}" | |
737 | 757 | fi |
738 | 758 | TK_LIB_SPEC="-L${libdir} ${TK_LIB_FLAG}" |
739 | fi | |
740 | ||
741 | # Extra bits for legacy Aqua Carbon build (carbon sources and resource files) | |
742 | if test $tk_aqua = carbon; then | |
743 | EXTRA_AQUA_OBJS='tkMacOSXCarbonEvents.o' | |
744 | EXTRA_AQUA_SRCS='$(TOP_DIR)/carbon/tkMacOSXCarbonEvents.c' | |
745 | LIB_RSRC_FILE='${TK_RSRC_FILE}' | |
746 | APP_RSRC_FILE='${WISH_RSRC_FILE}' | |
747 | REZ=/Developer/Tools/Rez | |
748 | REZ_FLAGS='-d "SystemSevenOrLater=1" -useDF -ro' | |
749 | if test "$SHARED_BUILD" = 0; then | |
750 | EXTRA_INSTALL_BINARIES='@echo "Installing $(TK_RSRC_FILE) to $(LIB_INSTALL_DIR)/" && $(INSTALL_DATA) $(TK_RSRC_FILE) "$(LIB_INSTALL_DIR)"' | |
751 | TK_BUILD_LIB_SPEC="$TK_BUILD_LIB_SPEC -sectcreate __TEXT __tk_rsrc `pwd | sed -e 's/ /\\\\ /g'`/\${TK_RSRC_FILE}" | |
752 | WISH_BUILD_LIB_SPEC="$WISH_BUILD_LIB_SPEC -sectcreate __TEXT __tk_rsrc `pwd | sed -e 's/ /\\\\ /g'`/\${TK_RSRC_FILE}" | |
753 | TK_LIB_SPEC="$TK_LIB_SPEC -sectcreate __TEXT __tk_rsrc ${libdir}/\${TK_RSRC_FILE}" | |
754 | else | |
755 | TK_SHLIB_LD_EXTRAS="$TK_SHLIB_LD_EXTRAS -sectcreate __TEXT __tk_rsrc \${TK_RSRC_FILE}" | |
756 | fi | |
757 | 759 | fi |
758 | 760 | |
759 | 761 | #-------------------------------------------------------------------- |
808 | 810 | AC_SUBST(LD_LIBRARY_PATH_VAR) |
809 | 811 | |
810 | 812 | AC_SUBST(TK_BUILD_LIB_SPEC) |
811 | AC_SUBST(WISH_BUILD_LIB_SPEC) | |
812 | 813 | |
813 | 814 | AC_SUBST(TCL_STUB_FLAGS) |
814 | 815 | AC_SUBST(XINCLUDES) |
828 | 829 | AC_SUBST(EXTRA_INSTALL_BINARIES) |
829 | 830 | AC_SUBST(EXTRA_BUILD_HTML) |
830 | 831 | AC_SUBST(EXTRA_WISH_LIBS) |
831 | AC_SUBST(EXTRA_AQUA_OBJS) | |
832 | AC_SUBST(EXTRA_AQUA_SRCS) | |
833 | 832 | AC_SUBST(CFBUNDLELOCALIZATIONS) |
834 | 833 | |
835 | AC_SUBST(MACOSX_SRC_DIR) | |
836 | 834 | AC_SUBST(TK_RSRC_FILE) |
837 | 835 | AC_SUBST(WISH_RSRC_FILE) |
838 | 836 | AC_SUBST(LIB_RSRC_FILE) |
675 | 675 | |
676 | 676 | # Does the pthread-implementation provide |
677 | 677 | # 'pthread_attr_setstacksize' ? |
678 | AC_CHECK_FUNCS(pthread_attr_setstacksize) | |
678 | ||
679 | ac_saved_libs=$LIBS | |
680 | LIBS="$LIBS $THREADS_LIBS" | |
681 | AC_CHECK_FUNCS(pthread_attr_setstacksize pthread_atfork) | |
682 | LIBS=$ac_saved_libs | |
679 | 683 | else |
680 | 684 | TCL_THREADS=0 |
681 | 685 | fi |
1066 | 1070 | AC_DEFINE(MODULE_SCOPE, |
1067 | 1071 | [extern __attribute__((__visibility__("hidden")))], |
1068 | 1072 | [Compiler support for module scope symbols]) |
1073 | AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) | |
1069 | 1074 | ]) |
1070 | 1075 | ]) |
1071 | 1076 | |
1222 | 1227 | SHLIB_CFLAGS="" |
1223 | 1228 | SHLIB_LD='${CC} -shared' |
1224 | 1229 | SHLIB_SUFFIX=".dll" |
1225 | DL_OBJS="tclLoadDl.o tclWinError.o" | |
1230 | DL_OBJS="tclLoadDl.o" | |
1231 | PLAT_OBJS='${CYGWIN_OBJS}' | |
1232 | PLAT_SRCS='${CYGWIN_SRCS}' | |
1226 | 1233 | DL_LIBS="-ldl" |
1227 | 1234 | CC_SEARCH_FLAGS="" |
1228 | 1235 | LD_SEARCH_FLAGS="" |
1397 | 1404 | ]) |
1398 | 1405 | ]) |
1399 | 1406 | ;; |
1400 | Linux*) | |
1407 | Linux*|GNU*|NetBSD-Debian) | |
1401 | 1408 | SHLIB_CFLAGS="-fPIC" |
1402 | 1409 | SHLIB_SUFFIX=".so" |
1403 | 1410 | |
1435 | 1442 | |
1436 | 1443 | AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) |
1437 | 1444 | ;; |
1438 | GNU*) | |
1439 | SHLIB_CFLAGS="-fPIC" | |
1440 | SHLIB_SUFFIX=".so" | |
1441 | ||
1442 | SHLIB_LD='${CC} -shared' | |
1443 | DL_OBJS="" | |
1444 | DL_LIBS="-ldl" | |
1445 | LDFLAGS="$LDFLAGS -Wl,--export-dynamic" | |
1446 | CC_SEARCH_FLAGS="" | |
1447 | LD_SEARCH_FLAGS="" | |
1448 | AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) | |
1449 | ;; | |
1450 | 1445 | Lynx*) |
1451 | 1446 | SHLIB_CFLAGS="-fPIC" |
1452 | 1447 | SHLIB_SUFFIX=".so" |
1480 | 1475 | CC_SEARCH_FLAGS="" |
1481 | 1476 | LD_SEARCH_FLAGS="" |
1482 | 1477 | ;; |
1483 | NetBSD-1.*|FreeBSD-[[1-2]].*) | |
1484 | SHLIB_CFLAGS="-fPIC" | |
1485 | SHLIB_LD="ld -Bshareable -x" | |
1486 | SHLIB_SUFFIX=".so" | |
1487 | DL_OBJS="tclLoadDl.o" | |
1488 | DL_LIBS="" | |
1489 | AS_IF([test $doRpath = yes], [ | |
1490 | CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' | |
1491 | LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) | |
1492 | AC_CACHE_CHECK([for ELF], tcl_cv_ld_elf, [ | |
1493 | AC_EGREP_CPP(yes, [ | |
1494 | #ifdef __ELF__ | |
1495 | yes | |
1496 | #endif | |
1497 | ], tcl_cv_ld_elf=yes, tcl_cv_ld_elf=no)]) | |
1498 | AS_IF([test $tcl_cv_ld_elf = yes], [ | |
1499 | SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' | |
1500 | ], [ | |
1501 | SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' | |
1502 | ]) | |
1503 | ||
1504 | # Ancient FreeBSD doesn't handle version numbers with dots. | |
1505 | ||
1506 | UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' | |
1507 | TCL_LIB_VERSIONS_OK=nodots | |
1508 | ;; | |
1509 | 1478 | OpenBSD-*) |
1510 | 1479 | arch=`arch -s` |
1511 | 1480 | case "$arch" in |
1512 | m88k|vax) | |
1481 | vax) | |
1513 | 1482 | # Equivalent using configure option --disable-load |
1514 | 1483 | # Step 4 will set the necessary variables |
1515 | 1484 | DL_OBJS="" |
1516 | 1485 | SHLIB_LD_LIBS="" |
1486 | LDFLAGS="" | |
1517 | 1487 | ;; |
1518 | 1488 | *) |
1519 | 1489 | SHLIB_CFLAGS="-fPIC" |
1525 | 1495 | CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) |
1526 | 1496 | LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} |
1527 | 1497 | SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' |
1498 | LDFLAGS="-Wl,-export-dynamic" | |
1528 | 1499 | ;; |
1529 | 1500 | esac |
1530 | 1501 | case "$arch" in |
1531 | m88k|vax) | |
1502 | vax) | |
1532 | 1503 | CFLAGS_OPTIMIZE="-O1" |
1533 | 1504 | ;; |
1534 | 1505 | sh) |
1538 | 1509 | CFLAGS_OPTIMIZE="-O2" |
1539 | 1510 | ;; |
1540 | 1511 | esac |
1541 | AC_CACHE_CHECK([for ELF], tcl_cv_ld_elf, [ | |
1542 | AC_EGREP_CPP(yes, [ | |
1543 | #ifdef __ELF__ | |
1544 | yes | |
1545 | #endif | |
1546 | ], tcl_cv_ld_elf=yes, tcl_cv_ld_elf=no)]) | |
1547 | AS_IF([test $tcl_cv_ld_elf = yes], [ | |
1548 | LDFLAGS=-Wl,-export-dynamic | |
1549 | ], [LDFLAGS=""]) | |
1550 | 1512 | AS_IF([test "${TCL_THREADS}" = "1"], [ |
1551 | 1513 | # On OpenBSD: Compile with -pthread |
1552 | 1514 | # Don't link with -lpthread |
1557 | 1519 | UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' |
1558 | 1520 | TCL_LIB_VERSIONS_OK=nodots |
1559 | 1521 | ;; |
1560 | NetBSD-*|FreeBSD-[[3-4]].*) | |
1561 | # FreeBSD 3.* and greater have ELF. | |
1562 | # NetBSD 2.* has ELF and can use 'cc -shared' to build shared libs | |
1522 | NetBSD-*) | |
1523 | # NetBSD has ELF and can use 'cc -shared' to build shared libs | |
1563 | 1524 | SHLIB_CFLAGS="-fPIC" |
1564 | 1525 | SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' |
1565 | 1526 | SHLIB_SUFFIX=".so" |
1575 | 1536 | CFLAGS="$CFLAGS -pthread" |
1576 | 1537 | LDFLAGS="$LDFLAGS -pthread" |
1577 | 1538 | ]) |
1578 | case $system in | |
1579 | FreeBSD-3.*) | |
1580 | # FreeBSD-3 doesn't handle version numbers with dots. | |
1581 | UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' | |
1582 | SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' | |
1583 | TCL_LIB_VERSIONS_OK=nodots | |
1584 | ;; | |
1585 | esac | |
1586 | 1539 | ;; |
1587 | 1540 | FreeBSD-*) |
1588 | 1541 | # This configuration from FreeBSD Ports. |
1589 | 1542 | SHLIB_CFLAGS="-fPIC" |
1590 | 1543 | SHLIB_LD="${CC} -shared" |
1591 | TCL_SHLIB_LD_EXTRAS="-soname \$[@]" | |
1544 | TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$[@]" | |
1592 | 1545 | SHLIB_SUFFIX=".so" |
1593 | 1546 | DL_OBJS="tclLoadDl.o" |
1594 | 1547 | DL_LIBS="" |
1595 | 1548 | LDFLAGS="" |
1596 | 1549 | AS_IF([test $doRpath = yes], [ |
1597 | 1550 | CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' |
1598 | LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) | |
1551 | LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) | |
1599 | 1552 | AS_IF([test "${TCL_THREADS}" = "1"], [ |
1600 | 1553 | # The -pthread needs to go in the LDFLAGS, not LIBS |
1601 | 1554 | LIBS=`echo $LIBS | sed s/-pthread//` |
2086 | 2039 | AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ |
2087 | 2040 | AC_DEFINE(MODULE_SCOPE, [extern], |
2088 | 2041 | [No Compiler support for module scope symbols]) |
2089 | AC_DEFINE(NO_VIZ, [], [No visibility attribute]) | |
2090 | 2042 | ]) |
2091 | 2043 | |
2092 | 2044 | AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ |
2190 | 2142 | ]) |
2191 | 2143 | |
2192 | 2144 | #-------------------------------------------------------------------- |
2193 | # SC_SERIAL_PORT | |
2194 | # | |
2195 | # Determine which interface to use to talk to the serial port. | |
2196 | # Note that #include lines must begin in leftmost column for | |
2197 | # some compilers to recognize them as preprocessor directives, | |
2198 | # and some build environments have stdin not pointing at a | |
2199 | # pseudo-terminal (usually /dev/null instead.) | |
2200 | # | |
2201 | # Arguments: | |
2202 | # none | |
2203 | # | |
2204 | # Results: | |
2205 | # | |
2206 | # Defines only one of the following vars: | |
2207 | # HAVE_SYS_MODEM_H | |
2208 | # USE_TERMIOS | |
2209 | # USE_TERMIO | |
2210 | # USE_SGTTY | |
2211 | # | |
2212 | #-------------------------------------------------------------------- | |
2213 | ||
2214 | AC_DEFUN([SC_SERIAL_PORT], [ | |
2215 | AC_CHECK_HEADERS(sys/modem.h) | |
2216 | AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ | |
2217 | AC_TRY_RUN([ | |
2218 | #include <termios.h> | |
2219 | ||
2220 | int main() { | |
2221 | struct termios t; | |
2222 | if (tcgetattr(0, &t) == 0) { | |
2223 | cfsetospeed(&t, 0); | |
2224 | t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; | |
2225 | return 0; | |
2226 | } | |
2227 | return 1; | |
2228 | }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) | |
2229 | if test $tcl_cv_api_serial = no ; then | |
2230 | AC_TRY_RUN([ | |
2231 | #include <termio.h> | |
2232 | ||
2233 | int main() { | |
2234 | struct termio t; | |
2235 | if (ioctl(0, TCGETA, &t) == 0) { | |
2236 | t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; | |
2237 | return 0; | |
2238 | } | |
2239 | return 1; | |
2240 | }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) | |
2241 | fi | |
2242 | if test $tcl_cv_api_serial = no ; then | |
2243 | AC_TRY_RUN([ | |
2244 | #include <sgtty.h> | |
2245 | ||
2246 | int main() { | |
2247 | struct sgttyb t; | |
2248 | if (ioctl(0, TIOCGETP, &t) == 0) { | |
2249 | t.sg_ospeed = 0; | |
2250 | t.sg_flags |= ODDP | EVENP | RAW; | |
2251 | return 0; | |
2252 | } | |
2253 | return 1; | |
2254 | }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no) | |
2255 | fi | |
2256 | if test $tcl_cv_api_serial = no ; then | |
2257 | AC_TRY_RUN([ | |
2258 | #include <termios.h> | |
2259 | #include <errno.h> | |
2260 | ||
2261 | int main() { | |
2262 | struct termios t; | |
2263 | if (tcgetattr(0, &t) == 0 | |
2264 | || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { | |
2265 | cfsetospeed(&t, 0); | |
2266 | t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; | |
2267 | return 0; | |
2268 | } | |
2269 | return 1; | |
2270 | }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) | |
2271 | fi | |
2272 | if test $tcl_cv_api_serial = no; then | |
2273 | AC_TRY_RUN([ | |
2274 | #include <termio.h> | |
2275 | #include <errno.h> | |
2276 | ||
2277 | int main() { | |
2278 | struct termio t; | |
2279 | if (ioctl(0, TCGETA, &t) == 0 | |
2280 | || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { | |
2281 | t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; | |
2282 | return 0; | |
2283 | } | |
2284 | return 1; | |
2285 | }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) | |
2286 | fi | |
2287 | if test $tcl_cv_api_serial = no; then | |
2288 | AC_TRY_RUN([ | |
2289 | #include <sgtty.h> | |
2290 | #include <errno.h> | |
2291 | ||
2292 | int main() { | |
2293 | struct sgttyb t; | |
2294 | if (ioctl(0, TIOCGETP, &t) == 0 | |
2295 | || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { | |
2296 | t.sg_ospeed = 0; | |
2297 | t.sg_flags |= ODDP | EVENP | RAW; | |
2298 | return 0; | |
2299 | } | |
2300 | return 1; | |
2301 | }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) | |
2302 | fi]) | |
2303 | case $tcl_cv_api_serial in | |
2304 | termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);; | |
2305 | termio) AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);; | |
2306 | sgtty) AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);; | |
2307 | esac | |
2308 | ]) | |
2309 | ||
2310 | #-------------------------------------------------------------------- | |
2311 | 2145 | # SC_MISSING_POSIX_HEADERS |
2312 | 2146 | # |
2313 | 2147 | # Supply substitutes for missing POSIX header files. Special |
2419 | 2253 | not_really_there="" |
2420 | 2254 | if test "$no_x" = ""; then |
2421 | 2255 | if test "$x_includes" = ""; then |
2422 | AC_TRY_CPP([#include <X11/XIntrinsic.h>], , not_really_there="yes") | |
2256 | AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes") | |
2423 | 2257 | else |
2424 | if test ! -r $x_includes/X11/Intrinsic.h; then | |
2258 | if test ! -r $x_includes/X11/Xlib.h; then | |
2425 | 2259 | not_really_there="yes" |
2426 | 2260 | fi |
2427 | 2261 | fi |
2429 | 2263 | if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then |
2430 | 2264 | AC_MSG_CHECKING([for X11 header files]) |
2431 | 2265 | found_xincludes="no" |
2432 | AC_TRY_CPP([#include <X11/Intrinsic.h>], found_xincludes="yes", found_xincludes="no") | |
2266 | AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no") | |
2433 | 2267 | if test "$found_xincludes" = "no"; then |
2434 | 2268 | dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" |
2435 | 2269 | for i in $dirs ; do |
2436 | if test -r $i/X11/Intrinsic.h; then | |
2270 | if test -r $i/X11/Xlib.h; then | |
2437 | 2271 | AC_MSG_RESULT([$i]) |
2438 | 2272 | XINCLUDES=" -I$i" |
2439 | 2273 | found_xincludes="yes" |
2804 | 2638 | # Now check for auxiliary declarations |
2805 | 2639 | AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ |
2806 | 2640 | AC_TRY_COMPILE([#include <sys/types.h> |
2807 | #include <sys/dirent.h>],[struct dirent64 p;], | |
2641 | #include <dirent.h>],[struct dirent64 p;], | |
2808 | 2642 | tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) |
2809 | 2643 | if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then |
2810 | 2644 | AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?]) |
3 | 3 | |
4 | 4 | Name: tk |
5 | 5 | Summary: Tk graphical toolkit for the Tcl scripting language. |
6 | Version: 8.6.0 | |
6 | Version: 8.6.1 | |
7 | 7 | Release: 2 |
8 | 8 | License: BSD |
9 | 9 | Group: Development/Languages |
41 | 41 | */ |
42 | 42 | |
43 | 43 | #ifdef TK_LOCAL_MAIN_HOOK |
44 | extern int TK_LOCAL_MAIN_HOOK(int *argc, char ***argv); | |
44 | MODULE_SCOPE int TK_LOCAL_MAIN_HOOK(int *argc, char ***argv); | |
45 | 45 | #endif |
46 | ||
47 | /* Make sure the stubbed variants of those are never used. */ | |
48 | #undef Tcl_ObjSetVar2 | |
49 | #undef Tcl_NewStringObj | |
46 | 50 | |
47 | 51 | /* |
48 | 52 | *---------------------------------------------------------------------- |
137 | 141 | * specific startup file will be run under any conditions. |
138 | 142 | */ |
139 | 143 | |
140 | (Tcl_SetVar)(interp, "tcl_rcFileName", "~/.wishrc", TCL_GLOBAL_ONLY); | |
144 | Tcl_ObjSetVar2(interp, Tcl_NewStringObj("tcl_rcFileName", -1), NULL, | |
145 | Tcl_NewStringObj("~/.wishrc", -1), TCL_GLOBAL_ONLY); | |
141 | 146 | return TCL_OK; |
142 | 147 | } |
143 | 148 |
15 | 15 | /* Do we have access to Darwin CoreFoundation.framework? */ |
16 | 16 | #undef HAVE_COREFOUNDATION |
17 | 17 | |
18 | /* Compiler support for module scope symbols */ | |
19 | #undef HAVE_HIDDEN | |
20 | ||
18 | 21 | /* Do we have the intptr_t type? */ |
19 | 22 | #undef HAVE_INTPTR_T |
20 | 23 | |
36 | 39 | /* Define to 1 if you have the `open64' function. */ |
37 | 40 | #undef HAVE_OPEN64 |
38 | 41 | |
42 | /* Define to 1 if you have the `pthread_atfork' function. */ | |
43 | #undef HAVE_PTHREAD_ATFORK | |
44 | ||
39 | 45 | /* Define to 1 if you have the `pthread_attr_setstacksize' function. */ |
40 | 46 | #undef HAVE_PTHREAD_ATTR_SETSTACKSIZE |
41 | 47 | |
87 | 93 | /* Have we turned on XFT (antialiased fonts)? */ |
88 | 94 | #undef HAVE_XFT |
89 | 95 | |
96 | /* Do we have XkbKeycodeToKeysym? */ | |
97 | #undef HAVE_XKBKEYCODETOKEYSYM | |
98 | ||
90 | 99 | /* Is XScreenSaver available? */ |
91 | 100 | #undef HAVE_XSS |
92 | 101 | |
113 | 122 | |
114 | 123 | /* Do we have <stdlib.h>? */ |
115 | 124 | #undef NO_STDLIB_H |
116 | ||
117 | /* No visibility attribute */ | |
118 | #undef NO_VIZ | |
119 | 125 | |
120 | 126 | /* Define to the address where bug reports for this package should be sent. */ |
121 | 127 | #undef PACKAGE_BUGREPORT |
192 | 198 | # endif |
193 | 199 | #endif |
194 | 200 | |
201 | /* Is XKeycodeToKeysym deprecated? */ | |
202 | #undef XKEYCODETOKEYSYM_IS_DEPRECATED | |
203 | ||
195 | 204 | /* Are Darwin SUSv3 extensions available? */ |
196 | 205 | #undef _DARWIN_C_SOURCE |
197 | 206 |
11 | 11 | |
12 | 12 | #include "tkUnixInt.h" |
13 | 13 | #include <signal.h> |
14 | #ifdef HAVE_XKBKEYCODETOKEYSYM | |
15 | # include <X11/XKBlib.h> | |
16 | #else | |
17 | # define XkbOpenDisplay(D,V,E,M,m,R) (V),(E),(M),(m),(R),(NULL) | |
18 | #endif | |
14 | 19 | |
15 | 20 | /* |
16 | 21 | * The following static indicates whether this module has been initialized in |
115 | 120 | const char *displayNameStr) |
116 | 121 | { |
117 | 122 | TkDisplay *dispPtr; |
118 | Display *display = XOpenDisplay(displayNameStr); | |
123 | Display *display; | |
124 | int event = 0; | |
125 | int error = 0; | |
126 | int major = 1; | |
127 | int minor = 0; | |
128 | int reason = 0; | |
129 | unsigned int use_xkb = 0; | |
130 | /* Disabled, until we have a better test. See [Bug 3613668] */ | |
131 | #if 0 && defined(XKEYCODETOKEYSYM_IS_DEPRECATED) && defined(TCL_THREADS) | |
132 | static int xinited = 0; | |
133 | static Tcl_Mutex xinitMutex = NULL; | |
134 | ||
135 | if (!xinited) { | |
136 | Tcl_MutexLock(&xinitMutex); | |
137 | if (!xinited) { | |
138 | /* Necessary for threaded apps, of no consequence otherwise */ | |
139 | /* need only be called once, but must be called before *any* */ | |
140 | /* Xlib call is made. If xinitMutex is still NULL after the */ | |
141 | /* Tcl_MutexLock call, Tcl was compiled without threads so */ | |
142 | /* we cannot use XInitThreads() either. */ | |
143 | if (xinitMutex != NULL){ | |
144 | XInitThreads(); | |
145 | } | |
146 | xinited = 1; | |
147 | } | |
148 | Tcl_MutexUnlock(&xinitMutex); | |
149 | } | |
150 | #endif | |
151 | ||
152 | /* | |
153 | ** Bug [3607830]: Before using Xkb, it must be initialized and confirmed | |
154 | ** that the serve supports it. The XkbOpenDisplay call | |
155 | ** will perform this check and return NULL if the extension | |
156 | ** is not supported. | |
157 | ** | |
158 | ** Work around un-const-ified Xkb headers using (char *) cast. | |
159 | */ | |
160 | display = XkbOpenDisplay((char *)displayNameStr, &event, &error, &major, | |
161 | &minor, &reason); | |
162 | ||
163 | if (display == NULL) { | |
164 | /*fprintf(stderr,"event=%d error=%d major=%d minor=%d reason=%d\nDisabling xkb\n", | |
165 | event, error, major, minor, reason);*/ | |
166 | display = XOpenDisplay(displayNameStr); | |
167 | } else { | |
168 | use_xkb = TK_DISPLAY_USE_XKB; | |
169 | /*fprintf(stderr, "Using xkb %d.%d\n", major, minor);*/ | |
170 | } | |
119 | 171 | |
120 | 172 | if (display == NULL) { |
121 | 173 | return NULL; |
123 | 175 | dispPtr = ckalloc(sizeof(TkDisplay)); |
124 | 176 | memset(dispPtr, 0, sizeof(TkDisplay)); |
125 | 177 | dispPtr->display = display; |
178 | dispPtr->flags |= use_xkb; | |
126 | 179 | #ifdef TK_USE_INPUT_METHODS |
127 | 180 | OpenIM(dispPtr); |
128 | 181 | #endif |
68 | 68 | { |
69 | 69 | const char *p, *name; |
70 | 70 | |
71 | name = Tcl_GetVar(interp, "argv0", TCL_GLOBAL_ONLY); | |
71 | name = Tcl_GetVar2(interp, "argv0", NULL, TCL_GLOBAL_ONLY); | |
72 | 72 | if ((name == NULL) || (*name == 0)) { |
73 | 73 | name = "tk"; |
74 | 74 | } else { |
143 | 143 | "com.tcltk.tklibrary", TK_FRAMEWORK_VERSION, 0, PATH_MAX, |
144 | 144 | tkLibPath); |
145 | 145 | if (tkLibPath[0] != '\0') { |
146 | Tcl_SetVar(interp, "tk_library", tkLibPath, TCL_GLOBAL_ONLY); | |
146 | Tcl_SetVar2(interp, "tk_library", NULL, tkLibPath, TCL_GLOBAL_ONLY); | |
147 | 147 | } |
148 | 148 | return foundInFramework; |
149 | 149 | #else |
10 | 10 | */ |
11 | 11 | |
12 | 12 | #include "tkInt.h" |
13 | #include <X11/XKBlib.h> | |
13 | ||
14 | /* | |
15 | ** Bug [3607830]: Before using Xkb, it must be initialized. TkpOpenDisplay | |
16 | ** does this and sets the USE_XKB flag if xkb is supported. | |
17 | ** (should this be function ptr?) | |
18 | */ | |
19 | #ifdef HAVE_XKBKEYCODETOKEYSYM | |
20 | # include <X11/XKBlib.h> | |
21 | #else | |
22 | # define XkbKeycodeToKeysym(D,K,G,L) XKeycodeToKeysym(D,K,L) | |
23 | #endif | |
24 | #define TkKeycodeToKeysym(D,K,G,L) \ | |
25 | ((D)->flags & TK_DISPLAY_USE_XKB) ? \ | |
26 | XkbKeycodeToKeysym((D)->display,K,G,L) : \ | |
27 | XKeycodeToKeysym((D)->display,K,L) | |
14 | 28 | |
15 | 29 | /* |
16 | 30 | * Prototypes for local functions defined in this file: |
210 | 224 | |
211 | 225 | /* |
212 | 226 | * When mapping from a keysym to a keycode, need information about the |
213 | * modifier state to be used so that when they call XkbKeycodeToKeysym taking | |
227 | * modifier state to be used so that when they call TkKeycodeToKeysym taking | |
214 | 228 | * into account the xkey.state, they will get back the original keysym. |
215 | 229 | */ |
216 | 230 | |
220 | 234 | KeySym keySym, |
221 | 235 | XEvent *eventPtr) |
222 | 236 | { |
223 | Display *display = Tk_Display(tkwin); | |
237 | TkDisplay *dispPtr = ((TkWindow *) tkwin)->dispPtr; | |
224 | 238 | int state; |
225 | 239 | KeyCode keycode; |
226 | 240 | |
227 | 241 | if (keySym == NoSymbol) { |
228 | 242 | keycode = 0; |
229 | 243 | } else { |
230 | keycode = XKeysymToKeycode(display, keySym); | |
231 | if (keycode != 0) { | |
232 | for (state = 0; state < 4; state++) { | |
233 | if (XkbKeycodeToKeysym(display, keycode, 0, state) == keySym){ | |
234 | if (state & 1) { | |
235 | eventPtr->xkey.state |= ShiftMask; | |
236 | } | |
237 | if (state & 2) { | |
238 | TkDisplay *dispPtr = ((TkWindow *) tkwin)->dispPtr; | |
239 | ||
240 | eventPtr->xkey.state |= dispPtr->modeModMask; | |
241 | } | |
242 | break; | |
244 | keycode = XKeysymToKeycode(dispPtr->display, keySym); | |
245 | } | |
246 | eventPtr->xkey.keycode = keycode; | |
247 | if (keycode != 0) { | |
248 | for (state = 0; state < 4; state++) { | |
249 | if (XLookupKeysym(&eventPtr->xkey, state) == keySym) { | |
250 | if (state & 1) { | |
251 | eventPtr->xkey.state |= ShiftMask; | |
243 | 252 | } |
253 | if (state & 2) { | |
254 | eventPtr->xkey.state |= dispPtr->modeModMask; | |
255 | } | |
256 | break; | |
244 | 257 | } |
245 | 258 | } |
246 | 259 | } |
275 | 288 | int index; |
276 | 289 | TkKeyEvent* kePtr = (TkKeyEvent*) eventPtr; |
277 | 290 | |
291 | /* | |
292 | * Refresh the mapping information if it's stale. This must happen before | |
293 | * we do any input method processing. [Bug 3599312] | |
294 | */ | |
295 | ||
296 | if (dispPtr->bindInfoStale) { | |
297 | TkpInitKeymapInfo(dispPtr); | |
298 | } | |
299 | ||
278 | 300 | #ifdef TK_USE_INPUT_METHODS |
279 | 301 | /* |
280 | 302 | * If input methods are active, we may already have determined a keysym. |
287 | 309 | Tcl_DString ds; |
288 | 310 | TkWindow *winPtr = (TkWindow *) |
289 | 311 | Tk_IdToWindow(eventPtr->xany.display, eventPtr->xany.window); |
312 | ||
290 | 313 | Tcl_DStringInit(&ds); |
291 | 314 | (void) TkpGetString(winPtr, eventPtr, &ds); |
292 | 315 | Tcl_DStringFree(&ds); |
296 | 319 | } |
297 | 320 | } |
298 | 321 | #endif |
299 | ||
300 | /* | |
301 | * Refresh the mapping information if it's stale | |
302 | */ | |
303 | ||
304 | if (dispPtr->bindInfoStale) { | |
305 | TkpInitKeymapInfo(dispPtr); | |
306 | } | |
307 | 322 | |
308 | 323 | /* |
309 | 324 | * Figure out which of the four slots in the keymap vector to use for this |
320 | 335 | && (eventPtr->xkey.state & LockMask))) { |
321 | 336 | index += 1; |
322 | 337 | } |
323 | sym = XkbKeycodeToKeysym(dispPtr->display, eventPtr->xkey.keycode, 0, | |
338 | sym = TkKeycodeToKeysym(dispPtr, eventPtr->xkey.keycode, 0, | |
324 | 339 | index); |
325 | 340 | |
326 | 341 | /* |
335 | 350 | || ((sym >= XK_Agrave) && (sym <= XK_Odiaeresis)) |
336 | 351 | || ((sym >= XK_Ooblique) && (sym <= XK_Thorn)))) { |
337 | 352 | index &= ~1; |
338 | sym = XkbKeycodeToKeysym(dispPtr->display, eventPtr->xkey.keycode, | |
353 | sym = TkKeycodeToKeysym(dispPtr, eventPtr->xkey.keycode, | |
339 | 354 | 0, index); |
340 | 355 | } |
341 | 356 | } |
346 | 361 | */ |
347 | 362 | |
348 | 363 | if ((index & 1) && (sym == NoSymbol)) { |
349 | sym = XkbKeycodeToKeysym(dispPtr->display, eventPtr->xkey.keycode, | |
364 | sym = TkKeycodeToKeysym(dispPtr, eventPtr->xkey.keycode, | |
350 | 365 | 0, index & ~1); |
351 | 366 | } |
352 | 367 | return sym; |
396 | 411 | if (*codePtr == 0) { |
397 | 412 | continue; |
398 | 413 | } |
399 | keysym = XkbKeycodeToKeysym(dispPtr->display, *codePtr, 0, 0); | |
414 | keysym = TkKeycodeToKeysym(dispPtr, *codePtr, 0, 0); | |
400 | 415 | if (keysym == XK_Shift_Lock) { |
401 | 416 | dispPtr->lockUsage = LU_SHIFT; |
402 | 417 | break; |
422 | 437 | if (*codePtr == 0) { |
423 | 438 | continue; |
424 | 439 | } |
425 | keysym = XkbKeycodeToKeysym(dispPtr->display, *codePtr, 0, 0); | |
440 | keysym = TkKeycodeToKeysym(dispPtr, *codePtr, 0, 0); | |
426 | 441 | if (keysym == XK_Mode_switch) { |
427 | 442 | dispPtr->modeModMask |= ShiftMask << (i/modMapPtr->max_keypermod); |
428 | 443 | } |
113 | 113 | #endif |
114 | 114 | |
115 | 115 | #ifdef __CYGWIN__ |
116 | # include "tkIntXlibDecls.h" | |
116 | 117 | # define UINT unsigned int |
117 | 118 | # define HWND void * |
118 | 119 | # define HDC void * |
125 | 126 | # define WPARAM void * |
126 | 127 | # define LPARAM void * |
127 | 128 | # define LRESULT void * |
128 | ||
129 | EXTERN int TkPutImage (unsigned long *, int, Display *, Drawable, GC, | |
130 | XImage *, int, int, int, int, unsigned int, unsigned int); | |
131 | 129 | |
132 | 130 | #else /* !__CYGWIN__ */ |
133 | 131 | /* |
536 | 536 | int result; |
537 | 537 | char string[PRINT_CHARS]; |
538 | 538 | XRectangle drawnArea; |
539 | Tcl_DString buf; | |
539 | 540 | |
540 | 541 | scalePtr->flags &= ~REDRAW_PENDING; |
541 | 542 | if ((scalePtr->tkwin == NULL) || !Tk_IsMapped(scalePtr->tkwin)) { |
550 | 551 | if ((scalePtr->flags & INVOKE_COMMAND) && (scalePtr->command != NULL)) { |
551 | 552 | Tcl_Preserve(interp); |
552 | 553 | sprintf(string, scalePtr->format, scalePtr->value); |
553 | result = Tcl_VarEval(interp, scalePtr->command, " ", string, | |
554 | (char *) NULL); | |
554 | Tcl_DStringInit(&buf); | |
555 | Tcl_DStringAppend(&buf, scalePtr->command, -1); | |
556 | Tcl_DStringAppend(&buf, " ", -1); | |
557 | Tcl_DStringAppend(&buf, string, -1); | |
558 | result = Tcl_EvalEx(interp, Tcl_DStringValue(&buf), -1, 0); | |
559 | Tcl_DStringFree(&buf); | |
555 | 560 | if (result != TCL_OK) { |
556 | 561 | Tcl_AddErrorInfo(interp, "\n (command executed by scale)"); |
557 | 562 | Tcl_BackgroundException(interp, result); |
1023 | 1023 | localInterp = riPtr->interp; |
1024 | 1024 | Tcl_Preserve(localInterp); |
1025 | 1025 | if (firstArg == (argc-1)) { |
1026 | result = Tcl_GlobalEval(localInterp, argv[firstArg]); | |
1026 | result = Tcl_EvalEx(localInterp, argv[firstArg], -1, TCL_EVAL_GLOBAL); | |
1027 | 1027 | } else { |
1028 | 1028 | Tcl_DStringInit(&request); |
1029 | 1029 | Tcl_DStringAppend(&request, argv[firstArg], -1); |
1031 | 1031 | Tcl_DStringAppend(&request, " ", 1); |
1032 | 1032 | Tcl_DStringAppend(&request, argv[i], -1); |
1033 | 1033 | } |
1034 | result = Tcl_GlobalEval(localInterp, Tcl_DStringValue(&request)); | |
1034 | result = Tcl_EvalEx(localInterp, Tcl_DStringValue(&request), -1, TCL_EVAL_GLOBAL); | |
1035 | 1035 | Tcl_DStringFree(&request); |
1036 | 1036 | } |
1037 | 1037 | if (interp != localInterp) { |
1564 | 1564 | remoteInterp = riPtr->interp; |
1565 | 1565 | Tcl_Preserve(remoteInterp); |
1566 | 1566 | |
1567 | result = Tcl_GlobalEval(remoteInterp, script); | |
1567 | result = Tcl_EvalEx(remoteInterp, script, -1, TCL_EVAL_GLOBAL); | |
1568 | 1568 | |
1569 | 1569 | /* |
1570 | 1570 | * The call to Tcl_Release may have released the interpreter which |
1574 | 1574 | */ |
1575 | 1575 | |
1576 | 1576 | if (commWindow != None) { |
1577 | Tcl_DStringAppend(&reply, Tcl_GetStringResult(remoteInterp), | |
1577 | Tcl_DStringAppend(&reply, Tcl_GetString(Tcl_GetObjResult(remoteInterp)), | |
1578 | 1578 | -1); |
1579 | 1579 | if (result == TCL_ERROR) { |
1580 | 1580 | const char *varValue; |
1069 | 1069 | return TCL_OK; |
1070 | 1070 | } |
1071 | 1071 | |
1072 | if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, | |
1073 | &index) != TCL_OK) { | |
1072 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], optionStrings, | |
1073 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
1074 | 1074 | return TCL_ERROR; |
1075 | 1075 | } |
1076 | 1076 | |
1404 | 1404 | Tcl_SetObjResult(interp, result); |
1405 | 1405 | return TCL_OK; |
1406 | 1406 | } else if (objc == 4) { /* wm attributes $win -attribute */ |
1407 | if (Tcl_GetIndexFromObj(interp, objv[3], WmAttributeNames, | |
1408 | "attribute", 0, &attribute) != TCL_OK) { | |
1407 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], WmAttributeNames, | |
1408 | sizeof(char *), "attribute", 0, &attribute) != TCL_OK) { | |
1409 | 1409 | return TCL_ERROR; |
1410 | 1410 | } |
1411 | 1411 | Tcl_SetObjResult(interp, WmGetAttribute(winPtr, attribute)); |
1414 | 1414 | int i; |
1415 | 1415 | |
1416 | 1416 | for (i = 3; i < objc; i += 2) { |
1417 | if (Tcl_GetIndexFromObj(interp, objv[i], WmAttributeNames, | |
1418 | "attribute", 0, &attribute) != TCL_OK) { | |
1417 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], WmAttributeNames, | |
1418 | sizeof(char *), "attribute", 0, &attribute) != TCL_OK) { | |
1419 | 1419 | return TCL_ERROR; |
1420 | 1420 | } |
1421 | 1421 | if (WmSetAttribute(winPtr,interp,attribute,objv[i+1]) != TCL_OK) { |
1777 | 1777 | return TCL_OK; |
1778 | 1778 | } |
1779 | 1779 | |
1780 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
1781 | &index) != TCL_OK) { | |
1780 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
1781 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
1782 | 1782 | return TCL_ERROR; |
1783 | 1783 | } |
1784 | 1784 | if (index == OPT_ACTIVE) { |
2956 | 2956 | if (*Tcl_GetString(objv[3]) == '\0') { |
2957 | 2957 | wmPtr->sizeHintsFlags &= ~(USPosition|PPosition); |
2958 | 2958 | } else { |
2959 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
2960 | &index) != TCL_OK) { | |
2959 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
2960 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
2961 | 2961 | return TCL_ERROR; |
2962 | 2962 | } |
2963 | 2963 | if (index == OPT_USER) { |
3193 | 3193 | if (*Tcl_GetString(objv[3]) == '\0') { |
3194 | 3194 | wmPtr->sizeHintsFlags &= ~(USSize|PSize); |
3195 | 3195 | } else { |
3196 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
3197 | &index) != TCL_OK) { | |
3196 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
3197 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
3198 | 3198 | return TCL_ERROR; |
3199 | 3199 | } |
3200 | 3200 | if (index == OPT_USER) { |
3317 | 3317 | /* ASSERT: index1 != -1 && index2 != -2 [Bug 1789819] */ |
3318 | 3318 | ckfree(windows); |
3319 | 3319 | |
3320 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
3321 | &index) != TCL_OK) { | |
3320 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
3321 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
3322 | 3322 | return TCL_ERROR; |
3323 | 3323 | } |
3324 | 3324 | if (index == OPT_ISABOVE) { |
3377 | 3377 | return TCL_ERROR; |
3378 | 3378 | } |
3379 | 3379 | |
3380 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
3381 | &index) != TCL_OK) { | |
3380 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
3381 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
3382 | 3382 | return TCL_ERROR; |
3383 | 3383 | } |
3384 | 3384 | |
6274 | 6274 | Tcl_Preserve(protPtr); |
6275 | 6275 | interp = protPtr->interp; |
6276 | 6276 | Tcl_Preserve(interp); |
6277 | result = Tcl_GlobalEval(interp, protPtr->command); | |
6277 | result = Tcl_EvalEx(interp, protPtr->command, -1, TCL_EVAL_GLOBAL); | |
6278 | 6278 | if (result != TCL_OK) { |
6279 | 6279 | Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( |
6280 | 6280 | "\n (command for \"%s\" window manager protocol)", |
485 | 485 | @echo "Creating package index $(PKG_INDEX)"; |
486 | 486 | @$(RM) $(PKG_INDEX); |
487 | 487 | @(\ |
488 | echo "if {[catch {package present Tcl $(TCLVERSION)$(TCLPATCHL)}]} return";\ | |
488 | echo "if {[catch {package present Tcl 8.6.0}]} return";\ | |
489 | 489 | echo "if {(\$$::tcl_platform(platform) eq \"unix\") && ([info exists ::env(DISPLAY)]";\ |
490 | 490 | echo " || ([info exists ::argv] && (\"-display\" in \$$::argv)))} {";\ |
491 | echo " package ifneeded Tk $(VERSION)$(PATCH_LEVEL) [list load [file join \$$dir .. .. bin libtk$(VERSION).dll] Tk]";\ | |
491 | echo " package ifneeded Tk $(VERSION)$(PATCH_LEVEL) [list load [file normalize [file join \$$dir .. .. bin libtk$(VERSION).dll]] Tk]";\ | |
492 | 492 | echo "} else {";\ |
493 | echo " package ifneeded Tk $(VERSION)$(PATCH_LEVEL) [list load [file join \$$dir .. .. bin $(TK_DLL_FILE)] Tk]";\ | |
493 | echo " package ifneeded Tk $(VERSION)$(PATCH_LEVEL) [list load [file normalize [file join \$$dir .. .. bin $(TK_DLL_FILE)]] Tk]";\ | |
494 | 494 | echo "}";\ |
495 | 495 | ) > $(PKG_INDEX); |
496 | 496 | @for i in tkConfig.sh $(TK_LIB_FILE) $(TK_STUB_LIB_FILE); \ |
850 | 850 | Optional Packages: |
851 | 851 | --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] |
852 | 852 | --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) |
853 | --with-tcl=DIR use Tcl 8.6 binaries from DIR | |
853 | --with-tcl directory containing tcl configuration | |
854 | (tclConfig.sh) | |
854 | 855 | --with-celib=DIR use Windows/CE support library from DIR |
855 | 856 | |
856 | 857 | Some influential environment variables: |
1310 | 1311 | TK_VERSION=8.6 |
1311 | 1312 | TK_MAJOR_VERSION=8 |
1312 | 1313 | TK_MINOR_VERSION=6 |
1313 | TK_PATCH_LEVEL=".0" | |
1314 | TK_PATCH_LEVEL=".1" | |
1314 | 1315 | VER=$TK_MAJOR_VERSION$TK_MINOR_VERSION |
1315 | 1316 | |
1316 | 1317 | #------------------------------------------------------------------------ |
3102 | 3103 | echo "$as_me:$LINENO: result: static" >&5 |
3103 | 3104 | echo "${ECHO_T}static" >&6 |
3104 | 3105 | SHARED_BUILD=0 |
3105 | cat >>confdefs.h <<\_ACEOF | |
3106 | ||
3107 | cat >>confdefs.h <<\_ACEOF | |
3106 | 3108 | #define STATIC_BUILD 1 |
3107 | 3109 | _ACEOF |
3108 | 3110 | |
3114 | 3116 | #-------------------------------------------------------------------- |
3115 | 3117 | |
3116 | 3118 | |
3117 | echo "$as_me:$LINENO: checking the location of tclConfig.sh" >&5 | |
3118 | echo $ECHO_N "checking the location of tclConfig.sh... $ECHO_C" >&6 | |
3119 | ||
3120 | if test -d ../../tcl8.6$TK_PATCH_LEVEL/win; then | |
3121 | TCL_BIN_DIR_DEFAULT=../../tcl8.6$TK_PATCH_LEVEL/win | |
3122 | elif test -d ../../tcl8.6/win; then | |
3123 | TCL_BIN_DIR_DEFAULT=../../tcl8.6/win | |
3124 | else | |
3125 | TCL_BIN_DIR_DEFAULT=../../tcl/win | |
3126 | fi | |
3127 | ||
3119 | # | |
3120 | # Ok, lets find the tcl configuration | |
3121 | # First, look for one uninstalled. | |
3122 | # the alternative search directory is invoked by --with-tcl | |
3123 | # | |
3124 | ||
3125 | if test x"${no_tcl}" = x ; then | |
3126 | # we reset no_tcl in case something fails here | |
3127 | no_tcl=true | |
3128 | 3128 | |
3129 | 3129 | # Check whether --with-tcl or --without-tcl was given. |
3130 | 3130 | if test "${with_tcl+set}" = set; then |
3131 | 3131 | withval="$with_tcl" |
3132 | TCL_BIN_DIR=$withval | |
3133 | else | |
3134 | TCL_BIN_DIR=`cd $TCL_BIN_DIR_DEFAULT; pwd` | |
3132 | with_tclconfig="${withval}" | |
3135 | 3133 | fi; |
3136 | if test ! -d $TCL_BIN_DIR; then | |
3137 | { { echo "$as_me:$LINENO: error: Tcl directory $TCL_BIN_DIR does not exist" >&5 | |
3138 | echo "$as_me: error: Tcl directory $TCL_BIN_DIR does not exist" >&2;} | |
3134 | echo "$as_me:$LINENO: checking for Tcl configuration" >&5 | |
3135 | echo $ECHO_N "checking for Tcl configuration... $ECHO_C" >&6 | |
3136 | if test "${ac_cv_c_tclconfig+set}" = set; then | |
3137 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
3138 | else | |
3139 | ||
3140 | ||
3141 | # First check to see if --with-tcl was specified. | |
3142 | if test x"${with_tclconfig}" != x ; then | |
3143 | case "${with_tclconfig}" in | |
3144 | */tclConfig.sh ) | |
3145 | if test -f "${with_tclconfig}"; then | |
3146 | { echo "$as_me:$LINENO: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5 | |
3147 | echo "$as_me: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&2;} | |
3148 | with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" | |
3149 | fi ;; | |
3150 | esac | |
3151 | if test -f "${with_tclconfig}/tclConfig.sh" ; then | |
3152 | ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" | |
3153 | else | |
3154 | { { echo "$as_me:$LINENO: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" >&5 | |
3155 | echo "$as_me: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" >&2;} | |
3139 | 3156 | { (exit 1); exit 1; }; } |
3157 | fi | |
3158 | fi | |
3159 | ||
3160 | # then check for a private Tcl installation | |
3161 | if test x"${ac_cv_c_tclconfig}" = x ; then | |
3162 | for i in \ | |
3163 | ../tcl \ | |
3164 | `ls -dr ../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ | |
3165 | `ls -dr ../tcl[8-9].[0-9] 2>/dev/null` \ | |
3166 | `ls -dr ../tcl[8-9].[0-9]* 2>/dev/null` \ | |
3167 | ../../tcl \ | |
3168 | `ls -dr ../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ | |
3169 | `ls -dr ../../tcl[8-9].[0-9] 2>/dev/null` \ | |
3170 | `ls -dr ../../tcl[8-9].[0-9]* 2>/dev/null` \ | |
3171 | ../../../tcl \ | |
3172 | `ls -dr ../../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ | |
3173 | `ls -dr ../../../tcl[8-9].[0-9] 2>/dev/null` \ | |
3174 | `ls -dr ../../../tcl[8-9].[0-9]* 2>/dev/null` ; do | |
3175 | if test -f "$i/win/tclConfig.sh" ; then | |
3176 | ac_cv_c_tclconfig="`(cd $i/win; pwd)`" | |
3177 | break | |
3178 | fi | |
3179 | done | |
3180 | fi | |
3181 | ||
3182 | # check in a few common install locations | |
3183 | if test x"${ac_cv_c_tclconfig}" = x ; then | |
3184 | for i in `ls -d ${libdir} 2>/dev/null` \ | |
3185 | `ls -d ${exec_prefix}/lib 2>/dev/null` \ | |
3186 | `ls -d ${prefix}/lib 2>/dev/null` \ | |
3187 | `ls -d /cygdrive/c/Tcl/lib 2>/dev/null` \ | |
3188 | `ls -d /cygdrive/c/Progra~1/Tcl/lib 2>/dev/null` \ | |
3189 | `ls -d /c/Tcl/lib 2>/dev/null` \ | |
3190 | `ls -d /c/Progra~1/Tcl/lib 2>/dev/null` \ | |
3191 | `ls -d C:/Tcl/lib 2>/dev/null` \ | |
3192 | `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ | |
3193 | ; do | |
3194 | if test -f "$i/tclConfig.sh" ; then | |
3195 | ac_cv_c_tclconfig="`(cd $i; pwd)`" | |
3196 | break | |
3197 | fi | |
3198 | done | |
3199 | fi | |
3200 | ||
3201 | # check in a few other private locations | |
3202 | if test x"${ac_cv_c_tclconfig}" = x ; then | |
3203 | for i in \ | |
3204 | ${srcdir}/../tcl \ | |
3205 | `ls -dr ${srcdir}/../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ | |
3206 | `ls -dr ${srcdir}/../tcl[8-9].[0-9] 2>/dev/null` \ | |
3207 | `ls -dr ${srcdir}/../tcl[8-9].[0-9]* 2>/dev/null` ; do | |
3208 | if test -f "$i/win/tclConfig.sh" ; then | |
3209 | ac_cv_c_tclconfig="`(cd $i/win; pwd)`" | |
3210 | break | |
3211 | fi | |
3212 | done | |
3213 | fi | |
3214 | ||
3215 | fi | |
3216 | ||
3217 | ||
3218 | if test x"${ac_cv_c_tclconfig}" = x ; then | |
3219 | TCL_BIN_DIR="# no Tcl configs found" | |
3220 | { { echo "$as_me:$LINENO: error: Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" >&5 | |
3221 | echo "$as_me: error: Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" >&2;} | |
3222 | { (exit 1); exit 1; }; } | |
3223 | else | |
3224 | no_tcl= | |
3225 | TCL_BIN_DIR="${ac_cv_c_tclconfig}" | |
3226 | echo "$as_me:$LINENO: result: found ${TCL_BIN_DIR}/tclConfig.sh" >&5 | |
3227 | echo "${ECHO_T}found ${TCL_BIN_DIR}/tclConfig.sh" >&6 | |
3228 | fi | |
3140 | 3229 | fi |
3141 | if test ! -f $TCL_BIN_DIR/tclConfig.sh; then | |
3142 | if test ! -f $TCL_BIN_DIR/../unix/tclConfig.sh; then | |
3143 | { { echo "$as_me:$LINENO: error: There is no tclConfig.sh in $TCL_BIN_DIR: perhaps you did not specify the Tcl *build* directory (not the toplevel Tcl directory) or you forgot to configure Tcl?" >&5 | |
3144 | echo "$as_me: error: There is no tclConfig.sh in $TCL_BIN_DIR: perhaps you did not specify the Tcl *build* directory (not the toplevel Tcl directory) or you forgot to configure Tcl?" >&2;} | |
3145 | { (exit 1); exit 1; }; } | |
3146 | fi | |
3147 | TCL_BIN_DIR=`cd ${TCL_BIN_DIR}/../unix; pwd` | |
3148 | fi | |
3149 | echo "$as_me:$LINENO: result: $TCL_BIN_DIR/tclConfig.sh" >&5 | |
3150 | echo "${ECHO_T}$TCL_BIN_DIR/tclConfig.sh" >&6 | |
3151 | ||
3152 | ||
3153 | echo "$as_me:$LINENO: checking for existence of $TCL_BIN_DIR/tclConfig.sh" >&5 | |
3154 | echo $ECHO_N "checking for existence of $TCL_BIN_DIR/tclConfig.sh... $ECHO_C" >&6 | |
3155 | ||
3156 | if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then | |
3230 | ||
3231 | ||
3232 | echo "$as_me:$LINENO: checking for existence of ${TCL_BIN_DIR}/tclConfig.sh" >&5 | |
3233 | echo $ECHO_N "checking for existence of ${TCL_BIN_DIR}/tclConfig.sh... $ECHO_C" >&6 | |
3234 | ||
3235 | if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then | |
3157 | 3236 | echo "$as_me:$LINENO: result: loading" >&5 |
3158 | 3237 | echo "${ECHO_T}loading" >&6 |
3159 | . $TCL_BIN_DIR/tclConfig.sh | |
3238 | . "${TCL_BIN_DIR}/tclConfig.sh" | |
3160 | 3239 | else |
3161 | echo "$as_me:$LINENO: result: file not found" >&5 | |
3162 | echo "${ECHO_T}file not found" >&6 | |
3240 | echo "$as_me:$LINENO: result: could not find ${TCL_BIN_DIR}/tclConfig.sh" >&5 | |
3241 | echo "${ECHO_T}could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6 | |
3163 | 3242 | fi |
3164 | 3243 | |
3165 | 3244 | # |
3203 | 3282 | |
3204 | 3283 | |
3205 | 3284 | |
3285 | ||
3286 | if test "${TCL_MAJOR_VERSION}" != "${TK_MAJOR_VERSION}"; then | |
3287 | { { echo "$as_me:$LINENO: error: ${TCL_BIN_DIR}/tclConfig.sh is for Tcl ${TCL_VERSION}. | |
3288 | Tk ${TK_VERSION}${TK_PATCH_LEVEL} needs Tcl ${TK_VERSION}. | |
3289 | Use --with-tcl= option to indicate location of tclConfig.sh file for Tcl ${TK_VERSION}." >&5 | |
3290 | echo "$as_me: error: ${TCL_BIN_DIR}/tclConfig.sh is for Tcl ${TCL_VERSION}. | |
3291 | Tk ${TK_VERSION}${TK_PATCH_LEVEL} needs Tcl ${TK_VERSION}. | |
3292 | Use --with-tcl= option to indicate location of tclConfig.sh file for Tcl ${TK_VERSION}." >&2;} | |
3293 | { (exit 1); exit 1; }; } | |
3294 | fi | |
3295 | if test "${TCL_MINOR_VERSION}" -lt "${TK_MINOR_VERSION}"; then | |
3296 | { { echo "$as_me:$LINENO: error: ${TCL_BIN_DIR}/tclConfig.sh is for Tcl ${TCL_VERSION}. | |
3297 | Tk ${TK_VERSION}${TK_PATCH_LEVEL} needs Tcl ${TK_VERSION}. | |
3298 | Use --with-tcl= option to indicate location of tclConfig.sh file for Tcl ${TK_VERSION}." >&5 | |
3299 | echo "$as_me: error: ${TCL_BIN_DIR}/tclConfig.sh is for Tcl ${TCL_VERSION}. | |
3300 | Tk ${TK_VERSION}${TK_PATCH_LEVEL} needs Tcl ${TK_VERSION}. | |
3301 | Use --with-tcl= option to indicate location of tclConfig.sh file for Tcl ${TK_VERSION}." >&2;} | |
3302 | { (exit 1); exit 1; }; } | |
3303 | fi | |
3206 | 3304 | |
3207 | 3305 | #-------------------------------------------------------------------- |
3208 | 3306 | # The statements below define a collection of compile flags. This |
13 | 13 | TK_VERSION=8.6 |
14 | 14 | TK_MAJOR_VERSION=8 |
15 | 15 | TK_MINOR_VERSION=6 |
16 | TK_PATCH_LEVEL=".0" | |
16 | TK_PATCH_LEVEL=".1" | |
17 | 17 | VER=$TK_MAJOR_VERSION$TK_MINOR_VERSION |
18 | 18 | |
19 | 19 | #------------------------------------------------------------------------ |
79 | 79 | |
80 | 80 | SC_PATH_TCLCONFIG($TK_PATCH_LEVEL) |
81 | 81 | SC_LOAD_TCLCONFIG |
82 | ||
83 | if test "${TCL_MAJOR_VERSION}" != "${TK_MAJOR_VERSION}"; then | |
84 | AC_MSG_ERROR([${TCL_BIN_DIR}/tclConfig.sh is for Tcl ${TCL_VERSION}. | |
85 | Tk ${TK_VERSION}${TK_PATCH_LEVEL} needs Tcl ${TK_VERSION}. | |
86 | Use --with-tcl= option to indicate location of tclConfig.sh file for Tcl ${TK_VERSION}.]) | |
87 | fi | |
88 | if test "${TCL_MINOR_VERSION}" -lt "${TK_MINOR_VERSION}"; then | |
89 | AC_MSG_ERROR([${TCL_BIN_DIR}/tclConfig.sh is for Tcl ${TCL_VERSION}. | |
90 | Tk ${TK_VERSION}${TK_PATCH_LEVEL} needs Tcl ${TK_VERSION}. | |
91 | Use --with-tcl= option to indicate location of tclConfig.sh file for Tcl ${TK_VERSION}.]) | |
92 | fi | |
82 | 93 | |
83 | 94 | #-------------------------------------------------------------------- |
84 | 95 | # The statements below define a collection of compile flags. This |
696 | 696 | htmlhelp: chmsetup $(CHMFILE) |
697 | 697 | |
698 | 698 | $(CHMFILE): $(DOCDIR)\* |
699 | @$(TCLSH) $(TOOLSDIR)\tcltk-man2html.tcl | |
699 | @$(TCLSH) $(TCLTOOLSDIR)\tcltk-man2html.tcl | |
700 | 700 | @echo Compiling HTML help project |
701 | 701 | @$(HHC) <<$(HHPFILE) >NUL |
702 | 702 | [OPTIONS] |
2 | 2 | # |
3 | 3 | # Locate the tclConfig.sh file and perform a sanity check on |
4 | 4 | # the Tcl compile flags |
5 | # Currently a no-op for Windows | |
6 | 5 | # |
7 | 6 | # Arguments: |
8 | # PATCH_LEVEL The patch level for Tcl if any. | |
7 | # none | |
9 | 8 | # |
10 | 9 | # Results: |
11 | 10 | # |
12 | 11 | # Adds the following arguments to configure: |
13 | 12 | # --with-tcl=... |
14 | 13 | # |
15 | # Sets the following vars: | |
16 | # TCL_BIN_DIR Full path to the tclConfig.sh file | |
14 | # Defines the following vars: | |
15 | # TCL_BIN_DIR Full path to the directory containing | |
16 | # the tclConfig.sh file | |
17 | 17 | #------------------------------------------------------------------------ |
18 | 18 | |
19 | 19 | AC_DEFUN([SC_PATH_TCLCONFIG], [ |
20 | AC_MSG_CHECKING([the location of tclConfig.sh]) | |
21 | ||
22 | if test -d ../../tcl8.6$1/win; then | |
23 | TCL_BIN_DIR_DEFAULT=../../tcl8.6$1/win | |
24 | elif test -d ../../tcl8.6/win; then | |
25 | TCL_BIN_DIR_DEFAULT=../../tcl8.6/win | |
26 | else | |
27 | TCL_BIN_DIR_DEFAULT=../../tcl/win | |
28 | fi | |
29 | ||
30 | AC_ARG_WITH(tcl, [ --with-tcl=DIR use Tcl 8.6 binaries from DIR], | |
31 | TCL_BIN_DIR=$withval, TCL_BIN_DIR=`cd $TCL_BIN_DIR_DEFAULT; pwd`) | |
32 | if test ! -d $TCL_BIN_DIR; then | |
33 | AC_MSG_ERROR(Tcl directory $TCL_BIN_DIR does not exist) | |
34 | fi | |
35 | if test ! -f $TCL_BIN_DIR/tclConfig.sh; then | |
36 | if test ! -f $TCL_BIN_DIR/../unix/tclConfig.sh; then | |
37 | AC_MSG_ERROR(There is no tclConfig.sh in $TCL_BIN_DIR: perhaps you did not specify the Tcl *build* directory (not the toplevel Tcl directory) or you forgot to configure Tcl?) | |
38 | fi | |
39 | TCL_BIN_DIR=`cd ${TCL_BIN_DIR}/../unix; pwd` | |
40 | fi | |
41 | AC_MSG_RESULT($TCL_BIN_DIR/tclConfig.sh) | |
20 | # | |
21 | # Ok, lets find the tcl configuration | |
22 | # First, look for one uninstalled. | |
23 | # the alternative search directory is invoked by --with-tcl | |
24 | # | |
25 | ||
26 | if test x"${no_tcl}" = x ; then | |
27 | # we reset no_tcl in case something fails here | |
28 | no_tcl=true | |
29 | AC_ARG_WITH(tcl, | |
30 | AC_HELP_STRING([--with-tcl], | |
31 | [directory containing tcl configuration (tclConfig.sh)]), | |
32 | with_tclconfig="${withval}") | |
33 | AC_MSG_CHECKING([for Tcl configuration]) | |
34 | AC_CACHE_VAL(ac_cv_c_tclconfig,[ | |
35 | ||
36 | # First check to see if --with-tcl was specified. | |
37 | if test x"${with_tclconfig}" != x ; then | |
38 | case "${with_tclconfig}" in | |
39 | */tclConfig.sh ) | |
40 | if test -f "${with_tclconfig}"; then | |
41 | AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) | |
42 | with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" | |
43 | fi ;; | |
44 | esac | |
45 | if test -f "${with_tclconfig}/tclConfig.sh" ; then | |
46 | ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" | |
47 | else | |
48 | AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) | |
49 | fi | |
50 | fi | |
51 | ||
52 | # then check for a private Tcl installation | |
53 | if test x"${ac_cv_c_tclconfig}" = x ; then | |
54 | for i in \ | |
55 | ../tcl \ | |
56 | `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ | |
57 | `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \ | |
58 | `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ | |
59 | ../../tcl \ | |
60 | `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ | |
61 | `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ | |
62 | `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ | |
63 | ../../../tcl \ | |
64 | `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ | |
65 | `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ | |
66 | `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do | |
67 | if test -f "$i/win/tclConfig.sh" ; then | |
68 | ac_cv_c_tclconfig="`(cd $i/win; pwd)`" | |
69 | break | |
70 | fi | |
71 | done | |
72 | fi | |
73 | ||
74 | # check in a few common install locations | |
75 | if test x"${ac_cv_c_tclconfig}" = x ; then | |
76 | for i in `ls -d ${libdir} 2>/dev/null` \ | |
77 | `ls -d ${exec_prefix}/lib 2>/dev/null` \ | |
78 | `ls -d ${prefix}/lib 2>/dev/null` \ | |
79 | `ls -d /cygdrive/c/Tcl/lib 2>/dev/null` \ | |
80 | `ls -d /cygdrive/c/Progra~1/Tcl/lib 2>/dev/null` \ | |
81 | `ls -d /c/Tcl/lib 2>/dev/null` \ | |
82 | `ls -d /c/Progra~1/Tcl/lib 2>/dev/null` \ | |
83 | `ls -d C:/Tcl/lib 2>/dev/null` \ | |
84 | `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ | |
85 | ; do | |
86 | if test -f "$i/tclConfig.sh" ; then | |
87 | ac_cv_c_tclconfig="`(cd $i; pwd)`" | |
88 | break | |
89 | fi | |
90 | done | |
91 | fi | |
92 | ||
93 | # check in a few other private locations | |
94 | if test x"${ac_cv_c_tclconfig}" = x ; then | |
95 | for i in \ | |
96 | ${srcdir}/../tcl \ | |
97 | `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ | |
98 | `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ | |
99 | `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do | |
100 | if test -f "$i/win/tclConfig.sh" ; then | |
101 | ac_cv_c_tclconfig="`(cd $i/win; pwd)`" | |
102 | break | |
103 | fi | |
104 | done | |
105 | fi | |
106 | ]) | |
107 | ||
108 | if test x"${ac_cv_c_tclconfig}" = x ; then | |
109 | TCL_BIN_DIR="# no Tcl configs found" | |
110 | AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) | |
111 | else | |
112 | no_tcl= | |
113 | TCL_BIN_DIR="${ac_cv_c_tclconfig}" | |
114 | AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) | |
115 | fi | |
116 | fi | |
42 | 117 | ]) |
43 | 118 | |
44 | 119 | #------------------------------------------------------------------------ |
45 | 120 | # SC_PATH_TKCONFIG -- |
46 | 121 | # |
47 | 122 | # Locate the tkConfig.sh file |
48 | # Currently a no-op for Windows | |
49 | 123 | # |
50 | 124 | # Arguments: |
51 | 125 | # none |
55 | 129 | # Adds the following arguments to configure: |
56 | 130 | # --with-tk=... |
57 | 131 | # |
58 | # Sets the following vars: | |
59 | # TK_BIN_DIR Full path to the tkConfig.sh file | |
132 | # Defines the following vars: | |
133 | # TK_BIN_DIR Full path to the directory containing | |
134 | # the tkConfig.sh file | |
60 | 135 | #------------------------------------------------------------------------ |
61 | 136 | |
62 | 137 | AC_DEFUN([SC_PATH_TKCONFIG], [ |
63 | AC_MSG_CHECKING([the location of tkConfig.sh]) | |
64 | ||
65 | if test -d ../../tk8.6$1/win; then | |
66 | TK_BIN_DIR_DEFAULT=../../tk8.6$1/win | |
67 | elif test -d ../../tk8.6/win; then | |
68 | TK_BIN_DIR_DEFAULT=../../tk8.6/win | |
69 | else | |
70 | TK_BIN_DIR_DEFAULT=../../tk/win | |
71 | fi | |
72 | ||
73 | AC_ARG_WITH(tk, [ --with-tk=DIR use Tk 8.6 binaries from DIR], | |
74 | TK_BIN_DIR=$withval, TK_BIN_DIR=`cd $TK_BIN_DIR_DEFAULT; pwd`) | |
75 | if test ! -d $TK_BIN_DIR; then | |
76 | AC_MSG_ERROR(Tk directory $TK_BIN_DIR does not exist) | |
77 | fi | |
78 | if test ! -f $TK_BIN_DIR/tkConfig.sh; then | |
79 | AC_MSG_ERROR(There is no tkConfig.sh in $TK_BIN_DIR: perhaps you did not specify the Tk *build* directory (not the toplevel Tk directory) or you forgot to configure Tk?) | |
80 | fi | |
81 | ||
82 | AC_MSG_RESULT([$TK_BIN_DIR/tkConfig.sh]) | |
138 | # | |
139 | # Ok, lets find the tk configuration | |
140 | # First, look for one uninstalled. | |
141 | # the alternative search directory is invoked by --with-tk | |
142 | # | |
143 | ||
144 | if test x"${no_tk}" = x ; then | |
145 | # we reset no_tk in case something fails here | |
146 | no_tk=true | |
147 | AC_ARG_WITH(tk, | |
148 | AC_HELP_STRING([--with-tk], | |
149 | [directory containing tk configuration (tkConfig.sh)]), | |
150 | with_tkconfig="${withval}") | |
151 | AC_MSG_CHECKING([for Tk configuration]) | |
152 | AC_CACHE_VAL(ac_cv_c_tkconfig,[ | |
153 | ||
154 | # First check to see if --with-tkconfig was specified. | |
155 | if test x"${with_tkconfig}" != x ; then | |
156 | case "${with_tkconfig}" in | |
157 | */tkConfig.sh ) | |
158 | if test -f "${with_tkconfig}"; then | |
159 | AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) | |
160 | with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" | |
161 | fi ;; | |
162 | esac | |
163 | if test -f "${with_tkconfig}/tkConfig.sh" ; then | |
164 | ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" | |
165 | else | |
166 | AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) | |
167 | fi | |
168 | fi | |
169 | ||
170 | # then check for a private Tk library | |
171 | if test x"${ac_cv_c_tkconfig}" = x ; then | |
172 | for i in \ | |
173 | ../tk \ | |
174 | `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ | |
175 | `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \ | |
176 | `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \ | |
177 | ../../tk \ | |
178 | `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ | |
179 | `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \ | |
180 | `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ | |
181 | ../../../tk \ | |
182 | `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ | |
183 | `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ | |
184 | `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do | |
185 | if test -f "$i/win/tkConfig.sh" ; then | |
186 | ac_cv_c_tkconfig="`(cd $i/win; pwd)`" | |
187 | break | |
188 | fi | |
189 | done | |
190 | fi | |
191 | ||
192 | # check in a few common install locations | |
193 | if test x"${ac_cv_c_tkconfig}" = x ; then | |
194 | for i in `ls -d ${libdir} 2>/dev/null` \ | |
195 | `ls -d ${exec_prefix}/lib 2>/dev/null` \ | |
196 | `ls -d ${prefix}/lib 2>/dev/null` \ | |
197 | `ls -d /cygdrive/c/Tcl/lib 2>/dev/null` \ | |
198 | `ls -d /cygdrive/c/Progra~1/Tcl/lib 2>/dev/null` \ | |
199 | `ls -d /c/Tcl/lib 2>/dev/null` \ | |
200 | `ls -d /c/Progra~1/Tcl/lib 2>/dev/null` \ | |
201 | `ls -d C:/Tcl/lib 2>/dev/null` \ | |
202 | `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ | |
203 | ; do | |
204 | if test -f "$i/tkConfig.sh" ; then | |
205 | ac_cv_c_tkconfig="`(cd $i; pwd)`" | |
206 | break | |
207 | fi | |
208 | done | |
209 | fi | |
210 | ||
211 | # check in a few other private locations | |
212 | if test x"${ac_cv_c_tkconfig}" = x ; then | |
213 | for i in \ | |
214 | ${srcdir}/../tk \ | |
215 | `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ | |
216 | `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ | |
217 | `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do | |
218 | if test -f "$i/win/tkConfig.sh" ; then | |
219 | ac_cv_c_tkconfig="`(cd $i/win; pwd)`" | |
220 | break | |
221 | fi | |
222 | done | |
223 | fi | |
224 | ]) | |
225 | ||
226 | if test x"${ac_cv_c_tkconfig}" = x ; then | |
227 | TK_BIN_DIR="# no Tk configs found" | |
228 | AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) | |
229 | else | |
230 | no_tk= | |
231 | TK_BIN_DIR="${ac_cv_c_tkconfig}" | |
232 | AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) | |
233 | fi | |
234 | fi | |
83 | 235 | ]) |
84 | 236 | |
85 | 237 | #------------------------------------------------------------------------ |
102 | 254 | #------------------------------------------------------------------------ |
103 | 255 | |
104 | 256 | AC_DEFUN([SC_LOAD_TCLCONFIG], [ |
105 | AC_MSG_CHECKING([for existence of $TCL_BIN_DIR/tclConfig.sh]) | |
106 | ||
107 | if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then | |
257 | AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) | |
258 | ||
259 | if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then | |
108 | 260 | AC_MSG_RESULT([loading]) |
109 | . $TCL_BIN_DIR/tclConfig.sh | |
261 | . "${TCL_BIN_DIR}/tclConfig.sh" | |
110 | 262 | else |
111 | AC_MSG_RESULT([file not found]) | |
263 | AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh]) | |
112 | 264 | fi |
113 | 265 | |
114 | 266 | # |
157 | 309 | # SC_LOAD_TKCONFIG -- |
158 | 310 | # |
159 | 311 | # Load the tkConfig.sh file |
160 | # Currently a no-op for Windows | |
161 | 312 | # |
162 | 313 | # Arguments: |
163 | 314 | # |
171 | 322 | #------------------------------------------------------------------------ |
172 | 323 | |
173 | 324 | AC_DEFUN([SC_LOAD_TKCONFIG], [ |
174 | AC_MSG_CHECKING([for existence of $TK_BIN_DIR/tkConfig.sh]) | |
175 | ||
176 | if test -f "$TK_BIN_DIR/tkConfig.sh" ; then | |
325 | AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh]) | |
326 | ||
327 | if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then | |
177 | 328 | AC_MSG_RESULT([loading]) |
178 | . $TK_BIN_DIR/tkConfig.sh | |
329 | . "${TK_BIN_DIR}/tkConfig.sh" | |
179 | 330 | else |
180 | AC_MSG_RESULT([could not find $TK_BIN_DIR/tkConfig.sh]) | |
331 | AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh]) | |
181 | 332 | fi |
182 | 333 | |
183 | 334 | |
211 | 362 | AC_MSG_CHECKING([how to build libraries]) |
212 | 363 | AC_ARG_ENABLE(shared, |
213 | 364 | [ --enable-shared build and link with shared libraries (default: on)], |
214 | [tcl_ok=$enableval], [tcl_ok=yes]) | |
365 | [tcl_ok=$enableval], [tcl_ok=yes]) | |
215 | 366 | |
216 | 367 | if test "${enable_shared+set}" = set; then |
217 | 368 | enableval="$enable_shared" |
226 | 377 | else |
227 | 378 | AC_MSG_RESULT([static]) |
228 | 379 | SHARED_BUILD=0 |
229 | AC_DEFINE(STATIC_BUILD) | |
380 | AC_DEFINE(STATIC_BUILD, 1, [Is this a static build?]) | |
230 | 381 | fi |
231 | 382 | ]) |
232 | 383 | |
269 | 420 | #------------------------------------------------------------------------ |
270 | 421 | # SC_ENABLE_SYMBOLS -- |
271 | 422 | # |
272 | # Specify if debugging symbols should be used | |
423 | # Specify if debugging symbols should be used. | |
273 | 424 | # Memory (TCL_MEM_DEBUG) and compile (TCL_COMPILE_DEBUG) debugging |
274 | 425 | # can also be enabled. |
275 | 426 | # |
48 | 48 | #ifndef OPENFILENAME_SIZE_VERSION_400 |
49 | 49 | #define OPENFILENAME_SIZE_VERSION_400 76 |
50 | 50 | #endif |
51 | ||
52 | /* | |
53 | * The following structure is used by the new Tk_ChooseDirectoryObjCmd to pass | |
54 | * data between it and its callback. Unique to Windows platform. | |
55 | */ | |
56 | ||
57 | typedef struct ChooseDirData { | |
58 | TCHAR initDir[MAX_PATH]; /* Initial folder to use */ | |
59 | TCHAR retDir[MAX_PATH]; /* Returned folder to use */ | |
60 | Tcl_Interp *interp; | |
61 | int mustExist; /* True if file must exist to return from | |
62 | * callback */ | |
63 | } CHOOSEDIRDATA; | |
64 | 51 | |
65 | 52 | typedef struct ThreadSpecificData { |
66 | 53 | int debugFlag; /* Flags whether we should output debugging |
152 | 139 | * chooser function, Tk_ChooseDirectoryObjCmd(), and its dialog hook proc. |
153 | 140 | */ |
154 | 141 | |
155 | typedef struct ChooseDir { | |
156 | Tcl_Interp *interp; /* Interp, used only if debug is turned on, | |
157 | * for setting the "tk_dialog" variable. */ | |
158 | int lastCtrl; /* Used by hook proc to keep track of last | |
159 | * control that had input focus, so when OK is | |
160 | * pressed we know whether to browse a new | |
161 | * directory or return. */ | |
162 | int lastIdx; /* Last item that was selected in directory | |
163 | * browser listbox. */ | |
164 | char path[MAX_PATH]; /* On return from choose directory dialog, | |
165 | * holds the selected path. Cannot return | |
166 | * selected path in ofnPtr->lpstrFile because | |
167 | * the default dialog proc stores a '\0' in | |
168 | * it, since, of course, no _file_ was | |
169 | * selected. */ | |
170 | OPENFILENAME *ofnPtr; /* pointer to the OFN structure */ | |
142 | typedef struct { | |
143 | TCHAR initDir[MAX_PATH]; /* Initial folder to use */ | |
144 | TCHAR retDir[MAX_PATH]; /* Returned folder to use */ | |
145 | Tcl_Interp *interp; | |
146 | int mustExist; /* True if file must exist to return from | |
147 | * callback */ | |
171 | 148 | } ChooseDir; |
172 | 149 | |
173 | 150 | /* |
355 | 332 | optionPtr = objv[i]; |
356 | 333 | valuePtr = objv[i + 1]; |
357 | 334 | |
358 | if (Tcl_GetIndexFromObj(interp, optionPtr, optionStrings, "option", | |
359 | TCL_EXACT, &index) != TCL_OK) { | |
335 | if (Tcl_GetIndexFromObjStruct(interp, optionPtr, optionStrings, | |
336 | sizeof(char *), "option", TCL_EXACT, &index) != TCL_OK) { | |
360 | 337 | return TCL_ERROR; |
361 | 338 | } |
362 | 339 | if (i + 1 == objc) { |
1133 | 1110 | FileFilter *filterPtr; |
1134 | 1111 | |
1135 | 1112 | if (initialPtr) { |
1136 | initial = Tcl_GetStringFromObj(initialPtr, NULL); | |
1113 | initial = Tcl_GetString(initialPtr); | |
1137 | 1114 | } |
1138 | 1115 | TkInitFileFilters(&flist); |
1139 | 1116 | if (TkGetFileFilters(interp, &flist, valuePtr, 1) != TCL_OK) { |
1160 | 1137 | *p = '\0'; |
1161 | 1138 | |
1162 | 1139 | } else { |
1163 | int len; | |
1140 | size_t len; | |
1164 | 1141 | |
1165 | 1142 | if (valuePtr == NULL) { |
1166 | 1143 | len = 0; |
1167 | 1144 | } else { |
1168 | (void) Tcl_GetStringFromObj(valuePtr, &len); | |
1145 | (void) Tcl_GetString(valuePtr); | |
1146 | len = valuePtr->length; | |
1169 | 1147 | } |
1170 | 1148 | |
1171 | 1149 | /* |
1324 | 1302 | * - Not sure how to implement localization of message prompts. |
1325 | 1303 | * |
1326 | 1304 | * - -title is really -message. |
1327 | * ToDo: | |
1328 | * - Fix bugs. | |
1329 | * - test to see what platforms this really works on. May require v4.71 of | |
1330 | * shell32.dll everywhere (what is standard?). | |
1331 | 1305 | * |
1332 | 1306 | *---------------------------------------------------------------------- |
1333 | 1307 | */ |
1343 | 1317 | int oldMode, result = TCL_ERROR, i; |
1344 | 1318 | LPCITEMIDLIST pidl; /* Returned by browser */ |
1345 | 1319 | BROWSEINFO bInfo; /* Used by browser */ |
1346 | CHOOSEDIRDATA cdCBData; /* Structure to pass back and forth */ | |
1320 | ChooseDir cdCBData; /* Structure to pass back and forth */ | |
1347 | 1321 | LPMALLOC pMalloc; /* Used by shell */ |
1348 | 1322 | Tk_Window tkwin = clientData; |
1349 | 1323 | HWND hWnd; |
1365 | 1339 | */ |
1366 | 1340 | |
1367 | 1341 | path[0] = '\0'; |
1368 | ZeroMemory(&cdCBData, sizeof(CHOOSEDIRDATA)); | |
1342 | ZeroMemory(&cdCBData, sizeof(ChooseDir)); | |
1369 | 1343 | cdCBData.interp = interp; |
1370 | 1344 | |
1371 | 1345 | /* |
1381 | 1355 | optionPtr = objv[i]; |
1382 | 1356 | valuePtr = objv[i + 1]; |
1383 | 1357 | |
1384 | if (Tcl_GetIndexFromObj(interp, optionPtr, optionStrings, "option", 0, | |
1385 | &index) != TCL_OK) { | |
1358 | if (Tcl_GetIndexFromObjStruct(interp, optionPtr, optionStrings, | |
1359 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
1386 | 1360 | goto cleanup; |
1387 | 1361 | } |
1388 | 1362 | if (i + 1 == objc) { |
1573 | 1547 | LPARAM lpData) |
1574 | 1548 | { |
1575 | 1549 | TCHAR selDir[MAX_PATH]; |
1576 | CHOOSEDIRDATA *chooseDirSharedData = (CHOOSEDIRDATA *) lpData; | |
1550 | ChooseDir *chooseDirSharedData = (ChooseDir *) lpData; | |
1577 | 1551 | Tcl_DString tempString; |
1578 | 1552 | Tcl_DString initDirString; |
1579 | 1553 | TCHAR string[MAX_PATH]; |
1591 | 1565 | * First save and check to see if it is a valid path name, if so then |
1592 | 1566 | * make that path the one shown in the window. Otherwise, it failed |
1593 | 1567 | * the check and should be treated as such. Use |
1594 | * Set/GetCurrentDirectoryA which allows relative path names and names | |
1568 | * Set/GetCurrentDirectory which allows relative path names and names | |
1595 | 1569 | * with forward slashes. Use Tcl_TranslateFileName to make sure names |
1596 | 1570 | * like ~ are converted correctly. |
1597 | 1571 | */ |
1772 | 1746 | optionPtr = objv[i]; |
1773 | 1747 | valuePtr = objv[i + 1]; |
1774 | 1748 | |
1775 | if (Tcl_GetIndexFromObj(interp, optionPtr, optionStrings, "option", | |
1776 | TCL_EXACT, &index) != TCL_OK) { | |
1749 | if (Tcl_GetIndexFromObjStruct(interp, optionPtr, optionStrings, | |
1750 | sizeof(char *), "option", TCL_EXACT, &index) != TCL_OK) { | |
1777 | 1751 | return TCL_ERROR; |
1778 | 1752 | } |
1779 | 1753 | if (i + 1 == objc) { |
1962 | 1936 | char buf[32]; |
1963 | 1937 | |
1964 | 1938 | sprintf(buf, "0x%p", (HWND) clientData); |
1965 | Tcl_SetVar(tsdPtr->debugInterp, "tk_dialog", buf, TCL_GLOBAL_ONLY); | |
1939 | Tcl_SetVar2(tsdPtr->debugInterp, "tk_dialog", NULL, buf, TCL_GLOBAL_ONLY); | |
1966 | 1940 | } |
1967 | 1941 | |
1968 | 1942 | /* |
2257 | 2231 | } |
2258 | 2232 | |
2259 | 2233 | for (i = 1; i < objc; i += 2) { |
2260 | int optionIndex, len; | |
2261 | ||
2262 | if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, | |
2263 | "option", 0, &optionIndex) != TCL_OK) { | |
2234 | int optionIndex; | |
2235 | ||
2236 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, | |
2237 | sizeof(char *), "option", 0, &optionIndex) != TCL_OK) { | |
2264 | 2238 | return TCL_ERROR; |
2265 | 2239 | } |
2266 | 2240 | if (objc == 2) { |
2317 | 2291 | if (hdPtr->fontObj) { |
2318 | 2292 | Tcl_DecrRefCount(hdPtr->fontObj); |
2319 | 2293 | } |
2320 | Tcl_GetStringFromObj(objv[i+1], &len); | |
2321 | if (len) { | |
2294 | (void)Tcl_GetString(objv[i+1]); | |
2295 | if (objv[i+1]->length) { | |
2322 | 2296 | hdPtr->fontObj = objv[i+1]; |
2323 | 2297 | if (Tcl_IsShared(hdPtr->fontObj)) { |
2324 | 2298 | hdPtr->fontObj = Tcl_DuplicateObj(hdPtr->fontObj); |
2332 | 2306 | if (hdPtr->cmdObj) { |
2333 | 2307 | Tcl_DecrRefCount(hdPtr->cmdObj); |
2334 | 2308 | } |
2335 | Tcl_GetStringFromObj(objv[i+1], &len); | |
2336 | if (len) { | |
2309 | (void)Tcl_GetString(objv[i+1]); | |
2310 | if (objv[i+1]->length) { | |
2337 | 2311 | hdPtr->cmdObj = objv[i+1]; |
2338 | 2312 | if (Tcl_IsShared(hdPtr->cmdObj)) { |
2339 | 2313 | hdPtr->cmdObj = Tcl_DuplicateObj(hdPtr->cmdObj); |
69 | 69 | int argc, namelength; |
70 | 70 | const char **argv = NULL, *name, *p; |
71 | 71 | |
72 | name = Tcl_GetVar(interp, "argv0", TCL_GLOBAL_ONLY); | |
72 | name = Tcl_GetVar2(interp, "argv0", NULL, TCL_GLOBAL_ONLY); | |
73 | 73 | namelength = -1; |
74 | 74 | if (name != NULL) { |
75 | 75 | Tcl_SplitPath(name, &argc, &argv); |
120 | 120 | WCHAR *msgString; /* points to titleString, just after title, leaving space for ": " */ |
121 | 121 | int len; /* size of title, including terminating NULL */ |
122 | 122 | |
123 | /* If running on Cygwin and we have a stderr channel, use it. */ | |
124 | #if !defined(STATIC_BUILD) | |
125 | if (tclStubsPtr->reserved9) { | |
126 | Tcl_Channel errChannel = Tcl_GetStdChannel(TCL_STDERR); | |
127 | if (errChannel) { | |
128 | Tcl_WriteChars(errChannel, title, -1); | |
129 | Tcl_WriteChars(errChannel, ": ", 2); | |
130 | Tcl_WriteChars(errChannel, msg, -1); | |
131 | Tcl_WriteChars(errChannel, "\n", 1); | |
132 | return; | |
133 | } | |
134 | } | |
135 | #endif /* !STATIC_BUILD */ | |
136 | ||
123 | 137 | len = MultiByteToWideChar(CP_UTF8, 0, title, -1, titleString, TK_MAX_WARN_LEN); |
124 | 138 | msgString = &titleString[len + 1]; |
125 | 139 | titleString[TK_MAX_WARN_LEN - 1] = L'\0'; |
1947 | 1947 | if (mePtr->underline < len) { |
1948 | 1948 | const char *label, *start, *end; |
1949 | 1949 | |
1950 | label = Tcl_GetStringFromObj(mePtr->labelPtr, NULL); | |
1950 | label = Tcl_GetString(mePtr->labelPtr); | |
1951 | 1951 | start = Tcl_UtfAtIndex(label, mePtr->underline); |
1952 | 1952 | end = Tcl_UtfNext(start); |
1953 | 1953 | Tk_UnderlineChars(menuPtr->display, d, |
69 | 69 | #include <X11/Xutil.h> |
70 | 70 | |
71 | 71 | #ifndef __GNUC__ |
72 | # define strncasecmp strnicmp | |
73 | # define strcasecmp stricmp | |
72 | # define strncasecmp _strnicmp | |
73 | # define strcasecmp _stricmp | |
74 | 74 | #endif |
75 | 75 | |
76 | 76 | #define NBBY 8 |
551 | 551 | } |
552 | 552 | |
553 | 553 | interp = scrollPtr->info.interp; |
554 | code = Tcl_GlobalEval(interp, cmdString.string); | |
554 | code = Tcl_EvalEx(interp, cmdString.string, -1, TCL_EVAL_GLOBAL); | |
555 | 555 | if (code != TCL_OK && code != TCL_CONTINUE && code != TCL_BREAK) { |
556 | 556 | Tcl_AddErrorInfo(interp, "\n (scrollbar command)"); |
557 | 557 | Tcl_BackgroundException(interp, code); |
332 | 332 | */ |
333 | 333 | |
334 | 334 | for (i = 1; i < objc; i++) { |
335 | if (Tcl_GetIndexFromObj(interp, objv[i], sendOptions, | |
336 | "option", 0, &optind) != TCL_OK) { | |
335 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], sendOptions, | |
336 | sizeof(char *), "option", 0, &optind) != TCL_OK) { | |
337 | 337 | break; |
338 | 338 | } |
339 | 339 | if (optind == SEND_ASYNC) { |
285 | 285 | if (rest == argv[1]) { |
286 | 286 | hwnd = FindWindowA(NULL, argv[1]); |
287 | 287 | if (hwnd == NULL) { |
288 | Tcl_SetResult(interp, "no such window", TCL_STATIC); | |
288 | Tcl_SetObjResult(interp, Tcl_NewStringObj("no such window", -1)); | |
289 | 289 | return TCL_ERROR; |
290 | 290 | } |
291 | 291 | } |
340 | 340 | result = SetDlgItemTextA(hwnd, id, Tcl_DStringValue(&ds)); |
341 | 341 | Tcl_DStringFree(&ds); |
342 | 342 | if (result == 0) { |
343 | Tcl_SetResult(interp, "failed to send text to dialog: ", TCL_STATIC); | |
343 | Tcl_SetObjResult(interp, Tcl_NewStringObj("failed to send text to dialog: ", -1)); | |
344 | 344 | AppendSystemError(interp, GetLastError()); |
345 | 345 | return TCL_ERROR; |
346 | 346 | } |
353 | 353 | lParam = (LPARAM)child; |
354 | 354 | } |
355 | 355 | sprintf(buf, "%d", (int) SendMessageA(hwnd, message, wParam, lParam)); |
356 | Tcl_SetResult(interp, buf, TCL_VOLATILE); | |
356 | Tcl_SetObjResult(interp, Tcl_NewStringObj(buf, -1)); | |
357 | 357 | break; |
358 | 358 | } |
359 | 359 | default: { |
361 | 361 | |
362 | 362 | sprintf(buf, "%d", |
363 | 363 | (int) SendDlgItemMessageA(hwnd, id, message, wParam, lParam)); |
364 | Tcl_SetResult(interp, buf, TCL_VOLATILE); | |
364 | Tcl_SetObjResult(interp, Tcl_NewStringObj(buf, -1)); | |
365 | 365 | break; |
366 | 366 | } |
367 | 367 | } |
454 | 454 | |
455 | 455 | cch = GetClassName(INT2PTR(hwnd), buf, cchBuf); |
456 | 456 | if (cch == 0) { |
457 | Tcl_SetResult(interp, "failed to get class name: ", TCL_STATIC); | |
457 | Tcl_SetObjResult(interp, Tcl_NewStringObj("failed to get class name: ", -1)); | |
458 | 458 | AppendSystemError(interp, GetLastError()); |
459 | 459 | return TCL_ERROR; |
460 | 460 | } else { |
2801 | 2801 | WMOPT_STACKORDER, WMOPT_STATE, WMOPT_TITLE, WMOPT_TRANSIENT, |
2802 | 2802 | WMOPT_WITHDRAW |
2803 | 2803 | }; |
2804 | int index, length; | |
2804 | int index; | |
2805 | size_t length; | |
2805 | 2806 | const char *argv1; |
2806 | 2807 | TkWindow *winPtr, **winPtrPtr = &winPtr; |
2807 | 2808 | TkDisplay *dispPtr = ((TkWindow *) tkwin)->dispPtr; |
2812 | 2813 | return TCL_ERROR; |
2813 | 2814 | } |
2814 | 2815 | |
2815 | argv1 = Tcl_GetStringFromObj(objv[1], &length); | |
2816 | if ((argv1[0] == 't') && !strncmp(argv1, "tracing", (unsigned) length) | |
2816 | argv1 = Tcl_GetString(objv[1]); | |
2817 | length = objv[1]->length; | |
2818 | if ((argv1[0] == 't') && !strncmp(argv1, "tracing", length) | |
2817 | 2819 | && (length >= 3)) { |
2818 | 2820 | int wmTracing; |
2819 | 2821 | |
2837 | 2839 | return TCL_OK; |
2838 | 2840 | } |
2839 | 2841 | |
2840 | if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, | |
2841 | &index) != TCL_OK) { | |
2842 | if (Tcl_GetIndexFromObjStruct(interp, objv[1], optionStrings, | |
2843 | sizeof(char *), "option", 0, &index) != TCL_OK) { | |
2842 | 2844 | return TCL_ERROR; |
2843 | 2845 | } |
2844 | 2846 | |
3028 | 3030 | register WmInfo *wmPtr = winPtr->wmInfoPtr; |
3029 | 3031 | LONG style, exStyle, styleBit, *stylePtr = NULL; |
3030 | 3032 | const char *string; |
3031 | int i, boolean, length; | |
3033 | int i, boolean; | |
3034 | size_t length; | |
3032 | 3035 | int config_fullscreen = 0, updatewrapper = 0; |
3033 | 3036 | int fullscreen_attr_changed = 0, fullscreen_attr = 0; |
3034 | 3037 | |
3075 | 3078 | return TCL_OK; |
3076 | 3079 | } |
3077 | 3080 | for (i = 3; i < objc; i += 2) { |
3078 | string = Tcl_GetStringFromObj(objv[i], &length); | |
3081 | string = Tcl_GetString(objv[i]); | |
3082 | length = objv[i]->length; | |
3079 | 3083 | if ((length < 2) || (string[0] != '-')) { |
3080 | 3084 | goto configArgs; |
3081 | 3085 | } |
3082 | if (strncmp(string, "-disabled", (unsigned) length) == 0) { | |
3086 | if (strncmp(string, "-disabled", length) == 0) { | |
3083 | 3087 | stylePtr = &style; |
3084 | 3088 | styleBit = WS_DISABLED; |
3085 | } else if ((strncmp(string, "-alpha", (unsigned) length) == 0) | |
3089 | } else if ((strncmp(string, "-alpha", length) == 0) | |
3086 | 3090 | || ((length > 2) && (strncmp(string, "-transparentcolor", |
3087 | (unsigned) length) == 0))) { | |
3091 | length) == 0))) { | |
3088 | 3092 | stylePtr = &exStyle; |
3089 | 3093 | styleBit = WS_EX_LAYERED; |
3090 | } else if (strncmp(string, "-fullscreen", (unsigned) length) == 0) { | |
3094 | } else if (strncmp(string, "-fullscreen", length) == 0) { | |
3091 | 3095 | config_fullscreen = 1; |
3092 | 3096 | styleBit = 0; |
3093 | 3097 | } else if ((length > 3) |
3094 | && (strncmp(string, "-toolwindow", (unsigned) length) == 0)) { | |
3098 | && (strncmp(string, "-toolwindow", length) == 0)) { | |
3095 | 3099 | stylePtr = &exStyle; |
3096 | 3100 | styleBit = WS_EX_TOOLWINDOW; |
3097 | 3101 | if (objc != 4) { |
3101 | 3105 | updatewrapper = 1; |
3102 | 3106 | } |
3103 | 3107 | } else if ((length > 3) |
3104 | && (strncmp(string, "-topmost", (unsigned) length) == 0)) { | |
3108 | && (strncmp(string, "-topmost", length) == 0)) { | |
3105 | 3109 | stylePtr = &exStyle; |
3106 | 3110 | styleBit = WS_EX_TOPMOST; |
3107 | 3111 | if ((i < objc-1) && (winPtr->flags & TK_EMBEDDED)) { |
3143 | 3147 | } |
3144 | 3148 | wmPtr->alpha = dval; |
3145 | 3149 | } else { /* -transparentcolor */ |
3146 | const char *crefstr = Tcl_GetStringFromObj(objv[i+1], &length); | |
3147 | ||
3150 | const char *crefstr = Tcl_GetString(objv[i+1]); | |
3151 | ||
3152 | length = objv[i+1]->length; | |
3148 | 3153 | if (length == 0) { |
3149 | 3154 | /* reset to no transparent color */ |
3150 | 3155 | if (wmPtr->crefObj) { |
3322 | 3327 | { |
3323 | 3328 | register WmInfo *wmPtr = winPtr->wmInfoPtr; |
3324 | 3329 | const char *argv3; |
3325 | int length; | |
3330 | size_t length; | |
3326 | 3331 | |
3327 | 3332 | if ((objc != 3) && (objc != 4)) { |
3328 | 3333 | Tcl_WrongNumArgs(interp, 2, objv, "window ?name?"); |
3335 | 3340 | } |
3336 | 3341 | return TCL_OK; |
3337 | 3342 | } |
3338 | argv3 = Tcl_GetStringFromObj(objv[3], &length); | |
3343 | argv3 = Tcl_GetString(objv[3]); | |
3344 | length = objv[3]->length; | |
3339 | 3345 | if (argv3[0] == 0) { |
3340 | 3346 | if (wmPtr->clientMachine != NULL) { |
3341 | 3347 | ckfree(wmPtr->clientMachine); |
3351 | 3357 | ckfree(wmPtr->clientMachine); |
3352 | 3358 | } |
3353 | 3359 | wmPtr->clientMachine = ckalloc(length + 1); |
3354 | memcpy(wmPtr->clientMachine, argv3, (unsigned) length + 1); | |
3360 | memcpy(wmPtr->clientMachine, argv3, length + 1); | |
3355 | 3361 | if (!(wmPtr->flags & WM_NEVER_MAPPED)) { |
3356 | 3362 | XTextProperty textProp; |
3357 | 3363 | |
3624 | 3630 | return TCL_OK; |
3625 | 3631 | } |
3626 | 3632 | |
3627 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
3628 | &index) != TCL_OK) { | |
3633 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
3634 | sizeof(char *), "argument", 0,&index) != TCL_OK) { | |
3629 | 3635 | return TCL_ERROR; |
3630 | 3636 | } |
3631 | 3637 | if (index == OPT_ACTIVE) { |
3915 | 3921 | register WmInfo *wmPtr = winPtr->wmInfoPtr; |
3916 | 3922 | Tk_Window tkwin2; |
3917 | 3923 | const char *argv3; |
3918 | int length; | |
3924 | size_t length; | |
3919 | 3925 | |
3920 | 3926 | if ((objc != 3) && (objc != 4)) { |
3921 | 3927 | Tcl_WrongNumArgs(interp, 2, objv, "window ?pathName?"); |
3927 | 3933 | } |
3928 | 3934 | return TCL_OK; |
3929 | 3935 | } |
3930 | argv3 = Tcl_GetStringFromObj(objv[3], &length); | |
3936 | argv3 = Tcl_GetString(objv[3]); | |
3937 | length = objv[3]->length; | |
3931 | 3938 | if (*argv3 == '\0') { |
3932 | 3939 | wmPtr->hints.flags &= ~WindowGroupHint; |
3933 | 3940 | if (wmPtr->leaderName != NULL) { |
3945 | 3952 | wmPtr->hints.window_group = Tk_WindowId(tkwin2); |
3946 | 3953 | wmPtr->hints.flags |= WindowGroupHint; |
3947 | 3954 | wmPtr->leaderName = ckalloc(length + 1); |
3948 | memcpy(wmPtr->leaderName, argv3, (unsigned) length + 1); | |
3955 | memcpy(wmPtr->leaderName, argv3, length + 1); | |
3949 | 3956 | } |
3950 | 3957 | return TCL_OK; |
3951 | 3958 | } |
4236 | 4243 | { |
4237 | 4244 | register WmInfo *wmPtr = winPtr->wmInfoPtr; |
4238 | 4245 | const char *argv3; |
4239 | int length; | |
4246 | size_t length; | |
4240 | 4247 | |
4241 | 4248 | if (objc > 4) { |
4242 | 4249 | Tcl_WrongNumArgs(interp, 2, objv, "window ?newName?"); |
4250 | 4257 | if (wmPtr->iconName != NULL) { |
4251 | 4258 | ckfree(wmPtr->iconName); |
4252 | 4259 | } |
4253 | argv3 = Tcl_GetStringFromObj(objv[3], &length); | |
4260 | argv3 = Tcl_GetString(objv[3]); | |
4261 | length = objv[3]->length; | |
4254 | 4262 | wmPtr->iconName = ckalloc(length + 1); |
4255 | memcpy(wmPtr->iconName, argv3, (unsigned) length + 1); | |
4263 | memcpy(wmPtr->iconName, argv3, length + 1); | |
4256 | 4264 | if (!(wmPtr->flags & WM_NEVER_MAPPED)) { |
4257 | 4265 | XSetIconName(winPtr->display, winPtr->window, wmPtr->iconName); |
4258 | 4266 | } |
4899 | 4907 | if (*Tcl_GetString(objv[3]) == '\0') { |
4900 | 4908 | wmPtr->sizeHintsFlags &= ~(USPosition|PPosition); |
4901 | 4909 | } else { |
4902 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
4903 | &index) != TCL_OK) { | |
4910 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
4911 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
4904 | 4912 | return TCL_ERROR; |
4905 | 4913 | } |
4906 | 4914 | if (index == OPT_USER) { |
4944 | 4952 | register ProtocolHandler *protPtr, *prevPtr; |
4945 | 4953 | Atom protocol; |
4946 | 4954 | const char *cmd; |
4947 | int cmdLength; | |
4955 | size_t cmdLength; | |
4948 | 4956 | Tcl_Obj *resultObj; |
4949 | 4957 | |
4950 | 4958 | if ((objc < 3) || (objc > 5)) { |
4999 | 5007 | break; |
5000 | 5008 | } |
5001 | 5009 | } |
5002 | cmd = Tcl_GetStringFromObj(objv[4], &cmdLength); | |
5010 | cmd = Tcl_GetString(objv[4]); | |
5011 | cmdLength = objv[4]->length; | |
5003 | 5012 | if (cmdLength > 0) { |
5004 | 5013 | protPtr = ckalloc(HANDLER_SIZE(cmdLength)); |
5005 | 5014 | protPtr->protocol = protocol; |
5126 | 5135 | if (*Tcl_GetString(objv[3]) == '\0') { |
5127 | 5136 | wmPtr->sizeHintsFlags &= ~(USSize|PSize); |
5128 | 5137 | } else { |
5129 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
5130 | &index) != TCL_OK) { | |
5138 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
5139 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
5131 | 5140 | return TCL_ERROR; |
5132 | 5141 | } |
5133 | 5142 | if (index == OPT_USER) { |
5256 | 5265 | |
5257 | 5266 | ckfree(windows); |
5258 | 5267 | |
5259 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
5260 | &index) != TCL_OK) { | |
5268 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
5269 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
5261 | 5270 | return TCL_ERROR; |
5262 | 5271 | } |
5263 | 5272 | if (index == OPT_ISABOVE) { |
5316 | 5325 | Tcl_SetErrorCode(interp, "TK", "WM", "STATE", "ICON", NULL); |
5317 | 5326 | return TCL_ERROR; |
5318 | 5327 | } |
5319 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
5320 | &index) != TCL_OK) { | |
5321 | return TCL_ERROR; | |
5322 | } | |
5323 | ||
5324 | if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, | |
5325 | &index) != TCL_OK) { | |
5328 | if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, | |
5329 | sizeof(char *), "argument", 0, &index) != TCL_OK) { | |
5326 | 5330 | return TCL_ERROR; |
5327 | 5331 | } |
5328 | 5332 | |
5442 | 5446 | { |
5443 | 5447 | register WmInfo *wmPtr = winPtr->wmInfoPtr; |
5444 | 5448 | const char *argv3; |
5445 | int length; | |
5449 | size_t length; | |
5446 | 5450 | HWND wrapper; |
5447 | 5451 | |
5448 | 5452 | if (objc > 4) { |
5475 | 5479 | if (wmPtr->title != NULL) { |
5476 | 5480 | ckfree(wmPtr->title); |
5477 | 5481 | } |
5478 | argv3 = Tcl_GetStringFromObj(objv[3], &length); | |
5482 | argv3 = Tcl_GetString(objv[3]); | |
5483 | length = objv[3]->length; | |
5479 | 5484 | wmPtr->title = ckalloc(length + 1); |
5480 | memcpy(wmPtr->title, argv3, (unsigned) length + 1); | |
5485 | memcpy(wmPtr->title, argv3, length + 1); | |
5481 | 5486 | |
5482 | 5487 | if (!(wmPtr->flags & WM_NEVER_MAPPED) && wmPtr->wrapper != NULL) { |
5483 | 5488 | Tcl_DString titleString; |
6614 | 6619 | Tcl_Preserve(protPtr); |
6615 | 6620 | interp = protPtr->interp; |
6616 | 6621 | Tcl_Preserve(interp); |
6617 | result = Tcl_GlobalEval(interp, protPtr->command); | |
6622 | result = Tcl_EvalEx(interp, protPtr->command, -1, TCL_EVAL_GLOBAL); | |
6618 | 6623 | if (result != TCL_OK) { |
6619 | 6624 | Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( |
6620 | 6625 | "\n (command for \"%s\" window manager protocol)", |
73 | 73 | HWND hwnd = NULL; |
74 | 74 | TCHAR title[32] = TEXT("TtkMonitorWindow"); |
75 | 75 | TCHAR name[32] = TEXT("TtkMonitorClass"); |
76 | ||
76 | ||
77 | 77 | wc.cbSize = sizeof(WNDCLASSEX); |
78 | 78 | wc.style = CS_HREDRAW | CS_VREDRAW; |
79 | 79 | wc.lpfnWndProc = (WNDPROC)WndProc; |
98 | 98 | return hwnd; |
99 | 99 | } |
100 | 100 | |
101 | static void | |
101 | static void | |
102 | 102 | DestroyThemeMonitorWindow(void *clientData) |
103 | 103 | { |
104 | 104 | HWND hwnd = (HWND)clientData; |
1067 | 1067 | } |
1068 | 1068 | for (i = 0; i < objc; ++i) { |
1069 | 1069 | int option; |
1070 | if (Tcl_GetIndexFromObj(interp, objv[i], names, "system constant", 0, &option) | |
1071 | != TCL_OK) | |
1070 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], names, | |
1071 | sizeof(char *), "system constant", 0, &option) != TCL_OK) | |
1072 | 1072 | return TCL_ERROR; |
1073 | 1073 | *resultPtr |= (flags[option] << (8 * (1 - i))); |
1074 | 1074 | } |
1139 | 1139 | Tcl_SetErrorCode(interp, "TTK", "VSAPI", "MISSING", NULL); |
1140 | 1140 | return TCL_ERROR; |
1141 | 1141 | } |
1142 | if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, | |
1143 | "option", 0, &option) != TCL_OK) | |
1142 | if (Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, | |
1143 | sizeof(char *), "option", 0, &option) != TCL_OK) | |
1144 | 1144 | return TCL_ERROR; |
1145 | 1145 | switch (option) { |
1146 | 1146 | case O_PADDING: |
48 | 48 | #ifndef TK_LOCAL_APPINIT |
49 | 49 | #define TK_LOCAL_APPINIT Tcl_AppInit |
50 | 50 | #endif |
51 | extern int TK_LOCAL_APPINIT(Tcl_Interp *interp); | |
51 | #ifndef MODULE_SCOPE | |
52 | # define MODULE_SCOPE extern | |
53 | #endif | |
54 | MODULE_SCOPE int TK_LOCAL_APPINIT(Tcl_Interp *interp); | |
52 | 55 | |
53 | 56 | /* |
54 | 57 | * The following #if block allows you to change how Tcl finds the startup |
57 | 60 | */ |
58 | 61 | |
59 | 62 | #ifdef TK_LOCAL_MAIN_HOOK |
60 | extern int TK_LOCAL_MAIN_HOOK(int *argc, TCHAR ***argv); | |
61 | #endif | |
63 | MODULE_SCOPE int TK_LOCAL_MAIN_HOOK(int *argc, TCHAR ***argv); | |
64 | #endif | |
65 | ||
66 | /* Make sure the stubbed variants of those are never used. */ | |
67 | #undef Tcl_ObjSetVar2 | |
68 | #undef Tcl_NewStringObj | |
62 | 69 | |
63 | 70 | /* |
64 | 71 | *---------------------------------------------------------------------- |
125 | 132 | * Forward slashes substituted for backslashes. |
126 | 133 | */ |
127 | 134 | |
128 | for (p = argv[0]; *p != TEXT('\0'); p++) { | |
129 | if (*p == TEXT('\\')) { | |
130 | *p = TEXT('/'); | |
135 | for (p = argv[0]; *p != '\0'; p++) { | |
136 | if (*p == '\\') { | |
137 | *p = '/'; | |
131 | 138 | } |
132 | 139 | } |
133 | 140 | |
223 | 230 | * specific startup file will be run under any conditions. |
224 | 231 | */ |
225 | 232 | |
226 | (Tcl_SetVar)(interp, "tcl_rcFileName", "~/wishrc.tcl", TCL_GLOBAL_ONLY); | |
233 | Tcl_ObjSetVar2(interp, Tcl_NewStringObj("tcl_rcFileName", -1), NULL, | |
234 | Tcl_NewStringObj("~/wishrc.tcl", -1), TCL_GLOBAL_ONLY); | |
227 | 235 | return TCL_OK; |
228 | 236 | } |
229 | 237 | |
335 | 343 | */ |
336 | 344 | |
337 | 345 | size = 2; |
338 | for (p = cmdLine; *p != TEXT('\0'); p++) { | |
339 | if ((*p == TEXT(' ')) || (*p == TEXT('\t'))) { /* INTL: ISO space. */ | |
346 | for (p = cmdLine; *p != '\0'; p++) { | |
347 | if ((*p == ' ') || (*p == '\t')) { /* INTL: ISO space. */ | |
340 | 348 | size++; |
341 | while ((*p == TEXT(' ')) || (*p == TEXT('\t'))) { /* INTL: ISO space. */ | |
349 | while ((*p == ' ') || (*p == '\t')) { /* INTL: ISO space. */ | |
342 | 350 | p++; |
343 | 351 | } |
344 | if (*p == TEXT('\0')) { | |
352 | if (*p == '\0') { | |
345 | 353 | break; |
346 | 354 | } |
347 | 355 | } |
351 | 359 | #undef Tcl_Alloc |
352 | 360 | #undef Tcl_DbCkalloc |
353 | 361 | |
354 | argSpace = ckalloc(size*sizeof(char *) | |
355 | + (_tcslen(cmdLine)+1) * sizeof(TCHAR)); | |
362 | argSpace = ckalloc(size * sizeof(char *) | |
363 | + (_tcslen(cmdLine) * sizeof(TCHAR)) + sizeof(TCHAR)); | |
356 | 364 | argv = (TCHAR **) argSpace; |
357 | 365 | argSpace += size * (sizeof(char *)/sizeof(TCHAR)); |
358 | 366 | size--; |
360 | 368 | p = cmdLine; |
361 | 369 | for (argc = 0; argc < size; argc++) { |
362 | 370 | argv[argc] = arg = argSpace; |
363 | while ((*p == TEXT(' ')) || (*p == TEXT('\t'))) { /* INTL: ISO space. */ | |
371 | while ((*p == ' ') || (*p == '\t')) { /* INTL: ISO space. */ | |
364 | 372 | p++; |
365 | 373 | } |
366 | if (*p == TEXT('\0')) { | |
374 | if (*p == '\0') { | |
367 | 375 | break; |
368 | 376 | } |
369 | 377 | |
371 | 379 | slashes = 0; |
372 | 380 | while (1) { |
373 | 381 | copy = 1; |
374 | while (*p == TEXT('\\')) { | |
382 | while (*p == '\\') { | |
375 | 383 | slashes++; |
376 | 384 | p++; |
377 | 385 | } |
378 | if (*p == TEXT('"')) { | |
386 | if (*p == '"') { | |
379 | 387 | if ((slashes & 1) == 0) { |
380 | 388 | copy = 0; |
381 | if ((inquote) && (p[1] == TEXT('"'))) { | |
389 | if ((inquote) && (p[1] == '"')) { | |
382 | 390 | p++; |
383 | 391 | copy = 1; |
384 | 392 | } else { |
389 | 397 | } |
390 | 398 | |
391 | 399 | while (slashes) { |
392 | *arg = TEXT('\\'); | |
400 | *arg = '\\'; | |
393 | 401 | arg++; |
394 | 402 | slashes--; |
395 | 403 | } |
396 | 404 | |
397 | if ((*p == TEXT('\0')) || (!inquote && | |
398 | ((*p == TEXT(' ')) || (*p == TEXT('\t'))))) { /* INTL: ISO space. */ | |
405 | if ((*p == '\0') || (!inquote && | |
406 | ((*p == ' ') || (*p == '\t')))) { /* INTL: ISO space. */ | |
399 | 407 | break; |
400 | 408 | } |
401 | 409 | if (copy != 0) { |
407 | 415 | *arg = '\0'; |
408 | 416 | argSpace = arg + 1; |
409 | 417 | } |
410 | argv[argc] = 0; | |
418 | argv[argc] = NULL; | |
411 | 419 | |
412 | 420 | *argcPtr = argc; |
413 | 421 | *argvPtr = argv; |