office-gobmx/fpicker/Library_fps.mk
Matt K 1c1226709c tdf#106282 Change Windows File Dialog to run on the main thread
Windows crashes when an IFileDialog object is used on a non-main
thread when cancelling a long search operation, when COM is
initialized as single-threaded apartment for that thread.
Trying to use a non-main thread with COM initialized to
multi-threaded apartment hangs the dialog UI.  The only solution
that works is to run all File Dialogs on the main thread.  This
has a performance penalty on the application while a File Dialog
is open or if multiple dialogs are searching and then cancelled,
but it's better than crashing.  Other applications like Firefox
use only the main thread for File Dialogs, but have additional
processes to avoid the performance penalty.

Change-Id: Icf8a8179dbea19bd3d749a1c2fe8e67dbfc726c6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114482
Reviewed-by: Matt K <mattkse@gmail.com>
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Tested-by: Jenkins
2021-04-22 22:20:55 +02:00

65 lines
1.4 KiB
Makefile

# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
$(eval $(call gb_Library_Library,fps))
$(eval $(call gb_Library_use_custom_headers,fps,\
officecfg/registry \
))
$(eval $(call gb_Library_set_componentfile,fps,fpicker/source/win32/fps))
$(eval $(call gb_Library_set_include,fps,\
$$(INCLUDE) \
-I$(SRCDIR)/fpicker/inc \
))
$(eval $(call gb_Library_use_external,fps,boost_headers))
$(eval $(call gb_Library_use_sdk_api,fps))
$(eval $(call gb_Library_use_libraries,fps,\
comphelper \
cppu \
cppuhelper \
sal \
i18nlangtag \
tl \
utl \
vcl \
))
$(eval $(call gb_Library_use_system_win32_libs,fps,\
advapi32 \
comdlg32 \
gdi32 \
kernel32 \
ole32 \
oleaut32 \
shell32 \
uuid \
))
ifeq ($(COM),MSC)
$(eval $(call gb_Library_add_libs,fps,\
Delayimp.lib /DELAYLOAD:shell32.dll \
))
endif
$(eval $(call gb_Library_add_exception_objects,fps,\
fpicker/source/win32/FilterContainer \
fpicker/source/win32/VistaFilePicker \
fpicker/source/win32/VistaFilePickerEventHandler \
fpicker/source/win32/VistaFilePickerImpl \
fpicker/source/win32/resourceprovider \
fpicker/source/win32/WinImplHelper \
))
# vim: set noet sw=4 ts=4: