diff options
Diffstat (limited to 'tk/mac/tkMacClipboard.c')
-rw-r--r-- | tk/mac/tkMacClipboard.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/tk/mac/tkMacClipboard.c b/tk/mac/tkMacClipboard.c index 88bc423a343..ebc4c33c5aa 100644 --- a/tk/mac/tkMacClipboard.c +++ b/tk/mac/tkMacClipboard.c @@ -32,7 +32,7 @@ * Results: * The return value is a standard Tcl return value. * If an error occurs (such as no selection exists) - * then an error message is left in interp->result. + * then an error message is left in the interp's result. * * Side effects: * None. @@ -66,12 +66,17 @@ TkSelGetSelection( handle = NewHandle(1); length = GetScrap(handle, 'TEXT', &offset); if (length > 0) { + Tcl_DString encodedText; + SetHandleSize(handle, (Size) length + 1); HLock(handle); (*handle)[length] = '\0'; - - result = (*proc)(clientData, interp, *handle); - + + Tcl_ExternalToUtfDString(NULL, *handle, length, &encodedText); + result = (*proc)(clientData, interp, + Tcl_DStringValue(&encodedText)); + Tcl_DStringFree(&encodedText); + HUnlock(handle); DisposeHandle(handle); return result; @@ -119,7 +124,7 @@ XSetSelectionOwner( * It expects a Tk_Window, even though it only needs a Tk_Display. */ - tkwin = (Tk_Window)tkMainWindowList->winPtr; + tkwin = (Tk_Window) TkGetMainInfoList()->winPtr; if (selection == Tk_InternAtom(tkwin, "CLIPBOARD")) { @@ -128,7 +133,7 @@ XSetSelectionOwner( * owner of the clipboard. */ - dispPtr = tkMainWindowList->winPtr->dispPtr; + dispPtr = TkGetMainInfoList()->winPtr->dispPtr; if (dispPtr->clipboardActive) { return; } @@ -241,7 +246,7 @@ TkSuspendClipboard() char *buffer, *p, *endPtr, *buffPtr; long length; - dispPtr = tkDisplayList; + dispPtr = TkGetDisplayList(); if ((dispPtr == NULL) || !dispPtr->clipboardActive) { return; } @@ -252,6 +257,8 @@ TkSuspendClipboard() break; } if (targetPtr != NULL) { + Tcl_DString encodedText; + length = 0; for (cbPtr = targetPtr->firstBufferPtr; cbPtr != NULL; cbPtr = cbPtr->nextPtr) { @@ -273,7 +280,10 @@ TkSuspendClipboard() } ZeroScrap(); - PutScrap(length, 'TEXT', buffer); + Tcl_UtfToExternalDString(NULL, buffer, length, &encodedText); + PutScrap(Tcl_DStringLength(&encodedText), 'TEXT', + Tcl_DStringValue(&encodedText)); + Tcl_DStringFree(&encodedText); ckfree(buffer); } @@ -283,11 +293,12 @@ TkSuspendClipboard() * it needs it. (Window list NULL if quiting.) */ - if (tkMainWindowList != NULL) { - Tk_ClearSelection((Tk_Window) tkMainWindowList->winPtr, - Tk_InternAtom((Tk_Window) tkMainWindowList->winPtr, + if (TkGetMainInfoList() != NULL) { + Tk_ClearSelection((Tk_Window) TkGetMainInfoList()->winPtr, + Tk_InternAtom((Tk_Window) TkGetMainInfoList()->winPtr, "CLIPBOARD")); } return; } + |