mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-22 02:01:55 +07:00
add WindowUrgencyChanged ipc event
This commit is contained in:
committed by
Ivan Molodetskikh
parent
9d3d7cb0e9
commit
a8259b4cea
@@ -1129,6 +1129,8 @@ pub struct Window {
|
|||||||
///
|
///
|
||||||
/// If the window isn't floating then it is in the tiling layout.
|
/// If the window isn't floating then it is in the tiling layout.
|
||||||
pub is_floating: bool,
|
pub is_floating: bool,
|
||||||
|
/// Whether this window requests your attention.
|
||||||
|
pub is_urgent: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Output configuration change result.
|
/// Output configuration change result.
|
||||||
@@ -1298,6 +1300,13 @@ pub enum Event {
|
|||||||
/// Id of the newly focused window, or `None` if no window is now focused.
|
/// Id of the newly focused window, or `None` if no window is now focused.
|
||||||
id: Option<u64>,
|
id: Option<u64>,
|
||||||
},
|
},
|
||||||
|
/// Window urgency changed.
|
||||||
|
WindowUrgencyChanged {
|
||||||
|
/// Id of the window.
|
||||||
|
id: u64,
|
||||||
|
/// The new urgency state of the window.
|
||||||
|
urgent: bool,
|
||||||
|
},
|
||||||
/// The configured keyboard layouts have changed.
|
/// The configured keyboard layouts have changed.
|
||||||
KeyboardLayoutsChanged {
|
KeyboardLayoutsChanged {
|
||||||
/// The new keyboard layout configuration.
|
/// The new keyboard layout configuration.
|
||||||
|
|||||||
@@ -181,6 +181,14 @@ impl EventStreamStatePart for WindowsState {
|
|||||||
win.is_focused = Some(win.id) == id;
|
win.is_focused = Some(win.id) == id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Event::WindowUrgencyChanged { id, urgent } => {
|
||||||
|
for win in self.windows.values_mut() {
|
||||||
|
if win.id == id {
|
||||||
|
win.is_urgent = urgent;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
event => return Some(event),
|
event => return Some(event),
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
|
|||||||
@@ -433,6 +433,9 @@ pub fn handle_msg(msg: Msg, json: bool) -> anyhow::Result<()> {
|
|||||||
Event::WindowFocusChanged { id } => {
|
Event::WindowFocusChanged { id } => {
|
||||||
println!("Window focus changed: {id:?}");
|
println!("Window focus changed: {id:?}");
|
||||||
}
|
}
|
||||||
|
Event::WindowUrgencyChanged { id, urgent } => {
|
||||||
|
println!("Window {id}: urgency changed to {urgent}");
|
||||||
|
}
|
||||||
Event::KeyboardLayoutsChanged { keyboard_layouts } => {
|
Event::KeyboardLayoutsChanged { keyboard_layouts } => {
|
||||||
println!("Keyboard layouts changed: {keyboard_layouts:?}");
|
println!("Keyboard layouts changed: {keyboard_layouts:?}");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -476,6 +476,7 @@ fn make_ipc_window(mapped: &Mapped, workspace_id: Option<WorkspaceId>) -> niri_i
|
|||||||
workspace_id: workspace_id.map(|id| id.get()),
|
workspace_id: workspace_id.map(|id| id.get()),
|
||||||
is_focused: mapped.is_focused(),
|
is_focused: mapped.is_focused(),
|
||||||
is_floating: mapped.is_floating(),
|
is_floating: mapped.is_floating(),
|
||||||
|
is_urgent: mapped.is_urgent(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -680,6 +681,11 @@ impl State {
|
|||||||
if mapped.is_focused() && !ipc_win.is_focused {
|
if mapped.is_focused() && !ipc_win.is_focused {
|
||||||
events.push(Event::WindowFocusChanged { id: Some(id) });
|
events.push(Event::WindowFocusChanged { id: Some(id) });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let urgent = mapped.is_urgent();
|
||||||
|
if urgent != ipc_win.is_urgent {
|
||||||
|
events.push(Event::WindowUrgencyChanged { id, urgent })
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Check for closed windows.
|
// Check for closed windows.
|
||||||
|
|||||||
Reference in New Issue
Block a user