image-copy: Use abstraction that's now provided by Smithay
This doesn't change much, since the Smithay implementation is based on the `cosmic-comp` version, but made more generic. We provide our own implementation for our workspace capture protocol, but otherwise Smithay handles the boilerplate now. This should not cause any change in behavior.
This commit is contained in:
parent
0f7e53b600
commit
cac7a5aca6
16 changed files with 285 additions and 1536 deletions
|
|
@ -1,4 +1,59 @@
|
|||
use crate::state::State;
|
||||
use crate::wayland::protocols::image_capture_source::delegate_image_capture_source;
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
delegate_image_capture_source!(State);
|
||||
use crate::{
|
||||
state::State,
|
||||
wayland::protocols::{
|
||||
image_capture_source::{ImageCaptureSourceKind, delegate_cosmic_image_capture_source},
|
||||
toplevel_info::window_from_ext,
|
||||
},
|
||||
};
|
||||
use smithay::{
|
||||
output::Output,
|
||||
wayland::{
|
||||
foreign_toplevel_list::ForeignToplevelHandle,
|
||||
image_capture_source::{
|
||||
ImageCaptureSource, ImageCaptureSourceHandler, OutputCaptureSourceHandler,
|
||||
OutputCaptureSourceState, ToplevelCaptureSourceHandler, ToplevelCaptureSourceState,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
impl ImageCaptureSourceHandler for State {
|
||||
fn source_destroyed(&mut self, _source: ImageCaptureSource) {}
|
||||
}
|
||||
|
||||
impl OutputCaptureSourceHandler for State {
|
||||
fn output_capture_source_state(&mut self) -> &mut OutputCaptureSourceState {
|
||||
&mut self.common.output_capture_source_state
|
||||
}
|
||||
|
||||
fn output_source_created(&mut self, source: ImageCaptureSource, output: &Output) {
|
||||
source
|
||||
.user_data()
|
||||
.insert_if_missing(|| ImageCaptureSourceKind::Output(output.downgrade()));
|
||||
}
|
||||
}
|
||||
|
||||
impl ToplevelCaptureSourceHandler for State {
|
||||
fn toplevel_capture_source_state(&mut self) -> &mut ToplevelCaptureSourceState {
|
||||
&mut self.common.toplevel_capture_source_state
|
||||
}
|
||||
|
||||
fn toplevel_source_created(
|
||||
&mut self,
|
||||
source: ImageCaptureSource,
|
||||
toplevel: &ForeignToplevelHandle,
|
||||
) {
|
||||
let data = match window_from_ext(self, toplevel) {
|
||||
Some(toplevel) => ImageCaptureSourceKind::Toplevel(toplevel.clone()),
|
||||
None => ImageCaptureSourceKind::Destroyed,
|
||||
};
|
||||
source.user_data().insert_if_missing(|| data);
|
||||
}
|
||||
}
|
||||
|
||||
smithay::delegate_image_capture_source!(State);
|
||||
smithay::delegate_output_capture_source!(State);
|
||||
smithay::delegate_toplevel_capture_source!(State);
|
||||
|
||||
delegate_cosmic_image_capture_source!(State);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue