mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2025-11-02 09:01:43 -05:00
opt: scroller window no cross monitor
This commit is contained in:
parent
17225685c1
commit
f2d307b1d1
1 changed files with 106 additions and 70 deletions
176
maomao.c
176
maomao.c
|
|
@ -78,6 +78,7 @@
|
||||||
/* macros */
|
/* macros */
|
||||||
#define MAX(A, B) ((A) > (B) ? (A) : (B))
|
#define MAX(A, B) ((A) > (B) ? (A) : (B))
|
||||||
#define MIN(A, B) ((A) < (B) ? (A) : (B))
|
#define MIN(A, B) ((A) < (B) ? (A) : (B))
|
||||||
|
#define GEZERO(A) ((A) >= 0 ? (A) : 0)
|
||||||
#define CLEANMASK(mask) (mask & ~WLR_MODIFIER_CAPS)
|
#define CLEANMASK(mask) (mask & ~WLR_MODIFIER_CAPS)
|
||||||
#define VISIBLEON(C, M) \
|
#define VISIBLEON(C, M) \
|
||||||
((M) && (C)->mon == (M) && ((C)->tags & (M)->tagset[(M)->seltags]))
|
((M) && (C)->mon == (M) && ((C)->tags & (M)->tagset[(M)->seltags]))
|
||||||
|
|
@ -247,7 +248,7 @@ struct Client {
|
||||||
// struct wl_event_source *timer_tick;
|
// struct wl_event_source *timer_tick;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
Client *swallowing, *swallowedby;
|
Client *swallowing, *swallowedby;
|
||||||
bool need_scale_first_frame;
|
bool is_clip_to_hide;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -708,6 +709,10 @@ struct vec2 {
|
||||||
double x, y;
|
double x, y;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct uvec2 {
|
||||||
|
int x, y;
|
||||||
|
};
|
||||||
|
|
||||||
#define BAKED_POINTS_COUNT 256
|
#define BAKED_POINTS_COUNT 256
|
||||||
|
|
||||||
struct vec2 *baked_points_move;
|
struct vec2 *baked_points_move;
|
||||||
|
|
@ -964,37 +969,38 @@ void client_actual_size(Client *c, uint32_t *width, uint32_t *height) {
|
||||||
*height = c->animation.current.height;
|
*height = c->animation.current.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_rect_size(struct wlr_scene_rect *rect, int width, int height) {
|
||||||
|
wlr_scene_rect_set_size(rect, GEZERO(width), GEZERO(height));
|
||||||
|
}
|
||||||
|
|
||||||
void apply_border(Client *c, struct wlr_box clip_box, int offsetx,
|
void apply_border(Client *c, struct wlr_box clip_box, int offsetx,
|
||||||
int offsety) {
|
int offsety) {
|
||||||
|
|
||||||
if (c->iskilling || !client_surface(c)->mapped)
|
if (c->iskilling || !client_surface(c)->mapped)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(clip_box.width <= 0 || clip_box.height <= 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
wlr_scene_node_set_position(&c->scene_surface->node, c->bw, c->bw);
|
wlr_scene_node_set_position(&c->scene_surface->node, c->bw, c->bw);
|
||||||
wlr_scene_rect_set_size(c->border[0], clip_box.width, c->bw);
|
set_rect_size(c->border[0], clip_box.width, c->bw);
|
||||||
wlr_scene_rect_set_size(c->border[1], clip_box.width, c->bw);
|
set_rect_size(c->border[1], clip_box.width, c->bw);
|
||||||
wlr_scene_rect_set_size(c->border[2], c->bw, clip_box.height - 2 * c->bw);
|
set_rect_size(c->border[2], c->bw, clip_box.height - 2 * c->bw);
|
||||||
wlr_scene_rect_set_size(c->border[3], c->bw, clip_box.height - 2 * c->bw);
|
set_rect_size(c->border[3], c->bw, clip_box.height - 2 * c->bw);
|
||||||
wlr_scene_node_set_position(&c->border[0]->node, 0, 0);
|
wlr_scene_node_set_position(&c->border[0]->node, 0, 0);
|
||||||
wlr_scene_node_set_position(&c->border[2]->node, 0, c->bw);
|
wlr_scene_node_set_position(&c->border[2]->node, 0, c->bw);
|
||||||
wlr_scene_node_set_position(&c->border[1]->node, 0, clip_box.height - c->bw);
|
wlr_scene_node_set_position(&c->border[1]->node, 0, clip_box.height - c->bw);
|
||||||
wlr_scene_node_set_position(&c->border[3]->node, clip_box.width - c->bw,
|
wlr_scene_node_set_position(&c->border[3]->node, clip_box.width - c->bw,
|
||||||
c->bw);
|
c->bw);
|
||||||
|
|
||||||
if (c->animation.running && c->animation.action != MOVE) {
|
if (c->istiled) {
|
||||||
if (c->animation.current.x < c->mon->m.x) {
|
if (c->animation.current.x < c->mon->m.x) {
|
||||||
wlr_scene_rect_set_size(c->border[2], 0, 0);
|
set_rect_size(c->border[2], 0, 0);
|
||||||
} else if (c->animation.current.x + c->animation.current.width >
|
} else if (c->animation.current.x + c->animation.current.width >
|
||||||
c->mon->m.x + c->mon->m.width) {
|
c->mon->m.x + c->mon->m.width) {
|
||||||
wlr_scene_rect_set_size(c->border[3], 0, 0);
|
set_rect_size(c->border[3], 0, 0);
|
||||||
} else if (c->animation.current.y < c->mon->m.y) {
|
} else if (c->animation.current.y < c->mon->m.y) {
|
||||||
wlr_scene_rect_set_size(c->border[0], 0, 0);
|
set_rect_size(c->border[0], 0, 0);
|
||||||
} else if (c->animation.current.y + c->animation.current.height >
|
} else if (c->animation.current.y + c->animation.current.height >
|
||||||
c->mon->m.y + c->mon->m.height) {
|
c->mon->m.y + c->mon->m.height) {
|
||||||
wlr_scene_rect_set_size(c->border[1], 0, 0);
|
set_rect_size(c->border[1], 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1006,27 +1012,82 @@ void apply_border(Client *c, struct wlr_box clip_box, int offsetx,
|
||||||
&c->border[3]->node, clip_box.width - c->bw + offsetx, c->bw + offsety);
|
&c->border[3]->node, clip_box.width - c->bw + offsetx, c->bw + offsety);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct uvec2 clip_to_hide(Client *c, struct wlr_box *clip_box) {
|
||||||
|
int offsetx=0;
|
||||||
|
int offsety=0;
|
||||||
|
struct uvec2 offset;
|
||||||
|
|
||||||
|
// // make tagout tagin animations not visible in other monitors
|
||||||
|
if (c->istiled) {
|
||||||
|
if (c->animation.current.x <= c->mon->m.x) {
|
||||||
|
offsetx = c->mon->m.x - c->animation.current.x;
|
||||||
|
clip_box->x = clip_box->x + offsetx;
|
||||||
|
clip_box->width = clip_box->width - offsetx;
|
||||||
|
} else if (c->animation.current.x + c->animation.current.width >=
|
||||||
|
c->mon->m.x + c->mon->m.width) {
|
||||||
|
clip_box->width = clip_box->width -
|
||||||
|
(c->animation.current.x + c->animation.current.width -
|
||||||
|
c->mon->m.x - c->mon->m.width);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c->animation.current.y <= c->mon->m.y) {
|
||||||
|
offsety = c->mon->m.y - c->animation.current.y;
|
||||||
|
clip_box->y = clip_box->y + offsety;
|
||||||
|
clip_box->height = clip_box->height - offsety;
|
||||||
|
} else if (c->animation.current.y + c->animation.current.height >=
|
||||||
|
c->mon->m.y + c->mon->m.height) {
|
||||||
|
clip_box->height = clip_box->height -
|
||||||
|
(c->animation.current.y + c->animation.current.height -
|
||||||
|
c->mon->m.y - c->mon->m.height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
offset.x = offsetx;
|
||||||
|
offset.y = offsety;
|
||||||
|
|
||||||
|
if((clip_box->width <= 0 || clip_box->height <= 0) && (c->istiled)) {
|
||||||
|
c->is_clip_to_hide = true;
|
||||||
|
wlr_scene_node_set_enabled(&c->scene->node, false);
|
||||||
|
} else if(c->is_clip_to_hide && VISIBLEON(c, c->mon)) {
|
||||||
|
c->is_clip_to_hide = false;
|
||||||
|
wlr_scene_node_set_enabled(&c->scene->node, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
void apply_buffer_scale(Client *c, struct wlr_box clip_box ) {
|
||||||
|
animationScale scale_data;
|
||||||
|
scale_data.width = clip_box.width - 2 * c->bw;
|
||||||
|
scale_data.height = clip_box.height - 2 * c->bw;
|
||||||
|
scale_data.m = c->mon;
|
||||||
|
scale_data.width_scale = (float)clip_box.width / c->current.width;
|
||||||
|
scale_data.height_scale = (float)clip_box.height / c->current.height;
|
||||||
|
buffer_set_size(c, scale_data);
|
||||||
|
}
|
||||||
|
|
||||||
void client_apply_clip(Client *c) {
|
void client_apply_clip(Client *c) {
|
||||||
|
|
||||||
if (c->iskilling || !client_surface(c)->mapped)
|
if (c->iskilling || !client_surface(c)->mapped)
|
||||||
return;
|
return;
|
||||||
struct wlr_box clip_box;
|
struct wlr_box clip_box;
|
||||||
|
struct uvec2 offset;
|
||||||
|
|
||||||
if (!animations) {
|
if (!animations) {
|
||||||
c->animation.running = false;
|
c->animation.running = false;
|
||||||
c->need_output_flush = false;
|
c->need_output_flush = false;
|
||||||
c->animainit_geom = c->current = c->pending = c->animation.current =
|
c->animainit_geom = c->current = c->pending = c->animation.current =
|
||||||
c->geom;
|
c->geom;
|
||||||
apply_border(c, c->geom, 0, 0);
|
|
||||||
client_get_clip(c, &clip_box);
|
client_get_clip(c, &clip_box);
|
||||||
|
offset = clip_to_hide(c, &clip_box);
|
||||||
|
apply_border(c, clip_box, offset.x, offset.y);
|
||||||
wlr_scene_subsurface_tree_set_clip(&c->scene_surface->node, &clip_box);
|
wlr_scene_subsurface_tree_set_clip(&c->scene_surface->node, &clip_box);
|
||||||
|
/* apply_buffer_scale(c, clip_box); */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t width, height;
|
uint32_t width, height;
|
||||||
client_actual_size(c, &width, &height);
|
client_actual_size(c, &width, &height);
|
||||||
int offsetx = 0;
|
|
||||||
int offsety = 0;
|
|
||||||
|
|
||||||
struct wlr_box geometry;
|
struct wlr_box geometry;
|
||||||
client_get_geometry(c, &geometry);
|
client_get_geometry(c, &geometry);
|
||||||
|
|
@ -1042,41 +1103,11 @@ void client_apply_clip(Client *c) {
|
||||||
clip_box.y = 0;
|
clip_box.y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// // make tagout tagin animations not visible in other monitors
|
offset = clip_to_hide(c, &clip_box);
|
||||||
if (c->animation.running && c->animation.action != MOVE) {
|
|
||||||
if (c->animation.current.x <= c->mon->m.x) {
|
|
||||||
offsetx = c->mon->m.x - c->animation.current.x;
|
|
||||||
clip_box.x = clip_box.x + offsetx;
|
|
||||||
clip_box.width = clip_box.width - offsetx;
|
|
||||||
} else if (c->animation.current.x + c->animation.current.width >=
|
|
||||||
c->mon->m.x + c->mon->m.width) {
|
|
||||||
clip_box.width = clip_box.width -
|
|
||||||
(c->animation.current.x + c->animation.current.width -
|
|
||||||
c->mon->m.x - c->mon->m.width);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (c->animation.current.y <= c->mon->m.y) {
|
|
||||||
offsety = c->mon->m.y - c->animation.current.y;
|
|
||||||
clip_box.y = clip_box.y + offsety;
|
|
||||||
clip_box.height = clip_box.height - offsety;
|
|
||||||
} else if (c->animation.current.y + c->animation.current.height >=
|
|
||||||
c->mon->m.y + c->mon->m.height) {
|
|
||||||
clip_box.height = clip_box.height -
|
|
||||||
(c->animation.current.y + c->animation.current.height -
|
|
||||||
c->mon->m.y - c->mon->m.height);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
animationScale scale_data;
|
|
||||||
scale_data.width = clip_box.width - 2 * c->bw;
|
|
||||||
scale_data.height = clip_box.height - 2 * c->bw;
|
|
||||||
scale_data.m = c->mon;
|
|
||||||
wlr_scene_subsurface_tree_set_clip(&c->scene_surface->node, &clip_box);
|
wlr_scene_subsurface_tree_set_clip(&c->scene_surface->node, &clip_box);
|
||||||
apply_border(c, clip_box, offsetx, offsety);
|
apply_border(c, clip_box, offset.x, offset.y);
|
||||||
|
apply_buffer_scale(c,clip_box);
|
||||||
scale_data.width_scale = (float)clip_box.width / c->current.width;
|
|
||||||
scale_data.height_scale = (float)clip_box.height / c->current.height;
|
|
||||||
buffer_set_size(c, scale_data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool client_draw_frame(Client *c) {
|
bool client_draw_frame(Client *c) {
|
||||||
|
|
@ -1526,6 +1557,9 @@ void // 17
|
||||||
arrange(Monitor *m, bool want_animation) {
|
arrange(Monitor *m, bool want_animation) {
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
|
if(!m)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!m->wlr_output->enabled)
|
if (!m->wlr_output->enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -1541,7 +1575,10 @@ arrange(Monitor *m, bool want_animation) {
|
||||||
|
|
||||||
if (c->mon == m) {
|
if (c->mon == m) {
|
||||||
if (VISIBLEON(c, m)) {
|
if (VISIBLEON(c, m)) {
|
||||||
wlr_scene_node_set_enabled(&c->scene->node, true);
|
if(!c->is_clip_to_hide || strcmp(c->mon->pertag->ltidxs[c->mon->pertag->curtag]->name,
|
||||||
|
"scroller") != 0) {
|
||||||
|
wlr_scene_node_set_enabled(&c->scene->node, true);
|
||||||
|
}
|
||||||
client_set_suspended(c, false);
|
client_set_suspended(c, false);
|
||||||
if (!c->animation.from_rule && want_animation &&
|
if (!c->animation.from_rule && want_animation &&
|
||||||
m->pertag->prevtag != 0 && m->pertag->curtag != 0 && animations) {
|
m->pertag->prevtag != 0 && m->pertag->curtag != 0 && animations) {
|
||||||
|
|
@ -1550,7 +1587,7 @@ arrange(Monitor *m, bool want_animation) {
|
||||||
c->animainit_geom.x =
|
c->animainit_geom.x =
|
||||||
c->animation.running
|
c->animation.running
|
||||||
? c->animation.current.x
|
? c->animation.current.x
|
||||||
: c->geom.x + c->mon->m.width - (c->geom.x - c->mon->m.x);
|
: c->mon->m.x + c->mon->m.width;
|
||||||
} else {
|
} else {
|
||||||
c->animainit_geom.x = c->animation.running ? c->animation.current.x
|
c->animainit_geom.x = c->animation.running ? c->animation.current.x
|
||||||
: m->m.x - c->geom.width;
|
: m->m.x - c->geom.width;
|
||||||
|
|
@ -1575,7 +1612,7 @@ arrange(Monitor *m, bool want_animation) {
|
||||||
} else {
|
} else {
|
||||||
c->pending = c->geom;
|
c->pending = c->geom;
|
||||||
c->pending.x =
|
c->pending.x =
|
||||||
c->geom.x + c->mon->m.width - (c->geom.x - c->mon->m.x);
|
c->mon->m.x + c->mon->m.width;
|
||||||
resize(c, c->geom, 0);
|
resize(c, c->geom, 0);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -2233,15 +2270,16 @@ void commitnotify(struct wl_listener *listener, void *data) {
|
||||||
if (c == grabc)
|
if (c == grabc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint32_t width, height;
|
if(!c->dirty)
|
||||||
client_actual_size(c, &width, &height);
|
|
||||||
|
|
||||||
if(c->geom.width == width && c->geom.height == height)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// if don't do this, some client may resize uncompleted
|
wlr_log(WLR_DEBUG, "app commit event handle:%s",client_get_appid(c));
|
||||||
resize(c, c->geom, (c->isfloating && !c->isfullscreen));
|
resize(c, c->geom, (c->isfloating && !c->isfullscreen));
|
||||||
|
|
||||||
|
uint32_t width, height;
|
||||||
|
client_actual_size(c, &width, &height);
|
||||||
|
if(width == c->geom.width && height == c->geom.height)
|
||||||
|
c->dirty = false;
|
||||||
// if (c->configure_serial && c->configure_serial <=
|
// if (c->configure_serial && c->configure_serial <=
|
||||||
// c->surface.xdg->current.configure_serial) c->configure_serial = 0;
|
// c->surface.xdg->current.configure_serial) c->configure_serial = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -3683,7 +3721,6 @@ mapnotify(struct wl_listener *listener, void *data) {
|
||||||
c->istiled = 0;
|
c->istiled = 0;
|
||||||
c->iskilling = 0;
|
c->iskilling = 0;
|
||||||
c->scroller_proportion = scroller_default_proportion;
|
c->scroller_proportion = scroller_default_proportion;
|
||||||
c->need_scale_first_frame = true;
|
|
||||||
// nop
|
// nop
|
||||||
if (new_is_master &&
|
if (new_is_master &&
|
||||||
strcmp(selmon->pertag->ltidxs[selmon->pertag->curtag]->name,
|
strcmp(selmon->pertag->ltidxs[selmon->pertag->curtag]->name,
|
||||||
|
|
@ -4143,6 +4180,7 @@ void scene_buffer_apply_opacity(struct wlr_scene_buffer *buffer, int sx, int sy,
|
||||||
wlr_scene_buffer_set_opacity(buffer, *(double *)data);
|
wlr_scene_buffer_set_opacity(buffer, *(double *)data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void scene_buffer_apply_size(struct wlr_scene_buffer *buffer, int sx, int sy,
|
void scene_buffer_apply_size(struct wlr_scene_buffer *buffer, int sx, int sy,
|
||||||
void *data) {
|
void *data) {
|
||||||
animationScale *scale_data = (animationScale *)data;
|
animationScale *scale_data = (animationScale *)data;
|
||||||
|
|
@ -4167,13 +4205,12 @@ void scene_buffer_apply_size(struct wlr_scene_buffer *buffer, int sx, int sy,
|
||||||
surface_width *= scale_data->width_scale;
|
surface_width *= scale_data->width_scale;
|
||||||
surface_height *= scale_data->height_scale;
|
surface_height *= scale_data->height_scale;
|
||||||
|
|
||||||
|
|
||||||
if (wlr_subsurface_try_from_wlr_surface(surface) != NULL &&
|
if (wlr_subsurface_try_from_wlr_surface(surface) != NULL &&
|
||||||
surface_width <= scale_data->m->m.width &&
|
surface_width <= scale_data->m->m.width &&
|
||||||
surface_height <= scale_data->m->m.height &&
|
surface_height <= scale_data->m->m.height &&
|
||||||
surface_height > 0 && surface_width > 0) {
|
surface_height > 0 && surface_width > 0) {
|
||||||
wlr_scene_buffer_set_dest_size(buffer, surface_width, surface_height);
|
wlr_scene_buffer_set_dest_size(buffer, surface_width, surface_height);
|
||||||
} else {
|
} else if(scale_data->width >0 && scale_data->height > 0) {
|
||||||
wlr_scene_buffer_set_dest_size(buffer, scale_data->width,
|
wlr_scene_buffer_set_dest_size(buffer, scale_data->width,
|
||||||
scale_data->height);
|
scale_data->height);
|
||||||
}
|
}
|
||||||
|
|
@ -4187,15 +4224,8 @@ void snap_scene_buffer_apply_size(struct wlr_scene_buffer *buffer, int sx,
|
||||||
|
|
||||||
void buffer_set_size(Client *c, animationScale data) {
|
void buffer_set_size(Client *c, animationScale data) {
|
||||||
|
|
||||||
if (c->animation.current.width <= c->geom.width &&
|
if (c->iskilling || c->animation.tagouting ||
|
||||||
c->animation.current.height <= c->geom.height && !c->need_scale_first_frame) {
|
c->animation.tagouted || c->animation.tagining) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
c->need_scale_first_frame = false;
|
|
||||||
|
|
||||||
if (c->iskilling || c->animation.tagouting || c->animation.tagining ||
|
|
||||||
c->animation.tagouted) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4440,6 +4470,7 @@ void set_open_animaiton(Client *c, struct wlr_box geo) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void resize(Client *c, struct wlr_box geo, int interact) {
|
void resize(Client *c, struct wlr_box geo, int interact) {
|
||||||
|
|
||||||
// 动画设置的起始函数,这里用来计算一些动画的起始值
|
// 动画设置的起始函数,这里用来计算一些动画的起始值
|
||||||
|
|
@ -4454,8 +4485,9 @@ void resize(Client *c, struct wlr_box geo, int interact) {
|
||||||
if (!c->mon)
|
if (!c->mon)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// wl_event_source_timer_update(c->timer_tick, 10);
|
// wl_event_source_timer_update(c->timer_tick, 10);
|
||||||
c->need_output_flush = true;
|
c->need_output_flush = true;
|
||||||
|
|
||||||
// oldgeom = c->geom;
|
// oldgeom = c->geom;
|
||||||
bbox = interact ? &sgeom : &c->mon->w;
|
bbox = interact ? &sgeom : &c->mon->w;
|
||||||
|
|
||||||
|
|
@ -4471,6 +4503,10 @@ void resize(Client *c, struct wlr_box geo, int interact) {
|
||||||
c, bbox); // 去掉这个推荐的窗口大小,因为有时推荐的窗口特别大导致平铺异常
|
c, bbox); // 去掉这个推荐的窗口大小,因为有时推荐的窗口特别大导致平铺异常
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(c->geom.width <0 || c->geom.height <0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!c->is_open_animation) {
|
if (!c->is_open_animation) {
|
||||||
c->animation.begin_fade_in = false;
|
c->animation.begin_fade_in = false;
|
||||||
client_set_opacity(c, 1);
|
client_set_opacity(c, 1);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue