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