1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
From 3230a55ea07fbb42319b3938e4dd67b5ec3fc715 Mon Sep 17 00:00:00 2001
From: Matthias Geiger <werdahias@debian.org>
Date: Tue, 2 Sep 2025 23:08:17 +0200
Subject: [PATCH] feat: port to gtk-rs 0.10
Forwarded: https://github.com/lostatc/swtchr/pull/7
---
Cargo.toml | 4 +-
src/daemon/components/app_bar.rs | 5 +-
src/daemon/gui.rs | 15 +-
4 files changed, 337 insertions(+), 279 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index b43a6c3..da287c2 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -58,15 +58,15 @@
version = "0.6.12"
[dependencies.gtk]
-version = "0.8.2"
-features = ["v4_6"]
+version = "0.10.0"
+features = ["v4_8"]
package = "gtk4"
[dependencies.gtk4-layer-shell]
-version = "0.3.0"
+version = "0.6.0"
[dependencies.nix]
-version = "0.28.0"
+version = ">= 0.28.0"
features = ["user"]
[dependencies.serde]
diff --git a/src/daemon/components/app_bar.rs b/src/daemon/components/app_bar.rs
index 87c0ad3..5bab158 100644
--- a/src/daemon/components/app_bar.rs
+++ b/src/daemon/components/app_bar.rs
@@ -25,7 +25,10 @@ impl AppBar {
}
for app_button in app_buttons.iter() {
- app_button.connect_has_focus_notify(clone!(@weak obj => move |button| {
+ app_button.connect_has_focus_notify(clone!(
+ #[weak]
+ obj,
+ move |button| {
obj.set_current_title(button.window_title());
obj.set_window_id(button.window_id());
}));
diff --git a/src/daemon/gui.rs b/src/daemon/gui.rs
index 8eb3711..8616e82 100644
--- a/src/daemon/gui.rs
+++ b/src/daemon/gui.rs
@@ -129,7 +129,10 @@ fn register_key_release_controller(config: &Config, window: &Window) {
let controller = EventControllerKey::new();
- controller.connect_key_released(clone!(@weak window => move |_, actual_key, _, _| {
+ controller.connect_key_released(clone!(
+ #[weak]
+ window,
+ move |_, actual_key, _, _| {
if !release_keys.contains(&actual_key) {
return;
}
@@ -151,7 +154,10 @@ fn register_key_release_controller(config: &Config, window: &Window) {
fn register_ipc_command_handlers(window: &Window) -> eyre::Result<()> {
let receiver = ipc::subscribe()?;
- glib::spawn_future_local(clone!(@weak window => async move {
+ glib::spawn_future_local(clone!(
+ #[weak]
+ window,
+ async move {
while let Ok(msg) = receiver.recv().await {
let action_result = match msg {
Ok(SwtchrCommand::Show) => WidgetExt::activate_action(&window, "win.show", None).map_err(eyre::Report::from),
@@ -241,7 +247,10 @@ pub fn build_window(config: &Config, app: &Application, subscription: Rc<WindowS
window.set_keyboard_mode(KeyboardMode::None);
// Update the list of windows in the window switcher right before we display it.
- let on_display = Box::new(clone!(@weak window => move || {
+ let on_display = Box::new(clone!(
+ #[weak]
+ window,
+ move || {
window.update_windows(&subscription.get_window_list().expect("Failed getting window list to populate window switcher overlay."));
}));
|