get rid of wayvr refcell

This commit is contained in:
galister
2025-12-27 13:27:44 +09:00
parent d70b51184c
commit 35f3748b95
11 changed files with 156 additions and 175 deletions
+7 -16
View File
@@ -1,9 +1,7 @@
use std::{cell::RefCell, rc::Rc};
use wayvr_ipc::packet_server;
#[cfg(feature = "wayvr")]
use crate::backend::wayvr::{self, WayVRState};
use crate::backend::wayvr::{self, WvrServerState};
use crate::{
backend::{
@@ -18,18 +16,14 @@ use crate::{
#[cfg(feature = "wayvr")]
fn process_tick_tasks(
tick_tasks: Vec<backend::wayvr::TickTask>,
r_wayvr: &Rc<RefCell<WayVRState>>,
server_state: &mut WvrServerState,
) -> anyhow::Result<()> {
for tick_task in tick_tasks {
match tick_task {
backend::wayvr::TickTask::NewExternalProcess(request) => {
let mut wayvr = r_wayvr.borrow_mut();
log::info!("Registering external process with PID {}", request.pid);
wayvr.add_external_process(request.pid);
wayvr.manager.add_client(wayvr::client::WayVRClient {
server_state.add_external_process(request.pid);
server_state.manager.add_client(wayvr::client::WayVRClient {
client: request.client,
pid: request.pid,
});
@@ -47,9 +41,6 @@ pub fn tick_events<O>(
where
O: Default,
{
#[cfg(feature = "wayvr")]
let wayvr_server = app.wayvr_server.clone();
while let Some(signal) = app.wayvr_signals.read() {
match signal {
#[cfg(feature = "wayvr")]
@@ -76,9 +67,9 @@ where
#[cfg(feature = "wayvr")]
{
if let Some(wayvr_server) = wayvr_server {
let tick_tasks = wayvr_server.borrow_mut().tick_events(app)?;
process_tick_tasks(tick_tasks, &wayvr_server)?;
let tick_tasks = WvrServerState::tick_events(app)?;
if let Some(wayvr_server) = app.wvr_server.as_mut() {
process_tick_tasks(tick_tasks, wayvr_server)?;
}
}
+8 -8
View File
@@ -1,5 +1,5 @@
#[cfg(feature = "wayvr")]
use crate::backend::wayvr::{self, WayVRState};
use crate::backend::wayvr::{self, WvrServerState};
use crate::{
backend::input::InputState,
@@ -76,7 +76,7 @@ fn read_payload(conn: &mut local_socket::Stream, size: u32) -> Option<Payload> {
pub struct TickParams<'a> {
#[cfg(feature = "wayvr")]
pub wayland_state: &'a mut WayVRState,
pub wvr_server: &'a mut WvrServerState,
#[cfg(feature = "wayvr")]
pub tasks: &'a mut Vec<wayvr::TickTask>,
pub signals: &'a SyncEventQueue<WayVRSignal>,
@@ -197,7 +197,7 @@ impl Connection {
send(Some(packet_server::WvrWindowList {
list: params
.wayland_state
.wvr_server
.wm
.windows
.iter()
@@ -219,7 +219,7 @@ impl Connection {
visible: bool,
) {
if let Some(window) = params
.wayland_state
.wvr_server
.wm
.windows
.get_mut(&wayvr::window::WindowHandle::from_packet(handle))
@@ -238,7 +238,7 @@ impl Connection {
let args_vec = gen_args_vec(&packet_params.args);
let env_vec = gen_env_vec(&packet_params.env);
let res = params.wayland_state.spawn_process(
let res = params.wvr_server.spawn_process(
&packet_params.exec,
&args_vec,
&env_vec,
@@ -263,7 +263,7 @@ impl Connection {
serial: ipc::Serial,
) -> anyhow::Result<()> {
let list: Vec<packet_server::WvrProcess> = params
.wayland_state
.wvr_server
.processes
.vec
.iter()
@@ -298,7 +298,7 @@ impl Connection {
process_handle: packet_server::WvrProcessHandle,
) {
let native_handle = &wayvr::process::ProcessHandle::from_packet(process_handle);
let process = params.wayland_state.processes.get_mut(native_handle);
let process = params.wvr_server.processes.get_mut(native_handle);
let Some(process) = process else {
return;
@@ -316,7 +316,7 @@ impl Connection {
) -> anyhow::Result<()> {
let native_handle = &wayvr::process::ProcessHandle::from_packet(process_handle);
let process = params
.wayland_state
.wvr_server
.processes
.get(native_handle)
.map(|process| process.to_packet(*native_handle));