summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/LibreOfficeKit/LibreOfficeKitGtk.h63
-rw-r--r--libreofficekit/source/gtk/lokdocview.cxx97
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 4de4c710be3c..b6c529f41a03 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 )
{