[Libreoffice-commits] core.git: forms/qa sw/qa vcl/source
Samuel Mehrbrodt (via logerrit)
logerrit at kemper.freedesktop.org
Thu May 16 13:40:52 UTC 2019
forms/qa/unoapi/forms_2.sce | 2 +-
sw/qa/uitest/writer_tests5/xwindow.py | 23 +++++++++++++++++++----
vcl/source/window/event.cxx | 6 ++++++
3 files changed, 26 insertions(+), 5 deletions(-)
New commits:
commit f9905401d8cf2d73576231ebd84cfa5f4f73bcac
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
AuthorDate: Wed May 8 10:24:18 2019 +0200
Commit: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
CommitDate: Thu May 16 15:40:11 2019 +0200
tdf#125170 Deliver mouse events also when clicking into document content
Event listeners are added once VCLXWindow::SetWindow is called.
This never happened for the document content window.
So we need to call Window::GetComponentInterface which will create an XWindowPeer
and then call UnoWrapper::SetWindowInterface which calls VCLXWindow::SetWindow.
After that, event listeners are registered so that we can deliver events.
Change-Id: I2ed01f1ab20d87fedc4803bdbd96f5ef14d40043
Reviewed-on: https://gerrit.libreoffice.org/71948
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
diff --git a/forms/qa/unoapi/forms_2.sce b/forms/qa/unoapi/forms_2.sce
index 30f4b2401875..c12d87f9977a 100644
--- a/forms/qa/unoapi/forms_2.sce
+++ b/forms/qa/unoapi/forms_2.sce
@@ -15,7 +15,7 @@
# except in compliance with the License. You may obtain a copy of
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
#
--o forms.ODateModel
+# Flaky since tdf#125170 -o forms.ODateModel
-o forms.OEditControl
-o forms.OEditModel
#i109939 -o forms.OFileControlModel
diff --git a/sw/qa/uitest/writer_tests5/xwindow.py b/sw/qa/uitest/writer_tests5/xwindow.py
index 7b96b53c495d..bdfbfecff17e 100644
--- a/sw/qa/uitest/writer_tests5/xwindow.py
+++ b/sw/qa/uitest/writer_tests5/xwindow.py
@@ -10,6 +10,7 @@ import unohelper
from org.libreoffice.unotest import UnoInProcess
from com.sun.star.awt import XMouseListener
from com.sun.star.awt import XToolkitRobot
+from com.sun.star.awt import MouseButton
from com.sun.star.awt import MouseEvent
from com.sun.star.awt import KeyEvent
from com.sun.star.awt import XKeyListener
@@ -96,21 +97,35 @@ class XWindow(UITestCase):
# create dummy mouse event
xMouseEvent = MouseEvent()
xMouseEvent.Modifiers = 0
- xMouseEvent.Buttons = 0
+ xMouseEvent.Buttons = MouseButton.LEFT
xMouseEvent.X = 10
xMouseEvent.Y = 10
xMouseEvent.ClickCount = 1
xMouseEvent.PopupTrigger = False
xMouseEvent.Source = xWindow
+ xMouseEvent2 = MouseEvent()
+ xMouseEvent2.Modifiers = 0
+ xMouseEvent2.Buttons = MouseButton.LEFT
+ xMouseEvent2.X = 300
+ xMouseEvent2.Y = 300
+ xMouseEvent2.ClickCount = 1
+ xMouseEvent2.PopupTrigger = False
+ xMouseEvent2.Source = xWindow
+
# send mouse event
xToolkitRobot = xWindow.getToolkit()
self.assertIsNotNone(xToolkitRobot)
- xToolkitRobot.mousePress(xMouseEvent)
+ # Click in the menubar/toolbar area
xToolkitRobot.mouseMove(xMouseEvent)
+ xToolkitRobot.mousePress(xMouseEvent)
xToolkitRobot.mouseRelease(xMouseEvent)
+ # Click into the document content
+ xToolkitRobot.mousePress(xMouseEvent2)
+ xToolkitRobot.mouseRelease(xMouseEvent2)
+
# send key press event
xKeyEvent = KeyEvent()
xKeyEvent.Modifiers = 0
@@ -139,8 +154,8 @@ class XWindow(UITestCase):
self.assertEqual(0, keymouseEventsIntercepted)
global mouseEventsIntercepted
- # mousePressed, mouseReleased and mouseEntered should be triggered
- self.assertEqual(3, mouseEventsIntercepted)
+ # mousePressed (2x), mouseReleased (2x) and mouseEntered (1x) should be triggered
+ self.assertEqual(5, mouseEventsIntercepted)
# close document
self.ui_test.close_doc()
diff --git a/vcl/source/window/event.cxx b/vcl/source/window/event.cxx
index 399dddd3abaa..b786552a6789 100644
--- a/vcl/source/window/event.cxx
+++ b/vcl/source/window/event.cxx
@@ -31,6 +31,7 @@
#include <com/sun/star/awt/MouseEvent.hpp>
#include <com/sun/star/awt/KeyModifier.hpp>
#include <com/sun/star/awt/MouseButton.hpp>
+#include <com/sun/star/awt/XWindow.hpp>
#include <comphelper/scopeguard.hxx>
namespace vcl {
@@ -214,6 +215,11 @@ void Window::CallEventListeners( VclEventId nEvent, void* pData )
if ( xWindow->IsDisposed() )
return;
+ // If maEventListeners is empty, the XVCLWindow has not yet been initialized.
+ // Calling GetComponentInterface will do that.
+ if (mpWindowImpl->maEventListeners.empty())
+ xWindow->GetComponentInterface();
+
if (!mpWindowImpl->maEventListeners.empty())
{
// Copy the list, because this can be destroyed when calling a Link...
More information about the Libreoffice-commits
mailing list