gimp but for windows: a wayland compositor
git clone https://github.com/m-col/wimp
Files | Refs | Readme

Commit 35f1062e42ee5ba57b2e91bf932cb422581379ab
Parent: 04f47ac77b7cb1e6dde281eb18693841e0a95fb6
Author: mcol <mcol@posteo.net>
Date: 2021-01-20 20:52:15 +0000
Committer: mcol <mcol@posteo.net>
Committed: 2021-01-20 20:52:15 +0000

Complete fullscreen implementation

src/shell.h Modified

@@ -7,7 +7,7 @@
 void map_view(struct view *view);
 void focus_view(struct view *view, struct wlr_surface *surface);
 void fullscreen_xdg_surface(
-    struct server *server, struct wlr_xdg_surface *xdg_surface, struct wlr_output *output
+    struct view *view, struct wlr_xdg_surface *xdg_surface, struct wlr_output *output
 );
 void set_up_shell(struct server *server);
 

src/shell.c Modified

@@ -44,16 +44,17 @@
 
 
 void fullscreen_xdg_surface(
-    struct server *server, struct wlr_xdg_surface *xdg_surface, struct wlr_output *output
+    struct view *view, struct wlr_xdg_surface *xdg_surface, struct wlr_output *output
 ) {
+    struct server *server = view->server;
+    struct wlr_box *saved_geo = &server->current_desk->fullscreened_saved_geo;
+
     struct wlr_xdg_surface *prev_surface = server->current_desk->fullscreened;
     if (prev_surface) {
 	wlr_xdg_toplevel_set_fullscreen(prev_surface, false);
-	wlr_xdg_toplevel_set_size(
-	    prev_surface,
-	    server->current_desk->fullscreened_saved_geo.width,
-	    server->current_desk->fullscreened_saved_geo.height
-	);
+	wlr_xdg_toplevel_set_size(prev_surface, saved_geo->width, saved_geo->height);
+	view->x = saved_geo->x;
+	view->y = saved_geo->y;
     }
 
     if (prev_surface == xdg_surface) {
@@ -73,8 +74,11 @@
     }
 
     server->current_desk->fullscreened = xdg_surface;
-    server->current_desk->fullscreened_saved_geo.width = xdg_surface->geometry.width;
-    server->current_desk->fullscreened_saved_geo.height = xdg_surface->geometry.height;
+    saved_geo->x = view->x;
+    saved_geo->y = view->y;
+    view->x = view->y = 0;
+    saved_geo->width = xdg_surface->geometry.width;
+    saved_geo->height = xdg_surface->geometry.height;
     wlr_xdg_toplevel_set_fullscreen(xdg_surface, true);
     wlr_xdg_toplevel_set_size(xdg_surface, output->width, output->height);
 }
@@ -144,7 +148,7 @@
 void on_request_fullscreen(struct wl_listener *listener, void *data) {
     struct wlr_xdg_toplevel_set_fullscreen_event *event = data;
     struct view *view = wl_container_of(listener, view, request_fullscreen_listener);
-    fullscreen_xdg_surface(view->server, event->surface, event->output);
+    fullscreen_xdg_surface(view, event->surface, event->output);
 }
 
 

src/action.c Modified

@@ -197,5 +197,6 @@
     if (!surface)
 	return;
     struct wlr_xdg_surface *xdg_surface = wlr_xdg_surface_from_wlr_surface(surface);
-    fullscreen_xdg_surface(server, xdg_surface, NULL);
+    struct view *view = wl_container_of(server->current_desk->views.next, view, link);
+    fullscreen_xdg_surface(view, xdg_surface, NULL);
 }

readme.rst Modified

@@ -18,6 +18,5 @@
  - xdg-decoration protocol
  - functions to shift focus
  - functions to shift desk view
- - handle fullscreening
  - pinch gestures for desk zooming
  - draw rect with mouse when zoomed out to set new view