[Libreoffice-commits] core.git: 3 commits - include/LibreOfficeKit libreofficekit/qa libreofficekit/source
Pranav Kant
pranavk at gnome.org
Mon Jun 22 03:33:51 PDT 2015
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 <pranavk at 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 <pranavk at 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 <pranavk at 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.
More information about the Libreoffice-commits
mailing list