[dwm] Patch. Icon for indicate layout.

From: Alexandr Gubanoff <agubanoff_AT_gmail.com>
Date: Tue, 21 Oct 2008 11:12:15 +0900

Hi. I am very bad speak English.
I make no big patch to display icons in dwm-bar.

--- dwm.c 2008-09-10 04:46:17.000000000 +0900
+++ dwm-icon.c 2008-10-21 10:10:04.570787446 +0900
@@ -117,6 +117,7 @@
 } Key;

 typedef struct {
+ const char *icon;
     const char *symbol;
     void (*arrange)(void);
 } Layout;
@@ -146,6 +147,7 @@
 static void detachstack(Client *c);
 static void die(const char *errstr, ...);
 static void drawbar(void);
+static void drawicon(const char *file, unsigned long col[ColLast]);
 static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long
col[ColLast]);
 static void drawtext(const char *text, unsigned long col[ColLast], Bool
invert);
 static void enternotify(XEvent *e);
@@ -511,8 +513,14 @@
         dc.x += dc.w;
     }
     if(blw > 0) {
- dc.w = blw;
- drawtext(lt[sellt]->symbol, dc.norm, False);
+ if (useicons == False) {
+ dc.w = blw;
+ drawtext(lt[sellt]->symbol, dc.norm, False);
+ }
+ else {
+ dc.w = iw;
+ drawicon(lt[sellt]->icon, dc.sel);
+ }
         x = dc.x + dc.w;
     }
     else
@@ -537,6 +545,22 @@
     XSync(dpy, False);
 }

+void
+drawicon(const char *file, unsigned long col[ColLast]) {
+ Pixmap icon;
+ unsigned int x, pw, ph;
+ x = dc.x;
+ icon = XCreatePixmap(dpy, dc.drawable, 12, 12, 1);
+ XReadBitmapFile(dpy, dc.drawable, file, &pw, &ph, &icon, &ix, &iy);
+
+ XSetForeground(dpy, dc.gc, col[ColBG]);
+ XFillRectangle(dpy, dc.drawable, dc.gc, x, 0, iw, ih);
+
+ XSetForeground(dpy, dc.gc, col[ColFG]);
+ XSetBackground(dpy, dc.gc, col[ColBG]);
+ XCopyPlane(dpy, icon, dc.drawable, dc.gc, ix, iy, iw, ih, x, 0, 1);
+}
+
 void
 drawsquare(Bool filled, Bool empty, Bool invert, unsigned long
col[ColLast]) {
     int x;

--- config.def.h 2008-09-10 04:46:17.000000000 +0900
+++ config.def-icon.h 2008-10-21 10:13:32.293097267 +0900
@@ -28,11 +28,12 @@
 static float mfact = 0.55; /* factor of master area size [0.05..0.95]
*/
 static Bool resizehints = True; /* False means respect size hints in tiled
resizals */

+static Bool useicons = True; /* Use icons for Layout. True or False */
 static Layout layouts[] = {
     /* symbol arrange function */
- { "[]=", tile }, /* first entry is default */
- { "><>", NULL }, /* no layout function means floating behavior
*/
- { "[M]", monocle },
+ { "~/.dwm/icons/tile.xbm", "[]=", tile }, /* first entry is
default */
+ { "~/.dwm/icons/float.xbm", "><>", NULL }, /* no layout
function means floating behavior */
+ { "~/.dwm/icons/monocle.xbm", "[M]", monocle },
 };

 /* key definitions */

screenshot http://img90.imageshack.us/img90/104/20081021kp4.png

P.S. Sorry if I did sometheng wrong. I do it first time.

--
freej
Received on Tue Oct 21 2008 - 02:12:15 UTC

This archive was generated by hypermail 2.2.0 : Tue Oct 21 2008 - 02:24:05 UTC