SaraF

tilemovemouse.c

Jun 11th, 2011
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.40 KB | None | 0 0
  1. void
  2. insertbefore(Client *a, Client *b)  /* insert a before b in the client list */
  3. {
  4.     Client **x = &selmon->clients;
  5.    
  6.     while(*x != b && *x)
  7.         x = & (*x)->next;
  8.     *x = a;
  9.     a->next = b;
  10. }
  11.  
  12. void
  13. insertafter(Client *a, Client *b)   /* insert a after b in the client list */
  14. {
  15.     a->next = b->next;
  16.     b->next = a;
  17. }
  18.  
  19. void
  20. tilemovemouse(const Arg *arg) {
  21.     /* Could EnterNotify events be used instead? */
  22.     Client *sel = selmon->sel;
  23.     Client *c, *d;
  24.     XEvent ev;
  25.     int x, y;
  26.     Bool after;
  27.  
  28.     if(!(c = sel))
  29.         return;
  30.     if(c->isfloating || !selmon->lt[selmon->sellt]->arrange){
  31.         movemouse(NULL);
  32.         return;
  33.     }
  34.     if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
  35.     None, cursor[CurMove], CurrentTime) != GrabSuccess)
  36.         return;
  37.     do {
  38.         XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
  39.         switch (ev.type) {
  40.         case ConfigureRequest:
  41.         case Expose:
  42.         case MapRequest:
  43.             handler[ev.type](&ev);
  44.             break;
  45.         case MotionNotify:
  46.             x = ev.xmotion.x;
  47.             y = ev.xmotion.y;
  48.             after = False;
  49.             for(d = nexttiled(selmon->clients); d; d = nexttiled(d->next)){
  50.                 if(d == c)
  51.                     after = True;
  52.                 else if(INRECT(x, y, d->x, d->y, d->w+2*borderpx, d->h+2*borderpx)){
  53.                     detach(c);
  54.                     after ? insertafter(c, d) : insertbefore(c,d);
  55.                     arrange(selmon);
  56.                     break;
  57.                 }
  58.             }
  59.         }
  60.     } while(ev.type != ButtonRelease);
  61.     XUngrabPointer(dpy, CurrentTime);
  62. }
Advertisement
Add Comment
Please, Sign In to add comment