Avoid flickering on frame creation with tool bar on OSX.
* nsmenu.m (update_frame_tool_bar): Return early if view or toolbar is nil. If waiting for toolbar to complete, force a redraw. * 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. (initFrameFromEmacs:): Initialize wait_for_tool_bar. Fixes: debbugs:16976
This commit is contained in:
parent
b0e04df615
commit
f9d45267c8
4 changed files with 34 additions and 3 deletions
|
@ -1,3 +1,14 @@
|
|||
2014-03-30 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* 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.
|
||||
|
||||
2014-03-28 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* emacs.c (emacs_version): Use PACKAGE_VERSION rather than VERSION.
|
||||
|
|
11
src/nsmenu.m
11
src/nsmenu.m
|
@ -1071,6 +1071,7 @@ - (Lisp_Object)runMenuAt: (NSPoint)p forFrame: (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 +1177,13 @@ - (Lisp_Object)runMenuAt: (NSPoint)p forFrame: (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 ();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -162,6 +162,7 @@ typedef float EmacsCGFloat;
|
|||
int scrollbarsNeedingUpdate;
|
||||
EmacsToolbar *toolbar;
|
||||
NSRect ns_userRect;
|
||||
BOOL wait_for_tool_bar;
|
||||
}
|
||||
|
||||
/* AppKit-side interface */
|
||||
|
|
14
src/nsterm.m
14
src/nsterm.m
|
@ -5766,6 +5766,13 @@ - (void) updateFrameSize: (BOOL) delay;
|
|||
+ 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 @@ - (BOOL)isOpaque
|
|||
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;
|
||||
|
|
Loading…
Add table
Reference in a new issue