aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2025-01-23 21:49:07 +0100
committerdec05eba <dec05eba@protonmail.com>2025-01-23 21:49:07 +0100
commit5b84d7421f44c8bc00999071f2b3d46d238a9946 (patch)
treeb4cfc25421b4935dd55a5b191a83a6b04b2132ed
parent1d9d4d6398e989d0628cb4dab0273293b79b4816 (diff)
Fix controller double click not working sometimes1.1.0
-rw-r--r--include/GlobalHotkeysJoystick.hpp3
-rw-r--r--meson.build2
-rw-r--r--src/GlobalHotkeysJoystick.cpp23
3 files changed, 17 insertions, 11 deletions
diff --git a/include/GlobalHotkeysJoystick.hpp b/include/GlobalHotkeysJoystick.hpp
index 367de18..69f66df 100644
--- a/include/GlobalHotkeysJoystick.hpp
+++ b/include/GlobalHotkeysJoystick.hpp
@@ -3,6 +3,7 @@
#include "GlobalHotkeys.hpp"
#include "Hotplug.hpp"
#include <unordered_map>
+#include <optional>
#include <thread>
#include <poll.h>
#include <mglpp/system/Clock.hpp>
@@ -45,7 +46,7 @@ namespace gsr {
int event_index = -1;
mgl::Clock double_click_clock;
- int num_times_clicked = 0;
+ std::optional<double> prev_time_clicked;
bool save_replay = false;
int hotplug_poll_index = -1;
Hotplug hotplug;
diff --git a/meson.build b/meson.build
index a16933d..333ad48 100644
--- a/meson.build
+++ b/meson.build
@@ -52,7 +52,7 @@ datadir = get_option('datadir')
gsr_ui_resources_path = join_paths(prefix, datadir, 'gsr-ui')
add_project_arguments('-DGSR_UI_VERSION="' + meson.project_version() + '"', language: ['c', 'cpp'])
-add_project_arguments('-DGSR_FLATPAK_VERSION="5.0.10"', language: ['c', 'cpp'])
+add_project_arguments('-DGSR_FLATPAK_VERSION="5.1.0"', language: ['c', 'cpp'])
executable(
meson.project_name(),
diff --git a/src/GlobalHotkeysJoystick.cpp b/src/GlobalHotkeysJoystick.cpp
index 55c6e43..b79e799 100644
--- a/src/GlobalHotkeysJoystick.cpp
+++ b/src/GlobalHotkeysJoystick.cpp
@@ -155,15 +155,20 @@ namespace gsr {
return;
if(event.number == 8 && event.value == 1) {
- ++num_times_clicked;
- if(num_times_clicked == 1)
- double_click_clock.restart();
- else if(num_times_clicked == 2 && double_click_clock.restart() >= double_click_timeout_seconds)
- num_times_clicked = 0;
-
- if(num_times_clicked == 2) {
- save_replay = true;
- num_times_clicked = 0;
+ const double now = double_click_clock.get_elapsed_time_seconds();
+ if(!prev_time_clicked.has_value()) {
+ prev_time_clicked = now;
+ return;
+ }
+
+ if(prev_time_clicked.has_value()) {
+ const bool double_clicked = (now - prev_time_clicked.value()) < double_click_timeout_seconds;
+ if(double_clicked) {
+ save_replay = true;
+ prev_time_clicked.reset();
+ } else {
+ prev_time_clicked = now;
+ }
}
}
}