Compare commits
No commits in common. "c34af044311c986e5f8458cf61bab2508aca48fa" and "1a57634add6e820c299f1c59664cd98098a9c348" have entirely different histories.
c34af04431
...
1a57634add
36 changed files with 210 additions and 476 deletions
117
Cargo.lock
generated
117
Cargo.lock
generated
|
|
@ -787,13 +787,6 @@ dependencies = [
|
|||
"cfg_aliases",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "build_helpers"
|
||||
version = "0.14.0"
|
||||
dependencies = [
|
||||
"cfg_aliases",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "built"
|
||||
version = "0.8.0"
|
||||
|
|
@ -1083,7 +1076,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "clipboard_macos"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
|
||||
dependencies = [
|
||||
"objc",
|
||||
"objc-foundation",
|
||||
|
|
@ -1093,22 +1085,12 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "clipboard_wayland"
|
||||
version = "0.2.2"
|
||||
source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
|
||||
dependencies = [
|
||||
"dnd",
|
||||
"mime 0.1.0",
|
||||
"smithay-clipboard",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clipboard_x11"
|
||||
version = "0.4.2"
|
||||
source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
|
||||
dependencies = [
|
||||
"thiserror 1.0.69",
|
||||
"x11rb",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clock"
|
||||
version = "0.1.0"
|
||||
|
|
@ -1301,7 +1283,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-client-toolkit"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/pop-os/cosmic-protocols?rev=32283d7#32283d76a8d0342da74c4cc022a533c52dcf378f"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"cosmic-protocols",
|
||||
|
|
@ -1314,7 +1295,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-protocols"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/pop-os/cosmic-protocols?rev=32283d7#32283d76a8d0342da74c4cc022a533c52dcf378f"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"wayland-backend",
|
||||
|
|
@ -1328,8 +1308,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-text"
|
||||
version = "0.19.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "be17b688510d934ce13f48a2beba700e11583e281e0fda99c22bb256a14eda73"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"fontdb",
|
||||
|
|
@ -1347,6 +1325,7 @@ dependencies = [
|
|||
"unicode-linebreak",
|
||||
"unicode-script",
|
||||
"unicode-segmentation",
|
||||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1453,7 +1432,6 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
|
|||
[[package]]
|
||||
name = "cryoglyph"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/iced-rs/cryoglyph.git?rev=e429a025df36ab8145708acb309080ae3deec17a#e429a025df36ab8145708acb309080ae3deec17a"
|
||||
dependencies = [
|
||||
"cosmic-text",
|
||||
"etagere",
|
||||
|
|
@ -1630,7 +1608,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "dnd"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"mime 0.1.0",
|
||||
|
|
@ -1665,30 +1642,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "dpi"
|
||||
version = "0.1.2"
|
||||
source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366"
|
||||
|
||||
[[package]]
|
||||
name = "drm"
|
||||
version = "0.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"bytemuck",
|
||||
"drm-ffi",
|
||||
"drm-fourcc",
|
||||
"rustix 0.38.44",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "drm-ffi"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6"
|
||||
dependencies = [
|
||||
"drm-sys",
|
||||
"rustix 0.38.44",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "drm-fourcc"
|
||||
|
|
@ -1696,16 +1649,6 @@ version = "2.2.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4"
|
||||
|
||||
[[package]]
|
||||
name = "drm-sys"
|
||||
version = "0.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"linux-raw-sys 0.6.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "editor"
|
||||
version = "0.1.0"
|
||||
|
|
@ -2428,7 +2371,7 @@ dependencies = [
|
|||
"log",
|
||||
"presser",
|
||||
"thiserror 2.0.18",
|
||||
"windows 0.57.0",
|
||||
"windows 0.62.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -2964,7 +2907,6 @@ dependencies = [
|
|||
name = "iced"
|
||||
version = "0.14.0"
|
||||
dependencies = [
|
||||
"build_helpers",
|
||||
"criterion",
|
||||
"dnd",
|
||||
"iced_accessibility",
|
||||
|
|
@ -3016,7 +2958,6 @@ version = "0.14.0"
|
|||
dependencies = [
|
||||
"approx",
|
||||
"bitflags 2.11.0",
|
||||
"build_helpers",
|
||||
"bytes",
|
||||
"cosmic-client-toolkit",
|
||||
"dnd",
|
||||
|
|
@ -3123,7 +3064,6 @@ dependencies = [
|
|||
name = "iced_runtime"
|
||||
version = "0.14.0"
|
||||
dependencies = [
|
||||
"build_helpers",
|
||||
"bytes",
|
||||
"cosmic-client-toolkit",
|
||||
"dnd",
|
||||
|
|
@ -3191,7 +3131,6 @@ version = "0.14.0"
|
|||
dependencies = [
|
||||
"as-raw-xcb-connection",
|
||||
"bitflags 2.11.0",
|
||||
"build_helpers",
|
||||
"bytemuck",
|
||||
"cosmic-client-toolkit",
|
||||
"cryoglyph",
|
||||
|
|
@ -3206,7 +3145,6 @@ dependencies = [
|
|||
"resvg",
|
||||
"rustc-hash 2.1.2",
|
||||
"rustix 0.38.44",
|
||||
"smithay-client-toolkit 0.20.0",
|
||||
"thiserror 2.0.18",
|
||||
"tiny-xlib",
|
||||
"wayland-backend",
|
||||
|
|
@ -3221,7 +3159,6 @@ dependencies = [
|
|||
name = "iced_widget"
|
||||
version = "0.14.2"
|
||||
dependencies = [
|
||||
"build_helpers",
|
||||
"cosmic-client-toolkit",
|
||||
"dnd",
|
||||
"iced_accessibility",
|
||||
|
|
@ -3243,7 +3180,6 @@ dependencies = [
|
|||
name = "iced_winit"
|
||||
version = "0.14.0"
|
||||
dependencies = [
|
||||
"build_helpers",
|
||||
"cosmic-client-toolkit",
|
||||
"cursor-icon",
|
||||
"dnd",
|
||||
|
|
@ -3800,14 +3736,14 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
|
|||
|
||||
[[package]]
|
||||
name = "libredox"
|
||||
version = "0.1.16"
|
||||
version = "0.1.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c"
|
||||
checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"libc",
|
||||
"plain",
|
||||
"redox_syscall 0.7.4",
|
||||
"redox_syscall 0.9.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -3837,12 +3773,6 @@ version = "0.4.15"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.6.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7"
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.12.1"
|
||||
|
|
@ -4068,7 +3998,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "mime"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
|
||||
dependencies = [
|
||||
"smithay-clipboard",
|
||||
]
|
||||
|
|
@ -5494,6 +5423,16 @@ dependencies = [
|
|||
"font-types",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_event"
|
||||
version = "0.4.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c5018d583d6d2f5499352aea8d177e9067d1eb03ab17c78169d5ba7a30001b15"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"libredox",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.5.18"
|
||||
|
|
@ -5505,9 +5444,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.7.4"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a"
|
||||
checksum = "c5102a6aaa05aa011a238e178e6bca86d2cb56fc9f586d37cb80f5bca6e07759"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
]
|
||||
|
|
@ -6289,7 +6228,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "smithay-clipboard"
|
||||
version = "0.8.0"
|
||||
source = "git+https://github.com/pop-os/smithay-clipboard?tag=sctk-0.20#859b02c88f45c554049a67c6ddeec1692ce0e20b"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"raw-window-handle",
|
||||
|
|
@ -6347,14 +6285,12 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "softbuffer"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#a3f77e251e7422803f693df6e3fc313c010c4dcb"
|
||||
dependencies = [
|
||||
"as-raw-xcb-connection",
|
||||
"bytemuck",
|
||||
"cfg_aliases",
|
||||
"cocoa",
|
||||
"core-graphics",
|
||||
"drm",
|
||||
"fastrand",
|
||||
"foreign-types 0.5.0",
|
||||
"js-sys",
|
||||
|
|
@ -8022,12 +7958,10 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
|||
[[package]]
|
||||
name = "window_clipboard"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
|
||||
dependencies = [
|
||||
"clipboard-win",
|
||||
"clipboard_macos",
|
||||
"clipboard_wayland",
|
||||
"clipboard_x11",
|
||||
"dnd",
|
||||
"mime 0.1.0",
|
||||
"raw-window-handle",
|
||||
|
|
@ -8531,7 +8465,6 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
|
|||
[[package]]
|
||||
name = "winit"
|
||||
version = "0.31.0-beta.2"
|
||||
source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"cfg_aliases",
|
||||
|
|
@ -8557,7 +8490,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "winit-android"
|
||||
version = "0.31.0-beta.2"
|
||||
source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366"
|
||||
dependencies = [
|
||||
"android-activity",
|
||||
"bitflags 2.11.0",
|
||||
|
|
@ -8572,7 +8504,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "winit-appkit"
|
||||
version = "0.31.0-beta.2"
|
||||
source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"block2 0.6.2",
|
||||
|
|
@ -8594,7 +8525,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "winit-common"
|
||||
version = "0.31.0-beta.2"
|
||||
source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366"
|
||||
dependencies = [
|
||||
"memmap2 0.9.10",
|
||||
"objc2 0.6.4",
|
||||
|
|
@ -8609,7 +8539,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "winit-core"
|
||||
version = "0.31.0-beta.2"
|
||||
source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"cursor-icon",
|
||||
|
|
@ -8623,14 +8552,13 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "winit-orbital"
|
||||
version = "0.31.0-beta.2"
|
||||
source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"dpi",
|
||||
"libredox",
|
||||
"orbclient",
|
||||
"raw-window-handle",
|
||||
"redox_syscall 0.7.4",
|
||||
"redox_event",
|
||||
"smol_str",
|
||||
"tracing",
|
||||
"winit-core",
|
||||
|
|
@ -8639,7 +8567,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "winit-uikit"
|
||||
version = "0.31.0-beta.2"
|
||||
source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"block2 0.6.2",
|
||||
|
|
@ -8659,7 +8586,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "winit-wayland"
|
||||
version = "0.31.0-beta.2"
|
||||
source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"bitflags 2.11.0",
|
||||
|
|
@ -8685,7 +8611,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "winit-web"
|
||||
version = "0.31.0-beta.2"
|
||||
source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366"
|
||||
dependencies = [
|
||||
"atomic-waker",
|
||||
"bitflags 2.11.0",
|
||||
|
|
@ -8707,7 +8632,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "winit-win32"
|
||||
version = "0.31.0-beta.2"
|
||||
source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"cursor-icon",
|
||||
|
|
@ -8723,7 +8647,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "winit-x11"
|
||||
version = "0.31.0-beta.2"
|
||||
source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"bytemuck",
|
||||
|
|
@ -9268,3 +9191,7 @@ dependencies = [
|
|||
"syn",
|
||||
"winnow 0.7.15",
|
||||
]
|
||||
|
||||
[[patch.unused]]
|
||||
name = "cosmic-freedesktop-icons"
|
||||
version = "0.4.0"
|
||||
|
|
|
|||
21
Cargo.toml
21
Cargo.toml
|
|
@ -118,17 +118,13 @@ winit = [
|
|||
"iced_accessibility?/accesskit_winit",
|
||||
"iced_program/winit",
|
||||
]
|
||||
wayland = [
|
||||
"iced_renderer/wayland",
|
||||
"iced_winit/wayland",
|
||||
"iced_runtime/wayland",
|
||||
"iced_widget/wayland",
|
||||
"iced_core/wayland",
|
||||
]
|
||||
|
||||
wayland = ["iced_renderer/wayland", "iced_winit/wayland"]
|
||||
cctk = ["iced_winit/cctk", "iced_widget/cctk", "iced_core/cctk", "wayland"]
|
||||
# Enables the sctk shell.
|
||||
[dependencies]
|
||||
|
||||
|
||||
iced_devtools.workspace = true
|
||||
iced_devtools.optional = true
|
||||
iced_debug.workspace = true
|
||||
|
||||
iced_program.workspace = true
|
||||
|
|
@ -138,9 +134,10 @@ iced_renderer.workspace = true
|
|||
iced_runtime.workspace = true
|
||||
iced_widget.workspace = true
|
||||
iced_winit.workspace = true
|
||||
iced_winit.optional = true
|
||||
iced_devtools.optional = true
|
||||
iced_tester.workspace = true
|
||||
iced_tester.optional = true
|
||||
iced_winit.optional = true
|
||||
iced_highlighter.workspace = true
|
||||
iced_highlighter.optional = true
|
||||
iced_accessibility.workspace = true
|
||||
|
|
@ -193,7 +190,6 @@ members = [
|
|||
"winit",
|
||||
"examples/*",
|
||||
"accessibility",
|
||||
"build_helpers",
|
||||
]
|
||||
exclude = ["examples/integration"]
|
||||
|
||||
|
|
@ -367,6 +363,3 @@ useless_conversion = "deny"
|
|||
|
||||
[workspace.lints.rustdoc]
|
||||
broken_intra_doc_links = "forbid"
|
||||
|
||||
[build-dependencies]
|
||||
build_helpers = { path = "./build_helpers" }
|
||||
|
|
|
|||
3
build.rs
3
build.rs
|
|
@ -1,3 +0,0 @@
|
|||
fn main() {
|
||||
build_helpers::cfg_aliases_setup();
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
[package]
|
||||
name = "build_helpers"
|
||||
version.workspace = true
|
||||
authors.workspace = true
|
||||
edition.workspace = true
|
||||
license.workspace = true
|
||||
repository.workspace = true
|
||||
homepage.workspace = true
|
||||
categories.workspace = true
|
||||
keywords.workspace = true
|
||||
rust-version.workspace = true
|
||||
|
||||
[dependencies]
|
||||
cfg_aliases = { version = "0.2.1" }
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
use cfg_aliases::cfg_aliases;
|
||||
|
||||
pub fn cfg_aliases_setup() {
|
||||
// The script doesn't depend on our code
|
||||
println!("cargo:rerun-if-changed=build.rs");
|
||||
|
||||
// Setup cfg aliases
|
||||
cfg_aliases! {
|
||||
// Systems.
|
||||
android_platform: { target_os = "android" },
|
||||
wasm_platform: { all(target_family = "wasm", not(target_os = "emscripten")) },
|
||||
macos_platform: { target_os = "macos" },
|
||||
ios_platform: { target_os = "ios" },
|
||||
windows_platform: { target_os = "windows" },
|
||||
apple: { any(target_os = "ios", target_os = "macos") },
|
||||
free_unix: { all(unix, not(apple), not(android_platform), not(target_os = "emscripten")) },
|
||||
redox: { target_os = "redox" },
|
||||
|
||||
// Native displays.
|
||||
wayland_platform: { all(feature = "wayland", free_unix, not(wasm), not(redox)) },
|
||||
xdg_portal: { all(feature = "xdg-portal", free_unix, not(wasm), not(redox)) },
|
||||
orbital_platform: { redox },
|
||||
}
|
||||
}
|
||||
|
|
@ -19,7 +19,6 @@ crisp = []
|
|||
basic-shaping = []
|
||||
advanced-shaping = []
|
||||
a11y = ["iced_accessibility"]
|
||||
wayland = ["cctk"]
|
||||
|
||||
[dependencies]
|
||||
palette = "0.7"
|
||||
|
|
@ -44,6 +43,8 @@ window_clipboard.workspace = true
|
|||
dnd.workspace = true
|
||||
mime.workspace = true
|
||||
|
||||
cctk.workspace = true
|
||||
cctk.optional = true
|
||||
# /TODO(POP)
|
||||
[dependencies.iced_accessibility]
|
||||
version = "0.1.0"
|
||||
|
|
@ -55,10 +56,3 @@ raw-window-handle.workspace = true
|
|||
|
||||
[dev-dependencies]
|
||||
approx = "0.5"
|
||||
|
||||
[target.'cfg(all(unix, not(any(target_os = "redox", target_family = "wasm", target_os = "android", target_vendor = "apple"))))'.dependencies]
|
||||
cctk.workspace = true
|
||||
cctk.optional = true
|
||||
|
||||
[build-dependencies]
|
||||
build_helpers = { path = "../build_helpers" }
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
fn main() {
|
||||
build_helpers::cfg_aliases_setup();
|
||||
}
|
||||
|
|
@ -7,8 +7,7 @@ use crate::keyboard;
|
|||
use crate::mouse;
|
||||
use crate::touch;
|
||||
use crate::window;
|
||||
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
/// A platform specific event for wayland
|
||||
pub mod wayland;
|
||||
/// A user interface event.
|
||||
|
|
@ -50,7 +49,7 @@ pub enum Event {
|
|||
/// A platform specific event
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub enum PlatformSpecific {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
/// A Wayland specific event
|
||||
Wayland(wayland::Event),
|
||||
}
|
||||
|
|
|
|||
|
|
@ -446,22 +446,11 @@ where
|
|||
| Event::Touch(touch::Event::FingerPressed { .. })
|
||||
) {
|
||||
if cursor.position_over(bounds).is_none() {
|
||||
let was_visible = state.focused
|
||||
|| state.keyboard_focused
|
||||
|| state
|
||||
.selection
|
||||
.as_ref()
|
||||
.is_some_and(|sel| sel.anchor != sel.end);
|
||||
|
||||
state.focused = false;
|
||||
state.keyboard_focused = false;
|
||||
if let Some(sel) = &mut state.selection {
|
||||
sel.clear();
|
||||
}
|
||||
|
||||
if was_visible {
|
||||
shell.request_redraw();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -522,7 +511,6 @@ where
|
|||
state.focused = true;
|
||||
state.keyboard_focused = false;
|
||||
shell.capture_event();
|
||||
shell.request_redraw();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -532,7 +520,6 @@ where
|
|||
state.focused = true;
|
||||
state.keyboard_focused = false;
|
||||
shell.capture_event();
|
||||
shell.request_redraw();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -557,15 +544,7 @@ where
|
|||
position.y - anchor.y,
|
||||
);
|
||||
|
||||
let end = hit_to_grapheme(paragraph, relative, content);
|
||||
|
||||
// Only the drag reaching a new grapheme changes what
|
||||
// is drawn; plain motion inside one does not.
|
||||
if end != sel.end {
|
||||
sel.end = end;
|
||||
shell.request_redraw();
|
||||
}
|
||||
|
||||
sel.end = hit_to_grapheme(paragraph, relative, content);
|
||||
shell.capture_event();
|
||||
}
|
||||
}
|
||||
|
|
@ -608,7 +587,6 @@ where
|
|||
sel.anchor = 0;
|
||||
sel.end = grapheme_count;
|
||||
shell.capture_event();
|
||||
shell.request_redraw();
|
||||
return;
|
||||
}
|
||||
_ => {}
|
||||
|
|
@ -635,7 +613,6 @@ where
|
|||
sel.end = pos;
|
||||
}
|
||||
shell.capture_event();
|
||||
shell.request_redraw();
|
||||
}
|
||||
keyboard::Key::Named(keyboard::key::Named::ArrowRight) => {
|
||||
let by_word = is_jump_modifier(*modifiers);
|
||||
|
|
@ -656,7 +633,6 @@ where
|
|||
sel.end = pos;
|
||||
}
|
||||
shell.capture_event();
|
||||
shell.request_redraw();
|
||||
}
|
||||
keyboard::Key::Named(keyboard::key::Named::Home) => {
|
||||
if modifiers.shift() {
|
||||
|
|
@ -666,7 +642,6 @@ where
|
|||
sel.end = 0;
|
||||
}
|
||||
shell.capture_event();
|
||||
shell.request_redraw();
|
||||
}
|
||||
keyboard::Key::Named(keyboard::key::Named::End) => {
|
||||
if modifiers.shift() {
|
||||
|
|
@ -676,7 +651,6 @@ where
|
|||
sel.end = grapheme_count;
|
||||
}
|
||||
shell.capture_event();
|
||||
shell.request_redraw();
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,20 +83,13 @@ impl<T: Layer> Stack<T> {
|
|||
/// Pushes a new clipping region in the [`Stack`]; creating a new layer in the
|
||||
/// process.
|
||||
pub fn push_clip(&mut self, bounds: Rectangle) {
|
||||
let bounds = bounds * self.transformation();
|
||||
let bounds = bounds
|
||||
.intersection(&self.layers[self.current].bounds())
|
||||
.unwrap_or(Rectangle {
|
||||
width: 0.0,
|
||||
height: 0.0,
|
||||
..bounds
|
||||
});
|
||||
|
||||
self.previous.push(self.current);
|
||||
|
||||
self.current = self.active_count;
|
||||
self.active_count += 1;
|
||||
|
||||
let bounds = bounds * self.transformation();
|
||||
|
||||
if self.current == self.layers.len() {
|
||||
self.layers.push(T::with_bounds(bounds));
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ workspace = true
|
|||
debug = []
|
||||
selector = ["dep:iced_selector"]
|
||||
a11y = ["iced_accessibility", "iced_core/a11y"]
|
||||
wayland = ["iced_core/wayland", "dep:cctk"]
|
||||
cctk = ["iced_core/cctk", "dep:cctk"]
|
||||
|
||||
[dependencies]
|
||||
bytes.workspace = true
|
||||
|
|
@ -33,14 +33,9 @@ sipper.optional = true
|
|||
iced_selector.workspace = true
|
||||
iced_selector.optional = true
|
||||
iced_futures.features = ["thread-pool"]
|
||||
cctk.workspace = true
|
||||
cctk.optional = true
|
||||
iced_accessibility.workspace = true
|
||||
iced_accessibility.optional = true
|
||||
window_clipboard.workspace = true
|
||||
dnd.workspace = true
|
||||
|
||||
[target.'cfg(all(unix, not(any(target_os = "redox", target_family = "wasm", target_os = "android", target_vendor = "apple"))))'.dependencies]
|
||||
cctk.workspace = true
|
||||
cctk.optional = true
|
||||
|
||||
[build-dependencies]
|
||||
build_helpers = { path = "../build_helpers" }
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
fn main() {
|
||||
build_helpers::cfg_aliases_setup();
|
||||
}
|
||||
|
|
@ -2,23 +2,23 @@
|
|||
|
||||
use std::fmt;
|
||||
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
/// Platform specific actions defined for wayland
|
||||
pub mod wayland;
|
||||
|
||||
/// Platform specific actions defined for wayland
|
||||
pub enum Action {
|
||||
/// Wayland Specific Actions
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
Wayland(wayland::Action),
|
||||
}
|
||||
|
||||
impl fmt::Debug for Action {
|
||||
fn fmt(&self, _f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
Action::Wayland(action) => action.fmt(_f),
|
||||
#[cfg(not(wayland_platform))]
|
||||
#[cfg(not(all(feature = "cctk", target_os = "linux")))]
|
||||
_ => Ok(()),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -222,7 +222,7 @@ pub fn frames() -> Subscription<(Id, Instant)> {
|
|||
_ => None,
|
||||
})
|
||||
}
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
/// Subscribes to the frames of the window of the running application.
|
||||
///
|
||||
/// The resulting [`Subscription`] will produce items at a rate equal to the
|
||||
|
|
|
|||
|
|
@ -606,7 +606,7 @@ pub mod font {
|
|||
pub mod event {
|
||||
//! Handle events of a user interface.
|
||||
pub use crate::core::event::PlatformSpecific;
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
pub use crate::core::event::wayland;
|
||||
pub use crate::core::event::{Event, Status};
|
||||
pub use iced_futures::event::{listen, listen_raw, listen_with};
|
||||
|
|
|
|||
|
|
@ -263,10 +263,6 @@ impl Engine {
|
|||
} else {
|
||||
// Draw corners that have too small border radii as having no border radius,
|
||||
// but mask them with the rounded rectangle with the correct border radius.
|
||||
if path_bounds.width < 1.0 || path_bounds.height < 1.0 {
|
||||
return;
|
||||
}
|
||||
|
||||
let mut temp_pixmap = tiny_skia::Pixmap::new(
|
||||
path_bounds.width as u32,
|
||||
path_bounds.height as u32,
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ strict-assertions = []
|
|||
# builds just leave this off — window/x11.rs and the DRI3 device-id
|
||||
# fallback in window/compositor.rs are cfg-gated on it.
|
||||
x11 = ["dep:as-raw-xcb-connection", "dep:tiny-xlib", "dep:x11rb"]
|
||||
wayland = ["cctk"]
|
||||
|
||||
[dependencies]
|
||||
iced_debug.workspace = true
|
||||
|
|
@ -71,6 +70,3 @@ x11rb = { version = "0.13.1", optional = true, features = [
|
|||
"dri3",
|
||||
"randr",
|
||||
] }
|
||||
|
||||
[build-dependencies]
|
||||
build_helpers = { path = "../build_helpers" }
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
fn main() {
|
||||
build_helpers::cfg_aliases_setup();
|
||||
}
|
||||
|
|
@ -1,6 +1,11 @@
|
|||
//! Display rendering results on windows.
|
||||
pub mod compositor;
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(
|
||||
unix,
|
||||
feature = "cctk",
|
||||
not(target_os = "macos"),
|
||||
not(target_os = "redox")
|
||||
))]
|
||||
mod wayland;
|
||||
#[cfg(all(unix, feature = "x11", not(target_os = "macos"), not(target_os = "redox")))]
|
||||
mod x11;
|
||||
|
|
|
|||
|
|
@ -9,10 +9,16 @@ use crate::graphics::{self, Shell, Viewport};
|
|||
use crate::settings::{self, Settings};
|
||||
use crate::{Engine, Renderer};
|
||||
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(
|
||||
unix,
|
||||
feature = "cctk",
|
||||
not(target_os = "macos"),
|
||||
not(target_os = "redox")
|
||||
))]
|
||||
use super::wayland::get_wayland_device_ids;
|
||||
#[cfg(all(unix, feature = "x11", not(target_os = "macos"), not(target_os = "redox")))]
|
||||
use super::x11::get_x11_device_ids;
|
||||
use std::future::Future;
|
||||
|
||||
/// A window graphics backend for iced powered by `wgpu`.
|
||||
pub struct Compositor {
|
||||
|
|
@ -59,7 +65,12 @@ impl Compositor {
|
|||
compatible_window: Option<W>,
|
||||
shell: Shell,
|
||||
) -> Result<Self, Error> {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(
|
||||
unix,
|
||||
feature = "cctk",
|
||||
not(target_os = "macos"),
|
||||
not(target_os = "redox")
|
||||
))]
|
||||
let ids = compatible_window.as_ref().and_then(|window| {
|
||||
let w = get_wayland_device_ids(window);
|
||||
#[cfg(feature = "x11")]
|
||||
|
|
@ -67,13 +78,23 @@ impl Compositor {
|
|||
w
|
||||
});
|
||||
|
||||
#[cfg(all(
|
||||
unix,
|
||||
not(feature = "cctk"),
|
||||
not(target_os = "macos"),
|
||||
not(target_os = "redox")
|
||||
))]
|
||||
let ids = compatible_window
|
||||
.as_ref()
|
||||
.and_then(|window| get_x11_device_ids(window));
|
||||
|
||||
// HACK:
|
||||
// 1. If we specifically didn't select an nvidia gpu
|
||||
// 2. and the user didn't specifically request an nvidia gpu
|
||||
// 3. and the user didn't set an adapter name,
|
||||
// 4. and the user didn't request the high power pref
|
||||
// => don't load the nvidia icd, as it might power on the gpu in hybrid setups causing severe delays
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(unix, not(target_os = "macos"), not(target_os = "redox")))]
|
||||
if !matches!(ids, Some((0x10de, _)))
|
||||
&& std::env::var_os("__NV_PRIME_RENDER_OFFLOAD")
|
||||
.is_none_or(|var| var == "0")
|
||||
|
|
@ -133,7 +154,11 @@ impl Compositor {
|
|||
let mut adapter = None;
|
||||
#[cfg_attr(not(unix), allow(dead_code))]
|
||||
if std::env::var_os("WGPU_ADAPTER_NAME").is_none() {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(
|
||||
unix,
|
||||
not(target_os = "macos"),
|
||||
not(target_os = "redox")
|
||||
))]
|
||||
if let Some((vendor_id, device_id)) = ids {
|
||||
adapter = instance
|
||||
.enumerate_adapters(settings.backends)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
#![allow(unexpected_cfgs)]
|
||||
|
||||
use std::{
|
||||
fs,
|
||||
io::{BufRead, BufReader},
|
||||
|
|
@ -146,9 +144,7 @@ pub fn get_x11_device_ids<W: Window>(window: &W) -> Option<(u16, u16)> {
|
|||
{
|
||||
let stat =
|
||||
stat(Path::new("/dev/dri").join(device)).ok()?;
|
||||
// Hack (u64 as u64) for E2K CPU architecture
|
||||
#[allow(clippy::unnecessary_cast)]
|
||||
let dev = stat.st_rdev as u64;
|
||||
let dev = stat.st_rdev;
|
||||
return super::ids_from_dev(dev);
|
||||
}
|
||||
}
|
||||
|
|
@ -169,9 +165,7 @@ pub fn get_x11_device_ids<W: Window>(window: &W) -> Option<(u16, u16)> {
|
|||
let dri3 = conn.dri3_open(root, x11rb::NONE).ok()?.reply().ok()?;
|
||||
let device_fd = dri3.device_fd;
|
||||
let stat = fstat(device_fd).ok()?;
|
||||
// Hack (u64 as u64) for E2K CPU architecture
|
||||
#[allow(clippy::unnecessary_cast)]
|
||||
let dev = stat.st_rdev as u64;
|
||||
let dev = stat.st_rdev;
|
||||
super::ids_from_dev(dev)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,13 +29,15 @@ highlighter = ["dep:iced_highlighter"]
|
|||
advanced = []
|
||||
crisp = []
|
||||
a11y = ["iced_accessibility"]
|
||||
wayland = ["iced_runtime/wayland", "dep:cctk"]
|
||||
cctk = ["iced_runtime/cctk", "dep:cctk"]
|
||||
|
||||
[dependencies]
|
||||
iced_renderer.workspace = true
|
||||
iced_runtime.workspace = true
|
||||
iced_accessibility.workspace = true
|
||||
iced_accessibility.optional = true
|
||||
cctk.workspace = true
|
||||
cctk.optional = true
|
||||
num-traits.workspace = true
|
||||
log.workspace = true
|
||||
rustc-hash.workspace = true
|
||||
|
|
@ -55,10 +57,3 @@ pulldown-cmark.optional = true
|
|||
|
||||
iced_highlighter.workspace = true
|
||||
iced_highlighter.optional = true
|
||||
|
||||
[target.'cfg(all(unix, not(any(target_os = "redox", target_family = "wasm", target_os = "android", target_vendor = "apple"))))'.dependencies]
|
||||
cctk.workspace = true
|
||||
cctk.optional = true
|
||||
|
||||
[build-dependencies]
|
||||
build_helpers = { path = "../build_helpers" }
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
fn main() {
|
||||
build_helpers::cfg_aliases_setup();
|
||||
}
|
||||
|
|
@ -60,7 +60,6 @@ where
|
|||
width: Length,
|
||||
height: Length,
|
||||
position: Point,
|
||||
overflow: bool,
|
||||
}
|
||||
|
||||
impl<'a, Message, Theme, Renderer> Pin<'a, Message, Theme, Renderer>
|
||||
|
|
@ -76,7 +75,6 @@ where
|
|||
width: Length::Fill,
|
||||
height: Length::Fill,
|
||||
position: Point::ORIGIN,
|
||||
overflow: false,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -109,12 +107,6 @@ where
|
|||
self.position.y = y.into().0;
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets whether the [`Pin`] can overflow its boundaries.
|
||||
pub fn overflow(mut self, overflow: bool) -> Self {
|
||||
self.overflow = overflow;
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer>
|
||||
|
|
@ -153,12 +145,8 @@ where
|
|||
) -> layout::Node {
|
||||
let limits = limits.width(self.width).height(self.height);
|
||||
|
||||
let available =
|
||||
if self.overflow {
|
||||
limits.max()
|
||||
} else {
|
||||
limits.max() - Size::new(self.position.x, self.position.y)
|
||||
};
|
||||
let available =
|
||||
limits.max() - Size::new(self.position.x, self.position.y);
|
||||
|
||||
let node = self
|
||||
.content
|
||||
|
|
|
|||
|
|
@ -110,8 +110,6 @@ where
|
|||
height: f32,
|
||||
class: Theme::Class<'a>,
|
||||
status: Option<Status>,
|
||||
handle_width: f32,
|
||||
handle_height: f32,
|
||||
}
|
||||
|
||||
impl<'a, T, Message, Theme> Slider<'a, T, Message, Theme>
|
||||
|
|
@ -121,13 +119,7 @@ where
|
|||
Theme: Catalog,
|
||||
{
|
||||
/// The default height of a [`Slider`].
|
||||
pub const DEFAULT_HEIGHT: f32 = 26.0;
|
||||
|
||||
/// The default max height of a [`Handle`].
|
||||
pub const DEFAULT_MAX_HANDLE_HEIGHT: f32 = 26.0;
|
||||
|
||||
/// The default max width of a [`Handle`].
|
||||
pub const DEFAULT_MAX_HANDLE_WIDTH: f32 = 26.0;
|
||||
pub const DEFAULT_HEIGHT: f32 = 16.0;
|
||||
|
||||
/// Creates a new [`Slider`].
|
||||
///
|
||||
|
|
@ -173,8 +165,6 @@ where
|
|||
height: Self::DEFAULT_HEIGHT,
|
||||
class: Theme::default(),
|
||||
status: None,
|
||||
handle_width: Self::DEFAULT_MAX_HANDLE_WIDTH,
|
||||
handle_height: Self::DEFAULT_MAX_HANDLE_HEIGHT,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -217,24 +207,6 @@ where
|
|||
self
|
||||
}
|
||||
|
||||
/// Sets the max width of the [`Handle`].
|
||||
///
|
||||
/// Theme can be used to change the size and shape of handle
|
||||
/// but width of handle defined in theme will not exceed this width
|
||||
pub fn handle_width(mut self, width: impl Into<Pixels>) -> Self {
|
||||
self.handle_width = width.into().0;
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets the max height of the [`Handle`].
|
||||
///
|
||||
/// Theme can be used to change the size and shape of handle
|
||||
/// but height of handle defined in theme will not exceed this height
|
||||
pub fn handle_height(mut self, height: impl Into<Pixels>) -> Self {
|
||||
self.handle_height = height.into().0;
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets the step size of the [`Slider`].
|
||||
pub fn step(mut self, step: impl Into<T>) -> Self {
|
||||
self.step = step.into();
|
||||
|
|
@ -351,15 +323,8 @@ where
|
|||
let mut update = || {
|
||||
let current_value = self.value;
|
||||
|
||||
self.handle_width = self.handle_width.min(layout.bounds().width);
|
||||
self.handle_height = self.handle_height.min(layout.bounds().height);
|
||||
|
||||
let locate = |cursor_position: Point| -> Option<T> {
|
||||
let bounds = Rectangle {
|
||||
x: layout.bounds().x + self.handle_width / 2.0,
|
||||
width: layout.bounds().width - self.handle_width,
|
||||
..layout.bounds()
|
||||
};
|
||||
let bounds = layout.bounds();
|
||||
|
||||
if cursor_position.x <= bounds.x {
|
||||
Some(*self.range.start())
|
||||
|
|
@ -544,29 +509,53 @@ where
|
|||
_cursor: mouse::Cursor,
|
||||
_viewport: &Rectangle,
|
||||
) {
|
||||
let bounds = Rectangle {
|
||||
x: layout.bounds().x + self.handle_width / 2.0,
|
||||
width: layout.bounds().width - self.handle_width,
|
||||
..layout.bounds()
|
||||
};
|
||||
let bounds = layout.bounds();
|
||||
|
||||
let style =
|
||||
theme.style(&self.class, self.status.unwrap_or(Status::Active));
|
||||
|
||||
let (mut handle_width, mut handle_height, handle_border_radius) =
|
||||
let border_width = style
|
||||
.handle
|
||||
.border_width
|
||||
.min(bounds.height / 2.0)
|
||||
.min(bounds.width / 2.0);
|
||||
|
||||
let (handle_width, handle_height, handle_border_radius) =
|
||||
match style.handle.shape {
|
||||
HandleShape::Circle { radius } => {
|
||||
let radius = (radius)
|
||||
.max(2.0 * border_width)
|
||||
.min(bounds.height / 2.0)
|
||||
.min(bounds.width / 2.0 + 2.0 * border_width);
|
||||
(radius * 2.0, radius * 2.0, Radius::from(radius))
|
||||
}
|
||||
HandleShape::Rectangle {
|
||||
height,
|
||||
width,
|
||||
border_radius,
|
||||
} => (f32::from(width), f32::from(height), border_radius),
|
||||
};
|
||||
} => {
|
||||
let width = (f32::from(width)).max(2.0 * border_width);
|
||||
let height = (f32::from(height)).max(2.0 * border_width);
|
||||
let mut border_radius: [f32; 4] = border_radius.into();
|
||||
for r in &mut border_radius {
|
||||
*r = (*r)
|
||||
.min(height / 2.0)
|
||||
.min(width / 2.0)
|
||||
.max(*r * (width + border_width * 2.0) / width);
|
||||
}
|
||||
|
||||
handle_width = handle_width.min(self.handle_width);
|
||||
handle_height = handle_height.min(self.handle_height);
|
||||
(
|
||||
width,
|
||||
height,
|
||||
Radius {
|
||||
top_left: border_radius[0],
|
||||
top_right: border_radius[1],
|
||||
bottom_right: border_radius[2],
|
||||
bottom_left: border_radius[3],
|
||||
},
|
||||
)
|
||||
}
|
||||
};
|
||||
|
||||
let value = self.value.into() as f32;
|
||||
let (range_start, range_end) = {
|
||||
|
|
@ -578,7 +567,8 @@ where
|
|||
let offset = if range_start >= range_end {
|
||||
0.0
|
||||
} else {
|
||||
bounds.width * (value - range_start) / (range_end - range_start)
|
||||
(bounds.width - handle_width) * (value - range_start)
|
||||
/ (range_end - range_start)
|
||||
};
|
||||
|
||||
let rail_y = bounds.y + bounds.height / 2.0;
|
||||
|
|
@ -600,8 +590,7 @@ where
|
|||
x: bounds.x + offset,
|
||||
y: rail_y + 6.0,
|
||||
width: BREAKPOINT_WIDTH,
|
||||
height: 8.0_f32
|
||||
.min(bounds.y + bounds.height - (rail_y + 6.0)),
|
||||
height: 8.0,
|
||||
},
|
||||
border: Border {
|
||||
radius: 0.0.into(),
|
||||
|
|
@ -618,9 +607,9 @@ where
|
|||
renderer::Quad {
|
||||
bounds: Rectangle {
|
||||
x: bounds.x,
|
||||
y: rail_y - (style.rail.width).min(bounds.height) / 2.0,
|
||||
width: offset,
|
||||
height: (style.rail.width).min(bounds.height),
|
||||
y: rail_y - style.rail.width / 2.0,
|
||||
width: offset + handle_width / 2.0,
|
||||
height: style.rail.width,
|
||||
},
|
||||
border: style.rail.border,
|
||||
..renderer::Quad::default()
|
||||
|
|
@ -633,10 +622,10 @@ where
|
|||
renderer.fill_quad(
|
||||
renderer::Quad {
|
||||
bounds: Rectangle {
|
||||
x: bounds.x + offset,
|
||||
y: rail_y - (style.rail.width).min(bounds.height) / 2.0,
|
||||
width: bounds.width - offset,
|
||||
height: (style.rail.width).min(bounds.height),
|
||||
x: bounds.x + offset + handle_width / 2.0,
|
||||
y: rail_y - style.rail.width / 2.0,
|
||||
width: bounds.width - offset - handle_width / 2.0,
|
||||
height: style.rail.width,
|
||||
},
|
||||
border: style.rail.border,
|
||||
..renderer::Quad::default()
|
||||
|
|
@ -648,7 +637,7 @@ where
|
|||
renderer.fill_quad(
|
||||
renderer::Quad {
|
||||
bounds: Rectangle {
|
||||
x: bounds.x + offset - handle_width / 2.0,
|
||||
x: bounds.x + offset,
|
||||
y: rail_y - (handle_height / 2.0),
|
||||
width: handle_width,
|
||||
height: handle_height,
|
||||
|
|
|
|||
|
|
@ -14,18 +14,7 @@ keywords.workspace = true
|
|||
workspace = true
|
||||
|
||||
[features]
|
||||
wayland = [
|
||||
"winit/wayland",
|
||||
"wayland-csd-adwaita",
|
||||
"wayland-protocols",
|
||||
"raw-window-handle",
|
||||
"iced_runtime/wayland",
|
||||
"wayland-backend",
|
||||
"xkbcommon",
|
||||
"xkbcommon-dl",
|
||||
"xkeysym",
|
||||
"dep:cctk",
|
||||
]
|
||||
wayland = ["winit/wayland", "wayland-csd-adwaita"]
|
||||
default = ["x11", "wayland-dlopen"]
|
||||
debug = ["iced_debug/enable"]
|
||||
sysinfo = ["dep:sysinfo"]
|
||||
|
|
@ -37,6 +26,17 @@ program = []
|
|||
wayland-dlopen = ["winit/wayland-dlopen"]
|
||||
wayland-csd-adwaita = ["winit/wayland-csd-adwaita"]
|
||||
a11y = ["iced_accessibility", "iced_runtime/a11y"]
|
||||
cctk = [
|
||||
"wayland",
|
||||
"wayland-protocols",
|
||||
"raw-window-handle",
|
||||
"iced_runtime/cctk",
|
||||
"wayland-backend",
|
||||
"xkbcommon",
|
||||
"xkbcommon-dl",
|
||||
"xkeysym",
|
||||
"dep:cctk",
|
||||
]
|
||||
# Prevents multiple separate process instances.
|
||||
single-instance = []
|
||||
|
||||
|
|
@ -64,8 +64,7 @@ iced_debug.workspace = true
|
|||
iced_program.workspace = true
|
||||
|
||||
|
||||
[target.'cfg(all(unix, not(any(target_os = "redox", target_family = "wasm", target_os = "android", target_vendor = "apple"))))'.dependencies]
|
||||
|
||||
[target.'cfg(target_os = "linux")'.dependencies]
|
||||
mundy.workspace = true
|
||||
mundy.optional = true
|
||||
|
||||
|
|
@ -90,6 +89,3 @@ winapi.workspace = true
|
|||
web-sys.workspace = true
|
||||
web-sys.features = ["Document", "Window", "HtmlCanvasElement"]
|
||||
wasm-bindgen-futures.workspace = true
|
||||
|
||||
[build-dependencies]
|
||||
build_helpers = { path = "../build_helpers" }
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
fn main() {
|
||||
build_helpers::cfg_aliases_setup();
|
||||
}
|
||||
|
|
@ -49,10 +49,7 @@ pub fn event_func(
|
|||
position,
|
||||
..
|
||||
} => {
|
||||
let resizable = !window.is_decorated()
|
||||
&& !window.is_maximized()
|
||||
&& window.fullscreen().is_none();
|
||||
if resizable {
|
||||
if !window.is_decorated() {
|
||||
let location = cursor_resize_direction(
|
||||
window.surface_size(),
|
||||
*position,
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ impl Clipboard {
|
|||
})
|
||||
.unwrap_or(State::Unavailable);
|
||||
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(target_os = "linux")]
|
||||
if let State::Connected { clipboard, .. } = &state {
|
||||
clipboard.init_dnd(Box::new(sender));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,33 +23,6 @@ use winit::event::Force;
|
|||
use winit::icon::IconProvider;
|
||||
use winit::keyboard::SmolStr;
|
||||
|
||||
/// Returns the activation token provided by the compositor, if any.
|
||||
///
|
||||
/// The token is single-use, so it is only ever handed out to the first window.
|
||||
#[cfg(target_os = "linux")]
|
||||
fn take_activation_token() -> Option<winit::window::ActivationToken> {
|
||||
use std::sync::Mutex;
|
||||
use std::sync::OnceLock;
|
||||
use winit::platform::startup_notify::reset_activation_token_env;
|
||||
|
||||
static TOKEN: OnceLock<Mutex<Option<winit::window::ActivationToken>>> =
|
||||
OnceLock::new();
|
||||
|
||||
TOKEN
|
||||
.get_or_init(|| {
|
||||
let token = std::env::var("XDG_ACTIVATION_TOKEN")
|
||||
.ok()
|
||||
.map(winit::window::ActivationToken::from_raw);
|
||||
|
||||
reset_activation_token_env();
|
||||
|
||||
Mutex::new(token)
|
||||
})
|
||||
.lock()
|
||||
.ok()
|
||||
.and_then(|mut token| token.take())
|
||||
}
|
||||
|
||||
/// Converts some [`window::Settings`] into some `WindowAttributes` from `winit`.
|
||||
pub fn window_attributes(
|
||||
settings: window::Settings,
|
||||
|
|
@ -209,19 +182,12 @@ pub fn window_attributes(
|
|||
{
|
||||
use winit::platform::wayland::WindowAttributesWayland;
|
||||
|
||||
let mut wayland_attributes = WindowAttributesWayland::default()
|
||||
.with_name(
|
||||
attributes = attributes.with_platform_attributes(Box::new(
|
||||
WindowAttributesWayland::default().with_name(
|
||||
&settings.platform_specific.application_id,
|
||||
&settings.platform_specific.application_id,
|
||||
);
|
||||
|
||||
if let Some(token) = take_activation_token() {
|
||||
wayland_attributes =
|
||||
wayland_attributes.with_activation_token(token);
|
||||
}
|
||||
|
||||
attributes = attributes
|
||||
.with_platform_attributes(Box::new(wayland_attributes));
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -458,7 +424,7 @@ pub fn window_event(
|
|||
WindowEvent::ScaleFactorChanged { scale_factor, .. } => {
|
||||
Some(Event::Window(window::Event::Rescaled(scale_factor as f32)))
|
||||
}
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
WindowEvent::SuggestedBounds(bounds) => {
|
||||
let size = bounds.map(|bounds| {
|
||||
let size = bounds.to_logical(scale_factor);
|
||||
|
|
@ -471,7 +437,7 @@ pub fn window_event(
|
|||
),
|
||||
)))
|
||||
}
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
WindowEvent::WindowStateChanged => {
|
||||
use cctk::sctk::reexports::csd_frame::WindowState;
|
||||
use winit::platform::wayland::WindowExtWayland;
|
||||
|
|
@ -1525,7 +1491,7 @@ pub fn winit_key_code(
|
|||
})
|
||||
}
|
||||
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
fn winit_native_key_code(
|
||||
keycode: keyboard::key::NativeCode,
|
||||
) -> winit::keyboard::NativeKeyCode {
|
||||
|
|
@ -1549,7 +1515,7 @@ fn winit_native_key_code(
|
|||
}
|
||||
|
||||
/// Reconstruct the raw keycode
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
pub fn physical_to_scancode(physical: keyboard::key::Physical) -> Option<u32> {
|
||||
let Some(physical_key) = (match physical {
|
||||
keyboard::key::Physical::Code(code) => {
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ mod window;
|
|||
pub use clipboard::Clipboard;
|
||||
pub use error::Error;
|
||||
pub use proxy::Proxy;
|
||||
use winit::dpi::LogicalSize;
|
||||
use winit::dpi::PhysicalPosition;
|
||||
use winit::dpi::PhysicalSize;
|
||||
|
||||
|
|
@ -91,10 +92,10 @@ where
|
|||
|
||||
let event_loop = EventLoop::new().expect("Create event loop");
|
||||
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
let is_wayland =
|
||||
winit::platform::wayland::EventLoopExtWayland::is_wayland(&event_loop);
|
||||
#[cfg(not(wayland_platform))]
|
||||
#[cfg(not(all(feature = "cctk", target_os = "linux")))]
|
||||
let is_wayland = false;
|
||||
|
||||
// TODO this is new..
|
||||
|
|
@ -261,7 +262,7 @@ where
|
|||
| winit::event::WindowEvent::Moved(_)
|
||||
);
|
||||
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
{
|
||||
if matches!(event, WindowEvent::RedrawRequested) {
|
||||
for id in
|
||||
|
|
@ -576,7 +577,10 @@ where
|
|||
.expect("Send event");
|
||||
}
|
||||
Control::Winit(id, e) => {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(
|
||||
feature = "cctk",
|
||||
target_os = "linux"
|
||||
))]
|
||||
{
|
||||
if matches!(e, WindowEvent::RedrawRequested)
|
||||
{
|
||||
|
|
@ -772,7 +776,7 @@ async fn run_instance<P>(
|
|||
|
||||
let mut platform_specific_handler =
|
||||
crate::platform_specific::PlatformSpecific::default();
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
if is_wayland {
|
||||
platform_specific_handler = platform_specific_handler.with_wayland(
|
||||
control_sender.clone(),
|
||||
|
|
@ -857,8 +861,6 @@ async fn run_instance<P>(
|
|||
&mut is_window_opening,
|
||||
&mut system_theme,
|
||||
&mut platform_specific_handler,
|
||||
&mut dnd_surface,
|
||||
&mut dnd_surface_id,
|
||||
is_daemon,
|
||||
)
|
||||
};
|
||||
|
|
@ -885,7 +887,7 @@ async fn run_instance<P>(
|
|||
on_open,
|
||||
resize_border,
|
||||
} => {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
platform_specific_handler.send_wayland(
|
||||
platform_specific::Action::TrackWindow(window.clone(), id),
|
||||
);
|
||||
|
|
@ -1054,7 +1056,7 @@ async fn run_instance<P>(
|
|||
continue;
|
||||
}
|
||||
// XX must force update to corner radius before the surface is committed.
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
if (window.surface_version != window.state.surface_version()
|
||||
|| window.logical_size() != window.state.logical_size())
|
||||
&& !crate::subsurface_widget::is_subsurface(window_id)
|
||||
|
|
@ -1393,7 +1395,8 @@ async fn run_instance<P>(
|
|||
true
|
||||
}
|
||||
});
|
||||
#[cfg(wayland_platform)]
|
||||
let no_window_events = window_events.is_empty();
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
window_events.push(core::Event::PlatformSpecific(
|
||||
core::event::PlatformSpecific::Wayland(
|
||||
core::event::wayland::Event::RequestResize,
|
||||
|
|
@ -1410,7 +1413,8 @@ async fn run_instance<P>(
|
|||
&mut clipboard,
|
||||
&mut messages,
|
||||
);
|
||||
let mut needs_redraw = !messages.is_empty();
|
||||
let mut needs_redraw =
|
||||
!no_window_events || !messages.is_empty();
|
||||
if let Some(requested_size) =
|
||||
clipboard.requested_logical_size.lock().unwrap().take()
|
||||
{
|
||||
|
|
@ -1466,17 +1470,8 @@ async fn run_instance<P>(
|
|||
mouse_interaction,
|
||||
..
|
||||
} => {
|
||||
let mouse_changed =
|
||||
window.mouse_interaction != mouse_interaction;
|
||||
|
||||
window.update_mouse(mouse_interaction);
|
||||
|
||||
if mouse_changed {
|
||||
window.request_redraw(
|
||||
core::window::RedrawRequest::NextFrame,
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "unconditional-rendering"))]
|
||||
window.request_redraw(_redraw_request);
|
||||
}
|
||||
|
|
@ -2079,10 +2074,6 @@ fn run_action<'a, P, C>(
|
|||
is_window_opening: &mut bool,
|
||||
system_theme: &mut theme::Mode,
|
||||
platform_specific: &mut crate::platform_specific::PlatformSpecific,
|
||||
dnd_surface: &mut Option<
|
||||
Arc<Box<dyn HasWindowHandle + Send + Sync + 'static>>,
|
||||
>,
|
||||
dnd_surface_id: &mut Option<window::Id>,
|
||||
is_daemon: bool,
|
||||
) -> bool
|
||||
where
|
||||
|
|
@ -2137,7 +2128,7 @@ where
|
|||
_ = control_sender.start_send(Control::Cleanup(id)).ok();
|
||||
}
|
||||
let proxy = clipboard.proxy();
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
platform_specific
|
||||
.send_wayland(platform_specific::Action::RemoveWindow(id));
|
||||
if let Some(window) = window_manager.remove(id) {
|
||||
|
|
@ -2598,10 +2589,6 @@ where
|
|||
}
|
||||
iced_runtime::dnd::DndAction::EndDnd => {
|
||||
clipboard.end_dnd();
|
||||
*dnd_surface = None;
|
||||
if let Some(id) = dnd_surface_id.take() {
|
||||
platform_specific.retain_subsurfaces(|other| other != id);
|
||||
}
|
||||
}
|
||||
iced_runtime::dnd::DndAction::PeekDnd(m, channel) => {
|
||||
let data = clipboard.peek_dnd(m);
|
||||
|
|
|
|||
|
|
@ -1,20 +1,24 @@
|
|||
//! Wayland specific shell
|
||||
//!
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::{borrow::Cow, collections::HashMap, sync::Arc};
|
||||
|
||||
use iced_graphics::compositor;
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
use cctk::sctk::reexports::client::Connection;
|
||||
use iced_graphics::{Compositor, compositor};
|
||||
use iced_runtime::{
|
||||
core::{Vector, window},
|
||||
user_interface,
|
||||
platform_specific, user_interface,
|
||||
};
|
||||
use winit::raw_window_handle::HasWindowHandle;
|
||||
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
pub mod wayland;
|
||||
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
pub use wayland::*;
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
use wayland_backend::client::Backend;
|
||||
|
||||
use crate::{CreateCompositor, Program, WindowManager};
|
||||
|
||||
|
|
@ -31,7 +35,7 @@ pub type UserInterfaces<'a, P> = HashMap<
|
|||
|
||||
#[derive(Debug)]
|
||||
pub enum Event {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
Wayland(sctk_event::SctkEvent),
|
||||
}
|
||||
|
||||
|
|
@ -57,7 +61,7 @@ impl SurfaceIdWrapper {
|
|||
|
||||
#[derive(Debug, Default)]
|
||||
pub struct PlatformSpecific {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
wayland: WaylandSpecific,
|
||||
}
|
||||
|
||||
|
|
@ -67,7 +71,7 @@ impl PlatformSpecific {
|
|||
action: iced_runtime::platform_specific::Action,
|
||||
) {
|
||||
match action {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
iced_runtime::platform_specific::Action::Wayland(a) => {
|
||||
self.send_wayland(wayland::Action::Action(a));
|
||||
}
|
||||
|
|
@ -78,14 +82,14 @@ impl PlatformSpecific {
|
|||
&mut self,
|
||||
keep: F,
|
||||
) {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
{
|
||||
self.wayland.retain_subsurfaces(keep);
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn clear_subsurface_list(&mut self) {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
{
|
||||
self.wayland.clear_subsurface_list();
|
||||
}
|
||||
|
|
@ -96,7 +100,7 @@ impl PlatformSpecific {
|
|||
id: window::Id,
|
||||
window: &dyn HasWindowHandle,
|
||||
) {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
{
|
||||
use cctk::sctk::reexports::client::{
|
||||
Proxy, protocol::wl_surface::WlSurface,
|
||||
|
|
@ -147,11 +151,11 @@ impl PlatformSpecific {
|
|||
pub(crate) fn create_surface(
|
||||
&mut self,
|
||||
) -> Option<Box<dyn HasWindowHandle + Send + Sync + 'static>> {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
{
|
||||
self.wayland.create_surface()
|
||||
}
|
||||
#[cfg(not(wayland_platform))]
|
||||
#[cfg(not(all(feature = "cctk", target_os = "linux")))]
|
||||
{
|
||||
None
|
||||
}
|
||||
|
|
@ -166,7 +170,7 @@ impl PlatformSpecific {
|
|||
data: &[u8],
|
||||
offset: Vector,
|
||||
) {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
{
|
||||
return self.wayland.update_surface_shm(
|
||||
surface, width, height, scale, data, offset,
|
||||
|
|
@ -194,7 +198,7 @@ pub(crate) async fn handle_event<'a, 'b, P>(
|
|||
P: Program,
|
||||
{
|
||||
match e {
|
||||
#[cfg(wayland_platform)]
|
||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||
Event::Wayland(e) => {
|
||||
platform_specific
|
||||
.wayland
|
||||
|
|
|
|||
|
|
@ -874,11 +874,6 @@ impl SctkState {
|
|||
|
||||
_ = wl_surface.frame(&self.queue_handle, wl_surface.clone());
|
||||
|
||||
if let Some(old) = self.blur_surfaces.remove(&settings.id) {
|
||||
old.destroy();
|
||||
}
|
||||
_ = self.corner_radii.remove(&settings.id);
|
||||
|
||||
if let Some(blur) = self.pending_blur.remove(&settings.id) {
|
||||
self.apply_blur(settings.id, Some(blur), &wl_surface);
|
||||
}
|
||||
|
|
@ -1016,12 +1011,6 @@ impl SctkState {
|
|||
layer_surface.set_input_region(Some(®ion));
|
||||
region.destroy();
|
||||
}
|
||||
|
||||
if let Some(old) = self.blur_surfaces.remove(&id) {
|
||||
old.destroy();
|
||||
}
|
||||
_ = self.corner_radii.remove(&id);
|
||||
|
||||
if let Some(blur) = self.pending_blur.remove(&id) {
|
||||
self.apply_blur(id, Some(blur), &wl_surface);
|
||||
}
|
||||
|
|
@ -1279,11 +1268,11 @@ impl SctkState {
|
|||
|| self.layer_surfaces.iter().any(|l| l.id == settings.parent && p.data.parent.wl_surface() == l.surface.wl_surface()))
|
||||
) {
|
||||
let existing = &mut self.popups[existing];
|
||||
let size = if let Some(size) = settings.positioner.size {
|
||||
size
|
||||
let size = if settings.positioner.size.is_none() {
|
||||
log::info!("No configured popup size");
|
||||
(1, 1)
|
||||
} else {
|
||||
let guard = existing.common.lock().unwrap();
|
||||
(guard.size.width, guard.size.height)
|
||||
settings.positioner.size.unwrap()
|
||||
};
|
||||
let Ok(positioner) = XdgPositioner::new(&self.xdg_shell_state)
|
||||
.map_err(PopupCreationError::PositionerCreationFailed) else {
|
||||
|
|
@ -1403,7 +1392,7 @@ impl SctkState {
|
|||
},
|
||||
};
|
||||
let mut to_destroy = vec![sctk_popup];
|
||||
|
||||
// TODO optionally destroy parents if they request to be destroyed with children
|
||||
while let Some(popup_to_destroy_last) = to_destroy.last().and_then(|popup| self
|
||||
.popups
|
||||
.iter()
|
||||
|
|
@ -1850,7 +1839,6 @@ impl SctkState {
|
|||
s: &WlSurface,
|
||||
) {
|
||||
let existing_blur = self.blur_surfaces.entry(id);
|
||||
|
||||
match (existing_blur, rectangles) {
|
||||
(Entry::Occupied(occupied_entry), None) => {
|
||||
let blur_surface = occupied_entry.remove();
|
||||
|
|
@ -2033,11 +2021,6 @@ impl SctkState {
|
|||
region.destroy();
|
||||
}
|
||||
|
||||
if let Some(old) = self.blur_surfaces.remove(&settings.id) {
|
||||
old.destroy();
|
||||
}
|
||||
_ = self.corner_radii.remove(&settings.id);
|
||||
|
||||
if let Some(blur) = self.pending_blur.remove(&settings.id) {
|
||||
_ = self.apply_blur(settings.id, Some(blur), &wl_surface);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
use crate::platform_specific::wayland::{
|
||||
event_loop::state::SctkState, sctk_event::SctkEvent,
|
||||
use crate::{
|
||||
event_loop::state::FrameStatus,
|
||||
platform_specific::wayland::{
|
||||
event_loop::state::SctkState, sctk_event::SctkEvent,
|
||||
},
|
||||
};
|
||||
use cctk::sctk::{
|
||||
delegate_pointer,
|
||||
|
|
@ -47,6 +50,14 @@ impl PointerHandler for SctkState {
|
|||
continue;
|
||||
}
|
||||
|
||||
let entry = self
|
||||
.frame_status
|
||||
.entry(e.surface.id())
|
||||
.or_insert(FrameStatus::RequestedRedraw);
|
||||
if matches!(entry, FrameStatus::Received) {
|
||||
*entry = FrameStatus::Ready;
|
||||
}
|
||||
|
||||
self.sctk_events.push(SctkEvent::PointerEvent {
|
||||
variant: PointerEvent {
|
||||
surface: e.surface.clone(),
|
||||
|
|
|
|||
|
|
@ -27,15 +27,6 @@ impl LayerShellHandler for SctkState {
|
|||
None => return,
|
||||
};
|
||||
|
||||
if let Some(id) = self.id_map.remove(&layer.surface.wl_surface().id()) {
|
||||
if let Some(blurred) = self.blur_surfaces.remove(&id) {
|
||||
blurred.destroy();
|
||||
}
|
||||
_ = self.corner_radii.remove(&id);
|
||||
|
||||
_ = self.destroyed.insert(id);
|
||||
}
|
||||
|
||||
self.sctk_events.push(SctkEvent::LayerSurfaceEvent {
|
||||
variant: LayerSurfaceEventVariant::Done,
|
||||
id: layer.surface.wl_surface().clone(),
|
||||
|
|
|
|||
|
|
@ -84,11 +84,6 @@ impl PopupHandler for SctkState {
|
|||
for popup in to_destroy.into_iter().rev() {
|
||||
if let Some(id) = self.id_map.remove(&popup.popup.wl_surface().id())
|
||||
{
|
||||
if let Some(blurred) = self.blur_surfaces.remove(&id) {
|
||||
blurred.destroy();
|
||||
}
|
||||
_ = self.corner_radii.remove(&id);
|
||||
|
||||
_ = self.destroyed.insert(id);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue