summaryrefslogtreecommitdiff
diff options
authorMirco Müller <mirco.mueller@ubuntu.com>2011-03-07 18:02:59 +0100
committerMirco Müller <mirco.mueller@ubuntu.com>2011-03-07 18:02:59 +0100
commitd4e6bce38765a0e9846b26fac7a35d17644e5428 (patch)
tree392cfe9f8f2229d37b1b1495893b658b03b89695
parent4ff82e4301432f581f72c351c054867f999294c0 (diff)
protect against application launching if user releases LMB (single finger hold) after the single-finger-hold duration-threshold was passed
(bzr r924.1.2)
-rw-r--r--src/Launcher.cpp50
-rw-r--r--src/Launcher.h1
2 files changed, 47 insertions, 4 deletions
diff --git a/src/Launcher.cpp b/src/Launcher.cpp
index f793cc663..1e5b12e21 100644
--- a/src/Launcher.cpp
+++ b/src/Launcher.cpp
@@ -305,6 +305,7 @@ Launcher::Launcher (nux::BaseWindow* parent,
_redraw_handle = 0;
_focus_keynav_handle = 0;
_single_finger_hold_handle = 0;
+ _single_finger_hold_timer = NULL;
_floating = false;
_hovered = false;
_hidden = false;
@@ -2867,6 +2868,10 @@ void Launcher::MouseDownLogic (int x, int y, unsigned long button_flags, unsigne
_single_finger_hold_handle = g_timeout_add (SINGLE_FINGER_HOLD_DURATION,
&Launcher::SingleFingerHoldTimeout,
this);
+ if (_single_finger_hold_timer)
+ g_timer_destroy (_single_finger_hold_timer);
+
+ _single_finger_hold_timer = g_timer_new ();
}
if (launcher_icon)
@@ -2882,11 +2887,48 @@ void Launcher::MouseUpLogic (int x, int y, unsigned long button_flags, unsigned
launcher_icon = MouseIconIntersection (_mouse_position.x, _mouse_position.y);
// this takes care of the one-finger-hold "event" on a launcher-icon
- if (_single_finger_hold_handle > 0)
+ if (_single_finger_hold_timer)
{
- g_source_remove (_single_finger_hold_handle);
- _single_finger_hold_handle = 0;
- return;
+ // user "released" before single-finger-hold threshold
+ if (g_timer_elapsed (_single_finger_hold_timer, NULL) < (float) SINGLE_FINGER_HOLD_DURATION / 1000.0)
+ {
+
+ // remove callback
+ if (_single_finger_hold_handle > 0)
+ {
+ g_source_remove (_single_finger_hold_handle);
+ _single_finger_hold_handle = 0;
+ }
+ }
+ // user "released" after single-finger-hold threshold...
+ else
+ {
+ // remove timer
+ g_timer_destroy (_single_finger_hold_timer);
+ _single_finger_hold_timer = NULL;
+
+ // remove callback
+ if (_single_finger_hold_handle > 0)
+ {
+ g_source_remove (_single_finger_hold_handle);
+ _single_finger_hold_handle = 0;
+ }
+
+ // ... don't start app, just return
+ _icon_mouse_down = 0;
+ return;
+ }
+
+ // remove timer
+ g_timer_destroy (_single_finger_hold_timer);
+ _single_finger_hold_timer = NULL;
+
+ // remove callback
+ if (_single_finger_hold_handle > 0)
+ {
+ g_source_remove (_single_finger_hold_handle);
+ _single_finger_hold_handle = 0;
+ }
}
if (_icon_mouse_down && (_icon_mouse_down == launcher_icon))
diff --git a/src/Launcher.h b/src/Launcher.h
index 8bf742000..758370162 100644
--- a/src/Launcher.h
+++ b/src/Launcher.h
@@ -462,6 +462,7 @@ private:
guint _focus_keynav_handle;
guint _redraw_handle;
guint _single_finger_hold_handle;
+ GTimer* _single_finger_hold_timer;
nux::Point2 _mouse_position;
nux::Point2 _trigger_mouse_position;