From 1a24a61265d498ab3948c79c99efdc53f576dc61 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Tue, 15 Sep 2009 19:09:22 +0000 Subject: fixed button focus behavior (patch by erlk.ozlr AT gmail.com) git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1224 90c681e8-e032-0410-971d-27865f9a5e38 --- src/ui/button.cpp | 16 +++++++++++++++- src/ui/button.h | 2 ++ src/ui/togglebutton.cpp | 32 ++++++++++++++++++++++++++++---- src/ui/togglebutton.h | 2 ++ 4 files changed, 47 insertions(+), 5 deletions(-) (limited to 'src/ui') diff --git a/src/ui/button.cpp b/src/ui/button.cpp index b9ee9cf09..4ec67ac4d 100644 --- a/src/ui/button.cpp +++ b/src/ui/button.cpp @@ -23,6 +23,7 @@ #include "button.h" #include "skin.h" +#include Button::Button (QWidget *parent, uint normal, uint pressed) : PixmapWidget (parent) @@ -53,11 +54,24 @@ void Button::setON (bool on) void Button::mousePressEvent (QMouseEvent *e) { setON (TRUE); + m_cursorin = TRUE; QWidget::mousePressEvent(e); } void Button::mouseReleaseEvent (QMouseEvent*) { setON (FALSE); - emit clicked(); + if (m_cursorin) + emit clicked(); +} + +void Button::mouseMoveEvent (QMouseEvent *e) +{ + if ( !m_cursorin && rect().contains(e->pos()) ) { + m_cursorin = TRUE; + setON (TRUE); + } else if ( m_cursorin && !rect().contains(e->pos()) ) { + m_cursorin = FALSE; + setON (FALSE); + } } diff --git a/src/ui/button.h b/src/ui/button.h index 7f2d8f314..dea4ecced 100644 --- a/src/ui/button.h +++ b/src/ui/button.h @@ -43,12 +43,14 @@ private slots: private: Skin *skin; + bool m_cursorin; void setON(bool); uint name_normal, name_pressed; protected: void mousePressEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); + void mouseMoveEvent(QMouseEvent*); }; #endif diff --git a/src/ui/togglebutton.cpp b/src/ui/togglebutton.cpp index 26dd91195..e5860f958 100644 --- a/src/ui/togglebutton.cpp +++ b/src/ui/togglebutton.cpp @@ -23,7 +23,7 @@ #include "skin.h" #include "togglebutton.h" - +#include ToggleButton::ToggleButton ( QWidget *parent,uint on_n,uint on_p,uint off_n,uint off_p ) : PixmapWidget ( parent ) @@ -70,6 +70,8 @@ void ToggleButton::setON ( bool on ) } void ToggleButton::mousePressEvent ( QMouseEvent* ) { + m_cursorin = TRUE; + m_old_on = m_on; if ( m_on ) setPixmap ( skin->getButton ( m_off_p ) ); else @@ -78,7 +80,29 @@ void ToggleButton::mousePressEvent ( QMouseEvent* ) void ToggleButton::mouseReleaseEvent ( QMouseEvent* ) { - m_on = !m_on; - setON ( m_on ); - emit clicked( m_on ); + if ( m_cursorin ) { + m_on = !m_old_on; + setON ( m_on ); + emit clicked( m_on ); + } else { + m_on = m_old_on; + setON ( m_on ); + } +} + +void ToggleButton::mouseMoveEvent (QMouseEvent *e) +{ + if ( !m_cursorin && rect().contains(e->pos()) ) { + m_cursorin = TRUE; + if ( m_old_on ) + setPixmap ( skin->getButton ( m_off_p ) ); + else + setPixmap ( skin->getButton ( m_on_p ) ); + } else if ( m_cursorin && !rect().contains(e->pos()) ) { + m_cursorin = FALSE; + if ( m_old_on ) + setPixmap ( skin->getButton ( m_on_n ) ); + else + setPixmap ( skin->getButton ( m_off_n ) ); + } } diff --git a/src/ui/togglebutton.h b/src/ui/togglebutton.h index 754d5fc32..220d427cc 100644 --- a/src/ui/togglebutton.h +++ b/src/ui/togglebutton.h @@ -49,12 +49,14 @@ private slots: private: Skin *skin; + bool m_cursorin, m_old_on; uint m_on_n, m_on_p, m_off_n, m_off_p; bool m_on; protected: void mousePressEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); + void mouseMoveEvent(QMouseEvent*); }; -- cgit v1.2.3-13-gbd6f