sites

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

dwm-focusonclick-20200110-61bb8b2.diff (3736B)


      1 From 7ac0b812540e21b470f2f6947c6cc1e30bf24b42 Mon Sep 17 00:00:00 2001
      2 From: iofq <cjriddz@protonmail.com>
      3 Date: Sun, 10 Jan 2021 22:43:16 -0600
      4 Subject: [PATCH] tweak fixes floating window mouse controls
      5 
      6 ---
      7  config.def.h |  1 +
      8  dwm.c        | 47 ++++-------------------------------------------
      9  2 files changed, 5 insertions(+), 43 deletions(-)
     10 
     11 diff --git a/config.def.h b/config.def.h
     12 index 1c0b587..4f2c946 100644
     13 --- a/config.def.h
     14 +++ b/config.def.h
     15 @@ -5,6 +5,7 @@ static const unsigned int borderpx  = 1;        /* border pixel of windows */
     16  static const unsigned int snap      = 32;       /* snap pixel */
     17  static const int showbar            = 1;        /* 0 means no bar */
     18  static const int topbar             = 1;        /* 0 means bottom bar */
     19 +static const int focusonwheel       = 0;
     20  static const char *fonts[]          = { "monospace:size=10" };
     21  static const char dmenufont[]       = "monospace:size=10";
     22  static const char col_gray1[]       = "#222222";
     23 diff --git a/dwm.c b/dwm.c
     24 index 664c527..de3e883 100644
     25 --- a/dwm.c
     26 +++ b/dwm.c
     27 @@ -163,7 +163,6 @@ static void detachstack(Client *c);
     28  static Monitor *dirtomon(int dir);
     29  static void drawbar(Monitor *m);
     30  static void drawbars(void);
     31 -static void enternotify(XEvent *e);
     32  static void expose(XEvent *e);
     33  static void focus(Client *c);
     34  static void focusin(XEvent *e);
     35 @@ -182,7 +181,6 @@ static void manage(Window w, XWindowAttributes *wa);
     36  static void mappingnotify(XEvent *e);
     37  static void maprequest(XEvent *e);
     38  static void monocle(Monitor *m);
     39 -static void motionnotify(XEvent *e);
     40  static void movemouse(const Arg *arg);
     41  static Client *nexttiled(Client *c);
     42  static void pop(Client *);
     43 @@ -250,13 +248,11 @@ static void (*handler[LASTEvent]) (XEvent *) = {
     44  	[ConfigureRequest] = configurerequest,
     45  	[ConfigureNotify] = configurenotify,
     46  	[DestroyNotify] = destroynotify,
     47 -	[EnterNotify] = enternotify,
     48  	[Expose] = expose,
     49  	[FocusIn] = focusin,
     50  	[KeyPress] = keypress,
     51  	[MappingNotify] = mappingnotify,
     52  	[MapRequest] = maprequest,
     53 -	[MotionNotify] = motionnotify,
     54  	[PropertyNotify] = propertynotify,
     55  	[UnmapNotify] = unmapnotify
     56  };
     57 @@ -425,7 +421,8 @@ buttonpress(XEvent *e)
     58  
     59  	click = ClkRootWin;
     60  	/* focus monitor if necessary */
     61 -	if ((m = wintomon(ev->window)) && m != selmon) {
     62 +	if ((m = wintomon(ev->window)) && m != selmon
     63 +	    && (focusonwheel || (ev->button != Button4 && ev->button != Button5))) {
     64  		unfocus(selmon->sel, 1);
     65  		selmon = m;
     66  		focus(NULL);
     67 @@ -445,8 +442,8 @@ buttonpress(XEvent *e)
     68  		else
     69  			click = ClkWinTitle;
     70  	} else if ((c = wintoclient(ev->window))) {
     71 -		focus(c);
     72 -		restack(selmon);
     73 +		if (focusonwheel || (ev->button != Button4 && ev->button != Button5))
     74 +			focus(c);
     75  		XAllowEvents(dpy, ReplayPointer, CurrentTime);
     76  		click = ClkClientWin;
     77  	}
     78 @@ -752,25 +749,6 @@ drawbars(void)
     79  		drawbar(m);
     80  }
     81  
     82 -void
     83 -enternotify(XEvent *e)
     84 -{
     85 -	Client *c;
     86 -	Monitor *m;
     87 -	XCrossingEvent *ev = &e->xcrossing;
     88 -
     89 -	if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root)
     90 -		return;
     91 -	c = wintoclient(ev->window);
     92 -	m = c ? c->mon : wintomon(ev->window);
     93 -	if (m != selmon) {
     94 -		unfocus(selmon->sel, 1);
     95 -		selmon = m;
     96 -	} else if (!c || c == selmon->sel)
     97 -		return;
     98 -	focus(c);
     99 -}
    100 -
    101  void
    102  expose(XEvent *e)
    103  {
    104 @@ -1116,23 +1094,6 @@ monocle(Monitor *m)
    105  		resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0);
    106  }
    107  
    108 -void
    109 -motionnotify(XEvent *e)
    110 -{
    111 -	static Monitor *mon = NULL;
    112 -	Monitor *m;
    113 -	XMotionEvent *ev = &e->xmotion;
    114 -
    115 -	if (ev->window != root)
    116 -		return;
    117 -	if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) {
    118 -		unfocus(selmon->sel, 1);
    119 -		selmon = m;
    120 -		focus(NULL);
    121 -	}
    122 -	mon = m;
    123 -}
    124 -
    125  void
    126  movemouse(const Arg *arg)
    127  {
    128 -- 
    129 2.30.0
    130