aboutsummaryrefslogtreecommitdiff
path: root/gui/remotebrowser.cpp
diff options
context:
space:
mode:
authorAlexander Tkachev2016-07-04 13:05:15 +0600
committerAlexander Tkachev2016-08-24 16:07:55 +0600
commit51a7232c73b1f6c04103716cae88b3781fd8ab33 (patch)
tree7e5125e46c4662993dd89173f200661f02d38cbf /gui/remotebrowser.cpp
parent73bb2e20afdd625998a1438adf29e5d9dbaa2929 (diff)
downloadscummvm-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.cpp26
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;