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 wl_listener toplevel_handle_request_maximize;
struct wl_listener toplevel_handle_request_minimize;
struct wl_listener map;
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(struct view *view, double x, double y);
void view_minimize(struct view *view);
void view_unminimize(struct view *view);
void view_minimize(struct view *view, bool minimized);
/* view_wlr_output - return the output that a view is mostly on */
struct wlr_output *view_wlr_output(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);
break;
case LAB_SSD_BUTTON_ICONIFY:
view_minimize(view);
view_minimize(view, true);
break;
case LAB_SSD_PART_TITLE:
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) {
/* this will unmap and then focus */
view_unminimize(view);
view_minimize(view, false);
return;
} else if (view->mapped) {
struct wlr_surface *prev_surface;

View file

@ -1,12 +1,20 @@
#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
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);
}
@ -23,4 +31,8 @@ foreign_toplevel_handle_create(struct view *view)
handle_toplevel_handle_request_maximize;
wl_signal_add(&view->toplevel_handle->events.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
view_minimize(struct view *view)
view_minimize(struct view *view, bool minimized)
{
if (view->minimized == true) {
if (view->minimized == minimized) {
return;
}
view->minimized = true;
view->impl->unmap(view);
}
void
view_unminimize(struct view *view)
{
if (view->minimized == false) {
return;
if (view->toplevel_handle) {
wlr_foreign_toplevel_handle_v1_set_minimized(view->toplevel_handle,
minimized);
}
view->minimized = minimized;
if (minimized) {
view->impl->unmap(view);
} else {
view->impl->map(view);
}
view->minimized = false;
view->impl->map(view);
}
/* view_wlr_output - return the output that a view is mostly on */