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;
};