hrev46930 adds 1 changeset to branch 'master' old head: 91e3737dd8a7b24cb60d13c5d7cc66ad4c175934 new head: 792a46db79db1f22b8183ea6994aac44771147f1 overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=792a46d+%5E91e3737 ---------------------------------------------------------------------------- 792a46d: PackageInstaller: Unbreak selecting custom install folders. BFilePanel always sends B_CANCEL when it hides (as documented in the BeBook), not just when the user cancels the file panel. Track what message we expect and only react to B_CANCEL when it means the user really canceled selecting the target folder. [ Stephan Aßmus <superstippi@xxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev46930 Commit: 792a46db79db1f22b8183ea6994aac44771147f1 URL: http://cgit.haiku-os.org/haiku/commit/?id=792a46d Author: Stephan Aßmus <superstippi@xxxxxx> Date: Tue Feb 25 21:31:58 2014 UTC ---------------------------------------------------------------------------- 2 files changed, 23 insertions(+) src/apps/packageinstaller/PackageView.cpp | 19 +++++++++++++++++++ src/apps/packageinstaller/PackageView.h | 4 ++++ ---------------------------------------------------------------------------- diff --git a/src/apps/packageinstaller/PackageView.cpp b/src/apps/packageinstaller/PackageView.cpp index a9520fd..dc1411f 100644 --- a/src/apps/packageinstaller/PackageView.cpp +++ b/src/apps/packageinstaller/PackageView.cpp @@ -73,6 +73,7 @@ PackageView::PackageView(const entry_ref* ref) BView("package_view", 0), fOpenPanel(new BFilePanel(B_OPEN_PANEL, NULL, NULL, B_DIRECTORY_NODE, false)), + fExpectingOpenPanelResult(false), fInfo(ref), fInstallProcess(this) { @@ -180,6 +181,7 @@ PackageView::MessageReceived(BMessage* message) } case P_MSG_OPEN_PANEL: + fExpectingOpenPanelResult = true; fOpenPanel->Show(); break; @@ -266,6 +268,9 @@ PackageView::MessageReceived(BMessage* message) case B_REFS_RECEIVED: { + if (!_ValidateFilePanelMessage(message)) + break; + entry_ref ref; if (message->FindRef("refs", &ref) == B_OK) { BPath path(&ref); @@ -290,6 +295,9 @@ PackageView::MessageReceived(BMessage* message) case B_CANCEL: { + if (!_ValidateFilePanelMessage(message)) + break; + // file panel aborted, select first suitable item for (int32 i = 0; i < fDestination->CountItems(); i++) { BMenuItem* item = fDestination->ItemAt(i); @@ -723,3 +731,14 @@ PackageView::_AddMenuItem(const char* name, BMessage* message, menu->AddItem(item); return item; } + + +bool +PackageView::_ValidateFilePanelMessage(BMessage* message) +{ + if (!fExpectingOpenPanelResult) + return false; + + fExpectingOpenPanelResult = false; + return true; +} diff --git a/src/apps/packageinstaller/PackageView.h b/src/apps/packageinstaller/PackageView.h index 29439ba..8ff6058 100644 --- a/src/apps/packageinstaller/PackageView.h +++ b/src/apps/packageinstaller/PackageView.h @@ -66,6 +66,8 @@ private: BMenuItem* _AddMenuItem(const char* name, BMessage* message, BMenu* menu) const; + bool _ValidateFilePanelMessage(BMessage* message); + private: BPopUpMenu* fInstallTypes; BTextView* fInstallTypeDescriptionView; @@ -74,6 +76,8 @@ private: BButton* fBeginButton; BFilePanel* fOpenPanel; + bool fExpectingOpenPanelResult; + BPath fCurrentPath; uint32 fCurrentType;