From cf36da407725615479bc7abb4eba5a545666efe1 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Wed, 18 Mar 2026 12:12:33 +0100 Subject: [PATCH] config: add get_connector_by_name --- jay-config/src/_private/client.rs | 6 ++++++ jay-config/src/_private/ipc.rs | 3 +++ jay-config/src/video.rs | 8 ++++++++ src/config/handler.rs | 14 ++++++++++++++ 4 files changed, 31 insertions(+) diff --git a/jay-config/src/_private/client.rs b/jay-config/src/_private/client.rs index d74042c5..7a46f9d1 100644 --- a/jay-config/src/_private/client.rs +++ b/jay-config/src/_private/client.rs @@ -560,6 +560,12 @@ impl ConfigClient { connector } + pub fn get_connector_by_name(&self, name: &str) -> Connector { + let res = self.send_with_response(&ClientMessage::GetConnectorByName { name }); + get_response!(res, Connector(0), GetConnector { connector }); + connector + } + pub fn get_seat_cursor_workspace(&self, seat: Seat) -> Workspace { let res = self.send_with_response(&ClientMessage::GetSeatCursorWorkspace { seat }); get_response!(res, Workspace(0), GetSeatCursorWorkspace { workspace }); diff --git a/jay-config/src/_private/ipc.rs b/jay-config/src/_private/ipc.rs index b3df04f6..d002f7b7 100644 --- a/jay-config/src/_private/ipc.rs +++ b/jay-config/src/_private/ipc.rs @@ -849,6 +849,9 @@ pub enum ClientMessage<'a> { ConnectorSupportsArbitraryModes { connector: Connector, }, + GetConnectorByName { + name: &'a str, + }, } #[derive(Serialize, Deserialize, Debug)] diff --git a/jay-config/src/video.rs b/jay-config/src/video.rs index c2ada2f6..9dcbea0e 100644 --- a/jay-config/src/video.rs +++ b/jay-config/src/video.rs @@ -454,6 +454,14 @@ pub fn get_connector(id: impl ToConnectorId) -> Connector { get!(Connector(0)).get_connector(ty, idx) } +/// Returns the connector with the given name. +/// +/// Unlike [`get_connector`], this function can also be used for connectors whose names +/// don't follow the `-` pattern. +pub fn get_connector_by_name(name: &str) -> Connector { + get!(Connector(0)).get_connector_by_name(name) +} + /// A type that can be converted to a `(ConnectorType, idx)` tuple. pub trait ToConnectorId { fn to_connector_id(&self) -> Result<(ConnectorType, u32), String>; diff --git a/src/config/handler.rs b/src/config/handler.rs index 9bbc7505..73cf2be9 100644 --- a/src/config/handler.rs +++ b/src/config/handler.rs @@ -1592,6 +1592,19 @@ impl ConfigProxyHandler { Ok(()) } + fn handle_get_connector_by_name(&self, name: &str) { + let connector = self + .state + .connectors + .lock() + .values() + .find(|c| *c.name == name) + .map(|c| c.connector.id().raw() as _) + .map(Connector) + .unwrap_or(Connector(0)); + self.respond(Response::GetConnector { connector }); + } + fn handle_get_connector_active_workspace(&self, connector: Connector) -> Result<(), CphError> { let output = self.get_output_node(connector)?; let workspace = output @@ -3343,6 +3356,7 @@ impl ConfigProxyHandler { ClientMessage::ConnectorSupportsArbitraryModes { connector } => self .handle_connector_supports_arbitrary_modes(connector) .wrn("connector_supports_arbitrary_modes")?, + ClientMessage::GetConnectorByName { name } => self.handle_get_connector_by_name(name), } Ok(()) }