foreign: handle minimize request

This commit is contained in:
Johan Malm 2021-08-05 13:00:34 +01:00
parent b4722d988e
commit 9cf0608aba
5 changed files with 28 additions and 18 deletions

View file

@ -225,6 +225,7 @@ struct view {
struct wlr_foreign_toplevel_handle_v1 *toplevel_handle; struct wlr_foreign_toplevel_handle_v1 *toplevel_handle;
struct wl_listener toplevel_handle_request_maximize; struct wl_listener toplevel_handle_request_maximize;
struct wl_listener toplevel_handle_request_minimize;
struct wl_listener map; struct wl_listener map;
struct wl_listener unmap; struct wl_listener unmap;
@ -296,8 +297,7 @@ void subsurface_create(struct view *view, struct wlr_subsurface *wlr_subsurface)
void view_move_resize(struct view *view, struct wlr_box geo); void view_move_resize(struct view *view, struct wlr_box geo);
void view_move(struct view *view, double x, double y); void view_move(struct view *view, double x, double y);
void view_minimize(struct view *view); void view_minimize(struct view *view, bool minimized);
void view_unminimize(struct view *view);
/* view_wlr_output - return the output that a view is mostly on */ /* view_wlr_output - return the output that a view is mostly on */
struct wlr_output *view_wlr_output(struct view *view); struct wlr_output *view_wlr_output(struct view *view);
void view_center(struct view *view); void view_center(struct view *view);

View file

@ -337,7 +337,7 @@ cursor_button(struct wl_listener *listener, void *data)
view->impl->close(view); view->impl->close(view);
break; break;
case LAB_SSD_BUTTON_ICONIFY: case LAB_SSD_BUTTON_ICONIFY:
view_minimize(view); view_minimize(view, true);
break; break;
case LAB_SSD_PART_TITLE: case LAB_SSD_PART_TITLE:
interactive_begin(view, LAB_INPUT_STATE_MOVE, 0); interactive_begin(view, LAB_INPUT_STATE_MOVE, 0);

View file

@ -98,7 +98,7 @@ desktop_focus_view(struct seat *seat, struct view *view)
} }
if (view->minimized) { if (view->minimized) {
/* this will unmap and then focus */ /* this will unmap and then focus */
view_unminimize(view); view_minimize(view, false);
return; return;
} else if (view->mapped) { } else if (view->mapped) {
struct wlr_surface *prev_surface; struct wlr_surface *prev_surface;

View file

@ -1,12 +1,20 @@
#include "labwc.h" #include "labwc.h"
static void
handle_toplevel_handle_request_minimize(struct wl_listener *listener, void *data)
{
struct view *view = wl_container_of(listener, view,
toplevel_handle_request_minimize);
struct wlr_foreign_toplevel_handle_v1_minimized_event *event = data;
view_minimize(view, event->minimized);
}
static void static void
handle_toplevel_handle_request_maximize(struct wl_listener *listener, void *data) handle_toplevel_handle_request_maximize(struct wl_listener *listener, void *data)
{ {
struct view *view = wl_container_of(listener, view, struct view *view = wl_container_of(listener, view,
toplevel_handle_request_maximize); toplevel_handle_request_maximize);
struct wlr_foreign_toplevel_handle_v1_maximized_event *event = data; struct wlr_foreign_toplevel_handle_v1_maximized_event *event = data;
printf("max=%d\n", event->maximized);
view_maximize(view, event->maximized); view_maximize(view, event->maximized);
} }
@ -23,4 +31,8 @@ foreign_toplevel_handle_create(struct view *view)
handle_toplevel_handle_request_maximize; handle_toplevel_handle_request_maximize;
wl_signal_add(&view->toplevel_handle->events.request_maximize, wl_signal_add(&view->toplevel_handle->events.request_maximize,
&view->toplevel_handle_request_maximize); &view->toplevel_handle_request_maximize);
view->toplevel_handle_request_minimize.notify =
handle_toplevel_handle_request_minimize;
wl_signal_add(&view->toplevel_handle->events.request_minimize,
&view->toplevel_handle_request_minimize);
} }

View file

@ -16,23 +16,21 @@ view_move(struct view *view, double x, double y)
} }
void void
view_minimize(struct view *view) view_minimize(struct view *view, bool minimized)
{ {
if (view->minimized == true) { if (view->minimized == minimized) {
return; return;
} }
view->minimized = true; if (view->toplevel_handle) {
view->impl->unmap(view); wlr_foreign_toplevel_handle_v1_set_minimized(view->toplevel_handle,
} minimized);
}
void view->minimized = minimized;
view_unminimize(struct view *view) if (minimized) {
{ view->impl->unmap(view);
if (view->minimized == false) { } else {
return; view->impl->map(view);
} }
view->minimized = false;
view->impl->map(view);
} }
/* view_wlr_output - return the output that a view is mostly on */ /* view_wlr_output - return the output that a view is mostly on */