From 4e795257ad60d94c4f12979ba75e851aa7230650 Mon Sep 17 00:00:00 2001 From: akanyan Date: Tue, 8 Apr 2025 21:49:15 +0000 Subject: [PATCH] feat: add dont_switch_primary --- rust/src/model/profile.rs | 8 +++++++ rust/src/modules/display_windows.rs | 11 ++++----- rust/src/profiles/mod.rs | 6 ++++- src/components/OptionRow.vue | 6 +++++ src/components/options/Display.vue | 35 +++++++++++++++++++++++++++++ src/types.ts | 2 ++ 6 files changed, 62 insertions(+), 6 deletions(-) diff --git a/rust/src/model/profile.rs b/rust/src/model/profile.rs index 7bdb63d..cd7dfa4 100644 --- a/rust/src/model/profile.rs +++ b/rust/src/model/profile.rs @@ -75,6 +75,12 @@ pub struct Display { pub rotation: i32, pub frequency: i32, pub borderless_fullscreen: bool, + + #[serde(default)] + pub dont_switch_primary: bool, + + #[serde(skip_serializing_if = "Option::is_none")] + pub monitor_index_override: Option, } impl Display { @@ -92,6 +98,8 @@ impl Display { Game::Ongeki => 60, }, borderless_fullscreen: true, + dont_switch_primary: false, + monitor_index_override: None, } } } diff --git a/rust/src/modules/display_windows.rs b/rust/src/modules/display_windows.rs index 32942f7..9c2729a 100644 --- a/rust/src/modules/display_windows.rs +++ b/rust/src/modules/display_windows.rs @@ -1,4 +1,3 @@ - use crate::model::profile::{Display, DisplayMode}; use anyhow::Result; use displayz::{query_displays, DisplaySet}; @@ -7,14 +6,14 @@ use tauri::{AppHandle, Listener}; #[derive(Clone)] pub struct DisplayInfo { pub primary: String, - pub set: Option + pub set: Option, } impl Default for DisplayInfo { fn default() -> Self { DisplayInfo { primary: "default".to_owned(), - set: query_displays().ok() + set: query_displays().ok(), } } } @@ -52,14 +51,16 @@ impl Display { .find(|display| display.name() == self.target) .ok_or_else(|| anyhow!("Display {} not found", self.target))?; - target.set_primary()?; + if !self.dont_switch_primary { + target.set_primary()?; + } let settings = target.settings() .as_ref() .ok_or_else(|| anyhow!("Unable to query display settings"))?; let res = DisplayInfo { primary: primary.name().to_owned(), - set: Some(display_set.clone()) + set: Some(display_set.clone()), }; if self.rotation == 90 || self.rotation == 270 { diff --git a/rust/src/profiles/mod.rs b/rust/src/profiles/mod.rs index 63d9059..6cee94c 100644 --- a/rust/src/profiles/mod.rs +++ b/rust/src/profiles/mod.rs @@ -266,8 +266,12 @@ impl Profile { .arg(self.meta.game.exe()); if let Some(display) = &self.data.display { + if display.dont_switch_primary && display.target != "default" { + game_builder.args(["-monitor", &display.monitor_index_override.unwrap_or_else(|| 1).to_string()]); + } else { + game_builder.args(["-monitor", "1"]); + } game_builder.args([ - "-monitor 1", "-screen-width", &display.rez.0.to_string(), "-screen-height", &display.rez.1.to_string(), "-screen-fullscreen", if display.mode == DisplayMode::Fullscreen { "1" } else { "0" } diff --git a/src/components/OptionRow.vue b/src/components/OptionRow.vue index 053c32e..a33961f 100644 --- a/src/components/OptionRow.vue +++ b/src/components/OptionRow.vue @@ -8,6 +8,7 @@ const category = getCurrentInstance()?.parent?.parent?.parent?.parent; // yes in const props = defineProps({ title: String, tooltip: String, + dangerousTooltip: String, }); const searched = computed(() => { @@ -32,6 +33,11 @@ const searched = computed(() => { class="pi pi-question-circle ml-2" v-tooltip="tooltip" > + diff --git a/src/components/options/Display.vue b/src/components/options/Display.vue index f78140b..cda52c1 100644 --- a/src/components/options/Display.vue +++ b/src/components/options/Display.vue @@ -157,5 +157,40 @@ loadDisplays(); v-model="prf.current!.data.display.borderless_fullscreen" /> + + + + + + diff --git a/src/types.ts b/src/types.ts index 585fef4..e8e37ab 100644 --- a/src/types.ts +++ b/src/types.ts @@ -78,6 +78,8 @@ export interface DisplayConfig { rotation: number; frequency: number; borderless_fullscreen: boolean; + dont_switch_primary: boolean; + monitor_index_override: number | null; } export interface NetworkConfig {