myvxwm

[fork] my vxwm config (optimised for my T480)
git clone https://git.lukeonline.net/repos/myvxwm
Log | Files | Refs | README | LICENSE

moveresizekbd.c (3673B)


      1 #if !INFINITE_TAGS
      2 void
      3 moveresize(const Arg *arg)
      4 {
      5   if (selmon->sel && selmon->sel->isfullscreen)
      6     return;
      7 	XEvent ev;
      8 	Monitor *m = selmon;
      9 
     10 	if(!(m->sel && arg && arg->v && m->sel->isfloating)) {
     11 
     12 #if DIRECTIONAL_MOVE
     13     if (((int *)arg->v)[0] != 0 || ((int *)arg->v)[1] != 0) {
     14       if (((int *)arg->v)[1] > 0) movedir(&(Arg){.i = 3});  // Down
     15       if (((int *)arg->v)[1] < 0) movedir(&(Arg){.i = 2});  // Up
     16       if (((int *)arg->v)[0] > 0) movedir(&(Arg){.i = 1});  // Right
     17       if (((int *)arg->v)[0] < 0) movedir(&(Arg){.i = 0});  // Left
     18     }
     19 #endif
     20 		return;
     21   }
     22 
     23   XRaiseWindow(dpy, m->sel->win);
     24 
     25 	resize(m->sel, m->sel->x + ((int *)arg->v)[0],
     26 		m->sel->y + ((int *)arg->v)[1],
     27 		m->sel->w + ((int *)arg->v)[2],
     28 		m->sel->h + ((int *)arg->v)[3],
     29 		True);
     30  
     31 #if ENHANCED_TOGGLE_FLOATING && RESTORE_SIZE_AND_POS_ETF
     32     if (m->sel->isfloating) {
     33       m->sel->wasmanuallyedited = 1;
     34       m->sel->sfx = m->sel->x;
     35       m->sel->sfy = m->sel->y;
     36       m->sel->sfw = m->sel->w;
     37       m->sel->sfh = m->sel->h;
     38     }
     39 #endif
     40 
     41   focus(m->sel);
     42 
     43 #if WARP_TO_CLIENT && WARP_TO_CENTER_OF_WINDOW_MOVED_BY_KEYBOARD
     44   warptoclient(m->sel);
     45 #endif
     46 
     47 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
     48 }
     49 
     50 #else
     51 
     52 
     53 void
     54 moveresize(const Arg *arg)
     55 {
     56   if (selmon->sel && selmon->sel->isfullscreen)
     57     return;
     58   int dx = ((int *)arg->v)[0];
     59   int dy = ((int *)arg->v)[1];
     60   int dw = ((int *)arg->v)[2];
     61   int dh = ((int *)arg->v)[3];
     62 
     63   XEvent ev;
     64   Monitor *m = selmon;
     65 
     66   if (!m->sel || !arg || !arg->v)
     67     return;
     68 
     69   if (!m->sel->isfloating) {
     70 #if DIRECTIONAL_MOVE
     71     if (selmon->lt[selmon->sellt]->arrange != NULL && (dx || dy)) {
     72       if (dy > 0) movedir(&(Arg){.i = 3}); // Down
     73       if (dy < 0) movedir(&(Arg){.i = 2}); // Up
     74       if (dx > 0) movedir(&(Arg){.i = 1}); // Right
     75       if (dx < 0) movedir(&(Arg){.i = 0}); // Left
     76     }
     77 #endif
     78         return;
     79   }
     80 
     81 
     82   Client *c = m->sel;
     83 
     84   XRaiseWindow(dpy, c->win);
     85 
     86   if (selmon->lt[selmon->sellt]->arrange != NULL) {
     87     resize(c,
     88             c->x + dx,
     89             c->y + dy,
     90             c->w + dw,
     91             c->h + dh,
     92             True);
     93   }
     94   else {
     95     int nx = c->x + dx;
     96     int ny = c->y + dy;
     97     int nw = c->w + dw;
     98     int nh = c->h + dh;
     99     int canvas_dx = 0, canvas_dy = 0;
    100     int tagidx = getcurrenttag(m);
    101 
    102     if (dx || dy) {
    103       if (nx < m->wx) {
    104         canvas_dx = nx - m->wx;
    105         nx = m->wx;
    106       } else if (nx + nw + 2 * c->bw > m->wx + m->ww) {
    107         canvas_dx = (nx + nw + 2 * c->bw) - (m->wx + m->ww);
    108         nx = m->wx + m->ww - nw - 2 * c->bw;
    109       }
    110 
    111       if (ny < m->wy) {
    112         canvas_dy = ny - m->wy;
    113         ny = m->wy;
    114       } else if (ny + nh + 2 * c->bw > m->wy + m->wh) {
    115         canvas_dy = (ny + nh + 2 * c->bw) - (m->wy + m->wh);
    116         ny = m->wy + m->wh - nh - 2 * c->bw;
    117       }
    118 
    119       if (canvas_dx || canvas_dy) {
    120         m->canvas[tagidx].cx -= canvas_dx;
    121         m->canvas[tagidx].cy -= canvas_dy;
    122 
    123         Client *tmp;
    124         for (tmp = m->clients; tmp; tmp = tmp->next) {
    125           if (ISVISIBLE(tmp) && tmp != c) {
    126             tmp->x -= canvas_dx;
    127             tmp->y -= canvas_dy;
    128             XMoveWindow(dpy, tmp->win, tmp->x, tmp->y);
    129           }
    130         }
    131       }
    132     }
    133 
    134     resize(c, nx, ny, nw, nh, True);
    135   }
    136 
    137 #if ENHANCED_TOGGLE_FLOATING && RESTORE_SIZE_AND_POS_ETF
    138   if (c->isfloating) {
    139     c->wasmanuallyedited = 1;
    140     c->sfx = c->x;
    141     c->sfy = c->y;
    142     c->sfw = c->w;
    143     c->sfh = c->h;
    144   }
    145 #endif
    146 
    147   focus(c);
    148 
    149 #if WARP_TO_CLIENT && WARP_TO_CENTER_OF_WINDOW_MOVED_BY_KEYBOARD
    150   warptoclient(c);
    151 #endif
    152 
    153   while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
    154 
    155 #if IT_SHOW_COORDINATES_IN_BAR
    156   drawbar(m);
    157 #endif
    158 
    159 }
    160 #endif