Blame SOURCES/0082-lokdocview-Move-postMouseEvent-in-separate-LOK-threa.patch

f325b2
From 9ca320506308555b6b7fc7bbb3f82d76cdbf9a82 Mon Sep 17 00:00:00 2001
f325b2
From: Pranav Kant <pranavk@gnome.org>
f325b2
Date: Sun, 26 Jul 2015 22:23:46 +0530
f325b2
Subject: [PATCH 082/398] lokdocview: Move postMouseEvent in separate LOK
f325b2
 thread
f325b2
f325b2
Change-Id: I9d1a08db2a91a596d3039a2388c22e6ea76dc2b1
f325b2
(cherry picked from commit de9224bf9686550e63876eb5ac1241b27c01bc25)
f325b2
---
f325b2
 libreofficekit/source/gtk/lokdocview.cxx | 52 ++++++++++++++++++++++++++++++--
f325b2
 libreofficekit/source/gtk/tilebuffer.hxx | 11 ++++++-
f325b2
 2 files changed, 59 insertions(+), 4 deletions(-)
f325b2
f325b2
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
f325b2
index 6bee2f513ae9..d23ac1af2fc1 100644
f325b2
--- a/libreofficekit/source/gtk/lokdocview.cxx
f325b2
+++ b/libreofficekit/source/gtk/lokdocview.cxx
f325b2
@@ -958,7 +958,16 @@ lok_doc_view_signal_button(GtkWidget* pWidget, GdkEventButton* pEvent)
f325b2
         if ((pEvent->time - priv->m_nLastButtonPressTime) < 250)
f325b2
             nCount++;
f325b2
         priv->m_nLastButtonPressTime = pEvent->time;
f325b2
-        priv->m_pDocument->pClass->postMouseEvent(priv->m_pDocument, LOK_MOUSEEVENT_MOUSEBUTTONDOWN, pixelToTwip(pEvent->x, priv->m_fZoom), pixelToTwip(pEvent->y, priv->m_fZoom), nCount);
f325b2
+        GTask* task = g_task_new(pDocView, NULL, NULL, NULL);
f325b2
+        LOEvent* pLOEvent = new LOEvent(LOK_POST_MOUSE_EVENT);
f325b2
+        pLOEvent->m_nPostMouseEventType = LOK_MOUSEEVENT_MOUSEBUTTONDOWN;
f325b2
+        pLOEvent->m_nPostMouseEventX = pixelToTwip(pEvent->x, priv->m_fZoom);
f325b2
+        pLOEvent->m_nPostMouseEventY = pixelToTwip(pEvent->y, priv->m_fZoom);
f325b2
+        pLOEvent->m_nPostMouseEventCount = nCount;
f325b2
+        g_task_set_task_data(task, pLOEvent, g_free);
f325b2
+
f325b2
+        g_thread_pool_push(lokThreadPool, g_object_ref(task), NULL);
f325b2
+        g_object_unref(task);
f325b2
         break;
f325b2
     }
f325b2
     case GDK_BUTTON_RELEASE:
f325b2
@@ -967,7 +976,16 @@ lok_doc_view_signal_button(GtkWidget* pWidget, GdkEventButton* pEvent)
f325b2
         if ((pEvent->time - priv->m_nLastButtonReleaseTime) < 250)
f325b2
             nCount++;
f325b2
         priv->m_nLastButtonReleaseTime = pEvent->time;
f325b2
-        priv->m_pDocument->pClass->postMouseEvent(priv->m_pDocument, LOK_MOUSEEVENT_MOUSEBUTTONUP, pixelToTwip(pEvent->x, priv->m_fZoom), pixelToTwip(pEvent->y, priv->m_fZoom), nCount);
f325b2
+        GTask* task = g_task_new(pDocView, NULL, NULL, NULL);
f325b2
+        LOEvent* pLOEvent = new LOEvent(LOK_POST_MOUSE_EVENT);
f325b2
+        pLOEvent->m_nPostMouseEventType = LOK_MOUSEEVENT_MOUSEBUTTONUP;
f325b2
+        pLOEvent->m_nPostMouseEventX = pixelToTwip(pEvent->x, priv->m_fZoom);
f325b2
+        pLOEvent->m_nPostMouseEventY = pixelToTwip(pEvent->y, priv->m_fZoom);
f325b2
+        pLOEvent->m_nPostMouseEventCount = nCount;
f325b2
+        g_task_set_task_data(task, pLOEvent, g_free);
f325b2
+
f325b2
+        g_thread_pool_push(lokThreadPool, g_object_ref(task), NULL);
f325b2
+        g_object_unref(task);
f325b2
         break;
f325b2
     }
f325b2
     default:
f325b2
@@ -1050,12 +1068,37 @@ lok_doc_view_signal_motion (GtkWidget* pWidget, GdkEventMotion* pEvent)
f325b2
     }
f325b2
 
f325b2
     // Otherwise a mouse move, as on the desktop.
f325b2
-    priv->m_pDocument->pClass->postMouseEvent(priv->m_pDocument, LOK_MOUSEEVENT_MOUSEMOVE, pixelToTwip(pEvent->x, priv->m_fZoom), pixelToTwip(pEvent->y, priv->m_fZoom), 1);
f325b2
+
f325b2
+    GTask* task = g_task_new(pDocView, NULL, NULL, NULL);
f325b2
+    LOEvent* pLOEvent = new LOEvent(LOK_POST_MOUSE_EVENT);
f325b2
+    pLOEvent->m_nPostMouseEventType = LOK_MOUSEEVENT_MOUSEMOVE;
f325b2
+    pLOEvent->m_nPostMouseEventX = pixelToTwip(pEvent->x, priv->m_fZoom);
f325b2
+    pLOEvent->m_nPostMouseEventY = pixelToTwip(pEvent->y, priv->m_fZoom);
f325b2
+    pLOEvent->m_nPostMouseEventCount = 1;
f325b2
+    g_task_set_task_data(task, pLOEvent, g_free);
f325b2
+
f325b2
+    g_thread_pool_push(lokThreadPool, g_object_ref(task), NULL);
f325b2
+    g_object_unref(task);
f325b2
 
f325b2
     return FALSE;
f325b2
 }
f325b2
 
f325b2
 static void
f325b2
+postMouseEventInThread(gpointer data)
f325b2
+{
f325b2
+    GTask* task = G_TASK(data);
f325b2
+    LOKDocView* pDocView = LOK_DOC_VIEW(g_task_get_source_object(task));
f325b2
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
f325b2
+    LOEvent* pLOEvent = static_cast<LOEvent*>(g_task_get_task_data(task));
f325b2
+
f325b2
+    priv->m_pDocument->pClass->postMouseEvent(priv->m_pDocument,
f325b2
+                                              pLOEvent->m_nPostMouseEventType,
f325b2
+                                              pLOEvent->m_nPostMouseEventX,
f325b2
+                                              pLOEvent->m_nPostMouseEventY,
f325b2
+                                              pLOEvent->m_nPostMouseEventCount);
f325b2
+}
f325b2
+
f325b2
+static void
f325b2
 openDocumentInThread (gpointer data)
f325b2
 {
f325b2
     GTask* task = G_TASK(data);
f325b2
@@ -1236,6 +1279,9 @@ lokThreadFunc(gpointer data, gpointer /*user_data*/)
f325b2
     case LOK_PAINT_TILE:
f325b2
         paintTileInThread(task);
f325b2
         break;
f325b2
+    case LOK_POST_MOUSE_EVENT:
f325b2
+        postMouseEventInThread(task);
f325b2
+        break;
f325b2
     }
f325b2
 
f325b2
     g_object_unref(task);
f325b2
diff --git a/libreofficekit/source/gtk/tilebuffer.hxx b/libreofficekit/source/gtk/tilebuffer.hxx
f325b2
index 6e57d2fe8bd5..aa496aaf3e8f 100644
f325b2
--- a/libreofficekit/source/gtk/tilebuffer.hxx
f325b2
+++ b/libreofficekit/source/gtk/tilebuffer.hxx
f325b2
@@ -138,7 +138,8 @@ enum
f325b2
     LOK_SET_PARTMODE,
f325b2
     LOK_SET_PART,
f325b2
     LOK_POST_KEY,
f325b2
-    LOK_PAINT_TILE
f325b2
+    LOK_PAINT_TILE,
f325b2
+    LOK_POST_MOUSE_EVENT
f325b2
 };
f325b2
 
f325b2
 /**
f325b2
@@ -187,6 +188,14 @@ struct LOEvent
f325b2
     float m_fPaintTileZoom;
f325b2
     ///@}
f325b2
 
f325b2
+    /// @name postMouseEvent parameters
f325b2
+    ///@{
f325b2
+    int m_nPostMouseEventType;
f325b2
+    int m_nPostMouseEventX;
f325b2
+    int m_nPostMouseEventY;
f325b2
+    int m_nPostMouseEventCount;
f325b2
+    ///@}
f325b2
+
f325b2
     /// Constructor to instantiate an object of type `type`.
f325b2
     LOEvent(int type)
f325b2
         : m_nType(type) {}
f325b2
-- 
f325b2
2.12.0
f325b2