diff --git a/include/labwc.h b/include/labwc.h index 61933bcf..580fe0ff 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -224,6 +224,7 @@ struct view { } ssd; struct wlr_foreign_toplevel_handle_v1 *toplevel_handle; + struct wl_listener toplevel_handle_request_maximize; struct wl_listener map; struct wl_listener unmap; diff --git a/src/foreign.c b/src/foreign.c index e6d5dec2..2f8934fe 100644 --- a/src/foreign.c +++ b/src/foreign.c @@ -1,5 +1,15 @@ #include "labwc.h" +static void +handle_toplevel_handle_request_maximize(struct wl_listener *listener, void *data) +{ + struct view *view = wl_container_of(listener, view, + toplevel_handle_request_maximize); + struct wlr_foreign_toplevel_handle_v1_maximized_event *event = data; + printf("max=%d\n", event->maximized); + view_maximize(view, event->maximized); +} + void foreign_toplevel_handle_create(struct view *view) { @@ -8,4 +18,9 @@ foreign_toplevel_handle_create(struct view *view) view_update_title(view); wlr_foreign_toplevel_handle_v1_output_enter(view->toplevel_handle, view_wlr_output(view)); + + view->toplevel_handle_request_maximize.notify = + handle_toplevel_handle_request_maximize; + wl_signal_add(&view->toplevel_handle->events.request_maximize, + &view->toplevel_handle_request_maximize); } diff --git a/src/view.c b/src/view.c index 0b29ad72..a076a310 100644 --- a/src/view.c +++ b/src/view.c @@ -73,6 +73,10 @@ view_maximize(struct view *view, bool maximize) return; } view->impl->maximize(view, maximize); + if (view->toplevel_handle) { + wlr_foreign_toplevel_handle_v1_set_maximized(view->toplevel_handle, + maximize); + } if (maximize) { view->unmaximized_geometry.x = view->x; view->unmaximized_geometry.y = view->y;