Xwayland: honor fullscreen requests
This commit is contained in:
parent
50814e0ffe
commit
4b94b9c083
2 changed files with 11 additions and 5 deletions
|
@ -323,7 +323,7 @@ pub fn setActivated(self: Self, activated: bool) void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn setFullscreen(self: Self, fullscreen: bool) void {
|
fn setFullscreen(self: Self, fullscreen: bool) void {
|
||||||
if (self.foreign_toplevel_handle) |handle| handle.setFullscreen(fullscreen);
|
if (self.foreign_toplevel_handle) |handle| handle.setFullscreen(fullscreen);
|
||||||
switch (self.impl) {
|
switch (self.impl) {
|
||||||
.xdg_toplevel => |xdg_toplevel| xdg_toplevel.setFullscreen(fullscreen),
|
.xdg_toplevel => |xdg_toplevel| xdg_toplevel.setFullscreen(fullscreen),
|
||||||
|
|
|
@ -46,6 +46,8 @@ request_configure: wl.Listener(*wlr.XwaylandSurface.event.Configure) =
|
||||||
commit: wl.Listener(*wlr.Surface) = wl.Listener(*wlr.Surface).init(handleCommit),
|
commit: wl.Listener(*wlr.Surface) = wl.Listener(*wlr.Surface).init(handleCommit),
|
||||||
set_title: wl.Listener(*wlr.XwaylandSurface) = wl.Listener(*wlr.XwaylandSurface).init(handleSetTitle),
|
set_title: wl.Listener(*wlr.XwaylandSurface) = wl.Listener(*wlr.XwaylandSurface).init(handleSetTitle),
|
||||||
set_class: wl.Listener(*wlr.XwaylandSurface) = wl.Listener(*wlr.XwaylandSurface).init(handleSetClass),
|
set_class: wl.Listener(*wlr.XwaylandSurface) = wl.Listener(*wlr.XwaylandSurface).init(handleSetClass),
|
||||||
|
request_fullscreen: wl.Listener(*wlr.XwaylandSurface) =
|
||||||
|
wl.Listener(*wlr.XwaylandSurface).init(handleRequestFullscreen),
|
||||||
|
|
||||||
pub fn init(self: *Self, view: *View, xwayland_surface: *wlr.XwaylandSurface) void {
|
pub fn init(self: *Self, view: *View, xwayland_surface: *wlr.XwaylandSurface) void {
|
||||||
self.* = .{ .view = view, .xwayland_surface = xwayland_surface };
|
self.* = .{ .view = view, .xwayland_surface = xwayland_surface };
|
||||||
|
@ -163,6 +165,7 @@ fn handleMap(listener: *wl.Listener(*wlr.XwaylandSurface), xwayland_surface: *wl
|
||||||
surface.events.commit.add(&self.commit);
|
surface.events.commit.add(&self.commit);
|
||||||
xwayland_surface.events.set_title.add(&self.set_title);
|
xwayland_surface.events.set_title.add(&self.set_title);
|
||||||
xwayland_surface.events.set_class.add(&self.set_class);
|
xwayland_surface.events.set_class.add(&self.set_class);
|
||||||
|
xwayland_surface.events.request_fullscreen.add(&self.request_fullscreen);
|
||||||
|
|
||||||
view.surface = surface;
|
view.surface = surface;
|
||||||
self.view.surface_box = .{
|
self.view.surface_box = .{
|
||||||
|
@ -212,6 +215,7 @@ fn handleUnmap(listener: *wl.Listener(*wlr.XwaylandSurface), xwayland_surface: *
|
||||||
self.commit.link.remove();
|
self.commit.link.remove();
|
||||||
self.set_title.link.remove();
|
self.set_title.link.remove();
|
||||||
self.set_class.link.remove();
|
self.set_class.link.remove();
|
||||||
|
self.request_fullscreen.link.remove();
|
||||||
|
|
||||||
self.view.unmap();
|
self.view.unmap();
|
||||||
}
|
}
|
||||||
|
@ -231,8 +235,6 @@ fn handleRequestConfigure(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Called when the surface is comitted
|
|
||||||
/// TODO: check for unexpected change in size and react as needed
|
|
||||||
fn handleCommit(listener: *wl.Listener(*wlr.Surface), surface: *wlr.Surface) void {
|
fn handleCommit(listener: *wl.Listener(*wlr.Surface), surface: *wlr.Surface) void {
|
||||||
const self = @fieldParentPtr(Self, "commit", listener);
|
const self = @fieldParentPtr(Self, "commit", listener);
|
||||||
|
|
||||||
|
@ -246,14 +248,18 @@ fn handleCommit(listener: *wl.Listener(*wlr.Surface), surface: *wlr.Surface) voi
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Called then the window updates its title
|
|
||||||
fn handleSetTitle(listener: *wl.Listener(*wlr.XwaylandSurface), xwayland_surface: *wlr.XwaylandSurface) void {
|
fn handleSetTitle(listener: *wl.Listener(*wlr.XwaylandSurface), xwayland_surface: *wlr.XwaylandSurface) void {
|
||||||
const self = @fieldParentPtr(Self, "set_title", listener);
|
const self = @fieldParentPtr(Self, "set_title", listener);
|
||||||
self.view.notifyTitle();
|
self.view.notifyTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Called then the window updates its class
|
|
||||||
fn handleSetClass(listener: *wl.Listener(*wlr.XwaylandSurface), xwayland_surface: *wlr.XwaylandSurface) void {
|
fn handleSetClass(listener: *wl.Listener(*wlr.XwaylandSurface), xwayland_surface: *wlr.XwaylandSurface) void {
|
||||||
const self = @fieldParentPtr(Self, "set_class", listener);
|
const self = @fieldParentPtr(Self, "set_class", listener);
|
||||||
self.view.notifyAppId();
|
self.view.notifyAppId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn handleRequestFullscreen(listener: *wl.Listener(*wlr.XwaylandSurface), xwayland_surface: *wlr.XwaylandSurface) void {
|
||||||
|
const self = @fieldParentPtr(Self, "request_fullscreen", listener);
|
||||||
|
self.view.pending.fullscreen = xwayland_surface.fullscreen;
|
||||||
|
self.view.applyPending();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue