parent
a95ec851d4
commit
2db8b29ef9
5 changed files with 118 additions and 76 deletions
@ -0,0 +1,67 @@ |
||||
|
||||
|
||||
#include "AutoScrollHandler.h" |
||||
#include <QApplication> |
||||
#include <QAccessible> |
||||
|
||||
using namespace Konsole; |
||||
|
||||
AutoScrollHandler::AutoScrollHandler(QWidget* parent) |
||||
: QObject(parent) |
||||
, _timerId(0) |
||||
{ |
||||
parent->installEventFilter(this); |
||||
} |
||||
|
||||
void AutoScrollHandler::timerEvent(QTimerEvent* event) |
||||
{ |
||||
if (event->timerId() != _timerId) { |
||||
return; |
||||
} |
||||
|
||||
QMouseEvent mouseEvent(QEvent::MouseMove, |
||||
widget()->mapFromGlobal(QCursor::pos()), |
||||
Qt::NoButton, |
||||
Qt::LeftButton, |
||||
Qt::NoModifier); |
||||
|
||||
QApplication::sendEvent(widget(), &mouseEvent); |
||||
} |
||||
|
||||
bool AutoScrollHandler::eventFilter(QObject* watched, QEvent* event) |
||||
{ |
||||
Q_ASSERT(watched == parent()); |
||||
Q_UNUSED(watched) |
||||
|
||||
switch (event->type()) { |
||||
case QEvent::MouseMove: { |
||||
auto* mouseEvent = static_cast<QMouseEvent*>(event); |
||||
bool mouseInWidget = widget()->rect().contains(mouseEvent->pos()); |
||||
if (mouseInWidget) { |
||||
if (_timerId != 0) { |
||||
killTimer(_timerId); |
||||
} |
||||
|
||||
_timerId = 0; |
||||
} else { |
||||
if ((_timerId == 0) && ((mouseEvent->buttons() & Qt::LeftButton) != 0u)) { |
||||
_timerId = startTimer(100); |
||||
} |
||||
} |
||||
|
||||
break; |
||||
} |
||||
case QEvent::MouseButtonRelease: { |
||||
auto* mouseEvent = static_cast<QMouseEvent*>(event); |
||||
if ((_timerId != 0) && ((mouseEvent->buttons() & ~Qt::LeftButton) != 0u)) { |
||||
killTimer(_timerId); |
||||
_timerId = 0; |
||||
} |
||||
break; |
||||
} |
||||
default: |
||||
break; |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
@ -0,0 +1,49 @@ |
||||
/*
|
||||
Copyright 2007-2008 by Robert Knight <robertknight@gmail.com> |
||||
Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de> |
||||
|
||||
This program is free software; you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation; either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program; if not, write to the Free Software |
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
||||
02110-1301 USA. |
||||
*/ |
||||
|
||||
#ifndef AUTOSCROLLHANDLER_H |
||||
#define AUTOSCROLLHANDLER_H |
||||
|
||||
#include <QWidget> |
||||
|
||||
namespace Konsole |
||||
{ |
||||
|
||||
class AutoScrollHandler : public QObject |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
explicit AutoScrollHandler(QWidget *parent); |
||||
protected: |
||||
void timerEvent(QTimerEvent *event) override; |
||||
bool eventFilter(QObject *watched, QEvent *event) override; |
||||
private: |
||||
QWidget *widget() const |
||||
{ |
||||
return static_cast<QWidget *>(parent()); |
||||
} |
||||
|
||||
int _timerId; |
||||
}; |
||||
|
||||
} |
||||
|
||||
#endif |
||||
Loading…
Reference in new issue