diff options
| author | moetunes <moetunes111@gmail.com> | 2011-11-26 10:10:52 +1000 |
|---|---|---|
| committer | moetunes <moetunes111@gmail.com> | 2011-11-26 10:10:52 +1000 |
| commit | c7890dd59f6e0c9cd58bf30ba3ca290f392fa8c8 (patch) | |
| tree | 6bcac8ee7637afbe016f8b962a42a5a59045b127 | |
| parent | 544de8a8e3d2940043b982454fa80340a7461f21 (diff) | |
Added a click to focus option
| -rw-r--r-- | src/ChangeLog | 3 | ||||
| -rw-r--r-- | src/Makefile | 2 | ||||
| -rw-r--r-- | src/README | 8 | ||||
| -rw-r--r-- | src/config.h.def | 3 | ||||
| -rw-r--r-- | src/dminiwm.c | 25 |
5 files changed, 33 insertions, 8 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index c960952..f3a549b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,6 @@ +26/11/11 + Added option to click on a window to focus it + 21/11/11 Fix for transient windows not being managed diff --git a/src/Makefile b/src/Makefile index 55332f9..0316713 100644 --- a/src/Makefile +++ b/src/Makefile @@ -11,7 +11,7 @@ CC=gcc all: $(EXEC) dminiwm: dminiwm.o - $(CC) $(LDFLAGS) -Os -o $@ $+ $(LDADD) + $(CC) $(LDFLAGS) -s -Os -o $@ $+ $(LDADD) install: all install -Dm 755 dminiwm $(DESTDIR)$(BINDIR)/dminiwm @@ -12,7 +12,7 @@ Screenshots and ramblings/updates at https://bbs.archlinux.org/viewtopic.php?id= **dminiwm** is a very minimal and lightweight dynamic tiling window manager. I will try to stay under 1000 SLOC. - Currently under 900 lines with the config file included. + Currently under 950 lines with the config file included. ###Modes @@ -60,9 +60,8 @@ It allows the "normal" method of tiling window managers(with the new window as t ###Recent Changes -------------- -15/10/11 - Added having applications open on specified desktop - +26/11/11 + Added a click to focus option ###Status ------ @@ -76,6 +75,7 @@ There are more options in the config file than the original catwm. * Fixed a window being destroyed on another desktop creating ghost windows. * Added ability to resize the window on the top of the stack * Added having applications open on specified desktop + * Added a click to focus option ###Installation diff --git a/src/config.h.def b/src/config.h.def index fed94d4..e50253e 100644 --- a/src/config.h.def +++ b/src/config.h.def @@ -1,4 +1,4 @@ - /* config.h for dminiwm.c [ 0.1.7 ] + /* config.h for dminiwm.c [ 0.1.8 ] * * Started from catwm 31/12/10 * Bad window error checking and numlock checking used from @@ -35,6 +35,7 @@ #define DEFAULT_MODE 0 /* 0=Vertical, 1=Fullscreen 2=Horizontal 3=grid*/ #define FOLLOW_MOUSE 0 /* 1=Don't 0=Focus the window the mouse just entered */ #define FOLLOW_WINDOW 0 /* 1=Don't 0=Follow the window when moved to a different desktop */ +#define CLICK_TO_FOCUS 0 /* 1=Don't 0=Focus an unfocused window when clicked */ #define DESKTOPS 6 /* Must edit DESKTOPCHANGE keys to suit */ // Colors diff --git a/src/dminiwm.c b/src/dminiwm.c index 1c1b0ff..d25f05b 100644 --- a/src/dminiwm.c +++ b/src/dminiwm.c @@ -1,4 +1,4 @@ -/* dminiwm.c [ 0.1.7 ] +/* dminiwm.c [ 0.1.8 ] * * I started this from catwm 31/12/10 * Bad window error checking and numlock checking used from @@ -97,6 +97,7 @@ static const AtomNode atomList[] = { // Functions static void add_window(Window w); +static void buttonpressed(XEvent *e); static void change_desktop(const Arg arg); static void client_to_desktop(const Arg arg); static void configurenotify(XEvent *e); @@ -161,6 +162,7 @@ static void (*events[LASTEvent])(XEvent *e) = { [KeyPress] = keypress, [MapRequest] = maprequest, [EnterNotify] = enternotify, + [ButtonPress] = buttonpressed, [DestroyNotify] = destroynotify, [ConfigureNotify] = configurenotify, [ConfigureRequest] = configurerequest @@ -571,9 +573,14 @@ void update_current() { XSetWindowBorder(dis,c->win,win_focus); XSetInputFocus(dis,c->win,RevertToParent,CurrentTime); XRaiseWindow(dis,c->win); + if(CLICK_TO_FOCUS == 0) + XUngrabButton(dis, AnyButton, AnyModifier, c->win); } - else + else { XSetWindowBorder(dis,c->win,win_unfocus); + if(CLICK_TO_FOCUS == 0) + XGrabButton(dis, AnyButton, AnyModifier, c->win, True, ButtonPressMask|ButtonReleaseMask, GrabModeAsync, GrabModeAsync, None, None); + } } XSync(dis, False); } @@ -805,6 +812,20 @@ void enternotify(XEvent *e) { } } +void buttonpressed(XEvent *e) { + client *c; + XButtonPressedEvent *ev = &e->xbutton; + + // change focus with LMB + if(CLICK_TO_FOCUS == 0 && ev->window != current->win && ev->button == Button1) + for(c=head;c;c=c->next) + if(ev->window == c->win) { + current = c; + update_current(); + return; + } +} + void send_kill_signal(Window w) { XEvent ke; ke.type = ClientMessage; |
