diff options
author | 2024-01-12 22:57:52 -0800 | |
---|---|---|
committer | 2024-02-13 04:45:07 +0100 | |
commit | f93a6d740ac4cb09720bcb502b04e9a3d993bdba (patch) | |
tree | 5432c487cd412bcac1c96b228ae167b040132047 /winit | |
parent | 7a1e10503697b68a4d6206551c34702ec8a69b79 (diff) | |
download | iced-f93a6d740ac4cb09720bcb502b04e9a3d993bdba.tar.gz iced-f93a6d740ac4cb09720bcb502b04e9a3d993bdba.tar.bz2 iced-f93a6d740ac4cb09720bcb502b04e9a3d993bdba.zip |
Add `show_window_menu` action
Winit currently supports this only on Windows and Wayland.
This requests that a context menu is shown at the cursor position,
like the menu normally triggered by right clicking the title bar. This
is important for implementing client side decorations with Iced widgets.
Diffstat (limited to '')
-rw-r--r-- | winit/src/application.rs | 8 | ||||
-rw-r--r-- | winit/src/multi_window.rs | 15 |
2 files changed, 23 insertions, 0 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs index ad461738..c2bd11e2 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -807,6 +807,14 @@ pub fn run_command<A, C, E>( window::Action::ChangeLevel(_id, level) => { window.set_window_level(conversion::window_level(level)); } + window::Action::ShowWindowMenu(_id) => { + if let mouse::Cursor::Available(point) = state.cursor() { + window.show_window_menu(winit::dpi::LogicalPosition { + x: point.x, + y: point.y, + }); + } + } window::Action::FetchId(_id, tag) => { proxy .send_event(tag(window.id().into())) diff --git a/winit/src/multi_window.rs b/winit/src/multi_window.rs index 72cd939f..64ecb362 100644 --- a/winit/src/multi_window.rs +++ b/winit/src/multi_window.rs @@ -6,6 +6,7 @@ pub use state::State; use crate::conversion; use crate::core; +use crate::core::mouse; use crate::core::renderer; use crate::core::widget::operation; use crate::core::window; @@ -1058,6 +1059,20 @@ fn run_command<A, C, E>( .set_window_level(conversion::window_level(level)); } } + window::Action::ShowWindowMenu(id) => { + if let Some(window) = window_manager.get_mut(id) { + if let mouse::Cursor::Available(point) = + window.state.cursor() + { + window.raw.show_window_menu( + winit::dpi::LogicalPosition { + x: point.x, + y: point.y, + }, + ); + } + } + } window::Action::FetchId(id, tag) => { if let Some(window) = window_manager.get_mut(id) { proxy |