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,
|
has_geometry: bool,
|
||||||
prefers_ssd: bool,
|
prefers_ssd: bool,
|
||||||
is_active: bool,
|
is_active: bool,
|
||||||
|
is_fullscreen: bool,
|
||||||
bounds: Bounds,
|
bounds: Bounds,
|
||||||
restricted_edges: Edges<bool>,
|
restricted_edges: Edges<bool>,
|
||||||
}
|
}
|
||||||
|
|
@ -133,9 +134,9 @@ impl DecoSurface {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deco {
|
impl Deco {
|
||||||
fn top_size(&self) -> i32 {
|
fn last_top_size(&self) -> i32 {
|
||||||
let params = self.last_params.borrow();
|
let params = self.last_params.borrow();
|
||||||
if params.prefers_ssd {
|
if params.prefers_ssd && !params.is_fullscreen {
|
||||||
self.border_size + 24
|
self.border_size + 24
|
||||||
} else {
|
} else {
|
||||||
self.border_size
|
self.border_size
|
||||||
|
|
@ -208,8 +209,14 @@ impl Deco {
|
||||||
height,
|
height,
|
||||||
};
|
};
|
||||||
let width = width + self.border_size * 2;
|
let width = width + self.border_size * 2;
|
||||||
let height = height + self.top_size() + self.border_size;
|
let height = height + self.last_top_size() + self.border_size;
|
||||||
(x - self.border_size, y - self.top_size(), width, height)
|
// 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>) {
|
pub fn set_restricted_edges(&self, edges: Edges<bool>) {
|
||||||
|
|
@ -222,6 +229,11 @@ impl Deco {
|
||||||
params.is_active = is_active;
|
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) {
|
pub fn set_prefers_ssd(&self, prefers_ssd: bool) {
|
||||||
let mut params = self.next_params.borrow_mut();
|
let mut params = self.next_params.borrow_mut();
|
||||||
params.prefers_ssd = prefers_ssd;
|
params.prefers_ssd = prefers_ssd;
|
||||||
|
|
@ -234,19 +246,19 @@ impl Deco {
|
||||||
pub fn transform_configure(&self, width: i32, height: i32) -> (i32, i32) {
|
pub fn transform_configure(&self, width: i32, height: i32) -> (i32, i32) {
|
||||||
(
|
(
|
||||||
width - self.border_size * 2,
|
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) {
|
pub fn transform_size(&self, width: i32, height: i32) -> (i32, i32) {
|
||||||
(
|
(
|
||||||
width + self.border_size * 2,
|
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) {
|
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<()> {
|
fn draw(&self) -> eyre::Result<()> {
|
||||||
|
|
@ -286,13 +298,13 @@ impl Deco {
|
||||||
self.wl_surface.send_damage_buffer(0, 0, width, height);
|
self.wl_surface.send_damage_buffer(0, 0, width, height);
|
||||||
let input_region = self.globals.wl_compositor.new_send_create_region();
|
let input_region = self.globals.wl_compositor.new_send_create_region();
|
||||||
input_region.set_forward_to_client(false);
|
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(0, 0, self.border_size, height);
|
||||||
input_region.send_add(width - self.border_size, 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);
|
input_region.send_add(0, height - self.border_size, width, self.border_size);
|
||||||
self.wl_surface.send_set_input_region(Some(&input_region));
|
self.wl_surface.send_set_input_region(Some(&input_region));
|
||||||
self.subsurface
|
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();
|
self.wl_surface.send_commit();
|
||||||
// let _ = self.globals.wl_display.new_send_sync();
|
// let _ = self.globals.wl_display.new_send_sync();
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
||||||
|
|
@ -250,6 +250,7 @@ impl ClientXdgToplevel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(PartialEq)]
|
||||||
enum ToplevelState {
|
enum ToplevelState {
|
||||||
Normal,
|
Normal,
|
||||||
Maximixed,
|
Maximixed,
|
||||||
|
|
@ -355,6 +356,8 @@ impl XdgToplevelHandler for ClientXdgToplevel {
|
||||||
};
|
};
|
||||||
|
|
||||||
self.deco.set_active(activated);
|
self.deco.set_active(activated);
|
||||||
|
self.deco
|
||||||
|
.set_fullscreen(top_state == ToplevelState::Fullscreen);
|
||||||
self.deco.set_restricted_edges(restricted_edges);
|
self.deco.set_restricted_edges(restricted_edges);
|
||||||
let (width, height) = self.deco.transform_configure(width, height);
|
let (width, height) = self.deco.transform_configure(width, height);
|
||||||
let (_prefix, states, _suffix) = unsafe { outer_state.align_to::<u8>() };
|
let (_prefix, states, _suffix) = unsafe { outer_state.align_to::<u8>() };
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue