shell: send refresh/output_enter to new OR windows
This commit is contained in:
parent
ae42c5ede9
commit
f8ca797ec5
1 changed files with 12 additions and 7 deletions
|
|
@ -4,7 +4,9 @@ use std::{cell::RefCell, collections::HashMap};
|
||||||
use cosmic_protocols::workspace::v1::server::zcosmic_workspace_handle_v1::State as WState;
|
use cosmic_protocols::workspace::v1::server::zcosmic_workspace_handle_v1::State as WState;
|
||||||
use smithay::{
|
use smithay::{
|
||||||
backend::renderer::element::Id,
|
backend::renderer::element::Id,
|
||||||
desktop::{layer_map_for_output, LayerSurface, PopupManager, WindowSurfaceType},
|
desktop::{
|
||||||
|
layer_map_for_output, space::SpaceElement, LayerSurface, PopupManager, WindowSurfaceType,
|
||||||
|
},
|
||||||
input::{
|
input::{
|
||||||
pointer::{Focus, GrabStartData as PointerGrabStartData},
|
pointer::{Focus, GrabStartData as PointerGrabStartData},
|
||||||
Seat,
|
Seat,
|
||||||
|
|
@ -996,6 +998,9 @@ impl Shell {
|
||||||
|
|
||||||
self.override_redirect_windows
|
self.override_redirect_windows
|
||||||
.retain(|or| or.surface.alive());
|
.retain(|or| or.surface.alive());
|
||||||
|
self.override_redirect_windows
|
||||||
|
.iter()
|
||||||
|
.for_each(|or| or.surface.refresh());
|
||||||
|
|
||||||
self.toplevel_info_state
|
self.toplevel_info_state
|
||||||
.refresh(Some(&self.workspace_state));
|
.refresh(Some(&self.workspace_state));
|
||||||
|
|
@ -1063,16 +1068,16 @@ impl Shell {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn map_override_redirect(state: &mut State, window: X11Surface) {
|
pub fn map_override_redirect(state: &mut State, window: X11Surface) {
|
||||||
let seat = state.common.last_active_seat().clone();
|
let geo = window.geometry();
|
||||||
let mut pos = window.geometry().loc;
|
for (output, overlap) in state
|
||||||
let output = state
|
|
||||||
.common
|
.common
|
||||||
.shell
|
.shell
|
||||||
.outputs()
|
.outputs()
|
||||||
.find(|o| o.geometry().contains(pos))
|
|
||||||
.cloned()
|
.cloned()
|
||||||
.unwrap_or_else(|| seat.active_output());
|
.filter_map(|o| o.geometry().intersection(geo).map(|overlap| (o, overlap)))
|
||||||
pos -= output.geometry().loc;
|
{
|
||||||
|
window.output_enter(&output, overlap);
|
||||||
|
}
|
||||||
|
|
||||||
state
|
state
|
||||||
.common
|
.common
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue