From 9c660a187ce2dd68a78c915c0006050c0cdbbffc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Dj=C3=A4rv?= Date: Mon, 30 Jun 2014 14:38:09 +0200 Subject: [PATCH] Remove unnecessary redisplays in NS port. * nsmenu.m (update_frame_tool_bar): Set wait_for_tool_bar to NO when setNeedsDisplay is called so we don't trigger redisplay for every tool bar update. * nsterm.m (any_help_event_p): New variable. (mouseMoved:): Set any_help_event_p to YES if help event is generated. Remove else with empty help event that triggered redisplay for every mouse move. (windowDidResignKey:): If any_help_event_p, generate empty help event. --- src/ChangeLog | 13 +++++++++++++ src/nsmenu.m | 3 +++ src/nsterm.m | 19 ++++++++++++++----- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 4a6b6a4769c..b87555344f9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2014-06-30 Jan Djärv + + * nsmenu.m (update_frame_tool_bar): Set wait_for_tool_bar to NO + when setNeedsDisplay is called so we don't trigger redisplay for every + tool bar update. + + * nsterm.m (any_help_event_p): New variable. + (mouseMoved:): Set any_help_event_p to YES if help event is + generated. Remove else with empty help event that triggered redisplay + for every mouse move. + (windowDidResignKey:): If any_help_event_p, generate empty help + event. + 2014-06-29 Dmitry Antipov * xfns.c (Qsuppress_icon): Remove; no real users. diff --git a/src/nsmenu.m b/src/nsmenu.m index 24c1189584b..778b068ef8b 100644 --- a/src/nsmenu.m +++ b/src/nsmenu.m @@ -1152,7 +1152,10 @@ update_frame_tool_bar (struct frame *f) FRAME_TOOLBAR_HEIGHT (f) = 0; if (view->wait_for_tool_bar && FRAME_TOOLBAR_HEIGHT (f) > 0) + { + view->wait_for_tool_bar = NO; [view setNeedsDisplay: YES]; + } unblock_input (); } diff --git a/src/nsterm.m b/src/nsterm.m index c6450804f57..69738ba924a 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -283,6 +283,11 @@ static NSMutableArray *ns_pending_files, *ns_pending_service_names, static BOOL ns_do_open_file = NO; static BOOL ns_last_use_native_fullscreen; +/* Non-zero means that a HELP_EVENT has been generated since Emacs + start. */ + +static BOOL any_help_event_p = NO; + static struct { struct input_event *q; int nr, cap; @@ -5688,14 +5693,10 @@ not_in_argv (NSString *arg) /* NOTE: help_echo_{window,pos,object} are set in xdisp.c (note_mouse_highlight), which is called through the note_mouse_movement () call above */ + any_help_event_p = YES; gen_help_event (help_echo_string, frame, help_echo_window, help_echo_object, help_echo_pos); } - else - { - help_echo_string = Qnil; - gen_help_event (Qnil, frame, Qnil, Qnil, 0); - } if (emacsframe->mouse_moved && send_appdefined) ns_send_appdefined (-1); @@ -5973,6 +5974,14 @@ if (cols > 0 && rows > 0) x_set_frame_alpha (emacsframe); } + if (any_help_event_p) + { + Lisp_Object frame; + XSETFRAME (frame, emacsframe); + help_echo_string = Qnil; + gen_help_event (Qnil, frame, Qnil, Qnil, 0); + } + if (emacs_event && is_focus_frame) { [self deleteWorkingText]; -- 2.39.5