dwm-5.8-gestures.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-5.8-gestures.diff (2356B)
       ---
            1 diff dwm-5.8.2/config.h dwm-5.8.2mod/config.h
            2 92a93
            3 >         { ClkWinTitle,          0,              Button3,        startgesture,   {0} },
            4 100a102,113
            5 > };
            6 > 
            7 > //may want to reuse the architecture present in buttons[] and keys[]
            8 > static Gesture gestures[] = {
            9 >         {"dl", spawn, SHCMD("konqueror") },
           10 >         {"dr", spawn, SHCMD("pidgin" ) },
           11 >         {"l",  spawn, SHCMD("xterm") },
           12 >         {"ld", spawn, SHCMD("gimp" ) },
           13 >         {"lr", spawn, SHCMD("google-chrome") },
           14 >         {"r" , spawn, SHCMD("firefox") },
           15 >         {"rl", spawn, SHCMD("pavucontrol") },
           16 >         {"du", spawn, SHCMD("kate") },
           17 Only in dwm-5.8.2mod: config.h~
           18 Binary files dwm-5.8.2/dwm and dwm-5.8.2mod/dwm differ
           19 diff dwm-5.8.2/dwm.c dwm-5.8.2mod/dwm.c
           20 73a74,79
           21 >         char *name;
           22 >         void (*func)(const Arg *arg);
           23 >         const Arg arg;
           24 > } Gesture;
           25 > 
           26 > typedef struct {
           27 244a251
           28 > static void startgesture(const Arg *arg);
           29 1248a1256,1318
           30 > 
           31 > void
           32 > startgesture(const Arg *arg) {
           33 >         int x, y, dx, dy, q;
           34 >         int valid=0, listpos=0, gestpos=0, count=0;
           35 >         char move, currGest[10];
           36 >         XEvent ev;
           37 >         
           38 >         if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
           39 >                 None, cursor[CurMove], CurrentTime) != GrabSuccess)
           40 >                 return;
           41 >         if(!getrootptr(&x, &y))
           42 >                 return;
           43 >         do {
           44 >                 XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
           45 >                 switch (ev.type) {
           46 >                         case ConfigureRequest:
           47 >                         case Expose:
           48 >                         case MapRequest:
           49 >                                 handler[ev.type](&ev);
           50 >                                 break;
           51 >                         case MotionNotify:
           52 >                                 if(count++ < 10)
           53 >                                         break;
           54 >                                 count = 0;
           55 >                                 dx = ev.xmotion.x - x;
           56 >                                 dy = ev.xmotion.y - y;
           57 >                                 x = ev.xmotion.x;
           58 >                                 y = ev.xmotion.y;
           59 >                                 
           60 >                                 if( abs(dx)/(abs(dy)+1) == 0 )
           61 >                                         move = dy<0?'u':'d';
           62 >                                 else
           63 >                                         move = dx<0?'l':'r';
           64 >                                 
           65 >                                 if(move!=currGest[gestpos-1])
           66 >                                 {        
           67 >                                         if(gestpos>9)
           68 >                                         {        ev.type++;
           69 >                                                 break;
           70 >                                         }
           71 >                                         
           72 >                                         currGest[gestpos] = move;
           73 >                                         currGest[++gestpos] = '\0';
           74 >                                         
           75 >                                         valid = 0;
           76 >                                         for(q = 0; q<LENGTH(gestures); q++)
           77 >                                         {        if(!strcmp(currGest, gestures[q].name))
           78 >                                                 {        valid++;
           79 >                                                         listpos = q;        
           80 >                                                 }
           81 >                                         }
           82 >                                 }
           83 >                                 
           84 >                 }
           85 >         } while(ev.type != ButtonRelease);
           86 >         
           87 >         if(valid)
           88 >                 gestures[listpos].func(&(gestures[listpos].arg));
           89 >         
           90 >         XUngrabPointer(dpy, CurrentTime);
           91 > }
           92 > 
           93 Only in dwm-5.8.2mod: dwm.c~
           94 Binary files dwm-5.8.2/dwm.o and dwm-5.8.2mod/dwm.o differ