include/LibreOfficeKit/LibreOfficeKitGtk.h | 7 libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx | 2 libreofficekit/source/gtk/lokdocview.cxx | 170 ++++++++++++-------- 3 files changed, 108 insertions(+), 71 deletions(-)
New commits: commit e608a754b0ab14d3c5ec21237d163218d0be3e09 Author: Pranav Kant <pran...@gnome.org> Date: Mon Jun 22 15:27:24 2015 +0530 lokdocview: fixed a signal name Change-Id: I645516d43562dfa03c27e2bea366e9a161829bfe diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx index c746b84..cff02ea 100644 --- a/libreofficekit/source/gtk/lokdocview.cxx +++ b/libreofficekit/source/gtk/lokdocview.cxx @@ -1352,7 +1352,7 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass) * @pDocView: the #LOKDocView on which the signal is emitted * @aHyperlink: the URI which the application should handle */ - doc_view_signals[PART_CHANGED] = + doc_view_signals[HYPERLINK_CLICKED] = g_signal_new("hyperlinked-clicked", G_TYPE_FROM_CLASS(pGObjectClass), G_SIGNAL_RUN_FIRST, commit cf14391bc25e977bf70870004d8df79926a99e0c Author: Pranav Kant <pran...@gnome.org> Date: Fri Jun 19 01:06:50 2015 +0530 lokdocview: Use *get_instance_private () to get private structure Let lok_doc_view_get_instance_private () do the pointer arithmatic. Additionally, we are saving sizeof (void*) already in the _LOKDocView struct with this approach. Change-Id: I6d991d5834ef15dad24acb14a1d4bbf7d03df762 diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h index 3eaf283..3a1628b 100644 --- a/include/LibreOfficeKit/LibreOfficeKitGtk.h +++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h @@ -32,7 +32,6 @@ typedef struct _LOKDocViewPrivate LOKDocViewPrivate; struct _LOKDocView { GtkDrawingArea aDrawingArea; - LOKDocViewPrivate* priv; }; struct _LOKDocViewClass diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx index bc383c5..c746b84 100644 --- a/libreofficekit/source/gtk/lokdocview.cxx +++ b/libreofficekit/source/gtk/lokdocview.cxx @@ -229,7 +229,7 @@ isEmptyRectangle(const GdkRectangle& rRectangle) static void signalKey (LOKDocView* pDocView, const GdkEvent* pEvent) { - LOKDocViewPrivate* priv = pDocView->priv; + LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); int nCharCode = 0; int nKeyCode = 0; guint keyval; @@ -292,7 +292,7 @@ static gboolean handleTimeout (gpointer pData) { LOKDocView* pDocView = LOK_DOC_VIEW (pData); - LOKDocViewPrivate* priv = pDocView->priv; + LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); if (priv->m_bEdit) { @@ -366,7 +366,7 @@ globalCallbackWorker(int nType, const char* pPayload, void* pData) static GdkRectangle payloadToRectangle (LOKDocView* pDocView, const char* pPayload) { - LOKDocViewPrivate* priv = pDocView->priv; + LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); GdkRectangle aRet; gchar** ppCoordinates = g_strsplit(pPayload, ", ", 4); gchar** ppCoordinate = ppCoordinates; @@ -418,7 +418,7 @@ payloadToRectangles(LOKDocView* pDocView, const char* pPayload) static void setTilesInvalid (LOKDocView* pDocView, const GdkRectangle& rRectangle) { - LOKDocViewPrivate* priv = pDocView->priv; + LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); GdkRectangle aRectanglePixels; GdkPoint aStart, aEnd; @@ -442,7 +442,7 @@ callback (gpointer pData) { CallbackData* pCallback = static_cast<CallbackData*>(pData); LOKDocView* pDocView = LOK_DOC_VIEW (pCallback->m_pDocView); - LOKDocViewPrivate* priv = pDocView->priv; + LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); switch (pCallback->m_nType) { @@ -560,7 +560,7 @@ renderHandle(LOKDocView* pDocView, cairo_surface_t* pHandle, GdkRectangle& rRectangle) { - LOKDocViewPrivate* priv = pDocView->priv; + LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); GdkPoint aCursorBottom; int nHandleWidth, nHandleHeight; double fHandleScale; @@ -593,7 +593,7 @@ renderGraphicHandle(LOKDocView* pDocView, const GdkRectangle& rSelection, cairo_surface_t* pHandle) { - LOKDocViewPrivate* priv = pDocView->priv; + LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); int nHandleWidth, nHandleHeight; GdkRectangle aSelection; @@ -660,7 +660,7 @@ renderGraphicHandle(LOKDocView* pDocView, static gboolean renderDocument(LOKDocView* pDocView, cairo_t* pCairo) { - LOKDocViewPrivate *priv = pDocView->priv; + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); GdkRectangle aVisibleArea; long nDocumentWidthPixels = twipToPixel(priv->m_nDocumentWidthTwips, priv->m_fZoom); long nDocumentHeightPixels = twipToPixel(priv->m_nDocumentHeightTwips, priv->m_fZoom); @@ -721,7 +721,7 @@ renderDocument(LOKDocView* pDocView, cairo_t* pCairo) static gboolean renderOverlay(LOKDocView* pDocView, cairo_t* pCairo) { - LOKDocViewPrivate *priv = pDocView->priv; + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); if (priv->m_bEdit && priv->m_bCursorVisible && priv->m_bCursorOverlayVisible && !isEmptyRectangle(priv->m_aVisibleCursor)) { @@ -799,7 +799,7 @@ static gboolean lok_doc_view_signal_button(GtkWidget* pWidget, GdkEventButton* pEvent) { LOKDocView* pDocView = LOK_DOC_VIEW (pWidget); - LOKDocViewPrivate *priv = pDocView->priv; + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); g_info("LOKDocView_Impl::signalButton: %d, %d (in twips: %d, %d)", (int)pEvent->x, (int)pEvent->y, @@ -942,7 +942,7 @@ static gboolean lok_doc_view_signal_motion (GtkWidget* pWidget, GdkEventMotion* pEvent) { LOKDocView* pDocView = LOK_DOC_VIEW (pWidget); - LOKDocViewPrivate *priv = pDocView->priv; + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); GdkPoint aPoint; if (priv->m_bInDragMiddleHandle) @@ -1001,8 +1001,8 @@ lok_doc_view_signal_motion (GtkWidget* pWidget, GdkEventMotion* pEvent) static void lok_doc_view_init (LOKDocView* pDocView) { - pDocView->priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); - pDocView->priv->m_bCursorVisible = true; + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + priv->m_bCursorVisible = true; gtk_widget_add_events(GTK_WIDGET(pDocView), GDK_BUTTON_PRESS_MASK @@ -1015,7 +1015,7 @@ static void lok_doc_view_init (LOKDocView* pDocView) static void lok_doc_view_set_property (GObject* object, guint propId, const GValue *value, GParamSpec *pspec) { LOKDocView* pDocView = LOK_DOC_VIEW (object); - LOKDocViewPrivate* priv = pDocView->priv; + LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); switch (propId) { @@ -1045,7 +1045,7 @@ static void lok_doc_view_set_property (GObject* object, guint propId, const GVal static void lok_doc_view_get_property (GObject* object, guint propId, GValue *value, GParamSpec *pspec) { LOKDocView* pDocView = LOK_DOC_VIEW (object); - LOKDocViewPrivate* priv = pDocView->priv; + LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); switch (propId) { @@ -1097,7 +1097,7 @@ static gboolean lok_doc_view_draw (GtkWidget* pWidget, cairo_t* pCairo) static void lok_doc_view_finalize (GObject* object) { LOKDocView* pDocView = LOK_DOC_VIEW (object); - LOKDocViewPrivate* priv = pDocView->priv; + LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); if (priv->m_pDocument) priv->m_pDocument->pClass->destroy (priv->m_pDocument); @@ -1110,18 +1110,19 @@ static void lok_doc_view_finalize (GObject* object) static gboolean lok_doc_view_initable_init (GInitable *initable, GCancellable* /*cancellable*/, GError **error) { LOKDocView *pDocView = LOK_DOC_VIEW (initable); + LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); - if (pDocView->priv->m_pOffice != NULL) + if (priv->m_pOffice != NULL) return TRUE; - pDocView->priv->m_pOffice = lok_init (pDocView->priv->m_aLOPath); + priv->m_pOffice = lok_init (priv->m_aLOPath); - if (pDocView->priv->m_pOffice == NULL) + if (priv->m_pOffice == NULL) { g_set_error (error, g_quark_from_static_string ("LOK initialization error"), 0, "Failed to get LibreOfficeKit context. Make sure path (%s) is correct", - pDocView->priv->m_aLOPath); + priv->m_aLOPath); return FALSE; } @@ -1387,39 +1388,41 @@ lok_doc_view_new (const gchar* pPath, GCancellable *cancellable, GError **error) SAL_DLLPUBLIC_EXPORT gboolean lok_doc_view_open_document (LOKDocView* pDocView, const gchar* pPath) { - if ( pDocView->priv->m_pDocument ) + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + + if ( priv->m_pDocument ) { - pDocView->priv->m_pDocument->pClass->destroy( pDocView->priv->m_pDocument ); - pDocView->priv->m_pDocument = 0; + priv->m_pDocument->pClass->destroy( priv->m_pDocument ); + priv->m_pDocument = 0; } - pDocView->priv->m_pOffice->pClass->registerCallback(pDocView->priv->m_pOffice, globalCallbackWorker, pDocView); - pDocView->priv->m_pDocument = pDocView->priv->m_pOffice->pClass->documentLoad( pDocView->priv->m_pOffice, pPath ); - if ( !pDocView->priv->m_pDocument ) + priv->m_pOffice->pClass->registerCallback(priv->m_pOffice, globalCallbackWorker, pDocView); + priv->m_pDocument = priv->m_pOffice->pClass->documentLoad( priv->m_pOffice, pPath ); + if ( !priv->m_pDocument ) { // FIXME: should have a GError parameter and populate it. - char *pError = pDocView->priv->m_pOffice->pClass->getError( pDocView->priv->m_pOffice ); + char *pError = priv->m_pOffice->pClass->getError( priv->m_pOffice ); fprintf( stderr, "Error opening document '%s'\n", pError ); return FALSE; } else { - pDocView->priv->m_pDocument->pClass->initializeForRendering(pDocView->priv->m_pDocument); - pDocView->priv->m_pDocument->pClass->registerCallback(pDocView->priv->m_pDocument, callbackWorker, pDocView); - pDocView->priv->m_pDocument->pClass->getDocumentSize(pDocView->priv->m_pDocument, &pDocView->priv->m_nDocumentWidthTwips, &pDocView->priv->m_nDocumentHeightTwips); + priv->m_pDocument->pClass->initializeForRendering(priv->m_pDocument); + priv->m_pDocument->pClass->registerCallback(priv->m_pDocument, callbackWorker, pDocView); + priv->m_pDocument->pClass->getDocumentSize(priv->m_pDocument, &priv->m_nDocumentWidthTwips, &priv->m_nDocumentHeightTwips); g_timeout_add(600, handleTimeout, pDocView); - float zoom = pDocView->priv->m_fZoom; - long nDocumentWidthTwips = pDocView->priv->m_nDocumentWidthTwips; - long nDocumentHeightTwips = pDocView->priv->m_nDocumentHeightTwips; + float zoom = priv->m_fZoom; + long nDocumentWidthTwips = priv->m_nDocumentWidthTwips; + long nDocumentHeightTwips = priv->m_nDocumentHeightTwips; long nDocumentWidthPixels = twipToPixel(nDocumentWidthTwips, zoom); long nDocumentHeightPixels = twipToPixel(nDocumentHeightTwips, zoom); // Total number of columns in this document. guint nColumns = ceil((double)nDocumentWidthPixels / nTileSizePixels); - pDocView->priv->m_aTileBuffer = TileBuffer(pDocView->priv->m_pDocument, - nColumns); + priv->m_aTileBuffer = TileBuffer(priv->m_pDocument, + nColumns); gtk_widget_set_size_request(GTK_WIDGET(pDocView), nDocumentWidthPixels, nDocumentHeightPixels); @@ -1436,7 +1439,8 @@ lok_doc_view_open_document (LOKDocView* pDocView, const gchar* pPath) SAL_DLLPUBLIC_EXPORT LibreOfficeKitDocument* lok_doc_view_get_document (LOKDocView* pDocView) { - return pDocView->priv->m_pDocument; + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + return priv->m_pDocument; } /** @@ -1449,14 +1453,16 @@ lok_doc_view_get_document (LOKDocView* pDocView) SAL_DLLPUBLIC_EXPORT void lok_doc_view_set_zoom (LOKDocView* pDocView, float fZoom) { - pDocView->priv->m_fZoom = fZoom; - long nDocumentWidthPixels = twipToPixel(pDocView->priv->m_nDocumentWidthTwips, fZoom); - long nDocumentHeightPixels = twipToPixel(pDocView->priv->m_nDocumentHeightTwips, fZoom); + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + + priv->m_fZoom = fZoom; + long nDocumentWidthPixels = twipToPixel(priv->m_nDocumentWidthTwips, fZoom); + long nDocumentHeightPixels = twipToPixel(priv->m_nDocumentHeightTwips, fZoom); // Total number of columns in this document. guint nColumns = ceil((double)nDocumentWidthPixels / nTileSizePixels); - pDocView->priv->m_aTileBuffer = TileBuffer(pDocView->priv->m_pDocument, - nColumns); + priv->m_aTileBuffer = TileBuffer(priv->m_pDocument, + nColumns); gtk_widget_set_size_request(GTK_WIDGET(pDocView), nDocumentWidthPixels, nDocumentHeightPixels); @@ -1471,38 +1477,44 @@ lok_doc_view_set_zoom (LOKDocView* pDocView, float fZoom) SAL_DLLPUBLIC_EXPORT float lok_doc_view_get_zoom (LOKDocView* pDocView) { - return pDocView->priv->m_fZoom; + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + return priv->m_fZoom; } SAL_DLLPUBLIC_EXPORT int lok_doc_view_get_parts (LOKDocView* pDocView) { - return pDocView->priv->m_pDocument->pClass->getParts( pDocView->priv->m_pDocument ); + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + return priv->m_pDocument->pClass->getParts( priv->m_pDocument ); } SAL_DLLPUBLIC_EXPORT int lok_doc_view_get_part (LOKDocView* pDocView) { - return pDocView->priv->m_pDocument->pClass->getPart( pDocView->priv->m_pDocument ); + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + return priv->m_pDocument->pClass->getPart( priv->m_pDocument ); } SAL_DLLPUBLIC_EXPORT void lok_doc_view_set_part (LOKDocView* pDocView, int nPart) { - pDocView->priv->m_pDocument->pClass->setPart( pDocView->priv->m_pDocument, nPart ); + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + priv->m_pDocument->pClass->setPart( priv->m_pDocument, nPart ); } SAL_DLLPUBLIC_EXPORT char* lok_doc_view_get_part_name (LOKDocView* pDocView, int nPart) { - return pDocView->priv->m_pDocument->pClass->getPartName( pDocView->priv->m_pDocument, nPart ); + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + return priv->m_pDocument->pClass->getPartName( priv->m_pDocument, nPart ); } SAL_DLLPUBLIC_EXPORT void lok_doc_view_set_partmode(LOKDocView* pDocView, int nPartMode) { - pDocView->priv->m_pDocument->pClass->setPartMode( pDocView->priv->m_pDocument, nPartMode ); + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + priv->m_pDocument->pClass->setPartMode( priv->m_pDocument, nPartMode ); } /** @@ -1516,16 +1528,17 @@ SAL_DLLPUBLIC_EXPORT void lok_doc_view_set_edit(LOKDocView* pDocView, gboolean bEdit) { - gboolean bWasEdit = pDocView->priv->m_bEdit; + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + gboolean bWasEdit = priv->m_bEdit; - if (!pDocView->priv->m_bEdit && bEdit) + if (!priv->m_bEdit && bEdit) g_info("lok_doc_view_set_edit: entering edit mode"); - else if (pDocView->priv->m_bEdit && !bEdit) + else if (priv->m_bEdit && !bEdit) { g_info("lok_doc_view_set_edit: leaving edit mode"); - pDocView->priv->m_pDocument->pClass->resetSelection(pDocView->priv->m_pDocument); + priv->m_pDocument->pClass->resetSelection(priv->m_pDocument); } - pDocView->priv->m_bEdit = bEdit; + priv->m_bEdit = bEdit; g_signal_emit(pDocView, doc_view_signals[EDIT_CHANGED], 0, bWasEdit); gtk_widget_queue_draw(GTK_WIDGET(pDocView)); } @@ -1539,7 +1552,8 @@ lok_doc_view_set_edit(LOKDocView* pDocView, SAL_DLLPUBLIC_EXPORT gboolean lok_doc_view_get_edit (LOKDocView* pDocView) { - return pDocView->priv->m_bEdit; + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + return priv->m_bEdit; } /** @@ -1555,7 +1569,8 @@ lok_doc_view_post_command (LOKDocView* pDocView, const char* pCommand, const char* pArguments) { - pDocView->priv->m_pDocument->pClass->postUnoCommand(pDocView->priv->m_pDocument, pCommand, pArguments); + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + priv->m_pDocument->pClass->postUnoCommand(priv->m_pDocument, pCommand, pArguments); } /** @@ -1583,7 +1598,8 @@ lok_doc_view_post_key (LOKDocView* pDocView, GdkEvent* pEvent) SAL_DLLPUBLIC_EXPORT float lok_doc_view_pixel_to_twip (LOKDocView* pDocView, float fInput) { - return pixelToTwip(fInput, pDocView->priv->m_fZoom); + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + return pixelToTwip(fInput, priv->m_fZoom); } /** @@ -1598,7 +1614,8 @@ lok_doc_view_pixel_to_twip (LOKDocView* pDocView, float fInput) SAL_DLLPUBLIC_EXPORT float lok_doc_view_twip_to_pixel (LOKDocView* pDocView, float fInput) { - return twipToPixel(fInput, pDocView->priv->m_fZoom); + LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView)); + return twipToPixel(fInput, priv->m_fZoom); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit a2aaf911e2e7b63af920186acb2a5e03bc58bd54 Author: Pranav Kant <pran...@gnome.org> Date: Thu Jun 18 21:52:22 2015 +0530 lokdocview: Use GInitable The construction of LokDocView widget can fail because it involves initializing the lok context via lok_init. Having lok_init calls in constructed virtual method is a bad idea since it assumes that construction will never fail. So, implement GInitable for this class, and move the object initialization from constructed to initable. Change-Id: Idf18a054cf8ef2e946392458ec52cb0107bd7454 diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h index 7048dbe..3eaf283 100644 --- a/include/LibreOfficeKit/LibreOfficeKitGtk.h +++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h @@ -42,10 +42,12 @@ struct _LOKDocViewClass GType lok_doc_view_get_type (void) G_GNUC_CONST; -GtkWidget* lok_doc_view_new (const char* pPath); +GtkWidget* lok_doc_view_new (const gchar* pPath, + GCancellable *cancellable, + GError **error); gboolean lok_doc_view_open_document (LOKDocView* pDocView, - char* pPath); + const gchar* pPath); /// Gets the document the viewer displays. LibreOfficeKitDocument* lok_doc_view_get_document (LOKDocView* pDocView); diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx index 575588e..a583323 100644 --- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx @@ -521,7 +521,7 @@ int main( int argc, char* argv[] ) gtk_box_pack_end(GTK_BOX(pVBox), pFindbar, FALSE, FALSE, 0); // Docview - pDocView = lok_doc_view_new(argv[1]); + pDocView = lok_doc_view_new (argv[1], NULL, NULL); if (pDocView == NULL) g_error ("Error while creating LOKDocView widget"); g_signal_connect(pDocView, "edit-changed", G_CALLBACK(signalEdit), NULL); diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx index 9e8cabb..bc383c5 100644 --- a/libreofficekit/source/gtk/lokdocview.cxx +++ b/libreofficekit/source/gtk/lokdocview.cxx @@ -137,12 +137,16 @@ enum static guint doc_view_signals[LAST_SIGNAL] = { 0 }; +static void lok_doc_view_initable_iface_init (GInitableIface *iface); + SAL_DLLPUBLIC_EXPORT GType lok_doc_view_get_type(); #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #endif -G_DEFINE_TYPE_WITH_PRIVATE (LOKDocView, lok_doc_view, GTK_TYPE_DRAWING_AREA) +G_DEFINE_TYPE_WITH_CODE (LOKDocView, lok_doc_view, GTK_TYPE_DRAWING_AREA, + G_ADD_PRIVATE (LOKDocView) + G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, lok_doc_view_initable_iface_init)); #ifdef __GNUC__ #pragma GCC diagnostic pop #endif @@ -1103,14 +1107,30 @@ static void lok_doc_view_finalize (GObject* object) G_OBJECT_CLASS (lok_doc_view_parent_class)->finalize (object); } -static void lok_doc_view_constructed (GObject* object) +static gboolean lok_doc_view_initable_init (GInitable *initable, GCancellable* /*cancellable*/, GError **error) { - LOKDocView* pDocView = LOK_DOC_VIEW (object); - LOKDocViewPrivate* priv = pDocView->priv; + LOKDocView *pDocView = LOK_DOC_VIEW (initable); + + if (pDocView->priv->m_pOffice != NULL) + return TRUE; + + pDocView->priv->m_pOffice = lok_init (pDocView->priv->m_aLOPath); + + if (pDocView->priv->m_pOffice == NULL) + { + g_set_error (error, + g_quark_from_static_string ("LOK initialization error"), 0, + "Failed to get LibreOfficeKit context. Make sure path (%s) is correct", + pDocView->priv->m_aLOPath); + return FALSE; + } - G_OBJECT_CLASS (lok_doc_view_parent_class)->constructed (object); + return TRUE; +} - pDocView->priv->m_pOffice = lok_init (priv->m_aLOPath); +static void lok_doc_view_initable_iface_init (GInitableIface *iface) +{ + iface->init = lok_doc_view_initable_init; } static void lok_doc_view_class_init (LOKDocViewClass* pClass) @@ -1121,7 +1141,6 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass) pGObjectClass->get_property = lok_doc_view_get_property; pGObjectClass->set_property = lok_doc_view_set_property; pGObjectClass->finalize = lok_doc_view_finalize; - pGObjectClass->constructed = lok_doc_view_constructed; pWidgetClass->draw = lok_doc_view_draw; pWidgetClass->button_press_event = lok_doc_view_signal_button; @@ -1343,18 +1362,19 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass) G_TYPE_STRING); } - - /** * lok_doc_view_new: * @pPath: LibreOffice install path. + * @cancellable: The cancellable object that you can use to cancel this + * operation. + * @error: The error that will be set if the object fails to initialize. * - * Returns: The #LOKDocView widget instance. + * Returns: (transfer none): The #LOKDocView widget instance. */ SAL_DLLPUBLIC_EXPORT GtkWidget* -lok_doc_view_new (const char* pPath) +lok_doc_view_new (const gchar* pPath, GCancellable *cancellable, GError **error) { - return GTK_WIDGET (g_object_new(LOK_TYPE_DOC_VIEW, "lopath", pPath, NULL)); + return GTK_WIDGET (g_initable_new (LOK_TYPE_DOC_VIEW, cancellable, error, "lopath", pPath, NULL)); } /** @@ -1365,7 +1385,7 @@ lok_doc_view_new (const char* pPath) * Returns: %TRUE if the document is loaded succesfully, %FALSE otherwise */ SAL_DLLPUBLIC_EXPORT gboolean -lok_doc_view_open_document (LOKDocView* pDocView, char* pPath) +lok_doc_view_open_document (LOKDocView* pDocView, const gchar* pPath) { if ( pDocView->priv->m_pDocument ) { @@ -1374,8 +1394,7 @@ lok_doc_view_open_document (LOKDocView* pDocView, char* pPath) } pDocView->priv->m_pOffice->pClass->registerCallback(pDocView->priv->m_pOffice, globalCallbackWorker, pDocView); - pDocView->priv->m_pDocument = pDocView->priv->m_pOffice->pClass->documentLoad( pDocView->priv->m_pOffice, - pPath ); + pDocView->priv->m_pDocument = pDocView->priv->m_pOffice->pClass->documentLoad( pDocView->priv->m_pOffice, pPath ); if ( !pDocView->priv->m_pDocument ) { // FIXME: should have a GError parameter and populate it. _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits