diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-06-14 11:41:24 +0200 |
---|---|---|
committer | Ashod Nakashian <ashod.nakashian@collabora.co.uk> | 2016-07-12 22:06:35 -0400 |
commit | ebd3cb79940bb08fa3aa1578859e3d6a550fae7e (patch) | |
tree | 36a516059dfd4c33078278f1b318e41bd5ba9d1f /libreofficekit | |
parent | a1f0a812dd5cb772930a48afd73e7b517939f214 (diff) |
lok_doc_view_reset_view: don't touch the view id
Otherwise the following can happen:
- view #0 is created
- view #1 is created
- view #1 changes part, so lok_doc_view_reset_view() gets called
- view #1 calls postMouseEvent(), but claims it happened on view #0
Also log all setView() calls in the widget.
Change-Id: Iefcf82d9396b2af75586e79dde59998320f41d60
Reviewed-on: https://gerrit.libreoffice.org/26245
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
(cherry picked from commit 60e57960f25202f7b23bf4dbbda46780fb6032a9)
Diffstat (limited to 'libreofficekit')
-rw-r--r-- | libreofficekit/source/gtk/lokdocview.cxx | 63 |
1 files changed, 54 insertions, 9 deletions
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx index a69c66fde3ac..0a4b58ea358a 100644 --- a/libreofficekit/source/gtk/lokdocview.cxx +++ b/libreofficekit/source/gtk/lokdocview.cxx @@ -571,11 +571,14 @@ postKeyEventInThread(gpointer data) LOKDocViewPrivate& priv = getPrivate(pDocView); LOEvent* pLOEvent = static_cast<LOEvent*>(g_task_get_task_data(task)); + std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); if (priv->m_nTileSizeTwips) { - std::stringstream ss; + ss.str(std::string()); ss << "lok::Document::setClientZoom(" << nTileSizePixels << ", " << nTileSizePixels << ", " << priv->m_nTileSizeTwips << ", " << priv->m_nTileSizeTwips << ")"; g_info("%s", ss.str().c_str()); priv->m_pDocument->pClass->setClientZoom(priv->m_pDocument, @@ -587,11 +590,19 @@ postKeyEventInThread(gpointer data) } if (priv->m_bVisibleAreaSet) { - // TODO invoke lok::Document::setVisibleArea() here. + ss.str(std::string()); + ss << "lok::Document::setClientVisibleArea(" << priv->m_aVisibleArea.x << ", " << priv->m_aVisibleArea.y << ", "; + ss << priv->m_aVisibleArea.width << ", " << priv->m_aVisibleArea.height << ")"; + g_info("%s", ss.str().c_str()); + priv->m_pDocument->pClass->setClientVisibleArea(priv->m_pDocument, + priv->m_aVisibleArea.x, + priv->m_aVisibleArea.y, + priv->m_aVisibleArea.width, + priv->m_aVisibleArea.height); priv->m_bVisibleAreaSet = false; } - std::stringstream ss; + ss.str(std::string()); ss << "lok::Document::postKeyEvent(" << pLOEvent->m_nKeyEvent << ", " << pLOEvent->m_nCharCode << ", " << pLOEvent->m_nKeyCode << ")"; g_info("%s", ss.str().c_str()); priv->m_pDocument->pClass->postKeyEvent(priv->m_pDocument, @@ -815,6 +826,9 @@ static gboolean postDocumentLoad(gpointer pData) LOKDocView* pLOKDocView = static_cast<LOKDocView*>(pData); LOKDocViewPrivate& priv = getPrivate(pLOKDocView); + std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); priv->m_pDocument->pClass->initializeForRendering(priv->m_pDocument, priv->m_aRenderingArguments.c_str()); priv->m_pDocument->pClass->registerCallback(priv->m_pDocument, callbackWorker, pLOKDocView); @@ -1616,6 +1630,9 @@ lok_doc_view_signal_motion (GtkWidget* pWidget, GdkEventMotion* pEvent) GdkPoint aPoint; GError* error = nullptr; + std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); if (priv->m_bInDragMiddleHandle) { @@ -1712,8 +1729,11 @@ setGraphicSelectionInThread(gpointer data) LOKDocViewPrivate& priv = getPrivate(pDocView); LOEvent* pLOEvent = static_cast<LOEvent*>(g_task_get_task_data(task)); - priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); + priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); + ss.str(std::string()); ss << "lok::Document::setGraphicSelection(" << pLOEvent->m_nSetGraphicSelectionType; ss << ", " << pLOEvent->m_nSetGraphicSelectionX; ss << ", " << pLOEvent->m_nSetGraphicSelectionY << ")"; @@ -1747,8 +1767,11 @@ postMouseEventInThread(gpointer data) LOKDocViewPrivate& priv = getPrivate(pDocView); LOEvent* pLOEvent = static_cast<LOEvent*>(g_task_get_task_data(task)); - priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); + priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); + ss.str(std::string()); ss << "lok::Document::postMouseEvent(" << pLOEvent->m_nPostMouseEventType; ss << ", " << pLOEvent->m_nPostMouseEventX; ss << ", " << pLOEvent->m_nPostMouseEventY; @@ -1801,6 +1824,9 @@ setPartInThread(gpointer data) LOEvent* pLOEvent = static_cast<LOEvent*>(g_task_get_task_data(task)); int nPart = pLOEvent->m_nPart; + std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); priv->m_pDocument->pClass->setPart( priv->m_pDocument, nPart ); @@ -1816,6 +1842,9 @@ setPartmodeInThread(gpointer data) LOEvent* pLOEvent = static_cast<LOEvent*>(g_task_get_task_data(task)); int nPartMode = pLOEvent->m_nPartMode; + std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); priv->m_pDocument->pClass->setPartMode( priv->m_pDocument, nPartMode ); } @@ -1835,6 +1864,9 @@ setEditInThread(gpointer data) else if (priv->m_bEdit && !bEdit) { g_info("lok_doc_view_set_edit: leaving edit mode"); + std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); priv->m_pDocument->pClass->resetSelection(priv->m_pDocument); } @@ -1851,8 +1883,11 @@ postCommandInThread (gpointer data) LOEvent* pLOEvent = static_cast<LOEvent*>(g_task_get_task_data(task)); LOKDocViewPrivate& priv = getPrivate(pDocView); - priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); + priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); + ss.str(std::string()); ss << "lok::Document::postUnoCommand(" << pLOEvent->m_pCommand << ", " << pLOEvent->m_pArguments << ")"; g_info("%s", ss.str().c_str()); priv->m_pDocument->pClass->postUnoCommand(priv->m_pDocument, pLOEvent->m_pCommand, pLOEvent->m_pArguments, pLOEvent->m_bNotifyWhenFinished); @@ -1898,8 +1933,11 @@ paintTileInThread (gpointer data) aTileRectangle.x = pixelToTwip(nTileSizePixels, pLOEvent->m_fPaintTileZoom) * pLOEvent->m_nPaintTileY; aTileRectangle.y = pixelToTwip(nTileSizePixels, pLOEvent->m_fPaintTileZoom) * pLOEvent->m_nPaintTileX; - priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); + priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); + ss.str(std::string()); GTimer* aTimer = g_timer_new(); gulong nElapsedMs; ss << "lok::Document::paintTile(" << static_cast<void*>(pBuffer) << ", " @@ -2791,6 +2829,9 @@ lok_doc_view_get_parts (LOKDocView* pDocView) if (!priv->m_pDocument) return -1; + std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); return priv->m_pDocument->pClass->getParts( priv->m_pDocument ); } @@ -2802,6 +2843,9 @@ lok_doc_view_get_part (LOKDocView* pDocView) if (!priv->m_pDocument) return -1; + std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); return priv->m_pDocument->pClass->getPart( priv->m_pDocument ); } @@ -2842,6 +2886,9 @@ lok_doc_view_get_part_name (LOKDocView* pDocView, int nPart) if (!priv->m_pDocument) return nullptr; + std::stringstream ss; + ss << "lok::Document::setView(" << priv->m_nViewId << ")"; + g_info("%s", ss.str().c_str()); priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId); return priv->m_pDocument->pClass->getPartName( priv->m_pDocument, nPart ); } @@ -2913,8 +2960,6 @@ lok_doc_view_reset_view(LOKDocView* pDocView) memset(&priv->m_aGraphicHandleRects, 0, sizeof(priv->m_aGraphicHandleRects)); memset(&priv->m_bInDragGraphicHandles, 0, sizeof(priv->m_bInDragGraphicHandles)); - priv->m_nViewId = 0; - gtk_widget_queue_draw(GTK_WIDGET(pDocView)); } |