mirror of
https://github.com/2e3s/awatcher.git
synced 2025-06-07 03:55:29 +00:00
Return support for KDE < 6
This commit is contained in:
parent
86e4de5a70
commit
a21b917b26
4
Cargo.lock
generated
4
Cargo.lock
generated
@ -447,7 +447,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "awatcher"
|
name = "awatcher"
|
||||||
version = "0.2.4"
|
version = "0.2.5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"aw-datastore",
|
"aw-datastore",
|
||||||
@ -3811,7 +3811,7 @@ checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "watchers"
|
name = "watchers"
|
||||||
version = "0.2.4"
|
version = "0.2.5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
@ -18,7 +18,7 @@ image = { version = "0.24.7" }
|
|||||||
members = ["watchers"]
|
members = ["watchers"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.2.4"
|
version = "0.2.5"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
anyhow = "1.0.75"
|
anyhow = "1.0.75"
|
||||||
|
@ -12,7 +12,7 @@ function send(client) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
workspace.windowActivated.connect(function(client){
|
let handler = function(client){
|
||||||
if (client === null) {
|
if (client === null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -26,4 +26,12 @@ workspace.windowActivated.connect(function(client){
|
|||||||
}
|
}
|
||||||
|
|
||||||
send(client);
|
send(client);
|
||||||
});
|
};
|
||||||
|
|
||||||
|
let activationEvent = workspace.windowActivated ? workspace.windowActivated : workspace.clientActivated;
|
||||||
|
if (workspace.windowActivated) {
|
||||||
|
workspace.windowActivated.connect(handler);
|
||||||
|
} else {
|
||||||
|
// KDE version < 6
|
||||||
|
workspace.clientActivated.connect(handler);
|
||||||
|
}
|
||||||
|
@ -92,10 +92,16 @@ impl KWinScript {
|
|||||||
|
|
||||||
async fn start(&self, script_number: i32) -> anyhow::Result<()> {
|
async fn start(&self, script_number: i32) -> anyhow::Result<()> {
|
||||||
debug!("Starting KWin script {script_number}");
|
debug!("Starting KWin script {script_number}");
|
||||||
|
|
||||||
|
let path = if self.get_major_version().await < 6 {
|
||||||
|
format!("/{script_number}")
|
||||||
|
} else {
|
||||||
|
format!("/Scripting/Script{script_number}")
|
||||||
|
};
|
||||||
self.dbus_connection
|
self.dbus_connection
|
||||||
.call_method(
|
.call_method(
|
||||||
Some("org.kde.KWin"),
|
Some("org.kde.KWin"),
|
||||||
format!("/Scripting/Script{script_number}"),
|
path,
|
||||||
Some("org.kde.kwin.Script"),
|
Some("org.kde.kwin.Script"),
|
||||||
"run",
|
"run",
|
||||||
&(),
|
&(),
|
||||||
@ -104,6 +110,61 @@ impl KWinScript {
|
|||||||
.with_context(|| "Error on starting the script")?;
|
.with_context(|| "Error on starting the script")?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_major_version(&self) -> i8 {
|
||||||
|
if let Ok(version) = Self::get_major_version_from_env() {
|
||||||
|
debug!("KWin version from KDE_SESSION_VERSION: {version}");
|
||||||
|
|
||||||
|
version
|
||||||
|
} else {
|
||||||
|
self.get_major_version_from_dbus()
|
||||||
|
.await
|
||||||
|
.unwrap_or_else(|e| {
|
||||||
|
error!("Failed to get KWin version: {e}");
|
||||||
|
5
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_major_version_from_env() -> anyhow::Result<i8> {
|
||||||
|
env::var("KDE_SESSION_VERSION")?
|
||||||
|
.parse::<i8>()
|
||||||
|
.map_err(std::convert::Into::into)
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn get_major_version_from_dbus(&self) -> anyhow::Result<i8> {
|
||||||
|
let support_information: String = self
|
||||||
|
.dbus_connection
|
||||||
|
.call_method(
|
||||||
|
Some("org.kde.KWin"),
|
||||||
|
"/KWin",
|
||||||
|
Some("org.kde.KWin"),
|
||||||
|
"supportInformation",
|
||||||
|
&(),
|
||||||
|
)
|
||||||
|
.await?
|
||||||
|
.body::<String>()?;
|
||||||
|
|
||||||
|
// find a string like "KWin version: 5.27.8" and extract the version number from it:
|
||||||
|
let version = support_information
|
||||||
|
.lines()
|
||||||
|
.find(|line| line.starts_with("KWin version: "))
|
||||||
|
.ok_or(anyhow!("KWin version not found"))?
|
||||||
|
.split_whitespace()
|
||||||
|
.last()
|
||||||
|
.ok_or(anyhow!("KWin version is invalid"))?;
|
||||||
|
|
||||||
|
// Extract the major version number from the version number like "5.27.8":
|
||||||
|
let major_version = version
|
||||||
|
.split('.')
|
||||||
|
.next()
|
||||||
|
.ok_or(anyhow!("KWin version is invalid: {version}"))?
|
||||||
|
.parse::<i8>()?;
|
||||||
|
|
||||||
|
debug!("KWin version from DBus: {version}, major version: {major_version}");
|
||||||
|
|
||||||
|
Ok(major_version)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for KWinScript {
|
impl Drop for KWinScript {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user