[Libreoffice-commits] core.git: 2 commits - vcl/qt5
Jan-Marek Glogowski
glogow at fbihome.de
Tue Nov 7 12:41:42 UTC 2017
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 <glogow at 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 <glogow at 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,
More information about the Libreoffice-commits
mailing list