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