wlr-foreign-toplevel-management: remove protocol
This can be re implemented after the migration to the scene graph is complete.
This commit is contained in:
parent
168756cbe8
commit
07294057cb
@ -61,7 +61,6 @@ new_layer_surface: wl.Listener(*wlr.LayerSurfaceV1),
|
|||||||
xwayland: if (build_options.xwayland) *wlr.Xwayland else void,
|
xwayland: if (build_options.xwayland) *wlr.Xwayland else void,
|
||||||
new_xwayland_surface: if (build_options.xwayland) wl.Listener(*wlr.XwaylandSurface) else void,
|
new_xwayland_surface: if (build_options.xwayland) wl.Listener(*wlr.XwaylandSurface) else void,
|
||||||
|
|
||||||
foreign_toplevel_manager: *wlr.ForeignToplevelManagerV1,
|
|
||||||
xdg_activation: *wlr.XdgActivationV1,
|
xdg_activation: *wlr.XdgActivationV1,
|
||||||
|
|
||||||
decoration_manager: DecorationManager,
|
decoration_manager: DecorationManager,
|
||||||
@ -115,7 +114,6 @@ pub fn init(self: *Self) !void {
|
|||||||
self.xwayland.events.new_surface.add(&self.new_xwayland_surface);
|
self.xwayland.events.new_surface.add(&self.new_xwayland_surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.foreign_toplevel_manager = try wlr.ForeignToplevelManagerV1.create(self.wl_server);
|
|
||||||
self.xdg_activation = try wlr.XdgActivationV1.create(self.wl_server);
|
self.xdg_activation = try wlr.XdgActivationV1.create(self.wl_server);
|
||||||
|
|
||||||
_ = try wlr.PrimarySelectionDeviceManagerV1.create(self.wl_server);
|
_ = try wlr.PrimarySelectionDeviceManagerV1.create(self.wl_server);
|
||||||
|
@ -113,15 +113,6 @@ post_fullscreen_box: wlr.Box = undefined,
|
|||||||
|
|
||||||
draw_borders: bool = true,
|
draw_borders: bool = true,
|
||||||
|
|
||||||
/// This is created when the view is mapped and destroyed when unmapped
|
|
||||||
foreign_toplevel_handle: ?*wlr.ForeignToplevelHandleV1 = null,
|
|
||||||
foreign_activate: wl.Listener(*wlr.ForeignToplevelHandleV1.event.Activated) =
|
|
||||||
wl.Listener(*wlr.ForeignToplevelHandleV1.event.Activated).init(handleForeignActivate),
|
|
||||||
foreign_fullscreen: wl.Listener(*wlr.ForeignToplevelHandleV1.event.Fullscreen) =
|
|
||||||
wl.Listener(*wlr.ForeignToplevelHandleV1.event.Fullscreen).init(handleForeignFullscreen),
|
|
||||||
foreign_close: wl.Listener(*wlr.ForeignToplevelHandleV1) =
|
|
||||||
wl.Listener(*wlr.ForeignToplevelHandleV1).init(handleForeignClose),
|
|
||||||
|
|
||||||
request_activate: wl.Listener(*wlr.XdgActivationV1.event.RequestActivate) =
|
request_activate: wl.Listener(*wlr.XdgActivationV1.event.RequestActivate) =
|
||||||
wl.Listener(*wlr.XdgActivationV1.event.RequestActivate).init(handleRequestActivate),
|
wl.Listener(*wlr.XdgActivationV1.event.RequestActivate).init(handleRequestActivate),
|
||||||
|
|
||||||
@ -280,11 +271,6 @@ pub fn sendToOutput(self: *Self, destination_output: *Output) void {
|
|||||||
if (self.surface != null) {
|
if (self.surface != null) {
|
||||||
self.sendLeave(self.output);
|
self.sendLeave(self.output);
|
||||||
self.sendEnter(destination_output);
|
self.sendEnter(destination_output);
|
||||||
|
|
||||||
// Must be present if surface is non-null indicating that the view
|
|
||||||
// is mapped.
|
|
||||||
self.foreign_toplevel_handle.?.outputLeave(self.output.wlr_output);
|
|
||||||
self.foreign_toplevel_handle.?.outputEnter(destination_output.wlr_output);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self.output = destination_output;
|
self.output = destination_output;
|
||||||
@ -344,7 +330,6 @@ pub fn close(self: Self) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn setActivated(self: Self, activated: bool) void {
|
pub fn setActivated(self: Self, activated: bool) void {
|
||||||
if (self.foreign_toplevel_handle) |handle| handle.setActivated(activated);
|
|
||||||
switch (self.impl) {
|
switch (self.impl) {
|
||||||
.xdg_toplevel => |xdg_toplevel| xdg_toplevel.setActivated(activated),
|
.xdg_toplevel => |xdg_toplevel| xdg_toplevel.setActivated(activated),
|
||||||
.xwayland_view => |xwayland_view| xwayland_view.setActivated(activated),
|
.xwayland_view => |xwayland_view| xwayland_view.setActivated(activated),
|
||||||
@ -352,7 +337,6 @@ pub fn setActivated(self: Self, activated: bool) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn setFullscreen(self: *Self, fullscreen: bool) void {
|
fn setFullscreen(self: *Self, fullscreen: bool) void {
|
||||||
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),
|
||||||
.xwayland_view => |*xwayland_view| {
|
.xwayland_view => |*xwayland_view| {
|
||||||
@ -482,21 +466,6 @@ pub fn shouldTrackConfigure(self: Self) bool {
|
|||||||
pub fn map(self: *Self) !void {
|
pub fn map(self: *Self) !void {
|
||||||
log.debug("view '{?s}' mapped", .{self.getTitle()});
|
log.debug("view '{?s}' mapped", .{self.getTitle()});
|
||||||
|
|
||||||
{
|
|
||||||
assert(self.foreign_toplevel_handle == null);
|
|
||||||
const handle = try wlr.ForeignToplevelHandleV1.create(server.foreign_toplevel_manager);
|
|
||||||
self.foreign_toplevel_handle = handle;
|
|
||||||
|
|
||||||
handle.events.request_activate.add(&self.foreign_activate);
|
|
||||||
handle.events.request_fullscreen.add(&self.foreign_fullscreen);
|
|
||||||
handle.events.request_close.add(&self.foreign_close);
|
|
||||||
|
|
||||||
if (self.getTitle()) |s| handle.setTitle(s);
|
|
||||||
if (self.getAppId()) |s| handle.setAppId(s);
|
|
||||||
|
|
||||||
handle.outputEnter(self.output.wlr_output);
|
|
||||||
}
|
|
||||||
|
|
||||||
server.xdg_activation.events.request_activate.add(&self.request_activate);
|
server.xdg_activation.events.request_activate.add(&self.request_activate);
|
||||||
|
|
||||||
// Add the view to the stack of its output
|
// Add the view to the stack of its output
|
||||||
@ -527,13 +496,6 @@ pub fn unmap(self: *Self) void {
|
|||||||
var it = server.input_manager.seats.first;
|
var it = server.input_manager.seats.first;
|
||||||
while (it) |seat_node| : (it = seat_node.next) seat_node.data.handleViewUnmap(self);
|
while (it) |seat_node| : (it = seat_node.next) seat_node.data.handleViewUnmap(self);
|
||||||
|
|
||||||
assert(self.foreign_toplevel_handle != null);
|
|
||||||
self.foreign_activate.link.remove();
|
|
||||||
self.foreign_fullscreen.link.remove();
|
|
||||||
self.foreign_close.link.remove();
|
|
||||||
self.foreign_toplevel_handle.?.destroy();
|
|
||||||
self.foreign_toplevel_handle = null;
|
|
||||||
|
|
||||||
self.request_activate.link.remove();
|
self.request_activate.link.remove();
|
||||||
|
|
||||||
self.output.sendViewTags();
|
self.output.sendViewTags();
|
||||||
@ -545,9 +507,6 @@ pub fn unmap(self: *Self) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn notifyTitle(self: *const Self) void {
|
pub fn notifyTitle(self: *const Self) void {
|
||||||
if (self.foreign_toplevel_handle) |handle| {
|
|
||||||
if (self.getTitle()) |s| handle.setTitle(s);
|
|
||||||
}
|
|
||||||
// Send title to all status listeners attached to a seat which focuses this view
|
// Send title to all status listeners attached to a seat which focuses this view
|
||||||
var seat_it = server.input_manager.seats.first;
|
var seat_it = server.input_manager.seats.first;
|
||||||
while (seat_it) |seat_node| : (seat_it = seat_node.next) {
|
while (seat_it) |seat_node| : (seat_it = seat_node.next) {
|
||||||
@ -560,40 +519,8 @@ pub fn notifyTitle(self: *const Self) void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn notifyAppId(self: Self) void {
|
pub fn notifyAppId(_: Self) void {
|
||||||
if (self.foreign_toplevel_handle) |handle| {
|
// TODO reimplement foreign-toplevel-management I guess.
|
||||||
if (self.getAppId()) |s| handle.setAppId(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Only honors the request if the view is already visible on the seat's
|
|
||||||
/// currently focused output. TODO: consider allowing this request to switch
|
|
||||||
/// output/tag focus.
|
|
||||||
fn handleForeignActivate(
|
|
||||||
listener: *wl.Listener(*wlr.ForeignToplevelHandleV1.event.Activated),
|
|
||||||
event: *wlr.ForeignToplevelHandleV1.event.Activated,
|
|
||||||
) void {
|
|
||||||
const self = @fieldParentPtr(Self, "foreign_activate", listener);
|
|
||||||
const seat = @intToPtr(*Seat, event.seat.data);
|
|
||||||
seat.focus(self);
|
|
||||||
server.root.startTransaction();
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handleForeignFullscreen(
|
|
||||||
listener: *wl.Listener(*wlr.ForeignToplevelHandleV1.event.Fullscreen),
|
|
||||||
event: *wlr.ForeignToplevelHandleV1.event.Fullscreen,
|
|
||||||
) void {
|
|
||||||
const self = @fieldParentPtr(Self, "foreign_fullscreen", listener);
|
|
||||||
self.pending.fullscreen = event.fullscreen;
|
|
||||||
self.applyPending();
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handleForeignClose(
|
|
||||||
listener: *wl.Listener(*wlr.ForeignToplevelHandleV1),
|
|
||||||
_: *wlr.ForeignToplevelHandleV1,
|
|
||||||
) void {
|
|
||||||
const self = @fieldParentPtr(Self, "foreign_close", listener);
|
|
||||||
self.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handleRequestActivate(
|
fn handleRequestActivate(
|
||||||
|
Loading…
Reference in New Issue
Block a user