Introduce explicit id field to Settings

... and use it to set the application id of the window on Unix systems, instead of relying on the title of the application.
This commit is contained in:
Héctor Ramón Jiménez 2021-08-11 19:23:05 +07:00
parent e3bc050aae
commit 7337ab63bc
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
4 changed files with 25 additions and 3 deletions

View file

@ -152,6 +152,7 @@ where
&application.title(),
application.mode(),
event_loop.primary_monitor(),
settings.id,
)
.with_menu(Some(conversion::menu(&application.menu())))
.build(&event_loop)

View file

@ -16,6 +16,12 @@ use winit::window::WindowBuilder;
/// The settings of an application.
#[derive(Debug, Clone, Default)]
pub struct Settings<Flags> {
/// The identifier of the application.
///
/// If provided, this identifier may be used to identify the application or
/// communicate with it through the windowing system.
pub id: Option<String>,
/// The [`Window`] settings
pub window: Window,
@ -70,6 +76,7 @@ impl Window {
title: &str,
mode: Mode,
primary_monitor: Option<MonitorHandle>,
_id: Option<String>,
) -> WindowBuilder {
let mut window_builder = WindowBuilder::new();
@ -112,7 +119,10 @@ impl Window {
))]
{
use ::winit::platform::unix::WindowBuilderExtUnix;
window_builder = window_builder.with_app_id(title.to_string());
if let Some(id) = _id {
window_builder = window_builder.with_app_id(id);
}
}
#[cfg(target_os = "windows")]
@ -122,6 +132,7 @@ impl Window {
if let Some(parent) = self.platform_specific.parent {
window_builder = window_builder.with_parent_window(parent);
}
window_builder = window_builder
.with_drag_and_drop(self.platform_specific.drag_and_drop);
}