--- tk8.4.6/unix/tkUnixWm.c.orig 2005-05-31 23:58:40.000000000 +0900 +++ tk8.4.6/unix/tkUnixWm.c 2005-06-10 19:33:57.000000000 +0900 @@ -605,7 +605,8 @@ { register WmInfo *wmPtr = winPtr->wmInfoPtr; XTextProperty textProp; - Tk_Uid string; + const char* string = 0; + Atom XA_UTF8_STRING = Tk_InternAtom((Tk_Window)winPtr, "UTF8_STRING"); if (wmPtr->flags & WM_NEVER_MAPPED) { Tcl_DString ds; @@ -626,24 +627,32 @@ * Store all the window-manager-related information for the * window. */ - string = (wmPtr->title != NULL) ? wmPtr->title : winPtr->nameUid; Tcl_UtfToExternalDString(NULL, string, -1, &ds); - string = Tcl_DStringValue(&ds); - if (XStringListToTextProperty(&(Tcl_DStringValue(&ds)), 1, - &textProp) != 0) { - XSetWMName(winPtr->display, wmPtr->wrapperPtr->window, &textProp); - XFree((char *) textProp.value); - } + XStoreName(winPtr->display, wmPtr->wrapperPtr->window, + Tcl_DStringValue(&ds)); Tcl_DStringFree(&ds); - TkWmSetClass(winPtr); +#if 1 //@@@ + XChangeProperty(winPtr->display, wmPtr->wrapperPtr->window, + Tk_InternAtom((Tk_Window) winPtr, "_NET_WM_NAME"), + XA_UTF8_STRING, 8, PropModeReplace, + (const unsigned char*)string, (signed int)strlen(string)); +#endif + if (wmPtr->iconName != NULL) { Tcl_UtfToExternalDString(NULL, wmPtr->iconName, -1, &ds); XSetIconName(winPtr->display, wmPtr->wrapperPtr->window, Tcl_DStringValue(&ds)); Tcl_DStringFree(&ds); +#if 1 //@@@ + XChangeProperty(winPtr->display, wmPtr->wrapperPtr->window, + Tk_InternAtom((Tk_Window)winPtr, "_NET_WM_ICON_NAME"), + XA_UTF8_STRING, 8, PropModeReplace, + (const unsigned char*)wmPtr->iconName, + (signed int)strlen(wmPtr->iconName)); +#endif } if (wmPtr->masterPtr != NULL) { @@ -2026,6 +2035,7 @@ register WmInfo *wmPtr = winPtr->wmInfoPtr; char *argv3; int length; + Atom XA_UTF8_STRING = Tk_InternAtom((Tk_Window)winPtr, "UTF8_STRING"); if (objc > 4) { Tcl_WrongNumArgs(interp, 2, objv, "window ?newName?"); @@ -2050,6 +2060,13 @@ XSetIconName(winPtr->display, wmPtr->wrapperPtr->window, Tcl_DStringValue(&ds)); Tcl_DStringFree(&ds); +#if 1 //@@@ + XChangeProperty(winPtr->display, wmPtr->wrapperPtr->window, + Tk_InternAtom((Tk_Window)winPtr, "_NET_WM_ICON_NAME"), + XA_UTF8_STRING, 8, PropModeReplace, + (const unsigned char*)wmPtr->iconName, + (signed int)strlen(wmPtr->iconName)); +#endif } } return TCL_OK; @@ -2916,6 +2933,7 @@ register WmInfo *wmPtr = winPtr->wmInfoPtr; char *argv3; int length; + Atom XA_UTF8_STRING = Tk_InternAtom((Tk_Window)winPtr, "UTF8_STRING"); if (objc > 4) { Tcl_WrongNumArgs(interp, 2, objv, "window ?newTitle?"); @@ -2935,19 +2953,20 @@ strcpy(wmPtr->title, argv3); if (!(wmPtr->flags & WM_NEVER_MAPPED)) { - XTextProperty textProp; Tcl_DString ds; - Tcl_UtfToExternalDString(NULL, wmPtr->title, -1, &ds); - if (XStringListToTextProperty(&(Tcl_DStringValue(&ds)), 1, - &textProp) != 0) { - XSetWMName(winPtr->display, wmPtr->wrapperPtr->window, - &textProp); - XFree((char *) textProp.value); - } + XStoreName(winPtr->display, wmPtr->wrapperPtr->window, + Tcl_DStringValue(&ds)); Tcl_DStringFree(&ds); +#if 1 //@@@ + XChangeProperty(winPtr->display, wmPtr->wrapperPtr->window, + Tk_InternAtom((Tk_Window)winPtr, "_NET_WM_NAME"), + XA_UTF8_STRING, 8, PropModeReplace, + (const unsigned char*)wmPtr->title, + (signed int)strlen(wmPtr->title)); +#endif + } } - } return TCL_OK; }