From 26b17f8435c4132f5a85039e8223791fdbeb6c61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Sun, 20 Sep 2026 19:28:26 +0200 Subject: [PATCH] [DeckShare] Wire the status-changed handler after shareBar exists handleConnectionChanged() dereferences shareBar->isVisible(), but the connection was set up before shareBar was constructed and shareBar had no in-class initializer. On any status change delivered before construction the slot read an indeterminate pointer. Seed the connection (and the initial share availability) after shareBar exists and give shareBar a = nullptr initializer. --- .../tabs/visual_deck_storage/tab_deck_storage_visual.cpp | 8 ++++---- .../tabs/visual_deck_storage/tab_deck_storage_visual.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp b/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp index d42740cb0..cb4a440d7 100644 --- a/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp +++ b/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp @@ -38,10 +38,6 @@ TabDeckStorageVisual::TabDeckStorageVisual(TabSupervisor *_tabSupervisor, Abstra } }); - connect(client, &AbstractClient::statusChanged, this, &TabDeckStorageVisual::handleConnectionChanged); - shareDeckAvailable = (client->getStatus() == StatusLoggedIn); - visualDeckStorageWidget->setShareAvailable(shareDeckAvailable); - auto *widget = new QWidget(this); auto *layout = new QVBoxLayout(widget); layout->setContentsMargins(0, 0, 0, 0); @@ -57,6 +53,10 @@ TabDeckStorageVisual::TabDeckStorageVisual(TabSupervisor *_tabSupervisor, Abstra layout->insertWidget(0, shareBar); shareBar->setVisible(false); + connect(client, &AbstractClient::statusChanged, this, &TabDeckStorageVisual::handleConnectionChanged); + shareDeckAvailable = (client->getStatus() == StatusLoggedIn); + visualDeckStorageWidget->setShareAvailable(shareDeckAvailable); + shareTimeoutTimer->setSingleShot(true); shareTimeoutTimer->setInterval( static_cast((static_cast(SettingsCache::instance().network().getTimeOut()) + 1) * diff --git a/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.h b/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.h index 1878ae9e8..7cd4e7d17 100644 --- a/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.h +++ b/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.h @@ -74,7 +74,7 @@ private: VisualDeckStorageWidget *visualDeckStorageWidget; - ShareBarWidget *shareBar; + ShareBarWidget *shareBar = nullptr; AbstractClient *client; QTimer *shareTimeoutTimer; int shareRequestSeq = 0;