Commit 03c5b92d authored by John Ralls's avatar John Ralls

[quartz] Full-screen only "normal" windows and splashscreens.

So dialogs, pop-ups, etc. behave as expected when parent is in
full-screen.

Tiling is allowed for normal windows and splash screens and disallowed
for others.
Closes #1627
parent 512da667
......@@ -2169,6 +2169,37 @@ _gdk_quartz_window_update_has_shadow (GdkWindowImplQuartz *impl)
[impl->toplevel setHasShadow: has_shadow];
}
static void
_gdk_quartz_window_set_collection_behavior (NSWindow *nswindow,
GdkWindowTypeHint hint)
{
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
if (gdk_quartz_osx_version() >= GDK_OSX_LION)
{
/* Fullscreen Collection Behavior */
NSWindowCollectionBehavior behavior = [nswindow collectionBehavior];
switch (hint)
{
case GDK_WINDOW_TYPE_HINT_NORMAL:
case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
behavior &= ~(NSWindowCollectionBehaviorFullScreenAuxiliary &
NSWindowCollectionBehaviorFullScreenDisallowsTiling);
behavior |= (NSWindowCollectionBehaviorFullScreenPrimary |
NSWindowCollectionBehaviorFullScreenAllowsTiling);
break;
default:
behavior &= ~(NSWindowCollectionBehaviorFullScreenPrimary &
NSWindowCollectionBehaviorFullScreenAllowsTiling);
behavior |= (NSWindowCollectionBehaviorFullScreenAuxiliary |
NSWindowCollectionBehaviorFullScreenDisallowsTiling);
break;
}
[nswindow setCollectionBehavior:behavior];
}
#endif
}
static void
gdk_quartz_window_set_type_hint (GdkWindow *window,
GdkWindowTypeHint hint)
......@@ -2188,6 +2219,8 @@ gdk_quartz_window_set_type_hint (GdkWindow *window,
return;
_gdk_quartz_window_update_has_shadow (impl);
if (impl->toplevel)
_gdk_quartz_window_set_collection_behavior (impl->toplevel, hint);
[impl->toplevel setLevel: window_type_hint_to_level (hint)];
[impl->toplevel setHidesOnDeactivate: window_type_hint_to_hides_on_deactivate (hint)];
}
......@@ -2439,7 +2472,6 @@ gdk_quartz_window_set_decorations (GdkWindow *window,
if (new_mask == GDK_QUARTZ_BORDERLESS_WINDOW)
{
[impl->toplevel setContentSize:rect.size];
[impl->toplevel setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];
}
else
[impl->toplevel setFrame:rect display:YES];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment