From 83b7bfc0efefb3c77e5c59553320e98539250c62 Mon Sep 17 00:00:00 2001 From: Tamás Zolnai Date: Thu, 5 Apr 2018 22:23:28 +0200 Subject: sw lok: View jumps to cursor position even if it is moved by an other view. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Scrolling is done twice. Once in SwCursorShell::UpdateCursor() by SCROLLWIN flag. Here we can check the actual viewid and avoid scrolling if the cursor is move by an other user. The second instance in the LO online code, for it we need to pass the viewid identifying the view which moved the cursor. Change-Id: I033274f88ce41acbb632e2aeb0d986ab11cd2d52 Reviewed-on: https://gerrit.libreoffice.org/52220 Tested-by: Jenkins Reviewed-by: Tamás Zolnai --- libreofficekit/source/gtk/lokdocview.cxx | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'libreofficekit/source/gtk') diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx index 8a76c78e1151..e55592e9c1da 100644 --- a/libreofficekit/source/gtk/lokdocview.cxx +++ b/libreofficekit/source/gtk/lokdocview.cxx @@ -1163,13 +1163,25 @@ callback (gpointer pData) break; case LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR: { - priv->m_aVisibleCursor = payloadToRectangle(pDocView, pCallback->m_aPayload.c_str()); + + std::stringstream aStream(pCallback->m_aPayload); + boost::property_tree::ptree aTree; + boost::property_tree::read_json(aStream, aTree); + const std::string& rRectangle = aTree.get("rectangle"); + int nViewId = aTree.get("viewId"); + + priv->m_aVisibleCursor = payloadToRectangle(pDocView, rRectangle.c_str()); priv->m_bCursorOverlayVisible = true; - g_signal_emit(pDocView, doc_view_signals[CURSOR_CHANGED], 0, + std::cerr << nViewId; + std::cerr << priv->m_nViewId; + if(nViewId == priv->m_nViewId) + { + g_signal_emit(pDocView, doc_view_signals[CURSOR_CHANGED], 0, priv->m_aVisibleCursor.x, priv->m_aVisibleCursor.y, priv->m_aVisibleCursor.width, priv->m_aVisibleCursor.height); + } gtk_widget_queue_draw(GTK_WIDGET(pDocView)); } break; @@ -2701,6 +2713,7 @@ static gboolean lok_doc_view_initable_init (GInitable *initable, GCancellable* / return FALSE; } priv->m_nLOKFeatures |= LOK_FEATURE_PART_IN_INVALIDATION_CALLBACK; + priv->m_nLOKFeatures |= LOK_FEATURE_VIEWID_IN_VISCURSOR_INVALIDATION_CALLBACK; priv->m_pOffice->pClass->setOptionalFeatures(priv->m_pOffice, priv->m_nLOKFeatures); return TRUE; -- cgit