From Andrew Lindesay <apl@xxxxxxxxxxxxxx>:
Andrew Lindesay has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/5356 ;)
Change subject: HaikuDepot: Delayed Increment View Counter
......................................................................
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
---
M src/apps/haikudepot/ui/MainWindow.cpp
M src/apps/haikudepot/ui/MainWindow.h
2 files changed, 61 insertions(+), 5 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/56/5356/1
diff --git a/src/apps/haikudepot/ui/MainWindow.cpp
b/src/apps/haikudepot/ui/MainWindow.cpp
index dae3f20..1d37c34 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 @@
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 @@
#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 @@
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 @@
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 @@
name.String());
}
}
- break;
- }
+ break;
+ }
+
+ case MSG_INCREMENT_VIEW_COUNTER:
+ _HandleIncrementViewCounter(message);
+ break;
case MSG_PACKAGE_SELECTED:
{
@@ -515,7 +525,7 @@
debugger("unable to find the named
package");
else {
_AdoptPackage(package);
- _IncrementViewCounter(package);
+
_SetupDelayedIncrementViewCounter(package);
}
} else {
_ClearPackage();
@@ -965,6 +975,46 @@
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)
{
bool shouldIncrementViewCounter = false;
diff --git a/src/apps/haikudepot/ui/MainWindow.h
b/src/apps/haikudepot/ui/MainWindow.h
index 874ec13..a59380b 100644
--- a/src/apps/haikudepot/ui/MainWindow.h
+++ b/src/apps/haikudepot/ui/MainWindow.h
@@ -98,6 +98,10 @@
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 @@
PackageInfoListenerRef
fPackageInfoListener;
+
+ BMessageRunner*
fIncrementViewCounterDelayedRunner;
};
--
To view, visit https://review.haiku-os.org/c/haiku/+/5356
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I6f3440e1e3132c832cd807e48105022d22df9abf
Gerrit-Change-Number: 5356
Gerrit-PatchSet: 1
Gerrit-Owner: Andrew Lindesay <apl@xxxxxxxxxxxxxx>
Gerrit-MessageType: newchange