[vlc-commits] skins2(win): fix mouse wheel ineffective on Windows
Erwan Tulou
git at videolan.org
Thu Mar 22 22:24:02 CET 2012
vlc | branch: master | Erwan Tulou <erwan10 at videolan.org> | Thu Mar 22 18:27:09 2012 +0100| [f3afffbc05eea48ef29191b169859b17e3f4b994] | committer: Erwan Tulou
skins2(win): fix mouse wheel ineffective on Windows
This patch adds isScrollable() to a control, so that we can distinguish
controls that require mouse wheel (playtree, slider) from those that don't.
In the latter case, we can then forward events to vlc core.
this fixes #6457.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f3afffbc05eea48ef29191b169859b17e3f4b994
---
modules/gui/skins2/controls/ctrl_generic.hpp | 3 +++
modules/gui/skins2/controls/ctrl_list.hpp | 3 +++
modules/gui/skins2/controls/ctrl_slider.hpp | 6 ++++++
modules/gui/skins2/controls/ctrl_tree.hpp | 3 +++
modules/gui/skins2/src/top_window.cpp | 15 ++++++---------
5 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/modules/gui/skins2/controls/ctrl_generic.hpp b/modules/gui/skins2/controls/ctrl_generic.hpp
index ee7afeb..591c8e5 100644
--- a/modules/gui/skins2/controls/ctrl_generic.hpp
+++ b/modules/gui/skins2/controls/ctrl_generic.hpp
@@ -81,6 +81,9 @@ public:
/// Return true if the control can gain the focus
virtual bool isFocusable() const { return false; }
+ /// Return true if the control can be scrollable
+ virtual bool isScrollable() const { return false; }
+
/// Return true if the control is visible
virtual bool isVisible() const;
diff --git a/modules/gui/skins2/controls/ctrl_list.hpp b/modules/gui/skins2/controls/ctrl_list.hpp
index fcfb33e..1f7e5c8 100644
--- a/modules/gui/skins2/controls/ctrl_list.hpp
+++ b/modules/gui/skins2/controls/ctrl_list.hpp
@@ -61,6 +61,9 @@ public:
/// Return true if the control can gain the focus
virtual bool isFocusable() const { return true; }
+ /// Return true if the control can be scrollable
+ virtual bool isScrollable() const { return true; }
+
/// Get the type of control (custom RTTI)
virtual string getType() const { return "list"; }
diff --git a/modules/gui/skins2/controls/ctrl_slider.hpp b/modules/gui/skins2/controls/ctrl_slider.hpp
index df010a5..bae216f 100644
--- a/modules/gui/skins2/controls/ctrl_slider.hpp
+++ b/modules/gui/skins2/controls/ctrl_slider.hpp
@@ -55,6 +55,9 @@ public:
/// Handle an event
virtual void handleEvent( EvtGeneric &rEvent );
+ /// Return true if the control can be scrollable
+ virtual bool isScrollable() const { return true; }
+
/// Check whether coordinates are inside the control
virtual bool mouseOver( int x, int y ) const;
@@ -132,6 +135,9 @@ public:
const UString &rHelp );
virtual ~CtrlSliderBg();
+ /// Return true if the control can be scrollable
+ virtual bool isScrollable() const { return true; }
+
/// Tell whether the mouse is over the control
virtual bool mouseOver( int x, int y ) const;
diff --git a/modules/gui/skins2/controls/ctrl_tree.hpp b/modules/gui/skins2/controls/ctrl_tree.hpp
index cc5972c..6044716 100644
--- a/modules/gui/skins2/controls/ctrl_tree.hpp
+++ b/modules/gui/skins2/controls/ctrl_tree.hpp
@@ -71,6 +71,9 @@ public:
/// Return true if the control can gain the focus
virtual bool isFocusable() const { return true; }
+ /// Return true if the control can be scrollable
+ virtual bool isScrollable() const { return true; }
+
/// Get the type of control (custom RTTI)
virtual string getType() const { return "tree"; }
diff --git a/modules/gui/skins2/src/top_window.cpp b/modules/gui/skins2/src/top_window.cpp
index 2579c2e..2cadcb2 100644
--- a/modules/gui/skins2/src/top_window.cpp
+++ b/modules/gui/skins2/src/top_window.cpp
@@ -247,17 +247,14 @@ void TopWindow::processEvent( EvtScroll &rEvtScroll )
rEvtScroll.getYPos());
setLastHit( pNewHitControl );
- // Send a mouse event to the hit control, or to the control
- // that captured the mouse, if any
- CtrlGeneric *pActiveControl = pNewHitControl;
+ // send a mouse event to the right control when scrollable
+ // if none, send it directly to the vlc core
+ CtrlGeneric *pHitControl = m_pCapturingControl ?
+ m_pCapturingControl : pNewHitControl;
- if( m_pCapturingControl )
- {
- pActiveControl = m_pCapturingControl;
- }
- if( pActiveControl )
+ if( pHitControl && pHitControl->isScrollable() )
{
- pActiveControl->handleEvent( rEvtScroll );
+ pHitControl->handleEvent( rEvtScroll );
}
else
{
More information about the vlc-commits
mailing list