diff options
author | fvogel <fvogelnew1@free.fr> | 2020-07-12 09:33:56 (GMT) |
---|---|---|
committer | fvogel <fvogelnew1@free.fr> | 2020-07-12 09:33:56 (GMT) |
commit | d4b6f771bf98678dea8579ef892a87fd11776de6 (patch) | |
tree | 123b8eec57407dfc38b88e9d56e0254776fce0c5 /win | |
parent | a0ad668fc8f8b2ec4dd82126ff7e60706abd0d0d (diff) | |
parent | 8a4797c9a16ff548b9d7a02b28ac8df76bdb2ff0 (diff) | |
download | tk-d4b6f771bf98678dea8579ef892a87fd11776de6.zip tk-d4b6f771bf98678dea8579ef892a87fd11776de6.tar.gz tk-d4b6f771bf98678dea8579ef892a87fd11776de6.tar.bz2 |
merge core-8-6-branch
Diffstat (limited to 'win')
-rw-r--r-- | win/makefile.vc | 4 | ||||
-rw-r--r-- | win/rules.vc | 10 | ||||
-rw-r--r-- | win/tkWinKey.c | 7 | ||||
-rw-r--r-- | win/tkWinMenu.c | 25 | ||||
-rw-r--r-- | win/tkWinPort.h | 7 | ||||
-rw-r--r-- | win/tkWinWm.c | 2 | ||||
-rw-r--r-- | win/tkWinX.c | 148 | ||||
-rw-r--r-- | win/ttkWinTheme.c | 2 | ||||
-rw-r--r-- | win/ttkWinXPTheme.c | 2 |
9 files changed, 106 insertions, 101 deletions
diff --git a/win/makefile.vc b/win/makefile.vc index fda0ff2..84c4e81 100644 --- a/win/makefile.vc +++ b/win/makefile.vc @@ -58,7 +58,7 @@ # 64-bit compiler, if your SDK has it.
#
# Examples:
-# Assumign Tcl sources lie in ../../tcl
+# Assuming Tcl sources lie in ../../tcl
# c:\tcl_src\win\>nmake -f makefile.vc release
# If Tcl sources are not in ../../tcl, use the TCLDIR macro to specify dir
# c:\tcl_src\win\>nmake -f makefile.vc release TCLDIR=c:\src\tcl
@@ -66,7 +66,7 @@ # c:\tcl_src\win\>nmake -f makefile.vc test
# Install Tk in location specified by INSTALLDIR macro
# c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl
-# Build release with PDF files
+# Build release with PDB files
# c:\tcl_src\win\>nmake -f makefile.vc release OPTS=pdbs
# Build debug version
# c:\tcl_src\win\>nmake -f makefile.vc release OPTS=symbols
diff --git a/win/rules.vc b/win/rules.vc index 490f9c3..d4765b9 100644 --- a/win/rules.vc +++ b/win/rules.vc @@ -730,11 +730,8 @@ MSVCRT = 0 !else
!if [nmakehlp -f $(OPTS) "msvcrt"]
!message *** Doing msvcrt
-MSVCRT = 1
-!else
-!if !$(STATIC_BUILD)
-MSVCRT = 1
!else
+!if $(STATIC_BUILD)
MSVCRT = 0
!endif
!endif
@@ -743,17 +740,12 @@ MSVCRT = 0 !if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD)
!message *** Doing staticpkg
TCL_USE_STATIC_PACKAGES = 1
-!else
-TCL_USE_STATIC_PACKAGES = 0
!endif
!if [nmakehlp -f $(OPTS) "nothreads"]
!message *** Compile explicitly for non-threaded tcl
TCL_THREADS = 0
USE_THREAD_ALLOC= 0
-!else
-TCL_THREADS = 1
-USE_THREAD_ALLOC= 1
!endif
!if "$(TCL_MAJOR_VERSION)" == "8"
diff --git a/win/tkWinKey.c b/win/tkWinKey.c index c7fa20c..0cd086c 100644 --- a/win/tkWinKey.c +++ b/win/tkWinKey.c @@ -102,14 +102,15 @@ TkpGetString( Tcl_DStringInit(dsPtr); if (keyEv->send_event == -1) { - if (keyEv->nbytes > 0) { + TkKeyEvent *ev = (TkKeyEvent *)keyEv; + if (ev->nbytes > 0) { Tcl_ExternalToUtfDString(TkWinGetKeyInputEncoding(), - keyEv->trans_chars, keyEv->nbytes, dsPtr); + ev->trans_chars, ev->nbytes, dsPtr); } } else if (keyEv->send_event == -3) { /* - * Special case for WM_UNICHAR and win2000 multi-lingal IME input + * Special case for WM_UNICHAR and win2000 multilingual IME input */ len = TkUniCharToUtf(keyEv->keycode, buf); diff --git a/win/tkWinMenu.c b/win/tkWinMenu.c index daf32ec..6c55164 100644 --- a/win/tkWinMenu.c +++ b/win/tkWinMenu.c @@ -511,6 +511,7 @@ GetEntryText( : Tcl_GetString(mePtr->accelPtr); const char *p, *next; Tcl_DString itemString; + int ch; /* * We have to construct the string with an ampersand preceeding the @@ -527,7 +528,7 @@ GetEntryText( if (*p == '&') { Tcl_DStringAppend(&itemString, "&", 1); } - next = Tcl_UtfNext(p); + next = p + TkUtfToUniChar(p, &ch); Tcl_DStringAppend(&itemString, p, (int) (next - p)); } if (mePtr->accelLength > 0) { @@ -536,7 +537,7 @@ GetEntryText( if (*p == '&') { Tcl_DStringAppend(&itemString, "&", 1); } - next = Tcl_UtfNext(p); + next = p + TkUtfToUniChar(p, &ch); Tcl_DStringAppend(&itemString, p, (int) (next - p)); } } @@ -2134,10 +2135,11 @@ DrawMenuUnderline( len = Tcl_GetCharLength(mePtr->labelPtr); if (mePtr->underline < len) { const char *label, *start, *end; + int ch; label = Tcl_GetString(mePtr->labelPtr); - start = Tcl_UtfAtIndex(label, mePtr->underline); - end = Tcl_UtfNext(start); + start = TkUtfAtIndex(label, mePtr->underline); + end = start + TkUtfToUniChar(start, &ch); Tk_UnderlineChars(menuPtr->display, d, gc, tkfont, label, x + mePtr->indicatorSpace, y + (height + fmPtr->ascent - fmPtr->descent) / 2, @@ -2229,17 +2231,16 @@ TkWinMenuKeyObjCmd( virtualKey = XKeysymToKeycode(winPtr->display, keySym); scanCode = MapVirtualKeyW(virtualKey, 0); if (0 != scanCode) { - XKeyEvent xkey = eventPtr->xkey; + TkKeyEvent xkey; + memcpy(&xkey, eventPtr, sizeof(xkey)); CallWindowProcW(DefWindowProcW, Tk_GetHWND(Tk_WindowId(tkwin)), WM_SYSKEYDOWN, virtualKey, (int) ((scanCode << 16) | (1 << 29))); - if (xkey.nbytes > 0) { - for (i = 0; i < xkey.nbytes; i++) { - CallWindowProcW(DefWindowProcW, - Tk_GetHWND(Tk_WindowId(tkwin)), WM_SYSCHAR, - xkey.trans_chars[i], - (int) ((scanCode << 16) | (1 << 29))); - } + for (i = 0; i < xkey.nbytes; i++) { + CallWindowProcW(DefWindowProcW, + Tk_GetHWND(Tk_WindowId(tkwin)), WM_SYSCHAR, + xkey.trans_chars[i], + (int) ((scanCode << 16) | (1 << 29))); } } } diff --git a/win/tkWinPort.h b/win/tkWinPort.h index 8cc5677..dbde9e1 100644 --- a/win/tkWinPort.h +++ b/win/tkWinPort.h @@ -125,4 +125,11 @@ #define TkpCreateNativeBitmap(display, source) None #define TkpGetNativeAppBitmap(display, name, w, h) None +/* + * Other functions not used under Windows + */ + +#define TkpWillDrawWidget(tkwin) 1 +#define TkpRedrawWidget(tkwin) + #endif /* _WINPORT */ diff --git a/win/tkWinWm.c b/win/tkWinWm.c index 9307503..f7ba611 100644 --- a/win/tkWinWm.c +++ b/win/tkWinWm.c @@ -2037,7 +2037,7 @@ UpdateWrapper( * Pick the decorative frame style. Override redirect windows get * created as undecorated popups if they have no transient parent, * otherwise they are children. This allows splash screens to operate - * as an independent window, while having dropdows (like for a + * as an independent window, while having dropdowns (like for a * combobox) not grab focus away from their parent. Transient windows * get a modal dialog frame. Neither override, nor transient windows * appear in the Windows taskbar. Note that a transient window does diff --git a/win/tkWinX.c b/win/tkWinX.c index 689268d..8616369 100644 --- a/win/tkWinX.c +++ b/win/tkWinX.c @@ -104,7 +104,7 @@ static Tcl_ThreadDataKey dataKey; static void GenerateXEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); static unsigned int GetState(UINT message, WPARAM wParam, LPARAM lParam); -static void GetTranslatedKey(XKeyEvent *xkey, UINT type); +static void GetTranslatedKey(TkKeyEvent *xkey, UINT type); static void UpdateInputLanguage(int charset); static int HandleIMEComposition(HWND hwnd, LPARAM lParam); @@ -994,7 +994,7 @@ GenerateXEvent( WPARAM wParam, LPARAM lParam) { - XEvent event; + union {XEvent x; TkKeyEvent key;} event; TkWindow *winPtr; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); @@ -1020,33 +1020,33 @@ GenerateXEvent( return; } - memset(&event, 0, sizeof(XEvent)); - event.xany.serial = winPtr->display->request++; - event.xany.send_event = False; - event.xany.display = winPtr->display; - event.xany.window = winPtr->window; + memset(&event.x, 0, sizeof(XEvent)); + event.x.xany.serial = winPtr->display->request++; + event.x.xany.send_event = False; + event.x.xany.display = winPtr->display; + event.x.xany.window = winPtr->window; switch (message) { case WM_PAINT: { PAINTSTRUCT ps; - event.type = Expose; + event.x.type = Expose; BeginPaint(hwnd, &ps); - event.xexpose.x = ps.rcPaint.left; - event.xexpose.y = ps.rcPaint.top; - event.xexpose.width = ps.rcPaint.right - ps.rcPaint.left; - event.xexpose.height = ps.rcPaint.bottom - ps.rcPaint.top; + event.x.xexpose.x = ps.rcPaint.left; + event.x.xexpose.y = ps.rcPaint.top; + event.x.xexpose.width = ps.rcPaint.right - ps.rcPaint.left; + event.x.xexpose.height = ps.rcPaint.bottom - ps.rcPaint.top; EndPaint(hwnd, &ps); - event.xexpose.count = 0; + event.x.xexpose.count = 0; break; } case WM_CLOSE: - event.type = ClientMessage; - event.xclient.message_type = + event.x.type = ClientMessage; + event.x.xclient.message_type = Tk_InternAtom((Tk_Window) winPtr, "WM_PROTOCOLS"); - event.xclient.format = 32; - event.xclient.data.l[0] = + event.x.xclient.format = 32; + event.x.xclient.data.l[0] = Tk_InternAtom((Tk_Window) winPtr, "WM_DELETE_WINDOW"); break; @@ -1082,10 +1082,10 @@ GenerateXEvent( return; } - event.xany.window = winPtr->window; - event.type = (message == WM_SETFOCUS) ? FocusIn : FocusOut; - event.xfocus.mode = NotifyNormal; - event.xfocus.detail = NotifyNonlinear; + event.x.xany.window = winPtr->window; + event.x.type = (message == WM_SETFOCUS) ? FocusIn : FocusOut; + event.x.xfocus.mode = NotifyNormal; + event.x.xfocus.detail = NotifyNonlinear; /* * Destroy the caret if we own it. If we are moving to another Tk @@ -1107,10 +1107,10 @@ GenerateXEvent( return; } - event.type = SelectionClear; - event.xselectionclear.selection = + event.x.type = SelectionClear; + event.x.xselectionclear.selection = Tk_InternAtom((Tk_Window)winPtr, "CLIPBOARD"); - event.xselectionclear.time = TkpGetMS(); + event.x.xselectionclear.time = TkpGetMS(); break; case WM_MOUSEWHEEL: @@ -1139,15 +1139,15 @@ GenerateXEvent( * Set up the common event fields. */ - event.xbutton.root = RootWindow(winPtr->display, winPtr->screenNum); - event.xbutton.subwindow = None; - event.xbutton.x = clientPoint.x; - event.xbutton.y = clientPoint.y; - event.xbutton.x_root = root.point.x; - event.xbutton.y_root = root.point.y; - event.xbutton.state = state; - event.xbutton.time = time; - event.xbutton.same_screen = True; + event.x.xbutton.root = RootWindow(winPtr->display, winPtr->screenNum); + event.x.xbutton.subwindow = None; + event.x.xbutton.x = clientPoint.x; + event.x.xbutton.y = clientPoint.y; + event.x.xbutton.x_root = root.point.x; + event.x.xbutton.y_root = root.point.y; + event.x.xbutton.state = state; + event.x.xbutton.time = time; + event.x.xbutton.same_screen = True; /* * Now set up event specific fields. @@ -1179,10 +1179,10 @@ GenerateXEvent( * TkpGetString. [Bug 1118340]. */ - event.type = MouseWheelEvent; - event.xany.send_event = -1; - event.xkey.nbytes = 0; - event.xkey.keycode = tsdPtr->vWheelAcc / WHEEL_DELTA * WHEEL_DELTA; + event.x.type = MouseWheelEvent; + event.x.xany.send_event = -1; + event.key.nbytes = 0; + event.x.xkey.keycode = tsdPtr->vWheelAcc / WHEEL_DELTA * WHEEL_DELTA; tsdPtr->vWheelAcc = tsdPtr->vWheelAcc % WHEEL_DELTA; break; } @@ -1211,11 +1211,11 @@ GenerateXEvent( * TkpGetString. [Bug 1118340]. */ - event.type = MouseWheelEvent; - event.xany.send_event = -1; - event.xkey.nbytes = 0; - event.xkey.state |= ShiftMask; - event.xkey.keycode = tsdPtr->hWheelAcc / WHEEL_DELTA * WHEEL_DELTA; + event.x.type = MouseWheelEvent; + event.x.xany.send_event = -1; + event.key.nbytes = 0; + event.x.xkey.state |= ShiftMask; + event.x.xkey.keycode = tsdPtr->hWheelAcc / WHEEL_DELTA * WHEEL_DELTA; tsdPtr->hWheelAcc = tsdPtr->hWheelAcc % WHEEL_DELTA; break; } @@ -1229,10 +1229,10 @@ GenerateXEvent( * MBCS characters that came from the TranslateMessage call. */ - event.type = KeyPress; - event.xany.send_event = -1; - event.xkey.keycode = wParam; - GetTranslatedKey(&event.xkey, (message == WM_KEYDOWN) ? WM_CHAR : + event.x.type = KeyPress; + event.x.xany.send_event = -1; + event.x.xkey.keycode = wParam; + GetTranslatedKey(&event.key, (message == WM_KEYDOWN) ? WM_CHAR : WM_SYSCHAR); break; @@ -1244,9 +1244,9 @@ GenerateXEvent( * WM_CHAR messages which will follow. */ - event.type = KeyRelease; - event.xkey.keycode = wParam; - event.xkey.nbytes = 0; + event.x.type = KeyRelease; + event.x.xkey.keycode = wParam; + event.key.nbytes = 0; break; case WM_CHAR: @@ -1280,9 +1280,9 @@ GenerateXEvent( * character. */ - event.type = KeyPress; - event.xany.send_event = -1; - event.xkey.keycode = 0; + event.x.type = KeyPress; + event.x.xany.send_event = -1; + event.x.xkey.keycode = 0; if ((int)wParam & 0xff00) { int ch1 = wParam & 0xffff; @@ -1295,12 +1295,12 @@ GenerateXEvent( (ch1 & 0x3ff) | 0x10000; tsdPtr->surrogateBuffer = 0; } - event.xany.send_event = -3; - event.xkey.nbytes = 0; - event.xkey.keycode = ch1; + event.x.xany.send_event = -3; + event.key.nbytes = 0; + event.x.xkey.keycode = ch1; } else { - event.xkey.nbytes = 1; - event.xkey.trans_chars[0] = (char) wParam; + event.key.nbytes = 1; + event.key.trans_chars[0] = (char) wParam; if (IsDBCSLeadByte((BYTE) wParam)) { MSG msg; @@ -1309,22 +1309,22 @@ GenerateXEvent( PM_NOREMOVE) != 0) && (msg.message == WM_CHAR)) { GetMessageW(&msg, NULL, WM_CHAR, WM_CHAR); - event.xkey.nbytes = 2; - event.xkey.trans_chars[1] = (char) msg.wParam; + event.key.nbytes = 2; + event.key.trans_chars[1] = (char) msg.wParam; } } } - Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); - event.type = KeyRelease; + Tk_QueueWindowEvent(&event.x, TCL_QUEUE_TAIL); + event.x.type = KeyRelease; break; case WM_UNICHAR: { - event.type = KeyPress; - event.xany.send_event = -3; - event.xkey.keycode = wParam; - event.xkey.nbytes = 0; - Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); - event.type = KeyRelease; + event.x.type = KeyPress; + event.x.xany.send_event = -3; + event.x.xkey.keycode = wParam; + event.key.nbytes = 0; + Tk_QueueWindowEvent(&event.x, TCL_QUEUE_TAIL); + event.x.type = KeyRelease; break; } @@ -1345,7 +1345,7 @@ GenerateXEvent( * Post the translated event to the main Tk event queue. */ - Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); + Tk_QueueWindowEvent(&event.x, TCL_QUEUE_TAIL); } /* @@ -1354,7 +1354,7 @@ GenerateXEvent( * GetState -- * * This function constructs a state mask for the mouse buttons and - * modifier keys as they were before the event occured. + * modifier keys as they were before the event occurred. * * Results: * Returns a composite value of all the modifier and button state flags @@ -1447,7 +1447,7 @@ GetState( static void GetTranslatedKey( - XKeyEvent *xkey, + TkKeyEvent *xkey, UINT type) { MSG msg; @@ -1470,7 +1470,7 @@ GetTranslatedKey( */ if ((msg.message == WM_CHAR) && (msg.lParam & 0x20000000)) { - xkey->state = 0; + xkey->keyEvent.state = 0; } xkey->trans_chars[xkey->nbytes++] = (char) msg.wParam; @@ -1529,7 +1529,11 @@ UpdateInputLanguage( return; } - sprintf(codepage, "cp%d", charsetInfo.ciACP); + if (charsetInfo.ciACP == CP_UTF8) { + strcpy(codepage, "utf-8"); + } else { + sprintf(codepage, "cp%d", charsetInfo.ciACP); + } if ((encoding = Tcl_GetEncoding(NULL, codepage)) == NULL) { /* diff --git a/win/ttkWinTheme.c b/win/ttkWinTheme.c index 63e9704..b0468fd 100644 --- a/win/ttkWinTheme.c +++ b/win/ttkWinTheme.c @@ -7,7 +7,7 @@ #include <tkWinInt.h> -#ifndef DFCS_HOT /* Windows 98/Me, Windows 200/XP only */ +#ifndef DFCS_HOT /* Windows 98/Me, Windows 2000/XP only */ #define DFCS_HOT 0 #endif diff --git a/win/ttkWinXPTheme.c b/win/ttkWinXPTheme.c index 4391fdd..436fe00 100644 --- a/win/ttkWinXPTheme.c +++ b/win/ttkWinXPTheme.c @@ -510,7 +510,7 @@ static void GenericElementSize( if (!(elementData->info->flags & IGNORE_THEMESIZE)) { result = elementData->procs->GetThemePartSize( elementData->hTheme, - elementData->hDC, + NULL, elementData->info->partId, Ttk_StateTableLookup(elementData->info->statemap, 0), NULL /*RECT *prc*/, |