Detailed changes
@@ -62,6 +62,7 @@ impl AgentNotification {
app_id: Some(app_id.to_owned()),
window_min_size: None,
window_decorations: Some(WindowDecorations::Client),
+ ..Default::default()
}
}
}
@@ -66,5 +66,6 @@ fn notification_window_options(
app_id: Some(app_id.to_owned()),
window_min_size: None,
window_decorations: Some(WindowDecorations::Client),
+ ..Default::default()
}
}
@@ -152,6 +152,36 @@ impl Render for WindowDemo {
)
.unwrap();
}))
+ .child(button("Unresizable", move |_, cx| {
+ cx.open_window(
+ WindowOptions {
+ is_resizable: false,
+ window_bounds: Some(window_bounds),
+ ..Default::default()
+ },
+ |_, cx| {
+ cx.new(|_| SubWindow {
+ custom_titlebar: false,
+ })
+ },
+ )
+ .unwrap();
+ }))
+ .child(button("Unminimizable", move |_, cx| {
+ cx.open_window(
+ WindowOptions {
+ is_minimizable: false,
+ window_bounds: Some(window_bounds),
+ ..Default::default()
+ },
+ |_, cx| {
+ cx.new(|_| SubWindow {
+ custom_titlebar: false,
+ })
+ },
+ )
+ .unwrap();
+ }))
.child(button("Hide Application", |window, cx| {
cx.hide();
@@ -62,6 +62,7 @@ fn build_window_options(display_id: DisplayId, bounds: Bounds<Pixels>) -> Window
app_id: None,
window_min_size: None,
window_decorations: None,
+ ..Default::default()
}
}
@@ -1091,6 +1091,12 @@ pub struct WindowOptions {
/// Whether the window should be movable by the user
pub is_movable: bool,
+ /// Whether the window should be resizable by the user
+ pub is_resizable: bool,
+
+ /// Whether the window should be minimized by the user
+ pub is_minimizable: bool,
+
/// The display to create the window on, if this is None,
/// the window will be created on the main display
pub display_id: Option<DisplayId>,
@@ -1133,6 +1139,14 @@ pub(crate) struct WindowParams {
#[cfg_attr(any(target_os = "linux", target_os = "freebsd"), allow(dead_code))]
pub is_movable: bool,
+ /// Whether the window should be resizable by the user
+ #[cfg_attr(any(target_os = "linux", target_os = "freebsd"), allow(dead_code))]
+ pub is_resizable: bool,
+
+ /// Whether the window should be minimized by the user
+ #[cfg_attr(any(target_os = "linux", target_os = "freebsd"), allow(dead_code))]
+ pub is_minimizable: bool,
+
#[cfg_attr(
any(target_os = "linux", target_os = "freebsd", target_os = "windows"),
allow(dead_code)
@@ -1191,6 +1205,8 @@ impl Default for WindowOptions {
show: true,
kind: WindowKind::Normal,
is_movable: true,
+ is_resizable: true,
+ is_minimizable: true,
display_id: None,
window_background: WindowBackgroundAppearance::default(),
app_id: None,
@@ -530,6 +530,8 @@ impl MacWindow {
titlebar,
kind,
is_movable,
+ is_resizable,
+ is_minimizable,
focus,
show,
display_id,
@@ -545,10 +547,16 @@ impl MacWindow {
let mut style_mask;
if let Some(titlebar) = titlebar.as_ref() {
- style_mask = NSWindowStyleMask::NSClosableWindowMask
- | NSWindowStyleMask::NSMiniaturizableWindowMask
- | NSWindowStyleMask::NSResizableWindowMask
- | NSWindowStyleMask::NSTitledWindowMask;
+ style_mask =
+ NSWindowStyleMask::NSClosableWindowMask | NSWindowStyleMask::NSTitledWindowMask;
+
+ if is_resizable {
+ style_mask |= NSWindowStyleMask::NSResizableWindowMask;
+ }
+
+ if is_minimizable {
+ style_mask |= NSWindowStyleMask::NSMiniaturizableWindowMask;
+ }
if titlebar.appears_transparent {
style_mask |= NSWindowStyleMask::NSFullSizeContentViewWindowMask;
@@ -382,10 +382,17 @@ impl WindowsWindow {
let (mut dwexstyle, dwstyle) = if params.kind == WindowKind::PopUp {
(WS_EX_TOOLWINDOW, WINDOW_STYLE(0x0))
} else {
- (
- WS_EX_APPWINDOW,
- WS_THICKFRAME | WS_SYSMENU | WS_MAXIMIZEBOX | WS_MINIMIZEBOX,
- )
+ let mut dwstyle = WS_SYSMENU;
+
+ if params.is_resizable {
+ dwstyle |= WS_THICKFRAME | WS_MAXIMIZEBOX;
+ }
+
+ if params.is_minimizable {
+ dwstyle |= WS_MINIMIZEBOX;
+ }
+
+ (WS_EX_APPWINDOW, dwstyle)
};
if !disable_direct_composition {
dwexstyle |= WS_EX_NOREDIRECTIONBITMAP;
@@ -939,6 +939,8 @@ impl Window {
show,
kind,
is_movable,
+ is_resizable,
+ is_minimizable,
display_id,
window_background,
app_id,
@@ -956,6 +958,8 @@ impl Window {
titlebar,
kind,
is_movable,
+ is_resizable,
+ is_minimizable,
focus,
show,
display_id,
@@ -301,6 +301,7 @@ pub fn build_window_options(display_uuid: Option<Uuid>, cx: &mut App) -> WindowO
width: px(360.0),
height: px(240.0),
}),
+ ..Default::default()
}
}