aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-09-15 19:09:22 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-09-15 19:09:22 +0000
commit1a24a61265d498ab3948c79c99efdc53f576dc61 (patch)
treeb639eb4c3faca784b281d256e8c0cc7828ca23f7
parentab254070bb91752d40dfc581e9c09f3816b7af0f (diff)
downloadqmmp-1a24a61265d498ab3948c79c99efdc53f576dc61.tar.gz
qmmp-1a24a61265d498ab3948c79c99efdc53f576dc61.tar.bz2
qmmp-1a24a61265d498ab3948c79c99efdc53f576dc61.zip
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
-rw-r--r--src/ui/button.cpp16
-rw-r--r--src/ui/button.h2
-rw-r--r--src/ui/togglebutton.cpp32
-rw-r--r--src/ui/togglebutton.h2
4 files changed, 47 insertions, 5 deletions
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 <QMouseEvent>
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 <QMouseEvent>
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*);
};