sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

dwm-focusonclick-20171030-6aa8e37.diff (3819B)


      1 diff --git a/config.def.h b/config.def.h
      2 index a9ac303..1f8dc9a 100644
      3 --- a/config.def.h
      4 +++ b/config.def.h
      5 @@ -5,6 +5,7 @@ static const unsigned int borderpx  = 1;        /* border pixel of windows */
      6  static const unsigned int snap      = 32;       /* snap pixel */
      7  static const int showbar            = 1;        /* 0 means no bar */
      8  static const int topbar             = 1;        /* 0 means bottom bar */
      9 +static const int focusonwheel       = 0;
     10  static const char *fonts[]          = { "monospace:size=10" };
     11  static const char dmenufont[]       = "monospace:size=10";
     12  static const char col_gray1[]       = "#222222";
     13 diff --git a/dwm.c b/dwm.c
     14 index 4782343..4e9296d 100644
     15 --- a/dwm.c
     16 +++ b/dwm.c
     17 @@ -164,7 +164,6 @@ static void detachstack(Client *c);
     18  static Monitor *dirtomon(int dir);
     19  static void drawbar(Monitor *m);
     20  static void drawbars(void);
     21 -static void enternotify(XEvent *e);
     22  static void expose(XEvent *e);
     23  static void focus(Client *c);
     24  static void focusin(XEvent *e);
     25 @@ -182,7 +181,6 @@ static void manage(Window w, XWindowAttributes *wa);
     26  static void mappingnotify(XEvent *e);
     27  static void maprequest(XEvent *e);
     28  static void monocle(Monitor *m);
     29 -static void motionnotify(XEvent *e);
     30  static void movemouse(const Arg *arg);
     31  static Client *nexttiled(Client *c);
     32  static void pop(Client *);
     33 @@ -250,13 +248,11 @@ static void (*handler[LASTEvent]) (XEvent *) = {
     34  	[ConfigureRequest] = configurerequest,
     35  	[ConfigureNotify] = configurenotify,
     36  	[DestroyNotify] = destroynotify,
     37 -	[EnterNotify] = enternotify,
     38  	[Expose] = expose,
     39  	[FocusIn] = focusin,
     40  	[KeyPress] = keypress,
     41  	[MappingNotify] = mappingnotify,
     42  	[MapRequest] = maprequest,
     43 -	[MotionNotify] = motionnotify,
     44  	[PropertyNotify] = propertynotify,
     45  	[UnmapNotify] = unmapnotify
     46  };
     47 @@ -425,7 +421,8 @@ buttonpress(XEvent *e)
     48  
     49  	click = ClkRootWin;
     50  	/* focus monitor if necessary */
     51 -	if ((m = wintomon(ev->window)) && m != selmon) {
     52 +	if ((m = wintomon(ev->window)) && m != selmon
     53 +	    && (focusonwheel || (ev->button != Button4 && ev->button != Button5))) {
     54  		unfocus(selmon->sel, 1);
     55  		selmon = m;
     56  		focus(NULL);
     57 @@ -445,10 +442,10 @@ buttonpress(XEvent *e)
     58  		else
     59  			click = ClkWinTitle;
     60  	} else if ((c = wintoclient(ev->window))) {
     61 -		focus(c);
     62 -		restack(selmon);
     63 -		XAllowEvents(dpy, ReplayPointer, CurrentTime);
     64 -		click = ClkClientWin;
     65 + 		if (focusonwheel || (ev->button != Button4 && ev->button != Button5))
     66 + 			focus(c);
     67 + 		XAllowEvents(dpy, ReplayPointer, CurrentTime);
     68 + 		click = ClkClientWin;
     69  	}
     70  	for (i = 0; i < LENGTH(buttons); i++)
     71  		if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
     72 @@ -753,25 +750,6 @@ drawbars(void)
     73  }
     74  
     75  void
     76 -enternotify(XEvent *e)
     77 -{
     78 -	Client *c;
     79 -	Monitor *m;
     80 -	XCrossingEvent *ev = &e->xcrossing;
     81 -
     82 -	if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root)
     83 -		return;
     84 -	c = wintoclient(ev->window);
     85 -	m = c ? c->mon : wintomon(ev->window);
     86 -	if (m != selmon) {
     87 -		unfocus(selmon->sel, 1);
     88 -		selmon = m;
     89 -	} else if (!c || c == selmon->sel)
     90 -		return;
     91 -	focus(c);
     92 -}
     93 -
     94 -void
     95  expose(XEvent *e)
     96  {
     97  	Monitor *m;
     98 @@ -943,7 +921,7 @@ grabbuttons(Client *c, int focused)
     99  					XGrabButton(dpy, buttons[i].button,
    100  						buttons[i].mask | modifiers[j],
    101  						c->win, False, BUTTONMASK,
    102 -						GrabModeAsync, GrabModeSync, None, None);
    103 +						GrabModeSync, GrabModeSync, None, None);
    104  	}
    105  }
    106  
    107 @@ -1118,23 +1096,6 @@ monocle(Monitor *m)
    108  }
    109  
    110  void
    111 -motionnotify(XEvent *e)
    112 -{
    113 -	static Monitor *mon = NULL;
    114 -	Monitor *m;
    115 -	XMotionEvent *ev = &e->xmotion;
    116 -
    117 -	if (ev->window != root)
    118 -		return;
    119 -	if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) {
    120 -		unfocus(selmon->sel, 1);
    121 -		selmon = m;
    122 -		focus(NULL);
    123 -	}
    124 -	mon = m;
    125 -}
    126 -
    127 -void
    128  movemouse(const Arg *arg)
    129  {
    130  	int x, y, ocx, ocy, nx, ny;