diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-04-02 16:47:01 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-04-07 09:18:14 +0200 |
commit | 60412610929961a3c14363944787c5024c062ce7 (patch) | |
tree | b5aab4d29a28307a3426f131ab890e3173bf10a9 /libreofficekit/source/gtk | |
parent | a9373a3fec4f1bd9b51c40666a12ffd9eb7357a2 (diff) |
lokdocview: move CallbackData to LOKDocView_Impl
Change-Id: If2aff61df7efd5c291e4cc7c7196e7f6f3937b32
Diffstat (limited to 'libreofficekit/source/gtk')
-rw-r--r-- | libreofficekit/source/gtk/lokdocview.cxx | 112 |
1 files changed, 61 insertions, 51 deletions
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx index f5a325764303..a3232490badf 100644 --- a/libreofficekit/source/gtk/lokdocview.cxx +++ b/libreofficekit/source/gtk/lokdocview.cxx @@ -11,6 +11,7 @@ #include <math.h> #include <string.h> #include <vector> +#include <string> #include <gdk/gdkkeysyms.h> @@ -102,6 +103,17 @@ struct LOKDocView_Impl bool m_bInDragGraphicHandles[8]; ///@} + /// Callback data, allocated in lok_docview_callback_worker(), released in lok_docview_callback(). + struct CallbackData + { + int m_nType; + std::string m_aPayload; + LOKDocView* m_pDocView; + + CallbackData(int nType, const std::string& rPayload, LOKDocView* pDocView); + }; + + LOKDocView_Impl(LOKDocView* pDocView); ~LOKDocView_Impl(); /// Connected to the destroy signal of LOKDocView, deletes its LOKDocView_Impl. @@ -160,8 +172,17 @@ struct LOKDocView_Impl static GdkRectangle payloadToRectangle(const char* pPayload); /// Returns the GdkRectangles of a w,h,x,y;w2,h2,x2,y2;... string. static std::vector<GdkRectangle> payloadToRectangles(const char* pPayload); + /// Returns the string representation of a LibreOfficeKitCallbackType enumeration element. + static const char* callbackTypeToString(int nType); }; +LOKDocView_Impl::CallbackData::CallbackData(int nType, const std::string& rPayload, LOKDocView* pDocView) + : m_nType(nType), + m_aPayload(rPayload), + m_pDocView(pDocView) +{ +} + LOKDocView_Impl::LOKDocView_Impl(LOKDocView* pDocView) : m_pDocView(pDocView), m_pEventBox(gtk_event_box_new()), @@ -807,6 +828,32 @@ std::vector<GdkRectangle> LOKDocView_Impl::payloadToRectangles(const char* pPayl return aRet; } +/// Returns the string representation of a LibreOfficeKitCallbackType enumeration element. +const char* LOKDocView_Impl::callbackTypeToString(int nType) +{ + switch (nType) + { + case LOK_CALLBACK_INVALIDATE_TILES: + return "LOK_CALLBACK_INVALIDATE_TILES"; + case LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR: + return "LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR"; + case LOK_CALLBACK_TEXT_SELECTION: + return "LOK_CALLBACK_TEXT_SELECTION"; + case LOK_CALLBACK_TEXT_SELECTION_START: + return "LOK_CALLBACK_TEXT_SELECTION_START"; + case LOK_CALLBACK_TEXT_SELECTION_END: + return "LOK_CALLBACK_TEXT_SELECTION_END"; + case LOK_CALLBACK_CURSOR_VISIBLE: + return "LOK_CALLBACK_CURSOR_VISIBLE"; + case LOK_CALLBACK_GRAPHIC_SELECTION: + return "LOK_CALLBACK_GRAPHIC_SELECTION"; + case LOK_CALLBACK_HYPERLINK_CLICKED: + return "LOK_CALLBACK_HYPERLINK_CLICKED"; + } + return 0; +} + + enum { EDIT_CHANGED, @@ -886,52 +933,19 @@ SAL_DLLPUBLIC_EXPORT GtkWidget* lok_docview_new( LibreOfficeKit* pOffice ) return GTK_WIDGET( pDocView ); } -/// Callback data, allocated in lok_docview_callback_worker(), released in lok_docview_callback(). -typedef struct -{ - int m_nType; - char* m_pPayload; - LOKDocView* m_pDocView; -} -LOKDocViewCallbackData; - -static const gchar* lcl_LibreOfficeKitCallbackTypeToString(int nType) -{ - switch (nType) - { - case LOK_CALLBACK_INVALIDATE_TILES: - return "LOK_CALLBACK_INVALIDATE_TILES"; - case LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR: - return "LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR"; - case LOK_CALLBACK_TEXT_SELECTION: - return "LOK_CALLBACK_TEXT_SELECTION"; - case LOK_CALLBACK_TEXT_SELECTION_START: - return "LOK_CALLBACK_TEXT_SELECTION_START"; - case LOK_CALLBACK_TEXT_SELECTION_END: - return "LOK_CALLBACK_TEXT_SELECTION_END"; - case LOK_CALLBACK_CURSOR_VISIBLE: - return "LOK_CALLBACK_CURSOR_VISIBLE"; - case LOK_CALLBACK_GRAPHIC_SELECTION: - return "LOK_CALLBACK_GRAPHIC_SELECTION"; - case LOK_CALLBACK_HYPERLINK_CLICKED: - return "LOK_CALLBACK_HYPERLINK_CLICKED"; - } - return 0; -} - /// Invoked on the main thread if lok_docview_callback_worker() requests so. static gboolean lok_docview_callback(gpointer pData) { #if GLIB_CHECK_VERSION(2,28,0) // we need g_list_free_full() - LOKDocViewCallbackData* pCallback = static_cast<LOKDocViewCallbackData*>(pData); + LOKDocView_Impl::CallbackData* pCallback = static_cast<LOKDocView_Impl::CallbackData*>(pData); switch (pCallback->m_nType) { case LOK_CALLBACK_INVALIDATE_TILES: { - if (strcmp(pCallback->m_pPayload, "EMPTY") != 0) + if (pCallback->m_aPayload != "EMPTY") { - GdkRectangle aRectangle = LOKDocView_Impl::payloadToRectangle(pCallback->m_pPayload); + GdkRectangle aRectangle = LOKDocView_Impl::payloadToRectangle(pCallback->m_aPayload.c_str()); pCallback->m_pDocView->m_pImpl->renderDocument(&aRectangle); } else @@ -940,7 +954,7 @@ static gboolean lok_docview_callback(gpointer pData) break; case LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR: { - pCallback->m_pDocView->m_pImpl->m_aVisibleCursor = LOKDocView_Impl::payloadToRectangle(pCallback->m_pPayload); + pCallback->m_pDocView->m_pImpl->m_aVisibleCursor = LOKDocView_Impl::payloadToRectangle(pCallback->m_aPayload.c_str()); pCallback->m_pDocView->m_pImpl->m_bCursorOverlayVisible = true; gtk_widget_queue_draw(GTK_WIDGET(pCallback->m_pDocView->m_pImpl->m_pEventBox)); } @@ -948,7 +962,7 @@ static gboolean lok_docview_callback(gpointer pData) case LOK_CALLBACK_TEXT_SELECTION: { LOKDocView* pDocView = pCallback->m_pDocView; - pDocView->m_pImpl->m_aTextSelectionRectangles = LOKDocView_Impl::payloadToRectangles(pCallback->m_pPayload); + pDocView->m_pImpl->m_aTextSelectionRectangles = LOKDocView_Impl::payloadToRectangles(pCallback->m_aPayload.c_str()); // In case the selection is empty, then we get no LOK_CALLBACK_TEXT_SELECTION_START/END events. if (pDocView->m_pImpl->m_aTextSelectionRectangles.empty()) @@ -965,23 +979,23 @@ static gboolean lok_docview_callback(gpointer pData) break; case LOK_CALLBACK_TEXT_SELECTION_START: { - pCallback->m_pDocView->m_pImpl->m_aTextSelectionStart = LOKDocView_Impl::payloadToRectangle(pCallback->m_pPayload); + pCallback->m_pDocView->m_pImpl->m_aTextSelectionStart = LOKDocView_Impl::payloadToRectangle(pCallback->m_aPayload.c_str()); } break; case LOK_CALLBACK_TEXT_SELECTION_END: { - pCallback->m_pDocView->m_pImpl->m_aTextSelectionEnd = LOKDocView_Impl::payloadToRectangle(pCallback->m_pPayload); + pCallback->m_pDocView->m_pImpl->m_aTextSelectionEnd = LOKDocView_Impl::payloadToRectangle(pCallback->m_aPayload.c_str()); } break; case LOK_CALLBACK_CURSOR_VISIBLE: { - pCallback->m_pDocView->m_pImpl->m_bCursorVisible = strcmp(pCallback->m_pPayload, "true") == 0; + pCallback->m_pDocView->m_pImpl->m_bCursorVisible = pCallback->m_aPayload == "true"; } break; case LOK_CALLBACK_GRAPHIC_SELECTION: { - if (strcmp(pCallback->m_pPayload, "EMPTY") != 0) - pCallback->m_pDocView->m_pImpl->m_aGraphicSelection = LOKDocView_Impl::payloadToRectangle(pCallback->m_pPayload); + if (pCallback->m_aPayload != "EMPTY") + pCallback->m_pDocView->m_pImpl->m_aGraphicSelection = LOKDocView_Impl::payloadToRectangle(pCallback->m_aPayload.c_str()); else memset(&pCallback->m_pDocView->m_pImpl->m_aGraphicSelection, 0, sizeof(pCallback->m_pDocView->m_pImpl->m_aGraphicSelection)); gtk_widget_queue_draw(GTK_WIDGET(pCallback->m_pDocView->m_pImpl->m_pEventBox)); @@ -990,7 +1004,7 @@ static gboolean lok_docview_callback(gpointer pData) case LOK_CALLBACK_HYPERLINK_CLICKED: { GError* pError = NULL; - gtk_show_uri(NULL, pCallback->m_pPayload, GDK_CURRENT_TIME, &pError); + gtk_show_uri(NULL, pCallback->m_aPayload.c_str(), GDK_CURRENT_TIME, &pError); } break; default: @@ -998,8 +1012,7 @@ static gboolean lok_docview_callback(gpointer pData) break; } - g_free(pCallback->m_pPayload); - g_free(pCallback); + delete pCallback; #endif return G_SOURCE_REMOVE; } @@ -1009,11 +1022,8 @@ static void lok_docview_callback_worker(int nType, const char* pPayload, void* p { LOKDocView* pDocView = static_cast<LOKDocView*>(pData); - LOKDocViewCallbackData* pCallback = g_new0(LOKDocViewCallbackData, 1); - pCallback->m_nType = nType; - pCallback->m_pPayload = g_strdup(pPayload); - pCallback->m_pDocView = pDocView; - g_info("lok_docview_callback_worker: %s, '%s'", lcl_LibreOfficeKitCallbackTypeToString(nType), pPayload); + LOKDocView_Impl::CallbackData* pCallback = new LOKDocView_Impl::CallbackData(nType, pPayload, pDocView); + g_info("lok_docview_callback_worker: %s, '%s'", LOKDocView_Impl::callbackTypeToString(nType), pPayload); #if GTK_CHECK_VERSION(2,12,0) gdk_threads_add_idle(lok_docview_callback, pCallback); #else |