Fix quick-add search bar stealing focus for modal widgets.

This commit is contained in:
Lukas Brübach 2025-04-06 14:18:36 +02:00
parent a0e6a5bbe5
commit 3323508722
4 changed files with 19 additions and 1 deletions

View file

@ -19,6 +19,7 @@
#include <QAction> #include <QAction>
#include <QApplication> #include <QApplication>
#include <QCloseEvent> #include <QCloseEvent>
#include <QCompleter>
#include <QDir> #include <QDir>
#include <QDockWidget> #include <QDockWidget>
#include <QFileDialog> #include <QFileDialog>
@ -193,6 +194,15 @@ void TabDeckEditorVisual::processCardClickDatabaseDisplay(QMouseEvent *event,
} }
} }
bool TabDeckEditorVisual::actSaveDeckAs()
{
// We have to disable the quick-add search bar or else it'll steal focus after dialog creation.
tabContainer->visualDeckView->searchBar->setEnabled(false);
auto result = AbstractTabDeckEditor::actSaveDeckAs();
tabContainer->visualDeckView->searchBar->setEnabled(true);
return result;
}
void TabDeckEditorVisual::showPrintingSelector() void TabDeckEditorVisual::showPrintingSelector()
{ {
printingSelectorDockWidget->printingSelector->setCard(cardInfoDockWidget->cardInfo->getInfo(), DECK_ZONE_MAIN); printingSelectorDockWidget->printingSelector->setCard(cardInfoDockWidget->cardInfo->getInfo(), DECK_ZONE_MAIN);

View file

@ -47,6 +47,7 @@ public slots:
void void
processMainboardCardClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName); processMainboardCardClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName);
void processCardClickDatabaseDisplay(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance); void processCardClickDatabaseDisplay(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
bool actSaveDeckAs() override;
}; };
#endif #endif

View file

@ -42,11 +42,18 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_
searchBar = new QLineEdit(this); searchBar = new QLineEdit(this);
connect(searchBar, &QLineEdit::returnPressed, this, [=, this]() { connect(searchBar, &QLineEdit::returnPressed, this, [=, this]() {
if (!searchBar->hasFocus())
return;
CardInfoPtr card = CardDatabaseManager::getInstance()->getCard(searchBar->text()); CardInfoPtr card = CardDatabaseManager::getInstance()->getCard(searchBar->text());
if (card) { if (card) {
emit cardAdditionRequested(card); emit cardAdditionRequested(card);
} }
}); });
setFocusProxy(searchBar);
setFocusPolicy(Qt::ClickFocus);
cardDatabaseModel = new CardDatabaseModel(CardDatabaseManager::getInstance(), false, this); cardDatabaseModel = new CardDatabaseModel(CardDatabaseManager::getInstance(), false, this);
cardDatabaseDisplayModel = new CardDatabaseDisplayModel(this); cardDatabaseDisplayModel = new CardDatabaseDisplayModel(this);
cardDatabaseDisplayModel->setSourceModel(cardDatabaseModel); cardDatabaseDisplayModel->setSourceModel(cardDatabaseModel);

View file

@ -28,6 +28,7 @@ public:
void setDeckList(const DeckList &_deckListModel); void setDeckList(const DeckList &_deckListModel);
QLineEdit *searchBar;
CardSizeWidget *cardSizeWidget; CardSizeWidget *cardSizeWidget;
public slots: public slots:
@ -56,7 +57,6 @@ private:
QVBoxLayout *mainLayout; QVBoxLayout *mainLayout;
QWidget *searchContainer; QWidget *searchContainer;
QHBoxLayout *searchLayout; QHBoxLayout *searchLayout;
QLineEdit *searchBar;
CardDatabaseModel *cardDatabaseModel; CardDatabaseModel *cardDatabaseModel;
CardDatabaseDisplayModel *cardDatabaseDisplayModel; CardDatabaseDisplayModel *cardDatabaseDisplayModel;
CardCompleterProxyModel *proxyModel; CardCompleterProxyModel *proxyModel;