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;
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->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);
}
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;
#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);
}
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);
}
}
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 */