Skip to content

Commit

Permalink
Qt: Correct Browse... handling for multithreaded.
Browse files Browse the repository at this point in the history
  • Loading branch information
unknownbrackets committed Feb 17, 2019
1 parent 67884d6 commit 8b40f1a
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 22 deletions.
11 changes: 11 additions & 0 deletions Qt/QtMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#endif
#include "QtMain.h"
#include "gfx_es2/gpu_features.h"
#include "i18n/i18n.h"
#include "math/math_util.h"
#include "thread/threadutil.h"
#include "util/text/utf8.h"
Expand All @@ -42,6 +43,7 @@
MainUI *emugl = NULL;
static int refreshRate = 60000;
static int browseFileEvent = -1;
static int browseFolderEvent = -1;

#ifdef SDL
extern void mixaudio(void *userdata, Uint8 *stream, int len) {
Expand Down Expand Up @@ -115,6 +117,8 @@ void System_SendMessage(const char *command, const char *parameter) {
qApp->exit(0);
} else if (!strcmp(command, "browse_file")) {
QCoreApplication::postEvent(emugl, new QEvent((QEvent::Type)browseFileEvent));
} else if (!strcmp(command, "browse_folder")) {
QCoreApplication::postEvent(emugl, new QEvent((QEvent::Type)browseFolderEvent));
}
}

Expand Down Expand Up @@ -199,6 +203,7 @@ static int mainInternal(QApplication &a) {
#endif

browseFileEvent = QEvent::registerEventType();
browseFolderEvent = QEvent::registerEventType();

int retval = a.exec();
delete emugl;
Expand Down Expand Up @@ -409,6 +414,12 @@ bool MainUI::event(QEvent *e)
NativeMessageReceived("boot", fileName.toStdString().c_str());
}
break;
} else if (e->type() == browseFolderEvent) {
I18NCategory *mm = GetI18NCategory("MainMenu");
QString fileName = QFileDialog::getExistingDirectory(nullptr, mm->T("Choose folder"), g_Config.currentDirectory.c_str());
if (QDir(fileName).exists()) {
NativeMessageReceived("browse_folderSelect", fileName.toStdString().c_str());
}
} else {
return QWidget::event(e);
}
Expand Down
43 changes: 22 additions & 21 deletions UI/MainScreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,6 @@
#include "android/android-ndk-profiler/prof.h"
#endif

#ifdef USING_QT_UI
#include <QFileDialog>
#include <QFile>
#include <QDir>
#endif

#include <sstream>

bool MainScreen::showHomebrewTab = false;
Expand Down Expand Up @@ -447,12 +441,18 @@ GameBrowser::GameBrowser(std::string path, bool allowBrowsing, bool *gridStyle,
Refresh();
}

void GameBrowser::FocusGame(std::string gamePath) {
void GameBrowser::FocusGame(const std::string &gamePath) {
focusGamePath_ = gamePath;
Refresh();
focusGamePath_.clear();
}

void GameBrowser::SetPath(const std::string &path) {
path_.SetPath(path);
g_Config.currentDirectory = path_.GetPath();
Refresh();
}

UI::EventReturn GameBrowser::LayoutChange(UI::EventParams &e) {
*gridStyle_ = e.a == 0 ? true : false;
Refresh();
Expand All @@ -466,14 +466,9 @@ UI::EventReturn GameBrowser::LastClick(UI::EventParams &e) {

UI::EventReturn GameBrowser::HomeClick(UI::EventParams &e) {
#ifdef __ANDROID__
path_.SetPath(g_Config.memStickDirectory);
SetPath(g_Config.memStickDirectory);
#elif defined(USING_QT_UI)
I18NCategory *mm = GetI18NCategory("MainMenu");
QString fileName = QFileDialog::getExistingDirectory(NULL, "Browse for Folder", g_Config.currentDirectory.c_str());
if (QDir(fileName).exists())
path_.SetPath(fileName.toStdString());
else
return UI::EVENT_DONE;
System_SendMessage("browse_folder", "");
#elif defined(_WIN32)
#if PPSSPP_PLATFORM(UWP)
// TODO UWP
Expand All @@ -482,14 +477,12 @@ UI::EventReturn GameBrowser::HomeClick(UI::EventParams &e) {
std::string folder = W32Util::BrowseForFolder(MainWindow::GetHWND(), mm->T("Choose folder"));
if (!folder.size())
return UI::EVENT_DONE;
path_.SetPath(folder);
SetPath(folder);
#endif
#else
path_.SetPath(getenv("HOME"));
SetPath(getenv("HOME"));
#endif

g_Config.currentDirectory = path_.GetPath();
Refresh();
return UI::EVENT_DONE;
}

Expand Down Expand Up @@ -742,7 +735,7 @@ UI::EventReturn GameBrowser::GameButtonHighlight(UI::EventParams &e) {
}

UI::EventReturn GameBrowser::NavigateClick(UI::EventParams &e) {
DirButton *button = static_cast<DirButton *>(e.v);
DirButton *button = static_cast<DirButton *>(e.v);
std::string text = button->GetPath();
if (button->PathAbsolute()) {
path_.SetPath(text);
Expand Down Expand Up @@ -1004,8 +997,16 @@ void MainScreen::sendMessage(const char *message, const char *value) {
// Always call the base class method first to handle the most common messages.
UIScreenWithBackground::sendMessage(message, value);

if (!strcmp(message, "boot") && screenManager()->topScreen() == this) {
screenManager()->switchScreen(new EmuScreen(value));
if (screenManager()->topScreen() == this) {
if (!strcmp(message, "boot")) {
screenManager()->switchScreen(new EmuScreen(value));
}
if (!strcmp(message, "browse_folderSelect")) {
int tab = tabHolder_->GetCurrentTab();
if (tab >= 0 && tab < (int)gameBrowsers_.size()) {
gameBrowsers_[tab]->SetPath(value);
}
}
}
if (!strcmp(message, "permission_granted") && !strcmp(value, "storage")) {
RecreateViews();
Expand Down
3 changes: 2 additions & 1 deletion UI/MainScreen.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ class GameBrowser : public UI::LinearLayout {

UI::Choice *HomebrewStoreButton() { return homebrewStoreButton_; }

void FocusGame(std::string gamePath);
void FocusGame(const std::string &gamePath);
void SetPath(const std::string &path);

protected:
virtual bool DisplayTopBar();
Expand Down

0 comments on commit 8b40f1a

Please sign in to comment.