Skip to content

Commit

Permalink
#5200: Introduce "UI shutting down" signal to replace most of the UI-…
Browse files Browse the repository at this point in the history
…related code registering to onRadiantShutdown.
  • Loading branch information
codereader committed Aug 28, 2020
1 parent ef6aa92 commit fb3a30e
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 4 deletions.
9 changes: 9 additions & 0 deletions include/imainframe.h
Expand Up @@ -125,6 +125,15 @@ class IMainFrame :
* automatically removed by this class.
*/
virtual sigc::signal<void>& signal_MainFrameReady() = 0;

/**
* Signal fired when the UI is shutting down, right before the MainFrame
* window will be destroyed. Dependant UI modules can listen to this
* event to get a chance to clean up and save their state.
* This is a one-time signal, after emission the subscribers will be
* automatically removed by this class.
*/
virtual sigc::signal<void>& signal_MainFrameShuttingDown() = 0;
};

// This is the accessor for the mainframe module
Expand Down
1 change: 0 additions & 1 deletion radiant/RadiantModule.h
@@ -1,7 +1,6 @@
#pragma once

#include "iradiant.h"
#include "messages/CommandExecutionFailed.h"
#include <memory>

namespace radiant
Expand Down
15 changes: 12 additions & 3 deletions radiant/ui/mainframe/MainFrame.cpp
Expand Up @@ -307,9 +307,6 @@ void MainFrame::preDestructionCleanup()
{
removeLayout();
}

// Broadcast shutdown event to RadiantListeners
radiant::getGlobalRadiant()->broadcastShutdownEvent();
}

void MainFrame::updateTitle()
Expand Down Expand Up @@ -353,6 +350,13 @@ void MainFrame::onTopLevelFrameClose(wxCloseEvent& ev)
// present
preDestructionCleanup();

// Broadcast shutdown event
signal_MainFrameShuttingDown().emit();
signal_MainFrameShuttingDown().clear();

// TODO: Remove this
radiant::getGlobalRadiant()->broadcastShutdownEvent();

// Destroy the actual window
_topLevelWindow->Destroy();

Expand Down Expand Up @@ -565,6 +569,11 @@ sigc::signal<void>& MainFrame::signal_MainFrameReady()
return _sigMainFrameReady;
}

sigc::signal<void>& MainFrame::signal_MainFrameShuttingDown()
{
return _sigMainFrameShuttingDown;
}

// Define the static MainFrame module
module::StaticModule<MainFrame> mainFrameModule;

Expand Down
2 changes: 2 additions & 0 deletions radiant/ui/mainframe/MainFrame.h
Expand Up @@ -30,6 +30,7 @@ class MainFrame :

sigc::signal<void> _sigMainFrameConstructed;
sigc::signal<void> _sigMainFrameReady;
sigc::signal<void> _sigMainFrameShuttingDown;

private:
void keyChanged();
Expand Down Expand Up @@ -64,6 +65,7 @@ class MainFrame :

sigc::signal<void>& signal_MainFrameConstructed() override;
sigc::signal<void>& signal_MainFrameReady() override;
sigc::signal<void>& signal_MainFrameShuttingDown() override;

// Command to toggle the current layout's camera fullscreen mode
void toggleFullscreenCameraView(const cmd::ArgumentList& args);
Expand Down

0 comments on commit fb3a30e

Please sign in to comment.