diff --git a/Telegram/SourceFiles/platform/linux/linux_libs.cpp b/Telegram/SourceFiles/platform/linux/linux_libs.cpp index e4aecc2fd6..9a32638755 100644 --- a/Telegram/SourceFiles/platform/linux/linux_libs.cpp +++ b/Telegram/SourceFiles/platform/linux/linux_libs.cpp @@ -130,11 +130,6 @@ bool setupGtkBase(QLibrary &lib_gtk) { if (!load(lib_gtk, "g_log_default_handler", g_log_default_handler)) return false; if (!load(lib_gtk, "gdk_atom_intern", gdk_atom_intern)) return false; - if (!load(lib_gtk, "gdk_pixbuf_get_has_alpha", gdk_pixbuf_get_has_alpha)) return false; - if (!load(lib_gtk, "gdk_pixbuf_get_pixels", gdk_pixbuf_get_pixels)) return false; - if (!load(lib_gtk, "gdk_pixbuf_get_width", gdk_pixbuf_get_width)) return false; - if (!load(lib_gtk, "gdk_pixbuf_get_height", gdk_pixbuf_get_height)) return false; - if (!load(lib_gtk, "gdk_pixbuf_get_rowstride", gdk_pixbuf_get_rowstride)) return false; if (load(lib_gtk, "gdk_set_allowed_backends", gdk_set_allowed_backends)) { // We work only with X11 GDK backend. @@ -262,6 +257,11 @@ void start() { if (gtkLoaded) { load(lib_gtk, "gdk_pixbuf_new_from_file_at_size", gdk_pixbuf_new_from_file_at_size); + load(lib_gtk, "gdk_pixbuf_get_has_alpha", gdk_pixbuf_get_has_alpha); + load(lib_gtk, "gdk_pixbuf_get_pixels", gdk_pixbuf_get_pixels); + load(lib_gtk, "gdk_pixbuf_get_width", gdk_pixbuf_get_width); + load(lib_gtk, "gdk_pixbuf_get_height", gdk_pixbuf_get_height); + load(lib_gtk, "gdk_pixbuf_get_rowstride", gdk_pixbuf_get_rowstride); internal::GdkHelperLoad(lib_gtk); diff --git a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp index f3dd3236ce..2f3e547506 100644 --- a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp @@ -414,7 +414,7 @@ void ForceDisabled(QAction *action, bool disabled) { MainWindow::MainWindow(not_null controller) : Window::MainWindow(controller) { #ifndef TDESKTOP_DISABLE_GTK_INTEGRATION - if (Libs::gtk_clipboard_get != nullptr) { + if (GtkClipboardSupported()) { _gtkClipboard = Libs::gtk_clipboard_get(Libs::gdk_atom_intern("CLIPBOARD", true)); } #endif // !TDESKTOP_DISABLE_GTK_INTEGRATION diff --git a/Telegram/SourceFiles/platform/linux/specific_linux.cpp b/Telegram/SourceFiles/platform/linux/specific_linux.cpp index f348f4b520..4c061c4ecf 100644 --- a/Telegram/SourceFiles/platform/linux/specific_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/specific_linux.cpp @@ -520,11 +520,26 @@ QString GetIconName() { return Result; } +bool GtkClipboardSupported() { + return (Libs::gtk_clipboard_get != nullptr) + && (Libs::gtk_clipboard_wait_for_contents != nullptr) + && (Libs::gtk_clipboard_wait_for_image != nullptr) + && (Libs::gtk_selection_data_targets_include_image != nullptr) + && (Libs::gtk_selection_data_free != nullptr) + && (Libs::gdk_pixbuf_get_pixels != nullptr) + && (Libs::gdk_pixbuf_get_width != nullptr) + && (Libs::gdk_pixbuf_get_height != nullptr) + && (Libs::gdk_pixbuf_get_rowstride != nullptr) + && (Libs::gdk_pixbuf_get_has_alpha != nullptr) + && (Libs::gdk_atom_intern != nullptr) + && (Libs::g_object_unref != nullptr); +} + QImage GetImageFromClipboard() { QImage data; #ifndef TDESKTOP_DISABLE_GTK_INTEGRATION - if (!App::wnd()->gtkClipboard()) { + if (!GtkClipboardSupported() || !App::wnd()->gtkClipboard()) { return data; } diff --git a/Telegram/SourceFiles/platform/linux/specific_linux.h b/Telegram/SourceFiles/platform/linux/specific_linux.h index 1e6f1d99e8..d94d518078 100644 --- a/Telegram/SourceFiles/platform/linux/specific_linux.h +++ b/Telegram/SourceFiles/platform/linux/specific_linux.h @@ -49,6 +49,8 @@ inline void IgnoreApplicationActivationRightNow() { void FallbackFontConfigCheckBegin(); void FallbackFontConfigCheckEnd(); +bool GtkClipboardSupported(); + } // namespace Platform inline void psCheckLocalSocket(const QString &serverName) {