Repository.mk                               |    3 +
 config_host.mk.in                           |    1 
 configure.ac                                |   56 ++++++++++++++++++-----
 include/LibreOfficeKit/LibreOfficeKitGtk.h  |   67 +++++++++++++++-------------
 libreofficekit/Executable_gtktiledviewer.mk |    5 ++
 libreofficekit/Library_libreofficekitgtk.mk |    1 
 libreofficekit/Module_libreofficekit.mk     |   10 ++++
 libreofficekit/README.md                    |   13 +++++
 libreofficekit/source/gtk/lokdocview.cxx    |    1 
 9 files changed, 114 insertions(+), 43 deletions(-)

New commits:
commit f147d9e4ae3fc1bf9c0211a7deccb682cd7f4295
Author:     Mike Kaganski <[email protected]>
AuthorDate: Thu Oct 20 12:55:41 2022 +0300
Commit:     Mike Kaganski <[email protected]>
CommitDate: Thu Oct 27 09:00:17 2022 +0200

    Enable gtktiledviewer on Windows
    
    A new configure argument is introduced:
    
      --with-gtk3-build=<absolute path to GTK3 build>
    
    When provided, libreofficekit_selectionhandles package, libreofficekitgtk
    library and gtktiledviewer executable would be built on Windows using the
    GTK3 libraries in the passed directory, that must contain lib/pkgconfig
    subdirectory with correct pkg-config data.
    
    Change-Id: I6504af6eec0fc73cceb26a1ce923337abe14b5c4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141624
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141875
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/Repository.mk b/Repository.mk
index 6dd4aebbe9cd..640e7ea62902 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -77,6 +77,7 @@ $(eval $(call gb_Helper_register_executables,NONE, \
     mtfdemo \
     visualbackendtest \
        $(if $(and $(ENABLE_GTK3), $(filter LINUX %BSD SOLARIS,$(OS))), 
gtktiledviewer) \
+       $(if $(and $(ENABLE_GTKTILEDVIEWER), $(filter WNT,$(OS))), 
gtktiledviewer) \
 ))
 
 $(eval $(call gb_Helper_register_executables_for_install,SDK,sdk, \
@@ -605,6 +606,7 @@ $(eval $(call 
gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \
        i18nutil \
        index_data \
        $(if $(and $(ENABLE_GTK3), $(filter LINUX %BSD SOLARIS,$(OS))), 
libreofficekitgtk) \
+       $(if $(and $(ENABLE_GTKTILEDVIEWER), $(filter WNT,$(OS))), 
libreofficekitgtk) \
        localedata_en \
        localedata_es \
        localedata_euro \
@@ -821,6 +823,7 @@ $(eval $(call gb_Helper_register_packages_for_install,calc,\
 
 $(eval $(call gb_Helper_register_packages_for_install,libreofficekit,\
        $(if $(filter LINUX %BSD SOLARIS, 
$(OS)),libreofficekit_selectionhandles) \
+       $(if $(and $(ENABLE_GTKTILEDVIEWER), $(filter WNT,$(OS))), 
libreofficekit_selectionhandles) \
 ))
 
 $(eval $(call gb_Helper_register_packages_for_install,ure,\
diff --git a/config_host.mk.in b/config_host.mk.in
index 2a8e01e950bb..3004ba5df089 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -166,6 +166,7 @@ export ENABLE_GPGMEPP=@ENABLE_GPGMEPP@
 export ENABLE_GSTREAMER_1_0=@ENABLE_GSTREAMER_1_0@
 export ENABLE_GTK3=@ENABLE_GTK3@
 export ENABLE_GTK4=@ENABLE_GTK4@
+export ENABLE_GTKTILEDVIEWER=@ENABLE_GTKTILEDVIEWER@
 export DISABLE_GUI=@DISABLE_GUI@
 export ENABLE_HEADLESS=@ENABLE_HEADLESS@
 export ENABLE_HTMLHELP=@ENABLE_HTMLHELP@
diff --git a/configure.ac b/configure.ac
index d6eb9393626a..7753713a83c1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -46,19 +46,31 @@ FilterLibs()
     # Return value: $filteredlibs
 
     filteredlibs=
-    for f in $1; do
-        case "$f" in
-            # let's start with Fedora's paths for now
-            
-L/lib|-L/lib/|-L/lib64|-L/lib64/|-L/usr/lib|-L/usr/lib/|-L/usr/lib64|-L/usr/lib64/)
-                # ignore it: on UNIXoids it is searched by default anyway
-                # but if it's given explicitly then it may override other paths
-                # (on macOS it would be an error to use it instead of SDK)
-                ;;
-            *)
+    if test "$COM" = "MSC"; then
+        for f in $1; do
+            if test "x$f" != "x${f#-L}"; then
+                filteredlibs="$filteredlibs -LIBPATH:${f:2}"
+            elif test "x$f" != "x${f#-l}"; then
+                filteredlibs="$filteredlibs ${f:2}.lib"
+            else
                 filteredlibs="$filteredlibs $f"
-                ;;
-        esac
-    done
+            fi
+        done
+    else
+        for f in $1; do
+            case "$f" in
+                # let's start with Fedora's paths for now
+                
-L/lib|-L/lib/|-L/lib64|-L/lib64/|-L/usr/lib|-L/usr/lib/|-L/usr/lib64|-L/usr/lib64/)
+                    # ignore it: on UNIXoids it is searched by default anyway
+                    # but if it's given explicitly then it may override other 
paths
+                    # (on macOS it would be an error to use it instead of SDK)
+                    ;;
+                *)
+                    filteredlibs="$filteredlibs $f"
+                    ;;
+            esac
+        done
+    fi
 }
 
 PathFormat()
@@ -2625,6 +2637,11 @@ libo_FUZZ_ARG_WITH(latest-c++,
          published standard.]),,
         [with_latest_c__=no])
 
+AC_ARG_WITH(gtk3-build,
+    AS_HELP_STRING([--with-gtk3-build=<absolute path to GTK3 build>],
+        [(Windows-only) In order to build GtkTiledViewer on Windows, pass the 
path
+         to a GTK3 build, like 
'--with-gtk3-build=C:/gtk-build/gtk/x64/release'.]))
+
 dnl ===================================================================
 dnl Branding
 dnl ===================================================================
@@ -11730,6 +11747,7 @@ dnl 
===================================================================
 
 GTK3_CFLAGS=""
 GTK3_LIBS=""
+ENABLE_GTKTILEDVIEWER=""
 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" 
= "xyes"; then
     if test "$with_system_cairo" = no; then
         add_warning 'Non-system cairo combined with gtk3 is assumed to cause 
trouble; proceed at your own risk.'
@@ -11747,9 +11765,23 @@ if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" 
-o "x$enable_gtk3_kde5" =
         AC_CHECK_HEADER(EGL/eglplatform.h, [],
                         [AC_MSG_ERROR(EGL headers not found. install 
mesa-libEGL-devel)], [])
     fi
+elif test -n "$with_gtk3_build" -a "$OS" = "WNT"; then
+    PathFormat "${with_gtk3_build}/lib/pkgconfig"
+    if test "$build_os" = "cygwin"; then
+        dnl cygwin's pkg-config does not recognize "C:/..."-style paths, only 
"/cygdrive/c/..."
+        formatted_path_unix=`cygpath -au "$formatted_path_unix"`
+    fi
+
+    PKG_CONFIG_PATH="$formatted_path_unix"; export PKG_CONFIG_PATH
+    PKG_CHECK_MODULES(GTK3, cairo gdk-3.0 gio-2.0 glib-2.0 gobject-2.0 
gtk+-3.0)
+    GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED 
-DGTK_DISABLE_DEPRECATED"
+    FilterLibs "${GTK3_LIBS}"
+    GTK3_LIBS="${filteredlibs}"
+    ENABLE_GTKTILEDVIEWER="yes"
 fi
 AC_SUBST(GTK3_LIBS)
 AC_SUBST(GTK3_CFLAGS)
+AC_SUBST(ENABLE_GTKTILEDVIEWER)
 
 GTK4_CFLAGS=""
 GTK4_LIBS=""
diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h 
b/include/LibreOfficeKit/LibreOfficeKitGtk.h
index 83a2a1f750f6..fe9310c46c51 100644
--- a/include/LibreOfficeKit/LibreOfficeKitGtk.h
+++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h
@@ -15,6 +15,13 @@
 
 #include <LibreOfficeKit/LibreOfficeKit.h>
 
+ // Avoid "error C2375: 'foo': redefinition; different linkage" on MSVC
+#if defined LOK_DOC_VIEW_IMPLEMENTATION
+#define LOK_DOC_VIEW_DLLPUBLIC SAL_DLLPUBLIC_EXPORT
+#else
+#define LOK_DOC_VIEW_DLLPUBLIC
+#endif
+
 G_BEGIN_DECLS
 
 #define LOK_TYPE_DOC_VIEW            (lok_doc_view_get_type())
@@ -38,7 +45,7 @@ struct _LOKDocViewClass
     GtkDrawingAreaClass parent_class;
 };
 
-GType                          lok_doc_view_get_type               (void) 
G_GNUC_CONST;
+LOK_DOC_VIEW_DLLPUBLIC GType   lok_doc_view_get_type               (void) 
G_GNUC_CONST;
 
 /**
  * lok_doc_view_new:
@@ -50,7 +57,7 @@ GType                          lok_doc_view_get_type          
     (void) G_GNUC
  *
  * Returns: (transfer none): The #LOKDocView widget instance.
  */
-GtkWidget*                     lok_doc_view_new                    (const 
gchar* pPath,
+LOK_DOC_VIEW_DLLPUBLIC GtkWidget* lok_doc_view_new                 (const 
gchar* pPath,
                                                                     
GCancellable *cancellable,
                                                                     GError 
**error);
 
@@ -67,7 +74,7 @@ GtkWidget*                     lok_doc_view_new               
     (const gchar*
  *
  * Returns: (transfer none): The #LOKDocView widget instance.
  */
-GtkWidget*                     lok_doc_view_new_from_user_profile  (const 
gchar* pPath,
+LOK_DOC_VIEW_DLLPUBLIC GtkWidget* lok_doc_view_new_from_user_profile (const 
gchar* pPath,
                                                                     const 
gchar* pUserProfile,
                                                                     
GCancellable *cancellable,
                                                                     GError 
**error);
@@ -79,7 +86,7 @@ GtkWidget*                     
lok_doc_view_new_from_user_profile  (const gchar*
  *
  * Returns: (transfer none): The #LOKDocView widget instance.
  */
-GtkWidget*                     lok_doc_view_new_from_widget        
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC GtkWidget* lok_doc_view_new_from_widget     
(LOKDocView* pDocView,
                                                                     const 
gchar* pRenderingArguments);
 
 /**
@@ -91,7 +98,7 @@ GtkWidget*                     lok_doc_view_new_from_widget   
     (LOKDocView*
  * @callback:
  * @userdata:
  */
-void                           lok_doc_view_open_document          
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC void    lok_doc_view_open_document          
(LOKDocView* pDocView,
                                                                     const 
gchar* pPath,
                                                                     const 
gchar* pRenderingArguments,
                                                                     
GCancellable* cancellable,
@@ -106,7 +113,7 @@ void                           lok_doc_view_open_document   
       (LOKDocView*
  *
  * Returns: %TRUE if the document is loaded successfully, %FALSE otherwise
  */
-gboolean                       lok_doc_view_open_document_finish   
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC gboolean lok_doc_view_open_document_finish  
(LOKDocView* pDocView,
                                                                     
GAsyncResult* res,
                                                                     GError** 
error);
 
@@ -118,7 +125,7 @@ gboolean                       
lok_doc_view_open_document_finish   (LOKDocView*
  *
  * Returns: The #LibreOfficeKitDocument instance the widget is currently 
showing
  */
-LibreOfficeKitDocument*        lok_doc_view_get_document           
(LOKDocView* pDocView);
+LOK_DOC_VIEW_DLLPUBLIC LibreOfficeKitDocument* lok_doc_view_get_document 
(LOKDocView* pDocView);
 
 /**
  * lok_doc_view_set_zoom:
@@ -129,7 +136,7 @@ LibreOfficeKitDocument*        lok_doc_view_get_document    
       (LOKDocView*
  * existing zoom level. Values outside the range [0.25, 5.0] are clamped into
  * the nearest allowed value in the interval.
  */
-void                           lok_doc_view_set_zoom               
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC void    lok_doc_view_set_zoom               
(LOKDocView* pDocView,
                                                                     float 
fZoom);
 /**
  * lok_doc_view_set_visible_area:
@@ -140,7 +147,7 @@ void                           lok_doc_view_set_zoom        
       (LOKDocView*
  * to jump the correct length, which depends on the amount of visible height of
  * the document.
  */
-void                           lok_doc_view_set_visible_area       
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC void    lok_doc_view_set_visible_area       
(LOKDocView* pDocView,
                                                                     
GdkRectangle* pVisibleArea);
 
 /**
@@ -149,7 +156,7 @@ void                           
lok_doc_view_set_visible_area       (LOKDocView*
  *
  * Returns: The current zoom factor value in float for pDocView
  */
-gfloat                         lok_doc_view_get_zoom               
(LOKDocView* pDocView);
+LOK_DOC_VIEW_DLLPUBLIC gfloat  lok_doc_view_get_zoom               
(LOKDocView* pDocView);
 
 /**
  * lok_doc_view_get_parts:
@@ -158,7 +165,7 @@ gfloat                         lok_doc_view_get_zoom        
       (LOKDocView*
  * Returns: Part refers to either individual sheets in a Calc, or slides in 
Impress,
  * and has no relevance for Writer. Returns -1 if no document is set currently.
  */
-gint                           lok_doc_view_get_parts              
(LOKDocView* pDocView);
+LOK_DOC_VIEW_DLLPUBLIC gint    lok_doc_view_get_parts              
(LOKDocView* pDocView);
 
 /**
  * lok_doc_view_get_part:
@@ -166,14 +173,14 @@ gint                           lok_doc_view_get_parts     
         (LOKDocView*
  *
  * Returns: Current part number of the document. Returns -1 if no document is 
set currently.
  */
-gint                           lok_doc_view_get_part               
(LOKDocView* pDocView);
+LOK_DOC_VIEW_DLLPUBLIC gint    lok_doc_view_get_part               
(LOKDocView* pDocView);
 
 /**
  * lok_doc_view_set_part:
  * @pDocView: The #LOKDocView instance
  * @nPart:
  */
-void                           lok_doc_view_set_part               
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC void    lok_doc_view_set_part               
(LOKDocView* pDocView,
                                                                     int nPart);
 
 /**
@@ -184,7 +191,7 @@ void                           lok_doc_view_set_part        
       (LOKDocView*
  * Returns: Get current part name of loaded document. Returns null if no
  * document is set, or document has been destroyed using 
lok_doc_view_destroy_document.
  */
-gchar*                         lok_doc_view_get_part_name          
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC gchar*  lok_doc_view_get_part_name          
(LOKDocView* pDocView,
                                                                     int nPart);
 
 /**
@@ -192,14 +199,14 @@ gchar*                         lok_doc_view_get_part_name 
         (LOKDocView*
  * @pDocView: The #LOKDocView instance
  * @nPartMode:
  */
-void                           lok_doc_view_set_partmode           
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC void    lok_doc_view_set_partmode           
(LOKDocView* pDocView,
                                                                     int 
nPartMode);
 
 /**
  * lok_doc_view_reset_view:
  * @pDocView: The #LOKDocView instance
  */
-void                           lok_doc_view_reset_view             
(LOKDocView* pDocView);
+LOK_DOC_VIEW_DLLPUBLIC void    lok_doc_view_reset_view             
(LOKDocView* pDocView);
 
 /**
  * lok_doc_view_set_edit:
@@ -208,7 +215,7 @@ void                           lok_doc_view_reset_view      
       (LOKDocView*
  *
  * Sets if the viewer is actually an editor or not.
  */
-void                           lok_doc_view_set_edit               
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC void    lok_doc_view_set_edit               
(LOKDocView* pDocView,
                                                                     gboolean 
bEdit);
 
 /**
@@ -219,7 +226,7 @@ void                           lok_doc_view_set_edit        
       (LOKDocView*
  *
  * Returns: %TRUE if the given pDocView is in edit mode.
  */
-gboolean                       lok_doc_view_get_edit               
(LOKDocView* pDocView);
+LOK_DOC_VIEW_DLLPUBLIC gboolean lok_doc_view_get_edit              
(LOKDocView* pDocView);
 
 /**
  * lok_doc_view_post_command:
@@ -230,7 +237,7 @@ gboolean                       lok_doc_view_get_edit        
       (LOKDocView*
  *
  * Posts the .uno: command to the LibreOfficeKit.
  */
-void                           lok_doc_view_post_command           
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC void    lok_doc_view_post_command           
(LOKDocView* pDocView,
                                                                     const 
gchar* pCommand,
                                                                     const 
gchar* pArguments,
                                                                     gboolean 
bNotifyWhenFinished);
@@ -245,7 +252,7 @@ void                           lok_doc_view_post_command    
       (LOKDocView*
  *
  * Returns: A json mapping of the possible values for the given command
  */
-gchar *                        lok_doc_view_get_command_values     
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC gchar * lok_doc_view_get_command_values     
(LOKDocView* pDocView,
                                                                     const 
gchar* pCommand);
 
 /**
@@ -257,7 +264,7 @@ gchar *                        
lok_doc_view_get_command_values     (LOKDocView*
  * Highlights the next matching text in the view. `search-not-found` signal 
will
  * be emitted when no search is found
  */
-void                           lok_doc_view_find_next              
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC void    lok_doc_view_find_next              
(LOKDocView* pDocView,
                                                                     const 
gchar* pText,
                                                                     gboolean 
bHighlightAll);
 
@@ -270,7 +277,7 @@ void                           lok_doc_view_find_next       
       (LOKDocView*
  * Highlights the previous matching text in the view. `search-not-found` signal
  * will be emitted when no search is found
  */
-void                           lok_doc_view_find_prev              
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC void    lok_doc_view_find_prev              
(LOKDocView* pDocView,
                                                                     const 
gchar* pText,
                                                                     gboolean 
bHighlightAll);
 
@@ -282,7 +289,7 @@ void                           lok_doc_view_find_prev       
       (LOKDocView*
  * Highlights all matching texts in the view. `search-not-found` signal
  * will be emitted when no search is found
  */
-void                           lok_doc_view_highlight_all          
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC void    lok_doc_view_highlight_all          
(LOKDocView* pDocView,
                                                                     const 
gchar* pText);
 
 /**
@@ -295,7 +302,7 @@ void                           lok_doc_view_highlight_all   
       (LOKDocView*
  * Returns: Selected text. The caller must free the returned buffer after
  * use. Returns null if no document is set.
  */
-gchar*                          lok_doc_view_copy_selection        
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC gchar*   lok_doc_view_copy_selection        
(LOKDocView* pDocView,
                                                                     const 
gchar* pMimeType,
                                                                     gchar** 
pUsedMimeType);
 
@@ -310,7 +317,7 @@ gchar*                          lok_doc_view_copy_selection 
       (LOKDocView*
  *
  * Returns: if pData was pasted successfully.
  */
-gboolean                        lok_doc_view_paste                 
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC gboolean lok_doc_view_paste                 
(LOKDocView* pDocView,
                                                                     const 
gchar* pMimeType,
                                                                     const 
gchar* pData,
                                                                     gsize 
nSize);
@@ -323,7 +330,7 @@ gboolean                        lok_doc_view_paste          
       (LOKDocView*
  *
  * Set the password for password protected documents
  */
-void                            lok_doc_view_set_document_password 
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC void     lok_doc_view_set_document_password 
(LOKDocView* pDocView,
                                                                     const 
gchar* pURL,
                                                                     const 
gchar* pPassword);
 
@@ -341,7 +348,7 @@ void                            
lok_doc_view_set_document_password (LOKDocView*
  * "ProductExtension": ".0.0.alpha0",
  * "BuildId": "<full 40 char git hash>"}
  */
-gchar*                         lok_doc_view_get_version_info       
(LOKDocView* pDocView);
+LOK_DOC_VIEW_DLLPUBLIC gchar*   lok_doc_view_get_version_info       
(LOKDocView* pDocView);
 
 /**
  * lok_doc_view_pixel_to_twip:
@@ -352,7 +359,7 @@ gchar*                         
lok_doc_view_get_version_info       (LOKDocView*
  *
  * Returns: The corresponding value in twips
  */
-gfloat                         lok_doc_view_pixel_to_twip          
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC gfloat  lok_doc_view_pixel_to_twip          
(LOKDocView* pDocView,
                                                                     float 
fInput);
 
 /**
@@ -364,7 +371,7 @@ gfloat                         lok_doc_view_pixel_to_twip   
       (LOKDocView*
  *
  * Returns: The corresponding value in pixels
  */
-gfloat                         lok_doc_view_twip_to_pixel          
(LOKDocView* pDocView,
+LOK_DOC_VIEW_DLLPUBLIC gfloat  lok_doc_view_twip_to_pixel          
(LOKDocView* pDocView,
                                                                     float 
fInput);
 
 /**
@@ -372,7 +379,7 @@ gfloat                         lok_doc_view_twip_to_pixel   
       (LOKDocView*
  * @pDocView: The #LOKDocView instance
  * @pArguments: (nullable) (allow-none): see 
lok::Document::sendContentControlEvent() for the details.
  */
-void lok_doc_view_send_content_control_event(LOKDocView* pDocView, const 
gchar* pArguments);
+LOK_DOC_VIEW_DLLPUBLIC void 
lok_doc_view_send_content_control_event(LOKDocView* pDocView, const gchar* 
pArguments);
 
 G_END_DECLS
 
diff --git a/libreofficekit/Executable_gtktiledviewer.mk 
b/libreofficekit/Executable_gtktiledviewer.mk
index 99ef51af8975..d529e3422f6f 100644
--- a/libreofficekit/Executable_gtktiledviewer.mk
+++ b/libreofficekit/Executable_gtktiledviewer.mk
@@ -29,12 +29,17 @@ $(eval $(call gb_Executable_add_cxxflags,gtktiledviewer,\
 
 $(eval $(call gb_Executable_add_libs,gtktiledviewer,\
     $(GTK3_LIBS) \
+))
+
+ifneq ($(OS), WNT)
+$(eval $(call gb_Executable_add_libs,gtktiledviewer,\
     -lX11 \
     -lXext \
     -lXrender \
     -lSM \
     -lICE \
 ))
+endif
 
 $(eval $(call gb_Executable_use_libraries,gtktiledviewer,\
     libreofficekitgtk \
diff --git a/libreofficekit/Library_libreofficekitgtk.mk 
b/libreofficekit/Library_libreofficekitgtk.mk
index 004ee5ddcb38..509ef1b4f44c 100644
--- a/libreofficekit/Library_libreofficekitgtk.mk
+++ b/libreofficekit/Library_libreofficekitgtk.mk
@@ -31,6 +31,7 @@ $(eval $(call gb_Library_add_libs,libreofficekitgtk,\
 
 $(eval $(call gb_Library_add_defs,libreofficekitgtk,\
        -DLOK_PATH="\"$(LIBDIR)/libreoffice/$(LIBO_LIB_FOLDER)\"" \
+       -DLOK_DOC_VIEW_IMPLEMENTATION \
 ))
 
 ifeq ($(OS),$(filter LINUX %BSD SOLARIS, $(OS)))
diff --git a/libreofficekit/Module_libreofficekit.mk 
b/libreofficekit/Module_libreofficekit.mk
index 351f89a33e48..dc98af77088a 100644
--- a/libreofficekit/Module_libreofficekit.mk
+++ b/libreofficekit/Module_libreofficekit.mk
@@ -33,6 +33,16 @@ $(eval $(call gb_Module_add_targets,libreofficekit,\
     UIConfig_libreofficekit \
 ))
 
+else ifeq ($(OS),WNT)
+
+ifneq ($(ENABLE_GTKTILEDVIEWER),)
+$(eval $(call gb_Module_add_targets,libreofficekit,\
+    Library_libreofficekitgtk \
+    Executable_gtktiledviewer \
+    Package_selectionhandles \
+))
+endif
+
 endif
 
 # vim: set ts=4 sw=4 et:
diff --git a/libreofficekit/README.md b/libreofficekit/README.md
index 7eb7bb5fd355..95a33707a28a 100644
--- a/libreofficekit/README.md
+++ b/libreofficekit/README.md
@@ -97,6 +97,19 @@ To debug with `gdb`:
 
 before `bin/run`, this will run gtktiledviewer in the debugger instead.
 
+### Building and running gtktiledviewer on Windows
+
+A pre-requisite is pre-built GTK3 libraries. See [official GTK 
documentation](https://www.gtk.org/docs/installations/windows/).
+Building of gtktiledviewer on Windows is enabled by passing
+
+    --with-gtk3-build=<path/to/GTK3/build/directory>
+
+to configure.
+
+Running the compiled executable requires GTK's bin in PATH:
+
+    PATH=${PATH}:/cygdrive/c/gtk-build/gtk/x64/release/bin bin/run 
gtktiledviewer --lo-path=$(cygpath -am $PWD/instdir/program) ../test.odt
+
 ## LibreOfficeKitGtk
 
 Currently consists of only a very basic GTK document viewer widget.
diff --git a/libreofficekit/source/gtk/lokdocview.cxx 
b/libreofficekit/source/gtk/lokdocview.cxx
index ebe8e8c91d68..926f1328ea42 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -337,7 +337,6 @@ static void lok_doc_view_initable_iface_init 
(GInitableIface *iface);
 static void callbackWorker (int nType, const char* pPayload, void* pData);
 static void updateClientZoom (LOKDocView *pDocView);
 
-SAL_DLLPUBLIC_EXPORT GType lok_doc_view_get_type();
 #ifdef __GNUC__
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wunused-function"

Reply via email to