fix: offsetx and offsety not apply
This commit is contained in:
67
src/mango.c
67
src/mango.c
@@ -360,6 +360,7 @@ struct Client {
|
|||||||
const char *animation_type_close;
|
const char *animation_type_close;
|
||||||
int is_in_scratchpad;
|
int is_in_scratchpad;
|
||||||
int iscustomsize;
|
int iscustomsize;
|
||||||
|
int iscustompos;
|
||||||
int is_scratchpad_show;
|
int is_scratchpad_show;
|
||||||
int isglobal;
|
int isglobal;
|
||||||
int isnoborder;
|
int isnoborder;
|
||||||
@@ -683,7 +684,6 @@ static void warp_cursor_to_selmon(Monitor *m);
|
|||||||
uint32_t want_restore_fullscreen(Client *target_client);
|
uint32_t want_restore_fullscreen(Client *target_client);
|
||||||
static void overview_restore(Client *c, const Arg *arg);
|
static void overview_restore(Client *c, const Arg *arg);
|
||||||
static void overview_backup(Client *c);
|
static void overview_backup(Client *c);
|
||||||
static int applyrulesgeom(Client *c);
|
|
||||||
static void set_minimized(Client *c);
|
static void set_minimized(Client *c);
|
||||||
|
|
||||||
static void show_scratchpad(Client *c);
|
static void show_scratchpad(Client *c);
|
||||||
@@ -1240,46 +1240,6 @@ static void apply_rule_properties(Client *c, const ConfigWinRule *r) {
|
|||||||
APPLY_STRING_PROP(c, r, animation_type_close);
|
APPLY_STRING_PROP(c, r, animation_type_close);
|
||||||
}
|
}
|
||||||
|
|
||||||
int applyrulesgeom(Client *c) {
|
|
||||||
/* rule matching */
|
|
||||||
const char *appid, *title;
|
|
||||||
ConfigWinRule *r;
|
|
||||||
int hit = 0;
|
|
||||||
int ji;
|
|
||||||
|
|
||||||
if (!(appid = client_get_appid(c)))
|
|
||||||
appid = broken;
|
|
||||||
if (!(title = client_get_title(c)))
|
|
||||||
title = broken;
|
|
||||||
|
|
||||||
for (ji = 0; ji < config.window_rules_count; ji++) {
|
|
||||||
if (config.window_rules_count < 1)
|
|
||||||
break;
|
|
||||||
r = &config.window_rules[ji];
|
|
||||||
|
|
||||||
if (!is_window_rule_matches(r, appid, title))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
c->geom.width = r->width > 0 ? r->width : c->geom.width;
|
|
||||||
c->geom.height = r->height > 0 ? r->height : c->geom.height;
|
|
||||||
|
|
||||||
if (!c->isnosizehint)
|
|
||||||
client_set_size_bound(c);
|
|
||||||
|
|
||||||
// 重新计算居中的坐标
|
|
||||||
if (r->offsetx != 0 || r->offsety != 0 || r->width > 0 || r->height > 0)
|
|
||||||
c->geom =
|
|
||||||
setclient_coordinate_center(c, c->geom, r->offsetx, r->offsety);
|
|
||||||
if (r->height > 0 || r->width > 0 || r->offsetx != 0 ||
|
|
||||||
r->offsety != 0) {
|
|
||||||
hit = 1;
|
|
||||||
} else {
|
|
||||||
hit = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return hit;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_float_malposition(Client *tc) {
|
void set_float_malposition(Client *tc) {
|
||||||
Client *c = NULL;
|
Client *c = NULL;
|
||||||
int x, y, offset, xreverse, yreverse;
|
int x, y, offset, xreverse, yreverse;
|
||||||
@@ -1377,11 +1337,14 @@ void applyrules(Client *c) {
|
|||||||
if (r->height > 0)
|
if (r->height > 0)
|
||||||
c->float_geom.height = r->height;
|
c->float_geom.height = r->height;
|
||||||
|
|
||||||
if (r->offsetx || r->offsety || r->width > 0 || r->height > 0) {
|
if (r->width > 0 || r->height > 0) {
|
||||||
hit_rule_pos = r->offsetx || r->offsety ? true : false;
|
|
||||||
c->iscustomsize = 1;
|
c->iscustomsize = 1;
|
||||||
c->float_geom = c->geom = setclient_coordinate_center(c, c->float_geom,
|
}
|
||||||
r->offsetx, r->offsety);
|
|
||||||
|
if (r->offsetx || r->offsety) {
|
||||||
|
c->iscustompos = 1;
|
||||||
|
c->float_geom = c->geom = setclient_coordinate_center(
|
||||||
|
c, c->float_geom, r->offsetx, r->offsety);
|
||||||
}
|
}
|
||||||
if (c->isfloating) {
|
if (c->isfloating) {
|
||||||
c->geom = c->float_geom.width > 0 && c->float_geom.height > 0
|
c->geom = c->float_geom.width > 0 && c->float_geom.height > 0
|
||||||
@@ -1396,7 +1359,7 @@ void applyrules(Client *c) {
|
|||||||
|
|
||||||
// if no geom rule hit and is normal winodw, use the center pos and record
|
// if no geom rule hit and is normal winodw, use the center pos and record
|
||||||
// the hit size
|
// the hit size
|
||||||
if (!hit_rule_pos &&
|
if (!c->iscustompos &&
|
||||||
(!client_is_x11(c) || (c->geom.x == 0 && c->geom.y == 0))) {
|
(!client_is_x11(c) || (c->geom.x == 0 && c->geom.y == 0))) {
|
||||||
c->float_geom = c->geom = setclient_coordinate_center(c, c->geom, 0, 0);
|
c->float_geom = c->geom = setclient_coordinate_center(c, c->geom, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
@@ -3761,6 +3724,7 @@ void init_client_properties(Client *c) {
|
|||||||
c->ignore_maximize = 1;
|
c->ignore_maximize = 1;
|
||||||
c->ignore_minimize = 1;
|
c->ignore_minimize = 1;
|
||||||
c->iscustomsize = 0;
|
c->iscustomsize = 0;
|
||||||
|
c->iscustompos = 0;
|
||||||
c->master_mfact_per = 0.0f;
|
c->master_mfact_per = 0.0f;
|
||||||
c->master_inner_per = 0.0f;
|
c->master_inner_per = 0.0f;
|
||||||
c->stack_inner_per = 0.0f;
|
c->stack_inner_per = 0.0f;
|
||||||
@@ -4549,8 +4513,7 @@ void // 0.5
|
|||||||
setfloating(Client *c, int floating) {
|
setfloating(Client *c, int floating) {
|
||||||
|
|
||||||
Client *fc = NULL;
|
Client *fc = NULL;
|
||||||
int hit;
|
struct wlr_box target_box;
|
||||||
struct wlr_box target_box, backup_box;
|
|
||||||
c->isfloating = floating;
|
c->isfloating = floating;
|
||||||
bool window_size_outofrange = false;
|
bool window_size_outofrange = false;
|
||||||
|
|
||||||
@@ -4568,12 +4531,10 @@ setfloating(Client *c, int floating) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 重新计算居中的坐标
|
// 重新计算居中的坐标
|
||||||
if (!client_is_x11(c) || (c->geom.x == 0 && c->geom.y == 0))
|
if (!client_is_x11(c) && !c->iscustompos)
|
||||||
target_box = setclient_coordinate_center(c, target_box, 0, 0);
|
target_box = setclient_coordinate_center(c, target_box, 0, 0);
|
||||||
backup_box = c->geom;
|
else
|
||||||
hit = applyrulesgeom(c);
|
target_box = c->geom;
|
||||||
target_box = hit == 1 ? c->geom : target_box;
|
|
||||||
c->geom = backup_box;
|
|
||||||
|
|
||||||
// restore to the memeroy geom
|
// restore to the memeroy geom
|
||||||
if (c->float_geom.width > 0 && c->float_geom.height > 0) {
|
if (c->float_geom.width > 0 && c->float_geom.height > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user