struct wl_listener request_maximize;
struct wl_listener request_fullscreen;
struct wl_listener set_title;
+
+ struct {
+ struct wl_signal new_app_id;
+ struct wl_signal new_title;
+ struct wl_signal new_outputs;
+ struct wl_signal maximized;
+ struct wl_signal minimized;
+ struct wl_signal fullscreened;
+ struct wl_signal activated; /* bool *activated */
+ } events;
};
struct view_query {
void view_evacuate_region(struct view *view);
void view_on_output_destroy(struct view *view);
void view_connect_map(struct view *view, struct wlr_surface *surface);
+
+void view_init(struct view *view);
void view_destroy(struct view *view);
enum view_axis view_axis_parse(const char *direction);
view->toplevel.handle, activated);
}
+ wl_signal_emit_mutable(&view->events.activated, &activated);
+
if (rc.kb_layout_per_window) {
if (!activated) {
/* Store configured keyboard layout per view */
if (view->toplevel.handle) {
foreign_toplevel_update_outputs(view);
}
+ wl_signal_emit_mutable(&view->events.new_outputs, NULL);
desktop_update_top_layer_visiblity(view->server);
}
}
if (view->impl->minimize) {
view->impl->minimize(view, minimized);
}
+
view->minimized = minimized;
+ wl_signal_emit_mutable(&view->events.minimized, NULL);
+
if (minimized) {
view->impl->unmap(view, /* client_request */ false);
} else {
wlr_foreign_toplevel_handle_v1_set_maximized(
view->toplevel.handle, (maximized == VIEW_AXIS_BOTH));
}
+
view->maximized = maximized;
+ wl_signal_emit_mutable(&view->events.maximized, NULL);
/*
* Ensure that follow-up actions like SnapToEdge / SnapToRegion
wlr_foreign_toplevel_handle_v1_set_fullscreen(
view->toplevel.handle, fullscreen);
}
+
view->fullscreen = fullscreen;
+ wl_signal_emit_mutable(&view->events.fullscreened, NULL);
/* Re-show decorations when no longer fullscreen */
if (!fullscreen && view->ssd_enabled) {
}
ssd_update_title(view->ssd);
wlr_foreign_toplevel_handle_v1_set_title(view->toplevel.handle, title);
+ wl_signal_emit_mutable(&view->events.new_title, NULL);
}
void
if (view->ssd_enabled) {
ssd_update_window_icon(view->ssd);
}
+
+ wl_signal_emit_mutable(&view->events.new_app_id, NULL);
}
void
}
}
+void
+view_init(struct view *view)
+{
+ assert(view);
+
+ wl_signal_init(&view->events.new_app_id);
+ wl_signal_init(&view->events.new_title);
+ wl_signal_init(&view->events.new_outputs);
+ wl_signal_init(&view->events.maximized);
+ wl_signal_init(&view->events.minimized);
+ wl_signal_init(&view->events.fullscreened);
+ wl_signal_init(&view->events.activated);
+}
+
void
view_destroy(struct view *view)
{