--- src/callbacks.c +++ src/callbacks.c 2004-04-30 22:59:01.000000000 +0200 @@ -62,6 +62,11 @@ #include #include +#include +#include +#include +#include INC_X11(Xatom.h) + #include "types.h" #include "actions.h" #include "callbacks.h" @@ -95,6 +100,82 @@ static char* open_directory = NULL; /* cb_showTitle */ /*############################################################*/ +void setTitle ( Display* dpy, Window w, char* title, int icon); +XTextProperty* char_to_xtp ( Display* dpy, char* s ); + +void setTitle ( Display* dpy, Window w, char* title, int icon) { + char* from; + iconv_t cd; + char* inptr; + size_t insize; + char utf8title [4096]; + char* outptr; + size_t outsize; + Atom net_wm_name; + Atom net_wm_icon_name; + Atom utf8_string; + + net_wm_name = XInternAtom (dpy, "_NET_WM_NAME", False); + net_wm_icon_name = XInternAtom (dpy, "_NET_WM_ICON_NAME", False); + utf8_string = XInternAtom (dpy, "UTF8_STRING" ,False); + + from = nl_langinfo (CODESET); + cd = iconv_open ("UTF-8",from); + inptr = title; + outptr = utf8title; + insize = strlen(title); + outsize = sizeof (utf8title); + memset (&utf8title, 0, sizeof(utf8title)); + iconv (cd, &inptr, &insize, &outptr, &outsize); + + if (icon) { + XSetWMIconName ( + dpy, w, char_to_xtp (dpy,utf8title) + ); + XChangeProperty ( + dpy, w, net_wm_icon_name, utf8_string, 8, + PropModeReplace, (unsigned char *)utf8title, + strlen (utf8title) + ); + } else { + XSetWMName ( + dpy, w, char_to_xtp (dpy,utf8title) + ); + XChangeProperty ( + dpy, w, net_wm_name, utf8_string, 8, + PropModeReplace, (unsigned char *)utf8title, + strlen (utf8title) + ); + } +} + +XTextProperty* char_to_xtp ( Display* dpy, char* s ) { + static XTextProperty tp = { 0, 0, 0, 0 }; + static int free_prop = True; + int errCode = 0; + char* tl[2]; + if ( tp.value ) { + if ( free_prop ) { + XFree( tp.value ); + } + tp.value = 0; + free_prop = True; + } + tl[0] = s; + tl[1] = 0; + errCode = XmbTextListToTextProperty ( + dpy,tl, 1, XStdICCTextStyle, &tp + ); + if ( errCode < 0 ) { + tp.value = (unsigned char*)s; + tp.encoding = XA_STRING; + tp.format = 8; + tp.nitems = strlen (s); + free_prop = False; + } + return &tp; +} + void cb_showTitle(w, client_data, call_data) Widget w; @@ -124,6 +205,8 @@ cb_showTitle(w, client_data, call_data) } else { t = s = GV_XtNewString(versionIdentification[0]); } + if (w && XtWindow(w)) setTitle(gv_display, XtWindow(w), s, 0); + if (w && XtWindow(w)) setTitle(gv_display, XtWindow(w), t, 1); n=0; XtSetArg(args[n], XtNtitle, s); n++; XtSetArg(args[n], XtNiconName, t); n++; --- src/main.c +++ src/main.c 2004-04-30 22:50:21.000000000 +0200 @@ -1226,6 +1226,7 @@ int main(argc, argv) INFMESSAGE(mapping toplevel) XtMapWidget(toplevel); + cb_showTitle(toplevel, NULL, NULL); } INFMESSAGE(waiting for events now) --- src/misc.c +++ src/misc.c 2008-03-27 17:16:44.877346759 +0100 @@ -932,7 +932,7 @@ setup_ghostview() gv_pagemedia = m; } } - cb_showTitle(NULL,NULL,NULL); + cb_showTitle(toplevel,NULL,NULL); if (show_date) { if (doc && doc->date) {