extended rule to apply monitors if set up accordingly
authorAnselm R Garbe <anselm@garbe.us>
Thu, 9 Jul 2009 20:52:17 +0000 (21:52 +0100)
committerAnselm R Garbe <anselm@garbe.us>
Thu, 9 Jul 2009 20:52:17 +0000 (21:52 +0100)
config.def.h
dwm.c

index f0e44a7..cca37df 100644 (file)
@@ -17,9 +17,9 @@ static const Bool topbar            = True;     /* False means bottom bar */
 static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
 
 static const Rule rules[] = {
-       /* class      instance    title       tags mask     isfloating */
-       { "Gimp",     NULL,       NULL,       0,            True },
-       { "Firefox",  NULL,       NULL,       1 << 8,       False },
+       /* class      instance    title       tags mask     isfloating   monitor */
+       { "Gimp",     NULL,       NULL,       0,            True,        -1 },
+       { "Firefox",  NULL,       NULL,       1 << 8,       False,       -1 },
 };
 
 /* layout(s) */
diff --git a/dwm.c b/dwm.c
index 5822944..4d1493b 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -121,8 +121,8 @@ typedef struct {
 } Layout;
 
 struct Monitor {
-       int screen_number;
        float mfact;
+       int num;
        int by;               /* bar geometry */
        int mx, my, mw, mh;   /* screen size */
        int wx, wy, ww, wh;   /* window area  */
@@ -145,6 +145,7 @@ typedef struct {
        const char *title;
        unsigned int tags;
        Bool isfloating;
+       int monitor;
 } Rule;
 
 /* function declarations */
@@ -238,7 +239,7 @@ static void zoom(const Arg *arg);
 /* variables */
 static char stext[256], ntext[8];
 static int screen;
-static int sw, sh;           /* X display screen geometry x, y, width, height */
+static int sw, sh;           /* X display screen geometry width, height */
 static int bh, blw = 0;      /* bar geometry */
 static int (*xerrorxlib)(Display *, XErrorEvent *);
 static unsigned int numlockmask = 0;
@@ -276,6 +277,7 @@ void
 applyrules(Client *c) {
        unsigned int i;
        const Rule *r;
+       Monitor *m;
        XClassHint ch = { 0 };
 
        /* rule matching */
@@ -289,6 +291,9 @@ applyrules(Client *c) {
                        {
                                c->isfloating = r->isfloating;
                                c->tags |= r->tags;
+                               for(m = mons; m && m->num != r->monitor; m = m->next);
+                               if(m)
+                                       c->mon = m;
                        }
                }
                if(ch.res_class)
@@ -1698,7 +1703,7 @@ updategeom(void) {
 #ifdef XINERAMA
        if(XineramaIsActive(dpy)) {
                for(i = 0, m = newmons; m; m = m->next, i++) {
-                       m->screen_number = info[i].screen_number;
+                       m->num = info[i].screen_number;
                        m->mx = m->wx = info[i].x_org;
                        m->my = m->wy = info[i].y_org;
                        m->mw = m->ww = info[i].width;
@@ -1710,7 +1715,7 @@ updategeom(void) {
 #endif /* XINERAMA */
        /* default monitor setup */
        {
-               m->screen_number = 0;
+               m->num = 0;
                m->mx = m->wx = 0;
                m->my = m->wy = 0;
                m->mw = m->ww = sw;