[haiku-commits] haiku: hrev46930 - src/apps/packageinstaller

  • From: superstippi@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 25 Feb 2014 22:34:58 +0100 (CET)

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;
 


Other related posts:

  • » [haiku-commits] haiku: hrev46930 - src/apps/packageinstaller - superstippi