diff options
author | Alexander Tkachev | 2016-07-04 13:05:15 +0600 |
---|---|---|
committer | Alexander Tkachev | 2016-08-24 16:07:55 +0600 |
commit | 51a7232c73b1f6c04103716cae88b3781fd8ab33 (patch) | |
tree | 7e5125e46c4662993dd89173f200661f02d38cbf /gui/remotebrowser.cpp | |
parent | 73bb2e20afdd625998a1438adf29e5d9dbaa2929 (diff) | |
download | scummvm-rg350-51a7232c73b1f6c04103716cae88b3781fd8ab33.tar.gz scummvm-rg350-51a7232c73b1f6c04103716cae88b3781fd8ab33.tar.bz2 scummvm-rg350-51a7232c73b1f6c04103716cae88b3781fd8ab33.zip |
GUI: Fix RemoteBrowser Request handling
Init with NULL, ignore callbacks, and such.
Diffstat (limited to 'gui/remotebrowser.cpp')
-rw-r--r-- | gui/remotebrowser.cpp | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/gui/remotebrowser.cpp b/gui/remotebrowser.cpp index fac0b02e35..995e6a654c 100644 --- a/gui/remotebrowser.cpp +++ b/gui/remotebrowser.cpp @@ -40,7 +40,7 @@ enum { }; RemoteBrowserDialog::RemoteBrowserDialog(const char *title) - : Dialog("Browser"), _navigationLocked(false), _updateList(false) { + : Dialog("Browser"), _navigationLocked(false), _updateList(false), _workingRequest(nullptr), _ignoreCallback(false) { _backgroundType = GUI::ThemeEngine::kDialogBackgroundPlain; new StaticTextWidget(this, "Browser.Headline", title); @@ -58,11 +58,27 @@ RemoteBrowserDialog::RemoteBrowserDialog(const char *title) new ButtonWidget(this, "Browser.Choose", _("Choose"), 0, kChooseCmd); } +RemoteBrowserDialog::~RemoteBrowserDialog() { + if (_workingRequest) { + _ignoreCallback = true; + _workingRequest->finish(); + } +} + void RemoteBrowserDialog::open() { Dialog::open(); listDirectory(Cloud::StorageFile()); } +void RemoteBrowserDialog::close() { + Dialog::close(); + if (_workingRequest) { + _ignoreCallback = true; + _workingRequest->finish(); + _ignoreCallback = false; + } +} + void RemoteBrowserDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) { switch (cmd) { case kChooseCmd: { @@ -154,7 +170,7 @@ void RemoteBrowserDialog::goUp() { } void RemoteBrowserDialog::listDirectory(Cloud::StorageFile node) { - if (_navigationLocked) return; + if (_navigationLocked || _workingRequest) return; _navigationLocked = true; _workingRequest = CloudMan.listDirectory( @@ -170,12 +186,18 @@ void RemoteBrowserDialog::listDirectory(Cloud::StorageFile node) { } void RemoteBrowserDialog::directoryListedCallback(Cloud::Storage::ListDirectoryResponse response) { + _workingRequest = nullptr; + if (_ignoreCallback) return; + _navigationLocked = false; _nodeContent = response.value; _updateList = true; } void RemoteBrowserDialog::directoryListedErrorCallback(Networking::ErrorResponse error) { + _workingRequest = nullptr; + if (_ignoreCallback) return; + _navigationLocked = false; _node = _backupNode; _updateList = true; |