From 9d8fd399aa92d5bcfc11399f296ed2ffdd741286 Mon Sep 17 00:00:00 2001 From: Pranav Kant Date: Sat, 6 Jun 2015 03:10:31 +0530 Subject: [PATCH 024/398] lokdocview: Modernise LOKDocView as GObject Change-Id: I3bbd07ce8163890f9b88567966622dd4fbe9d94d (cherry picked from commit c5f1f7ad2710914fdd6645dd8ce958c70d1d8381) --- include/LibreOfficeKit/LibreOfficeKitGtk.h | 63 ++++++++++--------- libreofficekit/source/gtk/lokdocview.cxx | 97 +++++++++++++----------------- 2 files changed, 77 insertions(+), 83 deletions(-) diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h index 069c565435bb..747e45e531f9 100644 --- a/include/LibreOfficeKit/LibreOfficeKitGtk.h +++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h @@ -18,9 +18,13 @@ G_BEGIN_DECLS -#define LOK_DOC_VIEW(obj) GTK_CHECK_CAST (obj, lok_doc_view_get_type(), LOKDocView) -#define LOK_DOC_VIEW_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, lok_doc_view_get_type(), LOKDocViewClass) -#define IS_LOK_DOC_VIEW(obj) GTK_CHECK_TYPE (obj, lok_doc_view_get_type()) +#define LOK_TYPE_DOC_VIEW (lok_doc_view_get_type()) +#define LOK_DOC_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LOK_TYPE_DOC_VIEW, LOKDocView)) +#define LOK_IS_DOC_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LOK_TYPE_DOC_VIEW)) +#define LOK_DOC_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LOK_TYPE_DOC_VIEW, LOKDocViewClass)) +#define LOK_IS_DOC_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), LOK_TYPE_DOC_VIEW)) +#define LOK_DOC_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), LOK_TYPE_DOC_VIEW, LOKDocViewClass)) + typedef struct _LOKDocView LOKDocView; typedef struct _LOKDocViewClass LOKDocViewClass; @@ -40,40 +44,45 @@ struct _LOKDocViewClass void (* part_changed) (LOKDocView* pView, int new_part); }; -guint lok_doc_view_get_type (void); -GtkWidget* lok_doc_view_new ( LibreOfficeKit* pOffice ); -gboolean lok_doc_view_open_document (LOKDocView* pDocView, - char* pPath); +GType lok_doc_view_get_type (void); +GtkWidget* lok_doc_view_new (LibreOfficeKit* pOffice ); +gboolean lok_doc_view_open_document (LOKDocView* pDocView, + char* pPath); /// Gets the document the viewer displays. -LibreOfficeKitDocument* lok_doc_view_get_document(LOKDocView* pDocView); - -void lok_doc_view_set_zoom (LOKDocView* pDocView, - float fZoom); -float lok_doc_view_get_zoom (LOKDocView* pDocView); - -int lok_doc_view_get_parts (LOKDocView* pDocView); -int lok_doc_view_get_part (LOKDocView* pDocView); -void lok_doc_view_set_part (LOKDocView* pDocView, - int nPart); -char* lok_doc_view_get_part_name (LOKDocView* pDocView, - int nPart); -void lok_doc_view_set_partmode (LOKDocView* pDocView, - int nPartMode); +LibreOfficeKitDocument* lok_doc_view_get_document (LOKDocView* pDocView); + +void lok_doc_view_set_zoom (LOKDocView* pDocView, + float fZoom); +float lok_doc_view_get_zoom (LOKDocView* pDocView); + +int lok_doc_view_get_parts (LOKDocView* pDocView); +int lok_doc_view_get_part (LOKDocView* pDocView); +void lok_doc_view_set_part (LOKDocView* pDocView, + int nPart); +char* lok_doc_view_get_part_name (LOKDocView* pDocView, + int nPart); +void lok_doc_view_set_partmode (LOKDocView* pDocView, + int nPartMode); /// Sets if the viewer is actually an editor or not. -void lok_doc_view_set_edit (LOKDocView* pDocView, - gboolean bEdit); +void lok_doc_view_set_edit (LOKDocView* pDocView, + gboolean bEdit); /// Gets if the viewer is actually an editor or not. -gboolean lok_doc_view_get_edit (LOKDocView* pDocView); +gboolean lok_doc_view_get_edit (LOKDocView* pDocView); /// Posts the .uno: command to the LibreOfficeKit. -void lok_doc_view_post_command (LOKDocView* pDocView, const char* pCommand, const char* pArguments); +void lok_doc_view_post_command (LOKDocView* pDocView, + const char* pCommand, + const char* pArguments); /// Posts a keyboard event to LibreOfficeKit. -void lok_doc_view_post_key (GtkWidget* pWidget, GdkEventKey* pEvent, gpointer pData); +void lok_doc_view_post_key (GtkWidget* pWidget, + GdkEventKey* pEvent, + gpointer pData); /// Get the visible area of the document (in twips). -void lok_doc_view_get_visarea(LOKDocView* pThis, GdkRectangle* pArea); +void lok_doc_view_get_visarea (LOKDocView* pThis, + GdkRectangle* pArea); G_END_DECLS diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx index b1e31887599d..9b09ef6452bb 100644 --- a/libreofficekit/source/gtk/lokdocview.cxx +++ b/libreofficekit/source/gtk/lokdocview.cxx @@ -37,26 +37,6 @@ // Number of handles around a graphic selection. #define GRAPHIC_HANDLE_COUNT 8 -namespace { - -/// Sets rWidth and rHeight from a "width, height" string. -void payloadToSize(const char* pPayload, long& rWidth, long& rHeight) -{ - rWidth = rHeight = 0; - gchar** ppCoordinates = g_strsplit(pPayload, ", ", 2); - gchar** ppCoordinate = ppCoordinates; - if (!*ppCoordinate) - return; - rWidth = atoi(*ppCoordinate); - ++ppCoordinate; - if (!*ppCoordinate) - return; - rHeight = atoi(*ppCoordinate); - g_strfreev(ppCoordinates); -} - -} - /// Holds data used by LOKDocView only. struct LOKDocView_Impl { @@ -216,6 +196,44 @@ struct LOKDocView_Impl void setTilesInvalid(const GdkRectangle& rRectangle); }; +enum +{ + EDIT_CHANGED, + COMMAND_CHANGED, + SEARCH_NOT_FOUND, + PART_CHANGED, + LAST_SIGNAL +}; + + +static guint doc_view_signals[LAST_SIGNAL] = { 0 }; + + +G_DEFINE_TYPE(LOKDocView, lok_doc_view, GTK_TYPE_SCROLLED_WINDOW) + + +namespace { + +/// Sets rWidth and rHeight from a "width, height" string. +void payloadToSize(const char* pPayload, long& rWidth, long& rHeight) +{ + rWidth = rHeight = 0; + gchar** ppCoordinates = g_strsplit(pPayload, ", ", 2); + gchar** ppCoordinate = ppCoordinates; + if (!*ppCoordinate) + return; + rWidth = atoi(*ppCoordinate); + ++ppCoordinate; + if (!*ppCoordinate) + return; + rHeight = atoi(*ppCoordinate); + g_strfreev(ppCoordinates); +} + +} + + + namespace { /// Implementation of the global callback handler, invoked by globalCallback(); @@ -1073,16 +1091,7 @@ void LOKDocView_Impl::globalCallbackWorkerImpl(int nType, const char* pPayload) #endif } -enum -{ - EDIT_CHANGED, - COMMAND_CHANGED, - SEARCH_NOT_FOUND, - PART_CHANGED, - LAST_SIGNAL -}; -static guint doc_view_signals[LAST_SIGNAL] = { 0 }; void LOKDocView_Impl::commandChanged(const std::string& rString) { @@ -1100,9 +1109,8 @@ void LOKDocView_Impl::setPart(const std::string& rString) renderDocument(0); } -static void lok_doc_view_class_init( gpointer ptr ) +static void lok_doc_view_class_init (LOKDocViewClass* pClass) { - LOKDocViewClass* pClass = static_cast(ptr); GObjectClass *gobject_class = G_OBJECT_CLASS(pClass); pClass->edit_changed = NULL; doc_view_signals[EDIT_CHANGED] = @@ -1146,9 +1154,8 @@ static void lok_doc_view_class_init( gpointer ptr ) G_TYPE_INT); } -static void lok_doc_view_init( GTypeInstance* pInstance, gpointer ) +static void lok_doc_view_init (LOKDocView* pDocView) { - LOKDocView* pDocView = reinterpret_cast(pInstance); // Gtk ScrolledWindow is apparently not fully initialised yet, we specifically // have to set the [hv]adjustment to prevent GTK assertions from firing, see // https://bugzilla.gnome.org/show_bug.cgi?id=438114 for more info. @@ -1183,29 +1190,7 @@ static void lok_doc_view_init( GTypeInstance* pInstance, gpointer ) g_signal_connect(G_OBJECT(pDocView), "destroy", G_CALLBACK(LOKDocView_Impl::destroy), 0); } -SAL_DLLPUBLIC_EXPORT guint lok_doc_view_get_type() -{ - static guint lok_doc_view_type = 0; - - if (!lok_doc_view_type) - { - char pName[] = "LokDocView"; - GtkTypeInfo lok_doc_view_info = - { - pName, - sizeof( LOKDocView ), - sizeof( LOKDocViewClass ), - lok_doc_view_class_init, - lok_doc_view_init, - NULL, - NULL, - nullptr - }; - - lok_doc_view_type = gtk_type_unique( gtk_scrolled_window_get_type(), &lok_doc_view_info ); - } - return lok_doc_view_type; -} +SAL_DLLPUBLIC_EXPORT GType lok_doc_view_get_type(); SAL_DLLPUBLIC_EXPORT GtkWidget* lok_doc_view_new( LibreOfficeKit* pOffice ) { -- 2.12.0