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