layout.c
changeset 946 b938876de936
parent 944 bd5cf635c601
child 949 99ee5c370f94
equal deleted inserted replaced
945:89ea2acd2646 946:b938876de936
     1 /* See LICENSE file for copyright and license details. */
     1 /* See LICENSE file for copyright and license details. */
     2 #include "dwm.h"
     2 #include "dwm.h"
     3 #include <stdlib.h>
     3 #include <stdlib.h>
     4 
     4 
       
     5 typedef struct {
       
     6 	const char *symbol;
       
     7 	void (*arrange)(void);
       
     8 } Layout;
       
     9 
     5 unsigned int blw = 0;
    10 unsigned int blw = 0;
     6 Layout *lt = NULL;
    11 static Layout *lt = NULL;
     7 
    12 
     8 /* static */
    13 /* static */
       
    14 
       
    15 static void
       
    16 floating(void) {
       
    17 	Client *c;
       
    18 
       
    19 	for(c = clients; c; c = c->next)
       
    20 		if(isvisible(c))
       
    21 			resize(c, c->x, c->y, c->w, c->h, True);
       
    22 }
     9 
    23 
    10 static unsigned int nlayouts = 0;
    24 static unsigned int nlayouts = 0;
    11 
    25 
    12 LAYOUTS
    26 LAYOUTS
    13 
    27 
    14 /* extern */
    28 /* extern */
    15 
    29 
    16 void
    30 void
    17 floating(void) {
    31 arrange(void) {
    18 	Client *c;
    32 	Client *c;
    19 
    33 
    20 	if(lt->arrange != floating)
       
    21 		return;
       
    22 
       
    23 	for(c = clients; c; c = c->next)
    34 	for(c = clients; c; c = c->next)
    24 		if(isvisible(c)) {
    35 		if(isvisible(c))
    25 			unban(c);
    36 			unban(c);
    26 			resize(c, c->x, c->y, c->w, c->h, True);
       
    27 		}
       
    28 		else
    37 		else
    29 			ban(c);
    38 			ban(c);
       
    39 	lt->arrange();
    30 	focus(NULL);
    40 	focus(NULL);
    31 	restack();
    41 	restack();
    32 }
    42 }
    33 
    43 
    34 void
    44 void
    51 	}
    61 	}
    52 	if(c) {
    62 	if(c) {
    53 		focus(c);
    63 		focus(c);
    54 		restack();
    64 		restack();
    55 	}
    65 	}
       
    66 }
       
    67 
       
    68 const char *
       
    69 getsymbol(void)
       
    70 {
       
    71 	return lt->symbol;
       
    72 }
       
    73 
       
    74 Bool
       
    75 isfloating(void) {
       
    76 	return lt->arrange == floating;
       
    77 }
       
    78 
       
    79 Bool
       
    80 isarrange(void (*func)())
       
    81 {
       
    82 	return func == lt->arrange;
    56 }
    83 }
    57 
    84 
    58 void
    85 void
    59 initlayouts(void) {
    86 initlayouts(void) {
    60 	unsigned int i, w;
    87 	unsigned int i, w;
   117 		if(i < 0 || i >= nlayouts)
   144 		if(i < 0 || i >= nlayouts)
   118 			return;
   145 			return;
   119 		lt = &layout[i];
   146 		lt = &layout[i];
   120 	}
   147 	}
   121 	if(sel)
   148 	if(sel)
   122 		lt->arrange();
   149 		arrange();
   123 	else
   150 	else
   124 		drawstatus();
   151 		drawstatus();
   125 }
   152 }
   126 
   153 
   127 void
   154 void
   129 	if(bpos == BarOff)
   156 	if(bpos == BarOff)
   130 		bpos = (BARPOS == BarOff) ? BarTop : BARPOS;
   157 		bpos = (BARPOS == BarOff) ? BarTop : BARPOS;
   131 	else
   158 	else
   132 		bpos = BarOff;
   159 		bpos = BarOff;
   133 	updatebarpos();
   160 	updatebarpos();
   134 	lt->arrange();
   161 	arrange();
   135 }
   162 }
   136 
   163 
   137 void
   164 void
   138 togglemax(const char *arg) {
   165 togglemax(const char *arg) {
   139 	XEvent ev;
   166 	XEvent ev;