Blob Blame History Raw
From 9d8fd399aa92d5bcfc11399f296ed2ffdd741286 Mon Sep 17 00:00:00 2001
From: Pranav Kant <pranavk@gnome.org>
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<LOKDocViewClass *>(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<LOKDocView *>(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