tree: allow showing floating windows above fullscreen
This commit is contained in:
parent
f3179b7794
commit
0c02cb5033
17 changed files with 118 additions and 6 deletions
|
|
@ -287,6 +287,7 @@ fn start_compositor2(
|
|||
workspace_managers: Default::default(),
|
||||
color_management_enabled: Cell::new(false),
|
||||
color_manager,
|
||||
float_above_fullscreen: Cell::new(false),
|
||||
});
|
||||
state.tracker.register(ClientId::from_raw(0));
|
||||
create_dummy_output(&state);
|
||||
|
|
|
|||
|
|
@ -1136,6 +1136,21 @@ impl ConfigProxyHandler {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn handle_set_float_above_fullscreen(&self, above: bool) {
|
||||
self.state.float_above_fullscreen.set(above);
|
||||
for seat in self.state.globals.seats.lock().values() {
|
||||
seat.emulate_cursor_moved();
|
||||
seat.trigger_tree_changed(false);
|
||||
}
|
||||
self.state.root.update_visible(&self.state);
|
||||
}
|
||||
|
||||
fn handle_get_float_above_fullscreen(&self) {
|
||||
self.respond(Response::GetFloatAboveFullscreen {
|
||||
above: self.state.float_above_fullscreen.get(),
|
||||
});
|
||||
}
|
||||
|
||||
fn handle_set_vrr_mode(
|
||||
&self,
|
||||
connector: Option<Connector>,
|
||||
|
|
@ -2039,6 +2054,10 @@ impl ConfigProxyHandler {
|
|||
} => self
|
||||
.handle_connector_set_brightness(connector, brightness)
|
||||
.wrn("connector_set_brightness")?,
|
||||
ClientMessage::SetFloatAboveFullscreen { above } => {
|
||||
self.handle_set_float_above_fullscreen(above)
|
||||
}
|
||||
ClientMessage::GetFloatAboveFullscreen => self.handle_get_float_above_fullscreen(),
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1093,6 +1093,10 @@ impl WlSeatGlobal {
|
|||
self.apply_changes();
|
||||
}
|
||||
|
||||
pub fn emulate_cursor_moved(&self) {
|
||||
self.changes.or_assign(CHANGE_CURSOR_MOVED);
|
||||
}
|
||||
|
||||
pub fn clear_shortcuts(&self) {
|
||||
self.shortcuts.borrow_mut().clear();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -236,6 +236,7 @@ pub struct State {
|
|||
pub workspace_managers: WorkspaceManagerState,
|
||||
pub color_management_enabled: Cell<bool>,
|
||||
pub color_manager: Rc<ColorManager>,
|
||||
pub float_above_fullscreen: Cell<bool>,
|
||||
}
|
||||
|
||||
// impl Drop for State {
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ impl FloatNode {
|
|||
let floater = Rc::new(FloatNode {
|
||||
id: state.node_ids.next(),
|
||||
state: state.clone(),
|
||||
visible: Cell::new(ws.container_visible()),
|
||||
visible: Cell::new(ws.float_visible()),
|
||||
position: Cell::new(position),
|
||||
display_link: RefCell::new(None),
|
||||
workspace_link: Cell::new(None),
|
||||
|
|
@ -408,7 +408,7 @@ impl FloatNode {
|
|||
self.workspace_link
|
||||
.set(Some(ws.stacked.add_last(self.clone())));
|
||||
self.workspace.set(ws.clone());
|
||||
self.stacked_set_visible(ws.container_visible());
|
||||
self.stacked_set_visible(ws.float_visible());
|
||||
}
|
||||
|
||||
fn update_child_title(self: &Rc<Self>, title: &str) {
|
||||
|
|
|
|||
|
|
@ -165,6 +165,10 @@ impl WorkspaceNode {
|
|||
self.visible.get() && self.fullscreen.is_none()
|
||||
}
|
||||
|
||||
pub fn float_visible(&self) -> bool {
|
||||
self.visible.get() && (self.fullscreen.is_none() || self.state.float_above_fullscreen.get())
|
||||
}
|
||||
|
||||
pub fn change_extents(&self, rect: &Rect) {
|
||||
self.position.set(*rect);
|
||||
if let Some(c) = self.container.get() {
|
||||
|
|
@ -197,7 +201,7 @@ impl WorkspaceNode {
|
|||
}
|
||||
for stacked in self.stacked.iter() {
|
||||
if stacked.stacked_needs_set_visible() {
|
||||
stacked.stacked_set_visible(self.container_visible());
|
||||
stacked.stacked_set_visible(self.float_visible());
|
||||
}
|
||||
}
|
||||
self.seat_state.set_visible(self, visible);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue