Handle hiding the titlebar for full screen mode
This commit is contained in:
parent
d2ddc70aa7
commit
207529a185
2 changed files with 24 additions and 9 deletions
30
src/deco.rs
30
src/deco.rs
|
|
@ -28,6 +28,7 @@ struct DecoParams {
|
|||
has_geometry: bool,
|
||||
prefers_ssd: bool,
|
||||
is_active: bool,
|
||||
is_fullscreen: bool,
|
||||
bounds: Bounds,
|
||||
restricted_edges: Edges<bool>,
|
||||
}
|
||||
|
|
@ -133,9 +134,9 @@ impl DecoSurface {
|
|||
}
|
||||
|
||||
impl Deco {
|
||||
fn top_size(&self) -> i32 {
|
||||
fn last_top_size(&self) -> i32 {
|
||||
let params = self.last_params.borrow();
|
||||
if params.prefers_ssd {
|
||||
if params.prefers_ssd && !params.is_fullscreen {
|
||||
self.border_size + 24
|
||||
} else {
|
||||
self.border_size
|
||||
|
|
@ -208,8 +209,14 @@ impl Deco {
|
|||
height,
|
||||
};
|
||||
let width = width + self.border_size * 2;
|
||||
let height = height + self.top_size() + self.border_size;
|
||||
(x - self.border_size, y - self.top_size(), width, height)
|
||||
let height = height + self.last_top_size() + self.border_size;
|
||||
// XXX: it's not good that we use the last state here!! Gotta buffer the geometry until commit and send on pre-commit?
|
||||
(
|
||||
x - self.border_size,
|
||||
y - self.last_top_size(),
|
||||
width,
|
||||
height,
|
||||
)
|
||||
}
|
||||
|
||||
pub fn set_restricted_edges(&self, edges: Edges<bool>) {
|
||||
|
|
@ -222,6 +229,11 @@ impl Deco {
|
|||
params.is_active = is_active;
|
||||
}
|
||||
|
||||
pub fn set_fullscreen(&self, is_fullscreen: bool) {
|
||||
let mut params = self.next_params.borrow_mut();
|
||||
params.is_fullscreen = is_fullscreen;
|
||||
}
|
||||
|
||||
pub fn set_prefers_ssd(&self, prefers_ssd: bool) {
|
||||
let mut params = self.next_params.borrow_mut();
|
||||
params.prefers_ssd = prefers_ssd;
|
||||
|
|
@ -234,19 +246,19 @@ impl Deco {
|
|||
pub fn transform_configure(&self, width: i32, height: i32) -> (i32, i32) {
|
||||
(
|
||||
width - self.border_size * 2,
|
||||
height - self.top_size() - self.border_size,
|
||||
height - self.last_top_size() - self.border_size,
|
||||
)
|
||||
}
|
||||
|
||||
pub fn transform_size(&self, width: i32, height: i32) -> (i32, i32) {
|
||||
(
|
||||
width + self.border_size * 2,
|
||||
height + self.top_size() + self.border_size,
|
||||
height + self.last_top_size() + self.border_size,
|
||||
)
|
||||
}
|
||||
|
||||
pub fn transform_anchor(&self, x: i32, y: i32) -> (i32, i32) {
|
||||
(x + self.border_size, y + self.top_size())
|
||||
(x + self.border_size, y + self.last_top_size())
|
||||
}
|
||||
|
||||
fn draw(&self) -> eyre::Result<()> {
|
||||
|
|
@ -286,13 +298,13 @@ impl Deco {
|
|||
self.wl_surface.send_damage_buffer(0, 0, width, height);
|
||||
let input_region = self.globals.wl_compositor.new_send_create_region();
|
||||
input_region.set_forward_to_client(false);
|
||||
input_region.send_add(0, 0, width, self.top_size());
|
||||
input_region.send_add(0, 0, width, self.last_top_size());
|
||||
input_region.send_add(0, 0, self.border_size, height);
|
||||
input_region.send_add(width - self.border_size, 0, self.border_size, height);
|
||||
input_region.send_add(0, height - self.border_size, width, self.border_size);
|
||||
self.wl_surface.send_set_input_region(Some(&input_region));
|
||||
self.subsurface
|
||||
.send_set_position(bounds.x - self.border_size, bounds.y - self.top_size());
|
||||
.send_set_position(bounds.x - self.border_size, bounds.y - self.last_top_size());
|
||||
self.wl_surface.send_commit();
|
||||
// let _ = self.globals.wl_display.new_send_sync();
|
||||
Ok(())
|
||||
|
|
|
|||
|
|
@ -250,6 +250,7 @@ impl ClientXdgToplevel {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq)]
|
||||
enum ToplevelState {
|
||||
Normal,
|
||||
Maximixed,
|
||||
|
|
@ -355,6 +356,8 @@ impl XdgToplevelHandler for ClientXdgToplevel {
|
|||
};
|
||||
|
||||
self.deco.set_active(activated);
|
||||
self.deco
|
||||
.set_fullscreen(top_state == ToplevelState::Fullscreen);
|
||||
self.deco.set_restricted_edges(restricted_edges);
|
||||
let (width, height) = self.deco.transform_configure(width, height);
|
||||
let (_prefix, states, _suffix) = unsafe { outer_state.align_to::<u8>() };
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue