Simplify struct State, access connection ref through callback args

This commit is contained in:
Gergő Sályi 2025-04-26 12:56:54 +02:00
parent 17ce422c7e
commit ea1a9411bb
2 changed files with 17 additions and 16 deletions

View file

@ -14,7 +14,6 @@ use std::{
Arc, Arc,
mpsc::{channel, Receiver}, mpsc::{channel, Receiver},
}, },
rc::Rc,
}; };
use clap::Parser; use clap::Parser;
@ -51,7 +50,6 @@ use crate::{
}; };
struct State { struct State {
connection: Rc<Connection>,
compositor_state: CompositorState, compositor_state: CompositorState,
registry_state: RegistryState, registry_state: RegistryState,
output_state: OutputState, output_state: OutputState,
@ -112,7 +110,7 @@ fn run() -> anyhow::Result<()> {
// Initialize wayland client // Initialize wayland client
// ******************************** // ********************************
let conn = Rc::new(Connection::connect_to_env().unwrap()); let conn = Connection::connect_to_env().unwrap();
let (globals, mut event_queue) = registry_queue_init(&conn).unwrap(); let (globals, mut event_queue) = registry_queue_init(&conn).unwrap();
let qh = event_queue.handle(); let qh = event_queue.handle();
@ -164,7 +162,6 @@ fn run() -> anyhow::Result<()> {
.unwrap_or(Compositor::Sway); .unwrap_or(Compositor::Sway);
let mut state = State { let mut state = State {
connection: Rc::clone(&conn),
compositor_state, compositor_state,
registry_state, registry_state,
output_state: OutputState::new(&globals, &qh), output_state: OutputState::new(&globals, &qh),

View file

@ -263,7 +263,7 @@ impl DmabufHandler for State {
fn dmabuf_feedback( fn dmabuf_feedback(
&mut self, &mut self,
_conn: &Connection, conn: &Connection,
qh: &QueueHandle<Self>, qh: &QueueHandle<Self>,
proxy: &ZwpLinuxDmabufFeedbackV1, proxy: &ZwpLinuxDmabufFeedbackV1,
feedback: DmabufFeedback, feedback: DmabufFeedback,
@ -278,13 +278,14 @@ impl DmabufHandler for State {
}; };
if let Err(e) = handle_dmabuf_feedback( if let Err(e) = handle_dmabuf_feedback(
self, self,
conn,
qh, qh,
feedback, feedback,
bg_layer_pos bg_layer_pos
) { ) {
error!("Failed to proceed with DMA-BUF feedback, \ error!("Failed to proceed with DMA-BUF feedback, \
falling back to shm: {e:#}"); falling back to shm: {e:#}");
fallback_shm_load_wallpapers(self, qh, bg_layer_pos); fallback_shm_load_wallpapers(self, conn, qh, bg_layer_pos);
} }
} }
@ -321,7 +322,7 @@ impl DmabufHandler for State {
fn failed( fn failed(
&mut self, &mut self,
_conn: &Connection, conn: &Connection,
qh: &QueueHandle<Self>, qh: &QueueHandle<Self>,
params: &ZwpLinuxBufferParamsV1, params: &ZwpLinuxBufferParamsV1,
) { ) {
@ -339,7 +340,7 @@ impl DmabufHandler for State {
} }
} }
for index in failed_bg_layer_indecies { for index in failed_bg_layer_indecies {
fallback_shm_load_wallpapers(self, qh, index); fallback_shm_load_wallpapers(self, conn, qh, index);
} }
} }
@ -415,7 +416,7 @@ impl OutputHandler for State {
fn new_output( fn new_output(
&mut self, &mut self,
_conn: &Connection, conn: &Connection,
qh: &QueueHandle<Self>, qh: &QueueHandle<Self>,
output: WlOutput, output: WlOutput,
) { ) {
@ -594,7 +595,7 @@ impl OutputHandler for State {
dmabuf_feedback, dmabuf_feedback,
}); });
if !is_dmabuf_feedback { if !is_dmabuf_feedback {
load_wallpapers(self, qh, bg_layer_index, gpu_uploader); load_wallpapers(self, conn, qh, bg_layer_index, gpu_uploader);
} }
} }
@ -928,6 +929,7 @@ fn print_memory_stats(background_layers: &[BackgroundLayer]) {
fn fallback_shm_load_wallpapers( fn fallback_shm_load_wallpapers(
state: &mut State, state: &mut State,
conn: &Connection,
qh: &QueueHandle<State>, qh: &QueueHandle<State>,
bg_layer_index: usize, bg_layer_index: usize,
) { ) {
@ -936,11 +938,12 @@ fn fallback_shm_load_wallpapers(
dmabuf_feedback.destroy(); dmabuf_feedback.destroy();
} }
bg_layer.workspace_backgrounds.clear(); bg_layer.workspace_backgrounds.clear();
load_wallpapers(state, qh, bg_layer_index, None); load_wallpapers(state, conn, qh, bg_layer_index, None);
} }
fn load_wallpapers( fn load_wallpapers(
state: &mut State, state: &mut State,
connection: &Connection,
qh: &QueueHandle<State>, qh: &QueueHandle<State>,
bg_layer_index: usize, bg_layer_index: usize,
mut gpu_uploader: Option<GpuUploader>, mut gpu_uploader: Option<GpuUploader>,
@ -978,7 +981,7 @@ fn load_wallpapers(
let mut reused_count = 0usize; let mut reused_count = 0usize;
let mut loaded_count = 0usize; let mut loaded_count = 0usize;
let mut error_count = 0usize; let mut error_count = 0usize;
flush_blocking(&state.connection); flush_blocking(connection);
let mut fds_need_flush = 0usize; let mut fds_need_flush = 0usize;
for wallpaper_file in wallpaper_files { for wallpaper_file in wallpaper_files {
if log::log_enabled!(log::Level::Debug) { if log::log_enabled!(log::Level::Debug) {
@ -1037,7 +1040,7 @@ fn load_wallpapers(
Ok(gpu_wallpaper) => { Ok(gpu_wallpaper) => {
let fds_count = gpu_wallpaper.memory_planes_len; let fds_count = gpu_wallpaper.memory_planes_len;
if fds_need_flush + fds_count > MAX_FDS_OUT { if fds_need_flush + fds_count > MAX_FDS_OUT {
flush_blocking(&state.connection); flush_blocking(connection);
fds_need_flush = 0; fds_need_flush = 0;
} }
fds_need_flush += fds_count; fds_need_flush += fds_count;
@ -1065,7 +1068,7 @@ fn load_wallpapers(
} }
} }
if fds_need_flush + 1 > MAX_FDS_OUT { if fds_need_flush + 1 > MAX_FDS_OUT {
flush_blocking(&state.connection); flush_blocking(connection);
fds_need_flush = 0; fds_need_flush = 0;
} }
fds_need_flush += 1; fds_need_flush += 1;
@ -1113,7 +1116,7 @@ fn load_wallpapers(
loaded_count += 1; loaded_count += 1;
} }
if fds_need_flush > 0 { if fds_need_flush > 0 {
flush_blocking(&state.connection); flush_blocking(connection);
} }
debug!("Wallpapers for new output: {} loaded, {} reused, {} errors", debug!("Wallpapers for new output: {} loaded, {} reused, {} errors",
loaded_count, reused_count, error_count); loaded_count, reused_count, error_count);
@ -1128,6 +1131,7 @@ fn load_wallpapers(
fn handle_dmabuf_feedback( fn handle_dmabuf_feedback(
state: &mut State, state: &mut State,
conn: &Connection,
qh: &QueueHandle<State>, qh: &QueueHandle<State>,
feedback: DmabufFeedback, feedback: DmabufFeedback,
bg_layer_pos: usize, bg_layer_pos: usize,
@ -1205,7 +1209,7 @@ fn handle_dmabuf_feedback(
debug!("DMA-BUF feedback changed, reloading wallpapers"); debug!("DMA-BUF feedback changed, reloading wallpapers");
bg_layer.workspace_backgrounds.clear(); bg_layer.workspace_backgrounds.clear();
} }
load_wallpapers(state, qh, bg_layer_pos, Some(gpu_uploader)); load_wallpapers(state, conn, qh, bg_layer_pos, Some(gpu_uploader));
Ok(()) Ok(())
} }