client.c
changeset 46 58307ad56ec1
parent 45 7943c72e34eb
child 49 466591c2f967
equal deleted inserted replaced
45:7943c72e34eb 46:58307ad56ec1
     9 #include <X11/Xatom.h>
     9 #include <X11/Xatom.h>
    10 #include <X11/Xutil.h>
    10 #include <X11/Xutil.h>
    11 
    11 
    12 #include "dwm.h"
    12 #include "dwm.h"
    13 
    13 
    14 static void floating(void);
    14 static void (*arrange)(void *) = floating;
    15 static void tiling(void);
       
    16 static void (*arrange)(void) = floating;
       
    17 
    15 
    18 void
    16 void
    19 max(void *aux)
    17 max(void *aux)
    20 {
    18 {
    21 	if(!stack)
    19 	if(!stack)
    22 		return;
    20 		return;
    23 	stack->x = sx;
    21 	stack->x = sx;
    24 	stack->y = sy;
    22 	stack->y = sy;
    25 	stack->w = sw - 2 * stack->border;
    23 	stack->w = sw - 2 * stack->border;
    26 	stack->h = sh - 2 * stack->border;
    24 	stack->h = sh - 2 * stack->border;
       
    25 	craise(stack);
    27 	resize(stack);
    26 	resize(stack);
    28 	discard_events(EnterWindowMask);
    27 	discard_events(EnterWindowMask);
    29 }
    28 }
    30 
    29 
    31 static void
    30 void
    32 floating(void)
    31 floating(void *aux)
    33 {
    32 {
    34 	Client *c;
    33 	Client *c;
    35 
    34 
       
    35 	arrange = floating;
    36 	for(c = stack; c; c = c->snext)
    36 	for(c = stack; c; c = c->snext)
    37 		resize(c);
    37 		resize(c);
    38 	discard_events(EnterWindowMask);
    38 	discard_events(EnterWindowMask);
    39 }
    39 }
    40 
    40 
    41 static void
    41 void
    42 tiling(void)
    42 tiling(void *aux)
    43 {
    43 {
    44 	Client *c;
    44 	Client *c;
    45 	int n, cols, rows, gw, gh, i, j;
    45 	int n, cols, rows, gw, gh, i, j;
    46     float rt, fd;
    46     float rt, fd;
    47 
    47 
       
    48 	arrange = tiling;
    48 	if(!clients)
    49 	if(!clients)
    49 		return;
    50 		return;
    50 	for(n = 0, c = clients; c; c = c->next, n++);
    51 	for(n = 0, c = clients; c; c = c->next, n++);
    51 	rt = sqrt(n);
    52 	rt = sqrt(n);
    52 	if(modff(rt, &fd) < 0.5)
    53 	if(modff(rt, &fd) < 0.5)
    72 			i = 0;
    73 			i = 0;
    73 		}
    74 		}
    74 	}
    75 	}
    75 	discard_events(EnterWindowMask);
    76 	discard_events(EnterWindowMask);
    76 }
    77 }
    77 
       
    78 void
       
    79 toggle(void *aux)
       
    80 {
       
    81 	if(arrange == floating)
       
    82 		arrange = tiling;
       
    83 	else
       
    84 		arrange = floating;
       
    85 	arrange();
       
    86 }
       
    87 
       
    88 
    78 
    89 void
    79 void
    90 sel(void *aux)
    80 sel(void *aux)
    91 {
    81 {
    92 	const char *arg = aux;
    82 	const char *arg = aux;
   278 			GrabModeAsync, GrabModeSync, None, None);
   268 			GrabModeAsync, GrabModeSync, None, None);
   279 	XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask,
   269 	XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask,
   280 			GrabModeAsync, GrabModeSync, None, None);
   270 			GrabModeAsync, GrabModeSync, None, None);
   281 	XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask,
   271 	XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask,
   282 			GrabModeAsync, GrabModeSync, None, None);
   272 			GrabModeAsync, GrabModeSync, None, None);
   283 	arrange();
   273 	arrange(NULL);
   284 	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w / 2, c->h / 2);
   274 	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w / 2, c->h / 2);
   285 	focus(c);
   275 	focus(c);
   286 }
   276 }
   287 
   277 
   288 void
   278 void
   398 	free(c);
   388 	free(c);
   399 
   389 
   400 	XFlush(dpy);
   390 	XFlush(dpy);
   401 	XSetErrorHandler(error_handler);
   391 	XSetErrorHandler(error_handler);
   402 	XUngrabServer(dpy);
   392 	XUngrabServer(dpy);
   403 	arrange();
   393 	arrange(NULL);
   404 	if(stack)
   394 	if(stack)
   405 		focus(stack);
   395 		focus(stack);
   406 }
   396 }
   407 
   397 
   408 Client *
   398 Client *