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 <d.csapak@proxmox.com>
This commit is contained in:
Dominik Csapak 2023-01-27 11:14:36 +01:00 committed by Thomas Lamprecht
parent a2ff227eb5
commit 7528c2572e

View File

@ -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",