Simplify struct State, access connection ref through callback args
This commit is contained in:
parent
17ce422c7e
commit
ea1a9411bb
2 changed files with 17 additions and 16 deletions
|
@ -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),
|
||||||
|
|
|
@ -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(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue