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

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