diff --git a/apps/common/main/lib/component/Menu.js b/apps/common/main/lib/component/Menu.js index 824509f522..ed745f506d 100644 --- a/apps/common/main/lib/component/Menu.js +++ b/apps/common/main/lib/component/Menu.js @@ -255,6 +255,9 @@ define([ item.on('click', _.bind(me.onItemClick, me)); item.on('toggle', _.bind(me.onItemToggle, me)); }); + menuRoot.on( "click", function(e) { + me.trigger('menu:click', this, e); + }); } if (this.options.maxHeight) { diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index ae8f9734dc..62023f7890 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -75,6 +75,8 @@ define([ this._currentParaObjDisabled = false; this._currLang = {}; this._isDisabled = false; + this._preventCustomClick = null; + this._hasCustomItems = false; this._docProtection = { isReadOnly: false, isReviewOnly: false, @@ -2937,6 +2939,12 @@ define([ var me = this, lang = me.mode && me.mode.lang ? me.mode.lang.split(/[\-_]/)[0] : 'en'; + me._preventCustomClick && clearTimeout(me._preventCustomClick); + me._hasCustomItems && (me._preventCustomClick = setTimeout(function () { + me._preventCustomClick = null; + },500)); // set delay only on update existing items + me._hasCustomItems = true; + var findCustomItem = function(guid, id) { if (menu && menu.items.length>0) { for (var i = menu.items.length-1; i >=0 ; i--) { @@ -2957,7 +2965,10 @@ define([ items: [] }); toMenu.on('item:click', function(menu, item, e) { - me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + }); + toMenu.on('menu:click', function(menu, e) { + me._preventCustomClick && e.stopPropagation(); }); } items.forEach(function(item) { @@ -3017,7 +3028,7 @@ define([ menu: item.items && item.items.length>=0 ? getMenu(item.items, plugin.guid) : false, disabled: !!item.disabled }).on('click', function(item, e) { - me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); }); menu.addItem(mnu); } @@ -3041,6 +3052,7 @@ define([ } } } + this._hasCustomItems = false; }, focus: function() { diff --git a/apps/presentationeditor/main/app/view/DocumentHolder.js b/apps/presentationeditor/main/app/view/DocumentHolder.js index 4a6c5eb855..3053e23c70 100644 --- a/apps/presentationeditor/main/app/view/DocumentHolder.js +++ b/apps/presentationeditor/main/app/view/DocumentHolder.js @@ -64,6 +64,8 @@ define([ me._currLang = {}; me._state = {unitsChanged: true}; me._isDisabled = false; + me._preventCustomClick = null; + me._hasCustomItems = false; Common.NotificationCenter.on('settings:unitschanged', _.bind(this.unitsChanged, this)); }, @@ -2505,6 +2507,12 @@ define([ var me = this, lang = me.mode && me.mode.lang ? me.mode.lang.split(/[\-_]/)[0] : 'en'; + me._preventCustomClick && clearTimeout(me._preventCustomClick); + me._hasCustomItems && (me._preventCustomClick = setTimeout(function () { + me._preventCustomClick = null; + },500)); // set delay only on update existing items + me._hasCustomItems = true; + var findCustomItem = function(guid, id) { if (menu && menu.items.length>0) { for (var i = menu.items.length-1; i >=0 ; i--) { @@ -2525,7 +2533,10 @@ define([ items: [] }); toMenu.on('item:click', function(menu, item, e) { - me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + }); + toMenu.on('menu:click', function(menu, e) { + me._preventCustomClick && e.stopPropagation(); }); } items.forEach(function(item) { @@ -2585,7 +2596,7 @@ define([ menu: item.items && item.items.length>=0 ? getMenu(item.items, plugin.guid) : false, disabled: !!item.disabled }).on('click', function(item, e) { - me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); }); menu.addItem(mnu); } @@ -2609,6 +2620,7 @@ define([ } } } + this._hasCustomItems = false; }, unitsChanged: function(m) { diff --git a/apps/spreadsheeteditor/main/app/view/DocumentHolder.js b/apps/spreadsheeteditor/main/app/view/DocumentHolder.js index 3dc1942a36..baf90e77fa 100644 --- a/apps/spreadsheeteditor/main/app/view/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/view/DocumentHolder.js @@ -59,6 +59,8 @@ define([ initialize: function() { var me = this; + me._preventCustomClick = null; + me._hasCustomItems = false; this.setApi = function(api) { me.api = api; @@ -1458,6 +1460,12 @@ define([ var me = this, lang = me.mode && me.mode.lang ? me.mode.lang.split(/[\-_]/)[0] : 'en'; + me._preventCustomClick && clearTimeout(me._preventCustomClick); + me._hasCustomItems && (me._preventCustomClick = setTimeout(function () { + me._preventCustomClick = null; + },500)); // set delay only on update existing items + me._hasCustomItems = true; + var findCustomItem = function(guid, id) { if (menu && menu.items.length>0) { for (var i = menu.items.length-1; i >=0 ; i--) { @@ -1478,7 +1486,10 @@ define([ items: [] }); toMenu.on('item:click', function(menu, item, e) { - me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + }); + toMenu.on('menu:click', function(menu, e) { + me._preventCustomClick && e.stopPropagation(); }); } items.forEach(function(item) { @@ -1538,7 +1549,7 @@ define([ menu: item.items && item.items.length>=0 ? getMenu(item.items, plugin.guid) : false, disabled: !!item.disabled }).on('click', function(item, e) { - me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); }); menu.addItem(mnu); } @@ -1562,6 +1573,7 @@ define([ } } } + this._hasCustomItems = false; }, txtSort: 'Sort',