diff options
Diffstat (limited to 'window.c')
-rw-r--r-- | window.c | 20 |
1 files changed, 16 insertions, 4 deletions
@@ -276,7 +276,9 @@ void win_open(win_t *win) } free(icon_data); - win_set_title(win, "sxiv"); + /* These two atoms won't change and thus only need to be set once. */ + XStoreName(win->env.dpy, win->xwin, "sxiv"); + XSetIconName(win->env.dpy, win->xwin, "sxiv"); classhint.res_class = RES_CLASS; classhint.res_name = options->res_name != NULL ? options->res_name : "sxiv"; @@ -486,10 +488,20 @@ void win_draw_rect(win_t *win, int x, int y, int w, int h, bool fill, int lw, XDrawRectangle(win->env.dpy, win->buf.pm, gc, x, y, w, h); } -void win_set_title(win_t *win, const char *title) +void win_set_title(win_t *win, const char *path) { - XStoreName(win->env.dpy, win->xwin, title); - XSetIconName(win->env.dpy, win->xwin, title); + const unsigned int title_max = strlen(path) + strlen(options->title_prefix) + 1; + char title[title_max]; + const char *basename = strrchr(path, '/') + 1; + + /* Return if window is not ready yet */ + if (win->xwin == None) + return; + + snprintf(title, title_max, "%s%s", options->title_prefix, + (options->title_suffixmode == SUFFIX_BASENAME) ? basename : path); + if (options->title_suffixmode == SUFFIX_EMPTY) + *(title+strlen(options->title_prefix)) = '\0'; XChangeProperty(win->env.dpy, win->xwin, atoms[ATOM__NET_WM_NAME], XInternAtom(win->env.dpy, "UTF8_STRING", False), 8, |