dwm.c
author Anselm R Garbe <anselm@garbe.us>
Mon, 27 Sep 2010 07:53:44 +0000
changeset 1527 406003e3a01f
parent 1526 64eb02a74f2b
child 1528 b4f5309d6253
permissions -rw-r--r--
applied Hiltjo's tiny cleanup fix
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
992
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
     1
/* See LICENSE file for copyright and license details.
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
     2
 *
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
     3
 * dynamic window manager is designed like any other X client as well. It is
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
     4
 * driven through handling X events. In contrast to other X clients, a window
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
     5
 * manager selects for SubstructureRedirectMask on the root window, to receive
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
     6
 * events about window (dis-)appearance.  Only one X connection at a time is
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
     7
 * allowed to select for this event mask.
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
     8
 *
1370
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
     9
 * The event handlers of dwm are organized in an array which is accessed
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
    10
 * whenever a new event has been fetched. This allows event dispatching
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
    11
 * in O(1) time.
992
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
    12
 *
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
    13
 * Each child of the root window is called a client, except windows which have
1445
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
    14
 * set the override_redirect flag.  Clients are organized in a linked client
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
    15
 * list on each monitor, the focus history is remembered through a stack list
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
    16
 * on each monitor. Each client contains a bit array to indicate the tags of a
1242
91e8a7fb3b60 updated the initial comment to reflect the use of bit arrays
Anselm R Garbe <garbeam@gmail.com>
parents: 1241
diff changeset
    17
 * client.
992
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
    18
 *
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
    19
 * Keys and tagging rules are organized as arrays and defined in config.h.
992
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
    20
 *
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
    21
 * To understand everything else, start reading main().
d9ab31906133 backporting my intro-comment of old dwm.h
Anselm R. Garbe <garbeam@gmail.com>
parents: 991
diff changeset
    22
 */
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    23
#include <errno.h>
1343
f4707b7bd3a2 reverted some resize() changes, reverted setlocale removal
Anselm R Garbe <garbeam@gmail.com>
parents: 1342
diff changeset
    24
#include <locale.h>
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    25
#include <stdarg.h>
1374
ff5fd6693d5d ok, using signal.h for portability reasons
a@null
parents: 1373
diff changeset
    26
#include <signal.h>
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    27
#include <stdio.h>
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    28
#include <stdlib.h>
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    29
#include <string.h>
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    30
#include <unistd.h>
1014
35461e0a4894 fixed inclusion order
arg@suckless.org
parents: 1008
diff changeset
    31
#include <sys/types.h>
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    32
#include <sys/wait.h>
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    33
#include <X11/cursorfont.h>
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    34
#include <X11/keysym.h>
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    35
#include <X11/Xatom.h>
1033
a8efbb301ef4 just making dwm.h saner
arg@suckless.org
parents: 1032
diff changeset
    36
#include <X11/Xlib.h>
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    37
#include <X11/Xproto.h>
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    38
#include <X11/Xutil.h>
1215
840fd59e3141 make it easier for the user, if Xinerama support is given, always use the screen 0 as window area/bar area, everything else can be used for floating clients
Anselm R Garbe <garbeam@gmail.com>
parents: 1213
diff changeset
    39
#ifdef XINERAMA
840fd59e3141 make it easier for the user, if Xinerama support is given, always use the screen 0 as window area/bar area, everything else can be used for floating clients
Anselm R Garbe <garbeam@gmail.com>
parents: 1213
diff changeset
    40
#include <X11/extensions/Xinerama.h>
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
    41
#endif /* XINERAMA */
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    42
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
    43
/* macros */
1311
47b3dbd9a7d3 got rid of compile time xidx configuration, querying mouse pointer instead
Anselm R Garbe <garbeam@gmail.com>
parents: 1310
diff changeset
    44
#define BUTTONMASK              (ButtonPressMask|ButtonReleaseMask)
47b3dbd9a7d3 got rid of compile time xidx configuration, querying mouse pointer instead
Anselm R Garbe <garbeam@gmail.com>
parents: 1310
diff changeset
    45
#define CLEANMASK(mask)         (mask & ~(numlockmask|LockMask))
47b3dbd9a7d3 got rid of compile time xidx configuration, querying mouse pointer instead
Anselm R Garbe <garbeam@gmail.com>
parents: 1310
diff changeset
    46
#define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH))
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
    47
#define ISVISIBLE(C)            ((C->tags & C->mon->tagset[C->mon->seltags]))
1399
0decadd79fd5 several fixes through ISVISIBLE change (takes Monitor into account)
Anselm R Garbe <anselm@garbe.us>
parents: 1398
diff changeset
    48
#define LENGTH(X)               (sizeof X / sizeof X[0])
1401
8cee6e329111 we need a tagset per monitor, removed tagset declaration from config.h
Anselm R Garbe <anselm@garbe.us>
parents: 1400
diff changeset
    49
#define MAX(A, B)               ((A) > (B) ? (A) : (B))
8cee6e329111 we need a tagset per monitor, removed tagset declaration from config.h
Anselm R Garbe <anselm@garbe.us>
parents: 1400
diff changeset
    50
#define MIN(A, B)               ((A) < (B) ? (A) : (B))
1311
47b3dbd9a7d3 got rid of compile time xidx configuration, querying mouse pointer instead
Anselm R Garbe <garbeam@gmail.com>
parents: 1310
diff changeset
    51
#define MOUSEMASK               (BUTTONMASK|PointerMotionMask)
1401
8cee6e329111 we need a tagset per monitor, removed tagset declaration from config.h
Anselm R Garbe <anselm@garbe.us>
parents: 1400
diff changeset
    52
#define WIDTH(X)                ((X)->w + 2 * (X)->bw)
8cee6e329111 we need a tagset per monitor, removed tagset declaration from config.h
Anselm R Garbe <anselm@garbe.us>
parents: 1400
diff changeset
    53
#define HEIGHT(X)               ((X)->h + 2 * (X)->bw)
1463
ba3114b785a1 removed int cast in TAGMASK as suggested by nsz
Anselm R Garbe <garbeam@gmail.com>
parents: 1462
diff changeset
    54
#define TAGMASK                 ((1 << LENGTH(tags)) - 1)
1401
8cee6e329111 we need a tagset per monitor, removed tagset declaration from config.h
Anselm R Garbe <anselm@garbe.us>
parents: 1400
diff changeset
    55
#define TEXTW(X)                (textnw(X, strlen(X)) + dc.font.height)
1059
98d06be63ce5 moved LENGTH to dwm.c, moved prevtags to dwm.c
arg@suckless.org
parents: 1058
diff changeset
    56
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    57
/* enums */
1209
c2dc0bd92158 recent changes, introduced togglebar, changed some defines into variable declarations where possible
Anselm R Garbe <garbeam@gmail.com>
parents: 1207
diff changeset
    58
enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */
c2dc0bd92158 recent changes, introduced togglebar, changed some defines into variable declarations where possible
Anselm R Garbe <garbeam@gmail.com>
parents: 1207
diff changeset
    59
enum { ColBorder, ColFG, ColBG, ColLast };              /* color */
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
    60
enum { NetSupported, NetWMName, NetWMState,
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
    61
       NetWMFullscreen, NetLast };                      /* EWMH atoms */
1345
169467e68992 WM_NAME is builtin atom
Premysl Hruby <dfenze@gmail.com>
parents: 1344
diff changeset
    62
enum { WMProtocols, WMDelete, WMState, WMLast };        /* default atoms */
1295
9f20458e3bbc applied Gottox' ClkTagBar patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1294
diff changeset
    63
enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
1281
3e478379e74d minor fixes towards 5.0
Anselm R Garbe <garbeam@gmail.com>
parents: 1280
diff changeset
    64
       ClkClientWin, ClkRootWin, ClkLast };             /* clicks */
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    65
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
    66
typedef union {
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
    67
	int i;
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
    68
	unsigned int ui;
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
    69
	float f;
1452
769fb14ae867 introducing const where it might make some sense
Anselm R Garbe <anselm@garbe.us>
parents: 1451
diff changeset
    70
	const void *v;
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
    71
} Arg;
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
    72
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
    73
typedef struct {
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
    74
	unsigned int click;
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
    75
	unsigned int mask;
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
    76
	unsigned int button;
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
    77
	void (*func)(const Arg *arg);
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
    78
	const Arg arg;
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
    79
} Button;
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
    80
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
    81
typedef struct Monitor Monitor;
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    82
typedef struct Client Client;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    83
struct Client {
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    84
	char name[256];
1281
3e478379e74d minor fixes towards 5.0
Anselm R Garbe <garbeam@gmail.com>
parents: 1280
diff changeset
    85
	float mina, maxa;
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    86
	int x, y, w, h;
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
    87
	int oldx, oldy, oldw, oldh;
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    88
	int basew, baseh, incw, inch, maxw, maxh, minw, minh;
1229
818892d66dc4 Key.mod is uint, Client.[old]bw is int
Anselm R Garbe <garbeam@gmail.com>
parents: 1228
diff changeset
    89
	int bw, oldbw;
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
    90
	unsigned int tags;
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
    91
	Bool isfixed, isfloating, isurgent, oldstate;
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    92
	Client *next;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    93
	Client *snext;
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
    94
	Monitor *mon;
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    95
	Window win;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    96
};
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    97
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    98
typedef struct {
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
    99
	int x, y, w, h;
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   100
	unsigned long norm[ColLast];
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   101
	unsigned long sel[ColLast];
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   102
	Drawable drawable;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   103
	GC gc;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   104
	struct {
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   105
		int ascent;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   106
		int descent;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   107
		int height;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   108
		XFontSet set;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   109
		XFontStruct *xfont;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   110
	} font;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   111
} DC; /* draw context */
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   112
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   113
typedef struct {
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   114
	unsigned int mod;
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   115
	KeySym keysym;
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   116
	void (*func)(const Arg *);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   117
	const Arg arg;
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   118
} Key;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   119
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   120
typedef struct {
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   121
	const char *symbol;
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   122
	void (*arrange)(Monitor *);
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   123
} Layout;
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   124
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   125
struct Monitor {
1496
de4a2998e1f5 use buffer instead of pointer for mon->ltsymbol
Anselm R Garbe <garbeam@gmail.com>
parents: 1495
diff changeset
   126
	char ltsymbol[16];
1400
a5312d498a58 some minor fixes regarding the new xinerama support
Anselm R Garbe <anselm@garbe.us>
parents: 1399
diff changeset
   127
	float mfact;
1458
e30739eebeed extended rule to apply monitors if set up accordingly
Anselm R Garbe <anselm@garbe.us>
parents: 1457
diff changeset
   128
	int num;
1454
b55c7bd92fda removed monsyms, useless
Anselm R Garbe <garbeam@gmail.com>
parents: 1453
diff changeset
   129
	int by;               /* bar geometry */
1434
b0ac204a2c03 fixed usage of sx, sy, sw, sh
Anselm R Garbe <anselm@garbe.us>
parents: 1433
diff changeset
   130
	int mx, my, mw, mh;   /* screen size */
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   131
	int wx, wy, ww, wh;   /* window area  */
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   132
	unsigned int seltags;
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   133
	unsigned int sellt;
1401
8cee6e329111 we need a tagset per monitor, removed tagset declaration from config.h
Anselm R Garbe <anselm@garbe.us>
parents: 1400
diff changeset
   134
	unsigned int tagset[2];
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   135
	Bool showbar;
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   136
	Bool topbar;
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   137
	Client *clients;
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   138
	Client *sel;
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   139
	Client *stack;
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   140
	Monitor *next;
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   141
	Window barwin;
1452
769fb14ae867 introducing const where it might make some sense
Anselm R Garbe <anselm@garbe.us>
parents: 1451
diff changeset
   142
	const Layout *lt[2];
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   143
};
1397
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
   144
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
   145
typedef struct {
1147
def76530f636 some changes towards 4.9
Anselm R Garbe <garbeam@gmail.com>
parents: 1145
diff changeset
   146
	const char *class;
def76530f636 some changes towards 4.9
Anselm R Garbe <garbeam@gmail.com>
parents: 1145
diff changeset
   147
	const char *instance;
def76530f636 some changes towards 4.9
Anselm R Garbe <garbeam@gmail.com>
parents: 1145
diff changeset
   148
	const char *title;
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   149
	unsigned int tags;
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   150
	Bool isfloating;
1458
e30739eebeed extended rule to apply monitors if set up accordingly
Anselm R Garbe <anselm@garbe.us>
parents: 1457
diff changeset
   151
	int monitor;
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   152
} Rule;
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   153
1037
6f07d607d607 fixed two comments
arg@suckless.org
parents: 1036
diff changeset
   154
/* function declarations */
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   155
static void applyrules(Client *c);
1443
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   156
static Bool applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact);
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   157
static void arrange(Monitor *m);
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   158
static void arrangemon(Monitor *m);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   159
static void attach(Client *c);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   160
static void attachstack(Client *c);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   161
static void buttonpress(XEvent *e);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   162
static void checkotherwm(void);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   163
static void cleanup(void);
1497
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
   164
static void cleanupmon(Monitor *mon);
1366
335301ed102f integrated yiyus clearurgent refactoring
Anselm R Garbe <garbeam@gmail.com>
parents: 1365
diff changeset
   165
static void clearurgent(Client *c);
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   166
static void clientmessage(XEvent *e);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   167
static void configure(Client *c);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   168
static void configurenotify(XEvent *e);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   169
static void configurerequest(XEvent *e);
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   170
static Monitor *createmon(void);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   171
static void destroynotify(XEvent *e);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   172
static void detach(Client *c);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   173
static void detachstack(Client *c);
1308
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   174
static void die(const char *errstr, ...);
1445
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   175
static Monitor *dirtomon(int dir);
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   176
static void drawbar(Monitor *m);
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   177
static void drawbars(void);
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   178
static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   179
static void drawtext(const char *text, unsigned long col[ColLast], Bool invert);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   180
static void enternotify(XEvent *e);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   181
static void expose(XEvent *e);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   182
static void focus(Client *c);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   183
static void focusin(XEvent *e);
1437
bb00510a176a several bugfixes
Anselm R Garbe <anselm@garbe.us>
parents: 1436
diff changeset
   184
static void focusmon(const Arg *arg);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   185
static void focusstack(const Arg *arg);
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   186
static unsigned long getcolor(const char *colstr);
1450
b2d18a052137 some minor changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1449
diff changeset
   187
static Bool getrootptr(int *x, int *y);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   188
static long getstate(Window w);
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   189
static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   190
static void grabbuttons(Client *c, Bool focused);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   191
static void grabkeys(void);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   192
static void initfont(const char *fontstr);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   193
static Bool isprotodel(Client *c);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   194
static void keypress(XEvent *e);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   195
static void killclient(const Arg *arg);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   196
static void manage(Window w, XWindowAttributes *wa);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   197
static void mappingnotify(XEvent *e);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   198
static void maprequest(XEvent *e);
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   199
static void monocle(Monitor *m);
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
   200
static void movemouse(const Arg *arg);
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
   201
static Client *nexttiled(Client *c);
1450
b2d18a052137 some minor changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1449
diff changeset
   202
static Monitor *ptrtomon(int x, int y);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   203
static void propertynotify(XEvent *e);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   204
static void quit(const Arg *arg);
1443
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   205
static void resize(Client *c, int x, int y, int w, int h, Bool interact);
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   206
static void resizeclient(Client *c, int x, int y, int w, int h);
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
   207
static void resizemouse(const Arg *arg);
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   208
static void restack(Monitor *m);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   209
static void run(void);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   210
static void scan(void);
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   211
static void sendmon(Client *c, Monitor *m);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   212
static void setclientstate(Client *c, long state);
1289
064cfe1e8f84 untested monocle
Anselm R Garbe <garbeam@gmail.com>
parents: 1288
diff changeset
   213
static void setlayout(const Arg *arg);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   214
static void setmfact(const Arg *arg);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   215
static void setup(void);
1393
deaa276abac1 applied Marc Andre Tanners showhide patch, the removal of ntiled
Anselm R Garbe <garbeam@gmail.com>
parents: 1392
diff changeset
   216
static void showhide(Client *c);
1478
cf5bb4e72804 added merged patch of anydot and Neale
Anselm R Garbe <garbeam@gmail.com>
parents: 1477
diff changeset
   217
static void sigchld(int unused);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   218
static void spawn(const Arg *arg);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   219
static void tag(const Arg *arg);
1437
bb00510a176a several bugfixes
Anselm R Garbe <anselm@garbe.us>
parents: 1436
diff changeset
   220
static void tagmon(const Arg *arg);
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   221
static int textnw(const char *text, unsigned int len);
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   222
static void tile(Monitor *);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   223
static void togglebar(const Arg *arg);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   224
static void togglefloating(const Arg *arg);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   225
static void toggletag(const Arg *arg);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   226
static void toggleview(const Arg *arg);
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   227
static void unfocus(Client *c, Bool setfocus);
1487
430ebd3c0050 renaming isdestroyed into destroyed
Anselm R Garbe <garbeam@gmail.com>
parents: 1486
diff changeset
   228
static void unmanage(Client *c, Bool destroyed);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   229
static void unmapnotify(XEvent *e);
1492
62a601261c8b new experimental updategeom() additions that should avoid several problems with Xinerama, this is EXPERIMENTAL and might break something, the algorithms in use are quite complex and cumbersome, patches and comments welcome
Anselm R Garbe <anselm@garbe.us>
parents: 1491
diff changeset
   230
static Bool updategeom(void);
1404
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
   231
static void updatebarpos(Monitor *m);
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   232
static void updatebars(void);
1344
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   233
static void updatenumlockmask(void);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   234
static void updatesizehints(Client *c);
1370
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
   235
static void updatestatus(void);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   236
static void updatetitle(Client *c);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   237
static void updatewmhints(Client *c);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   238
static void view(const Arg *arg);
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
   239
static Client *wintoclient(Window w);
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
   240
static Monitor *wintomon(Window w);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   241
static int xerror(Display *dpy, XErrorEvent *ee);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   242
static int xerrordummy(Display *dpy, XErrorEvent *ee);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   243
static int xerrorstart(Display *dpy, XErrorEvent *ee);
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   244
static void zoom(const Arg *arg);
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   245
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   246
/* variables */
1460
606761ddf6d6 mark broken clients as broken
anselm@x200s.config
parents: 1459
diff changeset
   247
static const char broken[] = "broken";
1491
4754e7889841 implemented dynamic layout symbol stuff
Anselm R Garbe <garbeam@gmail.com>
parents: 1489
diff changeset
   248
static char stext[256];
1323
c1d2b106440d added some comments regarding FAQ about s{x,y,w,h}, w{x,y,w,h}, b{y,h,lw}
Anselm R Garbe <garbeam@gmail.com>
parents: 1322
diff changeset
   249
static int screen;
1458
e30739eebeed extended rule to apply monitors if set up accordingly
Anselm R Garbe <anselm@garbe.us>
parents: 1457
diff changeset
   250
static int sw, sh;           /* X display screen geometry width, height */
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   251
static int bh, blw = 0;      /* bar geometry */
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   252
static int (*xerrorxlib)(Display *, XErrorEvent *);
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   253
static unsigned int numlockmask = 0;
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   254
static void (*handler[LASTEvent]) (XEvent *) = {
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   255
	[ButtonPress] = buttonpress,
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   256
	[ClientMessage] = clientmessage,
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   257
	[ConfigureRequest] = configurerequest,
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   258
	[ConfigureNotify] = configurenotify,
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   259
	[DestroyNotify] = destroynotify,
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   260
	[EnterNotify] = enternotify,
1067
d6d3085307d8 fixed focus steeling bug done by clients like opera
Anselm R. Garbe <garbeam@gmail.com>
parents: 1066
diff changeset
   261
	[Expose] = expose,
d6d3085307d8 fixed focus steeling bug done by clients like opera
Anselm R. Garbe <garbeam@gmail.com>
parents: 1066
diff changeset
   262
	[FocusIn] = focusin,
d6d3085307d8 fixed focus steeling bug done by clients like opera
Anselm R. Garbe <garbeam@gmail.com>
parents: 1066
diff changeset
   263
	[KeyPress] = keypress,
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   264
	[MappingNotify] = mappingnotify,
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   265
	[MapRequest] = maprequest,
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   266
	[PropertyNotify] = propertynotify,
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   267
	[UnmapNotify] = unmapnotify
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   268
};
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   269
static Atom wmatom[WMLast], netatom[NetLast];
1317
40cd44593977 made readin a config.h variable
Anselm R Garbe <garbeam@gmail.com>
parents: 1315
diff changeset
   270
static Bool otherwm;
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   271
static Bool running = True;
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   272
static Cursor cursor[CurLast];
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   273
static Display *dpy;
1348
18098673e417 checking result of XGetClassHint, removed some obsolete lines in initfont()
Anselm R Garbe <garbeam@gmail.com>
parents: 1347
diff changeset
   274
static DC dc;
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   275
static Monitor *mons = NULL, *selmon = NULL;
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   276
static Window root;
1447
4fff5050c835 some cleanups
Anselm R Garbe <anselm@garbe.us>
parents: 1446
diff changeset
   277
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   278
/* configuration, allows nested code to access above variables */
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   279
#include "config.h"
1224
47496de04028 applied Gottox bitmask + void *arg patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1223
diff changeset
   280
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   281
/* compile-time check if all tags fit into an unsigned int bit array. */
1462
7997ebe5484f some stylistic changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1460
diff changeset
   282
struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
1036
e6188cb17fa1 removed dwm.h, just include C-files in config.h if you extend dwm, that's simplier and most flexible than all other possibilities
arg@suckless.org
parents: 1033
diff changeset
   283
1037
6f07d607d607 fixed two comments
arg@suckless.org
parents: 1036
diff changeset
   284
/* function implementations */
1106
084b17f96d9b proceeded, though we still miss a real Tag struct
anselm@anselm1
parents: 1104
diff changeset
   285
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   286
applyrules(Client *c) {
1460
606761ddf6d6 mark broken clients as broken
anselm@x200s.config
parents: 1459
diff changeset
   287
	const char *class, *instance;
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   288
	unsigned int i;
1452
769fb14ae867 introducing const where it might make some sense
Anselm R Garbe <anselm@garbe.us>
parents: 1451
diff changeset
   289
	const Rule *r;
1458
e30739eebeed extended rule to apply monitors if set up accordingly
Anselm R Garbe <anselm@garbe.us>
parents: 1457
diff changeset
   290
	Monitor *m;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   291
	XClassHint ch = { 0 };
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   292
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   293
	/* rule matching */
1392
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   294
	c->isfloating = c->tags = 0;
1349
Anselm R Garbe <garbeam@gmail.com>
parents: 1348
diff changeset
   295
	if(XGetClassHint(dpy, c->win, &ch)) {
1460
606761ddf6d6 mark broken clients as broken
anselm@x200s.config
parents: 1459
diff changeset
   296
		class = ch.res_class ? ch.res_class : broken;
606761ddf6d6 mark broken clients as broken
anselm@x200s.config
parents: 1459
diff changeset
   297
		instance = ch.res_name ? ch.res_name : broken;
1349
Anselm R Garbe <garbeam@gmail.com>
parents: 1348
diff changeset
   298
		for(i = 0; i < LENGTH(rules); i++) {
Anselm R Garbe <garbeam@gmail.com>
parents: 1348
diff changeset
   299
			r = &rules[i];
Anselm R Garbe <garbeam@gmail.com>
parents: 1348
diff changeset
   300
			if((!r->title || strstr(c->name, r->title))
1460
606761ddf6d6 mark broken clients as broken
anselm@x200s.config
parents: 1459
diff changeset
   301
			&& (!r->class || strstr(class, r->class))
606761ddf6d6 mark broken clients as broken
anselm@x200s.config
parents: 1459
diff changeset
   302
			&& (!r->instance || strstr(instance, r->instance)))
1447
4fff5050c835 some cleanups
Anselm R Garbe <anselm@garbe.us>
parents: 1446
diff changeset
   303
			{
1349
Anselm R Garbe <garbeam@gmail.com>
parents: 1348
diff changeset
   304
				c->isfloating = r->isfloating;
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   305
				c->tags |= r->tags;
1458
e30739eebeed extended rule to apply monitors if set up accordingly
Anselm R Garbe <anselm@garbe.us>
parents: 1457
diff changeset
   306
				for(m = mons; m && m->num != r->monitor; m = m->next);
e30739eebeed extended rule to apply monitors if set up accordingly
Anselm R Garbe <anselm@garbe.us>
parents: 1457
diff changeset
   307
				if(m)
e30739eebeed extended rule to apply monitors if set up accordingly
Anselm R Garbe <anselm@garbe.us>
parents: 1457
diff changeset
   308
					c->mon = m;
1349
Anselm R Garbe <garbeam@gmail.com>
parents: 1348
diff changeset
   309
			}
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   310
		}
1349
Anselm R Garbe <garbeam@gmail.com>
parents: 1348
diff changeset
   311
		if(ch.res_class)
Anselm R Garbe <garbeam@gmail.com>
parents: 1348
diff changeset
   312
			XFree(ch.res_class);
Anselm R Garbe <garbeam@gmail.com>
parents: 1348
diff changeset
   313
		if(ch.res_name)
Anselm R Garbe <garbeam@gmail.com>
parents: 1348
diff changeset
   314
			XFree(ch.res_name);
1104
167446962e09 simplified dwm
anselm@anselm1
parents: 1103
diff changeset
   315
	}
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   316
	c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags];
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   317
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   318
1392
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   319
Bool
1443
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   320
applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact) {
1390
c0534213fc52 applied Gottox' resizehints patch, thanks Gottox!
Anselm R Garbe <garbeam@gmail.com>
parents: 1389
diff changeset
   321
	Bool baseismin;
1434
b0ac204a2c03 fixed usage of sx, sy, sw, sh
Anselm R Garbe <anselm@garbe.us>
parents: 1433
diff changeset
   322
	Monitor *m = c->mon;
1390
c0534213fc52 applied Gottox' resizehints patch, thanks Gottox!
Anselm R Garbe <garbeam@gmail.com>
parents: 1389
diff changeset
   323
c0534213fc52 applied Gottox' resizehints patch, thanks Gottox!
Anselm R Garbe <garbeam@gmail.com>
parents: 1389
diff changeset
   324
	/* set minimum possible */
c0534213fc52 applied Gottox' resizehints patch, thanks Gottox!
Anselm R Garbe <garbeam@gmail.com>
parents: 1389
diff changeset
   325
	*w = MAX(1, *w);
c0534213fc52 applied Gottox' resizehints patch, thanks Gottox!
Anselm R Garbe <garbeam@gmail.com>
parents: 1389
diff changeset
   326
	*h = MAX(1, *h);
1443
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   327
	if(interact) {
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   328
		if(*x > sw)
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   329
			*x = sw - WIDTH(c);
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   330
		if(*y > sh)
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   331
			*y = sh - HEIGHT(c);
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   332
		if(*x + *w + 2 * c->bw < 0)
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   333
			*x = 0;
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   334
		if(*y + *h + 2 * c->bw < 0)
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   335
			*y = 0;
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   336
	}
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   337
	else {
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   338
		if(*x > m->mx + m->mw)
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   339
			*x = m->mx + m->mw - WIDTH(c);
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   340
		if(*y > m->my + m->mh)
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   341
			*y = m->my + m->mh - HEIGHT(c);
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   342
		if(*x + *w + 2 * c->bw < m->mx)
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   343
			*x = m->mx;
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   344
		if(*y + *h + 2 * c->bw < m->my)
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   345
			*y = m->my;
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
   346
	}
1392
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   347
	if(*h < bh)
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   348
		*h = bh;
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   349
	if(*w < bh)
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   350
		*w = bh;
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   351
	if(resizehints || c->isfloating) {
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   352
		/* see last two sentences in ICCCM 4.1.2.3 */
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   353
		baseismin = c->basew == c->minw && c->baseh == c->minh;
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   354
		if(!baseismin) { /* temporarily remove base dimensions */
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   355
			*w -= c->basew;
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   356
			*h -= c->baseh;
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   357
		}
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   358
		/* adjust for aspect limits */
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   359
		if(c->mina > 0 && c->maxa > 0) {
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   360
			if(c->maxa < (float)*w / *h)
1468
654a2e8064ae removed misleading comment
Anselm R Garbe <garbeam@gmail.com>
parents: 1466
diff changeset
   361
				*w = *h * c->maxa + 0.5;
1392
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   362
			else if(c->mina < (float)*h / *w)
1468
654a2e8064ae removed misleading comment
Anselm R Garbe <garbeam@gmail.com>
parents: 1466
diff changeset
   363
				*h = *w * c->mina + 0.5;
1392
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   364
		}
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   365
		if(baseismin) { /* increment calculation requires this */
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   366
			*w -= c->basew;
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   367
			*h -= c->baseh;
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   368
		}
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   369
		/* adjust for increment value */
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   370
		if(c->incw)
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   371
			*w -= *w % c->incw;
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   372
		if(c->inch)
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   373
			*h -= *h % c->inch;
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   374
		/* restore base dimensions */
1526
64eb02a74f2b applied Hiltjo's tiny cleanup patch, thanks!
Anselm R Garbe <anselm@garbe.us>
parents: 1525
diff changeset
   375
		*w = MAX(*w + c->basew, c->minw);
64eb02a74f2b applied Hiltjo's tiny cleanup patch, thanks!
Anselm R Garbe <anselm@garbe.us>
parents: 1525
diff changeset
   376
		*h = MAX(*h + c->baseh, c->minh);
1392
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   377
		if(c->maxw)
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   378
			*w = MIN(*w, c->maxw);
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   379
		if(c->maxh)
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   380
			*h = MIN(*h, c->maxh);
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   381
	}
ee12ffbf93df applied Gottox' patches, and also removed usegrab
Anselm R Garbe <garbeam@gmail.com>
parents: 1391
diff changeset
   382
	return *x != c->x || *y != c->y || *w != c->w || *h != c->h;
1390
c0534213fc52 applied Gottox' resizehints patch, thanks Gottox!
Anselm R Garbe <garbeam@gmail.com>
parents: 1389
diff changeset
   383
}
c0534213fc52 applied Gottox' resizehints patch, thanks Gottox!
Anselm R Garbe <garbeam@gmail.com>
parents: 1389
diff changeset
   384
c0534213fc52 applied Gottox' resizehints patch, thanks Gottox!
Anselm R Garbe <garbeam@gmail.com>
parents: 1389
diff changeset
   385
void
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   386
arrange(Monitor *m) {
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   387
	if(m)
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   388
		showhide(m->stack);
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   389
	else for(m = mons; m; m = m->next)
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   390
		showhide(m->stack);
1112
27d2e0f4ff82 fixed some issues nsz reported in IRC log
anselm@anselm1
parents: 1110
diff changeset
   391
	focus(NULL);
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   392
	if(m)
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   393
		arrangemon(m);
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   394
	else for(m = mons; m; m = m->next)
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   395
		arrangemon(m);
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   396
}
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   397
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   398
void
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   399
arrangemon(Monitor *m) {
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   400
	strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   401
	if(m->lt[m->sellt]->arrange)
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   402
		m->lt[m->sellt]->arrange(m);
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   403
	restack(m);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   404
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   405
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   406
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   407
attach(Client *c) {
1409
ed5530a91efe fixed tagmon, re-using detach/detachstack and attach/attachstack
Anselm R Garbe <anselm@garbe.us>
parents: 1408
diff changeset
   408
	c->next = c->mon->clients;
ed5530a91efe fixed tagmon, re-using detach/detachstack and attach/attachstack
Anselm R Garbe <anselm@garbe.us>
parents: 1408
diff changeset
   409
	c->mon->clients = c;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   410
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   411
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   412
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   413
attachstack(Client *c) {
1409
ed5530a91efe fixed tagmon, re-using detach/detachstack and attach/attachstack
Anselm R Garbe <anselm@garbe.us>
parents: 1408
diff changeset
   414
	c->snext = c->mon->stack;
ed5530a91efe fixed tagmon, re-using detach/detachstack and attach/attachstack
Anselm R Garbe <anselm@garbe.us>
parents: 1408
diff changeset
   415
	c->mon->stack = c;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   416
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   417
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   418
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   419
buttonpress(XEvent *e) {
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   420
	unsigned int i, x, click;
1295
9f20458e3bbc applied Gottox' ClkTagBar patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1294
diff changeset
   421
	Arg arg = {0};
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   422
	Client *c;
1417
8d447b21ca19 several other focus fixes, introduced unfocus()
Anselm R Garbe <anselm@garbe.us>
parents: 1416
diff changeset
   423
	Monitor *m;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   424
	XButtonPressedEvent *ev = &e->xbutton;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   425
1281
3e478379e74d minor fixes towards 5.0
Anselm R Garbe <garbeam@gmail.com>
parents: 1280
diff changeset
   426
	click = ClkRootWin;
1417
8d447b21ca19 several other focus fixes, introduced unfocus()
Anselm R Garbe <anselm@garbe.us>
parents: 1416
diff changeset
   427
	/* focus monitor if necessary */
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
   428
	if((m = wintomon(ev->window)) && m != selmon) {
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   429
		unfocus(selmon->sel, True);
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   430
		selmon = m;
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   431
		focus(NULL);
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   432
	}
1454
b55c7bd92fda removed monsyms, useless
Anselm R Garbe <garbeam@gmail.com>
parents: 1453
diff changeset
   433
	if(ev->window == selmon->barwin) {
b55c7bd92fda removed monsyms, useless
Anselm R Garbe <garbeam@gmail.com>
parents: 1453
diff changeset
   434
		i = x = 0;
1462
7997ebe5484f some stylistic changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1460
diff changeset
   435
		do {
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   436
			x += TEXTW(tags[i]);
1462
7997ebe5484f some stylistic changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1460
diff changeset
   437
		} while(ev->x >= x && ++i < LENGTH(tags));
1295
9f20458e3bbc applied Gottox' ClkTagBar patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1294
diff changeset
   438
		if(i < LENGTH(tags)) {
9f20458e3bbc applied Gottox' ClkTagBar patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1294
diff changeset
   439
			click = ClkTagBar;
9f20458e3bbc applied Gottox' ClkTagBar patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1294
diff changeset
   440
			arg.ui = 1 << i;
9f20458e3bbc applied Gottox' ClkTagBar patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1294
diff changeset
   441
		}
1271
c5ea09e8d2fc some bugfixes of the patch application yesterday
Anselm R Garbe <garbeam@gmail.com>
parents: 1270
diff changeset
   442
		else if(ev->x < x + blw)
c5ea09e8d2fc some bugfixes of the patch application yesterday
Anselm R Garbe <garbeam@gmail.com>
parents: 1270
diff changeset
   443
			click = ClkLtSymbol;
1397
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
   444
		else if(ev->x > selmon->wx + selmon->ww - TEXTW(stext))
1271
c5ea09e8d2fc some bugfixes of the patch application yesterday
Anselm R Garbe <garbeam@gmail.com>
parents: 1270
diff changeset
   445
			click = ClkStatusText;
c5ea09e8d2fc some bugfixes of the patch application yesterday
Anselm R Garbe <garbeam@gmail.com>
parents: 1270
diff changeset
   446
		else
c5ea09e8d2fc some bugfixes of the patch application yesterday
Anselm R Garbe <garbeam@gmail.com>
parents: 1270
diff changeset
   447
			click = ClkWinTitle;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   448
	}
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
   449
	else if((c = wintoclient(ev->window))) {
1281
3e478379e74d minor fixes towards 5.0
Anselm R Garbe <garbeam@gmail.com>
parents: 1280
diff changeset
   450
		focus(c);
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
   451
		click = ClkClientWin;
1281
3e478379e74d minor fixes towards 5.0
Anselm R Garbe <garbeam@gmail.com>
parents: 1280
diff changeset
   452
	}
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
   453
	for(i = 0; i < LENGTH(buttons); i++)
1271
c5ea09e8d2fc some bugfixes of the patch application yesterday
Anselm R Garbe <garbeam@gmail.com>
parents: 1270
diff changeset
   454
		if(click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
1464
555070221577 final style fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1463
diff changeset
   455
		&& CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
1351
3f66d2d2cd6e applied yiyus tagbar patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1349
diff changeset
   456
			buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   457
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   458
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   459
void
997
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   460
checkotherwm(void) {
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   461
	otherwm = False;
1354
dced80b409d8 applied Martin Hurton's checkotherwm simplification
Anselm R Garbe <garbeam@gmail.com>
parents: 1353
diff changeset
   462
	xerrorxlib = XSetErrorHandler(xerrorstart);
997
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   463
	/* this causes an error if some other window manager is running */
1077
51b8e0c21bcb proceeded with multihead/Xinerama support
anselm@anselm1
parents: 1076
diff changeset
   464
	XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask);
997
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   465
	XSync(dpy, False);
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   466
	if(otherwm)
1308
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   467
		die("dwm: another window manager is already running\n");
1354
dced80b409d8 applied Martin Hurton's checkotherwm simplification
Anselm R Garbe <garbeam@gmail.com>
parents: 1353
diff changeset
   468
	XSetErrorHandler(xerror);
997
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   469
	XSync(dpy, False);
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   470
}
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   471
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   472
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   473
cleanup(void) {
1319
fb29ceb5932a fixes using arg->i instead of arg->ui
Premysl Hruby <dfenze@gmail.com>
parents: 1318
diff changeset
   474
	Arg a = {.ui = ~0};
1263
87cd6583546e using foo layout during cleanup (suggested by Gottox), add Arg->v handling for togglelayout() suggested by anydot
Anselm R Garbe <garbeam@gmail.com>
parents: 1262
diff changeset
   475
	Layout foo = { "", NULL };
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   476
	Monitor *m;
1262
decf862df839 lt will point to a foo-layout during cleanup now (Gottox' suggestion), and togglelayout respects Arg->v
Anselm R Garbe <garbeam@gmail.com>
parents: 1261
diff changeset
   477
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   478
	view(&a);
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
   479
	selmon->lt[selmon->sellt] = &foo;
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   480
	for(m = mons; m; m = m->next)
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   481
		while(m->stack)
1485
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
   482
			unmanage(m->stack, False);
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   483
	if(dc.font.set)
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   484
		XFreeFontSet(dpy, dc.font.set);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   485
	else
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   486
		XFreeFont(dpy, dc.font.xfont);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   487
	XUngrabKey(dpy, AnyKey, AnyModifier, root);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   488
	XFreePixmap(dpy, dc.drawable);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   489
	XFreeGC(dpy, dc.gc);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   490
	XFreeCursor(dpy, cursor[CurNormal]);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   491
	XFreeCursor(dpy, cursor[CurResize]);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   492
	XFreeCursor(dpy, cursor[CurMove]);
1497
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
   493
	while(mons)
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
   494
		cleanupmon(mons);
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   495
	XSync(dpy, False);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   496
	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   497
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   498
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   499
void
1497
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
   500
cleanupmon(Monitor *mon) {
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   501
	Monitor *m;
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   502
1497
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
   503
	if(mon == mons)
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
   504
		mons = mons->next;
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
   505
	else {
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
   506
		for(m = mons; m && m->next != mon; m = m->next);
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
   507
		m->next = mon->next;
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   508
	}
1497
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
   509
	XUnmapWindow(dpy, mon->barwin);
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
   510
	XDestroyWindow(dpy, mon->barwin);
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
   511
	free(mon);
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   512
}
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   513
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   514
void
1366
335301ed102f integrated yiyus clearurgent refactoring
Anselm R Garbe <garbeam@gmail.com>
parents: 1365
diff changeset
   515
clearurgent(Client *c) {
1309
3affae730034 applied anydot's urgency hint patch, thanks!
anselm@aab
parents: 1308
diff changeset
   516
	XWMHints *wmh;
3affae730034 applied anydot's urgency hint patch, thanks!
anselm@aab
parents: 1308
diff changeset
   517
1366
335301ed102f integrated yiyus clearurgent refactoring
Anselm R Garbe <garbeam@gmail.com>
parents: 1365
diff changeset
   518
	c->isurgent = False;
335301ed102f integrated yiyus clearurgent refactoring
Anselm R Garbe <garbeam@gmail.com>
parents: 1365
diff changeset
   519
	if(!(wmh = XGetWMHints(dpy, c->win)))
335301ed102f integrated yiyus clearurgent refactoring
Anselm R Garbe <garbeam@gmail.com>
parents: 1365
diff changeset
   520
		return;
335301ed102f integrated yiyus clearurgent refactoring
Anselm R Garbe <garbeam@gmail.com>
parents: 1365
diff changeset
   521
	wmh->flags &= ~XUrgencyHint;
335301ed102f integrated yiyus clearurgent refactoring
Anselm R Garbe <garbeam@gmail.com>
parents: 1365
diff changeset
   522
	XSetWMHints(dpy, c->win, wmh);
335301ed102f integrated yiyus clearurgent refactoring
Anselm R Garbe <garbeam@gmail.com>
parents: 1365
diff changeset
   523
	XFree(wmh);
1309
3affae730034 applied anydot's urgency hint patch, thanks!
anselm@aab
parents: 1308
diff changeset
   524
}
3affae730034 applied anydot's urgency hint patch, thanks!
anselm@aab
parents: 1308
diff changeset
   525
3affae730034 applied anydot's urgency hint patch, thanks!
anselm@aab
parents: 1308
diff changeset
   526
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   527
configure(Client *c) {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   528
	XConfigureEvent ce;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   529
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   530
	ce.type = ConfigureNotify;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   531
	ce.display = dpy;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   532
	ce.event = c->win;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   533
	ce.window = c->win;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   534
	ce.x = c->x;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   535
	ce.y = c->y;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   536
	ce.width = c->w;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   537
	ce.height = c->h;
1152
960659820908 renamed c->border into c->bw, fixed monocle to subtract c->bw from each h/w value
Anselm R Garbe <garbeam@gmail.com>
parents: 1151
diff changeset
   538
	ce.border_width = c->bw;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   539
	ce.above = None;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   540
	ce.override_redirect = False;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   541
	XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   542
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   543
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   544
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   545
configurenotify(XEvent *e) {
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   546
	Monitor *m;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   547
	XConfigureEvent *ev = &e->xconfigure;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   548
1484
487ed0f2e51d always updategeom when root is configured
nsz@tpx
parents: 1483
diff changeset
   549
	if(ev->window == root) {
1155
25e7987c7b18 updated configurenotify
Anselm R Garbe <garbeam@gmail.com>
parents: 1154
diff changeset
   550
		sw = ev->width;
25e7987c7b18 updated configurenotify
Anselm R Garbe <garbeam@gmail.com>
parents: 1154
diff changeset
   551
		sh = ev->height;
1492
62a601261c8b new experimental updategeom() additions that should avoid several problems with Xinerama, this is EXPERIMENTAL and might break something, the algorithms in use are quite complex and cumbersome, patches and comments welcome
Anselm R Garbe <anselm@garbe.us>
parents: 1491
diff changeset
   552
		if(updategeom()) {
62a601261c8b new experimental updategeom() additions that should avoid several problems with Xinerama, this is EXPERIMENTAL and might break something, the algorithms in use are quite complex and cumbersome, patches and comments welcome
Anselm R Garbe <anselm@garbe.us>
parents: 1491
diff changeset
   553
			if(dc.drawable != 0)
62a601261c8b new experimental updategeom() additions that should avoid several problems with Xinerama, this is EXPERIMENTAL and might break something, the algorithms in use are quite complex and cumbersome, patches and comments welcome
Anselm R Garbe <anselm@garbe.us>
parents: 1491
diff changeset
   554
				XFreePixmap(dpy, dc.drawable);
62a601261c8b new experimental updategeom() additions that should avoid several problems with Xinerama, this is EXPERIMENTAL and might break something, the algorithms in use are quite complex and cumbersome, patches and comments welcome
Anselm R Garbe <anselm@garbe.us>
parents: 1491
diff changeset
   555
			dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
62a601261c8b new experimental updategeom() additions that should avoid several problems with Xinerama, this is EXPERIMENTAL and might break something, the algorithms in use are quite complex and cumbersome, patches and comments welcome
Anselm R Garbe <anselm@garbe.us>
parents: 1491
diff changeset
   556
			updatebars();
62a601261c8b new experimental updategeom() additions that should avoid several problems with Xinerama, this is EXPERIMENTAL and might break something, the algorithms in use are quite complex and cumbersome, patches and comments welcome
Anselm R Garbe <anselm@garbe.us>
parents: 1491
diff changeset
   557
			for(m = mons; m; m = m->next)
62a601261c8b new experimental updategeom() additions that should avoid several problems with Xinerama, this is EXPERIMENTAL and might break something, the algorithms in use are quite complex and cumbersome, patches and comments welcome
Anselm R Garbe <anselm@garbe.us>
parents: 1491
diff changeset
   558
				XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
   559
			arrange(NULL);
1492
62a601261c8b new experimental updategeom() additions that should avoid several problems with Xinerama, this is EXPERIMENTAL and might break something, the algorithms in use are quite complex and cumbersome, patches and comments welcome
Anselm R Garbe <anselm@garbe.us>
parents: 1491
diff changeset
   560
		}
1155
25e7987c7b18 updated configurenotify
Anselm R Garbe <garbeam@gmail.com>
parents: 1154
diff changeset
   561
	}
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   562
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   563
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   564
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   565
configurerequest(XEvent *e) {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   566
	Client *c;
1428
2245e2b88983 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC
Anselm R Garbe <garbeam@gmail.com>
parents: 1427
diff changeset
   567
	Monitor *m;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   568
	XConfigureRequestEvent *ev = &e->xconfigurerequest;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   569
	XWindowChanges wc;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   570
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
   571
	if((c = wintoclient(ev->window))) {
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   572
		if(ev->value_mask & CWBorderWidth)
1152
960659820908 renamed c->border into c->bw, fixed monocle to subtract c->bw from each h/w value
Anselm R Garbe <garbeam@gmail.com>
parents: 1151
diff changeset
   573
			c->bw = ev->border_width;
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
   574
		else if(c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
1428
2245e2b88983 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC
Anselm R Garbe <garbeam@gmail.com>
parents: 1427
diff changeset
   575
			m = c->mon;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   576
			if(ev->value_mask & CWX)
1428
2245e2b88983 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC
Anselm R Garbe <garbeam@gmail.com>
parents: 1427
diff changeset
   577
				c->x = m->mx + ev->x;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   578
			if(ev->value_mask & CWY)
1428
2245e2b88983 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC
Anselm R Garbe <garbeam@gmail.com>
parents: 1427
diff changeset
   579
				c->y = m->my + ev->y;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   580
			if(ev->value_mask & CWWidth)
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   581
				c->w = ev->width;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   582
			if(ev->value_mask & CWHeight)
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   583
				c->h = ev->height;
1480
a52339f25d95 applied Jukka's cosmetic patch
Anselm R Garbe <anselm@garbe.us>
parents: 1479
diff changeset
   584
			if((c->x + c->w) > m->mx + m->mw && c->isfloating)
1428
2245e2b88983 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC
Anselm R Garbe <garbeam@gmail.com>
parents: 1427
diff changeset
   585
				c->x = m->mx + (m->mw / 2 - c->w / 2); /* center in x direction */
1480
a52339f25d95 applied Jukka's cosmetic patch
Anselm R Garbe <anselm@garbe.us>
parents: 1479
diff changeset
   586
			if((c->y + c->h) > m->my + m->mh && c->isfloating)
1428
2245e2b88983 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC
Anselm R Garbe <garbeam@gmail.com>
parents: 1427
diff changeset
   587
				c->y = m->my + (m->mh / 2 - c->h / 2); /* center in y direction */
1291
6a5c4371eb25 resize should apply if !banned
Anselm R Garbe <garbeam@gmail.com>
parents: 1290
diff changeset
   588
			if((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight)))
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   589
				configure(c);
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
   590
			if(ISVISIBLE(c))
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   591
				XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   592
		}
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   593
		else
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   594
			configure(c);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   595
	}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   596
	else {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   597
		wc.x = ev->x;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   598
		wc.y = ev->y;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   599
		wc.width = ev->width;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   600
		wc.height = ev->height;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   601
		wc.border_width = ev->border_width;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   602
		wc.sibling = ev->above;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   603
		wc.stack_mode = ev->detail;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   604
		XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   605
	}
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   606
	XSync(dpy, False);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   607
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   608
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   609
Monitor *
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   610
createmon(void) {
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   611
	Monitor *m;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   612
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   613
	if(!(m = (Monitor *)calloc(1, sizeof(Monitor))))
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   614
		die("fatal: could not malloc() %u bytes\n", sizeof(Monitor));
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   615
	m->tagset[0] = m->tagset[1] = 1;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   616
	m->mfact = mfact;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   617
	m->showbar = showbar;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   618
	m->topbar = topbar;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   619
	m->lt[0] = &layouts[0];
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   620
	m->lt[1] = &layouts[1 % LENGTH(layouts)];
1496
de4a2998e1f5 use buffer instead of pointer for mon->ltsymbol
Anselm R Garbe <garbeam@gmail.com>
parents: 1495
diff changeset
   621
	strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   622
	return m;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   623
}
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
   624
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   625
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   626
destroynotify(XEvent *e) {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   627
	Client *c;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   628
	XDestroyWindowEvent *ev = &e->xdestroywindow;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   629
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
   630
	if((c = wintoclient(ev->window)))
1485
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
   631
		unmanage(c, True);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   632
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   633
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   634
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   635
detach(Client *c) {
1307
2c72f7c8826f simplified detach()
Anselm R Garbe <garbeam@gmail.com>
parents: 1306
diff changeset
   636
	Client **tc;
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   637
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   638
	for(tc = &c->mon->clients; *tc && *tc != c; tc = &(*tc)->next);
1307
2c72f7c8826f simplified detach()
Anselm R Garbe <garbeam@gmail.com>
parents: 1306
diff changeset
   639
	*tc = c->next;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   640
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   641
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   642
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   643
detachstack(Client *c) {
1431
Anselm R Garbe <anselm@garbe.us>
parents: 1430
diff changeset
   644
	Client **tc, *t;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   645
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   646
	for(tc = &c->mon->stack; *tc && *tc != c; tc = &(*tc)->snext);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   647
	*tc = c->snext;
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
   648
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
   649
	if(c == c->mon->sel) {
1431
Anselm R Garbe <anselm@garbe.us>
parents: 1430
diff changeset
   650
		for(t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext);
Anselm R Garbe <anselm@garbe.us>
parents: 1430
diff changeset
   651
		c->mon->sel = t;
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
   652
	}
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   653
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   654
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   655
void
1308
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   656
die(const char *errstr, ...) {
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   657
	va_list ap;
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   658
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   659
	va_start(ap, errstr);
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   660
	vfprintf(stderr, errstr, ap);
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   661
	va_end(ap);
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   662
	exit(EXIT_FAILURE);
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   663
}
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   664
1445
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   665
Monitor *
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   666
dirtomon(int dir) {
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   667
	Monitor *m = NULL;
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   668
1446
Anselm R Garbe <anselm@garbe.us>
parents: 1445
diff changeset
   669
	if(dir > 0) {
1445
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   670
		if(!(m = selmon->next))
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   671
			m = mons;
1446
Anselm R Garbe <anselm@garbe.us>
parents: 1445
diff changeset
   672
	}
1445
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   673
	else {
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   674
		if(selmon == mons)
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   675
			for(m = mons; m->next; m = m->next);
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   676
		else
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   677
			for(m = mons; m->next != selmon; m = m->next);
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   678
	}
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   679
	return m;
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   680
}
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   681
1308
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   682
void
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   683
drawbar(Monitor *m) {
1318
65c37b4be9cb applied Johannes Hofmann's patch, please test
anselm@anselm1
parents: 1317
diff changeset
   684
	int x;
1491
4754e7889841 implemented dynamic layout symbol stuff
Anselm R Garbe <garbeam@gmail.com>
parents: 1489
diff changeset
   685
	unsigned int i, occ = 0, urg = 0;
1318
65c37b4be9cb applied Johannes Hofmann's patch, please test
anselm@anselm1
parents: 1317
diff changeset
   686
	unsigned long *col;
65c37b4be9cb applied Johannes Hofmann's patch, please test
anselm@anselm1
parents: 1317
diff changeset
   687
	Client *c;
65c37b4be9cb applied Johannes Hofmann's patch, please test
anselm@anselm1
parents: 1317
diff changeset
   688
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   689
	for(c = m->clients; c; c = c->next) {
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   690
		occ |= c->tags;
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   691
		if(c->isurgent)
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   692
			urg |= c->tags;
1318
65c37b4be9cb applied Johannes Hofmann's patch, please test
anselm@anselm1
parents: 1317
diff changeset
   693
	}
1093
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
   694
	dc.x = 0;
1102
239f5ee65766 pushing my changes of tonight upstream (hg tip is NOW very UNSTABLE -- but those changes are necessary to get a decent multihead support) -- I renamed Monitor into View, to reflect in a better way the dwm terminology of the past
anselm@anselm1
parents: 1101
diff changeset
   695
	for(i = 0; i < LENGTH(tags); i++) {
1236
523ba822927f removed TEXTW
Anselm R Garbe <garbeam@gmail.com>
parents: 1235
diff changeset
   696
		dc.w = TEXTW(tags[i]);
1401
8cee6e329111 we need a tagset per monitor, removed tagset declaration from config.h
Anselm R Garbe <anselm@garbe.us>
parents: 1400
diff changeset
   697
		col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm;
1318
65c37b4be9cb applied Johannes Hofmann's patch, please test
anselm@anselm1
parents: 1317
diff changeset
   698
		drawtext(tags[i], col, urg & 1 << i);
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   699
		drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   700
		           occ & 1 << i, urg & 1 << i, col);
1093
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
   701
		dc.x += dc.w;
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
   702
	}
1491
4754e7889841 implemented dynamic layout symbol stuff
Anselm R Garbe <garbeam@gmail.com>
parents: 1489
diff changeset
   703
	dc.w = blw = TEXTW(m->ltsymbol);
4754e7889841 implemented dynamic layout symbol stuff
Anselm R Garbe <garbeam@gmail.com>
parents: 1489
diff changeset
   704
	drawtext(m->ltsymbol, dc.norm, False);
4754e7889841 implemented dynamic layout symbol stuff
Anselm R Garbe <garbeam@gmail.com>
parents: 1489
diff changeset
   705
	dc.x += dc.w;
4754e7889841 implemented dynamic layout symbol stuff
Anselm R Garbe <garbeam@gmail.com>
parents: 1489
diff changeset
   706
	x = dc.x;
1415
b2265afcdd4e fixed title rendering on non-active screen
Anselm R Garbe <garbeam@gmail.com>
parents: 1414
diff changeset
   707
	if(m == selmon) { /* status is only drawn on selected monitor */
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   708
		dc.w = TEXTW(stext);
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   709
		dc.x = m->ww - dc.w;
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   710
		if(dc.x < x) {
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   711
			dc.x = x;
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   712
			dc.w = m->ww - x;
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   713
		}
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   714
		drawtext(stext, dc.norm, False);
1093
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
   715
	}
1444
19dc2b0c61e2 removed some empty lines
Anselm R Garbe <anselm@garbe.us>
parents: 1443
diff changeset
   716
	else
1415
b2265afcdd4e fixed title rendering on non-active screen
Anselm R Garbe <garbeam@gmail.com>
parents: 1414
diff changeset
   717
		dc.x = m->ww;
b2265afcdd4e fixed title rendering on non-active screen
Anselm R Garbe <garbeam@gmail.com>
parents: 1414
diff changeset
   718
	if((dc.w = dc.x - x) > bh) {
1399
0decadd79fd5 several fixes through ISVISIBLE change (takes Monitor into account)
Anselm R Garbe <anselm@garbe.us>
parents: 1398
diff changeset
   719
		dc.x = x;
1415
b2265afcdd4e fixed title rendering on non-active screen
Anselm R Garbe <garbeam@gmail.com>
parents: 1414
diff changeset
   720
		if(m->sel) {
b2265afcdd4e fixed title rendering on non-active screen
Anselm R Garbe <garbeam@gmail.com>
parents: 1414
diff changeset
   721
			col = m == selmon ? dc.sel : dc.norm;
b2265afcdd4e fixed title rendering on non-active screen
Anselm R Garbe <garbeam@gmail.com>
parents: 1414
diff changeset
   722
			drawtext(m->sel->name, col, False);
b2265afcdd4e fixed title rendering on non-active screen
Anselm R Garbe <garbeam@gmail.com>
parents: 1414
diff changeset
   723
			drawsquare(m->sel->isfixed, m->sel->isfloating, False, col);
b2265afcdd4e fixed title rendering on non-active screen
Anselm R Garbe <garbeam@gmail.com>
parents: 1414
diff changeset
   724
		}
b2265afcdd4e fixed title rendering on non-active screen
Anselm R Garbe <garbeam@gmail.com>
parents: 1414
diff changeset
   725
		else
b2265afcdd4e fixed title rendering on non-active screen
Anselm R Garbe <garbeam@gmail.com>
parents: 1414
diff changeset
   726
			drawtext(NULL, dc.norm, False);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   727
	}
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   728
	XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->ww, bh, 0, 0);
1093
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
   729
	XSync(dpy, False);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   730
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   731
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   732
void
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   733
drawbars(void) {
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   734
	Monitor *m;
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   735
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   736
	for(m = mons; m; m = m->next)
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   737
		drawbar(m);
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   738
}
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   739
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   740
void
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   741
drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) {
1072
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
   742
	int x;
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
   743
	XGCValues gcv;
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   744
	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
1072
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
   745
1085
9c4355f988f2 urgency hook handling needs also to invert the square if present
Anselm R Garbe <garbeam@gmail.com>
parents: 1084
diff changeset
   746
	gcv.foreground = col[invert ? ColBG : ColFG];
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   747
	XChangeGC(dpy, dc.gc, GCForeground, &gcv);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   748
	x = (dc.font.ascent + dc.font.descent + 2) / 4;
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   749
	r.x = dc.x + 1;
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   750
	r.y = dc.y + 1;
1072
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
   751
	if(filled) {
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
   752
		r.width = r.height = x + 1;
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   753
		XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
1072
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
   754
	}
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
   755
	else if(empty) {
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
   756
		r.width = r.height = x;
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   757
		XDrawRectangles(dpy, dc.drawable, dc.gc, &r, 1);
1072
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
   758
	}
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
   759
}
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
   760
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
   761
void
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   762
drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
1332
Anselm R Garbe <garbeam@gmail.com>
parents: 1331
diff changeset
   763
	char buf[256];
1254
d04ee4e2336d applied nsz's patches (many thanks!)
arg@suckless.org
parents: 1253
diff changeset
   764
	int i, x, y, h, len, olen;
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   765
	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   766
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   767
	XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   768
	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   769
	if(!text)
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   770
		return;
1182
9940d125b703 applied dfenze drawtext simplifications
Anselm R Garbe <garbeam@gmail.com>
parents: 1179
diff changeset
   771
	olen = strlen(text);
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   772
	h = dc.font.ascent + dc.font.descent;
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   773
	y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   774
	x = dc.x + (h / 2);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   775
	/* shorten text if necessary */
1336
6ed902a28221 fixed error I did when applying Martin Hurton's drawtext patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1335
diff changeset
   776
	for(len = MIN(olen, sizeof buf); len && textnw(text, len) > dc.w - h; len--);
1195
33ba827ee84e applied nsz's style.diff patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1194
diff changeset
   777
	if(!len)
1182
9940d125b703 applied dfenze drawtext simplifications
Anselm R Garbe <garbeam@gmail.com>
parents: 1179
diff changeset
   778
		return;
1328
0fac6d3067d7 applied Martin Hurton's drawtext() patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1327
diff changeset
   779
	memcpy(buf, text, len);
1250
1fa12fca6c0e Gottox' drawtext simplification
Anselm R Garbe <garbeam@gmail.com>
parents: 1249
diff changeset
   780
	if(len < olen)
1259
f0c900871c87 final version -- Gottox verified it using the test driver
arg@suckless.org
parents: 1258
diff changeset
   781
		for(i = len; i && i > len - 3; buf[--i] = '.');
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   782
	XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   783
	if(dc.font.set)
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   784
		XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   785
	else
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   786
		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   787
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   788
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   789
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   790
enternotify(XEvent *e) {
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   791
	Monitor *m;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   792
	XCrossingEvent *ev = &e->xcrossing;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   793
1109
55e2f7e96b71 removed initags -- we autoselect the first tag in each view instead
anselm@anselm1
parents: 1108
diff changeset
   794
	if((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root)
55e2f7e96b71 removed initags -- we autoselect the first tag in each view instead
anselm@anselm1
parents: 1108
diff changeset
   795
		return;
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
   796
	if((m = wintomon(ev->window)) && m != selmon) {
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   797
		unfocus(selmon->sel, True);
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   798
		selmon = m;
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   799
	}
1525
c361034c5a1c does this make a difference?
Anselm R Garbe <anselm@garbe.us>
parents: 1523
diff changeset
   800
	focus((wintoclient(ev->window)));
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   801
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   802
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   803
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   804
expose(XEvent *e) {
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   805
	Monitor *m;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   806
	XExposeEvent *ev = &e->xexpose;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   807
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
   808
	if(ev->count == 0 && (m = wintomon(ev->window)))
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   809
		drawbar(m);
1110
227f2d07c63f made the basics of the tagging concept working -- if people want dynamic tags, that's even possible with this concept, the vtags[] array needs to be modified during runtime for this -- the new code is quite experimental, ugly and needs polishing
anselm@anselm1
parents: 1109
diff changeset
   810
}
227f2d07c63f made the basics of the tagging concept working -- if people want dynamic tags, that's even possible with this concept, the vtags[] array needs to be modified during runtime for this -- the new code is quite experimental, ugly and needs polishing
anselm@anselm1
parents: 1109
diff changeset
   811
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   812
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   813
focus(Client *c) {
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
   814
	if(!c || !ISVISIBLE(c))
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
   815
		for(c = selmon->stack; c && !ISVISIBLE(c); c = c->snext);
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   816
	/* was if(selmon->sel) */
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   817
	if(selmon->sel && selmon->sel != c)
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   818
		unfocus(selmon->sel, False);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   819
	if(c) {
1416
e802c6186f6c some focus fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1415
diff changeset
   820
		if(c->mon != selmon)
e802c6186f6c some focus fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1415
diff changeset
   821
			selmon = c->mon;
1366
335301ed102f integrated yiyus clearurgent refactoring
Anselm R Garbe <garbeam@gmail.com>
parents: 1365
diff changeset
   822
		if(c->isurgent)
335301ed102f integrated yiyus clearurgent refactoring
Anselm R Garbe <garbeam@gmail.com>
parents: 1365
diff changeset
   823
			clearurgent(c);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   824
		detachstack(c);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   825
		attachstack(c);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   826
		grabbuttons(c, True);
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   827
		XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   828
		XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   829
	}
1093
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
   830
	else
1087
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
   831
		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   832
	selmon->sel = c;
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   833
	drawbars();
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   834
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   835
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   836
void
1067
d6d3085307d8 fixed focus steeling bug done by clients like opera
Anselm R. Garbe <garbeam@gmail.com>
parents: 1066
diff changeset
   837
focusin(XEvent *e) { /* there are some broken focus acquiring clients */
d6d3085307d8 fixed focus steeling bug done by clients like opera
Anselm R. Garbe <garbeam@gmail.com>
parents: 1066
diff changeset
   838
	XFocusChangeEvent *ev = &e->xfocus;
d6d3085307d8 fixed focus steeling bug done by clients like opera
Anselm R. Garbe <garbeam@gmail.com>
parents: 1066
diff changeset
   839
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   840
	if(selmon->sel && ev->window != selmon->sel->win)
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   841
		XSetInputFocus(dpy, selmon->sel->win, RevertToPointerRoot, CurrentTime);
1067
d6d3085307d8 fixed focus steeling bug done by clients like opera
Anselm R. Garbe <garbeam@gmail.com>
parents: 1066
diff changeset
   842
}
d6d3085307d8 fixed focus steeling bug done by clients like opera
Anselm R. Garbe <garbeam@gmail.com>
parents: 1066
diff changeset
   843
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   844
void
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   845
focusmon(const Arg *arg) {
1526
64eb02a74f2b applied Hiltjo's tiny cleanup patch, thanks!
Anselm R Garbe <anselm@garbe.us>
parents: 1525
diff changeset
   846
	Monitor *m;
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
   847
1445
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
   848
	if(!mons->next)
1427
f8ea02f86861 some cleanup handling for index based mon search
Anselm R Garbe <anselm@garbe.us>
parents: 1426
diff changeset
   849
		return;
1510
e9c916f6ea15 more debug output, experimental focus optimisation
Anselm R Garbe <anselm@garbe.us>
parents: 1509
diff changeset
   850
	if((m = dirtomon(arg->i)) == selmon)
e9c916f6ea15 more debug output, experimental focus optimisation
Anselm R Garbe <anselm@garbe.us>
parents: 1509
diff changeset
   851
		return;
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   852
	unfocus(selmon->sel, True);
1427
f8ea02f86861 some cleanup handling for index based mon search
Anselm R Garbe <anselm@garbe.us>
parents: 1426
diff changeset
   853
	selmon = m;
f8ea02f86861 some cleanup handling for index based mon search
Anselm R Garbe <anselm@garbe.us>
parents: 1426
diff changeset
   854
	focus(NULL);
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   855
}
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   856
1067
d6d3085307d8 fixed focus steeling bug done by clients like opera
Anselm R. Garbe <garbeam@gmail.com>
parents: 1066
diff changeset
   857
void
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   858
focusstack(const Arg *arg) {
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   859
	Client *c = NULL, *i;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   860
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   861
	if(!selmon->sel)
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   862
		return;
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   863
	if(arg->i > 0) {
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
   864
		for(c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next);
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   865
		if(!c)
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
   866
			for(c = selmon->clients; c && !ISVISIBLE(c); c = c->next);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   867
	}
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   868
	else {
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
   869
		for(i = selmon->clients; i != selmon->sel; i = i->next)
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
   870
			if(ISVISIBLE(i))
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   871
				c = i;
1268
fc7dd1b14093 removed trailing spaces reported by Soleen
Anselm R Garbe <garbeam@gmail.com>
parents: 1267
diff changeset
   872
		if(!c)
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   873
			for(; i; i = i->next)
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
   874
				if(ISVISIBLE(i))
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
   875
					c = i;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   876
	}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   877
	if(c) {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   878
		focus(c);
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
   879
		restack(selmon);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   880
	}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   881
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   882
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   883
unsigned long
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   884
getcolor(const char *colstr) {
997
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   885
	Colormap cmap = DefaultColormap(dpy, screen);
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   886
	XColor color;
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   887
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   888
	if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
1308
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
   889
		die("error, cannot allocate color '%s'\n", colstr);
997
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   890
	return color.pixel;
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   891
}
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
   892
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   893
Bool
1450
b2d18a052137 some minor changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1449
diff changeset
   894
getrootptr(int *x, int *y) {
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   895
	int di;
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   896
	unsigned int dui;
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   897
	Window dummy;
1444
19dc2b0c61e2 removed some empty lines
Anselm R Garbe <anselm@garbe.us>
parents: 1443
diff changeset
   898
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   899
	return XQueryPointer(dpy, root, &dummy, &dummy, x, y, &di, &di, &dui);
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   900
}
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
   901
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   902
long
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   903
getstate(Window w) {
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   904
	int format;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   905
	long result = -1;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   906
	unsigned char *p = NULL;
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   907
	unsigned long n, extra;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   908
	Atom real;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   909
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   910
	if(XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState],
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
   911
	                      &real, &format, &n, &extra, (unsigned char **)&p) != Success)
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   912
		return -1;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   913
	if(n != 0)
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   914
		result = *p;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   915
	XFree(p);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   916
	return result;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   917
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   918
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   919
Bool
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
   920
gettextprop(Window w, Atom atom, char *text, unsigned int size) {
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   921
	char **list = NULL;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   922
	int n;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   923
	XTextProperty name;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   924
1058
5e34476a3a1c we check variable == value, and not the other way - the other way is for beginner programmers.
Anselm R. Garbe <garbeam@gmail.com>
parents: 1057
diff changeset
   925
	if(!text || size == 0)
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   926
		return False;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   927
	text[0] = '\0';
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   928
	XGetTextProperty(dpy, w, &name, atom);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   929
	if(!name.nitems)
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   930
		return False;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   931
	if(name.encoding == XA_STRING)
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   932
		strncpy(text, (char *)name.value, size - 1);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   933
	else {
1464
555070221577 final style fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1463
diff changeset
   934
		if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) {
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   935
			strncpy(text, *list, size - 1);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   936
			XFreeStringList(list);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   937
		}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   938
	}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   939
	text[size - 1] = '\0';
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   940
	XFree(name.value);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   941
	return True;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   942
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   943
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   944
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   945
grabbuttons(Client *c, Bool focused) {
1344
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   946
	updatenumlockmask();
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   947
	{
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   948
		unsigned int i, j;
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   949
		unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   950
		XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   951
		if(focused) {
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   952
			for(i = 0; i < LENGTH(buttons); i++)
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   953
				if(buttons[i].click == ClkClientWin)
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   954
					for(j = 0; j < LENGTH(modifiers); j++)
1395
a2c094196714 next version will be 5.6, shortened some very long lines
Anselm R Garbe <garbeam@gmail.com>
parents: 1393
diff changeset
   955
						XGrabButton(dpy, buttons[i].button,
a2c094196714 next version will be 5.6, shortened some very long lines
Anselm R Garbe <garbeam@gmail.com>
parents: 1393
diff changeset
   956
						            buttons[i].mask | modifiers[j],
a2c094196714 next version will be 5.6, shortened some very long lines
Anselm R Garbe <garbeam@gmail.com>
parents: 1393
diff changeset
   957
						            c->win, False, BUTTONMASK,
a2c094196714 next version will be 5.6, shortened some very long lines
Anselm R Garbe <garbeam@gmail.com>
parents: 1393
diff changeset
   958
						            GrabModeAsync, GrabModeSync, None, None);
1447
4fff5050c835 some cleanups
Anselm R Garbe <anselm@garbe.us>
parents: 1446
diff changeset
   959
		}
4fff5050c835 some cleanups
Anselm R Garbe <anselm@garbe.us>
parents: 1446
diff changeset
   960
		else
1344
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   961
			XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   962
			            BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   963
	}
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   964
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
   965
1060
9df583e2c03c Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!
Anselm R. Garbe <garbeam@gmail.com>
parents: 1059
diff changeset
   966
void
1195
33ba827ee84e applied nsz's style.diff patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1194
diff changeset
   967
grabkeys(void) {
1344
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   968
	updatenumlockmask();
1444
19dc2b0c61e2 removed some empty lines
Anselm R Garbe <anselm@garbe.us>
parents: 1443
diff changeset
   969
	{
1344
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
   970
		unsigned int i, j;
1340
15d159526e5e changed grabkeys, removed initmodmap
Anselm R Garbe <garbeam@gmail.com>
parents: 1339
diff changeset
   971
		unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
15d159526e5e changed grabkeys, removed initmodmap
Anselm R Garbe <garbeam@gmail.com>
parents: 1339
diff changeset
   972
		KeyCode code;
15d159526e5e changed grabkeys, removed initmodmap
Anselm R Garbe <garbeam@gmail.com>
parents: 1339
diff changeset
   973
15d159526e5e changed grabkeys, removed initmodmap
Anselm R Garbe <garbeam@gmail.com>
parents: 1339
diff changeset
   974
		XUngrabKey(dpy, AnyKey, AnyModifier, root);
15d159526e5e changed grabkeys, removed initmodmap
Anselm R Garbe <garbeam@gmail.com>
parents: 1339
diff changeset
   975
		for(i = 0; i < LENGTH(keys); i++) {
1352
eb1eb9811706 applied Gottox' grabkey patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1351
diff changeset
   976
			if((code = XKeysymToKeycode(dpy, keys[i].keysym)))
eb1eb9811706 applied Gottox' grabkey patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1351
diff changeset
   977
				for(j = 0; j < LENGTH(modifiers); j++)
eb1eb9811706 applied Gottox' grabkey patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1351
diff changeset
   978
					XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
eb1eb9811706 applied Gottox' grabkey patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1351
diff changeset
   979
						 True, GrabModeAsync, GrabModeAsync);
1340
15d159526e5e changed grabkeys, removed initmodmap
Anselm R Garbe <garbeam@gmail.com>
parents: 1339
diff changeset
   980
		}
1060
9df583e2c03c Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!
Anselm R. Garbe <garbeam@gmail.com>
parents: 1059
diff changeset
   981
	}
9df583e2c03c Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!
Anselm R. Garbe <garbeam@gmail.com>
parents: 1059
diff changeset
   982
}
9df583e2c03c Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!
Anselm R. Garbe <garbeam@gmail.com>
parents: 1059
diff changeset
   983
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
   984
void
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   985
initfont(const char *fontstr) {
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   986
	char *def, **missing;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   987
	int i, n;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   988
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   989
	missing = NULL;
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   990
	dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   991
	if(missing) {
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   992
		while(n--)
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   993
			fprintf(stderr, "dwm: missing fontset: %s\n", missing[n]);
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   994
		XFreeStringList(missing);
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   995
	}
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
   996
	if(dc.font.set) {
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   997
		XFontSetExtents *font_extents;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   998
		XFontStruct **xfonts;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
   999
		char **font_names;
1462
7997ebe5484f some stylistic changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1460
diff changeset
  1000
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1001
		dc.font.ascent = dc.font.descent = 0;
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1002
		font_extents = XExtentsOfFontSet(dc.font.set);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1003
		n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1004
		for(i = 0, dc.font.ascent = 0, dc.font.descent = 0; i < n; i++) {
1178
e0095dbfc0af applied Ph's MIN/MAX patch, nice work!
anselm@anselm1
parents: 1177
diff changeset
  1005
			dc.font.ascent = MAX(dc.font.ascent, (*xfonts)->ascent);
e0095dbfc0af applied Ph's MIN/MAX patch, nice work!
anselm@anselm1
parents: 1177
diff changeset
  1006
			dc.font.descent = MAX(dc.font.descent,(*xfonts)->descent);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1007
			xfonts++;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1008
		}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1009
	}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1010
	else {
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1011
		if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1012
		&& !(dc.font.xfont = XLoadQueryFont(dpy, "fixed")))
1308
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
  1013
			die("error, cannot load font: '%s'\n", fontstr);
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1014
		dc.font.ascent = dc.font.xfont->ascent;
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1015
		dc.font.descent = dc.font.xfont->descent;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1016
	}
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1017
	dc.font.height = dc.font.ascent + dc.font.descent;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1018
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1019
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1020
Bool
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1021
isprotodel(Client *c) {
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1022
	int i, n;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1023
	Atom *protocols;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1024
	Bool ret = False;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1025
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1026
	if(XGetWMProtocols(dpy, c->win, &protocols, &n)) {
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1027
		for(i = 0; !ret && i < n; i++)
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1028
			if(protocols[i] == wmatom[WMDelete])
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1029
				ret = True;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1030
		XFree(protocols);
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1031
	}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1032
	return ret;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1033
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1034
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1035
#ifdef XINERAMA
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1036
static Bool
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1037
isuniquegeom(XineramaScreenInfo *unique, size_t len, XineramaScreenInfo *info) {
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1038
	unsigned int i;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1039
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1040
	for(i = 0; i < len; i++)
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1041
		if(unique[i].x_org == info->x_org && unique[i].y_org == info->y_org
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1042
		&& unique[i].width == info->width && unique[i].height == info->height)
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1043
			return False;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1044
	return True;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1045
}
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1046
#endif /* XINERAMA */
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1047
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1048
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1049
keypress(XEvent *e) {
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
  1050
	unsigned int i;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1051
	KeySym keysym;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1052
	XKeyEvent *ev;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1053
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1054
	ev = &e->xkey;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1055
	keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
1048
98fc0d3c583a replaced Nmacros with LENGTH(x) macro
Anselm R. Garbe <garbeam@gmail.com>
parents: 1047
diff changeset
  1056
	for(i = 0; i < LENGTH(keys); i++)
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1057
		if(keysym == keys[i].keysym
1464
555070221577 final style fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1463
diff changeset
  1058
		&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
555070221577 final style fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1463
diff changeset
  1059
		&& keys[i].func)
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1060
			keys[i].func(&(keys[i].arg));
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1061
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1062
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1063
void
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1064
killclient(const Arg *arg) {
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1065
	XEvent ev;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1066
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1067
	if(!selmon->sel)
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1068
		return;
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1069
	if(isprotodel(selmon->sel)) {
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1070
		ev.type = ClientMessage;
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1071
		ev.xclient.window = selmon->sel->win;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1072
		ev.xclient.message_type = wmatom[WMProtocols];
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1073
		ev.xclient.format = 32;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1074
		ev.xclient.data.l[0] = wmatom[WMDelete];
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1075
		ev.xclient.data.l[1] = CurrentTime;
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1076
		XSendEvent(dpy, selmon->sel->win, False, NoEventMask, &ev);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1077
	}
1488
e10cbf276218 hard-core destruction
Anselm R Garbe <garbeam@gmail.com>
parents: 1487
diff changeset
  1078
	else {
e10cbf276218 hard-core destruction
Anselm R Garbe <garbeam@gmail.com>
parents: 1487
diff changeset
  1079
		XGrabServer(dpy);
e10cbf276218 hard-core destruction
Anselm R Garbe <garbeam@gmail.com>
parents: 1487
diff changeset
  1080
		XSetErrorHandler(xerrordummy);
e10cbf276218 hard-core destruction
Anselm R Garbe <garbeam@gmail.com>
parents: 1487
diff changeset
  1081
		XSetCloseDownMode(dpy, DestroyAll);
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1082
		XKillClient(dpy, selmon->sel->win);
1488
e10cbf276218 hard-core destruction
Anselm R Garbe <garbeam@gmail.com>
parents: 1487
diff changeset
  1083
		XSync(dpy, False);
e10cbf276218 hard-core destruction
Anselm R Garbe <garbeam@gmail.com>
parents: 1487
diff changeset
  1084
		XSetErrorHandler(xerror);
e10cbf276218 hard-core destruction
Anselm R Garbe <garbeam@gmail.com>
parents: 1487
diff changeset
  1085
		XUngrabServer(dpy);
e10cbf276218 hard-core destruction
Anselm R Garbe <garbeam@gmail.com>
parents: 1487
diff changeset
  1086
	}
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1087
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1088
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1089
void
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1090
manage(Window w, XWindowAttributes *wa) {
1358
e4bcaca8e6ef using malloc() instead of calloc() and sticking to static initializer and struct assignment, not using *c = (Client){}; right now to avoid some ugly gcc warning, possibly a gcc bug since we are using -std=c99
Anselm R Garbe <garbeam@gmail.com>
parents: 1357
diff changeset
  1091
	static Client cz;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1092
	Client *c, *t = NULL;
1333
5be4e277ed7c using None instead of 0 for trans
Anselm R Garbe <garbeam@gmail.com>
parents: 1332
diff changeset
  1093
	Window trans = None;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1094
	XWindowChanges wc;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1095
1358
e4bcaca8e6ef using malloc() instead of calloc() and sticking to static initializer and struct assignment, not using *c = (Client){}; right now to avoid some ugly gcc warning, possibly a gcc bug since we are using -std=c99
Anselm R Garbe <garbeam@gmail.com>
parents: 1357
diff changeset
  1096
	if(!(c = malloc(sizeof(Client))))
e4bcaca8e6ef using malloc() instead of calloc() and sticking to static initializer and struct assignment, not using *c = (Client){}; right now to avoid some ugly gcc warning, possibly a gcc bug since we are using -std=c99
Anselm R Garbe <garbeam@gmail.com>
parents: 1357
diff changeset
  1097
		die("fatal: could not malloc() %u bytes\n", sizeof(Client));
e4bcaca8e6ef using malloc() instead of calloc() and sticking to static initializer and struct assignment, not using *c = (Client){}; right now to avoid some ugly gcc warning, possibly a gcc bug since we are using -std=c99
Anselm R Garbe <garbeam@gmail.com>
parents: 1357
diff changeset
  1098
	*c = cz;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1099
	c->win = w;
1459
a5eecc6d674f fixing updatetitle
anselm@x200s.config
parents: 1458
diff changeset
  1100
	updatetitle(c);
1526
64eb02a74f2b applied Hiltjo's tiny cleanup patch, thanks!
Anselm R Garbe <anselm@garbe.us>
parents: 1525
diff changeset
  1101
	if(XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) {
1432
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1102
		c->mon = t->mon;
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1103
		c->tags = t->tags;
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1104
	}
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1105
	else {
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1106
		c->mon = selmon;
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1107
		applyrules(c);
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1108
	}
1129
43d862bda73e implemented setlayout in the way proposed on the ml, split tile() into two functions, a third will follow soon
Anselm R Garbe <garbeam@gmail.com>
parents: 1128
diff changeset
  1109
	/* geometry */
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1110
	c->x = c->oldx = wa->x + c->mon->wx;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1111
	c->y = c->oldy = wa->y + c->mon->wy;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1112
	c->w = c->oldw = wa->width;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1113
	c->h = c->oldh = wa->height;
1152
960659820908 renamed c->border into c->bw, fixed monocle to subtract c->bw from each h/w value
Anselm R Garbe <garbeam@gmail.com>
parents: 1151
diff changeset
  1114
	c->oldbw = wa->border_width;
1432
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1115
	if(c->w == c->mon->mw && c->h == c->mon->mh) {
1526
64eb02a74f2b applied Hiltjo's tiny cleanup patch, thanks!
Anselm R Garbe <anselm@garbe.us>
parents: 1525
diff changeset
  1116
		c->isfloating = True;
1432
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1117
		c->x = c->mon->mx;
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1118
		c->y = c->mon->my;
1315
ce355cea9bb8 forcing fullscreen windows to bw=0, though most fullscreen apps are broken anyways
Anselm R Garbe <garbeam@gmail.com>
parents: 1314
diff changeset
  1119
		c->bw = 0;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1120
	}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1121
	else {
1432
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1122
		if(c->x + WIDTH(c) > c->mon->mx + c->mon->mw)
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1123
			c->x = c->mon->mx + c->mon->mw - WIDTH(c);
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1124
		if(c->y + HEIGHT(c) > c->mon->my + c->mon->mh)
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1125
			c->y = c->mon->my + c->mon->mh - HEIGHT(c);
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1126
		c->x = MAX(c->x, c->mon->mx);
1284
14929bfb8738 restored y-coordinate fixing of client windows
Anselm R Garbe <garbeam@gmail.com>
parents: 1281
diff changeset
  1127
		/* only fix client y-offset, if the client center might cover the bar */
1412
2bc44743117e some restack fixes, still odd behavior if n>1 on unmanaging clients
Anselm R Garbe <anselm@garbe.us>
parents: 1411
diff changeset
  1128
		c->y = MAX(c->y, ((c->mon->by == 0) && (c->x + (c->w / 2) >= c->mon->wx)
1432
dda54561d777 fixed order of transient monitor applicaion and rule application
Anselm R Garbe <anselm@garbe.us>
parents: 1431
diff changeset
  1129
		           && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my);
1209
c2dc0bd92158 recent changes, introduced togglebar, changed some defines into variable declarations where possible
Anselm R Garbe <garbeam@gmail.com>
parents: 1207
diff changeset
  1130
		c->bw = borderpx;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1131
	}
1152
960659820908 renamed c->border into c->bw, fixed monocle to subtract c->bw from each h/w value
Anselm R Garbe <garbeam@gmail.com>
parents: 1151
diff changeset
  1132
	wc.border_width = c->bw;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1133
	XConfigureWindow(dpy, w, CWBorderWidth, &wc);
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1134
	XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1135
	configure(c); /* propagates border_width, if size doesn't change */
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1136
	updatesizehints(c);
1102
239f5ee65766 pushing my changes of tonight upstream (hg tip is NOW very UNSTABLE -- but those changes are necessary to get a decent multihead support) -- I renamed Monitor into View, to reflect in a better way the dwm terminology of the past
anselm@anselm1
parents: 1101
diff changeset
  1137
	XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1138
	grabbuttons(c, False);
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1139
	if(!c->isfloating)
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1140
		c->isfloating = c->oldstate = trans != None || c->isfixed;
1249
1fcb3350609d applied noviewprev.diff, fix.diff and unusedflags.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1248
diff changeset
  1141
	if(c->isfloating)
1fcb3350609d applied noviewprev.diff, fix.diff and unusedflags.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1248
diff changeset
  1142
		XRaiseWindow(dpy, c->win);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1143
	attach(c);
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1144
	attachstack(c);
1297
20481c9d647c does this fix anything?
Anselm R Garbe <garbeam@gmail.com>
parents: 1295
diff changeset
  1145
	XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1146
	XMapWindow(dpy, c->win);
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1147
	setclientstate(c, NormalState);
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1148
	arrange(c->mon);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1149
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1150
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1151
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1152
mappingnotify(XEvent *e) {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1153
	XMappingEvent *ev = &e->xmapping;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1154
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1155
	XRefreshKeyboardMapping(ev);
1340
15d159526e5e changed grabkeys, removed initmodmap
Anselm R Garbe <garbeam@gmail.com>
parents: 1339
diff changeset
  1156
	if(ev->request == MappingKeyboard)
1060
9df583e2c03c Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!
Anselm R. Garbe <garbeam@gmail.com>
parents: 1059
diff changeset
  1157
		grabkeys();
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1158
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1159
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1160
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1161
maprequest(XEvent *e) {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1162
	static XWindowAttributes wa;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1163
	XMapRequestEvent *ev = &e->xmaprequest;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1164
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1165
	if(!XGetWindowAttributes(dpy, ev->window, &wa))
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1166
		return;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1167
	if(wa.override_redirect)
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1168
		return;
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1169
	if(!wintoclient(ev->window))
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1170
		manage(ev->window, &wa);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1171
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1172
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1173
void
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1174
monocle(Monitor *m) {
1491
4754e7889841 implemented dynamic layout symbol stuff
Anselm R Garbe <garbeam@gmail.com>
parents: 1489
diff changeset
  1175
	unsigned int n = 0;
1289
064cfe1e8f84 untested monocle
Anselm R Garbe <garbeam@gmail.com>
parents: 1288
diff changeset
  1176
	Client *c;
064cfe1e8f84 untested monocle
Anselm R Garbe <garbeam@gmail.com>
parents: 1288
diff changeset
  1177
1491
4754e7889841 implemented dynamic layout symbol stuff
Anselm R Garbe <garbeam@gmail.com>
parents: 1489
diff changeset
  1178
	for(c = m->clients; c; c = c->next)
4754e7889841 implemented dynamic layout symbol stuff
Anselm R Garbe <garbeam@gmail.com>
parents: 1489
diff changeset
  1179
		if(ISVISIBLE(c))
4754e7889841 implemented dynamic layout symbol stuff
Anselm R Garbe <garbeam@gmail.com>
parents: 1489
diff changeset
  1180
			n++;
1496
de4a2998e1f5 use buffer instead of pointer for mon->ltsymbol
Anselm R Garbe <garbeam@gmail.com>
parents: 1495
diff changeset
  1181
	if(n > 0) /* override layout symbol */
de4a2998e1f5 use buffer instead of pointer for mon->ltsymbol
Anselm R Garbe <garbeam@gmail.com>
parents: 1495
diff changeset
  1182
		snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n);
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
  1183
	for(c = nexttiled(m->clients); c; c = nexttiled(c->next))
1443
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
  1184
		resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, False);
1289
064cfe1e8f84 untested monocle
Anselm R Garbe <garbeam@gmail.com>
parents: 1288
diff changeset
  1185
}
064cfe1e8f84 untested monocle
Anselm R Garbe <garbeam@gmail.com>
parents: 1288
diff changeset
  1186
064cfe1e8f84 untested monocle
Anselm R Garbe <garbeam@gmail.com>
parents: 1288
diff changeset
  1187
void
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
  1188
movemouse(const Arg *arg) {
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1189
	int x, y, ocx, ocy, nx, ny;
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
  1190
	Client *c;
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1191
	Monitor *m;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1192
	XEvent ev;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1193
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1194
	if(!(c = selmon->sel))
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
  1195
		return;
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1196
	restack(selmon);
1334
6f9cf8bcc4a7 applied Martin Hurton's movemouse() patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1333
diff changeset
  1197
	ocx = c->x;
6f9cf8bcc4a7 applied Martin Hurton's movemouse() patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1333
diff changeset
  1198
	ocy = c->y;
1087
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1199
	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
1195
33ba827ee84e applied nsz's style.diff patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1194
diff changeset
  1200
	None, cursor[CurMove], CurrentTime) != GrabSuccess)
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1201
		return;
1450
b2d18a052137 some minor changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1449
diff changeset
  1202
	if(!getrootptr(&x, &y))
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1203
		return;
1334
6f9cf8bcc4a7 applied Martin Hurton's movemouse() patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1333
diff changeset
  1204
	do {
1102
239f5ee65766 pushing my changes of tonight upstream (hg tip is NOW very UNSTABLE -- but those changes are necessary to get a decent multihead support) -- I renamed Monitor into View, to reflect in a better way the dwm terminology of the past
anselm@anselm1
parents: 1101
diff changeset
  1205
		XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1206
		switch (ev.type) {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1207
		case ConfigureRequest:
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1208
		case Expose:
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1209
		case MapRequest:
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1210
			handler[ev.type](&ev);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1211
			break;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1212
		case MotionNotify:
1311
47b3dbd9a7d3 got rid of compile time xidx configuration, querying mouse pointer instead
Anselm R Garbe <garbeam@gmail.com>
parents: 1310
diff changeset
  1213
			nx = ocx + (ev.xmotion.x - x);
47b3dbd9a7d3 got rid of compile time xidx configuration, querying mouse pointer instead
Anselm R Garbe <garbeam@gmail.com>
parents: 1310
diff changeset
  1214
			ny = ocy + (ev.xmotion.y - y);
1397
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1215
			if(snap && nx >= selmon->wx && nx <= selmon->wx + selmon->ww
1464
555070221577 final style fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1463
diff changeset
  1216
			&& ny >= selmon->wy && ny <= selmon->wy + selmon->wh) {
1397
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1217
				if(abs(selmon->wx - nx) < snap)
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1218
					nx = selmon->wx;
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1219
				else if(abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1220
					nx = selmon->wx + selmon->ww - WIDTH(c);
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1221
				if(abs(selmon->wy - ny) < snap)
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1222
					ny = selmon->wy;
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1223
				else if(abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1224
					ny = selmon->wy + selmon->wh - HEIGHT(c);
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
  1225
				if(!c->isfloating && selmon->lt[selmon->sellt]->arrange
1464
555070221577 final style fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1463
diff changeset
  1226
				&& (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
1213
368a80dcf5bd only snap within window area
Anselm R Garbe <garbeam@gmail.com>
parents: 1212
diff changeset
  1227
					togglefloating(NULL);
368a80dcf5bd only snap within window area
Anselm R Garbe <garbeam@gmail.com>
parents: 1212
diff changeset
  1228
			}
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
  1229
			if(!selmon->lt[selmon->sellt]->arrange || c->isfloating)
1443
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
  1230
				resize(c, nx, ny, c->w, c->h, True);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1231
			break;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1232
		}
1462
7997ebe5484f some stylistic changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1460
diff changeset
  1233
	} while(ev.type != ButtonRelease);
1334
6f9cf8bcc4a7 applied Martin Hurton's movemouse() patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1333
diff changeset
  1234
	XUngrabPointer(dpy, CurrentTime);
1450
b2d18a052137 some minor changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1449
diff changeset
  1235
	if((m = ptrtomon(c->x + c->w / 2, c->y + c->h / 2)) != selmon) {
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1236
		sendmon(c, m);
1428
2245e2b88983 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC
Anselm R Garbe <garbeam@gmail.com>
parents: 1427
diff changeset
  1237
		selmon = m;
2245e2b88983 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC
Anselm R Garbe <garbeam@gmail.com>
parents: 1427
diff changeset
  1238
		focus(NULL);
2245e2b88983 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC
Anselm R Garbe <garbeam@gmail.com>
parents: 1427
diff changeset
  1239
	}
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1240
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1241
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1242
Client *
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
  1243
nexttiled(Client *c) {
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
  1244
	for(; c && (c->isfloating || !ISVISIBLE(c)); c = c->next);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1245
	return c;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1246
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1247
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1248
Monitor *
1450
b2d18a052137 some minor changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1449
diff changeset
  1249
ptrtomon(int x, int y) {
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1250
	Monitor *m;
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1251
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1252
	for(m = mons; m; m = m->next)
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1253
		if(INRECT(x, y, m->wx, m->wy, m->ww, m->wh))
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1254
			return m;
1438
9e3da779b59b minor fix
Anselm R Garbe <garbeam@gmail.com>
parents: 1437
diff changeset
  1255
	return selmon;
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1256
}
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1257
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1258
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1259
propertynotify(XEvent *e) {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1260
	Client *c;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1261
	Window trans;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1262
	XPropertyEvent *ev = &e->xproperty;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1263
1385
85a8eff4c123 fix of typo, thx to Enno Gottox Boland
Premysl Hruby <dfenze@gmail.com>
parents: 1383
diff changeset
  1264
	if((ev->window == root) && (ev->atom == XA_WM_NAME))
1370
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
  1265
		updatestatus();
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
  1266
	else if(ev->state == PropertyDelete)
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1267
		return; /* ignore */
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1268
	else if((c = wintoclient(ev->window))) {
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1269
		switch (ev->atom) {
1093
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
  1270
		default: break;
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
  1271
		case XA_WM_TRANSIENT_FOR:
1526
64eb02a74f2b applied Hiltjo's tiny cleanup patch, thanks!
Anselm R Garbe <anselm@garbe.us>
parents: 1525
diff changeset
  1272
			if(!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) &&
1527
406003e3a01f applied Hiltjo's tiny cleanup fix
Anselm R Garbe <anselm@garbe.us>
parents: 1526
diff changeset
  1273
			   (c->isfloating = (wintoclient(trans)) != NULL))
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1274
				arrange(c->mon);
1093
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
  1275
			break;
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
  1276
		case XA_WM_NORMAL_HINTS:
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
  1277
			updatesizehints(c);
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
  1278
			break;
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
  1279
		case XA_WM_HINTS:
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
  1280
			updatewmhints(c);
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1281
			drawbars();
1093
5170cc8c078e made restack, drawbar also Monitor-related only
Anselm R Garbe <garbeam@gmail.com>
parents: 1092
diff changeset
  1282
			break;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1283
		}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1284
		if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1285
			updatetitle(c);
1482
d4137ac1d940 also update title if the client is on an unfocused monitor
Anselm R Garbe <garbeam@gmail.com>
parents: 1480
diff changeset
  1286
			if(c == c->mon->sel)
1483
63e19dad219c another small optimisation
Anselm R Garbe <garbeam@gmail.com>
parents: 1482
diff changeset
  1287
				drawbar(c->mon);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1288
		}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1289
	}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1290
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1291
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1292
void
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1293
clientmessage(XEvent *e) {
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1294
	XClientMessageEvent *cme = &e->xclient;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1295
	Client *c;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1296
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1297
	if((c = wintoclient(cme->window))
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1298
	&& (cme->message_type == netatom[NetWMState] && cme->data.l[1] == netatom[NetWMFullscreen]))
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1299
	{
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1300
		if(cme->data.l[0]) {
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1301
			XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1302
			                PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1);
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1303
			c->oldstate = c->isfloating;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1304
			c->oldbw = c->bw;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1305
			c->bw = 0;
1526
64eb02a74f2b applied Hiltjo's tiny cleanup patch, thanks!
Anselm R Garbe <anselm@garbe.us>
parents: 1525
diff changeset
  1306
			c->isfloating = True;
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1307
			resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1308
			XRaiseWindow(dpy, c->win);
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1309
		}
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1310
		else {
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1311
			XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1312
			                PropModeReplace, (unsigned char*)0, 0);
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1313
			c->isfloating = c->oldstate;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1314
			c->bw = c->oldbw;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1315
			c->x = c->oldx;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1316
			c->y = c->oldy;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1317
			c->w = c->oldw;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1318
			c->h = c->oldh;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1319
			resizeclient(c, c->x, c->y, c->w, c->h);
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1320
			arrange(c->mon);
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1321
		}
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1322
	}
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1323
}
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1324
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1325
void
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1326
quit(const Arg *arg) {
1370
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
  1327
	running = False;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1328
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1329
1070
dc37f0e022f7 implemented reapply for re-applying the tagging rules during runtime, Mod-r
Anselm R. Garbe <garbeam@gmail.com>
parents: 1067
diff changeset
  1330
void
1443
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
  1331
resize(Client *c, int x, int y, int w, int h, Bool interact) {
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1332
	if(applysizehints(c, &x, &y, &w, &h, interact))
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1333
		resizeclient(c, x, y, w, h);
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1334
}
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1335
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1336
void
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1337
resizeclient(Client *c, int x, int y, int w, int h) {
1024
17a935c3017f removed two spaces reported by Soleen
Anselm R. Garbe <garbeam@gmail.com>
parents: 1023
diff changeset
  1338
	XWindowChanges wc;
1090
09f1bf0e12ee resize handles offscreen issues
Anselm R Garbe <garbeam@gmail.com>
parents: 1089
diff changeset
  1339
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1340
	c->oldx = c->x; c->x = wc.x = x;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1341
	c->oldy = c->y; c->y = wc.y = y;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1342
	c->oldw = c->w; c->w = wc.width = w;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1343
	c->oldh = c->h; c->h = wc.height = h;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1344
	wc.border_width = c->bw;
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1345
	XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1346
	configure(c);
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1347
	XSync(dpy, False);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1348
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1349
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1350
void
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
  1351
resizemouse(const Arg *arg) {
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1352
	int ocx, ocy;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1353
	int nw, nh;
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
  1354
	Client *c;
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1355
	Monitor *m;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1356
	XEvent ev;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1357
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1358
	if(!(c = selmon->sel))
1270
262ee84a2fdb integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?)
Anselm R Garbe <garbeam@gmail.com>
parents: 1269
diff changeset
  1359
		return;
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1360
	restack(selmon);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1361
	ocx = c->x;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1362
	ocy = c->y;
1087
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1363
	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
1464
555070221577 final style fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1463
diff changeset
  1364
	                None, cursor[CurResize], CurrentTime) != GrabSuccess)
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1365
		return;
1152
960659820908 renamed c->border into c->bw, fixed monocle to subtract c->bw from each h/w value
Anselm R Garbe <garbeam@gmail.com>
parents: 1151
diff changeset
  1366
	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
1335
83da51dfedd3 applied Martin Hurtons resizemouse patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1334
diff changeset
  1367
	do {
1337
c4ecef7983b8 Martin Hurtons typo fix
Anselm R Garbe <garbeam@gmail.com>
parents: 1336
diff changeset
  1368
		XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1369
		switch(ev.type) {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1370
		case ConfigureRequest:
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1371
		case Expose:
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1372
		case MapRequest:
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1373
			handler[ev.type](&ev);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1374
			break;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1375
		case MotionNotify:
1380
add6eb26ebaa spotted missing spaces
a@null
parents: 1379
diff changeset
  1376
			nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1);
add6eb26ebaa spotted missing spaces
a@null
parents: 1379
diff changeset
  1377
			nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1);
1397
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1378
			if(snap && nw >= selmon->wx && nw <= selmon->wx + selmon->ww
1464
555070221577 final style fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1463
diff changeset
  1379
			&& nh >= selmon->wy && nh <= selmon->wy + selmon->wh)
555070221577 final style fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1463
diff changeset
  1380
			{
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
  1381
				if(!c->isfloating && selmon->lt[selmon->sellt]->arrange
1464
555070221577 final style fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1463
diff changeset
  1382
				&& (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
1213
368a80dcf5bd only snap within window area
Anselm R Garbe <garbeam@gmail.com>
parents: 1212
diff changeset
  1383
					togglefloating(NULL);
1183
b20561489ffb applied yiyus fgeom patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1182
diff changeset
  1384
			}
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
  1385
			if(!selmon->lt[selmon->sellt]->arrange || c->isfloating)
1443
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
  1386
				resize(c, c->x, c->y, nw, nh, True);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1387
			break;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1388
		}
1462
7997ebe5484f some stylistic changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1460
diff changeset
  1389
	} while(ev.type != ButtonRelease);
1335
83da51dfedd3 applied Martin Hurtons resizemouse patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1334
diff changeset
  1390
	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
83da51dfedd3 applied Martin Hurtons resizemouse patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1334
diff changeset
  1391
	XUngrabPointer(dpy, CurrentTime);
83da51dfedd3 applied Martin Hurtons resizemouse patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1334
diff changeset
  1392
	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
1450
b2d18a052137 some minor changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1449
diff changeset
  1393
	if((m = ptrtomon(c->x + c->w / 2, c->y + c->h / 2)) != selmon) {
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1394
		sendmon(c, m);
1428
2245e2b88983 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC
Anselm R Garbe <garbeam@gmail.com>
parents: 1427
diff changeset
  1395
		selmon = m;
2245e2b88983 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC
Anselm R Garbe <garbeam@gmail.com>
parents: 1427
diff changeset
  1396
		focus(NULL);
2245e2b88983 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC
Anselm R Garbe <garbeam@gmail.com>
parents: 1427
diff changeset
  1397
	}
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1398
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1399
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1400
void
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1401
restack(Monitor *m) {
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1402
	Client *c;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1403
	XEvent ev;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1404
	XWindowChanges wc;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1405
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1406
	drawbar(m);
1412
2bc44743117e some restack fixes, still odd behavior if n>1 on unmanaging clients
Anselm R Garbe <anselm@garbe.us>
parents: 1411
diff changeset
  1407
	if(!m->sel)
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1408
		return;
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
  1409
	if(m->sel->isfloating || !m->lt[m->sellt]->arrange)
1412
2bc44743117e some restack fixes, still odd behavior if n>1 on unmanaging clients
Anselm R Garbe <anselm@garbe.us>
parents: 1411
diff changeset
  1410
		XRaiseWindow(dpy, m->sel->win);
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
  1411
	if(m->lt[m->sellt]->arrange) {
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1412
		wc.stack_mode = Below;
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1413
		wc.sibling = m->barwin;
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1414
		for(c = m->stack; c; c = c->snext)
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
  1415
			if(!c->isfloating && ISVISIBLE(c)) {
1183
b20561489ffb applied yiyus fgeom patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1182
diff changeset
  1416
				XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);
b20561489ffb applied yiyus fgeom patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1182
diff changeset
  1417
				wc.sibling = c->win;
b20561489ffb applied yiyus fgeom patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1182
diff changeset
  1418
			}
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1419
	}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1420
	XSync(dpy, False);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1421
	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1422
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1423
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1424
void
997
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
  1425
run(void) {
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
  1426
	XEvent ev;
1370
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
  1427
	/* main event loop */
997
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
  1428
	XSync(dpy, False);
1508
0bee7022aca5 it's debug season for upcoming dwm 5.8, so only use this if you really want to run experimental code or debug code
Anselm R Garbe <anselm@garbe.us>
parents: 1502
diff changeset
  1429
	while(running && !XNextEvent(dpy, &ev)) {
1370
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
  1430
		if(handler[ev.type])
1462
7997ebe5484f some stylistic changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1460
diff changeset
  1431
			handler[ev.type](&ev); /* call handler */
1508
0bee7022aca5 it's debug season for upcoming dwm 5.8, so only use this if you really want to run experimental code or debug code
Anselm R Garbe <anselm@garbe.us>
parents: 1502
diff changeset
  1432
	}
997
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
  1433
}
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
  1434
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1435
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1436
scan(void) {
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
  1437
	unsigned int i, num;
1330
06677766e7aa applied Martin Hurton's scan() patch with slight modifications
Anselm R Garbe <garbeam@gmail.com>
parents: 1329
diff changeset
  1438
	Window d1, d2, *wins = NULL;
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1439
	XWindowAttributes wa;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1440
1087
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1441
	if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1442
		for(i = 0; i < num; i++) {
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1443
			if(!XGetWindowAttributes(dpy, wins[i], &wa)
1195
33ba827ee84e applied nsz's style.diff patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1194
diff changeset
  1444
			|| wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
1087
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1445
				continue;
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1446
			if(wa.map_state == IsViewable || getstate(wins[i]) == IconicState)
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1447
				manage(wins[i], &wa);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1448
		}
1087
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1449
		for(i = 0; i < num; i++) { /* now the transients */
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1450
			if(!XGetWindowAttributes(dpy, wins[i], &wa))
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1451
				continue;
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1452
			if(XGetTransientForHint(dpy, wins[i], &d1)
1195
33ba827ee84e applied nsz's style.diff patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1194
diff changeset
  1453
			&& (wa.map_state == IsViewable || getstate(wins[i]) == IconicState))
1087
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1454
				manage(wins[i], &wa);
197bfedb953c removed Monitor->root, since we do not support classical multihead
Anselm R Garbe <garbeam@gmail.com>
parents: 1086
diff changeset
  1455
		}
1330
06677766e7aa applied Martin Hurton's scan() patch with slight modifications
Anselm R Garbe <garbeam@gmail.com>
parents: 1329
diff changeset
  1456
		if(wins)
06677766e7aa applied Martin Hurton's scan() patch with slight modifications
Anselm R Garbe <garbeam@gmail.com>
parents: 1329
diff changeset
  1457
			XFree(wins);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1458
	}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1459
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1460
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1461
void
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1462
sendmon(Client *c, Monitor *m) {
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1463
	if(c->mon == m)
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1464
		return;
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1465
	unfocus(c, True);
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1466
	detach(c);
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1467
	detachstack(c);
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1468
	c->mon = m;
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1469
	c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1470
	attach(c);
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1471
	attachstack(c);
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1472
	focus(NULL);
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1473
	arrange(NULL);
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1474
}
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1475
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1476
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1477
setclientstate(Client *c, long state) {
1447
4fff5050c835 some cleanups
Anselm R Garbe <anselm@garbe.us>
parents: 1446
diff changeset
  1478
	long data[] = { state, None };
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1479
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1480
	XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32,
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1481
			PropModeReplace, (unsigned char *)data, 2);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1482
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1483
1289
064cfe1e8f84 untested monocle
Anselm R Garbe <garbeam@gmail.com>
parents: 1288
diff changeset
  1484
void
064cfe1e8f84 untested monocle
Anselm R Garbe <garbeam@gmail.com>
parents: 1288
diff changeset
  1485
setlayout(const Arg *arg) {
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
  1486
	if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
1397
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1487
		selmon->sellt ^= 1;
1502
15761ac5e2f1 applied Ryan Zheng's patch and re-releasing 5.7.2
Anselm R Garbe <anselm@garbe.us>
parents: 1500
diff changeset
  1488
	if(arg && arg->v)
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
  1489
		selmon->lt[selmon->sellt] = (Layout *)arg->v;
1502
15761ac5e2f1 applied Ryan Zheng's patch and re-releasing 5.7.2
Anselm R Garbe <anselm@garbe.us>
parents: 1500
diff changeset
  1490
	strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1491
	if(selmon->sel)
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1492
		arrange(selmon);
1289
064cfe1e8f84 untested monocle
Anselm R Garbe <garbeam@gmail.com>
parents: 1288
diff changeset
  1493
	else
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1494
		drawbar(selmon);
1289
064cfe1e8f84 untested monocle
Anselm R Garbe <garbeam@gmail.com>
parents: 1288
diff changeset
  1495
}
064cfe1e8f84 untested monocle
Anselm R Garbe <garbeam@gmail.com>
parents: 1288
diff changeset
  1496
1224
47496de04028 applied Gottox bitmask + void *arg patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1223
diff changeset
  1497
/* arg > 1.0 will set mfact absolutly */
1160
bf37ef388dd6 revival of mfact and setmfact
Anselm R Garbe <garbeam@gmail.com>
parents: 1159
diff changeset
  1498
void
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1499
setmfact(const Arg *arg) {
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1500
	float f;
1220
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1501
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
  1502
	if(!arg || !selmon->lt[selmon->sellt]->arrange)
1220
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1503
		return;
1400
a5312d498a58 some minor fixes regarding the new xinerama support
Anselm R Garbe <anselm@garbe.us>
parents: 1399
diff changeset
  1504
	f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1505
	if(f < 0.1 || f > 0.9)
1224
47496de04028 applied Gottox bitmask + void *arg patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1223
diff changeset
  1506
		return;
1400
a5312d498a58 some minor fixes regarding the new xinerama support
Anselm R Garbe <anselm@garbe.us>
parents: 1399
diff changeset
  1507
	selmon->mfact = f;
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1508
	arrange(selmon);
1220
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1509
}
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1510
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1511
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1512
setup(void) {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1513
	XSetWindowAttributes wa;
1114
31b3935773cb removed View cruft, now back to the roots
anselm@anselm1
parents: 1112
diff changeset
  1514
1478
cf5bb4e72804 added merged patch of anydot and Neale
Anselm R Garbe <garbeam@gmail.com>
parents: 1477
diff changeset
  1515
	/* clean up any zombies immediately */
cf5bb4e72804 added merged patch of anydot and Neale
Anselm R Garbe <garbeam@gmail.com>
parents: 1477
diff changeset
  1516
	sigchld(0);
cf5bb4e72804 added merged patch of anydot and Neale
Anselm R Garbe <garbeam@gmail.com>
parents: 1477
diff changeset
  1517
1114
31b3935773cb removed View cruft, now back to the roots
anselm@anselm1
parents: 1112
diff changeset
  1518
	/* init screen */
31b3935773cb removed View cruft, now back to the roots
anselm@anselm1
parents: 1112
diff changeset
  1519
	screen = DefaultScreen(dpy);
31b3935773cb removed View cruft, now back to the roots
anselm@anselm1
parents: 1112
diff changeset
  1520
	root = RootWindow(dpy, screen);
1275
e121660425a0 removed font and color definitions
Anselm R Garbe <garbeam@gmail.com>
parents: 1273
diff changeset
  1521
	initfont(font);
1148
d49ff154375f some experimental state DO NOT USE THIS, I plan to have a nicer interface to change geometries
Anselm R Garbe <garbeam@gmail.com>
parents: 1147
diff changeset
  1522
	sw = DisplayWidth(dpy, screen);
d49ff154375f some experimental state DO NOT USE THIS, I plan to have a nicer interface to change geometries
Anselm R Garbe <garbeam@gmail.com>
parents: 1147
diff changeset
  1523
	sh = DisplayHeight(dpy, screen);
1275
e121660425a0 removed font and color definitions
Anselm R Garbe <garbeam@gmail.com>
parents: 1273
diff changeset
  1524
	bh = dc.h = dc.font.height + 2;
1190
c8eaba1445a4 removed Geom stuff, introduced updategeom() again, still view is somewhat broken?
Anselm R Garbe <garbeam@gmail.com>
parents: 1188
diff changeset
  1525
	updategeom();
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1526
	/* init atoms */
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1527
	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1528
	wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1529
	wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1530
	netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1531
	netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
1514
2a8d8d41e50b applied Sylvain Laurent's EWMH fullscreen state patch, simplified his patch a bit
anselm@garbe.us
parents: 1511
diff changeset
  1532
	netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1533
	netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1534
	/* init cursors */
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1535
	cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1536
	cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1537
	cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1538
	/* init appearance */
1275
e121660425a0 removed font and color definitions
Anselm R Garbe <garbeam@gmail.com>
parents: 1273
diff changeset
  1539
	dc.norm[ColBorder] = getcolor(normbordercolor);
e121660425a0 removed font and color definitions
Anselm R Garbe <garbeam@gmail.com>
parents: 1273
diff changeset
  1540
	dc.norm[ColBG] = getcolor(normbgcolor);
e121660425a0 removed font and color definitions
Anselm R Garbe <garbeam@gmail.com>
parents: 1273
diff changeset
  1541
	dc.norm[ColFG] = getcolor(normfgcolor);
e121660425a0 removed font and color definitions
Anselm R Garbe <garbeam@gmail.com>
parents: 1273
diff changeset
  1542
	dc.sel[ColBorder] = getcolor(selbordercolor);
e121660425a0 removed font and color definitions
Anselm R Garbe <garbeam@gmail.com>
parents: 1273
diff changeset
  1543
	dc.sel[ColBG] = getcolor(selbgcolor);
e121660425a0 removed font and color definitions
Anselm R Garbe <garbeam@gmail.com>
parents: 1273
diff changeset
  1544
	dc.sel[ColFG] = getcolor(selfgcolor);
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1545
	dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh, DefaultDepth(dpy, screen));
1389
b4e7c220422d some NULL fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1388
diff changeset
  1546
	dc.gc = XCreateGC(dpy, root, 0, NULL);
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1547
	XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1548
	if(!dc.font.set)
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1549
		XSetFont(dpy, dc.gc, dc.font.xfont->fid);
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1550
	/* init bars */
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1551
	updatebars();
1370
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
  1552
	updatestatus();
1114
31b3935773cb removed View cruft, now back to the roots
anselm@anselm1
parents: 1112
diff changeset
  1553
	/* EWMH support per view */
31b3935773cb removed View cruft, now back to the roots
anselm@anselm1
parents: 1112
diff changeset
  1554
	XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
31b3935773cb removed View cruft, now back to the roots
anselm@anselm1
parents: 1112
diff changeset
  1555
			PropModeReplace, (unsigned char *) netatom, NetLast);
31b3935773cb removed View cruft, now back to the roots
anselm@anselm1
parents: 1112
diff changeset
  1556
	/* select for events */
1403
9bfeee8174c2 hotfixes
Anselm R Garbe <anselm@garbe.us>
parents: 1402
diff changeset
  1557
	wa.cursor = cursor[CurNormal];
1281
3e478379e74d minor fixes towards 5.0
Anselm R Garbe <garbeam@gmail.com>
parents: 1280
diff changeset
  1558
	wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask
1464
555070221577 final style fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1463
diff changeset
  1559
	                |EnterWindowMask|LeaveWindowMask|StructureNotifyMask
555070221577 final style fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1463
diff changeset
  1560
	                |PropertyChangeMask;
1114
31b3935773cb removed View cruft, now back to the roots
anselm@anselm1
parents: 1112
diff changeset
  1561
	XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa);
31b3935773cb removed View cruft, now back to the roots
anselm@anselm1
parents: 1112
diff changeset
  1562
	XSelectInput(dpy, root, wa.event_mask);
1060
9df583e2c03c Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!
Anselm R. Garbe <garbeam@gmail.com>
parents: 1059
diff changeset
  1563
	grabkeys();
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1564
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1565
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1566
void
1393
deaa276abac1 applied Marc Andre Tanners showhide patch, the removal of ntiled
Anselm R Garbe <garbeam@gmail.com>
parents: 1392
diff changeset
  1567
showhide(Client *c) {
1356
d2658eac8ff9 I prefer doing the check in showhide
Anselm R Garbe <garbeam@gmail.com>
parents: 1355
diff changeset
  1568
	if(!c)
d2658eac8ff9 I prefer doing the check in showhide
Anselm R Garbe <garbeam@gmail.com>
parents: 1355
diff changeset
  1569
		return;
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
  1570
	if(ISVISIBLE(c)) { /* show clients top down */
1355
9172f2200001 applied Donald Chai's showhide patch in slightly modified ways
Anselm R Garbe <garbeam@gmail.com>
parents: 1354
diff changeset
  1571
		XMoveWindow(dpy, c->win, c->x, c->y);
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
  1572
		if(!c->mon->lt[c->mon->sellt]->arrange || c->isfloating)
1443
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
  1573
			resize(c, c->x, c->y, c->w, c->h, False);
1393
deaa276abac1 applied Marc Andre Tanners showhide patch, the removal of ntiled
Anselm R Garbe <garbeam@gmail.com>
parents: 1392
diff changeset
  1574
		showhide(c->snext);
1356
d2658eac8ff9 I prefer doing the check in showhide
Anselm R Garbe <garbeam@gmail.com>
parents: 1355
diff changeset
  1575
	}
d2658eac8ff9 I prefer doing the check in showhide
Anselm R Garbe <garbeam@gmail.com>
parents: 1355
diff changeset
  1576
	else { /* hide clients bottom up */
1393
deaa276abac1 applied Marc Andre Tanners showhide patch, the removal of ntiled
Anselm R Garbe <garbeam@gmail.com>
parents: 1392
diff changeset
  1577
		showhide(c->snext);
1355
9172f2200001 applied Donald Chai's showhide patch in slightly modified ways
Anselm R Garbe <garbeam@gmail.com>
parents: 1354
diff changeset
  1578
		XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
1356
d2658eac8ff9 I prefer doing the check in showhide
Anselm R Garbe <garbeam@gmail.com>
parents: 1355
diff changeset
  1579
	}
1355
9172f2200001 applied Donald Chai's showhide patch in slightly modified ways
Anselm R Garbe <garbeam@gmail.com>
parents: 1354
diff changeset
  1580
}
9172f2200001 applied Donald Chai's showhide patch in slightly modified ways
Anselm R Garbe <garbeam@gmail.com>
parents: 1354
diff changeset
  1581
1371
fcdbbc9c39de re-applied Neale's spawn patch, credited Neale in LICENSE
a@null
parents: 1370
diff changeset
  1582
fcdbbc9c39de re-applied Neale's spawn patch, credited Neale in LICENSE
a@null
parents: 1370
diff changeset
  1583
void
1478
cf5bb4e72804 added merged patch of anydot and Neale
Anselm R Garbe <garbeam@gmail.com>
parents: 1477
diff changeset
  1584
sigchld(int unused) {
1479
31cb815bac41 applied Jukka's sigchld patch
Anselm R Garbe <anselm@garbe.us>
parents: 1478
diff changeset
  1585
	if(signal(SIGCHLD, sigchld) == SIG_ERR)
31cb815bac41 applied Jukka's sigchld patch
Anselm R Garbe <anselm@garbe.us>
parents: 1478
diff changeset
  1586
		die("Can't install SIGCHLD handler");
1371
fcdbbc9c39de re-applied Neale's spawn patch, credited Neale in LICENSE
a@null
parents: 1370
diff changeset
  1587
	while(0 < waitpid(-1, NULL, WNOHANG));
fcdbbc9c39de re-applied Neale's spawn patch, credited Neale in LICENSE
a@null
parents: 1370
diff changeset
  1588
}
fcdbbc9c39de re-applied Neale's spawn patch, credited Neale in LICENSE
a@null
parents: 1370
diff changeset
  1589
1355
9172f2200001 applied Donald Chai's showhide patch in slightly modified ways
Anselm R Garbe <garbeam@gmail.com>
parents: 1354
diff changeset
  1590
void
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1591
spawn(const Arg *arg) {
1058
5e34476a3a1c we check variable == value, and not the other way - the other way is for beginner programmers.
Anselm R. Garbe <garbeam@gmail.com>
parents: 1057
diff changeset
  1592
	if(fork() == 0) {
1371
fcdbbc9c39de re-applied Neale's spawn patch, credited Neale in LICENSE
a@null
parents: 1370
diff changeset
  1593
		if(dpy)
fcdbbc9c39de re-applied Neale's spawn patch, credited Neale in LICENSE
a@null
parents: 1370
diff changeset
  1594
			close(ConnectionNumber(dpy));
fcdbbc9c39de re-applied Neale's spawn patch, credited Neale in LICENSE
a@null
parents: 1370
diff changeset
  1595
		setsid();
fcdbbc9c39de re-applied Neale's spawn patch, credited Neale in LICENSE
a@null
parents: 1370
diff changeset
  1596
		execvp(((char **)arg->v)[0], (char **)arg->v);
fcdbbc9c39de re-applied Neale's spawn patch, credited Neale in LICENSE
a@null
parents: 1370
diff changeset
  1597
		fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
fcdbbc9c39de re-applied Neale's spawn patch, credited Neale in LICENSE
a@null
parents: 1370
diff changeset
  1598
		perror(" failed");
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1599
		exit(0);
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1600
	}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1601
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1602
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1603
void
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1604
tag(const Arg *arg) {
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1605
	if(selmon->sel && arg->ui & TAGMASK) {
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1606
		selmon->sel->tags = arg->ui & TAGMASK;
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1607
		arrange(selmon);
1224
47496de04028 applied Gottox bitmask + void *arg patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1223
diff changeset
  1608
	}
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1609
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1610
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1611
void
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1612
tagmon(const Arg *arg) {
1445
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
  1613
	if(!selmon->sel || !mons->next)
1446
Anselm R Garbe <anselm@garbe.us>
parents: 1445
diff changeset
  1614
		return;
1445
4ad1f24d38ec changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe <anselm@garbe.us>
parents: 1444
diff changeset
  1615
	sendmon(selmon->sel, dirtomon(arg->i));
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1616
}
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1617
1257
cd74054c01b0 applied nsz' textnw patch thank you
arg@suckless.org
parents: 1256
diff changeset
  1618
int
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
  1619
textnw(const char *text, unsigned int len) {
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1620
	XRectangle r;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1621
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1622
	if(dc.font.set) {
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1623
		XmbTextExtents(dc.font.set, text, len, NULL, &r);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1624
		return r.width;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1625
	}
1088
06fbc117e7d8 removed Monitor->dc, unnecessary
Anselm R Garbe <garbeam@gmail.com>
parents: 1087
diff changeset
  1626
	return XTextWidth(dc.font.xfont, text, len);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1627
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1628
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1629
void
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1630
tile(Monitor *m) {
1238
70a2c5f7c716 simplified tile()
Anselm R Garbe <garbeam@gmail.com>
parents: 1237
diff changeset
  1631
	int x, y, h, w, mw;
1310
1d52b420daa4 reverted uint redefinition
Anselm R Garbe <garbeam@gmail.com>
parents: 1309
diff changeset
  1632
	unsigned int i, n;
1220
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1633
	Client *c;
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1634
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
  1635
	for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
1220
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1636
	if(n == 0)
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1637
		return;
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1638
	/* master */
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
  1639
	c = nexttiled(m->clients);
1400
a5312d498a58 some minor fixes regarding the new xinerama support
Anselm R Garbe <anselm@garbe.us>
parents: 1399
diff changeset
  1640
	mw = m->mfact * m->ww;
1443
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
  1641
	resize(c, m->wx, m->wy, (n == 1 ? m->ww : mw) - 2 * c->bw, m->wh - 2 * c->bw, False);
1220
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1642
	if(--n == 0)
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1643
		return;
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1644
	/* tile stack */
1397
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1645
	x = (m->wx + mw > c->x + c->w) ? c->x + c->w + 2 * c->bw : m->wx + mw;
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1646
	y = m->wy;
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1647
	w = (m->wx + mw > c->x + c->w) ? m->wx + m->ww - x : m->ww - mw;
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1648
	h = m->wh / n;
1220
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1649
	if(h < bh)
1397
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1650
		h = m->wh;
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
  1651
	for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
1363
4004d6116035 added Neale Pickett's spawn patch, thanks Neale
Anselm R Garbe <garbeam@gmail.com>
parents: 1362
diff changeset
  1652
		resize(c, x, y, w - 2 * c->bw, /* remainder */ ((i + 1 == n)
1443
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
  1653
		       ? m->wy + m->wh - y - 2 * c->bw : h - 2 * c->bw), False);
1397
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1654
		if(h != m->wh)
1360
dc076b2d28d7 removed NOBORDER(broken and badly used), introduce WIDTH/HEIGHT macros for computing client size with border added, fixes bug announced by sergey_m
Premysl Hruby <dfenze@gmail.com>
parents: 1358
diff changeset
  1655
			y = c->y + HEIGHT(c);
1220
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1656
	}
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1657
}
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1658
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  1659
void
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1660
togglebar(const Arg *arg) {
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1661
	selmon->showbar = !selmon->showbar;
1404
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1662
	updatebarpos(selmon);
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1663
	XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1664
	arrange(selmon);
1209
c2dc0bd92158 recent changes, introduced togglebar, changed some defines into variable declarations where possible
Anselm R Garbe <garbeam@gmail.com>
parents: 1207
diff changeset
  1665
}
c2dc0bd92158 recent changes, introduced togglebar, changed some defines into variable declarations where possible
Anselm R Garbe <garbeam@gmail.com>
parents: 1207
diff changeset
  1666
c2dc0bd92158 recent changes, introduced togglebar, changed some defines into variable declarations where possible
Anselm R Garbe <garbeam@gmail.com>
parents: 1207
diff changeset
  1667
void
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1668
togglefloating(const Arg *arg) {
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1669
	if(!selmon->sel)
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1670
		return;
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1671
	selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed;
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1672
	if(selmon->sel->isfloating)
1443
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
  1673
		resize(selmon->sel, selmon->sel->x, selmon->sel->y,
dabe14ecb5e9 interactive resizals allow display dimensions again
Anselm R Garbe <anselm@garbe.us>
parents: 1440
diff changeset
  1674
		       selmon->sel->w, selmon->sel->h, False);
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1675
	arrange(selmon);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1676
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1677
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1678
void
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1679
toggletag(const Arg *arg) {
1480
a52339f25d95 applied Jukka's cosmetic patch
Anselm R Garbe <anselm@garbe.us>
parents: 1479
diff changeset
  1680
	unsigned int newtags;
1288
2b839f9998c8 non-zero
Anselm R Garbe <garbeam@gmail.com>
parents: 1285
diff changeset
  1681
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1682
	if(!selmon->sel)
1338
04c5619da581 applied fix of toggletag by Jan Kaliszewski
Premysl Hruby <dfenze@gmail.com>
parents: 1337
diff changeset
  1683
		return;
1480
a52339f25d95 applied Jukka's cosmetic patch
Anselm R Garbe <anselm@garbe.us>
parents: 1479
diff changeset
  1684
	newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
a52339f25d95 applied Jukka's cosmetic patch
Anselm R Garbe <anselm@garbe.us>
parents: 1479
diff changeset
  1685
	if(newtags) {
a52339f25d95 applied Jukka's cosmetic patch
Anselm R Garbe <anselm@garbe.us>
parents: 1479
diff changeset
  1686
		selmon->sel->tags = newtags;
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1687
		arrange(selmon);
1288
2b839f9998c8 non-zero
Anselm R Garbe <garbeam@gmail.com>
parents: 1285
diff changeset
  1688
	}
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1689
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1690
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1691
void
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1692
toggleview(const Arg *arg) {
1480
a52339f25d95 applied Jukka's cosmetic patch
Anselm R Garbe <anselm@garbe.us>
parents: 1479
diff changeset
  1693
	unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
1288
2b839f9998c8 non-zero
Anselm R Garbe <garbeam@gmail.com>
parents: 1285
diff changeset
  1694
1480
a52339f25d95 applied Jukka's cosmetic patch
Anselm R Garbe <anselm@garbe.us>
parents: 1479
diff changeset
  1695
	if(newtagset) {
a52339f25d95 applied Jukka's cosmetic patch
Anselm R Garbe <anselm@garbe.us>
parents: 1479
diff changeset
  1696
		selmon->tagset[selmon->seltags] = newtagset;
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1697
		arrange(selmon);
1288
2b839f9998c8 non-zero
Anselm R Garbe <garbeam@gmail.com>
parents: 1285
diff changeset
  1698
	}
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1699
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1700
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1701
void
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1702
unfocus(Client *c, Bool setfocus) {
1417
8d447b21ca19 several other focus fixes, introduced unfocus()
Anselm R Garbe <anselm@garbe.us>
parents: 1416
diff changeset
  1703
	if(!c)
8d447b21ca19 several other focus fixes, introduced unfocus()
Anselm R Garbe <anselm@garbe.us>
parents: 1416
diff changeset
  1704
		return;
8d447b21ca19 several other focus fixes, introduced unfocus()
Anselm R Garbe <anselm@garbe.us>
parents: 1416
diff changeset
  1705
	grabbuttons(c, False);
8d447b21ca19 several other focus fixes, introduced unfocus()
Anselm R Garbe <anselm@garbe.us>
parents: 1416
diff changeset
  1706
	XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
1519
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1707
	if(setfocus)
72272822ddf2 implemented better fullscreen handling, please test
Anselm R Garbe <anselm@garbe.us>
parents: 1517
diff changeset
  1708
		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
1417
8d447b21ca19 several other focus fixes, introduced unfocus()
Anselm R Garbe <anselm@garbe.us>
parents: 1416
diff changeset
  1709
}
8d447b21ca19 several other focus fixes, introduced unfocus()
Anselm R Garbe <anselm@garbe.us>
parents: 1416
diff changeset
  1710
8d447b21ca19 several other focus fixes, introduced unfocus()
Anselm R Garbe <anselm@garbe.us>
parents: 1416
diff changeset
  1711
void
1487
430ebd3c0050 renaming isdestroyed into destroyed
Anselm R Garbe <garbeam@gmail.com>
parents: 1486
diff changeset
  1712
unmanage(Client *c, Bool destroyed) {
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1713
	Monitor *m = c->mon;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1714
	XWindowChanges wc;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1715
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1716
	/* The server grab construct avoids race conditions. */
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1717
	detach(c);
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1718
	detachstack(c);
1487
430ebd3c0050 renaming isdestroyed into destroyed
Anselm R Garbe <garbeam@gmail.com>
parents: 1486
diff changeset
  1719
	if(!destroyed) {
1485
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
  1720
		wc.border_width = c->oldbw;
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
  1721
		XGrabServer(dpy);
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
  1722
		XSetErrorHandler(xerrordummy);
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
  1723
		XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
  1724
		XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
  1725
		setclientstate(c, WithdrawnState);
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
  1726
		XSync(dpy, False);
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
  1727
		XSetErrorHandler(xerror);
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
  1728
		XUngrabServer(dpy);
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
  1729
	}
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1730
	free(c);
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1731
	focus(NULL);
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1732
	arrange(m);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1733
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1734
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1735
void
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1736
unmapnotify(XEvent *e) {
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1737
	Client *c;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1738
	XUnmapEvent *ev = &e->xunmap;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1739
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1740
	if((c = wintoclient(ev->window)))
1485
3cde8e2dc511 added isdestroyed flag to unmanage
Anselm R Garbe <garbeam@gmail.com>
parents: 1484
diff changeset
  1741
		unmanage(c, False);
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1742
}
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1743
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1744
void
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1745
updatebars(void) {
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1746
	Monitor *m;
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1747
	XSetWindowAttributes wa;
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1748
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1749
	wa.override_redirect = True;
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1750
	wa.background_pixmap = ParentRelative;
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1751
	wa.event_mask = ButtonPressMask|ExposureMask;
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1752
	for(m = mons; m; m = m->next) {
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1753
		m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen),
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1754
		                          CopyFromParent, DefaultVisual(dpy, screen),
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1755
		                          CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1756
		XDefineCursor(dpy, m->barwin, cursor[CurNormal]);
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1757
		XMapRaised(dpy, m->barwin);
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1758
	}
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1759
}
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1760
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1761
void
1404
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1762
updatebarpos(Monitor *m) {
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1763
	m->wy = m->my;
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1764
	m->wh = m->mh;
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1765
	if(m->showbar) {
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1766
		m->wh -= bh;
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1767
		m->by = m->topbar ? m->wy : m->wy + m->wh;
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1768
		m->wy = m->topbar ? m->wy + bh : m->wy;
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1769
	}
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1770
	else
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1771
		m->by = -bh;
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1772
}
2fd482e3405b some more refactoring, bar toggle fixes
Anselm R Garbe <anselm@garbe.us>
parents: 1403
diff changeset
  1773
1492
62a601261c8b new experimental updategeom() additions that should avoid several problems with Xinerama, this is EXPERIMENTAL and might break something, the algorithms in use are quite complex and cumbersome, patches and comments welcome
Anselm R Garbe <anselm@garbe.us>
parents: 1491
diff changeset
  1774
Bool
1190
c8eaba1445a4 removed Geom stuff, introduced updategeom() again, still view is somewhat broken?
Anselm R Garbe <garbeam@gmail.com>
parents: 1188
diff changeset
  1775
updategeom(void) {
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1776
	Bool dirty = False;
1190
c8eaba1445a4 removed Geom stuff, introduced updategeom() again, still view is somewhat broken?
Anselm R Garbe <garbeam@gmail.com>
parents: 1188
diff changeset
  1777
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1778
#ifdef XINERAMA
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1779
	if(XineramaIsActive(dpy)) {
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1780
		int i, j, n, nn;
1497
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1781
		Client *c;
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1782
		Monitor *m;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1783
		XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1784
		XineramaScreenInfo *unique = NULL;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1785
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1786
		for(n = 0, m = mons; m; m = m->next, n++);
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1787
		/* only consider unique geometries as separate screens */
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1788
		if(!(unique = (XineramaScreenInfo *)malloc(sizeof(XineramaScreenInfo) * nn)))
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1789
			die("fatal: could not malloc() %u bytes\n", sizeof(XineramaScreenInfo) * nn);
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1790
		for(i = 0, j = 0; i < nn; i++)
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1791
			if(isuniquegeom(unique, j, &info[i]))
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1792
				memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo));
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1793
		XFree(info);
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1794
		nn = j;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1795
		if(n <= nn) {
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1796
			for(i = 0; i < (nn - n); i++) { /* new monitors available */
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1797
				for(m = mons; m && m->next; m = m->next);
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1798
				if(m)
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1799
					m->next = createmon();
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1800
				else
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1801
					mons = createmon();
1492
62a601261c8b new experimental updategeom() additions that should avoid several problems with Xinerama, this is EXPERIMENTAL and might break something, the algorithms in use are quite complex and cumbersome, patches and comments welcome
Anselm R Garbe <anselm@garbe.us>
parents: 1491
diff changeset
  1802
			}
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1803
			for(i = 0, m = mons; i < nn && m; m = m->next, i++)
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1804
				if(i >= n
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1805
				|| (unique[i].x_org != m->mx || unique[i].y_org != m->my
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1806
				    || unique[i].width != m->mw || unique[i].height != m->mh))
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1807
				{
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1808
					dirty = True;
1497
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1809
					m->num = i;
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1810
					m->mx = m->wx = unique[i].x_org;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1811
					m->my = m->wy = unique[i].y_org;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1812
					m->mw = m->ww = unique[i].width;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1813
					m->mh = m->wh = unique[i].height;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1814
					updatebarpos(m);
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1815
				}
1311
47b3dbd9a7d3 got rid of compile time xidx configuration, querying mouse pointer instead
Anselm R Garbe <garbeam@gmail.com>
parents: 1310
diff changeset
  1816
		}
1497
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1817
		else { /* less monitors available nn < n */
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1818
			for(i = nn; i < n; i++) {
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1819
				for(m = mons; m && m->next; m = m->next);
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1820
				while(m->clients) {
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1821
					dirty = True;
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1822
					c = m->clients;
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1823
					m->clients = c->next;
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1824
					detachstack(c);
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1825
					c->mon = mons;
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1826
					attach(c);
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1827
					attachstack(c);
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1828
				}
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1829
				if(m == selmon)
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1830
					selmon = mons;
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1831
				cleanupmon(m);
20de01c5ff82 implemented nn < n case, k-zed please recheck
Anselm R Garbe <anselm@garbe.us>
parents: 1496
diff changeset
  1832
			}
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1833
		}
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1834
		free(unique);
1215
840fd59e3141 make it easier for the user, if Xinerama support is given, always use the screen 0 as window area/bar area, everything else can be used for floating clients
Anselm R Garbe <garbeam@gmail.com>
parents: 1213
diff changeset
  1835
	}
840fd59e3141 make it easier for the user, if Xinerama support is given, always use the screen 0 as window area/bar area, everything else can be used for floating clients
Anselm R Garbe <garbeam@gmail.com>
parents: 1213
diff changeset
  1836
	else
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1837
#endif /* XINERAMA */
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1838
	/* default monitor setup */
1215
840fd59e3141 make it easier for the user, if Xinerama support is given, always use the screen 0 as window area/bar area, everything else can be used for floating clients
Anselm R Garbe <garbeam@gmail.com>
parents: 1213
diff changeset
  1839
	{
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1840
		if(!mons)
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1841
			mons = createmon();
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1842
		if(mons->mw != sw || mons->mh != sh) {
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1843
			dirty = True;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1844
			mons->mw = mons->ww = sw;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1845
			mons->mh = mons->wh = sh;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1846
			updatebarpos(mons);
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1847
		}
1402
d0721df4028c changes monitor structure to be a list
Anselm R Garbe <garbeam@gmail.com>
parents: 1401
diff changeset
  1848
	}
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1849
	if(dirty) {
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1850
		selmon = mons;
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1851
		selmon = wintomon(root);
1215
840fd59e3141 make it easier for the user, if Xinerama support is given, always use the screen 0 as window area/bar area, everything else can be used for floating clients
Anselm R Garbe <garbeam@gmail.com>
parents: 1213
diff changeset
  1852
	}
1494
e00cb20da182 implemented different version of updategeom
Anselm R Garbe <anselm@garbe.us>
parents: 1493
diff changeset
  1853
	return dirty;
1190
c8eaba1445a4 removed Geom stuff, introduced updategeom() again, still view is somewhat broken?
Anselm R Garbe <garbeam@gmail.com>
parents: 1188
diff changeset
  1854
}
c8eaba1445a4 removed Geom stuff, introduced updategeom() again, still view is somewhat broken?
Anselm R Garbe <garbeam@gmail.com>
parents: 1188
diff changeset
  1855
c8eaba1445a4 removed Geom stuff, introduced updategeom() again, still view is somewhat broken?
Anselm R Garbe <garbeam@gmail.com>
parents: 1188
diff changeset
  1856
void
1344
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1857
updatenumlockmask(void) {
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1858
	unsigned int i, j;
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1859
	XModifierKeymap *modmap;
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1860
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1861
	numlockmask = 0;
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1862
	modmap = XGetModifierMapping(dpy);
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1863
	for(i = 0; i < 8; i++)
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1864
		for(j = 0; j < modmap->max_keypermod; j++)
1395
a2c094196714 next version will be 5.6, shortened some very long lines
Anselm R Garbe <garbeam@gmail.com>
parents: 1393
diff changeset
  1865
			if(modmap->modifiermap[i * modmap->max_keypermod + j]
a2c094196714 next version will be 5.6, shortened some very long lines
Anselm R Garbe <garbeam@gmail.com>
parents: 1393
diff changeset
  1866
			   == XKeysymToKeycode(dpy, XK_Num_Lock))
1344
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1867
				numlockmask = (1 << i);
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1868
	XFreeModifiermap(modmap);
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1869
}
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1870
ba02dda36aee grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
Anselm R Garbe <garbeam@gmail.com>
parents: 1343
diff changeset
  1871
void
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1872
updatesizehints(Client *c) {
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1873
	long msize;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1874
	XSizeHints size;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1875
1357
33591b7c6bf7 applied XGetWMNormalHints fix
Anselm R Garbe <garbeam@gmail.com>
parents: 1356
diff changeset
  1876
	if(!XGetWMNormalHints(dpy, c->win, &size, &msize))
33591b7c6bf7 applied XGetWMNormalHints fix
Anselm R Garbe <garbeam@gmail.com>
parents: 1356
diff changeset
  1877
		/* size is uninitialized, ensure that size.flags aren't used */
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1878
		size.flags = PSize;
1249
1fcb3350609d applied noviewprev.diff, fix.diff and unusedflags.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1248
diff changeset
  1879
	if(size.flags & PBaseSize) {
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1880
		c->basew = size.base_width;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1881
		c->baseh = size.base_height;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1882
	}
1249
1fcb3350609d applied noviewprev.diff, fix.diff and unusedflags.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1248
diff changeset
  1883
	else if(size.flags & PMinSize) {
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1884
		c->basew = size.min_width;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1885
		c->baseh = size.min_height;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1886
	}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1887
	else
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1888
		c->basew = c->baseh = 0;
1249
1fcb3350609d applied noviewprev.diff, fix.diff and unusedflags.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1248
diff changeset
  1889
	if(size.flags & PResizeInc) {
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1890
		c->incw = size.width_inc;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1891
		c->inch = size.height_inc;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1892
	}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1893
	else
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1894
		c->incw = c->inch = 0;
1249
1fcb3350609d applied noviewprev.diff, fix.diff and unusedflags.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1248
diff changeset
  1895
	if(size.flags & PMaxSize) {
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1896
		c->maxw = size.max_width;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1897
		c->maxh = size.max_height;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1898
	}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1899
	else
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1900
		c->maxw = c->maxh = 0;
1249
1fcb3350609d applied noviewprev.diff, fix.diff and unusedflags.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1248
diff changeset
  1901
	if(size.flags & PMinSize) {
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1902
		c->minw = size.min_width;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1903
		c->minh = size.min_height;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1904
	}
1249
1fcb3350609d applied noviewprev.diff, fix.diff and unusedflags.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1248
diff changeset
  1905
	else if(size.flags & PBaseSize) {
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1906
		c->minw = size.base_width;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1907
		c->minh = size.base_height;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1908
	}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1909
	else
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1910
		c->minw = c->minh = 0;
1249
1fcb3350609d applied noviewprev.diff, fix.diff and unusedflags.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1248
diff changeset
  1911
	if(size.flags & PAspect) {
1466
aa47da304ae2 it's all nsz's hard investigation effort, hail nsz! ;)
Anselm R Garbe <garbeam@gmail.com>
parents: 1464
diff changeset
  1912
		c->mina = (float)size.min_aspect.y / size.min_aspect.x;
aa47da304ae2 it's all nsz's hard investigation effort, hail nsz! ;)
Anselm R Garbe <garbeam@gmail.com>
parents: 1464
diff changeset
  1913
		c->maxa = (float)size.max_aspect.x / size.max_aspect.y;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1914
	}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1915
	else
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1916
		c->maxa = c->mina = 0.0;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1917
	c->isfixed = (c->maxw && c->minw && c->maxh && c->minh
1354
dced80b409d8 applied Martin Hurton's checkotherwm simplification
Anselm R Garbe <garbeam@gmail.com>
parents: 1353
diff changeset
  1918
	             && c->maxw == c->minw && c->maxh == c->minh);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1919
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1920
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1921
void
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1922
updatetitle(Client *c) {
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1923
	if(!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name))
1345
169467e68992 WM_NAME is builtin atom
Premysl Hruby <dfenze@gmail.com>
parents: 1344
diff changeset
  1924
		gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name);
1460
606761ddf6d6 mark broken clients as broken
anselm@x200s.config
parents: 1459
diff changeset
  1925
	if(c->name[0] == '\0') /* hack to mark broken clients */
606761ddf6d6 mark broken clients as broken
anselm@x200s.config
parents: 1459
diff changeset
  1926
		strcpy(c->name, broken);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1927
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1928
1080
9bfb57c89407 implemented urgent hint handling (with multihead support)
anselm@aab
parents: 1079
diff changeset
  1929
void
1425
120ed5f8018b fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals
Anselm R Garbe <anselm@garbe.us>
parents: 1424
diff changeset
  1930
updatestatus(void) {
1370
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
  1931
	if(!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
  1932
		strcpy(stext, "dwm-"VERSION);
1398
597063a22a73 experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e
Anselm R Garbe <anselm@garbe.us>
parents: 1397
diff changeset
  1933
	drawbar(selmon);
1370
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
  1934
}
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
  1935
6d6ed7a9183c applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly
a@null
parents: 1369
diff changeset
  1936
void
1080
9bfb57c89407 implemented urgent hint handling (with multihead support)
anselm@aab
parents: 1079
diff changeset
  1937
updatewmhints(Client *c) {
9bfb57c89407 implemented urgent hint handling (with multihead support)
anselm@aab
parents: 1079
diff changeset
  1938
	XWMHints *wmh;
9bfb57c89407 implemented urgent hint handling (with multihead support)
anselm@aab
parents: 1079
diff changeset
  1939
9bfb57c89407 implemented urgent hint handling (with multihead support)
anselm@aab
parents: 1079
diff changeset
  1940
	if((wmh = XGetWMHints(dpy, c->win))) {
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  1941
		if(c == selmon->sel && wmh->flags & XUrgencyHint) {
1309
3affae730034 applied anydot's urgency hint patch, thanks!
anselm@aab
parents: 1308
diff changeset
  1942
			wmh->flags &= ~XUrgencyHint;
3affae730034 applied anydot's urgency hint patch, thanks!
anselm@aab
parents: 1308
diff changeset
  1943
			XSetWMHints(dpy, c->win, wmh);
3affae730034 applied anydot's urgency hint patch, thanks!
anselm@aab
parents: 1308
diff changeset
  1944
		}
1122
6f93af279e0a fixed urgent hint handling
Anselm R Garbe <garbeam@gmail.com>
parents: 1121
diff changeset
  1945
		else
6f93af279e0a fixed urgent hint handling
Anselm R Garbe <garbeam@gmail.com>
parents: 1121
diff changeset
  1946
			c->isurgent = (wmh->flags & XUrgencyHint) ? True : False;
1080
9bfb57c89407 implemented urgent hint handling (with multihead support)
anselm@aab
parents: 1079
diff changeset
  1947
		XFree(wmh);
9bfb57c89407 implemented urgent hint handling (with multihead support)
anselm@aab
parents: 1079
diff changeset
  1948
	}
9bfb57c89407 implemented urgent hint handling (with multihead support)
anselm@aab
parents: 1079
diff changeset
  1949
}
9bfb57c89407 implemented urgent hint handling (with multihead support)
anselm@aab
parents: 1079
diff changeset
  1950
1104
167446962e09 simplified dwm
anselm@anselm1
parents: 1103
diff changeset
  1951
void
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  1952
view(const Arg *arg) {
1401
8cee6e329111 we need a tagset per monitor, removed tagset declaration from config.h
Anselm R Garbe <anselm@garbe.us>
parents: 1400
diff changeset
  1953
	if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
1304
ef3327d0517a minor fix to view()
Anselm R Garbe <garbeam@gmail.com>
parents: 1303
diff changeset
  1954
		return;
1397
4498d81938b0 introduction of Monitor for better Xinerama support, work in progress
Anselm R Garbe <anselm@garbe.us>
parents: 1396
diff changeset
  1955
	selmon->seltags ^= 1; /* toggle sel tagset */
1327
920833e10274 applied Martin Hurton's view() simplification, not checking arg
Anselm R Garbe <garbeam@gmail.com>
parents: 1326
diff changeset
  1956
	if(arg->ui & TAGMASK)
1401
8cee6e329111 we need a tagset per monitor, removed tagset declaration from config.h
Anselm R Garbe <anselm@garbe.us>
parents: 1400
diff changeset
  1957
		selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  1958
	arrange(selmon);
1104
167446962e09 simplified dwm
anselm@anselm1
parents: 1103
diff changeset
  1959
}
167446962e09 simplified dwm
anselm@anselm1
parents: 1103
diff changeset
  1960
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1961
Client *
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1962
wintoclient(Window w) {
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1963
	Client *c;
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1964
	Monitor *m;
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1965
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1966
	for(m = mons; m; m = m->next)
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1967
		for(c = m->clients; c; c = c->next)
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1968
			if(c->win == w)
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1969
				return c;
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1970
	return NULL;
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1971
}
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1972
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1973
Monitor *
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1974
wintomon(Window w) {
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1975
	int x, y;
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1976
	Client *c;
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1977
	Monitor *m;
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1978
1450
b2d18a052137 some minor changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1449
diff changeset
  1979
	if(w == root && getrootptr(&x, &y))
b2d18a052137 some minor changes
Anselm R Garbe <garbeam@gmail.com>
parents: 1449
diff changeset
  1980
		return ptrtomon(x, y);
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1981
	for(m = mons; m; m = m->next)
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1982
		if(w == m->barwin)
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1983
			return m;
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1984
	if((c = wintoclient(w)))
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1985
		return c->mon;
1438
9e3da779b59b minor fix
Anselm R Garbe <garbeam@gmail.com>
parents: 1437
diff changeset
  1986
	return selmon;
1430
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1987
}
c4b9f97e4bd7 several simplifications
Anselm R Garbe <anselm@garbe.us>
parents: 1429
diff changeset
  1988
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1989
/* There's no way to check accesses to destroyed windows, thus those cases are
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1990
 * ignored (especially on UnmapNotify's).  Other types of errors call Xlibs
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  1991
 * default error handler, which may call exit.  */
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  1992
int
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1993
xerror(Display *dpy, XErrorEvent *ee) {
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1994
	if(ee->error_code == BadWindow
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1995
	|| (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch)
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1996
	|| (ee->request_code == X_PolyText8 && ee->error_code == BadDrawable)
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1997
	|| (ee->request_code == X_PolyFillRectangle && ee->error_code == BadDrawable)
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1998
	|| (ee->request_code == X_PolySegment && ee->error_code == BadDrawable)
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  1999
	|| (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch)
1186
48ffaf800504 applied JUCE patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1185
diff changeset
  2000
	|| (ee->request_code == X_GrabButton && ee->error_code == BadAccess)
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2001
	|| (ee->request_code == X_GrabKey && ee->error_code == BadAccess)
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2002
	|| (ee->request_code == X_CopyArea && ee->error_code == BadDrawable))
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2003
		return 0;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2004
	fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n",
1195
33ba827ee84e applied nsz's style.diff patch
Anselm R Garbe <garbeam@gmail.com>
parents: 1194
diff changeset
  2005
			ee->request_code, ee->error_code);
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2006
	return xerrorxlib(dpy, ee); /* may call exit */
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2007
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2008
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  2009
int
1102
239f5ee65766 pushing my changes of tonight upstream (hg tip is NOW very UNSTABLE -- but those changes are necessary to get a decent multihead support) -- I renamed Monitor into View, to reflect in a better way the dwm terminology of the past
anselm@anselm1
parents: 1101
diff changeset
  2010
xerrordummy(Display *dpy, XErrorEvent *ee) {
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  2011
	return 0;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2012
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2013
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  2014
/* Startup Error handler to check if another window manager
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  2015
 * is already running. */
1001
2477f818215c made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
arg@suckless.org
parents: 1000
diff changeset
  2016
int
1102
239f5ee65766 pushing my changes of tonight upstream (hg tip is NOW very UNSTABLE -- but those changes are necessary to get a decent multihead support) -- I renamed Monitor into View, to reflect in a better way the dwm terminology of the past
anselm@anselm1
parents: 1101
diff changeset
  2017
xerrorstart(Display *dpy, XErrorEvent *ee) {
996
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  2018
	otherwm = True;
b4d47b6a8ba8 ordered all functions alphabetically
Anselm R. Garbe <garbeam@gmail.com>
parents: 995
diff changeset
  2019
	return -1;
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2020
}
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2021
1220
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  2022
void
1260
2d3d08d2dd19 applied anydot's patchset.diff
Anselm R Garbe <garbeam@gmail.com>
parents: 1259
diff changeset
  2023
zoom(const Arg *arg) {
1407
4cbf60555bd8 moved clients/stack/sel to Monitor, that's a per monitor structure from now on
Anselm R Garbe <anselm@garbe.us>
parents: 1406
diff changeset
  2024
	Client *c = selmon->sel;
1220
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  2025
1448
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
  2026
	if(!selmon->lt[selmon->sellt]->arrange
d012c6babc13 applied Mate's patch, added Mate to LICENSE
Anselm R Garbe <anselm@garbe.us>
parents: 1447
diff changeset
  2027
	|| selmon->lt[selmon->sellt]->arrange == monocle
1444
19dc2b0c61e2 removed some empty lines
Anselm R Garbe <anselm@garbe.us>
parents: 1443
diff changeset
  2028
	|| (selmon->sel && selmon->sel->isfloating))
1227
1f0e2de78c35 s/nextunfloating/nexttiled/, changed zoom() behavior
Anselm R Garbe <garbeam@gmail.com>
parents: 1226
diff changeset
  2029
		return;
1408
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
  2030
	if(c == nexttiled(selmon->clients))
2215f7f11dd9 simplified ISVISBLE and nexttiled
Anselm R Garbe <anselm@garbe.us>
parents: 1407
diff changeset
  2031
		if(!c || !(c = nexttiled(c->next)))
1220
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  2032
			return;
1227
1f0e2de78c35 s/nextunfloating/nexttiled/, changed zoom() behavior
Anselm R Garbe <garbeam@gmail.com>
parents: 1226
diff changeset
  2033
	detach(c);
1f0e2de78c35 s/nextunfloating/nexttiled/, changed zoom() behavior
Anselm R Garbe <garbeam@gmail.com>
parents: 1226
diff changeset
  2034
	attach(c);
1f0e2de78c35 s/nextunfloating/nexttiled/, changed zoom() behavior
Anselm R Garbe <garbeam@gmail.com>
parents: 1226
diff changeset
  2035
	focus(c);
1500
48c3f87c335d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
Anselm R Garbe <anselm@garbe.us>
parents: 1497
diff changeset
  2036
	arrange(c->mon);
1220
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  2037
}
6603d83d133d merged tile.c again into dwm.c
anselm@anselm1
parents: 1219
diff changeset
  2038
1072
5a06b4b69479 merged Christof Musik's Xinerama support patches, though this needs some polishing!
anselm@anselm1
parents: 1071
diff changeset
  2039
int
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2040
main(int argc, char *argv[]) {
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2041
	if(argc == 2 && !strcmp("-v", argv[1]))
1515
60ea8fed13ab removed DEBUG code and added 2010 to the copyright list
anselm@garbe.us
parents: 1514
diff changeset
  2042
		die("dwm-"VERSION", © 2006-2010 dwm engineers, see LICENSE for details\n");
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2043
	else if(argc != 1)
1308
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
  2044
		die("usage: dwm [-v]\n");
1343
f4707b7bd3a2 reverted some resize() changes, reverted setlocale removal
Anselm R Garbe <garbeam@gmail.com>
parents: 1342
diff changeset
  2045
	if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
1387
dbcd0ffca535 applied Gottox' adjustborder removal patch (thanks!)
Anselm R Garbe <garbeam@gmail.com>
parents: 1386
diff changeset
  2046
		fputs("warning: no locale support\n", stderr);
1389
b4e7c220422d some NULL fixes
Anselm R Garbe <garbeam@gmail.com>
parents: 1388
diff changeset
  2047
	if(!(dpy = XOpenDisplay(NULL)))
1308
978d14197052 renamed eprint die
Anselm R Garbe <garbeam@gmail.com>
parents: 1307
diff changeset
  2048
		die("dwm: cannot open display\n");
997
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
  2049
	checkotherwm();
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2050
	setup();
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2051
	scan();
997
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
  2052
	run();
8e721021e636 some more rearrangements
Anselm R. Garbe <garbeam@gmail.com>
parents: 996
diff changeset
  2053
	cleanup();
990
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2054
	XCloseDisplay(dpy);
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2055
	return 0;
70f6fcd100b7 micromizing dwm step 1
Anselm R. Garbe <garbeam@gmail.com>
parents:
diff changeset
  2056
}