summaryrefslogtreecommitdiff
path: root/libreofficekit
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-05-18 07:41:04 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-05-18 07:47:21 +0200
commitb6744874cb7fc0e85996e093a56fe89b83d31e2c (patch)
treee2c66dab038e16ec20983262cebd5db0be853aa9 /libreofficekit
parentcbe79789a0fc9b80b2fd14a5abfe0973a2cb69dc (diff)
lokdocview: use lok::Office::registerCallback()
This way we get some feedback on the state of the loading at least on the console. Change-Id: I95bf6cebcdd8b879c817b4e027d4f5b4acb9cd4c
Diffstat (limited to 'libreofficekit')
-rw-r--r--libreofficekit/source/gtk/lokdocview.cxx61
1 files changed, 61 insertions, 0 deletions
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index 35ce54385634..4fffaf3e0daa 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -179,12 +179,20 @@ struct LOKDocView_Impl
static const char* callbackTypeToString(int nType);
/// Invoked on the main thread if callbackWorker() requests so.
static gboolean callback(gpointer pData);
+ /// Invoked on the main thread if globalCallbackWorker() requests so.
+ static gboolean globalCallback(gpointer pData);
/// Implementation of the callback handler, invoked by callback();
gboolean callbackImpl(CallbackData* pCallbackData);
+ /// Implementation of the global callback handler, invoked by globalCallback();
+ gboolean globalCallbackImpl(CallbackData* pCallbackData);
/// Our LOK callback, runs on the LO thread.
static void callbackWorker(int nType, const char* pPayload, void* pData);
/// Implementation of the callback worder handler, invoked by callbackWorker().
void callbackWorkerImpl(int nType, const char* pPayload);
+ /// Our global LOK callback, runs on the LO thread.
+ static void globalCallbackWorker(int nType, const char* pPayload, void* pData);
+ /// Implementation of the global callback worder handler, invoked by globalCallbackWorker().
+ void globalCallbackWorkerImpl(int nType, const char* pPayload);
/// Command state (various buttons like bold are toggled or not) is changed.
void commandChanged(const std::string& rPayload);
};
@@ -872,6 +880,12 @@ const char* LOKDocView_Impl::callbackTypeToString(int nType)
return "LOK_CALLBACK_HYPERLINK_CLICKED";
case LOK_CALLBACK_STATE_CHANGED:
return "LOK_CALLBACK_STATE_CHANGED";
+ case LOK_CALLBACK_STATUS_INDICATOR_START:
+ return "LOK_CALLBACK_STATUS_INDICATOR_START";
+ case LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE:
+ return "LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE";
+ case LOK_CALLBACK_STATUS_INDICATOR_FINISH:
+ return "LOK_CALLBACK_STATUS_INDICATOR_FINISH";
}
return 0;
}
@@ -882,6 +896,12 @@ gboolean LOKDocView_Impl::callback(gpointer pData)
return pCallback->m_pDocView->m_pImpl->callbackImpl(pCallback);
}
+gboolean LOKDocView_Impl::globalCallback(gpointer pData)
+{
+ LOKDocView_Impl::CallbackData* pCallback = static_cast<LOKDocView_Impl::CallbackData*>(pData);
+ return pCallback->m_pDocView->m_pImpl->globalCallbackImpl(pCallback);
+}
+
gboolean LOKDocView_Impl::callbackImpl(CallbackData* pCallback)
{
switch (pCallback->m_nType)
@@ -967,12 +987,43 @@ gboolean LOKDocView_Impl::callbackImpl(CallbackData* pCallback)
return G_SOURCE_REMOVE;
}
+gboolean LOKDocView_Impl::globalCallbackImpl(CallbackData* pCallback)
+{
+ switch (pCallback->m_nType)
+ {
+ case LOK_CALLBACK_STATUS_INDICATOR_START:
+ {
+ }
+ break;
+ case LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE:
+ {
+ }
+ break;
+ case LOK_CALLBACK_STATUS_INDICATOR_FINISH:
+ {
+ }
+ break;
+ default:
+ g_assert(false);
+ break;
+ }
+ delete pCallback;
+
+ return G_SOURCE_REMOVE;
+}
+
void LOKDocView_Impl::callbackWorker(int nType, const char* pPayload, void* pData)
{
LOKDocView* pDocView = static_cast<LOKDocView*>(pData);
pDocView->m_pImpl->callbackWorkerImpl(nType, pPayload);
}
+void LOKDocView_Impl::globalCallbackWorker(int nType, const char* pPayload, void* pData)
+{
+ LOKDocView* pDocView = static_cast<LOKDocView*>(pData);
+ pDocView->m_pImpl->globalCallbackWorkerImpl(nType, pPayload);
+}
+
void LOKDocView_Impl::callbackWorkerImpl(int nType, const char* pPayload)
{
LOKDocView_Impl::CallbackData* pCallback = new LOKDocView_Impl::CallbackData(nType, pPayload, m_pDocView);
@@ -982,6 +1033,15 @@ void LOKDocView_Impl::callbackWorkerImpl(int nType, const char* pPayload)
#endif
}
+void LOKDocView_Impl::globalCallbackWorkerImpl(int nType, const char* pPayload)
+{
+ LOKDocView_Impl::CallbackData* pCallback = new LOKDocView_Impl::CallbackData(nType, pPayload ? pPayload : "(nil)", m_pDocView);
+ g_info("LOKDocView_Impl::globalCallbackWorkerImpl: %s, '%s'", LOKDocView_Impl::callbackTypeToString(nType), pPayload);
+#if GTK_CHECK_VERSION(2,12,0)
+ gdk_threads_add_idle(LOKDocView_Impl::globalCallback, pCallback);
+#endif
+}
+
enum
{
EDIT_CHANGED,
@@ -1085,6 +1145,7 @@ SAL_DLLPUBLIC_EXPORT gboolean lok_docview_open_document( LOKDocView* pDocView, c
pDocView->m_pImpl->m_pDocument = 0;
}
+ pDocView->m_pImpl->m_pOffice->pClass->registerCallback(pDocView->m_pImpl->m_pOffice, &LOKDocView_Impl::globalCallbackWorker, pDocView);
pDocView->m_pImpl->m_pDocument = pDocView->m_pImpl->m_pOffice->pClass->documentLoad( pDocView->m_pImpl->m_pOffice,
pPath );
if ( !pDocView->m_pImpl->m_pDocument )