stop trying resize clients during commitnotify()
instead resize them in configurex11()
This commit is contained in:
parent
332ceb7136
commit
2d9d758c8d
1 changed files with 10 additions and 18 deletions
28
dwl.c
28
dwl.c
|
@ -836,12 +836,6 @@ void
|
||||||
commitnotify(struct wl_listener *listener, void *data)
|
commitnotify(struct wl_listener *listener, void *data)
|
||||||
{
|
{
|
||||||
Client *c = wl_container_of(listener, c, commit);
|
Client *c = wl_container_of(listener, c, commit);
|
||||||
struct wlr_box box = {0};
|
|
||||||
client_get_geometry(c, &box);
|
|
||||||
|
|
||||||
if (c->mon && !wlr_box_empty(&box) && (box.width != c->geom.width - 2 * c->bw
|
|
||||||
|| box.height != c->geom.height - 2 * c->bw))
|
|
||||||
arrange(c->mon);
|
|
||||||
|
|
||||||
/* mark a pending resize as completed */
|
/* mark a pending resize as completed */
|
||||||
if (c->resize && (c->resize <= c->surface.xdg->current.configure_serial
|
if (c->resize && (c->resize <= c->surface.xdg->current.configure_serial
|
||||||
|
@ -1033,6 +1027,7 @@ createnotify(struct wl_listener *listener, void *data)
|
||||||
LISTEN(&xdg_surface->events.map, &c->map, mapnotify);
|
LISTEN(&xdg_surface->events.map, &c->map, mapnotify);
|
||||||
LISTEN(&xdg_surface->events.unmap, &c->unmap, unmapnotify);
|
LISTEN(&xdg_surface->events.unmap, &c->unmap, unmapnotify);
|
||||||
LISTEN(&xdg_surface->events.destroy, &c->destroy, destroynotify);
|
LISTEN(&xdg_surface->events.destroy, &c->destroy, destroynotify);
|
||||||
|
LISTEN(&xdg_surface->surface->events.commit, &c->commit, commitnotify);
|
||||||
LISTEN(&xdg_surface->toplevel->events.set_title, &c->set_title, updatetitle);
|
LISTEN(&xdg_surface->toplevel->events.set_title, &c->set_title, updatetitle);
|
||||||
LISTEN(&xdg_surface->toplevel->events.request_fullscreen, &c->fullscreen,
|
LISTEN(&xdg_surface->toplevel->events.request_fullscreen, &c->fullscreen,
|
||||||
fullscreennotify);
|
fullscreennotify);
|
||||||
|
@ -1139,8 +1134,9 @@ destroynotify(struct wl_listener *listener, void *data)
|
||||||
wl_list_remove(&c->configure.link);
|
wl_list_remove(&c->configure.link);
|
||||||
wl_list_remove(&c->set_hints.link);
|
wl_list_remove(&c->set_hints.link);
|
||||||
wl_list_remove(&c->activate.link);
|
wl_list_remove(&c->activate.link);
|
||||||
}
|
} else
|
||||||
#endif
|
#endif
|
||||||
|
{ wl_list_remove(&c->commit.link); }
|
||||||
free(c);
|
free(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1428,14 +1424,8 @@ mapnotify(struct wl_listener *listener, void *data)
|
||||||
c->scene_surface = c->type == XDGShell
|
c->scene_surface = c->type == XDGShell
|
||||||
? wlr_scene_xdg_surface_create(c->scene, c->surface.xdg)
|
? wlr_scene_xdg_surface_create(c->scene, c->surface.xdg)
|
||||||
: wlr_scene_subsurface_tree_create(c->scene, client_surface(c));
|
: wlr_scene_subsurface_tree_create(c->scene, client_surface(c));
|
||||||
if (client_surface(c)) {
|
if (client_surface(c))
|
||||||
client_surface(c)->data = c->scene;
|
client_surface(c)->data = c->scene;
|
||||||
/* Ideally we should do this in createnotify{,x11} but at that moment
|
|
||||||
* wlr_xwayland_surface doesn't have wlr_surface yet
|
|
||||||
*/
|
|
||||||
LISTEN(&client_surface(c)->events.commit, &c->commit, commitnotify);
|
|
||||||
|
|
||||||
}
|
|
||||||
c->scene->data = c->scene_surface->data = c;
|
c->scene->data = c->scene_surface->data = c;
|
||||||
|
|
||||||
#ifdef XWAYLAND
|
#ifdef XWAYLAND
|
||||||
|
@ -2416,7 +2406,6 @@ unmapnotify(struct wl_listener *listener, void *data)
|
||||||
wl_list_remove(&c->flink);
|
wl_list_remove(&c->flink);
|
||||||
}
|
}
|
||||||
|
|
||||||
wl_list_remove(&c->commit.link);
|
|
||||||
wlr_scene_node_destroy(c->scene);
|
wlr_scene_node_destroy(c->scene);
|
||||||
printstatus();
|
printstatus();
|
||||||
motionnotify(0);
|
motionnotify(0);
|
||||||
|
@ -2592,9 +2581,12 @@ void
|
||||||
configurex11(struct wl_listener *listener, void *data)
|
configurex11(struct wl_listener *listener, void *data)
|
||||||
{
|
{
|
||||||
Client *c = wl_container_of(listener, c, configure);
|
Client *c = wl_container_of(listener, c, configure);
|
||||||
struct wlr_xwayland_surface_configure_event *event = data;
|
struct wlr_xwayland_surface_configure_event *e = data;
|
||||||
wlr_xwayland_surface_configure(c->surface.xwayland,
|
if (c->isfloating)
|
||||||
event->x, event->y, event->width, event->height);
|
resize(c, (struct wlr_box){.x = e->x, .y = e->y,
|
||||||
|
.width = e->width, .height = e->height}, 0);
|
||||||
|
else
|
||||||
|
arrange(c->mon);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in a new issue