[haiku-commits] haiku: hrev56159 - src/apps/haikudepot/ui

  • From: Andrew Lindesay <apl@xxxxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 6 Jun 2022 07:29:20 +0000 (UTC)

hrev56159 adds 1 changeset to branch 'master'
old head: 85344c112ca7a226e2ada0f2887db9d6334292bc
new head: 846745705084a78440253e7b8c40591d26b8a59c
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=846745705084+%5E85344c112ca7

----------------------------------------------------------------------------

846745705084: HaikuDepot: Delayed Increment View Counter
  
  Performs the increment of the view counter
  after a delay of three seconds; otherwise
  a number of "false views" can be stored as
  people use keyboard navigation.
  
  Relates to #16879
  
  Change-Id: I6f3440e1e3132c832cd807e48105022d22df9abf
  Reviewed-on: https://review.haiku-os.org/c/haiku/+/5356
  Reviewed-by: Adrien Destugues <pulkomandy@xxxxxxxxx>
  Tested-by: Commit checker robot <no-reply+buildbot@xxxxxxxxxxxx>

                                    [ Andrew Lindesay <apl@xxxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev56159
Commit:      846745705084a78440253e7b8c40591d26b8a59c
URL:         https://git.haiku-os.org/haiku/commit/?id=846745705084
Author:      Andrew Lindesay <apl@xxxxxxxxxxxxxx>
Date:        Mon Jun  6 04:36:33 2022 UTC

Ticket:      https://dev.haiku-os.org/ticket/16879

----------------------------------------------------------------------------

2 files changed, 61 insertions(+), 5 deletions(-)
src/apps/haikudepot/ui/MainWindow.cpp | 60 ++++++++++++++++++++++++++++---
src/apps/haikudepot/ui/MainWindow.h   |  6 ++++

----------------------------------------------------------------------------

diff --git a/src/apps/haikudepot/ui/MainWindow.cpp 
b/src/apps/haikudepot/ui/MainWindow.cpp
index dae3f20ef7..1d37c34e37 100644
--- a/src/apps/haikudepot/ui/MainWindow.cpp
+++ b/src/apps/haikudepot/ui/MainWindow.cpp
@@ -24,6 +24,7 @@
 #include <LayoutBuilder.h>
 #include <MenuBar.h>
 #include <MenuItem.h>
+#include <MessageRunner.h>
 #include <Messenger.h>
 #include <Roster.h>
 #include <Screen.h>
@@ -71,6 +72,7 @@ enum {
        MSG_PROCESS_COORDINATOR_CHANGED                 = 'pccd',
        MSG_WORK_STATUS_CHANGE                                  = 'wsch',
        MSG_WORK_STATUS_CLEAR                                   = 'wscl',
+       MSG_INCREMENT_VIEW_COUNTER                              = 'icrv',
 
        MSG_CHANGE_PACKAGE_LIST_VIEW_MODE               = 'cplm',
        MSG_SHOW_AVAILABLE_PACKAGES                             = 'savl',
@@ -81,6 +83,8 @@ enum {
 
 #define KEY_ERROR_STATUS                               "errorStatus"
 
+const bigtime_t kIncrementViewCounterDelayMicros = 3 * 1000 * 1000;
+
 #define TAB_PROMINENT_PACKAGES 0
 #define TAB_ALL_PACKAGES               1
 
@@ -167,7 +171,8 @@ MainWindow::MainWindow(const BMessage& settings)
        fModelListener(new MainWindowModelListener(BMessenger(this)), true),
        fCoordinator(NULL),
        fShouldCloseWhenNoProcessesToCoordinate(false),
-       fSinglePackageMode(false)
+       fSinglePackageMode(false),
+       fIncrementViewCounterDelayedRunner(NULL)
 {
        if ((fCoordinatorRunningSem = create_sem(1, "ProcessCoordinatorSem")) < 
B_OK)
                debugger("unable to create the process coordinator semaphore");
@@ -265,7 +270,8 @@ MainWindow::MainWindow(const BMessage& settings, 
PackageInfoRef& package)
        fModelListener(new MainWindowModelListener(BMessenger(this)), true),
        fCoordinator(NULL),
        fShouldCloseWhenNoProcessesToCoordinate(false),
-       fSinglePackageMode(true)
+       fSinglePackageMode(true),
+       fIncrementViewCounterDelayedRunner(NULL)
 {
        if ((fCoordinatorRunningSem = create_sem(1, "ProcessCoordinatorSem")) < 
B_OK)
                debugger("unable to create the process coordinator semaphore");
@@ -499,8 +505,12 @@ MainWindow::MessageReceived(BMessage* message)
                                                name.String());
                                }
                        }
-               break;
-        }
+                       break;
+               }
+
+               case MSG_INCREMENT_VIEW_COUNTER:
+                       _HandleIncrementViewCounter(message);
+                       break;
 
                case MSG_PACKAGE_SELECTED:
                {
@@ -515,7 +525,7 @@ MainWindow::MessageReceived(BMessage* message)
                                        debugger("unable to find the named 
package");
                                else {
                                        _AdoptPackage(package);
-                                       _IncrementViewCounter(package);
+                                       
_SetupDelayedIncrementViewCounter(package);
                                }
                        } else {
                                _ClearPackage();
@@ -964,6 +974,46 @@ MainWindow::_AddRemovePackageFromLists(const 
PackageInfoRef& package)
 }
 
 
+void
+MainWindow::_SetupDelayedIncrementViewCounter(const PackageInfoRef package) {
+       if (fIncrementViewCounterDelayedRunner != NULL) {
+               fIncrementViewCounterDelayedRunner->SetCount(0);
+               delete fIncrementViewCounterDelayedRunner;
+       }
+       BMessage message(MSG_INCREMENT_VIEW_COUNTER);
+       message.SetString("name", package->Name());
+       fIncrementViewCounterDelayedRunner =
+               new BMessageRunner(BMessenger(this), &message,
+                       kIncrementViewCounterDelayMicros, 1);
+       if (fIncrementViewCounterDelayedRunner->InitCheck()
+                       != B_OK) {
+               HDERROR("unable to init the increment view counter");
+       }
+}
+
+
+void
+MainWindow::_HandleIncrementViewCounter(const BMessage* message)
+{
+       BString name;
+       if (message->FindString("name", &name) == B_OK) {
+               const PackageInfoRef& viewedPackage =
+                       fPackageInfoView->Package();
+               if (viewedPackage.IsSet()) {
+                       if (viewedPackage->Name() == name)
+                               _IncrementViewCounter(viewedPackage);
+                       else
+                               HDINFO("incr. view counter; name mismatch");
+               } else
+                       HDINFO("incr. view counter; no viewed pkg");
+       } else
+               HDERROR("incr. view counter; no name");
+       fIncrementViewCounterDelayedRunner->SetCount(0);
+       delete fIncrementViewCounterDelayedRunner;
+       fIncrementViewCounterDelayedRunner = NULL;
+}
+
+
 void
 MainWindow::_IncrementViewCounter(const PackageInfoRef package)
 {
diff --git a/src/apps/haikudepot/ui/MainWindow.h 
b/src/apps/haikudepot/ui/MainWindow.h
index 874ec135dd..a59380b66e 100644
--- a/src/apps/haikudepot/ui/MainWindow.h
+++ b/src/apps/haikudepot/ui/MainWindow.h
@@ -98,6 +98,10 @@ private:
                        void                            _AdoptPackage(const 
PackageInfoRef& package);
                        void                            _ClearPackage();
 
+                       void                            
_SetupDelayedIncrementViewCounter(
+                                                                       const 
PackageInfoRef package);
+                       void                            
_HandleIncrementViewCounter(
+                                                                       const 
BMessage* message);
                        void                            _IncrementViewCounter(
                                                                        const 
PackageInfoRef package);
 
@@ -185,6 +189,8 @@ private:
 
                        PackageInfoListenerRef
                                                                
fPackageInfoListener;
+
+                       BMessageRunner*         
fIncrementViewCounterDelayedRunner;
 };
 
 


Other related posts:

  • » [haiku-commits] haiku: hrev56159 - src/apps/haikudepot/ui - Andrew Lindesay