Blame SOURCES/0083-lokdocview-setGraphicSelection-in-another-thread.patch

f325b2
From 3bb042ae678b26e234d19913846d695e8bfd8927 Mon Sep 17 00:00:00 2001
f325b2
From: Pranav Kant <pranavk@gnome.org>
f325b2
Date: Sun, 26 Jul 2015 22:39:43 +0530
f325b2
Subject: [PATCH 083/398] lokdocview: setGraphicSelection in another thread
f325b2
f325b2
Change-Id: Ib7a6bf63ee6f300c6c5d50d02a3465d0a075a5be
f325b2
(cherry picked from commit 7c45a57081a921b8f56812dd37c2fcd4b86d2a1a)
f325b2
---
f325b2
 libreofficekit/source/gtk/lokdocview.cxx | 68 ++++++++++++++++++++++++++++----
f325b2
 libreofficekit/source/gtk/tilebuffer.hxx | 10 ++++-
f325b2
 2 files changed, 70 insertions(+), 8 deletions(-)
f325b2
f325b2
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
f325b2
index d23ac1af2fc1..edd2179495f0 100644
f325b2
--- a/libreofficekit/source/gtk/lokdocview.cxx
f325b2
+++ b/libreofficekit/source/gtk/lokdocview.cxx
f325b2
@@ -889,7 +889,17 @@ lok_doc_view_signal_button(GtkWidget* pWidget, GdkEventButton* pEvent)
f325b2
             {
f325b2
                 g_info("LOKDocView_Impl::signalButton: end of drag graphic handle #%d", i);
f325b2
                 priv->m_bInDragGraphicHandles[i] = false;
f325b2
-                priv->m_pDocument->pClass->setGraphicSelection(priv->m_pDocument, LOK_SETGRAPHICSELECTION_END, pixelToTwip(pEvent->x, priv->m_fZoom), pixelToTwip(pEvent->y, priv->m_fZoom));
f325b2
+
f325b2
+                GTask* task = g_task_new(pDocView, NULL, NULL, NULL);
f325b2
+                LOEvent* pLOEvent = new LOEvent(LOK_SET_GRAPHIC_SELECTION);
f325b2
+                pLOEvent->m_nSetGraphicSelectionType = LOK_SETGRAPHICSELECTION_END;
f325b2
+                pLOEvent->m_nSetGraphicSelectionX = pixelToTwip(pEvent->x, priv->m_fZoom);
f325b2
+                pLOEvent->m_nSetGraphicSelectionY = pixelToTwip(pEvent->y, priv->m_fZoom);
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
@@ -898,7 +908,17 @@ lok_doc_view_signal_button(GtkWidget* pWidget, GdkEventButton* pEvent)
f325b2
         {
f325b2
             g_info("LOKDocView_Impl::signalButton: end of drag graphic selection");
f325b2
             priv->m_bInDragGraphicSelection = false;
f325b2
-            priv->m_pDocument->pClass->setGraphicSelection(priv->m_pDocument, LOK_SETGRAPHICSELECTION_END, pixelToTwip(pEvent->x, priv->m_fZoom), pixelToTwip(pEvent->y, priv->m_fZoom));
f325b2
+
f325b2
+            GTask* task = g_task_new(pDocView, NULL, NULL, NULL);
f325b2
+            LOEvent* pLOEvent = new LOEvent(LOK_SET_GRAPHIC_SELECTION);
f325b2
+            pLOEvent->m_nSetGraphicSelectionType = LOK_SETGRAPHICSELECTION_END;
f325b2
+            pLOEvent->m_nSetGraphicSelectionX = pixelToTwip(pEvent->x, priv->m_fZoom);
f325b2
+            pLOEvent->m_nSetGraphicSelectionY = pixelToTwip(pEvent->y, priv->m_fZoom);
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
@@ -937,10 +957,17 @@ lok_doc_view_signal_button(GtkWidget* pWidget, GdkEventButton* pEvent)
f325b2
                 {
f325b2
                     g_info("LOKDocView_Impl::signalButton: start of drag graphic handle #%d", i);
f325b2
                     priv->m_bInDragGraphicHandles[i] = true;
f325b2
-                    priv->m_pDocument->pClass->setGraphicSelection(priv->m_pDocument,
f325b2
-                                                             LOK_SETGRAPHICSELECTION_START,
f325b2
-                                                             pixelToTwip(priv->m_aGraphicHandleRects[i].x + priv->m_aGraphicHandleRects[i].width / 2, priv->m_fZoom),
f325b2
-                                                             pixelToTwip(priv->m_aGraphicHandleRects[i].y + priv->m_aGraphicHandleRects[i].height / 2, priv->m_fZoom));
f325b2
+
f325b2
+                    GTask* task = g_task_new(pDocView, NULL, NULL, NULL);
f325b2
+                    LOEvent* pLOEvent = new LOEvent(LOK_SET_GRAPHIC_SELECTION);
f325b2
+                    pLOEvent->m_nSetGraphicSelectionType = LOK_SETGRAPHICSELECTION_START;
f325b2
+                    pLOEvent->m_nSetGraphicSelectionX = pixelToTwip(priv->m_aGraphicHandleRects[i].x + priv->m_aGraphicHandleRects[i].width / 2, priv->m_fZoom);
f325b2
+                    pLOEvent->m_nSetGraphicSelectionY = pixelToTwip(priv->m_aGraphicHandleRects[i].y + priv->m_aGraphicHandleRects[i].height / 2, priv->m_fZoom);
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
@@ -1063,7 +1090,17 @@ lok_doc_view_signal_motion (GtkWidget* pWidget, GdkEventMotion* pEvent)
f325b2
     {
f325b2
         g_info("lcl_signalMotion: start of drag graphic selection");
f325b2
         priv->m_bInDragGraphicSelection = true;
f325b2
-        priv->m_pDocument->pClass->setGraphicSelection(priv->m_pDocument, LOK_SETGRAPHICSELECTION_START, pixelToTwip(pEvent->x, priv->m_fZoom), pixelToTwip(pEvent->y, priv->m_fZoom));
f325b2
+
f325b2
+        GTask* task = g_task_new(pDocView, NULL, NULL, NULL);
f325b2
+        LOEvent* pLOEvent = new LOEvent(LOK_SET_GRAPHIC_SELECTION);
f325b2
+        pLOEvent->m_nSetGraphicSelectionType = LOK_SETGRAPHICSELECTION_START;
f325b2
+        pLOEvent->m_nSetGraphicSelectionX = pixelToTwip(pEvent->x, priv->m_fZoom);
f325b2
+        pLOEvent->m_nSetGraphicSelectionY = pixelToTwip(pEvent->y, priv->m_fZoom);
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
@@ -1084,6 +1121,20 @@ lok_doc_view_signal_motion (GtkWidget* pWidget, GdkEventMotion* pEvent)
f325b2
 }
f325b2
 
f325b2
 static void
f325b2
+setGraphicSelectionInThread(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->setGraphicSelection(priv->m_pDocument,
f325b2
+                                                   pLOEvent->m_nSetGraphicSelectionType,
f325b2
+                                                   pLOEvent->m_nSetGraphicSelectionX,
f325b2
+                                                   pLOEvent->m_nSetGraphicSelectionY);
f325b2
+}
f325b2
+
f325b2
+static void
f325b2
 postMouseEventInThread(gpointer data)
f325b2
 {
f325b2
     GTask* task = G_TASK(data);
f325b2
@@ -1282,6 +1333,9 @@ lokThreadFunc(gpointer data, gpointer /*user_data*/)
f325b2
     case LOK_POST_MOUSE_EVENT:
f325b2
         postMouseEventInThread(task);
f325b2
         break;
f325b2
+    case LOK_SET_GRAPHIC_SELECTION:
f325b2
+        setGraphicSelectionInThread(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 aa496aaf3e8f..d2451b6c2290 100644
f325b2
--- a/libreofficekit/source/gtk/tilebuffer.hxx
f325b2
+++ b/libreofficekit/source/gtk/tilebuffer.hxx
f325b2
@@ -139,7 +139,8 @@ enum
f325b2
     LOK_SET_PART,
f325b2
     LOK_POST_KEY,
f325b2
     LOK_PAINT_TILE,
f325b2
-    LOK_POST_MOUSE_EVENT
f325b2
+    LOK_POST_MOUSE_EVENT,
f325b2
+    LOK_SET_GRAPHIC_SELECTION
f325b2
 };
f325b2
 
f325b2
 /**
f325b2
@@ -196,6 +197,13 @@ struct LOEvent
f325b2
     int m_nPostMouseEventCount;
f325b2
     ///@}
f325b2
 
f325b2
+    /// @name setGraphicSelection parameters
f325b2
+    ///@{
f325b2
+    int m_nSetGraphicSelectionType;
f325b2
+    int m_nSetGraphicSelectionX;
f325b2
+    int m_nSetGraphicSelectionY;
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