aboutsummaryrefslogtreecommitdiffstats
path: root/screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'screen.c')
-rw-r--r--screen.c103
1 files changed, 103 insertions, 0 deletions
diff --git a/screen.c b/screen.c
new file mode 100644
index 0000000..3480f3f
--- /dev/null
+++ b/screen.c
@@ -0,0 +1,103 @@
+/*
+ * calmwm - the calm window manager
+ *
+ * Copyright (c) 2004 Marius Aamodt Eriksen <marius@monkey.org>
+ * All rights reserved.
+ *
+ * $Id: screen.c,v 1.1.1.1 2007/04/27 17:58:48 bernd Exp $
+ */
+
+#include "headers.h"
+#include "calmwm.h"
+
+extern struct screen_ctx_q G_screenq;
+extern struct screen_ctx *G_curscreen;
+
+static void
+_clearwindow_cb(int sig)
+{
+ struct screen_ctx *sc = screen_current();
+ XUnmapWindow(G_dpy, sc->infowin);
+}
+
+struct screen_ctx *
+screen_fromroot(Window rootwin)
+{
+ struct screen_ctx *sc;
+
+ TAILQ_FOREACH(sc, &G_screenq, entry)
+ if (sc->rootwin == rootwin)
+ return (sc);
+
+ /* XXX FAIL HERE */
+ return (TAILQ_FIRST(&G_screenq));
+}
+
+struct screen_ctx *
+screen_current(void)
+{
+ return (G_curscreen);
+}
+
+void
+screen_updatestackingorder(void)
+{
+ Window *wins, w0, w1;
+ struct screen_ctx *sc = screen_current();
+ u_int nwins, i, s;
+ struct client_ctx *cc;
+
+ if (!XQueryTree(G_dpy, sc->rootwin, &w0, &w1, &wins, &nwins))
+ return;
+
+ for (s = 0, i = 0; i < nwins; i++) {
+ /* Skip hidden windows */
+ if ((cc = client_find(wins[i])) == NULL ||
+ cc->flags & CLIENT_HIDDEN)
+ continue;
+
+ cc->stackingorder = s++;
+ }
+
+ XFree(wins);
+}
+
+void
+screen_init(void)
+{
+
+ struct screen_ctx *sc = screen_current();
+
+ sc->cycle_client = NULL;
+
+ sc->infowin = XCreateSimpleWindow(G_dpy, sc->rootwin, 0, 0,
+ 1, 1, 1, sc->blackpixl, sc->whitepixl);
+
+ /* XXX - marius. */
+ if (signal(SIGALRM, _clearwindow_cb) == SIG_ERR)
+ err(1, "signal");
+}
+
+void
+screen_infomsg(char *msg)
+{
+ struct screen_ctx *sc = screen_current();
+ char buf[1024];
+ int dy, dx;
+ struct fontdesc *font = DefaultFont;
+
+ XUnmapWindow(G_dpy, sc->infowin);
+ alarm(0);
+
+ snprintf(buf, sizeof(buf), ">%s", msg);
+ dy = font_ascent(font) + font_descent(font) + 1;
+ dx = font_width(font, buf, strlen(buf));
+
+ XMoveResizeWindow(G_dpy, sc->infowin, 0, 0, dx, dy);
+ XMapRaised(G_dpy, sc->infowin);
+
+ font_draw(font, buf, strlen(buf), sc->infowin,
+ 0, font_ascent(font) + 1);
+
+ alarm(1);
+}