From 08f3a56285db12e88a3d49568d39afd7d1241484 Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Wed, 26 Mar 2025 17:54:34 -0700 Subject: [PATCH] Fix crash when right click floating card info window (#5773) --- cockatrice/resources/config/qtlogging.ini | 2 ++ .../widgets/cards/card_info_picture_widget.cpp | 17 ++++++++++++++++- .../ui/widgets/cards/card_info_picture_widget.h | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/cockatrice/resources/config/qtlogging.ini b/cockatrice/resources/config/qtlogging.ini index a9f8dd893..33ce214d5 100644 --- a/cockatrice/resources/config/qtlogging.ini +++ b/cockatrice/resources/config/qtlogging.ini @@ -51,6 +51,8 @@ #flow_widget = false #flow_widget.size = false +# card_info_picture_widget = false + # pixel_map_generator = false # filter_string = false diff --git a/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.cpp b/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.cpp index 546568a73..f4f699171 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.cpp @@ -312,11 +312,26 @@ QMenu *CardInfoPictureWidget::createViewRelatedCardsMenu() return viewRelatedCards; } +/** + * Finds the single instance of the MainWindow in this application. + */ +static MainWindow *findMainWindow() +{ + for (auto widget : QApplication::topLevelWidgets()) { + if (auto mainWindow = qobject_cast(widget)) { + return mainWindow; + } + } + // This code should be unreachable + qCritical() << "Could not find MainWindow in QApplication::topLevelWidgets"; + return nullptr; +} + QMenu *CardInfoPictureWidget::createAddToOpenDeckMenu() { auto addToOpenDeckMenu = new QMenu(tr("Add card to deck")); - auto *mainWindow = qobject_cast(window()); + auto mainWindow = findMainWindow(); QList deckEditorTabs = mainWindow->getTabSupervisor()->getDeckEditorTabs(); if (deckEditorTabs.isEmpty()) { diff --git a/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.h b/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.h index 5f6500d92..a74028a7f 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.h +++ b/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.h @@ -7,6 +7,8 @@ #include #include +inline Q_LOGGING_CATEGORY(CardInfoPictureWidgetLog, "card_info_picture_widget"); + class AbstractCardItem; class QMenu;