autocommit 2022-04-08 00:04:55 CEST
This commit is contained in:
parent
26f8c1aeb6
commit
0bd9a70e69
10 changed files with 35 additions and 12 deletions
|
|
@ -160,6 +160,7 @@ fn main_(forker: Rc<ForkerProxy>, logger: Arc<Logger>, _args: &RunArgs) -> Resul
|
||||||
seat_state: Default::default(),
|
seat_state: Default::default(),
|
||||||
name: "dummy".to_string(),
|
name: "dummy".to_string(),
|
||||||
output_link: Default::default(),
|
output_link: Default::default(),
|
||||||
|
visible: Cell::new(false),
|
||||||
});
|
});
|
||||||
dummy_workspace.output_link.set(Some(
|
dummy_workspace.output_link.set(Some(
|
||||||
dummy_output.workspaces.add_last(dummy_workspace.clone()),
|
dummy_output.workspaces.add_last(dummy_workspace.clone()),
|
||||||
|
|
|
||||||
|
|
@ -452,9 +452,8 @@ impl WlSeatGlobal {
|
||||||
impl WlSeatGlobal {
|
impl WlSeatGlobal {
|
||||||
pub fn enter_toplevel(self: &Rc<Self>, n: Rc<dyn ToplevelNode>) {
|
pub fn enter_toplevel(self: &Rc<Self>, n: Rc<dyn ToplevelNode>) {
|
||||||
if n.accepts_keyboard_focus() {
|
if n.accepts_keyboard_focus() {
|
||||||
log::info!("does not accept input focus");
|
self.focus_toplevel(n);
|
||||||
}
|
}
|
||||||
self.focus_toplevel(n);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn enter_popup(self: &Rc<Self>, _n: &Rc<XdgPopup>) {
|
pub fn enter_popup(self: &Rc<Self>, _n: &Rc<XdgPopup>) {
|
||||||
|
|
|
||||||
|
|
@ -253,7 +253,7 @@ impl WlSurface {
|
||||||
|
|
||||||
pub fn accepts_kb_focus(&self) -> bool {
|
pub fn accepts_kb_focus(&self) -> bool {
|
||||||
match self.toplevel.get() {
|
match self.toplevel.get() {
|
||||||
Some(tl) => true,
|
Some(tl) => tl.accepts_keyboard_focus(),
|
||||||
_ => self.ext.get().accepts_kb_focus(),
|
_ => self.ext.get().accepts_kb_focus(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
use std::ops::Not;
|
||||||
use {
|
use {
|
||||||
crate::{
|
crate::{
|
||||||
client::Client,
|
client::Client,
|
||||||
|
|
@ -448,7 +449,7 @@ impl ToplevelNode for Xwindow {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn accepts_keyboard_focus(&self) -> bool {
|
fn accepts_keyboard_focus(&self) -> bool {
|
||||||
self.data.info.input_model.get() != XInputModel::None
|
self.data.info.never_focus.get().not() && self.data.info.input_model.get() != XInputModel::None
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_surface(&self) -> Rc<WlSurface> {
|
fn default_surface(&self) -> Rc<WlSurface> {
|
||||||
|
|
|
||||||
|
|
@ -322,6 +322,8 @@ xkb_keymap {
|
||||||
key <94> { [ equal , asterisk ] };
|
key <94> { [ equal , asterisk ] };
|
||||||
key <124> { [ at , asciicircum ] };
|
key <124> { [ at , asciicircum ] };
|
||||||
key <92> { [ numbersign , grave ] };
|
key <92> { [ numbersign , grave ] };
|
||||||
|
|
||||||
|
modifier_map Mod1 { Alt_L, Alt_R };
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -69,22 +69,32 @@ impl Renderer<'_> {
|
||||||
if let Some(ws) = output.workspace.get() {
|
if let Some(ws) = output.workspace.get() {
|
||||||
self.render_workspace(&ws, x, y + th);
|
self.render_workspace(&ws, x, y + th);
|
||||||
}
|
}
|
||||||
render_layer!(output.layers[2]);
|
for stacked in self.state.root.stacked.iter() {
|
||||||
render_layer!(output.layers[3]);
|
if let Some(ws) = stacked.get_workspace() {
|
||||||
|
if ws.visible.get() {
|
||||||
|
let pos = stacked.absolute_position();
|
||||||
|
if pos.intersects(&opos) {
|
||||||
|
let (x, y) = opos.translate(pos.x1(), pos.y1());
|
||||||
|
stacked.render(self, x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
for stacked in self.state.root.xstacked.iter() {
|
for stacked in self.state.root.xstacked.iter() {
|
||||||
let pos = stacked.absolute_position();
|
let pos = stacked.absolute_position();
|
||||||
stacked.render(self, x + pos.x1(), y + pos.y1());
|
if pos.intersects(&opos) {
|
||||||
|
let (x, y) = opos.translate(pos.x1(), pos.y1());
|
||||||
|
stacked.render(self, x, y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
render_layer!(output.layers[2]);
|
||||||
|
render_layer!(output.layers[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn render_workspace(&mut self, workspace: &WorkspaceNode, x: i32, y: i32) {
|
pub fn render_workspace(&mut self, workspace: &WorkspaceNode, x: i32, y: i32) {
|
||||||
if let Some(node) = workspace.container.get() {
|
if let Some(node) = workspace.container.get() {
|
||||||
self.render_container(&node, x, y)
|
self.render_container(&node, x, y)
|
||||||
}
|
}
|
||||||
for stacked in workspace.stacked.iter() {
|
|
||||||
let pos = stacked.absolute_position();
|
|
||||||
stacked.render(self, pos.x1(), pos.y1());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn x_to_f(&self, x: i32) -> f32 {
|
fn x_to_f(&self, x: i32) -> f32 {
|
||||||
|
|
|
||||||
|
|
@ -248,6 +248,7 @@ impl State {
|
||||||
seat_state: Default::default(),
|
seat_state: Default::default(),
|
||||||
name: name.to_string(),
|
name: name.to_string(),
|
||||||
output_link: Cell::new(None),
|
output_link: Cell::new(None),
|
||||||
|
visible: Cell::new(false),
|
||||||
});
|
});
|
||||||
workspace
|
workspace
|
||||||
.output_link
|
.output_link
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
use std::cell::Cell;
|
||||||
use {
|
use {
|
||||||
crate::{
|
crate::{
|
||||||
backend::Mode,
|
backend::Mode,
|
||||||
|
|
@ -106,6 +107,7 @@ impl OutputNode {
|
||||||
seat_state: Default::default(),
|
seat_state: Default::default(),
|
||||||
name: name.clone(),
|
name: name.clone(),
|
||||||
output_link: Default::default(),
|
output_link: Default::default(),
|
||||||
|
visible: Cell::new(false),
|
||||||
});
|
});
|
||||||
self.state.workspaces.set(name, workspace.clone());
|
self.state.workspaces.set(name, workspace.clone());
|
||||||
workspace
|
workspace
|
||||||
|
|
@ -117,7 +119,12 @@ impl OutputNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn show_workspace(&self, ws: &Rc<WorkspaceNode>) {
|
pub fn show_workspace(&self, ws: &Rc<WorkspaceNode>) {
|
||||||
self.workspace.set(Some(ws.clone()));
|
ws.visible.set(true);
|
||||||
|
if let Some(old) = self.workspace.set(Some(ws.clone())) {
|
||||||
|
if old.id != ws.id {
|
||||||
|
old.visible.set(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
ws.clone().change_extents(&self.workspace_rect());
|
ws.clone().change_extents(&self.workspace_rect());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ pub struct WorkspaceNode {
|
||||||
pub seat_state: NodeSeatState,
|
pub seat_state: NodeSeatState,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub output_link: Cell<Option<LinkedNode<Rc<WorkspaceNode>>>>,
|
pub output_link: Cell<Option<LinkedNode<Rc<WorkspaceNode>>>>,
|
||||||
|
pub visible: Cell<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WorkspaceNode {
|
impl WorkspaceNode {
|
||||||
|
|
|
||||||
|
|
@ -677,6 +677,7 @@ impl Wm {
|
||||||
log::error!("Could not retrieve WM_HINTS property: {}", ErrorFmt(e));
|
log::error!("Could not retrieve WM_HINTS property: {}", ErrorFmt(e));
|
||||||
}
|
}
|
||||||
data.info.icccm_hints.input.set(true);
|
data.info.icccm_hints.input.set(true);
|
||||||
|
self.compute_input_model(data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let mut values = [0; 9];
|
let mut values = [0; 9];
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue