~ruther/dwl

dd2adb38ae69a59de2d1fb65452f4db459cc5c6b — Stivvo 4 years ago aeae3da
Fullscreen xwayland
1 files changed, 31 insertions(+), 1 deletions(-)

M dwl.c
M dwl.c => dwl.c +31 -1
@@ 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

Do not follow this link