From 7c031a4fb69352d487b76d00cccbf8f0a8fca062 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Thu, 28 Jan 2021 05:36:20 +0400 Subject: Perform additional checks for gtk scaling factor --- .../platform/linux/linux_gtk_integration.cpp | 21 +++++++++++++++++++-- .../platform/linux/linux_gtk_integration_p.h | 1 + 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/platform/linux/linux_gtk_integration.cpp b/Telegram/SourceFiles/platform/linux/linux_gtk_integration.cpp index cef2133667..59fcd12d9a 100644 --- a/Telegram/SourceFiles/platform/linux/linux_gtk_integration.cpp +++ b/Telegram/SourceFiles/platform/linux/linux_gtk_integration.cpp @@ -328,6 +328,7 @@ void GtkIntegration::load() { if (GtkLoaded) { LOAD_GTK_SYMBOL(lib_gtk, "gdk_display_get_default", gdk_display_get_default); + LOAD_GTK_SYMBOL(lib_gtk, "gdk_display_get_monitor", gdk_display_get_monitor); LOAD_GTK_SYMBOL(lib_gtk, "gdk_display_get_primary_monitor", gdk_display_get_primary_monitor); LOAD_GTK_SYMBOL(lib_gtk, "gdk_monitor_get_scale_factor", gdk_monitor_get_scale_factor); @@ -440,13 +441,29 @@ std::optional GtkIntegration::getStringSetting( std::optional GtkIntegration::scaleFactor() const { if (!loaded() || (gdk_display_get_default == nullptr) + || (gdk_display_get_monitor == nullptr) || (gdk_display_get_primary_monitor == nullptr) || (gdk_monitor_get_scale_factor == nullptr)) { return std::nullopt; } - return gdk_monitor_get_scale_factor( - gdk_display_get_primary_monitor(gdk_display_get_default())); + const auto display = gdk_display_get_default(); + if (!display) { + return std::nullopt; + } + + const auto monitor = [&] { + if (const auto primary = gdk_display_get_primary_monitor(display)) { + return primary; + } + return gdk_display_get_monitor(display, 0); + }(); + + if (!monitor) { + return std::nullopt; + } + + return gdk_monitor_get_scale_factor(monitor); } bool GtkIntegration::fileDialogSupported() const { diff --git a/Telegram/SourceFiles/platform/linux/linux_gtk_integration_p.h b/Telegram/SourceFiles/platform/linux/linux_gtk_integration_p.h index c12faa846b..b0b60e6bcf 100644 --- a/Telegram/SourceFiles/platform/linux/linux_gtk_integration_p.h +++ b/Telegram/SourceFiles/platform/linux/linux_gtk_integration_p.h @@ -149,6 +149,7 @@ inline bool g_type_cit_helper(Object *instance, GType iface_type) { inline gint (*gtk_dialog_run)(GtkDialog *dialog) = nullptr; inline GdkAtom (*gdk_atom_intern)(const gchar *atom_name, gboolean only_if_exists) = nullptr; inline GdkDisplay* (*gdk_display_get_default)(void) = nullptr; +inline GdkMonitor* (*gdk_display_get_monitor)(GdkDisplay *display, int monitor_num) = nullptr; inline GdkMonitor* (*gdk_display_get_primary_monitor)(GdkDisplay *display) = nullptr; inline int (*gdk_monitor_get_scale_factor)(GdkMonitor *monitor) = nullptr; inline GdkPixbuf* (*gdk_pixbuf_new_from_file_at_size)(const gchar *filename, int width, int height, GError **error) = nullptr; -- cgit v1.2.3