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