vcl/qt5/Qt5Data.cxx | 2 vcl/qt5/Qt5Widget.cxx | 113 ++++++++++++++++++++++++++++++++++++++++++++++++-- vcl/qt5/Qt5Widget.hxx | 25 +++++++---- 3 files changed, 127 insertions(+), 13 deletions(-)
New commits: commit 9858edd6576b03292bccfebb142fc92588df0c42 Author: Jan-Marek Glogowski <glo...@fbihome.de> Date: Tue Nov 7 13:18:05 2017 +0100 QT5 initial keyboard support No idea, if we can / should map those vendor specific keys, like Gtk+ does. This also prefixes the non-virtual functions with "handle". Change-Id: Id8c42651e07d33728ff6deced06a82de29aa3fad diff --git a/vcl/qt5/Qt5Widget.cxx b/vcl/qt5/Qt5Widget.cxx index e17cd7da1a10..8d55aaa6832b 100644 --- a/vcl/qt5/Qt5Widget.cxx +++ b/vcl/qt5/Qt5Widget.cxx @@ -24,7 +24,9 @@ #include "Qt5Graphics.hxx" #include "Qt5Tools.hxx" +#include <QtGui/QFocusEvent> #include <QtGui/QImage> +#include <QtGui/QKeyEvent> #include <QtGui/QMouseEvent> #include <QtGui/QPainter> #include <QtGui/QPaintEvent> @@ -40,6 +42,7 @@ Qt5Widget::Qt5Widget( Qt5Frame &rFrame, QWidget *parent, Qt::WindowFlags f ) { create(); setMouseTracking( true ); + setFocusPolicy( Qt::StrongFocus ); } Qt5Widget::~Qt5Widget() @@ -85,7 +88,7 @@ void Qt5Widget::resizeEvent( QResizeEvent* ) m_pFrame->CallCallback( SalEvent::Resize, nullptr ); } -void Qt5Widget::mouseButtonEvent( QMouseEvent *pEvent, bool bReleased ) +void Qt5Widget::handleMouseButtonEvent( QMouseEvent *pEvent, bool bReleased ) { SalMouseEvent aEvent; switch( pEvent->button() ) @@ -112,12 +115,12 @@ void Qt5Widget::mouseButtonEvent( QMouseEvent *pEvent, bool bReleased ) void Qt5Widget::mousePressEvent( QMouseEvent *pEvent ) { - mouseButtonEvent( pEvent, false ); + handleMouseButtonEvent( pEvent, false ); } void Qt5Widget::mouseReleaseEvent( QMouseEvent *pEvent ) { - mouseButtonEvent( pEvent, true ); + handleMouseButtonEvent( pEvent, true ); } void Qt5Widget::mouseMoveEvent( QMouseEvent *pEvent ) @@ -175,4 +178,101 @@ void Qt5Widget::showEvent( QShowEvent* ) m_pFrame->CallCallback( SalEvent::Paint, &aPaintEvt ); } +static sal_uInt16 GetKeyCode( int keyval ) +{ + sal_uInt16 nCode = 0; + if( keyval >= Qt::Key_0 && keyval <= Qt::Key_9 ) + nCode = KEY_0 + ( keyval - Qt::Key_0 ); + else if( keyval >= Qt::Key_A && keyval <= Qt::Key_Z ) + nCode = KEY_A + ( keyval - Qt::Key_A ); + else if( keyval >= Qt::Key_F1 && keyval <= Qt::Key_F26 ) + nCode = KEY_F1 + (keyval - Qt::Key_F1); + else + { + switch( keyval ) + { + case Qt::Key_Down: nCode = KEY_DOWN; break; + case Qt::Key_Up: nCode = KEY_UP; break; + case Qt::Key_Left: nCode = KEY_LEFT; break; + case Qt::Key_Right: nCode = KEY_RIGHT; break; + case Qt::Key_Home: nCode = KEY_HOME; break; + case Qt::Key_End: nCode = KEY_END; break; + case Qt::Key_PageUp: nCode = KEY_PAGEUP; break; + case Qt::Key_PageDown: nCode = KEY_PAGEDOWN; break; + case Qt::Key_Return: nCode = KEY_RETURN; break; + case Qt::Key_Escape: nCode = KEY_ESCAPE; break; + case Qt::Key_Tab: nCode = KEY_TAB; break; + case Qt::Key_Backspace: nCode = KEY_BACKSPACE; break; + case Qt::Key_Space: nCode = KEY_SPACE; break; + case Qt::Key_Insert: nCode = KEY_INSERT; break; + case Qt::Key_Delete: nCode = KEY_DELETE; break; + case Qt::Key_Plus: nCode = KEY_ADD; break; + case Qt::Key_Minus: nCode = KEY_SUBTRACT; break; + case Qt::Key_Asterisk: nCode = KEY_MULTIPLY; break; + case Qt::Key_Slash: nCode = KEY_DIVIDE; break; + case Qt::Key_Period: nCode = KEY_POINT; break; + case Qt::Key_Comma: nCode = KEY_COMMA; break; + case Qt::Key_Less: nCode = KEY_LESS; break; + case Qt::Key_Greater: nCode = KEY_GREATER; break; + case Qt::Key_Equal: nCode = KEY_EQUAL; break; + case Qt::Key_Find: nCode = KEY_FIND; break; + case Qt::Key_Menu: nCode = KEY_CONTEXTMENU; break; + case Qt::Key_Help: nCode = KEY_HELP; break; + case Qt::Key_Undo: nCode = KEY_UNDO; break; + case Qt::Key_Redo: nCode = KEY_REPEAT; break; + case Qt::Key_Cancel: nCode = KEY_F11; break; + case Qt::Key_AsciiTilde: nCode = KEY_TILDE; break; + case Qt::Key_QuoteLeft: nCode = KEY_QUOTELEFT; break; + case Qt::Key_BracketLeft: nCode = KEY_BRACKETLEFT; break; + case Qt::Key_BracketRight: nCode = KEY_BRACKETRIGHT; break; + case Qt::Key_Semicolon: nCode = KEY_SEMICOLON; break; + case Qt::Key_Copy: nCode = KEY_COPY; break; + case Qt::Key_Cut: nCode = KEY_CUT; break; + case Qt::Key_Open: nCode = KEY_OPEN; break; + case Qt::Key_Paste: nCode = KEY_PASTE; break; + } + } + + return nCode; +} + +bool Qt5Widget::handleKeyEvent( QKeyEvent *pEvent, bool bDown ) +{ + SalKeyEvent aEvent; + + aEvent.mnCharCode = (pEvent->text().isEmpty() ? 0 : pEvent->text().at( 0 ).unicode()); + aEvent.mnRepeat = 0; + aEvent.mnCode = GetKeyCode( pEvent->key() ); + aEvent.mnCode |= GetKeyModCode( pEvent->modifiers() ); + + bool bStopProcessingKey; + if ( bDown ) + bStopProcessingKey = m_pFrame->CallCallback( SalEvent::KeyInput, &aEvent ); + else + bStopProcessingKey = m_pFrame->CallCallback( SalEvent::KeyUp, &aEvent ); + return bStopProcessingKey; +} + +void Qt5Widget::keyPressEvent( QKeyEvent *pEvent ) +{ + if ( handleKeyEvent( pEvent, true ) ) + pEvent->accept(); +} + +void Qt5Widget::keyReleaseEvent( QKeyEvent *pEvent ) +{ + if ( handleKeyEvent( pEvent, false ) ) + pEvent->accept(); +} + +void Qt5Widget::focusInEvent( QFocusEvent* ) +{ + m_pFrame->CallCallback( SalEvent::GetFocus, nullptr ); +} + +void Qt5Widget::focusOutEvent( QFocusEvent* ) +{ + m_pFrame->CallCallback( SalEvent::LoseFocus, nullptr ); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/qt5/Qt5Widget.hxx b/vcl/qt5/Qt5Widget.hxx index bacd6ab403d0..8ba955e8cf69 100644 --- a/vcl/qt5/Qt5Widget.hxx +++ b/vcl/qt5/Qt5Widget.hxx @@ -23,6 +23,8 @@ class Qt5Frame; class Qt5Object; +class QFocusEvent; +class QKeyEvent; class QMouseEvent; class QMoveEvent; class QPaintEvent; @@ -37,8 +39,13 @@ class Qt5Widget Qt5Frame *m_pFrame; - void mouseButtonEvent( QMouseEvent*, bool ); + bool handleKeyEvent( QKeyEvent*, bool ); + void handleMouseButtonEvent( QMouseEvent*, bool ); + virtual void focusInEvent( QFocusEvent* ) override; + virtual void focusOutEvent( QFocusEvent* ) override; + virtual void keyPressEvent( QKeyEvent* ) override; + virtual void keyReleaseEvent( QKeyEvent* ) override; virtual void mouseMoveEvent( QMouseEvent*) override; virtual void mousePressEvent( QMouseEvent*) override; virtual void mouseReleaseEvent( QMouseEvent*) override; commit e379f7ff4229a3c011e3a38ae06ed812c49ab0f8 Author: Jan-Marek Glogowski <glo...@fbihome.de> Date: Tue Nov 7 13:13:10 2017 +0100 QT5 queue paint update on show Something like gtk_widget_set_redraw_on_allocate. On resize of dialogs, we still get artefacts, but at least you see something without forcing an event. And since there isn't any Qt5 theming yet, we let VCL paint the menus with a border. Change-Id: Ia2ff6b199ee25e481e3fb29a921b0d3d490f1535 diff --git a/vcl/qt5/Qt5Data.cxx b/vcl/qt5/Qt5Data.cxx index f05e30ce662f..3d524bd11c71 100644 --- a/vcl/qt5/Qt5Data.cxx +++ b/vcl/qt5/Qt5Data.cxx @@ -34,8 +34,6 @@ Qt5Data::Qt5Data( SalInstance *pInstance ) // draw toolbars on separate lines pSVData->maNWFData.mbDockingAreaSeparateTB = true; - // no borders for menu, theming does that - pSVData->maNWFData.mbFlatMenu = true; } Qt5Data::~Qt5Data() diff --git a/vcl/qt5/Qt5Widget.cxx b/vcl/qt5/Qt5Widget.cxx index 195b5f2b341e..e17cd7da1a10 100644 --- a/vcl/qt5/Qt5Widget.cxx +++ b/vcl/qt5/Qt5Widget.cxx @@ -28,6 +28,7 @@ #include <QtGui/QMouseEvent> #include <QtGui/QPainter> #include <QtGui/QPaintEvent> +#include <QtGui/QShowEvent> #include <QtGui/QWheelEvent> #include <cairo.h> @@ -167,5 +168,11 @@ void Qt5Widget::moveEvent( QMoveEvent* ) m_pFrame->CallCallback( SalEvent::Move, nullptr ); } +void Qt5Widget::showEvent( QShowEvent* ) +{ + QSize aSize( m_pFrame->m_pQWidget->size() ); + SalPaintEvent aPaintEvt( 0, 0, aSize.width(), aSize.height(), true ); + m_pFrame->CallCallback( SalEvent::Paint, &aPaintEvt ); +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/qt5/Qt5Widget.hxx b/vcl/qt5/Qt5Widget.hxx index 83375278c738..bacd6ab403d0 100644 --- a/vcl/qt5/Qt5Widget.hxx +++ b/vcl/qt5/Qt5Widget.hxx @@ -27,6 +27,7 @@ class QMouseEvent; class QMoveEvent; class QPaintEvent; class QResizeEvent; +class QShowEvent; class QWheelEvent; class Qt5Widget @@ -38,13 +39,14 @@ class Qt5Widget void mouseButtonEvent( QMouseEvent*, bool ); - void paintEvent( QPaintEvent* ) override; - void resizeEvent( QResizeEvent* ) override; - void moveEvent( QMoveEvent* ) override; - void mouseMoveEvent( QMouseEvent*) override; - void mousePressEvent( QMouseEvent*) override; - void mouseReleaseEvent( QMouseEvent*) override; - void wheelEvent( QWheelEvent* ) override; + virtual void mouseMoveEvent( QMouseEvent*) override; + virtual void mousePressEvent( QMouseEvent*) override; + virtual void mouseReleaseEvent( QMouseEvent*) override; + virtual void moveEvent( QMoveEvent* ) override; + virtual void paintEvent( QPaintEvent* ) override; + virtual void resizeEvent( QResizeEvent* ) override; + virtual void showEvent( QShowEvent* ) override; + virtual void wheelEvent( QWheelEvent* ) override; public: Qt5Widget( Qt5Frame &rFrame, _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits