diff options
author | Richard Hult <richard@imendio.com> | 2007-08-30 09:01:12 +0000 |
---|---|---|
committer | Richard Hult <rhult@src.gnome.org> | 2007-08-30 09:01:12 +0000 |
commit | 3b2e8eacf16db0f03b48539012fb0d6f8195c74d (patch) | |
tree | b90556a1005e383d60b8471f3bc9099b6656dec1 /gdk | |
parent | ecfa5393078ac7d94c55eff89ca3782c3a6ca856 (diff) | |
download | gtk+-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.c | 71 |
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 |