|
 |
f325b2 |
From 9a1d485f937bf92ae860078b94a5372b3a4ce718 Mon Sep 17 00:00:00 2001
|
|
 |
f325b2 |
From: Pranav Kant <pranavk@gnome.org>
|
|
 |
f325b2 |
Date: Thu, 18 Jun 2015 21:52:22 +0530
|
|
 |
f325b2 |
Subject: [PATCH 055/398] lokdocview: Use GInitable
|
|
 |
f325b2 |
|
|
 |
f325b2 |
The construction of LokDocView widget can fail because it
|
|
 |
f325b2 |
involves initializing the lok context via lok_init.
|
|
 |
f325b2 |
|
|
 |
f325b2 |
Having lok_init calls in constructed virtual method is a bad idea
|
|
 |
f325b2 |
since it assumes that construction will never fail. So, implement
|
|
 |
f325b2 |
GInitable for this class, and move the object initialization from
|
|
 |
f325b2 |
constructed to initable.
|
|
 |
f325b2 |
|
|
 |
f325b2 |
Change-Id: Idf18a054cf8ef2e946392458ec52cb0107bd7454
|
|
 |
f325b2 |
(cherry picked from commit a2aaf911e2e7b63af920186acb2a5e03bc58bd54)
|
|
 |
f325b2 |
---
|
|
 |
f325b2 |
include/LibreOfficeKit/LibreOfficeKitGtk.h | 6 ++-
|
|
 |
f325b2 |
.../qa/gtktiledviewer/gtktiledviewer.cxx | 2 +-
|
|
 |
f325b2 |
libreofficekit/source/gtk/lokdocview.cxx | 49 +++++++++++++++-------
|
|
 |
f325b2 |
3 files changed, 39 insertions(+), 18 deletions(-)
|
|
 |
f325b2 |
|
|
 |
f325b2 |
diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h
|
|
 |
f325b2 |
index 7048dbefc0a1..3eaf28352a11 100644
|
|
 |
f325b2 |
--- a/include/LibreOfficeKit/LibreOfficeKitGtk.h
|
|
 |
f325b2 |
+++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h
|
|
 |
f325b2 |
@@ -42,10 +42,12 @@ struct _LOKDocViewClass
|
|
 |
f325b2 |
|
|
 |
f325b2 |
GType lok_doc_view_get_type (void) G_GNUC_CONST;
|
|
 |
f325b2 |
|
|
 |
f325b2 |
-GtkWidget* lok_doc_view_new (const char* pPath);
|
|
 |
f325b2 |
+GtkWidget* lok_doc_view_new (const gchar* pPath,
|
|
 |
f325b2 |
+ GCancellable *cancellable,
|
|
 |
f325b2 |
+ GError **error);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
gboolean lok_doc_view_open_document (LOKDocView* pDocView,
|
|
 |
f325b2 |
- char* pPath);
|
|
 |
f325b2 |
+ const gchar* pPath);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
/// Gets the document the viewer displays.
|
|
 |
f325b2 |
LibreOfficeKitDocument* lok_doc_view_get_document (LOKDocView* pDocView);
|
|
 |
f325b2 |
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
index 57556616d803..fedd6c9fdf13 100644
|
|
 |
f325b2 |
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
@@ -520,7 +520,7 @@ int main( int argc, char* argv[] )
|
|
 |
f325b2 |
gtk_box_pack_end(GTK_BOX(pVBox), pFindbar, FALSE, FALSE, 0);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
// Docview
|
|
 |
f325b2 |
- pDocView = lok_doc_view_new(argv[1]);
|
|
 |
f325b2 |
+ pDocView = lok_doc_view_new (argv[1], NULL, NULL);
|
|
 |
f325b2 |
if (pDocView == NULL)
|
|
 |
f325b2 |
g_error ("Error while creating LOKDocView widget");
|
|
 |
f325b2 |
g_signal_connect(pDocView, "edit-changed", G_CALLBACK(signalEdit), NULL);
|
|
 |
f325b2 |
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
f325b2 |
index 20b1aa6b837e..144f17efba94 100644
|
|
 |
f325b2 |
--- a/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
f325b2 |
+++ b/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
f325b2 |
@@ -137,12 +137,16 @@ enum
|
|
 |
f325b2 |
|
|
 |
f325b2 |
static guint doc_view_signals[LAST_SIGNAL] = { 0 };
|
|
 |
f325b2 |
|
|
 |
f325b2 |
+static void lok_doc_view_initable_iface_init (GInitableIface *iface);
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
SAL_DLLPUBLIC_EXPORT GType lok_doc_view_get_type();
|
|
 |
f325b2 |
#ifdef __GNUC__
|
|
 |
f325b2 |
#pragma GCC diagnostic push
|
|
 |
f325b2 |
#pragma GCC diagnostic ignored "-Wunused-function"
|
|
 |
f325b2 |
#endif
|
|
 |
f325b2 |
-G_DEFINE_TYPE_WITH_PRIVATE (LOKDocView, lok_doc_view, GTK_TYPE_DRAWING_AREA)
|
|
 |
f325b2 |
+G_DEFINE_TYPE_WITH_CODE (LOKDocView, lok_doc_view, GTK_TYPE_DRAWING_AREA,
|
|
 |
f325b2 |
+ G_ADD_PRIVATE (LOKDocView)
|
|
 |
f325b2 |
+ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, lok_doc_view_initable_iface_init));
|
|
 |
f325b2 |
#ifdef __GNUC__
|
|
 |
f325b2 |
#pragma GCC diagnostic pop
|
|
 |
f325b2 |
#endif
|
|
 |
f325b2 |
@@ -1103,14 +1107,30 @@ static void lok_doc_view_finalize (GObject* object)
|
|
 |
f325b2 |
G_OBJECT_CLASS (lok_doc_view_parent_class)->finalize (object);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
-static void lok_doc_view_constructed (GObject* object)
|
|
 |
f325b2 |
+static gboolean lok_doc_view_initable_init (GInitable *initable, GCancellable* /*cancellable*/, GError **error)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
- LOKDocView* pDocView = LOK_DOC_VIEW (object);
|
|
 |
f325b2 |
- LOKDocViewPrivate* priv = pDocView->priv;
|
|
 |
f325b2 |
+ LOKDocView *pDocView = LOK_DOC_VIEW (initable);
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ if (pDocView->priv->m_pOffice != NULL)
|
|
 |
f325b2 |
+ return TRUE;
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ pDocView->priv->m_pOffice = lok_init (pDocView->priv->m_aLOPath);
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ if (pDocView->priv->m_pOffice == NULL)
|
|
 |
f325b2 |
+ {
|
|
 |
f325b2 |
+ g_set_error (error,
|
|
 |
f325b2 |
+ g_quark_from_static_string ("LOK initialization error"), 0,
|
|
 |
f325b2 |
+ "Failed to get LibreOfficeKit context. Make sure path (%s) is correct",
|
|
 |
f325b2 |
+ pDocView->priv->m_aLOPath);
|
|
 |
f325b2 |
+ return FALSE;
|
|
 |
f325b2 |
+ }
|
|
 |
f325b2 |
|
|
 |
f325b2 |
- G_OBJECT_CLASS (lok_doc_view_parent_class)->constructed (object);
|
|
 |
f325b2 |
+ return TRUE;
|
|
 |
f325b2 |
+}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
- pDocView->priv->m_pOffice = lok_init (priv->m_aLOPath);
|
|
 |
f325b2 |
+static void lok_doc_view_initable_iface_init (GInitableIface *iface)
|
|
 |
f325b2 |
+{
|
|
 |
f325b2 |
+ iface->init = lok_doc_view_initable_init;
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
static void lok_doc_view_class_init (LOKDocViewClass* pClass)
|
|
 |
f325b2 |
@@ -1121,7 +1141,6 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass)
|
|
 |
f325b2 |
pGObjectClass->get_property = lok_doc_view_get_property;
|
|
 |
f325b2 |
pGObjectClass->set_property = lok_doc_view_set_property;
|
|
 |
f325b2 |
pGObjectClass->finalize = lok_doc_view_finalize;
|
|
 |
f325b2 |
- pGObjectClass->constructed = lok_doc_view_constructed;
|
|
 |
f325b2 |
|
|
 |
f325b2 |
pWidgetClass->draw = lok_doc_view_draw;
|
|
 |
f325b2 |
pWidgetClass->button_press_event = lok_doc_view_signal_button;
|
|
 |
f325b2 |
@@ -1343,18 +1362,19 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass)
|
|
 |
f325b2 |
G_TYPE_STRING);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
/**
|
|
 |
f325b2 |
* lok_doc_view_new:
|
|
 |
f325b2 |
* @pPath: LibreOffice install path.
|
|
 |
f325b2 |
+ * @cancellable: The cancellable object that you can use to cancel this
|
|
 |
f325b2 |
+ * operation.
|
|
 |
f325b2 |
+ * @error: The error that will be set if the object fails to initialize.
|
|
 |
f325b2 |
*
|
|
 |
f325b2 |
- * Returns: The #LOKDocView widget instance.
|
|
 |
f325b2 |
+ * Returns: (transfer none): The #LOKDocView widget instance.
|
|
 |
f325b2 |
*/
|
|
 |
f325b2 |
SAL_DLLPUBLIC_EXPORT GtkWidget*
|
|
 |
f325b2 |
-lok_doc_view_new (const char* pPath)
|
|
 |
f325b2 |
+lok_doc_view_new (const gchar* pPath, GCancellable *cancellable, GError **error)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
- return GTK_WIDGET (g_object_new(LOK_TYPE_DOC_VIEW, "lopath", pPath, NULL));
|
|
 |
f325b2 |
+ return GTK_WIDGET (g_initable_new (LOK_TYPE_DOC_VIEW, cancellable, error, "lopath", pPath, NULL));
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
/**
|
|
 |
f325b2 |
@@ -1365,7 +1385,7 @@ lok_doc_view_new (const char* pPath)
|
|
 |
f325b2 |
* Returns: %TRUE if the document is loaded succesfully, %FALSE otherwise
|
|
 |
f325b2 |
*/
|
|
 |
f325b2 |
SAL_DLLPUBLIC_EXPORT gboolean
|
|
 |
f325b2 |
-lok_doc_view_open_document (LOKDocView* pDocView, char* pPath)
|
|
 |
f325b2 |
+lok_doc_view_open_document (LOKDocView* pDocView, const gchar* pPath)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
if ( pDocView->priv->m_pDocument )
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
@@ -1374,8 +1394,7 @@ lok_doc_view_open_document (LOKDocView* pDocView, char* pPath)
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
pDocView->priv->m_pOffice->pClass->registerCallback(pDocView->priv->m_pOffice, globalCallbackWorker, pDocView);
|
|
 |
f325b2 |
- pDocView->priv->m_pDocument = pDocView->priv->m_pOffice->pClass->documentLoad( pDocView->priv->m_pOffice,
|
|
 |
f325b2 |
- pPath );
|
|
 |
f325b2 |
+ pDocView->priv->m_pDocument = pDocView->priv->m_pOffice->pClass->documentLoad( pDocView->priv->m_pOffice, pPath );
|
|
 |
f325b2 |
if ( !pDocView->priv->m_pDocument )
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
// FIXME: should have a GError parameter and populate it.
|
|
 |
f325b2 |
--
|
|
 |
f325b2 |
2.12.0
|
|
 |
f325b2 |
|