mirror of
https://github.com/rust-windowing/winit.git
synced 2026-08-29 04:40:04 -04:00
Wayland, Windows, MacOS: Popup Implementation (#4543)
Implement proper decorationless popups by specifying the type of the child window with with_type() With this commit, different kind of child windows can be created - Popups: Special windows without any decoration which can be positioned relative to the parent - Window: Normal window with a parent or not The type can be specified during creation of the Window using the window_attributes and the with_type() function. As default a normal Window is used. If Popup is choosen a parent must be specified, otherwise the Popup creation fails with an Error returned by the new() function. Related issues: #403 and #4256
This commit is contained in:
@@ -13,7 +13,7 @@ use winit_core::icon::Icon;
|
||||
use winit_core::monitor::{Fullscreen, MonitorHandle as CoremMonitorHandle};
|
||||
use winit_core::window::{
|
||||
CursorGrabMode, ImeRequestError, ResizeDirection, Theme, UserAttentionType,
|
||||
Window as RootWindow, WindowAttributes, WindowButtons, WindowId, WindowLevel,
|
||||
Window as RootWindow, WindowAttributes, WindowButtons, WindowId, WindowLevel, WindowType,
|
||||
};
|
||||
|
||||
use crate::r#async::Dispatcher;
|
||||
@@ -46,6 +46,12 @@ impl Window {
|
||||
target: &ActiveEventLoop,
|
||||
attr: WindowAttributes,
|
||||
) -> Result<Self, RequestError> {
|
||||
if attr.window_type() == WindowType::Popup {
|
||||
return Err(RequestError::NotSupported(NotSupportedError::new(
|
||||
"Popups are not implemented for Web",
|
||||
)));
|
||||
}
|
||||
|
||||
let id = target.generate_id();
|
||||
|
||||
let window = target.runner.window();
|
||||
@@ -103,6 +109,10 @@ impl Window {
|
||||
}
|
||||
|
||||
impl RootWindow for Window {
|
||||
fn window_type(&self) -> WindowType {
|
||||
WindowType::Window
|
||||
}
|
||||
|
||||
fn id(&self) -> WindowId {
|
||||
self.inner.queue(|inner| inner.id)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user