From 7528c2572e405b841fc182e8b3eda90effe4d4cb Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Fri, 27 Jan 2023 11:14:36 +0100 Subject: [PATCH] ui: ComboBoxSetStoreNode: don't hide the picker when clicking the toolbar When clicking the toolbar of the ComboGrid, the combobox loses focus, and instantly hides the picker. To prevent that, we keep track of the mousedown event on the toolbar (which happily comes before the focusLeave event), and prevent the focusLeave propagation in that case. Then on mouseup, we focus the combobox again, so that the nexct focusLeave can trigger again. Signed-off-by: Dominik Csapak --- www/manager6/form/ComboBoxSetStoreNode.js | 30 +++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/www/manager6/form/ComboBoxSetStoreNode.js b/www/manager6/form/ComboBoxSetStoreNode.js index a654636b..a127af3a 100644 --- a/www/manager6/form/ComboBoxSetStoreNode.js +++ b/www/manager6/form/ComboBoxSetStoreNode.js @@ -29,6 +29,30 @@ Ext.define('PVE.form.ComboBoxSetStoreNode', { me.fireEvent('nodechanged', value); }, + tbarMouseDown: function() { + this.mousePressed = true; + }, + + tbarMouseUp: function() { + let me = this; + delete this.mousePressed; + if (me.focusLeft) { + me.focus(); + delete me.focusLeft; + } + }, + + // conditionally prevent the focusLeave handler to continue, preventing collapsing of the picker + onFocusLeave: function() { + let me = this; + me.focusLeft = true; + if (!me.mousePressed) { + me.callParent(arguments); + } + + return undefined; + }, + initComponent: function() { let me = this; @@ -37,6 +61,12 @@ Ext.define('PVE.form.ComboBoxSetStoreNode', { Ext.apply(me.listConfig ?? {}, { tbar: { xtype: 'toolbar', + listeners: { + mousedown: me.tbarMouseDown, + mouseup: me.tbarMouseUp, + element: 'el', + scope: me, + }, items: [ { xtype: "pveStorageScanNodeSelector", -- 2.39.5