1
0
Fork 0
forked from wry/wry

config: add get_connector_by_name

This commit is contained in:
Julian Orth 2026-03-18 12:12:33 +01:00
parent 52b91654ca
commit cf36da4077
4 changed files with 31 additions and 0 deletions

View file

@ -560,6 +560,12 @@ impl ConfigClient {
connector 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 { pub fn get_seat_cursor_workspace(&self, seat: Seat) -> Workspace {
let res = self.send_with_response(&ClientMessage::GetSeatCursorWorkspace { seat }); let res = self.send_with_response(&ClientMessage::GetSeatCursorWorkspace { seat });
get_response!(res, Workspace(0), GetSeatCursorWorkspace { workspace }); get_response!(res, Workspace(0), GetSeatCursorWorkspace { workspace });

View file

@ -849,6 +849,9 @@ pub enum ClientMessage<'a> {
ConnectorSupportsArbitraryModes { ConnectorSupportsArbitraryModes {
connector: Connector, connector: Connector,
}, },
GetConnectorByName {
name: &'a str,
},
} }
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]

View file

@ -454,6 +454,14 @@ pub fn get_connector(id: impl ToConnectorId) -> Connector {
get!(Connector(0)).get_connector(ty, idx) 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 `<type>-<id>` 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. /// A type that can be converted to a `(ConnectorType, idx)` tuple.
pub trait ToConnectorId { pub trait ToConnectorId {
fn to_connector_id(&self) -> Result<(ConnectorType, u32), String>; fn to_connector_id(&self) -> Result<(ConnectorType, u32), String>;

View file

@ -1592,6 +1592,19 @@ impl ConfigProxyHandler {
Ok(()) 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> { fn handle_get_connector_active_workspace(&self, connector: Connector) -> Result<(), CphError> {
let output = self.get_output_node(connector)?; let output = self.get_output_node(connector)?;
let workspace = output let workspace = output
@ -3343,6 +3356,7 @@ impl ConfigProxyHandler {
ClientMessage::ConnectorSupportsArbitraryModes { connector } => self ClientMessage::ConnectorSupportsArbitraryModes { connector } => self
.handle_connector_supports_arbitrary_modes(connector) .handle_connector_supports_arbitrary_modes(connector)
.wrn("connector_supports_arbitrary_modes")?, .wrn("connector_supports_arbitrary_modes")?,
ClientMessage::GetConnectorByName { name } => self.handle_get_connector_by_name(name),
} }
Ok(()) Ok(())
} }