summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStivvo <stivvo01@gmail.com>2020-09-04 19:20:07 +0200
committerStivvo <stivvo01@gmail.com>2020-09-05 10:40:52 +0200
commitdd2adb38ae69a59de2d1fb65452f4db459cc5c6b (patch)
treeba54bf3069f52b98cdf52ac90af84a38d7430d5c
parentaeae3dadbb94b77ecd45f1ab89769496c71d3782 (diff)
Fullscreen xwayland
-rw-r--r--dwl.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/dwl.c b/dwl.c
index 4911905..8bd1725 100644
--- a/dwl.c
+++ b/dwl.c
@@ -110,6 +110,7 @@ typedef struct {
int prevy;
int prevwidth;
int prevheight;
+ bool isfullscreen;
} Client;
typedef struct {
@@ -293,6 +294,7 @@ static struct wl_listener request_set_sel = {.notify = setsel};
#ifdef XWAYLAND
static void activatex11(struct wl_listener *listener, void *data);
static void createnotifyx11(struct wl_listener *listener, void *data);
+static void fullscreenotifyx11(struct wl_listener *listener, void *data);
static Atom getatom(xcb_connection_t *xc, const char *name);
static void renderindependents(struct wlr_output *output, struct timespec *now);
static void updatewindowtype(Client *c);
@@ -605,8 +607,8 @@ createnotify(struct wl_listener *listener, void *data)
c->destroy.notify = destroynotify;
wl_signal_add(&xdg_surface->events.destroy, &c->destroy);
- wl_signal_add(&xdg_surface->toplevel->events.request_fullscreen, &c->fullscreen);
c->fullscreen.notify = fullscreenotify;
+ wl_signal_add(&xdg_surface->toplevel->events.request_fullscreen, &c->fullscreen);
}
void
@@ -1847,6 +1849,34 @@ createnotifyx11(struct wl_listener *listener, void *data)
wl_signal_add(&xwayland_surface->events.request_activate, &c->activate);
c->destroy.notify = destroynotify;
wl_signal_add(&xwayland_surface->events.destroy, &c->destroy);
+
+ c->fullscreen.notify = fullscreenotifyx11;
+ wl_signal_add(&xwayland_surface->events.request_fullscreen, &c->fullscreen);
+ c->isfullscreen = false;
+}
+
+void
+fullscreenotifyx11(struct wl_listener *listener, void *data) {
+ FILE *xway = fopen("/tmp/dwl/xway", "a");
+ Client *c;
+ c = wl_container_of(listener, c, fullscreen);
+ c->isfullscreen = !c->isfullscreen;
+ wlr_xwayland_surface_set_fullscreen(
+ c->surface.xwayland, c->isfullscreen);
+ c->bw = ((int)(!c->isfullscreen)) * borderpx;
+
+ fprintf(xway, "fullscreen: %d\n", c->surface.xwayland->fullscreen);
+ fclose(xway);
+
+ if (c->isfullscreen) { /* fullscreen off */
+ c->prevx = c->geom.x;
+ c->prevy = c->geom.y;
+ c->prevheight = c->geom.height;
+ c->prevwidth = c->geom.width;
+ resize(c, c->mon->w.x, c->mon->w.y, c->mon->w.width, c->mon->w.height, 0);
+ } else { /* fullscreen on */
+ resize(c, c->prevx, c->prevy, c->prevwidth, c->prevheight, 1);
+ }
}
Atom