summaryrefslogtreecommitdiff
path: root/src/clients/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/clients/mod.rs')
-rw-r--r--src/clients/mod.rs11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/clients/mod.rs b/src/clients/mod.rs
index 1abab20..a59240d 100644
--- a/src/clients/mod.rs
+++ b/src/clients/mod.rs
@@ -3,6 +3,7 @@
use std::cmp::{min, Ordering};
use crate::{
+ buttons,
config::BORDER_WIDTH,
conn_info::Connection,
debug,
@@ -87,7 +88,7 @@ impl WM<'_> {
/// Removing destroyed windows from the client list and rearrange.
pub(crate) fn handle_destroy_notify(&mut self, e: &DestroyNotifyEvent) {
- self.clients.unmanage(&self.conn, e.window());
+ self.clients.unmanage_destroyed(&self.conn, e.window());
}
/// Map a window, starting to manage it if needed.
@@ -242,7 +243,7 @@ impl ClientState {
| EventMask::STRUCTURE_NOTIFY,
);
- // TODO: grabbuttons
+ buttons::grab(conn, c.window(), false);
// Add to net_client_list
conn.send_request(&ChangeProperty {
@@ -258,8 +259,8 @@ impl ClientState {
self.rearrange_monitor(conn, mon);
}
- /// Stop managing the given window
- pub fn unmanage(&mut self, conn: &Connection<'_>, window: Window) {
+ /// Stop managing the given destroyed window
+ pub fn unmanage_destroyed(&mut self, conn: &Connection<'_>, window: Window) {
let Some((mon, i)) = self.find_client_pos(window) else {
return;
};
@@ -275,6 +276,7 @@ impl ClientState {
if let Some(new) = self.set_focused(mon, i) {
new.set_border(conn, conn.colours.border_focused());
new.sync_hints(conn, true);
+ buttons::grab(conn, new.window(), true);
if !new.never_focus() {
conn.send_request(&SetInputFocus {
revert_to: InputFocus::PointerRoot,
@@ -307,6 +309,7 @@ impl ClientState {
pub fn unfocus(&mut self, conn: &Connection<'_>) {
if let Some(old) = self.focused_mut() {
old.set_border(conn, conn.colours.border_normal());
+ buttons::grab(conn, old.window(), false);
}
}