Skip to content

Commit 2fe5897

Browse files
ids1024Drakulix
authored andcommitted
Replace screencopy with ext-image-copy-capture-v1
1 parent fec4b3c commit 2fe5897

File tree

10 files changed

+545
-575
lines changed

10 files changed

+545
-575
lines changed

src/state.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::{
1717
a11y::A11yState,
1818
atspi::AtspiState,
1919
drm::WlDrmState,
20-
image_source::ImageSourceState,
20+
image_capture_source::ImageCaptureSourceState,
2121
output_configuration::OutputConfigurationState,
2222
output_power::OutputPowerState,
2323
overlap_notify::OverlapNotifyState,
@@ -219,7 +219,7 @@ pub struct Common {
219219
pub presentation_state: PresentationState,
220220
pub primary_selection_state: PrimarySelectionState,
221221
pub data_control_state: Option<DataControlState>,
222-
pub image_source_state: ImageSourceState,
222+
pub image_capture_source_state: ImageCaptureSourceState,
223223
pub screencopy_state: ScreencopyState,
224224
pub seat_state: SeatState<State>,
225225
pub session_lock_manager_state: SessionLockManagerState,
@@ -532,7 +532,8 @@ impl State {
532532
OverlapNotifyState::new::<Self, _>(dh, client_has_no_security_context);
533533
let presentation_state = PresentationState::new::<Self>(dh, clock.id() as u32);
534534
let primary_selection_state = PrimarySelectionState::new::<Self>(dh);
535-
let image_source_state = ImageSourceState::new::<Self, _>(dh, client_is_privileged);
535+
let image_capture_source_state =
536+
ImageCaptureSourceState::new::<Self, _>(dh, client_is_privileged);
536537
let screencopy_state = ScreencopyState::new::<Self, _>(dh, client_is_privileged);
537538
let shm_state =
538539
ShmState::new::<Self>(dh, vec![wl_shm::Format::Xbgr8888, wl_shm::Format::Abgr8888]);
@@ -632,7 +633,7 @@ impl State {
632633
idle_notifier_state,
633634
idle_inhibit_manager_state,
634635
idle_inhibiting_surfaces,
635-
image_source_state,
636+
image_capture_source_state,
636637
screencopy_state,
637638
shm_state,
638639
cursor_shape_manager_state,
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
use crate::state::State;
2+
use crate::wayland::protocols::image_capture_source::delegate_image_capture_source;
3+
4+
delegate_image_capture_source!(State);

src/wayland/handlers/image_source.rs

Lines changed: 0 additions & 4 deletions
This file was deleted.

src/wayland/handlers/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub mod foreign_toplevel_list;
1616
pub mod fractional_scale;
1717
pub mod idle_inhibit;
1818
pub mod idle_notify;
19-
pub mod image_source;
19+
pub mod image_capture_source;
2020
pub mod input_method;
2121
pub mod keyboard_shortcuts_inhibit;
2222
pub mod layer_shell;

src/wayland/handlers/screencopy/mod.rs

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use crate::{
2525
OutputExt, PointExt, PointGlobalExt, PointLocalExt, RectExt, RectLocalExt, SeatExt,
2626
},
2727
wayland::protocols::{
28-
image_source::ImageSourceData,
28+
image_capture_source::ImageCaptureSourceData,
2929
screencopy::{
3030
delegate_screencopy, BufferConstraints, CursorSession, DmabufConstraints, Frame,
3131
ScreencopyHandler, ScreencopyState, Session,
@@ -44,23 +44,26 @@ impl ScreencopyHandler for State {
4444
&mut self.common.screencopy_state
4545
}
4646

47-
fn capture_source(&mut self, source: &ImageSourceData) -> Option<BufferConstraints> {
47+
fn capture_source(&mut self, source: &ImageCaptureSourceData) -> Option<BufferConstraints> {
4848
match source {
49-
ImageSourceData::Output(weak) => weak
49+
ImageCaptureSourceData::Output(weak) => weak
5050
.upgrade()
5151
.and_then(|output| constraints_for_output(&output, &mut self.backend)),
52-
ImageSourceData::Workspace(handle) => {
52+
ImageCaptureSourceData::Workspace(handle) => {
5353
let shell = self.common.shell.read().unwrap();
5454
let output = shell.workspaces.space_for_handle(&handle)?.output();
5555
constraints_for_output(output, &mut self.backend)
5656
}
57-
ImageSourceData::Toplevel(window) => {
57+
ImageCaptureSourceData::Toplevel(window) => {
5858
constraints_for_toplevel(window, &mut self.backend)
5959
}
6060
_ => None,
6161
}
6262
}
63-
fn capture_cursor_source(&mut self, _source: &ImageSourceData) -> Option<BufferConstraints> {
63+
fn capture_cursor_source(
64+
&mut self,
65+
_source: &ImageCaptureSourceData,
66+
) -> Option<BufferConstraints> {
6467
let size = if let Some((geometry, _)) = self
6568
.common
6669
.shell
@@ -84,7 +87,7 @@ impl ScreencopyHandler for State {
8487

8588
fn new_session(&mut self, session: Session) {
8689
match session.source() {
87-
ImageSourceData::Output(weak) => {
90+
ImageCaptureSourceData::Output(weak) => {
8891
let Some(mut output) = weak.upgrade() else {
8992
session.stop();
9093
return;
@@ -98,7 +101,7 @@ impl ScreencopyHandler for State {
98101

99102
output.add_session(session);
100103
}
101-
ImageSourceData::Workspace(handle) => {
104+
ImageCaptureSourceData::Workspace(handle) => {
102105
let mut shell = self.common.shell.write().unwrap();
103106
let Some(workspace) = shell.workspaces.space_for_handle_mut(&handle) else {
104107
session.stop();
@@ -112,7 +115,7 @@ impl ScreencopyHandler for State {
112115
});
113116
workspace.add_session(session);
114117
}
115-
ImageSourceData::Toplevel(mut toplevel) => {
118+
ImageCaptureSourceData::Toplevel(mut toplevel) => {
116119
let size = toplevel.geometry().size.to_physical(1);
117120
session.user_data().insert_if_missing_threadsafe(|| {
118121
Mutex::new(SessionUserData::new(OutputDamageTracker::new(
@@ -123,7 +126,7 @@ impl ScreencopyHandler for State {
123126
});
124127
toplevel.add_session(session);
125128
}
126-
ImageSourceData::Destroyed => unreachable!(),
129+
ImageCaptureSourceData::Destroyed => unreachable!(),
127130
}
128131
}
129132
fn new_cursor_session(&mut self, session: CursorSession) {
@@ -160,7 +163,7 @@ impl ScreencopyHandler for State {
160163
});
161164

162165
match session.source() {
163-
ImageSourceData::Output(weak) => {
166+
ImageCaptureSourceData::Output(weak) => {
164167
let Some(mut output) = weak.upgrade() else {
165168
session.stop();
166169
return;
@@ -190,7 +193,7 @@ impl ScreencopyHandler for State {
190193

191194
output.add_cursor_session(session);
192195
}
193-
ImageSourceData::Workspace(handle) => {
196+
ImageCaptureSourceData::Workspace(handle) => {
194197
let mut shell = self.common.shell.write().unwrap();
195198
let Some(workspace) = shell.workspaces.space_for_handle_mut(&handle) else {
196199
session.stop();
@@ -222,7 +225,7 @@ impl ScreencopyHandler for State {
222225

223226
workspace.add_cursor_session(session);
224227
}
225-
ImageSourceData::Toplevel(mut toplevel) => {
228+
ImageCaptureSourceData::Toplevel(mut toplevel) => {
226229
let shell = self.common.shell.read().unwrap();
227230
if let Some(element) = shell.element_for_surface(&toplevel) {
228231
if element.has_active_window(&toplevel) {
@@ -245,13 +248,13 @@ impl ScreencopyHandler for State {
245248

246249
toplevel.add_cursor_session(session);
247250
}
248-
ImageSourceData::Destroyed => unreachable!(),
251+
ImageCaptureSourceData::Destroyed => unreachable!(),
249252
}
250253
}
251254

252255
fn frame(&mut self, session: Session, frame: Frame) {
253256
match session.source() {
254-
ImageSourceData::Output(weak) => {
257+
ImageCaptureSourceData::Output(weak) => {
255258
let Some(mut output) = weak.upgrade() else {
256259
session.stop(); // will fail the frame as well
257260
return;
@@ -260,13 +263,13 @@ impl ScreencopyHandler for State {
260263
output.add_frame(session, frame);
261264
self.backend.schedule_render(&output);
262265
}
263-
ImageSourceData::Workspace(handle) => {
266+
ImageCaptureSourceData::Workspace(handle) => {
264267
render_workspace_to_buffer(self, session, frame, handle)
265268
}
266-
ImageSourceData::Toplevel(toplevel) => {
269+
ImageCaptureSourceData::Toplevel(toplevel) => {
267270
render_window_to_buffer(self, session, frame, &toplevel)
268271
}
269-
ImageSourceData::Destroyed => unreachable!(),
272+
ImageCaptureSourceData::Destroyed => unreachable!(),
270273
}
271274
}
272275

@@ -296,12 +299,12 @@ impl ScreencopyHandler for State {
296299

297300
fn session_destroyed(&mut self, session: Session) {
298301
match session.source() {
299-
ImageSourceData::Output(weak) => {
302+
ImageCaptureSourceData::Output(weak) => {
300303
if let Some(mut output) = weak.upgrade() {
301304
output.remove_session(session);
302305
}
303306
}
304-
ImageSourceData::Workspace(handle) => {
307+
ImageCaptureSourceData::Workspace(handle) => {
305308
if let Some(workspace) = self
306309
.common
307310
.shell
@@ -313,19 +316,19 @@ impl ScreencopyHandler for State {
313316
workspace.remove_session(session)
314317
}
315318
}
316-
ImageSourceData::Toplevel(mut toplevel) => toplevel.remove_session(session),
317-
ImageSourceData::Destroyed => unreachable!(),
319+
ImageCaptureSourceData::Toplevel(mut toplevel) => toplevel.remove_session(session),
320+
ImageCaptureSourceData::Destroyed => unreachable!(),
318321
}
319322
}
320323

321324
fn cursor_session_destroyed(&mut self, session: CursorSession) {
322325
match session.source() {
323-
ImageSourceData::Output(weak) => {
326+
ImageCaptureSourceData::Output(weak) => {
324327
if let Some(mut output) = weak.upgrade() {
325328
output.remove_cursor_session(session);
326329
}
327330
}
328-
ImageSourceData::Workspace(handle) => {
331+
ImageCaptureSourceData::Workspace(handle) => {
329332
if let Some(workspace) = self
330333
.common
331334
.shell
@@ -337,8 +340,10 @@ impl ScreencopyHandler for State {
337340
workspace.remove_cursor_session(session)
338341
}
339342
}
340-
ImageSourceData::Toplevel(mut toplevel) => toplevel.remove_cursor_session(session),
341-
ImageSourceData::Destroyed => unreachable!(),
343+
ImageCaptureSourceData::Toplevel(mut toplevel) => {
344+
toplevel.remove_cursor_session(session)
345+
}
346+
ImageCaptureSourceData::Destroyed => unreachable!(),
342347
}
343348
}
344349
}

0 commit comments

Comments
 (0)