diff options
| author | Mirco Müller <mirco.mueller@ubuntu.com> | 2011-03-07 18:02:59 +0100 |
|---|---|---|
| committer | Mirco Müller <mirco.mueller@ubuntu.com> | 2011-03-07 18:02:59 +0100 |
| commit | d4e6bce38765a0e9846b26fac7a35d17644e5428 (patch) | |
| tree | 392cfe9f8f2229d37b1b1495893b658b03b89695 | |
| parent | 4ff82e4301432f581f72c351c054867f999294c0 (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.cpp | 50 | ||||
| -rw-r--r-- | src/Launcher.h | 1 |
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; |
