Partially fixes #494.
Co-Authored-by: Consolatis
uint32_t resize_edges;
/* SSD state */
- struct view *ssd_focused_view;
+ struct view *focused_view;
struct ssd_hover_state ssd_hover_state;
/* Tree for all non-layer xdg/xwayland-shell surfaces */
void unmanaged_handle_map(struct wl_listener *listener, void *data);
#endif
-void view_set_activated(struct view *view, bool activated);
+void view_set_activated(struct view *view);
void view_close(struct view *view);
/**
/* Public SSD API */
void ssd_create(struct view *view);
-void ssd_set_active(struct view *view);
+void ssd_set_active(struct view *view, bool active);
void ssd_update_title(struct view *view);
void ssd_update_geometry(struct view *view);
void ssd_reload(struct view *view);
wl_list_insert_tail(&view->server->views, &view->link);
}
-static void
-deactivate_all_views(struct server *server)
-{
- struct view *view;
- wl_list_for_each (view, &server->views, link) {
- if (!view->mapped) {
- continue;
- }
- view_set_activated(view, false);
- }
-}
-
void
desktop_arrange_all_views(struct server *server)
{
return;
}
- deactivate_all_views(view->server);
- view_set_activated(view, true);
+ view_set_activated(view);
seat_focus_surface(seat, view->surface);
}
return 0;
}
-static void
-_ssd_set_active(struct ssd *ssd, bool active)
-{
- wlr_scene_node_set_enabled(&ssd->border.active.tree->node, active);
- wlr_scene_node_set_enabled(&ssd->titlebar.active.tree->node, active);
- wlr_scene_node_set_enabled(&ssd->border.inactive.tree->node, !active);
- wlr_scene_node_set_enabled(&ssd->titlebar.inactive.tree->node, !active);
-}
-
void
ssd_create(struct view *view)
{
+ bool is_active = view->server->focused_view == view;
+
if (view->ssd.tree) {
/* SSD was hidden. Just enable it */
wlr_scene_node_set_enabled(&view->ssd.tree->node, true);
+ ssd_set_active(view, is_active);
return;
}
ssd_border_create(view);
ssd_titlebar_create(view);
view->margin = ssd_thickness(view);
+ ssd_set_active(view, is_active);
}
void
return;
}
- bool view_was_active = view->server->ssd_focused_view == view;
ssd_destroy(view);
ssd_create(view);
- if (view_was_active) {
- view->server->ssd_focused_view = view;
- } else {
- _ssd_set_active(&view->ssd, false);
- }
}
void
return;
}
- /* Maybe reset focused view */
- if (view->server->ssd_focused_view == view) {
- view->server->ssd_focused_view = NULL;
- }
-
/* Maybe reset hover view */
struct ssd_hover_state *hover_state;
hover_state = &view->server->ssd_hover_state;
}
void
-ssd_set_active(struct view *view)
+ssd_set_active(struct view *view, bool active)
{
if (!view->ssd.tree) {
return;
}
-
- struct view *last = view->server->ssd_focused_view;
- if (last == view) {
- return;
- }
- if (last && last->ssd.tree) {
- _ssd_set_active(&last->ssd, false);
- }
- _ssd_set_active(&view->ssd, true);
- view->server->ssd_focused_view = view;
+ wlr_scene_node_set_enabled(&view->ssd.border.active.tree->node, active);
+ wlr_scene_node_set_enabled(&view->ssd.titlebar.active.tree->node, active);
+ wlr_scene_node_set_enabled(&view->ssd.border.inactive.tree->node, !active);
+ wlr_scene_node_set_enabled(&view->ssd.titlebar.inactive.tree->node, !active);
}
return dst;
}
-void
-view_set_activated(struct view *view, bool activated)
+static void
+_view_set_activated(struct view *view, bool activated)
{
- if (view->ssd.enabled) {
- ssd_set_active(view);
+ if (view->ssd.tree) {
+ ssd_set_active(view, activated);
}
if (view->impl->set_activated) {
view->impl->set_activated(view, activated);
}
}
+void
+view_set_activated(struct view *view)
+{
+ assert(view);
+
+ struct view *last = view->server->focused_view;
+ if (last == view) {
+ return;
+ }
+ if (last) {
+ _view_set_activated(last, false);
+ }
+ _view_set_activated(view, true);
+ view->server->focused_view = view;
+}
+
void
view_close(struct view *view)
{
if (minimized) {
view->impl->unmap(view);
desktop_move_to_back(view);
- view_set_activated(view, false);
} else {
view->impl->map(view);
}
server->seat.pressed.surface = NULL;
}
+ if (server->focused_view == view) {
+ server->focused_view = NULL;
+ }
+
if (server->cycle_view == view) {
/*
* If we are the current OSD selected view, cycle