summaryrefslogtreecommitdiff
path: root/tk/mac/tkMacClipboard.c
diff options
context:
space:
mode:
Diffstat (limited to 'tk/mac/tkMacClipboard.c')
-rw-r--r--tk/mac/tkMacClipboard.c33
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;
}
+