summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorRichard Hult <richard@imendio.com>2007-08-30 09:01:12 +0000
committerRichard Hult <rhult@src.gnome.org>2007-08-30 09:01:12 +0000
commit3b2e8eacf16db0f03b48539012fb0d6f8195c74d (patch)
treeb90556a1005e383d60b8471f3bc9099b6656dec1 /gdk
parentecfa5393078ac7d94c55eff89ca3782c3a6ca856 (diff)
downloadgtk+-3b2e8eacf16db0f03b48539012fb0d6f8195c74d.tar.gz
Implement those. Based on patch from Stefan Gehn, bug #459459.
2007-08-30 Richard Hult <richard@imendio.com> * gdk/quartz/gdkwindow-quartz.c: (gdk_window_set_decorations, gdk_window_get_decorations): Implement those. Based on patch from Stefan Gehn, bug #459459. svn path=/trunk/; revision=18704
Diffstat (limited to 'gdk')
-rw-r--r--gdk/quartz/gdkwindow-quartz.c71
1 files changed, 66 insertions, 5 deletions
diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
index f61b0d22ca..11360b07bd 100644
--- a/gdk/quartz/gdkwindow-quartz.c
+++ b/gdk/quartz/gdkwindow-quartz.c
@@ -2136,20 +2136,81 @@ gdk_window_get_frame_extents (GdkWindow *window,
}
void
-gdk_window_set_decorations (GdkWindow *window,
- GdkWMDecoration decorations)
+gdk_window_set_decorations (GdkWindow *window,
+ GdkWMDecoration decorations)
{
+ GdkWindowImplQuartz *impl;
+ int style_mask;
+ NSView *old_view;
+
g_return_if_fail (GDK_IS_WINDOW (window));
+ g_return_if_fail (WINDOW_IS_TOPLEVEL (window));
- /* FIXME: Implement */
+ if (GDK_WINDOW_DESTROYED (window))
+ return;
+
+ impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+
+ if (decorations == 0 || GDK_WINDOW_TYPE (window) == GDK_WINDOW_TEMP)
+ {
+ style_mask = NSBorderlessWindowMask;
+ }
+ else
+ {
+ /* FIXME: Honor other GTK_DECOR_* flags. */
+ style_mask = (NSTitledWindowMask | NSClosableWindowMask |
+ NSMiniaturizableWindowMask | NSResizableWindowMask);
+ }
+
+ GDK_QUARTZ_ALLOC_POOL;
+
+ /* Note, there doesn't seem to be a way to change this without
+ * recreating the toplevel. There might be bad side-effects of doing
+ * that, but it seems alright.
+ */
+ if ([impl->toplevel styleMask] != style_mask)
+ {
+ old_view = [impl->toplevel contentView];
+
+ impl->toplevel = [impl->toplevel initWithContentRect:[impl->toplevel frame]
+ styleMask:style_mask
+ backing:NSBackingStoreBuffered
+ defer:NO];
+
+ [impl->toplevel setContentView:old_view];
+ }
+
+ GDK_QUARTZ_RELEASE_POOL;
}
gboolean
gdk_window_get_decorations (GdkWindow *window,
GdkWMDecoration *decorations)
{
- /* FIXME: Implement */
- return FALSE;
+ GdkWindowImplQuartz *impl;
+
+ g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
+ g_return_val_if_fail (WINDOW_IS_TOPLEVEL (window), FALSE);
+
+ if (GDK_WINDOW_DESTROYED (window))
+ return FALSE;
+
+ impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+
+ if (decorations)
+ {
+ if ([impl->toplevel styleMask] & NSBorderlessWindowMask)
+ {
+ *decorations = 0;
+ }
+ else
+ {
+ /* FIXME: Honor the other GTK_DECOR_* flags. */
+ *decorations = GDK_DECOR_ALL;
+ }
+ }
+
+ return TRUE;
}
void