diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-05-18 07:41:04 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-05-18 07:47:21 +0200 |
commit | b6744874cb7fc0e85996e093a56fe89b83d31e2c (patch) | |
tree | e2c66dab038e16ec20983262cebd5db0be853aa9 /libreofficekit | |
parent | cbe79789a0fc9b80b2fd14a5abfe0973a2cb69dc (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.cxx | 61 |
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 ) |