diff --git a/Cargo.lock b/Cargo.lock
index 3c84f83..dafcc3e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -557,7 +557,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d123397e75f904758fef490775a00b0ada545ab409cb0163d919799e5a30119b"
dependencies = [
"autocxx-engine",
- "env_logger",
+ "env_logger 0.9.3",
"indexmap 1.9.3",
"syn 2.0.111",
]
@@ -1751,6 +1751,16 @@ dependencies = [
"syn 2.0.111",
]
+[[package]]
+name = "env_filter"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2"
+dependencies = [
+ "log",
+ "regex",
+]
+
[[package]]
name = "env_logger"
version = "0.9.3"
@@ -1764,6 +1774,19 @@ dependencies = [
"termcolor",
]
+[[package]]
+name = "env_logger"
+version = "0.11.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "env_filter",
+ "jiff",
+ "log",
+]
+
[[package]]
name = "equator"
version = "0.4.2"
@@ -2955,6 +2978,30 @@ version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+[[package]]
+name = "jiff"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35"
+dependencies = [
+ "jiff-static",
+ "log",
+ "portable-atomic",
+ "portable-atomic-util",
+ "serde_core",
+]
+
+[[package]]
+name = "jiff-static"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.111",
+]
+
[[package]]
name = "jni"
version = "0.21.1"
@@ -4272,6 +4319,21 @@ dependencies = [
"windows-sys 0.61.2",
]
+[[package]]
+name = "portable-atomic"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f59e70c4aef1e55797c2e8fd94a4f2a973fc972cfde0e0b05f683667b0cd39dd"
+
+[[package]]
+name = "portable-atomic-util"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
+dependencies = [
+ "portable-atomic",
+]
+
[[package]]
name = "potential_utf"
version = "0.1.4"
@@ -5048,6 +5110,12 @@ dependencies = [
"lazy_static",
]
+[[package]]
+name = "shell-words"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77"
+
[[package]]
name = "shlex"
version = "1.3.0"
@@ -6376,16 +6444,18 @@ dependencies = [
]
[[package]]
-name = "wayvr_ipc"
+name = "wayvrctl"
version = "0.1.0"
-source = "git+https://github.com/olekolek1000/wayvr-ipc.git?rev=6d253ef9e36db0f181566030a4990454ecb60395#6d253ef9e36db0f181566030a4990454ecb60395"
dependencies = [
"anyhow",
- "bytes",
+ "clap",
+ "env_logger 0.11.8",
"log",
"serde",
"serde_json",
- "smallvec",
+ "shell-words",
+ "tokio",
+ "wayvr-ipc",
]
[[package]]
@@ -7055,7 +7125,6 @@ dependencies = [
"wayland-client",
"wayland-egl",
"wayvr-ipc",
- "wayvr_ipc",
"wgui",
"winit",
"wlx-capture",
diff --git a/Cargo.toml b/Cargo.toml
index 5ec137c..e718939 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,17 +18,21 @@ members = [
"wlx-capture",
"dash-frontend",
"wayvr-ipc",
+ "wayvrctl",
]
resolver = "3"
[workspace.dependencies]
anyhow = "1.0.100"
glam = { version = "0.30.9", features = ["mint", "serde"] }
+clap = { version = "4.5.53", features = ["derive"] }
idmap = "0.2.2"
idmap-derive = "0.2.22"
log = "0.4.29"
regex = "1.12.2"
rust-embed = "8.9.0"
+serde = { version = "1", features = ["derive"] }
+serde_json = "1.0.145"
slotmap = "1.1.1"
vulkano = { version = "0.35.2", default-features = false, features = [
"macros",
diff --git a/dash-frontend/Cargo.toml b/dash-frontend/Cargo.toml
index 6211da2..463d61c 100644
--- a/dash-frontend/Cargo.toml
+++ b/dash-frontend/Cargo.toml
@@ -7,12 +7,12 @@ edition = "2024"
anyhow.workspace = true
wgui = { path = "../wgui/" }
glam = { workspace = true, features = ["mint", "serde"] }
-log = { workspace = true }
-rust-embed = { workspace = true }
+log.workspace = true
+rust-embed.workspace = true
chrono = "0.4.42"
gio = "0.21.5"
gtk = "0.18.2"
-serde = { version = "1.0.228", features = ["derive"] }
-serde_json = "1.0.145"
+serde.workspace = true
+serde_json.workspace = true
wlx-common = { path = "../wlx-common" }
wayvr_ipc = { workspace = true }
diff --git a/dash-frontend/assets/lang/ja.json b/dash-frontend/assets/lang/ja.json
index 160ea57..e357ec4 100644
--- a/dash-frontend/assets/lang/ja.json
+++ b/dash-frontend/assets/lang/ja.json
@@ -1,70 +1,70 @@
{
- "HOME_SCREEN": "ホーム",
- "MONADO_RUNTIME": "「Monado」ランタイム",
- "APPLICATIONS": "アプリケーション",
- "GAMES": "ゲーム",
- "SETTINGS": "設定",
- "PROCESSES": "プロセス",
- "HELLO_USER": "こんにちは、{USER}!",
- "GENERAL_SETTINGS": "全般設定",
- "APPLICATION_LAUNCHER": "アプリケーションランチャー",
- "APP_SETTINGS": {
- "HIDE_USERNAME": "ユーザー名を表示しない",
- "OPAQUE_BACKGROUND": "不透明な背景",
- "RUN_IN_XWAYLAND_MODE_BY_DEFAULT": "XWaylandモードでデフォルトで実行する",
- "WLX_OVERLAY_S_SETTINGS": "WlxOverlay-Sの設定",
- "HEADSET_SETTINGS": "ヘッドセット設定",
- "BRIGHTNESS": "明るさ",
- "WLX": {
- "NOTIFICATIONS_ENABLED": "通知",
- "NOTIFICATIONS_SOUND_ENABLED": "通知音",
- "KEYBOARD_SOUND_ENABLED": "キーボード音",
- "BLOCK_GAME_INPUT": "ゲーム入力をブロック",
- "SPACE_DRAG_MULTIPLIER": "スペースドラッグ乗数",
- "SPACE_DRAG_ROTATION_ENABLED": "スペースドラッグでの回転",
- "SHOW_SKYBOX": "スカイボックス",
- "ENABLE_PASSTHROUGH": "パススルー"
- },
- "RESTART_SOFTWARE": "ソフトウェアを再起動"
- },
- "HELLO": "こんにちは!",
- "AUDIO": {
- "VOLUME": "音量",
- "SETTINGS": "オーディオ設定",
- "AUTO_SWITCH_TO_VR_AUDIO": "VRオーディオに自動切り替え",
- "SPEAKERS": "スピーカー",
- "MICROPHONES": "マイク",
- "CARDS": "カード",
- "SELECT_AUDIO_CARD_PROFILE": "オーディオカードプロファイルを選択",
- "NO_VR_SPEAKERS_FOUND_SWITCH_MANUALLY": "VRスピーカーが見つかりませんでした。手動で切り替えてください。",
- "NO_VR_MICROPHONE_SWITCH_MANUALLY": "VRマイクが見つかりませんでした。手動で切り替えてください。",
- "FAILED_TO_SWITCH_MICROPHONE": "マイクの切り替えに失敗しました",
- "MICROPHONE_SET_SUCCESSFULLY": "マイクの設定が完了しました",
- "SPEAKERS_SET_SUCCESSFULLY": "スピーカーを設定しました",
- "DEVICE_FOUND_AND_INITIALIZED_BUT_NOT_SWITCHED": "デバイスが見つかり、初期化されましたが、切り替えられていません"
- },
- "ACTIONS": {
- "RECENTER_PLAYSPACE": "プレイスペースを再中央"
- },
- "LIST_OF_DISPLAYS": "ディスプレイリスト",
- "LIST_OF_PROCESSES": "プロセスのリスト",
- "NO_DISPLAYS_FOUND": "ディスプレイが見つかりません",
- "ADD_DISPLAY": "ディスプレイを追加",
- "POPUP_ADD_DISPLAY": {
- "RESOLUTION": "解像度"
- },
- "WIDTH": "幅",
- "HEIGHT": "高さ",
- "DISPLAY_PORTRAIT_MODE": "縦向きモード",
- "HIDE": "隠す",
- "REMOVE": "削除",
- "SHOW": "表示",
- "DISPLAY_OPTIONS": "表示オプション",
- "PROCESS_LIST": {
- "NO_PROCESSES_FOUND": "プロセスが見つかりませんでした",
- "LOCATED_ON": "に",
- "TERMINATE_PROCESS_NAMED_X": "プロセス \"{PROCESS_NAME}\" を終了します"
- },
- "FAILED_TO_LAUNCH_APPLICATION": "アプリケーションの起動に失敗しました:",
- "APPLICATION_LAUNCHED_ON": "{DISPLAY_NAME}でアプリケーションが起動しました。"
-}
\ No newline at end of file
+ "HOME_SCREEN": "ホーム",
+ "MONADO_RUNTIME": "「Monado」ランタイム",
+ "APPLICATIONS": "アプリケーション",
+ "GAMES": "ゲーム",
+ "SETTINGS": "設定",
+ "PROCESSES": "プロセス",
+ "HELLO_USER": "こんにちは、{USER}!",
+ "GENERAL_SETTINGS": "全般設定",
+ "APPLICATION_LAUNCHER": "アプリケーションランチャー",
+ "APP_SETTINGS": {
+ "HIDE_USERNAME": "ユーザー名を表示しない",
+ "OPAQUE_BACKGROUND": "不透明な背景",
+ "RUN_IN_XWAYLAND_MODE_BY_DEFAULT": "XWaylandモードでデフォルトで実行する",
+ "WLX_OVERLAY_S_SETTINGS": "WlxOverlay-Sの設定",
+ "HEADSET_SETTINGS": "ヘッドセット設定",
+ "BRIGHTNESS": "明るさ",
+ "WLX": {
+ "NOTIFICATIONS_ENABLED": "通知",
+ "NOTIFICATIONS_SOUND_ENABLED": "通知音",
+ "KEYBOARD_SOUND_ENABLED": "キーボード音",
+ "BLOCK_GAME_INPUT": "ゲーム入力をブロック",
+ "SPACE_DRAG_MULTIPLIER": "スペースドラッグ乗数",
+ "SPACE_DRAG_ROTATION_ENABLED": "スペースドラッグでの回転",
+ "SHOW_SKYBOX": "スカイボックス",
+ "ENABLE_PASSTHROUGH": "パススルー"
+ },
+ "RESTART_SOFTWARE": "ソフトウェアを再起動"
+ },
+ "HELLO": "こんにちは!",
+ "AUDIO": {
+ "VOLUME": "音量",
+ "SETTINGS": "オーディオ設定",
+ "AUTO_SWITCH_TO_VR_AUDIO": "VRオーディオに自動切り替え",
+ "SPEAKERS": "スピーカー",
+ "MICROPHONES": "マイク",
+ "CARDS": "カード",
+ "SELECT_AUDIO_CARD_PROFILE": "オーディオカードプロファイルを選択",
+ "NO_VR_SPEAKERS_FOUND_SWITCH_MANUALLY": "VRスピーカーが見つかりませんでした。手動で切り替えてください。",
+ "NO_VR_MICROPHONE_SWITCH_MANUALLY": "VRマイクが見つかりませんでした。手動で切り替えてください。",
+ "FAILED_TO_SWITCH_MICROPHONE": "マイクの切り替えに失敗しました",
+ "MICROPHONE_SET_SUCCESSFULLY": "マイクの設定が完了しました",
+ "SPEAKERS_SET_SUCCESSFULLY": "スピーカーを設定しました",
+ "DEVICE_FOUND_AND_INITIALIZED_BUT_NOT_SWITCHED": "デバイスが見つかり、初期化されましたが、切り替えられていません"
+ },
+ "ACTIONS": {
+ "RECENTER_PLAYSPACE": "プレイスペースを再中央"
+ },
+ "LIST_OF_DISPLAYS": "ディスプレイリスト",
+ "LIST_OF_PROCESSES": "プロセスのリスト",
+ "NO_DISPLAYS_FOUND": "ディスプレイが見つかりません",
+ "ADD_DISPLAY": "ディスプレイを追加",
+ "POPUP_ADD_DISPLAY": {
+ "RESOLUTION": "解像度"
+ },
+ "WIDTH": "幅",
+ "HEIGHT": "高さ",
+ "DISPLAY_PORTRAIT_MODE": "縦向きモード",
+ "HIDE": "隠す",
+ "REMOVE": "削除",
+ "SHOW": "表示",
+ "DISPLAY_OPTIONS": "表示オプション",
+ "PROCESS_LIST": {
+ "NO_PROCESSES_FOUND": "プロセスが見つかりませんでした",
+ "LOCATED_ON": "に",
+ "TERMINATE_PROCESS_NAMED_X": "プロセス \"{PROCESS_NAME}\" を終了します"
+ },
+ "FAILED_TO_LAUNCH_APPLICATION": "アプリケーションの起動に失敗しました:",
+ "APPLICATION_LAUNCHED_ON": "{DISPLAY_NAME}でアプリケーションが起動しました。"
+}
diff --git a/wayvr-ipc/Cargo.toml b/wayvr-ipc/Cargo.toml
index 20e9928..b392eb4 100644
--- a/wayvr-ipc/Cargo.toml
+++ b/wayvr-ipc/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2024"
[dependencies]
bytes = "1.9.0"
smallvec = "1.13.2"
-serde = { version = "1", features = ["derive"] }
+serde.workspace = true
anyhow = "1.0.93"
log = "0.4.22"
@@ -14,7 +14,7 @@ log = "0.4.22"
interprocess = { version = "2.2.2", features = ["tokio"], optional = true }
tokio = { version = "1.43.1", features = ["macros"], optional = true }
tokio-util = { version = "0.7.13", optional = true }
-serde_json = "1.0.135"
+serde_json.workspace = true
[features]
default = ["client"]
diff --git a/wayvr-ipc/src/client.rs b/wayvr-ipc/src/client.rs
index 46cd0d2..bba9a98 100644
--- a/wayvr-ipc/src/client.rs
+++ b/wayvr-ipc/src/client.rs
@@ -1,8 +1,7 @@
use bytes::BufMut;
use interprocess::local_socket::{
- self,
- tokio::{prelude::*, Stream},
- GenericNamespaced,
+ self, GenericNamespaced,
+ tokio::{Stream, prelude::*},
};
use serde::Serialize;
use smallvec::SmallVec;
@@ -486,6 +485,14 @@ impl WayVRClient {
send_only!(client, &PacketClient::WlxHaptics(params));
Ok(())
}
+
+ pub async fn fn_wlx_modify_panel(
+ client: WayVRClientMutex,
+ params: packet_client::WlxModifyPanelParams,
+ ) -> anyhow::Result<()> {
+ send_only!(client, &PacketClient::WlxModifyPanel(params));
+ Ok(())
+ }
}
impl Drop for WayVRClient {
diff --git a/wayvr-ipc/src/packet_client.rs b/wayvr-ipc/src/packet_client.rs
index 5378f93..83d7e91 100644
--- a/wayvr-ipc/src/packet_client.rs
+++ b/wayvr-ipc/src/packet_client.rs
@@ -48,6 +48,22 @@ pub struct WlxHapticsParams {
pub frequency: f32,
}
+#[derive(Clone, Debug, Serialize, Deserialize)]
+pub enum WlxModifyPanelCommand {
+ SetText(String),
+ SetColor(String),
+ SetImage(String),
+ SetVisible(bool),
+ SetStickyState(bool),
+}
+
+#[derive(Clone, Debug, Serialize, Deserialize)]
+pub struct WlxModifyPanelParams {
+ pub overlay: String,
+ pub element: String,
+ pub command: WlxModifyPanelCommand,
+}
+
#[derive(Debug, Serialize, Deserialize)]
pub enum PacketClient {
Handshake(Handshake),
@@ -68,4 +84,5 @@ pub enum PacketClient {
WvrProcessTerminate(packet_server::WvrProcessHandle),
WlxHaptics(WlxHapticsParams),
WlxInputState(Serial),
+ WlxModifyPanel(WlxModifyPanelParams),
}
diff --git a/wayvr-ipc/src/util/handle.rs b/wayvr-ipc/src/util/handle.rs
index a408d41..63aaa7b 100644
--- a/wayvr-ipc/src/util/handle.rs
+++ b/wayvr-ipc/src/util/handle.rs
@@ -1,167 +1,164 @@
#[macro_export]
macro_rules! gen_id {
- (
+ (
$container_name:ident,
$instance_name:ident,
$cell_name:ident,
$handle_name:ident) => {
- //ThingCell
- pub struct $cell_name {
- pub obj: $instance_name,
- pub generation: u64,
- }
+ //ThingCell
+ pub struct $cell_name {
+ pub obj: $instance_name,
+ pub generation: u64,
+ }
- //ThingVec
- pub struct $container_name {
- // Vec