HLXA5JC7DDDZOMLM6LTGTVULIJTLVUW5GPMNNTUPKUXYKPBJBZYAC
TRGHSV7WZDJK4N2GYF54ZPP3SQKRN3L3XAPZ2NCAZU4SVMBCD2YQC
AMIEYPJ6D6FRG3KGI2FT3WSZBP2KUAU7AIG6N6EYLKQ35XPSJM2QC
JWJKNS7TBF7CPMKR4HSVP5LTWDO4BXLBMTS5BTV7P5XS6JB47S5QC
TINMCJXVMLM3X5UM677SJNA6UGI3XCNMZ4ZOLQPBSRAOOY2USOSQC
7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC
J6OSBEBQXZR5JZ5TOCCUPELBPUVEQULGCXURXLPY7WFYTDEQOU2AC
7L3TU7JVWPBPHN7WF4TJ263BZ6BC3AYRRW6PULFUP5JZUGWWNUSAC
22QYEUSXWCAT2P3PWTLTDZOIW75HDPICYESRPK4BRLY2XKFG5GWQC
DBS6UQ2KJAFLCREUIGGCN5UYTGNPNODS275TFWDAL2KUGFQMNWKQC
LQPHYO7IIMLXHUD5IK657BO4BE3SGT5HYDRJDU5OFDF5YUXKIRTAC
PLJJLNS7E2UXW2YARGBSV6IHZEBGL5EW354IMMHPDATY5DQD77DAC
TOFCZFUYVBVEBHMKVG6G5MKCAEF2QCQ4GKMKGQUSJRLGLDZEJF4QC
D425ND7AT3F7QJ3CCSESMVDOC3J5C5P32M5SJDBHECZJXLHNQ2FAC
6XZIQSMIVP2GZ5S3UCKEVNDSLTHSQEVSXLV4UIFF3G3SRCGJPXYAC
S7RXJJZG4IEIVLPHEWFT5M2T3SRRO5US5SYBPXSYSWJJLXAKNNPAC
2GP4MXKEDQMZ7E6TCRSMV2AGN7HLEAHR3QEAC2QFCQQNPMNJSIHQC
BFWKVWAIUKHCZVRA62GW6QZUEUKQLW365HUWIVKTEIPJNJSOZBAQC
XUF22VC6FRHE755HMNIKOHMPKGZWSS4WBML4POEN43TH3QYRWRAAC
MGXITQBGBWZZDRAYZOLAQCLJIX3TUBPOF6QZLQ3CECI3HHOFKLGQC
JTZBFGPCDJDJWECXH2LLXY3SUAQNCP45HLJQKG3V7XGTPLD634WAC
STNAKFBNSAXICF6AJNYSCQKE4YYQGIMZHR7RSLZJBEOSSUMKBCNAC
F72VJF4KJZEYZEYGAGKCWPMEQGPKS7T5PEEJPJKZO6ZG246TTLAQC
STQCOMJFP365KC42CYLC22QKL3MFWZ5JNVA3LADAVZFMVQKO7K7QC
SCBBNYN2ZEI2UBCW5C5QXQLLQGEWY4DWM2UHGTRZ7B653AONDQKAC
MJZ6RCUUOK7R2RMXPXMLRWBAEM6234D2IS7RGPHAE5UN2S64GLGAC
EQRGODLKSVSPFSUZU7BV5ER72U4QS4ATSBKV544XXQVKKTOSC7EAC
DVIBBDIRHCREHHOHZNQ2L3JJTW6GRSUGBHDJD2OKUBHWIBJ5WJUQC
5NXELRTS2KF2SZJRXZBJNNDXZG23OSWVUVCIQSPV7TH7T3XKL4PAC
MBIOTFB64GH3E53GQRKHD2DJ7ITNT3CYH237F6DRIS4DSFN5CT4AC
LOHDGUC5DSHX2YPEG7H6ZWTLAEA3RYKIAIAWHI7PQFTLANV6EKJAC
6SNHSYM443LJULHPH3O2QXO2FTKBBZCK6TM3IWACSVEBCCSJX7LAC
DLEGXFXT7725CU3KBORDOAK3TOYGLO5KN3Q4M3APJLRZT77W6CDAC
FUZEZTLBNTVGUNLBGFLMVZOHLGMMHFPQD7USP4JYMGGVXBL2EUBQC
c = grabc;
if (c && c->was_tiled && !strcmp(selmon->ltsymbol, "|w|")) {
/* Check if more than one tag is active, if so we escape */
if (active_tags && (active_tags & (active_tags - 1)))
break;
if (cursor_mode == CurMove && c->isfloating) {
target = NULL;
surface = NULL;
xytonode(cursor->x, cursor->y, &surface, &target, NULL, &sx, &sy);
if (target && !target->isfloating && !target->isfullscreen) {
insert_client(selmon, target, c, root, tiled_clients);
} else {
if (!root) {
*root = create_client_node(c);
add_client_to_tiled_list(c, tiled_clients);
} else {
old_root = *root;
*root = create_split_node(1, old_root, create_client_node(c));
add_client_to_tiled_list(c, tiled_clients);
}
}
setfloating(c, 0);
arrange(selmon);
} else if (cursor_mode == CurResize && !c->isfloating) {
resizing_from_mouse = 0;
}
} else {
if (cursor_mode == CurResize && resizing_from_mouse)
resizing_from_mouse = 0;
}
/* Default behaviour */
/* We check if the destroyed client was part of any tiled_list, to catch
* client removals even if they would not be currently managed by btrtile */
if (selmon && selmon->tree_layout) {
for (int i = 0; i < TAGCOUNT; i++) {
remove_client(selmon, c,
&selmon->tree_layout->root[i],
&selmon->tree_layout->tiled_clients[i]);
}
}
/* If we are currently grabbing the mouse, handle and return */
/* Skip if internal call or already resizing */
if (time == 0 && resizing_from_mouse)
goto focus;
tiled = grabc && !grabc->isfloating && !grabc->isfullscreen;
resize(grabc, (struct wlr_box){.x = (int)round(cursor->x) - grabcx, .y = (int)round(cursor->y) - grabcy,
.width = grabc->geom.width, .height = grabc->geom.height}, 1);
return;
if (grabc && grabc->isfloating) {
resize(grabc, (struct wlr_box){
.x = (int)round(cursor->x) - grabcx,
.y = (int)round(cursor->y) - grabcy,
.width = grabc->geom.width,
.height = grabc->geom.height
}, 1);
return;
}
resize(grabc, (struct wlr_box){.x = grabc->geom.x, .y = grabc->geom.y,
.width = (int)round(cursor->x) - grabc->geom.x, .height = (int)round(cursor->y) - grabc->geom.y}, 1);
return;
if (tiled && resizing_from_mouse) {
dx_total = cursor->x - resize_last_update_x;
dy_total = cursor->y - resize_last_update_y;
if (time - last_resize_time >= resize_interval_ms) {
Arg a = {0};
if (fabs(dx_total) > fabs(dy_total)) {
a.f = (float)(dx_total * resize_factor);
setratio_h(&a);
} else {
a.f = (float)(dy_total * resize_factor);
setratio_v(&a);
}
arrange(selmon);
last_resize_time = time;
resize_last_update_x = cursor->x;
resize_last_update_y = cursor->y;
}
} else if (grabc && grabc->isfloating) {
/* Floating resize as original */
resize(grabc, (struct wlr_box){
.x = grabc->geom.x,
.y = grabc->geom.y,
.width = (int)round(cursor->x) - grabc->geom.x,
.height = (int)round(cursor->y) - grabc->geom.y
}, 1);
return;
}
/* Float the window and tell motionnotify to grab it */
setfloating(grabc, 1);
switch (cursor_mode = arg->ui) {
case CurMove:
grabcx = (int)round(cursor->x) - grabc->geom.x;
grabcy = (int)round(cursor->y) - grabc->geom.y;
wlr_cursor_set_xcursor(cursor, cursor_mgr, "fleur");
break;
case CurResize:
/* Doesn't work for X11 output - the next absolute motion event
* returns the cursor to where it started */
wlr_cursor_warp_closest(cursor, NULL,
cursor_mode = arg->ui;
grabc->was_tiled = (!grabc->isfloating && !grabc->isfullscreen);
if (grabc->was_tiled) {
switch (cursor_mode) {
case CurMove:
setfloating(grabc, 1);
grabcx = (int)round(cursor->x) - grabc->geom.x;
grabcy = (int)round(cursor->y) - grabc->geom.y;
wlr_cursor_set_xcursor(cursor, cursor_mgr, "fleur");
break;
case CurResize:
wlr_cursor_set_xcursor(cursor, cursor_mgr, "se-resize");
resize_last_update_x = cursor->x;
resize_last_update_y = cursor->y;
resizing_from_mouse = 1;
break;
}
} else {
/* Default floating logic */
/* Float the window and tell motionnotify to grab it */
setfloating(grabc, 1);
switch (cursor_mode) {
case CurMove:
grabcx = (int)round(cursor->x) - grabc->geom.x;
grabcy = (int)round(cursor->y) - grabc->geom.y;
wlr_cursor_set_xcursor(cursor, cursor_mgr, "fleur");
break;
case CurResize:
wlr_cursor_warp_closest(cursor, NULL,
wlr_cursor_set_xcursor(cursor, cursor_mgr, "se-resize");
break;
wlr_cursor_set_xcursor(cursor, cursor_mgr, "se-resize");
break;
}
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Up, swapclients, {.i = DIR_UP} },
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Down, swapclients, {.i = DIR_DOWN} },
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Right, swapclients, {.i = DIR_RIGHT} },
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Left, swapclients, {.i = DIR_LEFT} },
{ MODKEY|WLR_MODIFIER_CTRL, XKB_KEY_Right, setratio_h, {.f = +0.025f} },
{ MODKEY|WLR_MODIFIER_CTRL, XKB_KEY_Left, setratio_h, {.f = -0.025f} },
{ MODKEY|WLR_MODIFIER_CTRL, XKB_KEY_Up, setratio_v, {.f = -0.025f} },
{ MODKEY|WLR_MODIFIER_CTRL, XKB_KEY_Down, setratio_v, {.f = +0.025f} },