Skip to content

Commit

Permalink
feat(header_bar): Show window menu on right click
Browse files Browse the repository at this point in the history
With this, apps like cosmic-term require no changes to show the
compositor window menu when the header is right clicked.
  • Loading branch information
ids1024 authored Feb 13, 2024
1 parent 6adc037 commit cc8033d
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 1 deletion.
5 changes: 5 additions & 0 deletions src/app/cosmic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ pub enum Message {
SurfaceClosed(window::Id),
/// Activate the application
Activate(String),
ShowWindowMenu,
}

#[derive(Default)]
Expand Down Expand Up @@ -412,6 +413,10 @@ impl<T: Application> Cosmic<T> {
return self.app.update(msg);
}
}
Message::ShowWindowMenu => {
#[cfg(not(feature = "wayland"))]
return window::show_window_menu(window::Id::MAIN);
}
}

iced::Command::none()
Expand Down
3 changes: 2 additions & 1 deletion src/app/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -661,7 +661,8 @@ impl<App: Application> ApplicationExt for App {
.window_id(window::Id::MAIN)
.title(&core.window.header_title)
.on_drag(Message::Cosmic(cosmic::Message::Drag))
.on_close(Message::Cosmic(cosmic::Message::Close));
.on_close(Message::Cosmic(cosmic::Message::Close))
.on_right_click(Message::Cosmic(cosmic::Message::ShowWindowMenu));

if self.nav_model().is_some() {
let toggle = crate::widget::nav_bar_toggle()
Expand Down
9 changes: 9 additions & 0 deletions src/widget/header_bar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ pub fn header_bar<'a, Message>() -> HeaderBar<'a, Message> {
on_drag: None,
on_maximize: None,
on_minimize: None,
on_right_click: None,
start: Vec::new(),
center: Vec::new(),
end: Vec::new(),
Expand Down Expand Up @@ -45,6 +46,10 @@ pub struct HeaderBar<'a, Message> {
#[setters(strip_option)]
on_minimize: Option<Message>,

/// A message emitted when the header is right clicked.
#[setters(strip_option)]
on_right_click: Option<Message>,

/// The window id for the headerbar.
#[setters(strip_option)]
window_id: Option<iced::window::Id>,
Expand Down Expand Up @@ -337,6 +342,10 @@ impl<'a, Message: Clone + 'static> HeaderBar<'a, Message> {
widget = widget.on_release(message);
}

if let Some(message) = self.on_right_click.clone() {
widget = widget.on_right_press(message);
}

widget.into()
}

Expand Down

0 comments on commit cc8033d

Please sign in to comment.