include/vcl/jsdialog/executor.hxx |    5 +++++
 include/vcl/weld.hxx              |    4 +++-
 vcl/inc/salvtables.hxx            |    2 ++
 vcl/jsdialog/executor.cxx         |    7 +++++--
 vcl/source/app/salvtables.cxx     |    7 +++++++
 5 files changed, 22 insertions(+), 3 deletions(-)

New commits:
commit 1c193d7817e20fc05092068c6132b101f2955707
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Tue Mar 14 13:11:46 2023 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Tue Mar 14 14:55:25 2023 +0000

    jsdialog: double click for drawing area
    
    Change-Id: I280158b101f39d107090a2eebb2c06e64591cb94
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148852
    Tested-by: Szymon Kłos <szymon.k...@collabora.com>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/include/vcl/jsdialog/executor.hxx 
b/include/vcl/jsdialog/executor.hxx
index 50f71272bb61..0c47066da9fa 100644
--- a/include/vcl/jsdialog/executor.hxx
+++ b/include/vcl/jsdialog/executor.hxx
@@ -61,6 +61,11 @@ public:
         rDrawingArea.click(rPos);
     }
 
+    static void trigger_dblclick(weld::DrawingArea& rDrawingArea, const Point& 
rPos)
+    {
+        rDrawingArea.dblclick(rPos);
+    }
+
     static void trigger_value_changed(weld::SpinButton& rSpinButton)
     {
         rSpinButton.signal_value_changed();
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 1960bf1ffd06..a1966434355a 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -2351,7 +2351,9 @@ public:
 private:
     friend class ::LOKTrigger;
 
-    virtual void click(const Point& rPos) = 0;
+    virtual void click(const Point&) = 0;
+
+    virtual void dblclick(const Point&){};
 };
 
 enum class Placement
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index adc0ef043eab..efc5e07e3ae7 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1330,6 +1330,8 @@ public:
     virtual OutputDevice& get_ref_device() override;
 
     virtual void click(const Point& rPos) override;
+
+    virtual void dblclick(const Point& rPos) override;
 };
 
 class SalInstanceToolbar : public SalInstanceWidget, public virtual 
weld::Toolbar
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index e2e091bfa143..6532f562e1ec 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -187,7 +187,7 @@ bool ExecuteAction(const std::string& nWindowId, const 
OString& rWidget, StringM
             auto pArea = dynamic_cast<weld::DrawingArea*>(pWidget);
             if (pArea)
             {
-                if (sAction == "click")
+                if (sAction == "click" || sAction == "dblclick")
                 {
                     OUString sClickData = rData["data"];
                     int nSeparatorPos = sClickData.indexOf(';');
@@ -209,7 +209,10 @@ bool ExecuteAction(const std::string& nWindowId, const 
OString& rWidget, StringM
                         Size size = rRefDevice.GetOutputSize();
                         posX = posX * size.Width();
                         posY = posY * size.Height();
-                        LOKTrigger::trigger_click(*pArea, Point(posX, posY));
+                        if (sAction == "click")
+                            LOKTrigger::trigger_click(*pArea, Point(posX, 
posY));
+                        else
+                            LOKTrigger::trigger_dblclick(*pArea, Point(posX, 
posY));
                         return true;
                     }
 
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 40ca131ee5e8..20a53926ee3a 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -6324,6 +6324,13 @@ void SalInstanceDrawingArea::click(const Point& rPos)
     m_xDrawingArea->MouseButtonUp(aEvent);
 }
 
+void SalInstanceDrawingArea::dblclick(const Point& rPos)
+{
+    MouseEvent aEvent(rPos, 2, MouseEventModifiers::NONE, MOUSE_LEFT, 0);
+    m_xDrawingArea->MouseButtonDown(aEvent);
+    m_xDrawingArea->MouseButtonUp(aEvent);
+}
+
 IMPL_LINK(SalInstanceDrawingArea, PaintHdl, target_and_area, aPayload, void)
 {
     m_aDrawHdl.Call(aPayload);

Reply via email to