#include <fixx11h.h>
#endif
+MyFrame::MyFrame(QWidget* parent) :
+ QFrame(parent)
+{
+ setFrameStyle(QFrame::Box | QFrame::Plain);
+ setWindowOpacity(0.5);
+ setWindowFlags(Qt::FramelessWindowHint);
+}
+
+// virtual
+void MyFrame::hideEvent ( QHideEvent * event )
+{
+ QFrame::hideEvent(event);
+ // We need a timer here since hiding the frame will trigger a monitor refresh timer that will
+ // repaint the monitor after 70 ms.
+ QTimer::singleShot(250, this, SIGNAL(getColor()));
+}
+
ColorPickerWidget::ColorPickerWidget(QWidget *parent) :
QWidget(parent),
layout->addWidget(button);
setFocusPolicy(Qt::StrongFocus);
- m_grabRectFrame = new QFrame();
- m_grabRectFrame->setFrameStyle(QFrame::Box | QFrame::Plain);
- m_grabRectFrame->setWindowOpacity(0.5);
- m_grabRectFrame->setWindowFlags(Qt::FramelessWindowHint);
+ m_grabRectFrame = new MyFrame();
m_grabRectFrame->hide();
}
void ColorPickerWidget::slotGetAverageColor()
{
+ disconnect(m_grabRectFrame, SIGNAL(getColor()), this, SLOT(slotGetAverageColor()));
m_grabRect = m_grabRect.normalized();
int numPixel = m_grabRect.width() * m_grabRect.height();
emit displayMessage(i18n("Calculated average color for rectangle."), -1);
emit colorPicked(QColor(sumR / numPixel, sumG / numPixel, sumB / numPixel));
+ emit disableCurrentFilter(false);
}
void ColorPickerWidget::mousePressEvent(QMouseEvent* event)
{
if (event->button() != Qt::LeftButton) {
closeEventFilter();
+ emit disableCurrentFilter(false);
event->accept();
return;
}
void ColorPickerWidget::mouseReleaseEvent(QMouseEvent *event)
{
if (m_filterActive) {
- m_grabRectFrame->hide();
-
closeEventFilter();
m_grabRect.setWidth(event->globalX() - m_grabRect.x());
m_grabRect.setHeight(event->globalY() - m_grabRect.y());
if (m_grabRect.width() * m_grabRect.height() == 0) {
+ m_grabRectFrame->hide();
emit colorPicked(grabColor(event->globalPos()));
+ emit disableCurrentFilter(false);
} else {
// delay because m_grabRectFrame does not hide immediately
- QTimer::singleShot(50, this, SLOT(slotGetAverageColor()));
+ connect(m_grabRectFrame, SIGNAL(getColor()), this, SLOT(slotGetAverageColor()));
+ m_grabRectFrame->hide();
}
-
return;
}
QWidget::mouseReleaseEvent(event);
void ColorPickerWidget::slotSetupEventFilter()
{
+ emit disableCurrentFilter(true);
m_filterActive = true;
setFocus();
installEventFilter(this);
// Close color picker on any key press
if (event->type() == QEvent::KeyPress || event->type() == QEvent::ShortcutOverride) {
closeEventFilter();
+ emit disableCurrentFilter(false);
event->setAccepted(true);
return true;
}