Skip to content

Commit

Permalink
#5634: Listen to app-activated events to inspect the system clipboard…
Browse files Browse the repository at this point in the history
… when switching back to DarkRadiant
  • Loading branch information
codereader committed Jun 10, 2021
1 parent 37b5eef commit fd77a0f
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 1 deletion.
3 changes: 3 additions & 0 deletions include/iclipboard.h
Expand Up @@ -25,6 +25,9 @@ class IClipboard :

/// Copy the given string to the system clipboard
virtual void setString(const std::string& str) = 0;

// A signal that is emitted when the contents of the system clipboard changes
virtual sigc::signal<void>& signal_clipboardContentChanged() = 0;
};

}
Expand Down
30 changes: 29 additions & 1 deletion radiant/clipboard/ClipboardModule.cpp
Expand Up @@ -2,6 +2,7 @@

#include "itextstream.h"
#include <wx/clipbrd.h>
#include <wx/app.h>

#include "module/StaticModule.h"

Expand Down Expand Up @@ -34,9 +35,17 @@ void ClipboardModule::setString(const std::string& str)
// This data objects are held by the clipboard, so do not delete them in the app.
wxTheClipboard->SetData(new wxTextDataObject(str));
wxTheClipboard->Close();

// Contents changed signal
_sigContentsChanged.emit();
}
}

sigc::signal<void>& ClipboardModule::signal_clipboardContentChanged()
{
return _sigContentsChanged;
}

const std::string& ClipboardModule::getName() const
{
static std::string _name(MODULE_CLIPBOARD);
Expand All @@ -45,13 +54,32 @@ const std::string& ClipboardModule::getName() const

const StringSet& ClipboardModule::getDependencies() const
{
static StringSet _dependencies;
static StringSet _dependencies;
return _dependencies;
}

void ClipboardModule::initialiseModule(const IApplicationContext& ctx)
{
rMessage() << getName() << "::initialiseModule called." << std::endl;

wxTheApp->Bind(wxEVT_ACTIVATE_APP, &ClipboardModule::onAppActivated, this);
}

void ClipboardModule::shutdownModule()
{
wxTheApp->Unbind(wxEVT_ACTIVATE_APP, &ClipboardModule::onAppActivated, this);
}

void ClipboardModule::onAppActivated(wxActivateEvent& ev)
{
if (ev.GetActive())
{
// Update the shader clipboard when the main window regains focus
// TODO
rMessage() << "App activated" << std::endl;
}

ev.Skip();
}

module::StaticModule<ClipboardModule> clipboardModule;
Expand Down
10 changes: 10 additions & 0 deletions radiant/clipboard/ClipboardModule.h
Expand Up @@ -2,19 +2,29 @@

#include "iclipboard.h"

class wxActivateEvent;

namespace ui
{

class ClipboardModule :
public radiant::IClipboard
{
private:
sigc::signal<void> _sigContentsChanged;

public:
std::string getString() override;
void setString(const std::string& str) override;
virtual sigc::signal<void>& signal_clipboardContentChanged() override;

const std::string& getName() const override;
const StringSet& getDependencies() const override;
void initialiseModule(const IApplicationContext& ctx) override;
void shutdownModule() override;

private:
void onAppActivated(wxActivateEvent& ev);
};

}
2 changes: 2 additions & 0 deletions radiant/ui/mainframe/ScreenUpdateBlocker.cpp
Expand Up @@ -127,6 +127,8 @@ void ScreenUpdateBlocker::onMainWindowFocus(wxFocusEvent& ev)
{
showModalProgressDialog();
}

ev.Skip();
}

void ScreenUpdateBlocker::onCloseEvent(wxCloseEvent& ev)
Expand Down

0 comments on commit fd77a0f

Please sign in to comment.