Disable Qt's integration mechanism on GTK-based DE to avoid early GTK loading

This also removes TDESKTOP_USE_GTK_FILE_DIALOG since it doesn't forces GTK dialog for anyone and there is no reason to leave it

TDESKTOP_DISABLE_GTK_INTEGRATION can be also tested via action now
This commit is contained in:
Ilya Fedin 2020-08-04 19:47:01 +04:00 committed by John Preston
parent 1de1747c38
commit 786bedf271
7 changed files with 21 additions and 31 deletions

View file

@ -54,6 +54,7 @@ jobs:
defines: defines:
- "" - ""
- "DESKTOP_APP_DISABLE_DBUS_INTEGRATION" - "DESKTOP_APP_DISABLE_DBUS_INTEGRATION"
- "TDESKTOP_DISABLE_GTK_INTEGRATION"
env: env:
GIT: "https://github.com" GIT: "https://github.com"

View file

@ -130,11 +130,12 @@ bool NativeSupported(Type type = Type::ReadFile) {
// or if QT_QPA_PLATFORMTHEME=(gtk2|gtk3) // or if QT_QPA_PLATFORMTHEME=(gtk2|gtk3)
// or if portals is used and operation is to open folder // or if portals is used and operation is to open folder
// and portal doesn't support folder choosing // and portal doesn't support folder choosing
return Platform::UseGtkFileDialog() return (Platform::DesktopEnvironment::IsGtkBased()
&& (Platform::DesktopEnvironment::IsGtkBased()
|| Platform::IsGtkIntegrationForced() || Platform::IsGtkIntegrationForced()
|| Platform::UseXDGDesktopPortal()) || Platform::UseXDGDesktopPortal())
&& (!Platform::UseXDGDesktopPortal() && ((!Platform::UseXDGDesktopPortal() &&
((!Platform::InFlatpak() && !Platform::InSnap())
|| Platform::IsGtkIntegrationForced()))
|| (type == Type::ReadFolder && !Platform::CanOpenDirectoryWithPortal())) || (type == Type::ReadFolder && !Platform::CanOpenDirectoryWithPortal()))
&& Platform::internal::GdkHelperLoaded() && Platform::internal::GdkHelperLoaded()
&& (Libs::gtk_widget_hide_on_delete != nullptr) && (Libs::gtk_widget_hide_on_delete != nullptr)

View file

@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/ */
#include "platform/linux/linux_libs.h" #include "platform/linux/linux_libs.h"
#include "base/platform/base_platform_info.h"
#include "platform/linux/linux_xlib_helper.h" #include "platform/linux/linux_xlib_helper.h"
#include "platform/linux/linux_gdk_helper.h" #include "platform/linux/linux_gdk_helper.h"
#include "platform/linux/specific_linux.h" #include "platform/linux/specific_linux.h"
@ -114,8 +115,13 @@ bool setupGtkBase(QLibrary &lib_gtk) {
// Otherwise we get segfault in Ubuntu 17.04 in gtk_init_check() call. // Otherwise we get segfault in Ubuntu 17.04 in gtk_init_check() call.
// See https://github.com/telegramdesktop/tdesktop/issues/3176 // See https://github.com/telegramdesktop/tdesktop/issues/3176
// See https://github.com/telegramdesktop/tdesktop/issues/3162 // See https://github.com/telegramdesktop/tdesktop/issues/3162
DEBUG_LOG(("Limit allowed GDK backends to wayland and x11")); if(Platform::IsWayland()) {
gdk_set_allowed_backends("wayland,x11"); DEBUG_LOG(("Limit allowed GDK backends to wayland,x11"));
gdk_set_allowed_backends("wayland,x11");
} else {
DEBUG_LOG(("Limit allowed GDK backends to x11,wayland"));
gdk_set_allowed_backends("x11,wayland");
}
} }
// gtk_init will reset the Xlib error handler, and that causes // gtk_init will reset the Xlib error handler, and that causes

View file

@ -682,14 +682,6 @@ bool IsGtkIntegrationForced() {
return false; return false;
} }
bool UseGtkFileDialog() {
#ifdef TDESKTOP_USE_GTK_FILE_DIALOG
return true;
#else // TDESKTOP_USE_GTK_FILE_DIALOG
return false;
#endif // !TDESKTOP_USE_GTK_FILE_DIALOG
}
bool IsQtPluginsBundled() { bool IsQtPluginsBundled() {
#ifdef DESKTOP_APP_USE_PACKAGED_LAZY #ifdef DESKTOP_APP_USE_PACKAGED_LAZY
return true; return true;
@ -1210,6 +1202,11 @@ void start() {
qunsetenv("QT_QPA_PLATFORMTHEME"); qunsetenv("QT_QPA_PLATFORMTHEME");
qunsetenv("QT_STYLE_OVERRIDE"); qunsetenv("QT_STYLE_OVERRIDE");
// Don't allow qgtk3 to init gtk earlier than us
if (DesktopEnvironment::IsGtkBased()) {
QApplication::setDesktopSettingsAware(false);
}
} }
if (!UseGtkIntegration()) { if (!UseGtkIntegration()) {
@ -1241,10 +1238,10 @@ void start() {
if((IsStaticBinary() if((IsStaticBinary()
|| InAppImage() || InAppImage()
|| InSnap()
|| UseGtkFileDialog()
|| IsQtPluginsBundled()) || IsQtPluginsBundled())
&& !InFlatpak()) { // it is handled by Qt for flatpak and snap
&& !InFlatpak()
&& !InSnap()) {
LOG(("Checking for XDG Desktop Portal...")); LOG(("Checking for XDG Desktop Portal..."));
// this can give us a chance to use // this can give us a chance to use
// a proper file dialog for current session // a proper file dialog for current session

View file

@ -26,7 +26,6 @@ bool InAppImage();
bool IsStaticBinary(); bool IsStaticBinary();
bool UseGtkIntegration(); bool UseGtkIntegration();
bool IsGtkIntegrationForced(); bool IsGtkIntegrationForced();
bool UseGtkFileDialog();
bool IsQtPluginsBundled(); bool IsQtPluginsBundled();
bool IsXDGDesktopPortalPresent(); bool IsXDGDesktopPortalPresent();

View file

@ -5,7 +5,6 @@
# https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL # https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
option(TDESKTOP_USE_FONTCONFIG_FALLBACK "Use custom fonts.conf (Linux only)." OFF) option(TDESKTOP_USE_FONTCONFIG_FALLBACK "Use custom fonts.conf (Linux only)." OFF)
option(TDESKTOP_USE_GTK_FILE_DIALOG "Use custom code for GTK file dialog (Linux only)." OFF)
option(TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME "Disable automatic 'tg://' URL scheme handler registration." ${DESKTOP_APP_USE_PACKAGED}) option(TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME "Disable automatic 'tg://' URL scheme handler registration." ${DESKTOP_APP_USE_PACKAGED})
option(TDESKTOP_DISABLE_NETWORK_PROXY "Disable all code for working through Socks5 or MTProxy." OFF) option(TDESKTOP_DISABLE_NETWORK_PROXY "Disable all code for working through Socks5 or MTProxy." OFF)
option(TDESKTOP_DISABLE_GTK_INTEGRATION "Disable all code for GTK integration (Linux only)." OFF) option(TDESKTOP_DISABLE_GTK_INTEGRATION "Disable all code for GTK integration (Linux only)." OFF)
@ -43,14 +42,6 @@ if (TDESKTOP_API_ID STREQUAL "0" OR TDESKTOP_API_HASH STREQUAL "")
" ") " ")
endif() endif()
if (NOT DESKTOP_APP_USE_PACKAGED)
set(TDESKTOP_USE_GTK_FILE_DIALOG ON)
endif()
if (TDESKTOP_USE_GTK_FILE_DIALOG)
set(TDESKTOP_DISABLE_GTK_INTEGRATION OFF)
endif()
if (DESKTOP_APP_DISABLE_SPELLCHECK) if (DESKTOP_APP_DISABLE_SPELLCHECK)
target_compile_definitions(Telegram PRIVATE TDESKTOP_DISABLE_SPELLCHECK) target_compile_definitions(Telegram PRIVATE TDESKTOP_DISABLE_SPELLCHECK)
else() else()
@ -69,10 +60,6 @@ if (TDESKTOP_USE_FONTCONFIG_FALLBACK)
target_compile_definitions(Telegram PRIVATE TDESKTOP_USE_FONTCONFIG_FALLBACK) target_compile_definitions(Telegram PRIVATE TDESKTOP_USE_FONTCONFIG_FALLBACK)
endif() endif()
if (TDESKTOP_USE_GTK_FILE_DIALOG)
target_compile_definitions(Telegram PRIVATE TDESKTOP_USE_GTK_FILE_DIALOG)
endif()
if (TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME) if (TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME)
target_compile_definitions(Telegram PRIVATE TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME) target_compile_definitions(Telegram PRIVATE TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME)
endif() endif()

View file

@ -101,7 +101,6 @@ parts:
- -DTDESKTOP_API_ID=611335 - -DTDESKTOP_API_ID=611335
- -DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c - -DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c
- -DDESKTOP_APP_USE_PACKAGED_LAZY=ON - -DDESKTOP_APP_USE_PACKAGED_LAZY=ON
- -DTDESKTOP_USE_GTK_FILE_DIALOG=ON
- -DDESKTOP_APP_QTWAYLANDCLIENT_PRIVATE_HEADERS=$SNAPCRAFT_STAGE/usr/include/$SNAPCRAFT_ARCH_TRIPLET/qt5/QtWaylandClient/5.12.8 - -DDESKTOP_APP_QTWAYLANDCLIENT_PRIVATE_HEADERS=$SNAPCRAFT_STAGE/usr/include/$SNAPCRAFT_ARCH_TRIPLET/qt5/QtWaylandClient/5.12.8
override-pull: | override-pull: |
snapcraftctl pull snapcraftctl pull