deps: Update smithay
This commit is contained in:
parent
ec647597f1
commit
8a2e1e5c89
10 changed files with 334 additions and 316 deletions
142
Cargo.lock
generated
142
Cargo.lock
generated
|
|
@ -352,7 +352,7 @@ dependencies = [
|
|||
"smithay-egui",
|
||||
"thiserror",
|
||||
"wayland-backend",
|
||||
"wayland-scanner 0.30.0-beta.15",
|
||||
"wayland-scanner 0.30.0",
|
||||
"xcursor",
|
||||
"xdg",
|
||||
"xkbcommon 0.4.1",
|
||||
|
|
@ -365,8 +365,8 @@ source = "git+https://github.com/pop-os/cosmic-protocols?branch=main#a3e0aa740a3
|
|||
dependencies = [
|
||||
"bitflags",
|
||||
"wayland-backend",
|
||||
"wayland-protocols 0.30.0-beta.15",
|
||||
"wayland-scanner 0.30.0-beta.15",
|
||||
"wayland-protocols 0.30.0",
|
||||
"wayland-scanner 0.30.0",
|
||||
"wayland-server",
|
||||
]
|
||||
|
||||
|
|
@ -650,6 +650,70 @@ dependencies = [
|
|||
"bytemuck",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "encoding"
|
||||
version = "0.2.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
|
||||
dependencies = [
|
||||
"encoding-index-japanese",
|
||||
"encoding-index-korean",
|
||||
"encoding-index-simpchinese",
|
||||
"encoding-index-singlebyte",
|
||||
"encoding-index-tradchinese",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "encoding-index-japanese"
|
||||
version = "1.20141219.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
|
||||
dependencies = [
|
||||
"encoding_index_tests",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "encoding-index-korean"
|
||||
version = "1.20141219.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81"
|
||||
dependencies = [
|
||||
"encoding_index_tests",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "encoding-index-simpchinese"
|
||||
version = "1.20141219.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7"
|
||||
dependencies = [
|
||||
"encoding_index_tests",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "encoding-index-singlebyte"
|
||||
version = "1.20141219.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a"
|
||||
dependencies = [
|
||||
"encoding_index_tests",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "encoding-index-tradchinese"
|
||||
version = "1.20141219.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
|
||||
dependencies = [
|
||||
"encoding_index_tests",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "encoding_index_tests"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
|
||||
|
||||
[[package]]
|
||||
name = "epaint"
|
||||
version = "0.19.0"
|
||||
|
|
@ -1309,6 +1373,19 @@ dependencies = [
|
|||
"memoffset 0.6.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.26.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "46a58d1d356c6597d08cde02c2f09d785b09e28711837b1ed667dc652c08a694"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"memoffset 0.7.1",
|
||||
"static_assertions",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nohash-hasher"
|
||||
version = "0.2.0"
|
||||
|
|
@ -1925,7 +2002,7 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
|
|||
[[package]]
|
||||
name = "smithay"
|
||||
version = "0.3.0"
|
||||
source = "git+https://github.com/pop-os/smithay?rev=51368f56bc#51368f56bc459c7dc5b9eff0385cd0bc49db53b2"
|
||||
source = "git+https://github.com/pop-os/smithay?rev=2a05d8cd64#2a05d8cd648bc9689491ff5a996fd7713f23aa77"
|
||||
dependencies = [
|
||||
"appendlist",
|
||||
"bitflags",
|
||||
|
|
@ -1936,6 +2013,7 @@ dependencies = [
|
|||
"drm",
|
||||
"drm-ffi",
|
||||
"drm-fourcc",
|
||||
"encoding",
|
||||
"gbm",
|
||||
"gl_generator",
|
||||
"glow",
|
||||
|
|
@ -1950,6 +2028,7 @@ dependencies = [
|
|||
"pkg-config",
|
||||
"rand",
|
||||
"scan_fmt",
|
||||
"scopeguard",
|
||||
"slog",
|
||||
"slog-stdlog",
|
||||
"tempfile",
|
||||
|
|
@ -1957,7 +2036,7 @@ dependencies = [
|
|||
"udev",
|
||||
"wayland-backend",
|
||||
"wayland-egl",
|
||||
"wayland-protocols 0.30.0-beta.15",
|
||||
"wayland-protocols 0.30.0",
|
||||
"wayland-protocols-misc",
|
||||
"wayland-protocols-wlr",
|
||||
"wayland-server",
|
||||
|
|
@ -2007,6 +2086,12 @@ version = "1.3.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "27207bb65232eda1f588cf46db2fee75c0808d557f6b3cf19a75f5d6d7c94df1"
|
||||
|
||||
[[package]]
|
||||
name = "static_assertions"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.10.0"
|
||||
|
|
@ -2362,14 +2447,14 @@ checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
|
|||
|
||||
[[package]]
|
||||
name = "wayland-backend"
|
||||
version = "0.1.0-beta.15"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5fd01ec68102e595371e585da12bb7d2785b93639a1b3a9f99f1030634c526ac"
|
||||
checksum = "fb23bfea266c92bb051ea36cce0eb1a52b743dc1c5f168021947eda79764656d"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"downcast-rs",
|
||||
"io-lifetimes",
|
||||
"nix 0.25.0",
|
||||
"nix 0.26.1",
|
||||
"scoped-tls",
|
||||
"smallvec",
|
||||
"wayland-sys 0.30.1",
|
||||
|
|
@ -2416,11 +2501,10 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "wayland-egl"
|
||||
version = "0.30.0-beta.15"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7bee5cad71e703c1cda119cd614ef8c8f1c6c5d04927c33f3485bdf22bef00db"
|
||||
checksum = "1187695fe81c3153c3163f9d2953149f638c5d7dbc6fe988914ca3f4961e28ed"
|
||||
dependencies = [
|
||||
"thiserror",
|
||||
"wayland-backend",
|
||||
"wayland-sys 0.30.1",
|
||||
]
|
||||
|
|
@ -2439,39 +2523,39 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "wayland-protocols"
|
||||
version = "0.30.0-beta.15"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "89c142821785f87f5c0c14d29b37b05b458a76f88f5b86d24e7be259e5659f48"
|
||||
checksum = "7fefbeb8a360abe67ab7c2efe1d297a1a50ee011f5460791bc18870c26bb84e2"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"wayland-backend",
|
||||
"wayland-scanner 0.30.0-beta.15",
|
||||
"wayland-scanner 0.30.0",
|
||||
"wayland-server",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wayland-protocols-misc"
|
||||
version = "0.1.0-beta.15"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ba9acd1d036b489da5036c257fe0b8bb815a202a35e6e7455f1262e2b6af0fc6"
|
||||
checksum = "897d4e99645e1ed9245e9e6b5efa78828d2b23b661016d63d55251243d812f8b"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"wayland-backend",
|
||||
"wayland-protocols 0.30.0-beta.15",
|
||||
"wayland-scanner 0.30.0-beta.15",
|
||||
"wayland-protocols 0.30.0",
|
||||
"wayland-scanner 0.30.0",
|
||||
"wayland-server",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wayland-protocols-wlr"
|
||||
version = "0.1.0-beta.15"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f3fb9e3d2d11e195572835a6a447ed98a5201f461f32ebcf3e8d3ec9a0502cfd"
|
||||
checksum = "fce991093320e4a6a525876e6b629ab24da25f9baef0c2e0080ad173ec89588a"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"wayland-backend",
|
||||
"wayland-protocols 0.30.0-beta.15",
|
||||
"wayland-scanner 0.30.0-beta.15",
|
||||
"wayland-protocols 0.30.0",
|
||||
"wayland-scanner 0.30.0",
|
||||
"wayland-server",
|
||||
]
|
||||
|
||||
|
|
@ -2488,29 +2572,27 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "wayland-scanner"
|
||||
version = "0.30.0-beta.15"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "528e351affadac21fa63ac149e68747a43500bd93d742c42b5b22473890fbfbb"
|
||||
checksum = "4834c14b3edf1d9986c83ca79b1e7e3afbe9874c7c144702f6467063259ce45d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quick-xml",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wayland-server"
|
||||
version = "0.30.0-beta.15"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ee9869ba2ca46e6689ef235a44ef1c452d7d7a89a3bc076411acf524ddf73bfa"
|
||||
checksum = "9062def387c1b1d80e366d8243c2b3bd6d9e4f343032a3e5da8d4aa03866cf89"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"downcast-rs",
|
||||
"io-lifetimes",
|
||||
"nix 0.25.0",
|
||||
"thiserror",
|
||||
"nix 0.26.1",
|
||||
"wayland-backend",
|
||||
"wayland-scanner 0.30.0-beta.15",
|
||||
"wayland-scanner 0.30.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@ indexmap = "1.8.0"
|
|||
xdg = "^2.1"
|
||||
ron = "0.7"
|
||||
libsystemd = "0.5"
|
||||
wayland-backend = "=0.1.0-beta.15"
|
||||
wayland-scanner = "=0.30.0-beta.15"
|
||||
wayland-backend = "0.1.0"
|
||||
wayland-scanner = "0.30.0"
|
||||
cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols", branch = "main", default-features = false, features = ["server"] }
|
||||
|
||||
[dependencies.smithay]
|
||||
|
|
@ -41,7 +41,7 @@ version = "0.3"
|
|||
git = "https://github.com/Smithay/smithay.git"
|
||||
rev = "2de946cf9e"
|
||||
default-features = false
|
||||
features = ["backend_drm", "backend_gbm", "backend_egl", "backend_libinput", "backend_session_libseat", "backend_udev", "backend_winit", "backend_x11", "desktop", "use_system_lib", "renderer_glow", "renderer_multi", "wayland_frontend", "slog-stdlog"]
|
||||
features = ["backend_drm", "backend_gbm", "backend_egl", "backend_libinput", "backend_session_libseat", "backend_udev", "backend_winit", "backend_x11", "desktop", "use_system_lib", "renderer_glow", "renderer_multi", "wayland_frontend", "slog-stdlog", "xwayland"]
|
||||
|
||||
[dependencies.smithay-egui]
|
||||
git = "https://github.com/Smithay/smithay-egui.git"
|
||||
|
|
@ -64,4 +64,4 @@ debug = true
|
|||
lto = "fat"
|
||||
|
||||
[patch."https://github.com/Smithay/smithay.git"]
|
||||
smithay = { git = "https://github.com/pop-os/smithay", rev = "51368f56bc" }
|
||||
smithay = { git = "https://github.com/pop-os/smithay", rev = "2a05d8cd64" }
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ use smithay::{
|
|||
glow::GlowRenderer,
|
||||
multigpu::{egl::EglGlesBackend, GpuManager},
|
||||
},
|
||||
session::{auto::AutoSession, Session, Signal},
|
||||
session::{libseat::LibSeatSession, Event as SessionEvent, Session},
|
||||
udev::{all_gpus, primary_gpu, UdevBackend, UdevEvent},
|
||||
},
|
||||
desktop::utils::OutputPresentationFeedback,
|
||||
|
|
@ -45,10 +45,7 @@ use smithay::{
|
|||
wayland_protocols::wp::presentation_time::server::wp_presentation_feedback,
|
||||
wayland_server::{protocol::wl_surface::WlSurface, DisplayHandle, Resource},
|
||||
},
|
||||
utils::{
|
||||
signaling::{Linkable, SignalToken, Signaler},
|
||||
DeviceFd, Size, Transform,
|
||||
},
|
||||
utils::{DeviceFd, Size, Transform},
|
||||
wayland::dmabuf::DmabufGlobal,
|
||||
};
|
||||
|
||||
|
|
@ -72,9 +69,7 @@ pub struct KmsState {
|
|||
devices: HashMap<DrmNode, Device>,
|
||||
pub api: GpuManager<EglGlesBackend<GlowRenderer>>,
|
||||
pub primary: DrmNode,
|
||||
session: AutoSession,
|
||||
signaler: Signaler<Signal>,
|
||||
_restart_token: SignalToken,
|
||||
session: LibSeatSession,
|
||||
_tokens: Vec<RegistrationToken>,
|
||||
}
|
||||
|
||||
|
|
@ -107,17 +102,15 @@ pub fn init_backend(
|
|||
event_loop: &mut EventLoop<'static, Data>,
|
||||
state: &mut State,
|
||||
) -> Result<()> {
|
||||
let (session, notifier) = AutoSession::new(None).context("Failed to acquire session")?;
|
||||
let signaler = notifier.signaler();
|
||||
let (session, notifier) = LibSeatSession::new(None).context("Failed to acquire session")?;
|
||||
|
||||
let udev_backend = UdevBackend::new(session.seat(), None)?;
|
||||
let mut libinput_context =
|
||||
Libinput::new_with_udev::<LibinputSessionInterface<AutoSession>>(session.clone().into());
|
||||
Libinput::new_with_udev::<LibinputSessionInterface<LibSeatSession>>(session.clone().into());
|
||||
libinput_context
|
||||
.udev_assign_seat(&session.seat())
|
||||
.map_err(|_| anyhow::anyhow!("Failed to assign seat to libinput"))?;
|
||||
let mut libinput_backend = LibinputInputBackend::new(libinput_context, None);
|
||||
libinput_backend.link(signaler.clone());
|
||||
let libinput_backend = LibinputInputBackend::new(libinput_context.clone(), None);
|
||||
|
||||
let libinput_event_source = event_loop
|
||||
.handle()
|
||||
|
|
@ -143,12 +136,6 @@ pub fn init_backend(
|
|||
})
|
||||
.map_err(|err| err.error)
|
||||
.context("Failed to initialize libinput event source")?;
|
||||
let session_event_source = event_loop
|
||||
.handle()
|
||||
.insert_source(notifier, |(), &mut (), _state| {})
|
||||
.map_err(|err| err.error)
|
||||
.context("Failed to initialize session event source")?;
|
||||
|
||||
let api = GpuManager::new(EglGlesBackend::<GlowRenderer>::default(), None)
|
||||
.context("Failed to initialize renderers")?;
|
||||
|
||||
|
|
@ -209,85 +196,98 @@ pub fn init_backend(
|
|||
let handle = event_loop.handle();
|
||||
let loop_signal = state.common.event_loop_signal.clone();
|
||||
let dispatcher = udev_dispatcher.clone();
|
||||
let _restart_token = signaler.register(move |signal| {
|
||||
if let Signal::ActivateSession = signal {
|
||||
let dispatcher = dispatcher.clone();
|
||||
handle.insert_idle(move |data| {
|
||||
for (dev, path) in dispatcher.as_source_ref().device_list() {
|
||||
let drm_node = match DrmNode::from_dev_id(dev) {
|
||||
Ok(node) => node,
|
||||
Err(err) => {
|
||||
slog_scope::error!(
|
||||
"Failed to read drm device {}: {}",
|
||||
path.display(),
|
||||
err
|
||||
);
|
||||
continue;
|
||||
}
|
||||
};
|
||||
if data.state.backend.kms().devices.contains_key(&drm_node) {
|
||||
if let Err(err) = data.state.device_changed(dev) {
|
||||
slog_scope::error!(
|
||||
"Failed to update drm device {}: {}",
|
||||
path.display(),
|
||||
err
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if let Err(err) =
|
||||
data.state
|
||||
.device_added(dev, path.into(), &data.display.handle())
|
||||
{
|
||||
slog_scope::error!(
|
||||
"Failed to add drm device {}: {}",
|
||||
path.display(),
|
||||
err
|
||||
);
|
||||
}
|
||||
}
|
||||
let session_event_source = event_loop
|
||||
.handle()
|
||||
.insert_source(notifier, move |event, &mut (), data| match event {
|
||||
SessionEvent::ActivateSession => {
|
||||
if let Err(err) = libinput_context.resume() {
|
||||
slog_scope::error!("Failed to resume libinput context: {:?}", err);
|
||||
}
|
||||
|
||||
let seats = data.state.common.seats().cloned().collect::<Vec<_>>();
|
||||
data.state.common.config.read_outputs(
|
||||
&mut data.state.common.output_configuration_state,
|
||||
&mut data.state.backend,
|
||||
&mut data.state.common.shell,
|
||||
seats.into_iter(),
|
||||
&data.state.common.event_loop_handle,
|
||||
);
|
||||
for surface in data
|
||||
.state
|
||||
.backend
|
||||
.kms()
|
||||
.devices
|
||||
.values_mut()
|
||||
.flat_map(|d| d.surfaces.values_mut())
|
||||
{
|
||||
surface.pending = false;
|
||||
}
|
||||
for output in data.state.common.shell.outputs() {
|
||||
let sessions = output.pending_buffers().collect::<Vec<_>>();
|
||||
if let Err(err) = data.state.backend.kms().schedule_render(
|
||||
&data.state.common.event_loop_handle,
|
||||
output,
|
||||
None,
|
||||
if !sessions.is_empty() {
|
||||
Some(sessions)
|
||||
let dispatcher = dispatcher.clone();
|
||||
handle.insert_idle(move |data| {
|
||||
for (dev, path) in dispatcher.as_source_ref().device_list() {
|
||||
let drm_node = match DrmNode::from_dev_id(dev) {
|
||||
Ok(node) => node,
|
||||
Err(err) => {
|
||||
slog_scope::error!(
|
||||
"Failed to read drm device {}: {}",
|
||||
path.display(),
|
||||
err
|
||||
);
|
||||
continue;
|
||||
}
|
||||
};
|
||||
if data.state.backend.kms().devices.contains_key(&drm_node) {
|
||||
if let Err(err) = data.state.device_changed(dev) {
|
||||
slog_scope::error!(
|
||||
"Failed to update drm device {}: {}",
|
||||
path.display(),
|
||||
err
|
||||
);
|
||||
}
|
||||
} else {
|
||||
None
|
||||
},
|
||||
) {
|
||||
slog_scope::crit!(
|
||||
"Error scheduling event loop for output {}: {:?}",
|
||||
output.name(),
|
||||
err
|
||||
);
|
||||
if let Err(err) =
|
||||
data.state
|
||||
.device_added(dev, path.into(), &data.display.handle())
|
||||
{
|
||||
slog_scope::error!(
|
||||
"Failed to add drm device {}: {}",
|
||||
path.display(),
|
||||
err
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let seats = data.state.common.seats().cloned().collect::<Vec<_>>();
|
||||
data.state.common.config.read_outputs(
|
||||
&mut data.state.common.output_configuration_state,
|
||||
&mut data.state.backend,
|
||||
&mut data.state.common.shell,
|
||||
seats.into_iter(),
|
||||
&data.state.common.event_loop_handle,
|
||||
);
|
||||
for surface in data
|
||||
.state
|
||||
.backend
|
||||
.kms()
|
||||
.devices
|
||||
.values_mut()
|
||||
.flat_map(|d| d.surfaces.values_mut())
|
||||
{
|
||||
surface.pending = false;
|
||||
}
|
||||
for output in data.state.common.shell.outputs() {
|
||||
let sessions = output.pending_buffers().collect::<Vec<_>>();
|
||||
if let Err(err) = data.state.backend.kms().schedule_render(
|
||||
&data.state.common.event_loop_handle,
|
||||
output,
|
||||
None,
|
||||
if !sessions.is_empty() {
|
||||
Some(sessions)
|
||||
} else {
|
||||
None
|
||||
},
|
||||
) {
|
||||
slog_scope::crit!(
|
||||
"Error scheduling event loop for output {}: {:?}",
|
||||
output.name(),
|
||||
err
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
loop_signal.wakeup();
|
||||
}
|
||||
SessionEvent::PauseSession => {
|
||||
libinput_context.suspend();
|
||||
for device in data.state.backend.kms().devices.values() {
|
||||
device.drm.as_source_ref().pause();
|
||||
}
|
||||
});
|
||||
loop_signal.wakeup();
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
.map_err(|err| err.error)
|
||||
.context("Failed to initialize session event source")?;
|
||||
|
||||
state.backend = BackendData::Kms(KmsState {
|
||||
api,
|
||||
|
|
@ -298,8 +298,6 @@ pub fn init_backend(
|
|||
],
|
||||
primary,
|
||||
session,
|
||||
signaler,
|
||||
_restart_token,
|
||||
devices: HashMap::new(),
|
||||
});
|
||||
|
||||
|
|
@ -337,7 +335,7 @@ impl State {
|
|||
},
|
||||
None,
|
||||
);
|
||||
let mut drm = DrmDevice::new(fd.clone(), false, None)
|
||||
let drm = DrmDevice::new(fd.clone(), false, None)
|
||||
.with_context(|| format!("Failed to initialize drm device for: {}", path.display()))?;
|
||||
let drm_node = DrmNode::from_dev_id(dev)?;
|
||||
let supports_atomic = drm.is_atomic();
|
||||
|
|
@ -369,7 +367,6 @@ impl State {
|
|||
})?;
|
||||
let formats = egl_context.dmabuf_render_formats().clone();
|
||||
|
||||
drm.link(self.backend.kms().signaler.clone());
|
||||
let dispatcher =
|
||||
Dispatcher::new(drm, move |event, metadata, data: &mut Data| match event {
|
||||
DrmEvent::VBlank(crtc) => {
|
||||
|
|
@ -943,9 +940,8 @@ impl KmsState {
|
|||
surface.vrr = drm_helpers::set_vrr(drm, *crtc, conn, output_config.vrr)
|
||||
.unwrap_or(false);
|
||||
surface.refresh_rate = drm_helpers::calculate_refresh_rate(*mode);
|
||||
let mut drm_surface = drm.create_surface(*crtc, *mode, &[conn])?;
|
||||
drm_surface.link(self.signaler.clone());
|
||||
|
||||
let drm_surface = drm.create_surface(*crtc, *mode, &[conn])?;
|
||||
let target = GbmBufferedSurface::new(
|
||||
drm_surface,
|
||||
device.allocator.clone(),
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ use smithay::{
|
|||
ImportAll, Renderer,
|
||||
},
|
||||
},
|
||||
desktop::{space::SpaceElement, Kind, PopupManager, Window, WindowSurfaceType},
|
||||
desktop::{space::SpaceElement, PopupManager, Window, WindowSurfaceType},
|
||||
input::{
|
||||
keyboard::{KeyboardTarget, KeysymHandle, ModifiersState},
|
||||
pointer::{AxisFrame, ButtonEvent, MotionEvent, PointerTarget},
|
||||
|
|
@ -252,16 +252,13 @@ impl CosmicMapped {
|
|||
CosmicMappedInternal::Window(w) => Box::new(std::iter::once(w.window.clone())),
|
||||
_ => unreachable!(),
|
||||
} {
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => xdg.with_pending_state(|state| {
|
||||
if resizing {
|
||||
state.states.set(XdgState::Resizing);
|
||||
} else {
|
||||
state.states.unset(XdgState::Resizing);
|
||||
}
|
||||
}),
|
||||
// Kind::X11?
|
||||
};
|
||||
window.toplevel().with_pending_state(|state| {
|
||||
if resizing {
|
||||
state.states.set(XdgState::Resizing);
|
||||
} else {
|
||||
state.states.unset(XdgState::Resizing);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -272,37 +269,31 @@ impl CosmicMapped {
|
|||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => {
|
||||
xdg.current_state().states.contains(XdgState::Resizing)
|
||||
|| xdg.with_pending_state(|states| states.states.contains(XdgState::Resizing))
|
||||
} // Kind::X11?
|
||||
}
|
||||
let xdg = window.toplevel();
|
||||
xdg.current_state().states.contains(XdgState::Resizing)
|
||||
|| xdg.with_pending_state(|states| states.states.contains(XdgState::Resizing))
|
||||
}
|
||||
|
||||
pub fn set_tiled(&self, tiled: bool) {
|
||||
for toplevel in match &self.element {
|
||||
for xdg in match &self.element {
|
||||
// we use the tiled state of stack windows anyway to get rid of decorations
|
||||
CosmicMappedInternal::Stack(_) => None,
|
||||
CosmicMappedInternal::Window(w) => Some(w.window.toplevel()),
|
||||
_ => unreachable!(),
|
||||
} {
|
||||
match toplevel {
|
||||
Kind::Xdg(xdg) => xdg.with_pending_state(|state| {
|
||||
if tiled {
|
||||
state.states.set(XdgState::TiledLeft);
|
||||
state.states.set(XdgState::TiledRight);
|
||||
state.states.set(XdgState::TiledTop);
|
||||
state.states.set(XdgState::TiledBottom);
|
||||
} else {
|
||||
state.states.unset(XdgState::TiledLeft);
|
||||
state.states.unset(XdgState::TiledRight);
|
||||
state.states.unset(XdgState::TiledTop);
|
||||
state.states.unset(XdgState::TiledBottom);
|
||||
}
|
||||
}),
|
||||
// Kind::X11?
|
||||
};
|
||||
xdg.with_pending_state(|state| {
|
||||
if tiled {
|
||||
state.states.set(XdgState::TiledLeft);
|
||||
state.states.set(XdgState::TiledRight);
|
||||
state.states.set(XdgState::TiledTop);
|
||||
state.states.set(XdgState::TiledBottom);
|
||||
} else {
|
||||
state.states.unset(XdgState::TiledLeft);
|
||||
state.states.unset(XdgState::TiledRight);
|
||||
state.states.unset(XdgState::TiledTop);
|
||||
state.states.unset(XdgState::TiledBottom);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -313,10 +304,11 @@ impl CosmicMapped {
|
|||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => xdg.current_state().states.contains(XdgState::TiledLeft),
|
||||
// Kind::X11?
|
||||
}
|
||||
window
|
||||
.toplevel()
|
||||
.current_state()
|
||||
.states
|
||||
.contains(XdgState::TiledLeft)
|
||||
}
|
||||
|
||||
pub fn set_fullscreen(&self, fullscreen: bool) {
|
||||
|
|
@ -327,16 +319,13 @@ impl CosmicMapped {
|
|||
CosmicMappedInternal::Window(w) => Box::new(std::iter::once(w.window.clone())),
|
||||
_ => unreachable!(),
|
||||
} {
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => xdg.with_pending_state(|state| {
|
||||
if fullscreen {
|
||||
state.states.set(XdgState::Fullscreen);
|
||||
} else {
|
||||
state.states.unset(XdgState::Fullscreen);
|
||||
}
|
||||
}),
|
||||
// Kind::X11?
|
||||
};
|
||||
window.toplevel().with_pending_state(|state| {
|
||||
if fullscreen {
|
||||
state.states.set(XdgState::Fullscreen);
|
||||
} else {
|
||||
state.states.unset(XdgState::Fullscreen);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -347,12 +336,9 @@ impl CosmicMapped {
|
|||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => {
|
||||
xdg.current_state().states.contains(XdgState::Fullscreen)
|
||||
|| xdg.with_pending_state(|states| states.states.contains(XdgState::Fullscreen))
|
||||
} // Kind::X11?
|
||||
}
|
||||
let xdg = window.toplevel();
|
||||
xdg.current_state().states.contains(XdgState::Fullscreen)
|
||||
|| xdg.with_pending_state(|states| states.states.contains(XdgState::Fullscreen))
|
||||
}
|
||||
|
||||
pub fn set_maximized(&self, maximized: bool) {
|
||||
|
|
@ -363,16 +349,13 @@ impl CosmicMapped {
|
|||
CosmicMappedInternal::Window(w) => Box::new(std::iter::once(w.window.clone())),
|
||||
_ => unreachable!(),
|
||||
} {
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => xdg.with_pending_state(|state| {
|
||||
if maximized {
|
||||
state.states.set(XdgState::Maximized);
|
||||
} else {
|
||||
state.states.unset(XdgState::Maximized);
|
||||
}
|
||||
}),
|
||||
// Kind::X11?
|
||||
};
|
||||
window.toplevel().with_pending_state(|state| {
|
||||
if maximized {
|
||||
state.states.set(XdgState::Maximized);
|
||||
} else {
|
||||
state.states.unset(XdgState::Maximized);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -383,12 +366,9 @@ impl CosmicMapped {
|
|||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => {
|
||||
xdg.current_state().states.contains(XdgState::Maximized)
|
||||
|| xdg.with_pending_state(|states| states.states.contains(XdgState::Maximized))
|
||||
} // Kind::X11?
|
||||
}
|
||||
let xdg = window.toplevel();
|
||||
xdg.current_state().states.contains(XdgState::Maximized)
|
||||
|| xdg.with_pending_state(|states| states.states.contains(XdgState::Maximized))
|
||||
}
|
||||
|
||||
pub fn set_activated(&self, activated: bool) {
|
||||
|
|
@ -399,16 +379,13 @@ impl CosmicMapped {
|
|||
CosmicMappedInternal::Window(w) => Box::new(std::iter::once(w.window.clone())),
|
||||
_ => unreachable!(),
|
||||
} {
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => xdg.with_pending_state(|state| {
|
||||
if activated {
|
||||
state.states.set(XdgState::Activated);
|
||||
} else {
|
||||
state.states.unset(XdgState::Activated);
|
||||
}
|
||||
}),
|
||||
// Kind::X11?
|
||||
};
|
||||
window.toplevel().with_pending_state(|state| {
|
||||
if activated {
|
||||
state.states.set(XdgState::Activated);
|
||||
} else {
|
||||
state.states.unset(XdgState::Activated);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -419,12 +396,9 @@ impl CosmicMapped {
|
|||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => {
|
||||
xdg.current_state().states.contains(XdgState::Activated)
|
||||
|| xdg.with_pending_state(|states| states.states.contains(XdgState::Activated))
|
||||
} // Kind::X11?
|
||||
}
|
||||
let xdg = window.toplevel();
|
||||
xdg.current_state().states.contains(XdgState::Activated)
|
||||
|| xdg.with_pending_state(|states| states.states.contains(XdgState::Activated))
|
||||
}
|
||||
|
||||
pub fn set_size(&self, size: Size<i32, Logical>) {
|
||||
|
|
@ -536,10 +510,7 @@ impl CosmicMapped {
|
|||
CosmicMappedInternal::Window(w) => Box::new(std::iter::once(w.window.clone())),
|
||||
_ => unreachable!(),
|
||||
} {
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => xdg.send_configure(),
|
||||
// Kind::X11?
|
||||
};
|
||||
window.toplevel().send_configure();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -550,10 +521,7 @@ impl CosmicMapped {
|
|||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => xdg.send_close(),
|
||||
// Kind::X11?
|
||||
};
|
||||
window.toplevel().send_close();
|
||||
}
|
||||
|
||||
#[cfg(feature = "debug")]
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ use smithay::{
|
|||
ImportAll, Renderer,
|
||||
},
|
||||
},
|
||||
desktop::{space::SpaceElement, Kind, Window},
|
||||
desktop::{space::SpaceElement, Window},
|
||||
input::{
|
||||
keyboard::{KeyboardTarget, KeysymHandle, ModifiersState},
|
||||
pointer::{AxisFrame, ButtonEvent, MotionEvent, PointerTarget},
|
||||
|
|
@ -95,9 +95,9 @@ impl CosmicStack {
|
|||
.into();
|
||||
|
||||
for window in self.windows.lock().unwrap().iter() {
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => xdg.with_pending_state(|state| state.size = Some(surface_size)),
|
||||
};
|
||||
window
|
||||
.toplevel()
|
||||
.with_pending_state(|state| state.size = Some(surface_size));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ use smithay::{
|
|||
ImportAll, Renderer,
|
||||
},
|
||||
},
|
||||
desktop::{space::SpaceElement, Kind, Window},
|
||||
desktop::{space::SpaceElement, Window},
|
||||
input::{
|
||||
keyboard::{KeyboardTarget, KeysymHandle, ModifiersState},
|
||||
pointer::{AxisFrame, ButtonEvent, MotionEvent, PointerTarget},
|
||||
|
|
@ -72,18 +72,16 @@ impl CosmicWindow {
|
|||
.unwrap_or(0),
|
||||
)
|
||||
.into();
|
||||
match self.window.toplevel() {
|
||||
Kind::Xdg(xdg) => xdg.with_pending_state(|state| state.size = Some(surface_size)),
|
||||
};
|
||||
self.window
|
||||
.toplevel()
|
||||
.with_pending_state(|state| state.size = Some(surface_size));
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Window> for CosmicWindow {
|
||||
fn from(window: Window) -> Self {
|
||||
let is_ssd = matches!(
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(xdg) => xdg.current_state().decoration_mode,
|
||||
},
|
||||
window.toplevel().current_state().decoration_mode,
|
||||
Some(DecorationMode::ServerSide)
|
||||
);
|
||||
CosmicWindow {
|
||||
|
|
@ -100,7 +98,7 @@ impl From<ToplevelSurface> for CosmicWindow {
|
|||
Some(DecorationMode::ServerSide)
|
||||
);
|
||||
CosmicWindow {
|
||||
window: Window::new(Kind::Xdg(surf)),
|
||||
window: Window::new(surf),
|
||||
header: Arc::new(Mutex::new(is_ssd.then_some(HeaderBar::default()))),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ use smithay::{
|
|||
element::{surface::WaylandSurfaceRenderElement, AsRenderElements, Element, RenderElement},
|
||||
ImportAll, Renderer,
|
||||
},
|
||||
desktop::{layer_map_for_output, space::SpaceElement, Kind, LayerSurface, Window},
|
||||
desktop::{layer_map_for_output, space::SpaceElement, LayerSurface, Window},
|
||||
input::{pointer::GrabStartData as PointerGrabStartData, Seat},
|
||||
output::Output,
|
||||
reexports::{
|
||||
|
|
@ -197,13 +197,10 @@ impl Workspace {
|
|||
|
||||
self.floating_layer.maximize_request(window);
|
||||
|
||||
#[allow(irrefutable_let_patterns)]
|
||||
if let Kind::Xdg(xdg) = &window.toplevel() {
|
||||
xdg.with_pending_state(|state| {
|
||||
state.states.set(xdg_toplevel::State::Maximized);
|
||||
state.states.unset(xdg_toplevel::State::Fullscreen);
|
||||
});
|
||||
}
|
||||
window.toplevel().with_pending_state(|state| {
|
||||
state.states.set(xdg_toplevel::State::Maximized);
|
||||
state.states.unset(xdg_toplevel::State::Fullscreen);
|
||||
});
|
||||
|
||||
self.set_fullscreen(window, output)
|
||||
}
|
||||
|
|
@ -219,13 +216,10 @@ impl Workspace {
|
|||
return;
|
||||
}
|
||||
|
||||
#[allow(irrefutable_let_patterns)]
|
||||
if let Kind::Xdg(xdg) = &window.toplevel() {
|
||||
xdg.with_pending_state(|state| {
|
||||
state.states.set(xdg_toplevel::State::Fullscreen);
|
||||
state.states.unset(xdg_toplevel::State::Maximized);
|
||||
});
|
||||
}
|
||||
window.toplevel().with_pending_state(|state| {
|
||||
state.states.set(xdg_toplevel::State::Fullscreen);
|
||||
state.states.unset(xdg_toplevel::State::Maximized);
|
||||
});
|
||||
|
||||
self.set_fullscreen(window, output)
|
||||
}
|
||||
|
|
@ -238,38 +232,33 @@ impl Workspace {
|
|||
mapped.set_active(window);
|
||||
}
|
||||
|
||||
#[allow(irrefutable_let_patterns)]
|
||||
if let Kind::Xdg(xdg) = &window.toplevel() {
|
||||
xdg.with_pending_state(|state| {
|
||||
state.size = Some(
|
||||
output
|
||||
.current_mode()
|
||||
.map(|m| m.size)
|
||||
.unwrap_or((0, 0).into())
|
||||
.to_f64()
|
||||
.to_logical(output.current_scale().fractional_scale())
|
||||
.to_i32_round(),
|
||||
);
|
||||
});
|
||||
|
||||
xdg.send_configure();
|
||||
}
|
||||
let xdg = window.toplevel();
|
||||
xdg.with_pending_state(|state| {
|
||||
state.size = Some(
|
||||
output
|
||||
.current_mode()
|
||||
.map(|m| m.size)
|
||||
.unwrap_or((0, 0).into())
|
||||
.to_f64()
|
||||
.to_logical(output.current_scale().fractional_scale())
|
||||
.to_i32_round(),
|
||||
);
|
||||
});
|
||||
xdg.send_configure();
|
||||
self.fullscreen.insert(output.clone(), window.clone());
|
||||
}
|
||||
|
||||
pub fn unfullscreen_request(&mut self, window: &Window) {
|
||||
if self.fullscreen.values().any(|w| w == window) {
|
||||
#[allow(irrefutable_let_patterns)]
|
||||
if let Kind::Xdg(xdg) = &window.toplevel() {
|
||||
xdg.with_pending_state(|state| {
|
||||
state.states.unset(xdg_toplevel::State::Fullscreen);
|
||||
state.states.unset(xdg_toplevel::State::Maximized);
|
||||
state.size = None;
|
||||
});
|
||||
self.floating_layer.refresh();
|
||||
self.tiling_layer.refresh();
|
||||
xdg.send_configure();
|
||||
}
|
||||
let xdg = window.toplevel();
|
||||
xdg.with_pending_state(|state| {
|
||||
state.states.unset(xdg_toplevel::State::Fullscreen);
|
||||
state.states.unset(xdg_toplevel::State::Maximized);
|
||||
state.size = None;
|
||||
});
|
||||
self.floating_layer.refresh();
|
||||
self.tiling_layer.refresh();
|
||||
xdg.send_configure();
|
||||
self.fullscreen.retain(|_, w| w != window);
|
||||
}
|
||||
}
|
||||
|
|
@ -331,10 +320,7 @@ impl Workspace {
|
|||
if mapped.is_fullscreen() || mapped.is_maximized() {
|
||||
// If surface is maximized then unmaximize it
|
||||
self.unmaximize_request(window);
|
||||
let new_size = match window.toplevel() {
|
||||
Kind::Xdg(toplevel) => toplevel.with_pending_state(|state| state.size),
|
||||
//_ => unreachable!(), // TODO x11
|
||||
};
|
||||
let new_size = window.toplevel().with_pending_state(|state| state.size);
|
||||
let ratio = pos.x / output.geometry().size.w as f64;
|
||||
|
||||
initial_window_location = new_size
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use crate::{state::BackendData, utils::prelude::*, wayland::protocols::screencop
|
|||
use smithay::{
|
||||
backend::renderer::utils::{on_commit_buffer_handler, with_renderer_surface_state},
|
||||
delegate_compositor,
|
||||
desktop::{layer_map_for_output, Kind, LayerSurface, PopupKind, WindowSurfaceType},
|
||||
desktop::{layer_map_for_output, LayerSurface, PopupKind, WindowSurfaceType},
|
||||
reexports::wayland_server::protocol::wl_surface::WlSurface,
|
||||
wayland::{
|
||||
compositor::{with_states, CompositorHandler, CompositorState},
|
||||
|
|
@ -116,19 +116,14 @@ impl CompositorHandler for State {
|
|||
.find(|(window, _)| window.toplevel().wl_surface() == surface)
|
||||
.cloned()
|
||||
{
|
||||
match window.toplevel() {
|
||||
Kind::Xdg(toplevel) => {
|
||||
if self.toplevel_ensure_initial_configure(&toplevel)
|
||||
&& with_renderer_surface_state(&surface, |state| {
|
||||
state.wl_buffer().is_some()
|
||||
})
|
||||
{
|
||||
let output = seat.active_output();
|
||||
Shell::map_window(self, &window, &output);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
let toplevel = window.toplevel();
|
||||
if self.toplevel_ensure_initial_configure(&toplevel)
|
||||
&& with_renderer_surface_state(&surface, |state| state.wl_buffer().is_some())
|
||||
{
|
||||
let output = seat.active_output();
|
||||
Shell::map_window(self, &window, &output);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use smithay::{
|
||||
desktop::{Kind, Window},
|
||||
input::Seat,
|
||||
reexports::wayland_server::DisplayHandle,
|
||||
};
|
||||
use smithay::{desktop::Window, input::Seat, reexports::wayland_server::DisplayHandle};
|
||||
|
||||
use crate::{
|
||||
utils::prelude::*,
|
||||
|
|
@ -52,10 +48,7 @@ impl ToplevelManagementHandler for State {
|
|||
}
|
||||
|
||||
fn close(&mut self, _dh: &DisplayHandle, window: &Window) {
|
||||
#[allow(irrefutable_let_patterns)]
|
||||
if let Kind::Xdg(xdg) = &window.toplevel() {
|
||||
xdg.send_close();
|
||||
}
|
||||
window.toplevel().send_close();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use crate::{utils::prelude::*, wayland::protocols::screencopy::SessionType};
|
|||
use smithay::{
|
||||
delegate_xdg_shell,
|
||||
desktop::{
|
||||
find_popup_root_surface, Kind, PopupGrab, PopupKeyboardGrab, PopupKind, PopupPointerGrab,
|
||||
find_popup_root_surface, PopupGrab, PopupKeyboardGrab, PopupKind, PopupPointerGrab,
|
||||
PopupUngrabStrategy, Window,
|
||||
},
|
||||
input::{
|
||||
|
|
@ -39,7 +39,7 @@ impl XdgShellHandler for State {
|
|||
|
||||
fn new_toplevel(&mut self, surface: ToplevelSurface) {
|
||||
let seat = self.common.last_active_seat().clone();
|
||||
let window = Window::new(Kind::Xdg(surface));
|
||||
let window = Window::new(surface);
|
||||
self.common.shell.toplevel_info_state.new_toplevel(&window);
|
||||
self.common.shell.pending_windows.push((window, seat));
|
||||
// We will position the window after the first commit, when we know its size hints
|
||||
|
|
@ -149,7 +149,7 @@ impl XdgShellHandler for State {
|
|||
let output = seat.active_output();
|
||||
let (window, _) = mapped
|
||||
.windows()
|
||||
.find(|(w, _)| matches!(w.toplevel(), Kind::Xdg(s) if s == &surface))
|
||||
.find(|(w, _)| w.toplevel() == &surface)
|
||||
.unwrap();
|
||||
if let Some(grab) =
|
||||
workspace.move_request(&window, &seat, &output, serial, start_data)
|
||||
|
|
@ -213,7 +213,7 @@ impl XdgShellHandler for State {
|
|||
if let Some(workspace) = self.common.shell.space_for_mut(&mapped) {
|
||||
let (window, _) = mapped
|
||||
.windows()
|
||||
.find(|(w, _)| matches!(w.toplevel(), Kind::Xdg(s) if s == &surface))
|
||||
.find(|(w, _)| w.toplevel() == &surface)
|
||||
.unwrap();
|
||||
workspace.maximize_request(&window, &output)
|
||||
}
|
||||
|
|
@ -230,7 +230,7 @@ impl XdgShellHandler for State {
|
|||
if let Some(workspace) = self.common.shell.space_for_mut(&mapped) {
|
||||
let (window, _) = mapped
|
||||
.windows()
|
||||
.find(|(w, _)| matches!(w.toplevel(), Kind::Xdg(s) if s == &surface))
|
||||
.find(|(w, _)| w.toplevel() == &surface)
|
||||
.unwrap();
|
||||
workspace.unmaximize_request(&window)
|
||||
}
|
||||
|
|
@ -255,7 +255,7 @@ impl XdgShellHandler for State {
|
|||
if let Some(workspace) = self.common.shell.space_for_mut(&mapped) {
|
||||
let (window, _) = mapped
|
||||
.windows()
|
||||
.find(|(w, _)| matches!(w.toplevel(), Kind::Xdg(s) if s == &surface))
|
||||
.find(|(w, _)| w.toplevel() == &surface)
|
||||
.unwrap();
|
||||
workspace.fullscreen_request(&window, &output)
|
||||
}
|
||||
|
|
@ -272,7 +272,7 @@ impl XdgShellHandler for State {
|
|||
if let Some(workspace) = self.common.shell.space_for_mut(&mapped) {
|
||||
let (window, _) = mapped
|
||||
.windows()
|
||||
.find(|(w, _)| matches!(w.toplevel(), Kind::Xdg(s) if s == &surface))
|
||||
.find(|(w, _)| w.toplevel() == &surface)
|
||||
.unwrap();
|
||||
workspace.unfullscreen_request(&window)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue