mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-05-22 13:38:34 +03:00
implement xdg-foreign to put capture dialog on top
This commit is contained in:
committed by
Ferdinand Schober
parent
3e7b04c184
commit
304d8a193f
@@ -14,7 +14,7 @@ use std::{env, process, str};
|
||||
|
||||
use window::Window;
|
||||
|
||||
use lan_mouse_ipc::FrontendEvent;
|
||||
use lan_mouse_ipc::{FrontendEvent, FrontendRequest, WindowIdentifier};
|
||||
|
||||
use adw::Application;
|
||||
use gtk::{IconTheme, gdk::Display, glib::clone, prelude::*};
|
||||
@@ -23,6 +23,8 @@ use gtk::{gio, glib, prelude::ApplicationExt};
|
||||
use self::client_object::ClientObject;
|
||||
use self::key_object::KeyObject;
|
||||
|
||||
use gdk4_wayland::WaylandToplevel;
|
||||
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
@@ -227,6 +229,27 @@ fn build_ui(app: &Application) {
|
||||
});
|
||||
}
|
||||
|
||||
// export TopLevel handle and send it to the service so that it can put the InpuCapture / RemoteDesktop
|
||||
// windows on top of it using xdg-foreign.
|
||||
window.connect_show(|window| {
|
||||
// needs the surface so we have to present first!
|
||||
if let Some(surface) = window.surface() {
|
||||
if surface.display().backend().is_wayland() {
|
||||
// let surface = surface.downcast::<WaylandSurface>();
|
||||
let toplevel = surface.downcast::<WaylandToplevel>().expect("xdg-toplevel");
|
||||
let window = window.clone();
|
||||
toplevel.export_handle(move |_toplevel, handle| {
|
||||
if let Ok(handle) = handle {
|
||||
let handle = handle.to_string();
|
||||
window.request(FrontendRequest::WindowIdentifier(
|
||||
WindowIdentifier::Wayland(handle),
|
||||
));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
glib::spawn_future_local(clone!(
|
||||
#[weak]
|
||||
window,
|
||||
|
||||
@@ -433,7 +433,7 @@ impl Window {
|
||||
self.request(FrontendRequest::RemoveAuthorizedKey(fp));
|
||||
}
|
||||
|
||||
fn request(&self, request: FrontendRequest) {
|
||||
pub(crate) fn request(&self, request: FrontendRequest) {
|
||||
let mut requester = self.imp().frontend_request_writer.borrow_mut();
|
||||
let requester = requester.as_mut().unwrap();
|
||||
if let Err(e) = requester.request(request) {
|
||||
|
||||
Reference in New Issue
Block a user