69cc7b
From 243d94875dc9c24932c2aec5ec44cf31e310d006 Mon Sep 17 00:00:00 2001
69cc7b
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
69cc7b
Date: Thu, 21 Dec 2017 16:19:42 +0000
69cc7b
Subject: [PATCH] rhbz#1527945 segv on failed open of password protected doc in
69cc7b
 gnome-documents
69cc7b
69cc7b
Change-Id: I1bec502ae20d03214c673d8911792c89669c0fe9
69cc7b
Reviewed-on: https://gerrit.libreoffice.org/46923
69cc7b
Tested-by: Jenkins <ci@libreoffice.org>
69cc7b
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
69cc7b
(cherry picked from commit a61f45499856aad9910d82af1312a163504c15c2)
69cc7b
69cc7b
Lok: number callback enum for easier debugging
69cc7b
69cc7b
Since the entries and their order are part of the
69cc7b
public API, and will not change, numbering them
69cc7b
makes it easier to trap particular callbacks by
69cc7b
their number (as that's what shows in logs and
69cc7b
the debugger).
69cc7b
69cc7b
Change-Id: Ife2fe3e601ce3dce0939363d748fcb54d3c85fd4
69cc7b
Reviewed-on: https://gerrit.libreoffice.org/31257
69cc7b
Tested-by: Jenkins <ci@libreoffice.org>
69cc7b
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
69cc7b
(cherry picked from commit 719f7cb94ce783349fb1cf366a78edd9996d3e37)
69cc7b
69cc7b
lokdocview: use std::string where possible
69cc7b
69cc7b
This also prevents an invalid memory access: we were storing the pointer
69cc7b
to a temporary in the struct and then using it after temporary was gone.
69cc7b
69cc7b
Change-Id: I2b6d9df16bc24b222095ccbf45c9f0bd9c86ed65
69cc7b
(cherry picked from commit 9d2e0d60c0381a4bb23fada14c80e032b68bf2a8)
69cc7b
Reviewed-on: https://gerrit.libreoffice.org/46951
69cc7b
Tested-by: Jenkins <ci@libreoffice.org>
69cc7b
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
69cc7b
(cherry picked from commit 4ed5f5b28aaaf4522b71f32fb2f9f6a960dbff69)
69cc7b
---
69cc7b
 include/LibreOfficeKit/LibreOfficeKitEnums.h | 64 ++++++++++++++--------------
69cc7b
 libreofficekit/source/gtk/lokdocview.cxx     | 44 +++++++++----------
69cc7b
 2 files changed, 53 insertions(+), 55 deletions(-)
69cc7b
69cc7b
diff --git a/include/LibreOfficeKit/LibreOfficeKitEnums.h b/include/LibreOfficeKit/LibreOfficeKitEnums.h
69cc7b
index 187fa9812e60..d2ccc0fdccd8 100644
69cc7b
--- a/include/LibreOfficeKit/LibreOfficeKitEnums.h
69cc7b
+++ b/include/LibreOfficeKit/LibreOfficeKitEnums.h
69cc7b
@@ -93,13 +93,13 @@ typedef enum
69cc7b
      *
69cc7b
      * @see LOK_FEATURE_PART_IN_INVALIDATION_CALLBACK.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_INVALIDATE_TILES,
69cc7b
+    LOK_CALLBACK_INVALIDATE_TILES = 0,
69cc7b
     /**
69cc7b
      * The size and/or the position of the visible cursor changed.
69cc7b
      *
69cc7b
      * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR,
69cc7b
+    LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR = 1,
69cc7b
     /**
69cc7b
      * The list of rectangles representing the current text selection changed.
69cc7b
      *
69cc7b
@@ -108,7 +108,7 @@ typedef enum
69cc7b
      * LOK_CALLBACK_INVALIDATE_TILES. When there is no selection, an empty
69cc7b
      * string is provided.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_TEXT_SELECTION,
69cc7b
+    LOK_CALLBACK_TEXT_SELECTION = 2,
69cc7b
     /**
69cc7b
      * The position and size of the cursor rectangle at the text
69cc7b
      * selection start. It is used to draw the selection handles.
69cc7b
@@ -118,7 +118,7 @@ typedef enum
69cc7b
      *
69cc7b
      * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_TEXT_SELECTION_START,
69cc7b
+    LOK_CALLBACK_TEXT_SELECTION_START = 3,
69cc7b
     /**
69cc7b
      * The position and size of the cursor rectangle at the text
69cc7b
      * selection end. It is used to draw the selection handles.
69cc7b
@@ -128,7 +128,7 @@ typedef enum
69cc7b
      *
69cc7b
      * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_TEXT_SELECTION_END,
69cc7b
+    LOK_CALLBACK_TEXT_SELECTION_END = 4,
69cc7b
     /**
69cc7b
      * The blinking text cursor is now visible or not.
69cc7b
      *
69cc7b
@@ -137,26 +137,26 @@ typedef enum
69cc7b
      * LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR once it becomes false. Payload is
69cc7b
      * either the "true" or the "false" string.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_CURSOR_VISIBLE,
69cc7b
+    LOK_CALLBACK_CURSOR_VISIBLE = 5,
69cc7b
     /**
69cc7b
      * The size and/or the position of the graphic selection changed.
69cc7b
      *
69cc7b
      * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_GRAPHIC_SELECTION,
69cc7b
+    LOK_CALLBACK_GRAPHIC_SELECTION = 6,
69cc7b
 
69cc7b
     /**
69cc7b
      * User clicked on an hyperlink that should be handled by other
69cc7b
      * applications accordingly.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_HYPERLINK_CLICKED,
69cc7b
+    LOK_CALLBACK_HYPERLINK_CLICKED = 7,
69cc7b
 
69cc7b
     /**
69cc7b
      * Emit state update to the client.
69cc7b
      * For example, when cursor is on bold text, this callback is triggered
69cc7b
      * with payload: ".uno:Bold=true"
69cc7b
      */
69cc7b
-    LOK_CALLBACK_STATE_CHANGED,
69cc7b
+    LOK_CALLBACK_STATE_CHANGED = 8,
69cc7b
 
69cc7b
     /**
69cc7b
      * Start a "status indicator" (here restricted to a progress bar type
69cc7b
@@ -172,25 +172,25 @@ typedef enum
69cc7b
      * loading a document and then constructing a LibreOfficeKitDocument
69cc7b
      * object.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_STATUS_INDICATOR_START,
69cc7b
+    LOK_CALLBACK_STATUS_INDICATOR_START = 9,
69cc7b
 
69cc7b
     /**
69cc7b
      * Sets the numeric value of the status indicator.
69cc7b
      * The payload should be a percentage, an integer between 0 and 100.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE,
69cc7b
+    LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE = 10,
69cc7b
 
69cc7b
     /**
69cc7b
      * Ends the status indicator.
69cc7b
      *
69cc7b
      * Not necessarily ever emitted.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_STATUS_INDICATOR_FINISH,
69cc7b
+    LOK_CALLBACK_STATUS_INDICATOR_FINISH = 11,
69cc7b
 
69cc7b
     /**
69cc7b
      * No match was found for the search input
69cc7b
      */
69cc7b
-    LOK_CALLBACK_SEARCH_NOT_FOUND,
69cc7b
+    LOK_CALLBACK_SEARCH_NOT_FOUND = 12,
69cc7b
 
69cc7b
     /**
69cc7b
      * Size of the document changed.
69cc7b
@@ -198,14 +198,14 @@ typedef enum
69cc7b
      * Payload format is "width, height", i.e. clients get the new size without
69cc7b
      * having to do an explicit lok::Document::getDocumentSize() call.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_DOCUMENT_SIZE_CHANGED,
69cc7b
+    LOK_CALLBACK_DOCUMENT_SIZE_CHANGED = 13,
69cc7b
 
69cc7b
     /**
69cc7b
      * The current part number is changed.
69cc7b
      *
69cc7b
      * Payload is a single 0-based integer.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_SET_PART,
69cc7b
+    LOK_CALLBACK_SET_PART = 14,
69cc7b
 
69cc7b
     /**
69cc7b
      * Selection rectangles of the search result when find all is performed.
69cc7b
@@ -231,7 +231,7 @@ typedef enum
69cc7b
      * - searchResultSelection is an array of part-number and rectangle list
69cc7b
      *   pairs, in LOK_CALLBACK_SET_PART / LOK_CALLBACK_TEXT_SELECTION format.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_SEARCH_RESULT_SELECTION,
69cc7b
+    LOK_CALLBACK_SEARCH_RESULT_SELECTION = 15,
69cc7b
 
69cc7b
     /**
69cc7b
      * Result of the UNO command execution when bNotifyWhenFinished was set
69cc7b
@@ -246,26 +246,26 @@ typedef enum
69cc7b
      *     // TODO "result": "..."  // UNO Any converted to JSON (not implemented yet)
69cc7b
      * }
69cc7b
      */
69cc7b
-    LOK_CALLBACK_UNO_COMMAND_RESULT,
69cc7b
+    LOK_CALLBACK_UNO_COMMAND_RESULT = 16,
69cc7b
 
69cc7b
     /**
69cc7b
      * The size and/or the position of the cell cursor changed.
69cc7b
      *
69cc7b
      * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_CELL_CURSOR,
69cc7b
+    LOK_CALLBACK_CELL_CURSOR = 17,
69cc7b
 
69cc7b
     /**
69cc7b
      * The current mouse pointer style.
69cc7b
      *
69cc7b
      * Payload is a css mouse pointer style.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_MOUSE_POINTER,
69cc7b
+    LOK_CALLBACK_MOUSE_POINTER = 18,
69cc7b
 
69cc7b
     /**
69cc7b
      * The text content of the formula bar in Calc.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_CELL_FORMULA,
69cc7b
+    LOK_CALLBACK_CELL_FORMULA = 19,
69cc7b
 
69cc7b
     /**
69cc7b
      * Loading a document requires a password.
69cc7b
@@ -274,7 +274,7 @@ typedef enum
69cc7b
      * lok::Office::setDocumentPassword().  The document cannot be loaded
69cc7b
      * without the password.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_DOCUMENT_PASSWORD,
69cc7b
+    LOK_CALLBACK_DOCUMENT_PASSWORD = 20,
69cc7b
 
69cc7b
     /**
69cc7b
      * Editing a document requires a password.
69cc7b
@@ -282,7 +282,7 @@ typedef enum
69cc7b
      * Loading the document is blocked until the password is provided via
69cc7b
      * lok::Office::setDocumentPassword().
69cc7b
      */
69cc7b
-    LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY,
69cc7b
+    LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY = 21,
69cc7b
 
69cc7b
     /**
69cc7b
      * An error happened.
69cc7b
@@ -296,7 +296,7 @@ typedef enum
69cc7b
      *     "message": freeform description
69cc7b
      * }
69cc7b
      */
69cc7b
-    LOK_CALLBACK_ERROR,
69cc7b
+    LOK_CALLBACK_ERROR = 22,
69cc7b
 
69cc7b
     /**
69cc7b
      * Context menu structure
69cc7b
@@ -318,7 +318,7 @@ typedef enum
69cc7b
      *
69cc7b
      *     {"text": "label text3", "type": "command", "command": ".uno:Something3", "checktype": "checkmark|radio|auto", "checked": "true|false"}
69cc7b
      */
69cc7b
-    LOK_CALLBACK_CONTEXT_MENU,
69cc7b
+    LOK_CALLBACK_CONTEXT_MENU = 23,
69cc7b
 
69cc7b
     /**
69cc7b
      * The size and/or the position of the view cursor changed. A view cursor
69cc7b
@@ -334,7 +334,7 @@ typedef enum
69cc7b
      * - viewId is a value returned earlier by lok::Document::createView()
69cc7b
      * - rectangle uses the format of LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR
69cc7b
      */
69cc7b
-    LOK_CALLBACK_INVALIDATE_VIEW_CURSOR,
69cc7b
+    LOK_CALLBACK_INVALIDATE_VIEW_CURSOR = 24,
69cc7b
 
69cc7b
     /**
69cc7b
      * The text selection in one of the other views has changed.
69cc7b
@@ -349,7 +349,7 @@ typedef enum
69cc7b
      * - viewId is a value returned earlier by lok::Document::createView()
69cc7b
      * - selection uses the format of LOK_CALLBACK_TEXT_SELECTION.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_TEXT_VIEW_SELECTION,
69cc7b
+    LOK_CALLBACK_TEXT_VIEW_SELECTION = 25,
69cc7b
 
69cc7b
     /**
69cc7b
      * The cell cursor in one of the other views has changed.
69cc7b
@@ -364,7 +364,7 @@ typedef enum
69cc7b
      * - viewId is a value returned earlier by lok::Document::createView()
69cc7b
      * - rectangle uses the format of LOK_CALLBACK_CELL_CURSOR.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_CELL_VIEW_CURSOR,
69cc7b
+    LOK_CALLBACK_CELL_VIEW_CURSOR = 26,
69cc7b
 
69cc7b
     /**
69cc7b
      * The size and/or the position of a graphic selection in one of the other
69cc7b
@@ -380,7 +380,7 @@ typedef enum
69cc7b
      * - viewId is a value returned earlier by lok::Document::createView()
69cc7b
      * - selection uses the format of LOK_CALLBACK_INVALIDATE_TILES.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_GRAPHIC_VIEW_SELECTION,
69cc7b
+    LOK_CALLBACK_GRAPHIC_VIEW_SELECTION = 27,
69cc7b
 
69cc7b
     /**
69cc7b
      * The blinking text cursor in one of the other views is now visible or
69cc7b
@@ -396,7 +396,7 @@ typedef enum
69cc7b
      * - viewId is a value returned earlier by lok::Document::createView()
69cc7b
      * - visible uses the format of LOK_CALLBACK_CURSOR_VISIBLE.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_VIEW_CURSOR_VISIBLE,
69cc7b
+    LOK_CALLBACK_VIEW_CURSOR_VISIBLE = 28,
69cc7b
 
69cc7b
     /**
69cc7b
      * The size and/or the position of a lock rectangle in one of the other
69cc7b
@@ -412,7 +412,7 @@ typedef enum
69cc7b
      * - viewId is a value returned earlier by lok::Document::createView()
69cc7b
      * - rectangle uses the format of LOK_CALLBACK_INVALIDATE_TILES.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_VIEW_LOCK,
69cc7b
+    LOK_CALLBACK_VIEW_LOCK = 29,
69cc7b
 
69cc7b
     /**
69cc7b
      * The size of the change tracking table has changed.
69cc7b
@@ -437,7 +437,7 @@ typedef enum
69cc7b
      * - 'action' is either 'Add' or 'Remove', depending on if this is an
69cc7b
      *   insertion into the table or a removal.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_REDLINE_TABLE_SIZE_CHANGED,
69cc7b
+    LOK_CALLBACK_REDLINE_TABLE_SIZE_CHANGED = 30,
69cc7b
 
69cc7b
     /**
69cc7b
      * An entry in the change tracking table has been modified.
69cc7b
@@ -461,7 +461,7 @@ typedef enum
69cc7b
      *
69cc7b
      * - 'action' is 'Modify'.
69cc7b
      */
69cc7b
-    LOK_CALLBACK_REDLINE_TABLE_ENTRY_MODIFIED,
69cc7b
+    LOK_CALLBACK_REDLINE_TABLE_ENTRY_MODIFIED = 31,
69cc7b
 }
69cc7b
 LibreOfficeKitCallbackType;
69cc7b
 
69cc7b
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
69cc7b
index 0b48cf8b7373..bbf64bf9ec9a 100644
69cc7b
--- a/libreofficekit/source/gtk/lokdocview.cxx
69cc7b
+++ b/libreofficekit/source/gtk/lokdocview.cxx
69cc7b
@@ -77,9 +77,9 @@ struct ViewRectangles
69cc7b
 /// Private struct used by this GObject type
69cc7b
 struct LOKDocViewPrivateImpl
69cc7b
 {
69cc7b
-    const gchar* m_aLOPath;
69cc7b
-    const gchar* m_pUserProfileURL;
69cc7b
-    const gchar* m_aDocPath;
69cc7b
+    std::string m_aLOPath;
69cc7b
+    std::string m_aUserProfileURL;
69cc7b
+    std::string m_aDocPath;
69cc7b
     std::string m_aRenderingArguments;
69cc7b
     gdouble m_nLoadProgress;
69cc7b
     gboolean m_bIsLoading;
69cc7b
@@ -195,10 +195,7 @@ struct LOKDocViewPrivateImpl
69cc7b
     std::map<int, ViewRectangle> m_aViewLockRectangles;
69cc7b
 
69cc7b
     LOKDocViewPrivateImpl()
69cc7b
-        : m_aLOPath(nullptr),
69cc7b
-        m_pUserProfileURL(nullptr),
69cc7b
-        m_aDocPath(nullptr),
69cc7b
-        m_nLoadProgress(0),
69cc7b
+        : m_nLoadProgress(0),
69cc7b
         m_bIsLoading(false),
69cc7b
         m_bCanZoomIn(true),
69cc7b
         m_bCanZoomOut(true),
69cc7b
@@ -1736,7 +1733,7 @@ renderOverlay(LOKDocView* pDocView, cairo_t* pCairo)
69cc7b
     if (priv->m_bEdit && priv->m_bCursorVisible && !isEmptyRectangle(priv->m_aVisibleCursor) && priv->m_aTextSelectionRectangles.empty())
69cc7b
     {
69cc7b
         // Have a cursor, but no selection: we need the middle handle.
69cc7b
-        gchar* handleMiddlePath = g_strconcat (priv->m_aLOPath, CURSOR_HANDLE_DIR, "handle_image_middle.png", nullptr);
69cc7b
+        gchar* handleMiddlePath = g_strconcat (priv->m_aLOPath.c_str(), CURSOR_HANDLE_DIR, "handle_image_middle.png", nullptr);
69cc7b
         if (!priv->m_pHandleMiddle)
69cc7b
         {
69cc7b
             priv->m_pHandleMiddle = cairo_image_surface_create_from_png(handleMiddlePath);
69cc7b
@@ -1764,7 +1761,7 @@ renderOverlay(LOKDocView* pDocView, cairo_t* pCairo)
69cc7b
         if (!isEmptyRectangle(priv->m_aTextSelectionStart))
69cc7b
         {
69cc7b
             // Have a start position: we need a start handle.
69cc7b
-            gchar* handleStartPath = g_strconcat (priv->m_aLOPath, CURSOR_HANDLE_DIR, "handle_image_start.png", nullptr);
69cc7b
+            gchar* handleStartPath = g_strconcat (priv->m_aLOPath.c_str(), CURSOR_HANDLE_DIR, "handle_image_start.png", nullptr);
69cc7b
             if (!priv->m_pHandleStart)
69cc7b
             {
69cc7b
                 priv->m_pHandleStart = cairo_image_surface_create_from_png(handleStartPath);
69cc7b
@@ -1776,7 +1773,7 @@ renderOverlay(LOKDocView* pDocView, cairo_t* pCairo)
69cc7b
         if (!isEmptyRectangle(priv->m_aTextSelectionEnd))
69cc7b
         {
69cc7b
             // Have a start position: we need an end handle.
69cc7b
-            gchar* handleEndPath = g_strconcat (priv->m_aLOPath, CURSOR_HANDLE_DIR, "handle_image_end.png", nullptr);
69cc7b
+            gchar* handleEndPath = g_strconcat (priv->m_aLOPath.c_str(), CURSOR_HANDLE_DIR, "handle_image_end.png", nullptr);
69cc7b
             if (!priv->m_pHandleEnd)
69cc7b
             {
69cc7b
                 priv->m_pHandleEnd = cairo_image_surface_create_from_png(handleEndPath);
69cc7b
@@ -2207,8 +2204,7 @@ openDocumentInThread (gpointer data)
69cc7b
     }
69cc7b
 
69cc7b
     priv->m_pOffice->pClass->registerCallback(priv->m_pOffice, globalCallbackWorker, pDocView);
69cc7b
-    priv->m_pDocument = priv->m_pOffice->pClass->documentLoad( priv->m_pOffice, priv->m_aDocPath );
69cc7b
-    priv->m_eDocumentType = static_cast<LibreOfficeKitDocumentType>(priv->m_pDocument->pClass->getDocumentType(priv->m_pDocument));
69cc7b
+    priv->m_pDocument = priv->m_pOffice->pClass->documentLoad( priv->m_pOffice, priv->m_aDocPath.c_str() );
69cc7b
     if ( !priv->m_pDocument )
69cc7b
     {
69cc7b
         char *pError = priv->m_pOffice->pClass->getError( priv->m_pOffice );
69cc7b
@@ -2216,6 +2212,7 @@ openDocumentInThread (gpointer data)
69cc7b
     }
69cc7b
     else
69cc7b
     {
69cc7b
+        priv->m_eDocumentType = static_cast<LibreOfficeKitDocumentType>(priv->m_pDocument->pClass->getDocumentType(priv->m_pDocument));
69cc7b
         gdk_threads_add_idle(postDocumentLoad, pDocView);
69cc7b
         g_task_return_boolean (task, true);
69cc7b
     }
69cc7b
@@ -2469,16 +2466,17 @@ static void lok_doc_view_set_property (GObject* object, guint propId, const GVal
69cc7b
     switch (propId)
69cc7b
     {
69cc7b
     case PROP_LO_PATH:
69cc7b
-        priv->m_aLOPath = g_value_dup_string (value);
69cc7b
+        priv->m_aLOPath = g_value_get_string (value);
69cc7b
         break;
69cc7b
     case PROP_LO_POINTER:
69cc7b
         priv->m_pOffice = static_cast<LibreOfficeKit*>(g_value_get_pointer(value));
69cc7b
         break;
69cc7b
     case PROP_USER_PROFILE_URL:
69cc7b
-        priv->m_pUserProfileURL = g_value_dup_string(value);
69cc7b
+        if (const gchar* pUserProfile = g_value_get_string(value))
69cc7b
+            priv->m_aUserProfileURL = pUserProfile;
69cc7b
         break;
69cc7b
     case PROP_DOC_PATH:
69cc7b
-        priv->m_aDocPath = g_value_dup_string (value);
69cc7b
+        priv->m_aDocPath = g_value_get_string (value);
69cc7b
         break;
69cc7b
     case PROP_DOC_POINTER:
69cc7b
         priv->m_pDocument = static_cast<LibreOfficeKitDocument*>(g_value_get_pointer(value));
69cc7b
@@ -2523,16 +2521,16 @@ static void lok_doc_view_get_property (GObject* object, guint propId, GValue *va
69cc7b
     switch (propId)
69cc7b
     {
69cc7b
     case PROP_LO_PATH:
69cc7b
-        g_value_set_string (value, priv->m_aLOPath);
69cc7b
+        g_value_set_string (value, priv->m_aLOPath.c_str());
69cc7b
         break;
69cc7b
     case PROP_LO_POINTER:
69cc7b
         g_value_set_pointer(value, priv->m_pOffice);
69cc7b
         break;
69cc7b
     case PROP_USER_PROFILE_URL:
69cc7b
-        g_value_set_string(value, priv->m_pUserProfileURL);
69cc7b
+        g_value_set_string(value, priv->m_aUserProfileURL.c_str());
69cc7b
         break;
69cc7b
     case PROP_DOC_PATH:
69cc7b
-        g_value_set_string (value, priv->m_aDocPath);
69cc7b
+        g_value_set_string (value, priv->m_aDocPath.c_str());
69cc7b
         break;
69cc7b
     case PROP_DOC_POINTER:
69cc7b
         g_value_set_pointer(value, priv->m_pDocument);
69cc7b
@@ -2632,14 +2630,14 @@ static gboolean lok_doc_view_initable_init (GInitable *initable, GCancellable* /
69cc7b
     if (priv->m_pOffice != nullptr)
69cc7b
         return TRUE;
69cc7b
 
69cc7b
-    priv->m_pOffice = lok_init_2(priv->m_aLOPath, priv->m_pUserProfileURL);
69cc7b
+    priv->m_pOffice = lok_init_2(priv->m_aLOPath.c_str(), priv->m_aUserProfileURL.empty() ? nullptr : priv->m_aUserProfileURL.c_str());
69cc7b
 
69cc7b
     if (priv->m_pOffice == nullptr)
69cc7b
     {
69cc7b
         g_set_error (error,
69cc7b
                      g_quark_from_static_string ("LOK initialization error"), 0,
69cc7b
                      "Failed to get LibreOfficeKit context. Make sure path (%s) is correct",
69cc7b
-                     priv->m_aLOPath);
69cc7b
+                     priv->m_aLOPath.c_str());
69cc7b
         return FALSE;
69cc7b
     }
69cc7b
     priv->m_nLOKFeatures |= LOK_FEATURE_PART_IN_INVALIDATION_CALLBACK;
69cc7b
@@ -3118,8 +3116,8 @@ SAL_DLLPUBLIC_EXPORT GtkWidget* lok_doc_view_new_from_widget(LOKDocView* pOldLOK
69cc7b
 {
69cc7b
     LOKDocViewPrivate& pOldPriv = getPrivate(pOldLOKDocView);
69cc7b
     GtkWidget* pNewDocView = GTK_WIDGET(g_initable_new(LOK_TYPE_DOC_VIEW, /*cancellable=*/nullptr, /*error=*/nullptr,
69cc7b
-                                                       "lopath", pOldPriv->m_aLOPath,
69cc7b
-                                                       "userprofileurl", pOldPriv->m_pUserProfileURL,
69cc7b
+                                                       "lopath", pOldPriv->m_aLOPath.c_str(),
69cc7b
+                                                       "userprofileurl", pOldPriv->m_aUserProfileURL.c_str(),
69cc7b
                                                        "lopointer", pOldPriv->m_pOffice,
69cc7b
                                                        "docpointer", pOldPriv->m_pDocument,
69cc7b
                                                        "halign", GTK_ALIGN_CENTER,
69cc7b
@@ -3165,7 +3163,7 @@ lok_doc_view_open_document (LOKDocView* pDocView,
69cc7b
     LOEvent* pLOEvent = new LOEvent(LOK_LOAD_DOC);
69cc7b
     pLOEvent->m_pPath = pPath;
69cc7b
 
69cc7b
-    priv->m_aDocPath = pPath;
69cc7b
+    g_object_set(G_OBJECT(pDocView), "docpath", pPath, nullptr);
69cc7b
     if (pRenderingArguments)
69cc7b
         priv->m_aRenderingArguments = pRenderingArguments;
69cc7b
     g_task_set_task_data(task, pLOEvent, LOEvent::destroy);
69cc7b
-- 
69cc7b
2.14.3
69cc7b