summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Djärv <jan.h.d@swipnet.se>2014-04-04 18:32:24 +0200
committerJan Djärv <jan.h.d@swipnet.se>2014-04-04 18:32:24 +0200
commit11a9c72fafaa02ef26708da6ffe765a7fdaa4565 (patch)
treee20e6c51747a69be7e81daa1ab1be642a7981043
parent97bac2112e7b4332834900863810370a57e38fbe (diff)
downloademacs-11a9c72fafaa02ef26708da6ffe765a7fdaa4565.tar.gz
Backport from trunk.
* nsmenu.m (update_frame_tool_bar): Return early if view or toolbar is nil. If waiting for toolbar to complete, force a redraw. (free_frame_tool_bar): Set wait_for_tool_bar = NO * nsterm.h (EmacsView): Add wait_for_tool_bar. * nsterm.m (updateFrameSize:): If waiting for the tool bar and tool bar is zero height, just return (Bug#16976). (initFrameFromEmacs:): Initialize wait_for_tool_bar.
-rw-r--r--src/ChangeLog13
-rw-r--r--src/nsmenu.m15
-rw-r--r--src/nsterm.h1
-rw-r--r--src/nsterm.m14
4 files changed, 39 insertions, 4 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index c35206447f1..c370bdc0404 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,16 @@
+2014-04-04 Jan Djärv <jan.h.d@swipnet.se>
+
+ Backport from trunk.
+ * nsterm.m (updateFrameSize:): If waiting for the tool bar and tool
+ bar is zero height, just return (Bug#16976).
+ (initFrameFromEmacs:): Initialize wait_for_tool_bar.
+
+ * nsterm.h (EmacsView): Add wait_for_tool_bar.
+
+ * nsmenu.m (update_frame_tool_bar): Return early if view or toolbar
+ is nil. If waiting for toolbar to complete, force a redraw.
+ (free_frame_tool_bar): Set wait_for_tool_bar = NO (Bug#16976)
+
2014-04-03 Ken Brown <kbrown@cornell.edu>
* Makefile.in (EMACS_MANIFEST): Update comment. (Bug#17176)
diff --git a/src/nsmenu.m b/src/nsmenu.m
index f8cd07478ed..24842241f37 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -1054,8 +1054,10 @@ free_frame_tool_bar (struct frame *f)
Under NS we just hide the toolbar until it might be needed again.
-------------------------------------------------------------------------- */
{
+ EmacsView *view = FRAME_NS_VIEW (f);
block_input ();
- [[FRAME_NS_VIEW (f) toolbar] setVisible: NO];
+ view->wait_for_tool_bar = NO;
+ [[view toolbar] setVisible: NO];
FRAME_TOOLBAR_HEIGHT (f) = 0;
unblock_input ();
}
@@ -1071,6 +1073,7 @@ update_frame_tool_bar (struct frame *f)
NSWindow *window = [view window];
EmacsToolbar *toolbar = [view toolbar];
+ if (view == nil || toolbar == nil) return;
block_input ();
#ifdef NS_IMPL_COCOA
@@ -1176,9 +1179,13 @@ update_frame_tool_bar (struct frame *f)
FRAME_TOOLBAR_HEIGHT (f) =
NSHeight ([window frameRectForContentRect: NSMakeRect (0, 0, 0, 0)])
- FRAME_NS_TITLEBAR_HEIGHT (f);
- if (FRAME_TOOLBAR_HEIGHT (f) < 0) // happens if frame is fullscreen.
- FRAME_TOOLBAR_HEIGHT (f) = 0;
- unblock_input ();
+ if (FRAME_TOOLBAR_HEIGHT (f) < 0) // happens if frame is fullscreen.
+ FRAME_TOOLBAR_HEIGHT (f) = 0;
+
+ if (view->wait_for_tool_bar && FRAME_TOOLBAR_HEIGHT (f) > 0)
+ [view setNeedsDisplay: YES];
+
+ unblock_input ();
}
diff --git a/src/nsterm.h b/src/nsterm.h
index 8e8a9b7f36f..74789634a90 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -162,6 +162,7 @@ typedef float EmacsCGFloat;
int scrollbarsNeedingUpdate;
EmacsToolbar *toolbar;
NSRect ns_userRect;
+ BOOL wait_for_tool_bar;
}
/* AppKit-side interface */
diff --git a/src/nsterm.m b/src/nsterm.m
index 0e8fc56fdd9..c7cb4faa3b7 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -5766,6 +5766,13 @@ not_in_argv (NSString *arg)
+ FRAME_TOOLBAR_HEIGHT (emacsframe);
}
+ if (wait_for_tool_bar)
+ {
+ if (FRAME_TOOLBAR_HEIGHT (emacsframe) == 0)
+ return;
+ wait_for_tool_bar = NO;
+ }
+
neww = (int)wr.size.width - emacsframe->border_width;
newh = (int)wr.size.height - extra;
@@ -6078,6 +6085,13 @@ if (cols > 0 && rows > 0)
ns_window_num]];
[win setToolbar: toolbar];
[toolbar setVisible: NO];
+
+ /* Don't set frame garbaged until tool bar is up to date?
+ This avoids an extra clear and redraw (flicker) at frame creation. */
+ if (FRAME_EXTERNAL_TOOL_BAR (f)) wait_for_tool_bar = YES;
+ else wait_for_tool_bar = NO;
+
+
#ifdef NS_IMPL_COCOA
{
NSButton *toggleButton;