Permalink
Browse files

Added a click to focus option

  • Loading branch information...
1 parent 544de8a commit c7890dd59f6e0c9cd58bf30ba3ca290f392fa8c8 @moetunes moetunes committed Nov 26, 2011
Showing with 33 additions and 8 deletions.
  1. +3 −0 src/ChangeLog
  2. +1 −1 src/Makefile
  3. +4 −4 src/README
  4. +2 −1 src/config.h.def
  5. +23 −2 src/dminiwm.c
View
@@ -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
View
@@ -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
View
@@ -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
View
@@ -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
View
@@ -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;

0 comments on commit c7890dd

Please sign in to comment.