aboutsummaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
Diffstat (limited to 'window.c')
-rw-r--r--window.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/window.c b/window.c
index bd9b0c3..dd17134 100644
--- a/window.c
+++ b/window.c
@@ -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,