[gtk+] quartz: make sure all old properties are set on the new toplevel
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] quartz: make sure all old properties are set on the new toplevel
- Date: Thu, 17 Jan 2013 13:50:39 +0000 (UTC)
commit b4b42ba54d26243d16251a6a41fc1bd1291176fc
Author: Kristian Rietveld <kris loopnest org>
Date: Fri Dec 28 21:59:02 2012 +0100
quartz: make sure all old properties are set on the new toplevel
Apply patch by Paul Davies; part of bug 669808.
(cherry picked from commit a8008b796f14444dff3ac46af884238fc4f214f6)
gdk/quartz/gdkwindow-quartz.c | 34 +++++++++++++++++++++++++++++-----
1 files changed, 29 insertions(+), 5 deletions(-)
---
diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
index 106a46b..1d61250 100644
--- a/gdk/quartz/gdkwindow-quartz.c
+++ b/gdk/quartz/gdkwindow-quartz.c
@@ -2624,28 +2624,52 @@ gdk_quartz_window_set_decorations (GdkWindow *window,
rect = [NSWindow contentRectForFrameRect:rect styleMask:old_mask];
}
- /* Note, before OS 10.6 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.
+ /* Note, before OS 10.6 there doesn't seem to be a way to change this
+ * without recreating the toplevel. From 10.6 onward, a simple call to
+ * setStyleMask takes care of most of this, except for ensuring that the
+ * title is set.
*/
if ([impl->toplevel respondsToSelector:@selector(setStyleMask:)])
{
+ NSString *title = [impl->toplevel title];
+
[(id<CanSetStyleMask>)impl->toplevel setStyleMask:new_mask];
+
+ /* It appears that unsetting and then resetting NSTitledWindowMask
+ * does not reset the title in the title bar as might be expected.
+ *
+ * In theory we only need to set this if new_mask includes
+ * NSTitledWindowMask. This behaved extremely oddly when
+ * conditionalized upon that and since it has no side effects (i.e.
+ * if NSTitledWindowMask is not requested, the title will not be
+ * displayed) just do it unconditionally.
+ */
+ [impl->toplevel setTitle:title];
}
else
{
+ NSString *title = [impl->toplevel title];
+ NSColor *bg = [impl->toplevel backgroundColor];
+ NSScreen *screen = [impl->toplevel screen];
+
[impl->toplevel release];
impl->toplevel = [[GdkQuartzNSWindow alloc] initWithContentRect:rect
styleMask:new_mask
backing:NSBackingStoreBuffered
- defer:NO];
+ defer:NO
+ screen:screen];
[impl->toplevel setHasShadow: window_type_hint_to_shadow (impl->type_hint)];
[impl->toplevel setLevel: window_type_hint_to_level (impl->type_hint)];
+ [impl->toplevel setTitle:title];
+ [impl->toplevel setBackgroundColor:bg];
[impl->toplevel setHidesOnDeactivate: window_type_hint_to_hides_on_deactivate (impl->type_hint)];
[impl->toplevel setContentView:old_view];
}
- [impl->toplevel setFrame:rect display:YES];
+ if (new_mask == NSBorderlessWindowMask)
+ [impl->toplevel setContentSize:rect.size];
+ else
+ [impl->toplevel setFrame:rect display:YES];
/* Invalidate the window shadow for non-opaque views that have shadow
* enabled, to get the shadow shape updated.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]