[gtk/gtk-3-24] Redo the fullscreen MacOS version control to allow building on 10.6
- From: John Ralls <jralls src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/gtk-3-24] Redo the fullscreen MacOS version control to allow building on 10.6
- Date: Sat, 22 Jun 2019 21:52:48 +0000 (UTC)
commit 3994e7555081d70542a82ffe0acd1f82361c5ab0
Author: John Ralls <jralls ceridwen us>
Date: Fri Mar 15 13:36:20 2019 -0700
Redo the fullscreen MacOS version control to allow building on 10.6
Closes: https://gitlab.gnome.org/GNOME/gtk/issues/1686
gdk/quartz/gdkwindow-quartz.c | 206 +++++++++++++++++++++++-------------------
1 file changed, 112 insertions(+), 94 deletions(-)
---
diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
index 12bac9798a..e991ccdb2d 100644
--- a/gdk/quartz/gdkwindow-quartz.c
+++ b/gdk/quartz/gdkwindow-quartz.c
@@ -58,7 +58,10 @@ typedef enum
{
GDK_QUARTZ_BORDERLESS_WINDOW = NSBorderlessWindowMask,
GDK_QUARTZ_CLOSABLE_WINDOW = NSClosableWindowMask,
+#if MAC_OS_X_VERSION_MIN_REQUIRED > 1060
+ /* Added in 10.7. Apple's docs are wrong to say it's from earlier. */
GDK_QUARTZ_FULLSCREEN_WINDOW = NSFullScreenWindowMask,
+#endif
GDK_QUARTZ_MINIATURIZABLE_WINDOW = NSMiniaturizableWindowMask,
GDK_QUARTZ_RESIZABLE_WINDOW = NSResizableWindowMask,
GDK_QUARTZ_TITLED_WINDOW = NSTitledWindowMask,
@@ -75,7 +78,7 @@ typedef enum
} GdkQuartzWindowMask;
#endif
-#ifndef AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
static FullscreenSavedGeometry *get_fullscreen_geometry (GdkWindow *window);
#endif
@@ -1156,7 +1159,7 @@ gdk_window_quartz_hide (GdkWindow *window)
gdk_seat_ungrab (seat);
/* Make sure we're not stuck in fullscreen mode. */
-#ifndef AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
if (get_fullscreen_geometry (window))
SetSystemUIMode (kUIModeNormal, 0);
#endif
@@ -2706,14 +2709,17 @@ gdk_quartz_window_deiconify (GdkWindow *window)
}
}
-#ifdef AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
-
static gboolean
window_is_fullscreen (GdkWindow *window)
{
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
- return ([impl->toplevel styleMask] & GDK_QUARTZ_FULLSCREEN_WINDOW) != 0;
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
+ if (gdk_quartz_osx_version() >= GDK_OSX_LION)
+ return ([impl->toplevel styleMask] & GDK_QUARTZ_FULLSCREEN_WINDOW) != 0;
+ else
+#endif
+ return g_object_get_data (G_OBJECT (window), FULLSCREEN_DATA);
}
static void
@@ -2727,132 +2733,144 @@ gdk_quartz_window_fullscreen (GdkWindow *window)
impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
- if (!window_is_fullscreen (window))
- [impl->toplevel toggleFullScreen:nil];
-}
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
+ if (gdk_quartz_osx_version() >= GDK_OSX_LION)
+ {
+ if (!window_is_fullscreen (window))
+ [impl->toplevel toggleFullScreen:nil];
+ }
+ else
+ {
+#endif
+ FullscreenSavedGeometry *geometry;
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
+ NSRect frame;
-static void
-gdk_quartz_window_unfullscreen (GdkWindow *window)
-{
- GdkWindowImplQuartz *impl;
+ if (GDK_WINDOW_DESTROYED (window) ||
+ !WINDOW_IS_TOPLEVEL (window))
+ return;
- if (GDK_WINDOW_DESTROYED (window) ||
- !WINDOW_IS_TOPLEVEL (window))
- return;
+ geometry = get_fullscreen_geometry (window);
+ if (!geometry)
+ {
+ geometry = g_new (FullscreenSavedGeometry, 1);
- impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
+ geometry->x = window->x;
+ geometry->y = window->y;
+ geometry->width = window->width;
+ geometry->height = window->height;
- if (window_is_fullscreen (window))
- [impl->toplevel toggleFullScreen:nil];
-}
+ if (!gdk_window_get_decorations (window, &geometry->decor))
+ geometry->decor = GDK_DECOR_ALL;
-void
-_gdk_quartz_window_update_fullscreen_state (GdkWindow *window)
-{
- gboolean is_fullscreen;
- gboolean was_fullscreen;
+ g_object_set_data_full (G_OBJECT (window),
+ FULLSCREEN_DATA, geometry,
+ g_free);
- if (GDK_WINDOW_DESTROYED (window) || !WINDOW_IS_TOPLEVEL (window))
- return;
-
- is_fullscreen = window_is_fullscreen (window);
- was_fullscreen = (gdk_window_get_state (window) & GDK_WINDOW_STATE_FULLSCREEN) != 0;
+ gdk_window_set_decorations (window, 0);
- if (is_fullscreen != was_fullscreen)
- {
- if (is_fullscreen)
- gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FULLSCREEN);
- else
- gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FULLSCREEN, 0);
- }
-}
+ frame = [[impl->toplevel screen] frame];
+ move_resize_window_internal (window,
+ 0, 0,
+ frame.size.width, frame.size.height);
+ [impl->toplevel setContentSize:frame.size];
+ [impl->toplevel makeKeyAndOrderFront:impl->toplevel];
-#else
+ clear_toplevel_order ();
+ }
-static FullscreenSavedGeometry *
-get_fullscreen_geometry (GdkWindow *window)
-{
- return g_object_get_data (G_OBJECT (window), FULLSCREEN_DATA);
+ SetSystemUIMode (kUIModeAllHidden, kUIOptionAutoShowMenuBar);
+
+ gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FULLSCREEN);
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
+ }
+#endif
}
static void
-gdk_quartz_window_fullscreen (GdkWindow *window)
+gdk_quartz_window_unfullscreen (GdkWindow *window)
{
- FullscreenSavedGeometry *geometry;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
- NSRect frame;
+ GdkWindowImplQuartz *impl;
if (GDK_WINDOW_DESTROYED (window) ||
!WINDOW_IS_TOPLEVEL (window))
return;
- geometry = get_fullscreen_geometry (window);
- if (!geometry)
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
+ if (gdk_quartz_osx_version() >= GDK_OSX_LION)
{
- geometry = g_new (FullscreenSavedGeometry, 1);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
- geometry->x = window->x;
- geometry->y = window->y;
- geometry->width = window->width;
- geometry->height = window->height;
+ if (window_is_fullscreen (window))
+ [impl->toplevel toggleFullScreen:nil];
+ }
+ else
+ {
+#endif
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
+ FullscreenSavedGeometry *geometry;
- if (!gdk_window_get_decorations (window, &geometry->decor))
- geometry->decor = GDK_DECOR_ALL;
+ if (GDK_WINDOW_DESTROYED (window) ||
+ !WINDOW_IS_TOPLEVEL (window))
+ return;
- g_object_set_data_full (G_OBJECT (window),
- FULLSCREEN_DATA, geometry,
- g_free);
+ geometry = get_fullscreen_geometry (window);
+ if (geometry)
+ {
+ SetSystemUIMode (kUIModeNormal, 0);
- gdk_window_set_decorations (window, 0);
+ move_resize_window_internal (window,
+ geometry->x,
+ geometry->y,
+ geometry->width,
+ geometry->height);
- frame = [[impl->toplevel screen] frame];
- move_resize_window_internal (window,
- 0, 0,
- frame.size.width, frame.size.height);
- [impl->toplevel setContentSize:frame.size];
- [impl->toplevel makeKeyAndOrderFront:impl->toplevel];
+ gdk_window_set_decorations (window, geometry->decor);
- clear_toplevel_order ();
- }
+ g_object_set_data (G_OBJECT (window), FULLSCREEN_DATA, NULL);
+
+ [impl->toplevel makeKeyAndOrderFront:impl->toplevel];
+ clear_toplevel_order ();
- SetSystemUIMode (kUIModeAllHidden, kUIOptionAutoShowMenuBar);
+ gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FULLSCREEN, 0);
+ }
- gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FULLSCREEN);
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
+ }
+#endif
}
-static void
-gdk_quartz_window_unfullscreen (GdkWindow *window)
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
+static FullscreenSavedGeometry *
+get_fullscreen_geometry (GdkWindow *window)
{
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
- FullscreenSavedGeometry *geometry;
+ return g_object_get_data (G_OBJECT (window), FULLSCREEN_DATA);
+}
+#endif
- if (GDK_WINDOW_DESTROYED (window) ||
- !WINDOW_IS_TOPLEVEL (window))
+void
+_gdk_quartz_window_update_fullscreen_state (GdkWindow *window)
+{
+ if (GDK_WINDOW_DESTROYED (window) || !WINDOW_IS_TOPLEVEL (window))
return;
- geometry = get_fullscreen_geometry (window);
- if (geometry)
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
+ if (gdk_quartz_osx_version() >= GDK_OSX_LION)
{
- SetSystemUIMode (kUIModeNormal, 0);
+ gboolean is_fullscreen = window_is_fullscreen (window);
+ gboolean was_fullscreen = (gdk_window_get_state (window) &&
+ GDK_WINDOW_STATE_FULLSCREEN) != 0;
- move_resize_window_internal (window,
- geometry->x,
- geometry->y,
- geometry->width,
- geometry->height);
-
- gdk_window_set_decorations (window, geometry->decor);
-
- g_object_set_data (G_OBJECT (window), FULLSCREEN_DATA, NULL);
-
- [impl->toplevel makeKeyAndOrderFront:impl->toplevel];
- clear_toplevel_order ();
-
- gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FULLSCREEN, 0);
+ if (is_fullscreen != was_fullscreen)
+ {
+ if (is_fullscreen)
+ gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FULLSCREEN);
+ else
+ gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FULLSCREEN, 0);
+ }
}
-}
-
#endif
+}
static void
gdk_quartz_window_set_keep_above (GdkWindow *window,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]