xwayland: Fix offset x11 geometry after configure request
This commit is contained in:
parent
06c12040f9
commit
62afa4cf61
1 changed files with 31 additions and 20 deletions
|
|
@ -366,36 +366,47 @@ impl XwmHandler for State {
|
||||||
_reorder: Option<Reorder>,
|
_reorder: Option<Reorder>,
|
||||||
) {
|
) {
|
||||||
// We only allow floating X11 windows to resize themselves. Nothing else
|
// We only allow floating X11 windows to resize themselves. Nothing else
|
||||||
let mut current_geo = window.geometry();
|
|
||||||
let shell = self.common.shell.read().unwrap();
|
let shell = self.common.shell.read().unwrap();
|
||||||
|
|
||||||
if let Some(mapped) = shell.element_for_surface(&window) {
|
if let Some(mapped) = shell.element_for_surface(&window) {
|
||||||
let is_floating = shell
|
let current_geo = if let Some(workspace) = shell.space_for(mapped) {
|
||||||
|
workspace.is_floating(mapped).then_some(
|
||||||
|
workspace
|
||||||
|
.element_geometry(mapped)
|
||||||
|
.unwrap()
|
||||||
|
.to_global(workspace.output()),
|
||||||
|
)
|
||||||
|
} else if let Some((output, set)) = shell
|
||||||
.workspaces
|
.workspaces
|
||||||
.sets
|
.sets
|
||||||
.values()
|
.iter()
|
||||||
.any(|set| set.sticky_layer.mapped().any(|m| m == mapped))
|
.find(|(_, set)| set.sticky_layer.mapped().any(|m| m == mapped))
|
||||||
|| shell
|
{
|
||||||
.space_for(&mapped)
|
Some(
|
||||||
.filter(|space| space.is_floating(mapped))
|
set.sticky_layer
|
||||||
.is_some();
|
.element_geometry(mapped)
|
||||||
|
.unwrap()
|
||||||
if is_floating {
|
.to_global(&output),
|
||||||
let ssd_height = if window.is_decorated() { 0 } else { SSD_HEIGHT };
|
|
||||||
mapped.set_geometry(
|
|
||||||
Rectangle::from_loc_and_size(
|
|
||||||
current_geo.loc,
|
|
||||||
(
|
|
||||||
w.map(|w| w as i32).unwrap_or(current_geo.size.w),
|
|
||||||
h.map(|h| h as i32).unwrap_or(current_geo.size.h) + ssd_height,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.as_global(),
|
|
||||||
)
|
)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Some(current_geo) = current_geo {
|
||||||
|
let ssd_height = if window.is_decorated() { 0 } else { SSD_HEIGHT };
|
||||||
|
mapped.set_geometry(Rectangle::from_loc_and_size(
|
||||||
|
current_geo.loc,
|
||||||
|
(
|
||||||
|
w.map(|w| w as i32).unwrap_or(current_geo.size.w),
|
||||||
|
h.map(|h| h as i32 + ssd_height)
|
||||||
|
.unwrap_or(current_geo.size.h),
|
||||||
|
),
|
||||||
|
))
|
||||||
} else {
|
} else {
|
||||||
let _ = window.configure(None); // ack and force old state
|
let _ = window.configure(None); // ack and force old state
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
let mut current_geo = window.geometry();
|
||||||
if let Some(x) = x {
|
if let Some(x) = x {
|
||||||
current_geo.loc.x = x;
|
current_geo.loc.x = x;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue