#include "rm_widget_drag.h" #include #include RMWidgetDrag::RMWidgetDrag(QWidget *target,int titleBarHeight) : QObject(target) { _target = target; _dragStart = false; _titleBarHeight = titleBarHeight; _target->installEventFilter(this); } RMWidgetDrag::~RMWidgetDrag() { _target->removeEventFilter(this); } bool RMWidgetDrag::eventFilter(QObject *o, QEvent*e) { // Alt+Enter 방지 if(e->type() == QEvent::WindowActivate) { //qInfo() << __FUNCTION__ << e->type(); ::RegisterHotKey((HWND)_target->winId(), 998, MOD_ALT | MOD_NOREPEAT, VK_RETURN); } else if (e->type() == QEvent::WindowDeactivate) { //qInfo() << __FUNCTION__ << e->type(); ::UnregisterHotKey((HWND)_target->winId(),998); } Q_UNUSED(o); #if (USE_KEY_EVENT_FOR_SEEK) if(e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease) { QKeyEvent* ke = static_cast(e); if(ke->isAutoRepeat() == true) { return false; } qInfo() << "KE:" << ((e->type() == QEvent::KeyPress) ? "P" : "R"); } #endif #if (DESIGN_LAYOUT_MODE) if( e->type() == QEvent::MouseButtonPress) { // CHILD 는 적용안됨.. 어..쩔.. QMouseEvent* me = static_cast(e); qInfo() << me->pos(); } #endif // DESIGN_LAYOUT_MODE if (_target->isMaximized() == false && _target->isFullScreen() == false && (e->type() == QEvent::MouseMove || e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonRelease)) { QMouseEvent* me = static_cast(e); switch (e->type()) { case QEvent::MouseMove: if (_dragStart) { _target->move(_target->frameGeometry().topLeft() + (me->pos() - _dragPos)); emit onWindowMove(); } return true; // discard break; case QEvent::MouseButtonPress: if (_target->rect().contains(me->pos()) && me->pos().y() < _titleBarHeight) { _dragStart = true; _dragPos = me->pos(); } return true; // discard break; case QEvent::MouseButtonRelease: _dragStart = false; //mouseRealese(static_cast(e)); return true; // discard break; } } return false; }