summaryrefslogtreecommitdiff
path: root/libreofficekit
diff options
context:
space:
mode:
authorPranav Kant <pranavk@libreoffice.org>2015-12-17 21:03:47 +0530
committerDavid Tardon <dtardon@redhat.com>2015-12-17 15:52:54 +0000
commitdf4a196b8f1e97d8a45d1d517942e01bd13182e7 (patch)
treeafdc152abf7c161368a4d48ef3fe4e31b9c22cce /libreofficekit
parentd1385731031fc30cfc2c182279ba5d4feb497328 (diff)
lokdocview: Return if no document is set
For example, when document has been destroyed using lok_doc_view_destroy_document() Change-Id: I531b85018ffa25bcf88fb101c912b9f11b489a97 Reviewed-on: https://gerrit.libreoffice.org/20779 Reviewed-by: David Tardon <dtardon@redhat.com> Tested-by: David Tardon <dtardon@redhat.com>
Diffstat (limited to 'libreofficekit')
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx3
-rw-r--r--libreofficekit/source/gtk/lokdocview.cxx35
2 files changed, 36 insertions, 2 deletions
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index e49b5a403622..04d74d6646c3 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -562,7 +562,10 @@ static void doCopy(GtkWidget* pButton, gpointer /*pItem*/)
TiledWindow& rWindow = lcl_getTiledWindow(pButton);
LOKDocView* pLOKDocView = LOK_DOC_VIEW(rWindow.m_pDocView);
char* pUsedFormat = nullptr;
+ // TODO: Should check `text-selection` signal before trying to copy
char* pSelection = lok_doc_view_copy_selection(pLOKDocView, "text/html", &pUsedFormat);
+ if (!pSelection)
+ return;
GtkClipboard* pClipboard = gtk_clipboard_get_for_display(gtk_widget_get_display(rWindow.m_pDocView), GDK_SELECTION_CLIPBOARD);
std::string aUsedFormat(pUsedFormat);
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index 7d4e516e31ee..6b899551cd0d 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -341,6 +341,9 @@ doSearch(LOKDocView* pDocView, const char* pText, bool bBackwards, bool highligh
cairo_rectangle_int_t cairoVisRect;
int x, y;
+ if (!priv->m_pDocument)
+ return;
+
cairo_region_get_rectangle(cairoVisRegion, 0, &cairoVisRect);
x = pixelToTwip (cairoVisRect.x, priv->m_fZoom);
y = pixelToTwip (cairoVisRect.y, priv->m_fZoom);
@@ -1629,8 +1632,6 @@ setClientZoomInThread(gpointer data)
LOKDocViewPrivate& priv = getPrivate(pDocView);
LOEvent* pLOEvent = static_cast<LOEvent*>(g_task_get_task_data(task));
- if (!priv->m_pDocument)
- return;
priv->m_pDocument->pClass->setClientZoom(priv->m_pDocument,
pLOEvent->m_nTilePixelWidth,
pLOEvent->m_nTilePixelHeight,
@@ -2520,6 +2521,9 @@ SAL_DLLPUBLIC_EXPORT gint
lok_doc_view_get_parts (LOKDocView* pDocView)
{
LOKDocViewPrivate& priv = getPrivate(pDocView);
+ if (!priv->m_pDocument)
+ return -1;
+
priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId);
return priv->m_pDocument->pClass->getParts( priv->m_pDocument );
}
@@ -2528,6 +2532,9 @@ SAL_DLLPUBLIC_EXPORT gint
lok_doc_view_get_part (LOKDocView* pDocView)
{
LOKDocViewPrivate& priv = getPrivate(pDocView);
+ if (!priv->m_pDocument)
+ return -1;
+
priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId);
return priv->m_pDocument->pClass->getPart( priv->m_pDocument );
}
@@ -2540,6 +2547,9 @@ lok_doc_view_set_part (LOKDocView* pDocView, int nPart)
LOEvent* pLOEvent = new LOEvent(LOK_SET_PART);
GError* error = nullptr;
+ if (!priv->m_pDocument)
+ return;
+
pLOEvent->m_nPart = nPart;
g_task_set_task_data(task, pLOEvent, LOEvent::destroy);
@@ -2556,6 +2566,10 @@ SAL_DLLPUBLIC_EXPORT gchar*
lok_doc_view_get_part_name (LOKDocView* pDocView, int nPart)
{
LOKDocViewPrivate& priv = getPrivate(pDocView);
+
+ if (!priv->m_pDocument)
+ return nullptr;
+
priv->m_pDocument->pClass->setView(priv->m_pDocument, priv->m_nViewId);
return priv->m_pDocument->pClass->getPartName( priv->m_pDocument, nPart );
}
@@ -2568,6 +2582,10 @@ lok_doc_view_set_partmode(LOKDocView* pDocView,
GTask* task = g_task_new(pDocView, nullptr, nullptr, nullptr);
LOEvent* pLOEvent = new LOEvent(LOK_SET_PARTMODE);
GError* error = nullptr;
+
+ if (!priv->m_pDocument)
+ return;
+
pLOEvent->m_nPartMode = nPartMode;
g_task_set_task_data(task, pLOEvent, LOEvent::destroy);
@@ -2634,6 +2652,10 @@ lok_doc_view_set_edit(LOKDocView* pDocView,
GTask* task = g_task_new(pDocView, nullptr, nullptr, nullptr);
LOEvent* pLOEvent = new LOEvent(LOK_SET_EDIT);
GError* error = nullptr;
+
+ if (!priv->m_pDocument)
+ return;
+
pLOEvent->m_bEdit = bEdit;
g_task_set_task_data(task, pLOEvent, LOEvent::destroy);
@@ -2660,6 +2682,10 @@ lok_doc_view_post_command (LOKDocView* pDocView,
gboolean bNotifyWhenFinished)
{
LOKDocViewPrivate& priv = getPrivate(pDocView);
+
+ if (!priv->m_pDocument)
+ return;
+
if (priv->m_bEdit)
LOKPostCommand(pDocView, pCommand, pArguments, bNotifyWhenFinished);
else
@@ -2695,6 +2721,8 @@ lok_doc_view_copy_selection (LOKDocView* pDocView,
gchar** pUsedMimeType)
{
LibreOfficeKitDocument* pDocument = lok_doc_view_get_document(pDocView);
+ if (!pDocument)
+ return nullptr;
return pDocument->pClass->getTextSelection(pDocument, pMimeType, pUsedMimeType);
}
@@ -2708,6 +2736,9 @@ lok_doc_view_paste (LOKDocView* pDocView,
LibreOfficeKitDocument* pDocument = priv->m_pDocument;
gboolean ret = 0;
+ if (!pDocument)
+ return false;
+
if (!priv->m_bEdit)
{
g_info ("ignoring paste in view-only mode");