summaryrefslogtreecommitdiffstats
path: root/Telegram/SourceFiles/platform/linux/specific_linux.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Telegram/SourceFiles/platform/linux/specific_linux.cpp')
-rw-r--r--Telegram/SourceFiles/platform/linux/specific_linux.cpp87
1 files changed, 15 insertions, 72 deletions
diff --git a/Telegram/SourceFiles/platform/linux/specific_linux.cpp b/Telegram/SourceFiles/platform/linux/specific_linux.cpp
index 12e98b37f4..6fab06580c 100644
--- a/Telegram/SourceFiles/platform/linux/specific_linux.cpp
+++ b/Telegram/SourceFiles/platform/linux/specific_linux.cpp
@@ -8,7 +8,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "platform/linux/specific_linux.h"
#include "base/platform/base_platform_info.h"
-#include "base/platform/linux/base_xcb_utilities_linux.h"
+#include "base/platform/linux/base_linux_xcb_utilities.h"
+#include "base/platform/linux/base_linux_gtk_integration.h"
#include "platform/linux/linux_desktop_environment.h"
#include "platform/linux/linux_gtk_integration.h"
#include "platform/linux/linux_wayland_integration.h"
@@ -60,6 +61,7 @@ extern "C" {
#include <iostream>
using namespace Platform;
+using BaseGtkIntegration = base::Platform::GtkIntegration;
using Platform::internal::WaylandIntegration;
using Platform::internal::GtkIntegration;
@@ -68,8 +70,6 @@ Q_DECLARE_METATYPE(QMargins);
namespace Platform {
namespace {
-constexpr auto kIgnoreGtkIncompatibility = "TDESKTOP_I_KNOW_ABOUT_GTK_INCOMPATIBILITY"_cs;
-
constexpr auto kDesktopFile = ":/misc/telegramdesktop.desktop"_cs;
constexpr auto kIconName = "telegram"_cs;
constexpr auto kHandlerTypeName = "x-scheme-handler/tg"_cs;
@@ -80,8 +80,6 @@ constexpr auto kPropertiesInterface = "org.freedesktop.DBus.Properties"_cs;
constexpr auto kXCBFrameExtentsAtomName = "_GTK_FRAME_EXTENTS"_cs;
-QStringList PlatformThemes;
-
#ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION
std::unique_ptr<internal::NotificationServiceWatcher> NSWInstance;
@@ -562,27 +560,6 @@ bool InSnap() {
return Result;
}
-bool IsStaticBinary() {
-#ifdef DESKTOP_APP_USE_PACKAGED
- return false;
-#else // DESKTOP_APP_USE_PACKAGED
- return true;
-#endif // !DESKTOP_APP_USE_PACKAGED
-}
-
-bool IsGtkIntegrationForced() {
- static const auto Result = [&] {
- if (!GtkIntegration::Instance()) {
- return false;
- }
-
- return PlatformThemes.contains(qstr("gtk3"), Qt::CaseInsensitive)
- || PlatformThemes.contains(qstr("gtk2"), Qt::CaseInsensitive);
- }();
-
- return Result;
-}
-
bool AreQtPluginsBundled() {
#if !defined DESKTOP_APP_USE_PACKAGED || defined DESKTOP_APP_USE_PACKAGED_LAZY
return true;
@@ -719,7 +696,7 @@ QImage GetImageFromClipboard() {
}
std::optional<bool> IsDarkMode() {
- const auto integration = GtkIntegration::Instance();
+ const auto integration = BaseGtkIntegration::Instance();
if (!integration) {
return std::nullopt;
}
@@ -832,7 +809,7 @@ bool WindowsNeedShadow() {
Window::ControlsLayout WindowControlsLayout() {
const auto gtkResult = []() -> std::optional<Window::ControlsLayout> {
- const auto integration = GtkIntegration::Instance();
+ const auto integration = BaseGtkIntegration::Instance();
if (!integration || !integration->checkVersion(3, 12, 0)) {
return std::nullopt;
}
@@ -962,53 +939,15 @@ int psFixPrevious() {
namespace Platform {
void start() {
- PlatformThemes = QString::fromUtf8(qgetenv("QT_QPA_PLATFORMTHEME"))
- .split(':', base::QStringSkipEmptyParts);
-
LOG(("Launcher filename: %1").arg(GetLauncherFilename()));
qputenv("PULSE_PROP_application.name", AppName.utf8());
qputenv("PULSE_PROP_application.icon_name", GetIconName().toLatin1());
- // if gtk integration and qgtk3/qgtk2 platformtheme (or qgtk2 style)
- // is used at the same time, the app will crash
- if (GtkIntegration::Instance()
- && !IsStaticBinary()
- && !qEnvironmentVariableIsSet(
- kIgnoreGtkIncompatibility.utf8())) {
- g_warning(
- "Unfortunately, GTK integration "
- "conflicts with qgtk2 platformtheme and style. "
- "Therefore, QT_QPA_PLATFORMTHEME "
- "and QT_STYLE_OVERRIDE will be unset.");
-
- g_message(
- "This can be ignored by setting %s environment variable "
- "to any value, however, if qgtk2 theme or style is used, "
- "this will lead to a crash.",
- kIgnoreGtkIncompatibility.utf8().constData());
-
- g_message(
- "GTK integration can be disabled by setting %s to any value. "
- "Keep in mind that this will lead to clipboard issues "
- "and tdesktop will be unable to get settings from GTK "
- "(such as decoration layout, dark mode & more).",
- internal::kDisableGtkIntegration.utf8().constData());
-
- qunsetenv("QT_QPA_PLATFORMTHEME");
- qunsetenv("QT_STYLE_OVERRIDE");
-
- // Don't allow qgtk3 to init gtk earlier than us
- if (DesktopEnvironment::IsGtkBased()) {
- QApplication::setDesktopSettingsAware(false);
- }
- }
-
- if (!GtkIntegration::Instance()) {
- g_warning(
- "GTK integration was disabled on build or in runtime. "
- "This will lead to clipboard issues and a lack of some features "
- "(like Auto-Night Mode or system window controls layout).");
+ if (const auto integration = BaseGtkIntegration::Instance()) {
+ integration->prepareEnvironment();
+ } else {
+ g_warning("GTK integration is disabled, some feature unavailable. ");
}
#ifdef DESKTOP_APP_USE_PACKAGED_RLOTTIE
@@ -1227,13 +1166,17 @@ void start() {
DEBUG_LOG(("Icon theme: %1").arg(QIcon::themeName()));
DEBUG_LOG(("Fallback icon theme: %1").arg(QIcon::fallbackThemeName()));
+ if (const auto integration = BaseGtkIntegration::Instance()) {
+ integration->load();
+ }
+
if (const auto integration = GtkIntegration::Instance()) {
integration->load();
}
// wait for interface announce to know if native window frame is supported
- if (const auto waylandIntegration = WaylandIntegration::Instance()) {
- waylandIntegration->waitForInterfaceAnnounce();
+ if (const auto integration = WaylandIntegration::Instance()) {
+ integration->waitForInterfaceAnnounce();
}
#ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION