diff options
author | Jan Djärv <jan.h.d@swipnet.se> | 2014-04-04 18:32:24 +0200 |
---|---|---|
committer | Jan Djärv <jan.h.d@swipnet.se> | 2014-04-04 18:32:24 +0200 |
commit | 11a9c72fafaa02ef26708da6ffe765a7fdaa4565 (patch) | |
tree | e20e6c51747a69be7e81daa1ab1be642a7981043 /src | |
parent | 97bac2112e7b4332834900863810370a57e38fbe (diff) | |
download | emacs-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.
Diffstat (limited to 'src')
-rw-r--r-- | src/ChangeLog | 13 | ||||
-rw-r--r-- | src/nsmenu.m | 15 | ||||
-rw-r--r-- | src/nsterm.h | 1 | ||||
-rw-r--r-- | src/nsterm.m | 14 |
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; |