From 241f146c8a434461516c27d79cc783f637f9c42c Mon Sep 17 00:00:00 2001 From: Ed Sanders Date: Thu, 26 Sep 2013 21:39:54 +0100 Subject: [PATCH] Prevent context menu from flickering after FocusableNode redraw Pass an extra parameter to show() to let it know when the menu is just being moved, and therefore doesn't need to perform the fade-in transition. Change-Id: I2cf2ff07db6cc7d226f3d626755792a06dfcbe54 --- modules/ve/ce/ve.ce.FocusableNode.js | 2 +- modules/ve/ui/ve.ui.Context.js | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/ve/ce/ve.ce.FocusableNode.js b/modules/ve/ce/ve.ce.FocusableNode.js index 309e781e94..96d071610d 100644 --- a/modules/ve/ce/ve.ce.FocusableNode.js +++ b/modules/ve/ce/ve.ce.FocusableNode.js @@ -107,7 +107,7 @@ ve.ce.FocusableNode.prototype.onFocusableRerender = function () { if ( this.focused ) { this.redrawHighlight(); // reposition menu - this.surface.getSurface().getContext().show( true ); + this.surface.getSurface().getContext().show( true, true ); } }; diff --git a/modules/ve/ui/ve.ui.Context.js b/modules/ve/ui/ve.ui.Context.js index fe9618cdd7..8c3f8a380c 100644 --- a/modules/ve/ui/ve.ui.Context.js +++ b/modules/ve/ui/ve.ui.Context.js @@ -320,9 +320,11 @@ ve.ui.Context.prototype.updateDimensions = function ( transition ) { * Shows the context menu. * * @method + * @param {boolean} [transition=false] Use a smooth transition + * @param {boolean} [repositionOnly=false] The context is only being moved so don't fade in * @chainable */ -ve.ui.Context.prototype.show = function ( transition ) { +ve.ui.Context.prototype.show = function ( transition, repositionOnly ) { var inspector = this.inspectors.getCurrent(), focusedNode = this.surface.getView().getFocusedNode(); @@ -336,7 +338,9 @@ ve.ui.Context.prototype.show = function ( transition ) { if ( inspector ) { this.$menu.hide(); this.inspectors.$.show(); - inspector.$.css( 'opacity', 0 ); + if ( !repositionOnly ) { + inspector.$.css( 'opacity', 0 ); + } // Update size and fade the inspector in after animation is complete setTimeout( ve.bind( function () { inspector.fitHeightToContents();