mirror of
https://github.com/cage-kiosk/cage.git
synced 2026-02-24 01:40:32 -05:00
Abstract fullscreen view away into a function
This commit is contained in:
parent
0f3ce4a7d8
commit
e68d76f403
1 changed files with 27 additions and 13 deletions
40
cage.c
40
cage.c
|
|
@ -77,6 +77,25 @@ struct cg_keyboard {
|
||||||
|
|
||||||
struct cg_server server = {0};
|
struct cg_server server = {0};
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
is_fullscreen_view(struct cg_view *view)
|
||||||
|
{
|
||||||
|
struct wlr_xdg_surface *parent = view->xdg_surface->toplevel->parent;
|
||||||
|
/* FIXME: role is 0? */
|
||||||
|
return parent == NULL; /*&& role == WLR_XDG_SURFACE_ROLE_TOPLEVEL */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
maximize_view(struct cg_view *view)
|
||||||
|
{
|
||||||
|
int output_width, output_height;
|
||||||
|
struct cg_output *output = view->server->output;
|
||||||
|
|
||||||
|
wlr_output_effective_resolution(output->wlr_output, &output_width, &output_height);
|
||||||
|
wlr_xdg_toplevel_set_size(view->xdg_surface, output_width, output_height);
|
||||||
|
wlr_xdg_toplevel_set_maximized(view->xdg_surface, true);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
center_view(struct cg_view *view)
|
center_view(struct cg_view *view)
|
||||||
{
|
{
|
||||||
|
|
@ -110,8 +129,9 @@ focus_view(struct cg_view *view)
|
||||||
wlr_xdg_toplevel_set_activated(previous, false);
|
wlr_xdg_toplevel_set_activated(previous, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Move the view to the front, but only if it isn't the "root" view. */
|
/* Move the view to the front, but only if it isn't the
|
||||||
if (view->xdg_surface->toplevel->parent != NULL) {
|
fullscreen view. */
|
||||||
|
if (!is_fullscreen_view(view)) {
|
||||||
wl_list_remove(&view->link);
|
wl_list_remove(&view->link);
|
||||||
wl_list_insert(&server->views, &view->link);
|
wl_list_insert(&server->views, &view->link);
|
||||||
}
|
}
|
||||||
|
|
@ -563,14 +583,8 @@ xdg_surface_map(struct wl_listener *listener, void *data)
|
||||||
struct cg_view *view = wl_container_of(listener, view, map);
|
struct cg_view *view = wl_container_of(listener, view, map);
|
||||||
view->mapped = true;
|
view->mapped = true;
|
||||||
|
|
||||||
/* If this is our "root" view, maximize it. Otherwise, center
|
if (is_fullscreen_view(view)) {
|
||||||
the "child". */
|
maximize_view(view);
|
||||||
if (view->xdg_surface->toplevel->parent == NULL) {
|
|
||||||
int output_width, output_height;
|
|
||||||
struct cg_output *output = view->server->output;
|
|
||||||
wlr_output_effective_resolution(output->wlr_output, &output_width, &output_height);
|
|
||||||
wlr_xdg_toplevel_set_size(view->xdg_surface, output_width, output_height);
|
|
||||||
wlr_xdg_toplevel_set_maximized(view->xdg_surface, true);
|
|
||||||
} else {
|
} else {
|
||||||
center_view(view);
|
center_view(view);
|
||||||
}
|
}
|
||||||
|
|
@ -594,14 +608,14 @@ xdg_surface_destroy(struct wl_listener *listener, void *data)
|
||||||
{
|
{
|
||||||
struct cg_view *view = wl_container_of(listener, view, destroy);
|
struct cg_view *view = wl_container_of(listener, view, destroy);
|
||||||
/* We only listen for events on toplevels, so this is safe. */
|
/* We only listen for events on toplevels, so this is safe. */
|
||||||
struct wlr_xdg_surface *parent = view->xdg_surface->toplevel->parent;
|
|
||||||
struct cg_server *server = view->server;
|
struct cg_server *server = view->server;
|
||||||
|
bool terminate = is_fullscreen_view(view);
|
||||||
|
|
||||||
wl_list_remove(&view->link);
|
wl_list_remove(&view->link);
|
||||||
free(view);
|
free(view);
|
||||||
|
|
||||||
/* If this was our "root" toplevel surface, exit. */
|
/* If this was our fullscreen view, exit. */
|
||||||
if (parent == NULL /*&& role == WLR_XDG_SURFACE_ROLE_TOPLEVEL FIXME: role is 0?*/) {
|
if (terminate) {
|
||||||
wl_display_terminate(server->wl_display);
|
wl_display_terminate(server->wl_display);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue