mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-23 22:01:31 +11:00
On Windows, add option to customize window class name (#2978)
This commit is contained in:
parent
e33d2bee6c
commit
75173118b0
|
@ -8,6 +8,7 @@ And please only add new entries to the top of this list, right below the `# Unre
|
||||||
|
|
||||||
# Unreleased
|
# Unreleased
|
||||||
|
|
||||||
|
- On Windows, added `WindowBuilderExtWindows::with_class_name` to customize the internal class name.
|
||||||
- On iOS, always wake the event loop when transitioning from `ControlFlow::Poll` to `ControlFlow::Poll`.
|
- On iOS, always wake the event loop when transitioning from `ControlFlow::Poll` to `ControlFlow::Poll`.
|
||||||
- **Breaking:** `ActivationTokenDone` event which could be requested with the new `startup_notify` module, see its docs for more.
|
- **Breaking:** `ActivationTokenDone` event which could be requested with the new `startup_notify` module, see its docs for more.
|
||||||
- On Wayland, make double clicking and moving the CSD frame more reliable.
|
- On Wayland, make double clicking and moving the CSD frame more reliable.
|
||||||
|
|
|
@ -119,6 +119,7 @@ If your PR makes notable changes to Winit's features, please update this section
|
||||||
|
|
||||||
## Platform
|
## Platform
|
||||||
### Windows
|
### Windows
|
||||||
|
* Setting the name of the internal window class
|
||||||
* Setting the taskbar icon
|
* Setting the taskbar icon
|
||||||
* Setting the parent window
|
* Setting the parent window
|
||||||
* Setting a menu bar
|
* Setting a menu bar
|
||||||
|
|
|
@ -223,6 +223,9 @@ pub trait WindowBuilderExtWindows {
|
||||||
/// Whether show or hide the window icon in the taskbar.
|
/// Whether show or hide the window icon in the taskbar.
|
||||||
fn with_skip_taskbar(self, skip: bool) -> WindowBuilder;
|
fn with_skip_taskbar(self, skip: bool) -> WindowBuilder;
|
||||||
|
|
||||||
|
/// Customize the window class name.
|
||||||
|
fn with_class_name<S: Into<String>>(self, class_name: S) -> WindowBuilder;
|
||||||
|
|
||||||
/// Shows or hides the background drop shadow for undecorated windows.
|
/// Shows or hides the background drop shadow for undecorated windows.
|
||||||
///
|
///
|
||||||
/// The shadow is hidden by default.
|
/// The shadow is hidden by default.
|
||||||
|
@ -267,6 +270,12 @@ impl WindowBuilderExtWindows for WindowBuilder {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn with_class_name<S: Into<String>>(mut self, class_name: S) -> WindowBuilder {
|
||||||
|
self.platform_specific.class_name = class_name.into();
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn with_undecorated_shadow(mut self, shadow: bool) -> WindowBuilder {
|
fn with_undecorated_shadow(mut self, shadow: bool) -> WindowBuilder {
|
||||||
self.platform_specific.decoration_shadow = shadow;
|
self.platform_specific.decoration_shadow = shadow;
|
||||||
|
|
|
@ -30,6 +30,7 @@ pub struct PlatformSpecificWindowBuilderAttributes {
|
||||||
pub no_redirection_bitmap: bool,
|
pub no_redirection_bitmap: bool,
|
||||||
pub drag_and_drop: bool,
|
pub drag_and_drop: bool,
|
||||||
pub skip_taskbar: bool,
|
pub skip_taskbar: bool,
|
||||||
|
pub class_name: String,
|
||||||
pub decoration_shadow: bool,
|
pub decoration_shadow: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,6 +43,7 @@ impl Default for PlatformSpecificWindowBuilderAttributes {
|
||||||
no_redirection_bitmap: false,
|
no_redirection_bitmap: false,
|
||||||
drag_and_drop: true,
|
drag_and_drop: true,
|
||||||
skip_taskbar: false,
|
skip_taskbar: false,
|
||||||
|
class_name: "Window Class".to_string(),
|
||||||
decoration_shadow: false,
|
decoration_shadow: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1100,7 +1100,8 @@ where
|
||||||
{
|
{
|
||||||
let title = util::encode_wide(&attributes.title);
|
let title = util::encode_wide(&attributes.title);
|
||||||
|
|
||||||
let class_name = register_window_class::<T>();
|
let class_name = util::encode_wide(&pl_attribs.class_name);
|
||||||
|
register_window_class::<T>(&class_name);
|
||||||
|
|
||||||
let mut window_flags = WindowFlags::empty();
|
let mut window_flags = WindowFlags::empty();
|
||||||
window_flags.set(WindowFlags::MARKER_DECORATIONS, attributes.decorations);
|
window_flags.set(WindowFlags::MARKER_DECORATIONS, attributes.decorations);
|
||||||
|
@ -1187,9 +1188,7 @@ where
|
||||||
Ok(initdata.window.unwrap())
|
Ok(initdata.window.unwrap())
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn register_window_class<T: 'static>() -> Vec<u16> {
|
unsafe fn register_window_class<T: 'static>(class_name: &[u16]) {
|
||||||
let class_name = util::encode_wide("Window Class");
|
|
||||||
|
|
||||||
let class = WNDCLASSEXW {
|
let class = WNDCLASSEXW {
|
||||||
cbSize: mem::size_of::<WNDCLASSEXW>() as u32,
|
cbSize: mem::size_of::<WNDCLASSEXW>() as u32,
|
||||||
style: CS_HREDRAW | CS_VREDRAW,
|
style: CS_HREDRAW | CS_VREDRAW,
|
||||||
|
@ -1210,8 +1209,6 @@ unsafe fn register_window_class<T: 'static>() -> Vec<u16> {
|
||||||
// Also since there is no weird element in the struct, there is no reason for this
|
// Also since there is no weird element in the struct, there is no reason for this
|
||||||
// call to fail.
|
// call to fail.
|
||||||
RegisterClassExW(&class);
|
RegisterClassExW(&class);
|
||||||
|
|
||||||
class_name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ComInitialized(*mut ());
|
struct ComInitialized(*mut ());
|
||||||
|
|
Loading…
Reference in a new issue