Merge branch 'maximize'

This commit is contained in:
Alex Bryan 2021-02-27 17:14:24 -05:00
commit f5f8acc543
5 changed files with 132 additions and 3 deletions

View file

@ -230,6 +230,26 @@ handle_request_resize(struct wl_listener *listener, void *data)
interactive_begin(view, LAB_INPUT_STATE_RESIZE, event->edges);
}
static void
handle_request_maximize(struct wl_listener *listener, void *data)
{
/* This event is raised when a client would like to begin an interactive
* resize, typically because the user clicked on their client-side
* decorations. Note that a more sophisticated compositor should check
* the provied serial against a list of button press serials sent to
* this
* client, to prevent the client from requesting this whenever they want.
*/
struct view *view = wl_container_of(listener, view, request_maximize);
struct wlr_xdg_surface *surface = data;
if(view != NULL) {
view_maximize(view, surface->toplevel->client_pending.maximized);
}
}
static void
xdg_toplevel_view_configure(struct view *view, struct wlr_box geo)
{
@ -279,6 +299,12 @@ xdg_toplevel_view_for_each_surface(struct view *view,
wlr_xdg_surface_for_each_surface(view->xdg_surface, iterator, data);
}
static void
xdg_toplevel_view_maximize(struct view *view, bool maximized)
{
wlr_xdg_toplevel_set_maximized(view->xdg_surface, maximized);
}
/* Return area between surface extremities and window */
static struct border
xdg_shell_padding(struct view *view)
@ -347,6 +373,7 @@ static const struct view_impl xdg_toplevel_view_impl = {
.map = xdg_toplevel_view_map,
.move = xdg_toplevel_view_move,
.unmap = xdg_toplevel_view_unmap,
.maximize = xdg_toplevel_view_maximize
};
void
@ -365,6 +392,7 @@ xdg_surface_new(struct wl_listener *listener, void *data)
view->type = LAB_XDG_SHELL_VIEW;
view->impl = &xdg_toplevel_view_impl;
view->xdg_surface = xdg_surface;
view->maximized = false;
view->map.notify = handle_map;
wl_signal_add(&xdg_surface->events.map, &view->map);
@ -381,6 +409,13 @@ xdg_surface_new(struct wl_listener *listener, void *data)
wl_signal_add(&toplevel->events.request_move, &view->request_move);
view->request_resize.notify = handle_request_resize;
wl_signal_add(&toplevel->events.request_resize, &view->request_resize);
view->request_maximize.notify = handle_request_maximize;
wl_signal_add(&toplevel->events.request_maximize, &view->request_maximize);
// hacky workaround to bug where sometimes a window starts maximized and
// when we hit the maximize button, labwc crashes. instead we unmaximize
// it from the start to avoid this situation
view_maximize(view, false);
wl_list_insert(&server->views, &view->link);
}