Merge branch 'master' into laggy-move-resize

This commit is contained in:
emersion 2017-11-20 14:35:31 +01:00
commit 1d08d31709
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
16 changed files with 199 additions and 134 deletions

View file

@ -94,7 +94,6 @@ static void handle_surface_commit(struct wl_listener *listener, void *data) {
static void handle_destroy(struct wl_listener *listener, void *data) {
struct roots_wl_shell_surface *roots_surface =
wl_container_of(listener, roots_surface, destroy);
view_teardown(roots_surface->view);
wl_list_remove(&roots_surface->destroy.link);
wl_list_remove(&roots_surface->request_move.link);
wl_list_remove(&roots_surface->request_resize.link);
@ -105,14 +104,6 @@ static void handle_destroy(struct wl_listener *listener, void *data) {
free(roots_surface);
}
static int shell_surface_compare_equals(const void *item, const void *cmp_to) {
const struct roots_view *view = item;
if (view->type == ROOTS_WL_SHELL_VIEW && view->wl_shell_surface == cmp_to) {
return 0;
}
return -1;
}
void handle_wl_shell_surface(struct wl_listener *listener, void *data) {
struct roots_desktop *desktop =
wl_container_of(listener, desktop, wl_shell_surface);
@ -155,17 +146,23 @@ void handle_wl_shell_surface(struct wl_listener *listener, void *data) {
view->wlr_surface = surface->surface;
view->resize = resize;
view->close = close;
view->desktop = desktop;
roots_surface->view = view;
wlr_list_add(desktop->views, view);
view_init(view, desktop);
view_setup(view);
if (surface->state == WLR_WL_SHELL_SURFACE_STATE_TRANSIENT) {
// we need to map it relative to the parent
int i = wlr_list_seq_find(desktop->views, shell_surface_compare_equals,
surface->parent);
if (i != -1) {
struct roots_view *parent = desktop->views->items[i];
// We need to map it relative to the parent
bool found = false;
struct roots_view *parent;
wl_list_for_each(parent, &desktop->views, link) {
if (parent->type == ROOTS_WL_SHELL_VIEW &&
parent->wl_shell_surface == surface->parent) {
found = true;
break;
}
}
if (found) {
view_move(view,
parent->x + surface->transient_state->x,
parent->y + surface->transient_state->y);