diff --git a/qgnomeplatform-upstream-fixes.patch b/qgnomeplatform-upstream-fixes.patch new file mode 100644 index 0000000..e8b0e14 --- /dev/null +++ b/qgnomeplatform-upstream-fixes.patch @@ -0,0 +1,576 @@ +diff --git a/common/common.pro b/common/common.pro +index c244613..99bb9e3 100644 +--- a/common/common.pro ++++ b/common/common.pro +@@ -8,7 +8,6 @@ CONFIG += c++11 \ + QT += core \ + dbus \ + theme_support-private \ +- x11extras \ + widgets + + PKGCONFIG += gtk+-3.0 \ +diff --git a/common/gnomehintssettings.cpp b/common/gnomehintssettings.cpp +index 4cc19b2..8a3b980 100644 +--- a/common/gnomehintssettings.cpp ++++ b/common/gnomehintssettings.cpp +@@ -36,8 +36,6 @@ + #include + #include + +-#include +- + Q_LOGGING_CATEGORY(QGnomePlatform, "qt.qpa.qgnomeplatform") + + const QDBusArgument &operator>>(const QDBusArgument &argument, QMap &map) +@@ -135,7 +133,7 @@ GnomeHintsSettings::GnomeHintsSettings() + QStringLiteral("SettingChanged"), this, SLOT(portalSettingChanged(QString,QString,QDBusVariant))); + } + +- if (!QX11Info::isPlatformX11()) ++ if (QGuiApplication::platformName() != QStringLiteral("xcb")) + cursorSizeChanged(); + + loadFonts(); +@@ -172,7 +170,7 @@ void GnomeHintsSettings::gsettingPropertyChanged(GSettings *settings, gchar *key + } else if (changedProperty == QStringLiteral("monospace-font-name")) { + gnomeHintsSettings->fontChanged(); + } else if (changedProperty == QStringLiteral("cursor-size")) { +- if (!QX11Info::isPlatformX11()) ++ if (QGuiApplication::platformName() != QStringLiteral("xcb")) + gnomeHintsSettings->cursorSizeChanged(); + // Org.gnome.wm.preferences + } else if (changedProperty == QStringLiteral("titlebar-font")) { +@@ -359,7 +357,7 @@ void GnomeHintsSettings::loadFonts() + bool bold = false; + int fontSize; + QString name; +- QRegExp re("(.+)[ \t]+([0-9]+)"); ++ QRegExp re("^([^,]+)[, \t]+([0-9]+)$"); + if (re.indexIn(fontName) == 0) { + fontSize = re.cap(2).toInt(); + name = re.cap(1); +diff --git a/common/gnomehintssettings.h b/common/gnomehintssettings.h +index 46580ff..2bce415 100644 +--- a/common/gnomehintssettings.h ++++ b/common/gnomehintssettings.h +@@ -24,8 +24,10 @@ + #include + #include + #include ++#include + #include + ++#include + #include + + #undef signals +@@ -36,7 +38,6 @@ + + #include + +- + class GnomeHintsSettings : public QObject + { + Q_OBJECT +@@ -56,6 +57,73 @@ public: + explicit GnomeHintsSettings(); + virtual ~GnomeHintsSettings(); + ++ // Borrowed from the KColorUtils code ++ static QColor mix(const QColor &c1, const QColor &c2, qreal bias = 0.5) ++ { ++ auto mixQreal = [](qreal a, qreal b, qreal bias) { ++ return a + (b - a) * bias; ++ }; ++ ++ if (bias <= 0.0) ++ return c1; ++ if (bias >= 1.0) ++ return c2; ++ if (std::isnan(bias)) ++ return c1; ++ ++ qreal r = mixQreal(c1.redF(), c2.redF(), bias); ++ qreal g = mixQreal(c1.greenF(), c2.greenF(), bias); ++ qreal b = mixQreal(c1.blueF(), c2.blueF(), bias); ++ qreal a = mixQreal(c1.alphaF(), c2.alphaF(), bias); ++ ++ return QColor::fromRgbF(r, g, b, a); ++ } ++ ++ static QColor lighten(const QColor &color, qreal amount = 0.1) ++ { ++ qreal h, s, l, a; ++ color.getHslF(&h, &s, &l, &a); ++ ++ qreal lightness = l + amount; ++ if (lightness > 1) ++ lightness = 1; ++ return QColor::fromHslF(h, s, lightness, a); ++ } ++ ++ static QColor darken(const QColor &color, qreal amount = 0.1) ++ { ++ qreal h, s, l, a; ++ color.getHslF(&h, &s, &l, &a); ++ ++ qreal lightness = l - amount; ++ if (lightness < 0) ++ lightness = 0; ++ ++ return QColor::fromHslF(h, s, lightness, a); ++ } ++ ++ static QColor desaturate(const QColor &color, qreal amount = 0.1) ++ { ++ qreal h, s, l, a; ++ color.getHslF(&h, &s, &l, &a); ++ ++ qreal saturation = s - amount; ++ if (saturation < 0) ++ saturation = 0; ++ return QColor::fromHslF(h, saturation, l, a); ++ } ++ ++ static QColor transparentize(const QColor &color, qreal amount = 0.1) ++ { ++ qreal h, s, l, a; ++ color.getHslF(&h, &s, &l, &a); ++ ++ qreal alpha = a - amount; ++ if (alpha < 0) ++ alpha = 0; ++ return QColor::fromHslF(h, s, l, alpha); ++ } ++ + inline QFont * font(QPlatformTheme::Font type) const + { + if (m_fonts.contains(type)) { +@@ -68,6 +136,198 @@ public: + } + } + ++ inline QPalette * palette() const ++ { ++ QPalette *palette = new QPalette; ++ ++ if (m_gtkThemeDarkVariant) { ++ // Colors defined in GTK adwaita style in _colors.scss ++ QColor base_color = lighten(desaturate(QColor("#241f31"), 1.0), 0.02); ++ QColor text_color = QColor("white"); ++ QColor bg_color = darken(desaturate(QColor("#3d3846"), 1.0), 0.04); ++ QColor fg_color = QColor("#eeeeec"); ++ QColor selected_bg_color = darken(QColor("#3584e4"), 0.2); ++ QColor selected_fg_color = QColor("white"); ++ QColor osd_text_color = QColor("white"); ++ QColor osd_bg_color = QColor("black"); ++ QColor shadow = transparentize(QColor("black"), 0.9); ++ ++ QColor backdrop_fg_color = mix(fg_color, bg_color); ++ QColor backdrop_base_color = lighten(base_color, 0.01); ++ QColor backdrop_selected_fg_color = mix(text_color, backdrop_base_color, 0.2); ++ ++ // This is the color we use as initial color for the gradient in normal state ++ // Defined in _drawing.scss button(normal) ++ QColor button_base_color = darken(bg_color, 0.01); ++ ++ QColor link_color = lighten(selected_bg_color, 0.2); ++ QColor link_visited_color = lighten(selected_bg_color, 0.1); ++ ++ palette->setColor(QPalette::All, QPalette::Window, bg_color); ++ palette->setColor(QPalette::All, QPalette::WindowText, fg_color); ++ palette->setColor(QPalette::All, QPalette::Base, base_color); ++ palette->setColor(QPalette::All, QPalette::AlternateBase, base_color); ++ palette->setColor(QPalette::All, QPalette::ToolTipBase, osd_bg_color); ++ palette->setColor(QPalette::All, QPalette::ToolTipText, osd_text_color); ++ palette->setColor(QPalette::All, QPalette::Text, fg_color); ++ palette->setColor(QPalette::All, QPalette::Button, button_base_color); ++ palette->setColor(QPalette::All, QPalette::ButtonText, fg_color); ++ palette->setColor(QPalette::All, QPalette::BrightText, text_color); ++ ++ palette->setColor(QPalette::All, QPalette::Light, lighten(button_base_color)); ++ palette->setColor(QPalette::All, QPalette::Midlight, mix(lighten(button_base_color), button_base_color)); ++ palette->setColor(QPalette::All, QPalette::Mid, mix(darken(button_base_color), button_base_color)); ++ palette->setColor(QPalette::All, QPalette::Dark, darken(button_base_color)); ++ palette->setColor(QPalette::All, QPalette::Shadow, shadow); ++ ++ palette->setColor(QPalette::All, QPalette::Highlight, selected_bg_color); ++ palette->setColor(QPalette::All, QPalette::HighlightedText, selected_fg_color); ++ ++ palette->setColor(QPalette::All, QPalette::Link, link_color); ++ palette->setColor(QPalette::All, QPalette::LinkVisited, link_visited_color); ++ ++ ++ QColor insensitive_fg_color = mix(fg_color, bg_color); ++ QColor insensitive_bg_color = mix(bg_color, base_color, 0.4); ++ ++ palette->setColor(QPalette::Disabled, QPalette::Window, insensitive_bg_color); ++ palette->setColor(QPalette::Disabled, QPalette::WindowText, insensitive_fg_color); ++ palette->setColor(QPalette::Disabled, QPalette::Base, base_color); ++ palette->setColor(QPalette::Disabled, QPalette::AlternateBase, base_color); ++ palette->setColor(QPalette::Disabled, QPalette::Text, insensitive_fg_color); ++ palette->setColor(QPalette::Disabled, QPalette::Button, insensitive_bg_color); ++ palette->setColor(QPalette::Disabled, QPalette::ButtonText, insensitive_fg_color); ++ palette->setColor(QPalette::Disabled, QPalette::BrightText, text_color); ++ ++ palette->setColor(QPalette::Disabled, QPalette::Light, lighten(insensitive_bg_color)); ++ palette->setColor(QPalette::Disabled, QPalette::Midlight, mix(lighten(insensitive_bg_color), insensitive_bg_color)); ++ palette->setColor(QPalette::Disabled, QPalette::Mid, mix(darken(insensitive_bg_color), insensitive_bg_color)); ++ palette->setColor(QPalette::Disabled, QPalette::Dark, darken(insensitive_bg_color)); ++ palette->setColor(QPalette::Disabled, QPalette::Shadow, shadow); ++ ++ palette->setColor(QPalette::Disabled, QPalette::Highlight, selected_bg_color); ++ palette->setColor(QPalette::Disabled, QPalette::HighlightedText, selected_fg_color); ++ ++ palette->setColor(QPalette::Disabled, QPalette::Link, link_color); ++ palette->setColor(QPalette::Disabled, QPalette::LinkVisited, link_visited_color); ++ ++ ++ palette->setColor(QPalette::Inactive, QPalette::Window, bg_color); ++ palette->setColor(QPalette::Inactive, QPalette::WindowText, backdrop_fg_color); ++ palette->setColor(QPalette::Inactive, QPalette::Base, backdrop_base_color); ++ palette->setColor(QPalette::Inactive, QPalette::AlternateBase, backdrop_base_color); ++ palette->setColor(QPalette::Inactive, QPalette::Text, backdrop_fg_color); ++ palette->setColor(QPalette::Inactive, QPalette::Button, button_base_color); ++ palette->setColor(QPalette::Inactive, QPalette::ButtonText, backdrop_fg_color); ++ palette->setColor(QPalette::Inactive, QPalette::BrightText, text_color); ++ ++ palette->setColor(QPalette::Inactive, QPalette::Light, lighten(insensitive_bg_color)); ++ palette->setColor(QPalette::Inactive, QPalette::Midlight, mix(lighten(insensitive_bg_color), insensitive_bg_color)); ++ palette->setColor(QPalette::Inactive, QPalette::Mid, mix(darken(insensitive_bg_color), insensitive_bg_color)); ++ palette->setColor(QPalette::Inactive, QPalette::Dark, darken(insensitive_bg_color)); ++ palette->setColor(QPalette::Inactive, QPalette::Shadow, shadow); ++ ++ palette->setColor(QPalette::Inactive, QPalette::Highlight, selected_bg_color); ++ palette->setColor(QPalette::Inactive, QPalette::HighlightedText, backdrop_selected_fg_color); ++ ++ palette->setColor(QPalette::Inactive, QPalette::Link, link_color); ++ palette->setColor(QPalette::Inactive, QPalette::LinkVisited, link_visited_color); ++ } else { ++ // Colors defined in GTK adwaita style in _colors.scss ++ QColor base_color = QColor("white"); ++ QColor text_color = QColor("black"); ++ QColor bg_color = QColor("#f6f5f4"); ++ QColor fg_color = QColor("#2e3436"); ++ QColor selected_bg_color = QColor("#3584e4"); ++ QColor selected_fg_color = QColor("white"); ++ QColor osd_text_color = QColor("white"); ++ QColor osd_bg_color = QColor("black"); ++ QColor shadow = transparentize(QColor("black"), 0.9); ++ ++ QColor backdrop_fg_color = mix(fg_color, bg_color); ++ QColor backdrop_base_color = darken(base_color, 0.01); ++ QColor backdrop_selected_fg_color = backdrop_base_color; ++ ++ // This is the color we use as initial color for the gradient in normal state ++ // Defined in _drawing.scss button(normal) ++ QColor button_base_color = darken(bg_color, 0.04); ++ ++ QColor link_color = darken(selected_bg_color, 0.1); ++ QColor link_visited_color = darken(selected_bg_color, 0.2); ++ ++ palette->setColor(QPalette::All, QPalette::Window, bg_color); ++ palette->setColor(QPalette::All, QPalette::WindowText, fg_color); ++ palette->setColor(QPalette::All, QPalette::Base, base_color); ++ palette->setColor(QPalette::All, QPalette::AlternateBase, base_color); ++ palette->setColor(QPalette::All, QPalette::ToolTipBase, osd_bg_color); ++ palette->setColor(QPalette::All, QPalette::ToolTipText, osd_text_color); ++ palette->setColor(QPalette::All, QPalette::Text, fg_color); ++ palette->setColor(QPalette::All, QPalette::Button, button_base_color); ++ palette->setColor(QPalette::All, QPalette::ButtonText, fg_color); ++ palette->setColor(QPalette::All, QPalette::BrightText, text_color); ++ ++ palette->setColor(QPalette::All, QPalette::Light, lighten(button_base_color)); ++ palette->setColor(QPalette::All, QPalette::Midlight, mix(lighten(button_base_color), button_base_color)); ++ palette->setColor(QPalette::All, QPalette::Mid, mix(darken(button_base_color), button_base_color)); ++ palette->setColor(QPalette::All, QPalette::Dark, darken(button_base_color)); ++ palette->setColor(QPalette::All, QPalette::Shadow, shadow); ++ ++ palette->setColor(QPalette::All, QPalette::Highlight, selected_bg_color); ++ palette->setColor(QPalette::All, QPalette::HighlightedText, selected_fg_color); ++ ++ palette->setColor(QPalette::All, QPalette::Link, link_color); ++ palette->setColor(QPalette::All, QPalette::LinkVisited, link_visited_color); ++ ++ QColor insensitive_fg_color = mix(fg_color, bg_color); ++ QColor insensitive_bg_color = mix(bg_color, base_color, 0.4); ++ ++ palette->setColor(QPalette::Disabled, QPalette::Window, insensitive_bg_color); ++ palette->setColor(QPalette::Disabled, QPalette::WindowText, insensitive_fg_color); ++ palette->setColor(QPalette::Disabled, QPalette::Base, base_color); ++ palette->setColor(QPalette::Disabled, QPalette::AlternateBase, base_color); ++ palette->setColor(QPalette::Disabled, QPalette::Text, insensitive_fg_color); ++ palette->setColor(QPalette::Disabled, QPalette::Button, insensitive_bg_color); ++ palette->setColor(QPalette::Disabled, QPalette::ButtonText, insensitive_fg_color); ++ palette->setColor(QPalette::Disabled, QPalette::BrightText, text_color); ++ ++ palette->setColor(QPalette::Disabled, QPalette::Light, lighten(insensitive_bg_color)); ++ palette->setColor(QPalette::Disabled, QPalette::Midlight, mix(lighten(insensitive_bg_color), insensitive_bg_color)); ++ palette->setColor(QPalette::Disabled, QPalette::Mid, mix(darken(insensitive_bg_color), insensitive_bg_color)); ++ palette->setColor(QPalette::Disabled, QPalette::Dark, darken(insensitive_bg_color)); ++ palette->setColor(QPalette::Disabled, QPalette::Shadow, shadow); ++ ++ palette->setColor(QPalette::Disabled, QPalette::Highlight, selected_bg_color); ++ palette->setColor(QPalette::Disabled, QPalette::HighlightedText, selected_fg_color); ++ ++ palette->setColor(QPalette::Disabled, QPalette::Link, link_color); ++ palette->setColor(QPalette::Disabled, QPalette::LinkVisited, link_visited_color); ++ ++ ++ palette->setColor(QPalette::Inactive, QPalette::Window, bg_color); ++ palette->setColor(QPalette::Inactive, QPalette::WindowText, backdrop_fg_color); ++ palette->setColor(QPalette::Inactive, QPalette::Base, backdrop_base_color); ++ palette->setColor(QPalette::Inactive, QPalette::AlternateBase, backdrop_base_color); ++ palette->setColor(QPalette::Inactive, QPalette::Text, backdrop_fg_color); ++ palette->setColor(QPalette::Inactive, QPalette::Button, button_base_color); ++ palette->setColor(QPalette::Inactive, QPalette::ButtonText, backdrop_fg_color); ++ palette->setColor(QPalette::Inactive, QPalette::BrightText, text_color); ++ ++ palette->setColor(QPalette::Inactive, QPalette::Light, lighten(insensitive_bg_color)); ++ palette->setColor(QPalette::Inactive, QPalette::Midlight, mix(lighten(insensitive_bg_color), insensitive_bg_color)); ++ palette->setColor(QPalette::Inactive, QPalette::Mid, mix(darken(insensitive_bg_color), insensitive_bg_color)); ++ palette->setColor(QPalette::Inactive, QPalette::Dark, darken(insensitive_bg_color)); ++ palette->setColor(QPalette::Inactive, QPalette::Shadow, shadow); ++ ++ palette->setColor(QPalette::Inactive, QPalette::Highlight, selected_bg_color); ++ palette->setColor(QPalette::Inactive, QPalette::HighlightedText, backdrop_selected_fg_color); ++ ++ palette->setColor(QPalette::Inactive, QPalette::Link, link_color); ++ palette->setColor(QPalette::Inactive, QPalette::LinkVisited, link_visited_color); ++ } ++ ++ return palette; ++ } ++ + inline bool gtkThemeDarkVariant() const + { + return m_gtkThemeDarkVariant; +diff --git a/common/qgtk3dialoghelpers.cpp b/common/qgtk3dialoghelpers.cpp +index f4bf372..a33d0d1 100644 +--- a/common/qgtk3dialoghelpers.cpp ++++ b/common/qgtk3dialoghelpers.cpp +@@ -87,24 +87,18 @@ Q_SIGNALS: + + protected: + static void onResponse(QGtk3Dialog *dialog, int response); +- static void onUpdatePreview(QGtk3Dialog *dialog); + + private slots: + void onParentWindowDestroyed(); + + private: + GtkWidget *gtkWidget; +- GtkWidget *previewWidget; + }; + + QGtk3Dialog::QGtk3Dialog(GtkWidget *gtkWidget) : gtkWidget(gtkWidget) + { + g_signal_connect_swapped(G_OBJECT(gtkWidget), "response", G_CALLBACK(onResponse), this); + g_signal_connect(G_OBJECT(gtkWidget), "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL); +- +- previewWidget = gtk_image_new(); +- g_signal_connect_swapped(G_OBJECT(gtkWidget), "update-preview", G_CALLBACK(onUpdatePreview), this); +- gtk_file_chooser_set_preview_widget(GTK_FILE_CHOOSER(gtkWidget), previewWidget); + } + + QGtk3Dialog::~QGtk3Dialog() +@@ -180,32 +174,6 @@ void QGtk3Dialog::onResponse(QGtk3Dialog *dialog, int response) + emit dialog->reject(); + } + +-void QGtk3Dialog::onUpdatePreview(QGtk3Dialog *dialog) { +- gchar *filename = gtk_file_chooser_get_preview_filename(GTK_FILE_CHOOSER(dialog->gtkWidget)); +- if (!filename) { +- gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(dialog->gtkWidget), false); +- return; +- } +- +- // Don't attempt to open anything which isn't a regular file. If a named pipe, +- // this may hang. See https://crbug.com/534754. +- QFileInfo fileinfo(filename); +- if (!fileinfo.exists() || !fileinfo.isFile()) { +- g_free(filename); +- gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(dialog->gtkWidget), false); +- return; +- } +- +- // This will preserve the image's aspect ratio. +- GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file_at_size(filename, PREVIEW_WIDTH, PREVIEW_HEIGHT, 0); +- g_free(filename); +- if (pixbuf) { +- gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->previewWidget), pixbuf); +- g_object_unref(pixbuf); +- } +- gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(dialog->gtkWidget), pixbuf ? true : false); +-} +- + void QGtk3Dialog::onParentWindowDestroyed() + { + // The QGtk3*DialogHelper classes own this object. Make sure the parent doesn't delete it. +@@ -293,12 +261,21 @@ QGtk3FileDialogHelper::QGtk3FileDialogHelper() + + g_signal_connect(GTK_FILE_CHOOSER(d->gtkDialog()), "selection-changed", G_CALLBACK(onSelectionChanged), this); + g_signal_connect_swapped(GTK_FILE_CHOOSER(d->gtkDialog()), "current-folder-changed", G_CALLBACK(onCurrentFolderChanged), this); ++ ++ previewWidget = gtk_image_new(); ++ g_signal_connect(G_OBJECT(d->gtkDialog()), "update-preview", G_CALLBACK(onUpdatePreview), this); ++ gtk_file_chooser_set_preview_widget(GTK_FILE_CHOOSER(d->gtkDialog()), previewWidget); + } + + QGtk3FileDialogHelper::~QGtk3FileDialogHelper() + { + } + ++GtkImage *QGtk3FileDialogHelper::previewImage() const ++{ ++ return GTK_IMAGE(previewWidget); ++} ++ + bool QGtk3FileDialogHelper::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) + { + _dir.clear(); +@@ -435,6 +412,33 @@ void QGtk3FileDialogHelper::onCurrentFolderChanged(QGtk3FileDialogHelper *dialog + emit dialog->directoryEntered(dialog->directory()); + } + ++void QGtk3FileDialogHelper::onUpdatePreview(GtkDialog *gtkDialog, QGtk3FileDialogHelper *helper) ++{ ++ gchar *filename = gtk_file_chooser_get_preview_filename(GTK_FILE_CHOOSER(gtkDialog)); ++ if (!filename) { ++ gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(gtkDialog), false); ++ return; ++ } ++ ++ // Don't attempt to open anything which isn't a regular file. If a named pipe, ++ // this may hang. See https://crbug.com/534754. ++ QFileInfo fileinfo(filename); ++ if (!fileinfo.exists() || !fileinfo.isFile()) { ++ g_free(filename); ++ gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(gtkDialog), false); ++ return; ++ } ++ ++ // This will preserve the image's aspect ratio. ++ GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file_at_size(filename, PREVIEW_WIDTH, PREVIEW_HEIGHT, 0); ++ g_free(filename); ++ if (pixbuf) { ++ gtk_image_set_from_pixbuf(helper->previewImage(), pixbuf); ++ g_object_unref(pixbuf); ++ } ++ gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(gtkDialog), pixbuf ? true : false); ++} ++ + static GtkFileChooserAction gtkFileChooserAction(const QSharedPointer &options) + { + switch (options->fileMode()) { +diff --git a/common/qgtk3dialoghelpers.h b/common/qgtk3dialoghelpers.h +index c852fd0..d483a64 100644 +--- a/common/qgtk3dialoghelpers.h ++++ b/common/qgtk3dialoghelpers.h +@@ -47,6 +47,8 @@ + #include + #include + ++typedef struct _GtkWidget GtkWidget; ++typedef struct _GtkImage GtkImage; + typedef struct _GtkDialog GtkDialog; + typedef struct _GtkFileFilter GtkFileFilter; + +@@ -88,6 +90,8 @@ public: + QGtk3FileDialogHelper(); + ~QGtk3FileDialogHelper(); + ++ GtkImage *previewImage() const; ++ + bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) Q_DECL_OVERRIDE; + void exec() Q_DECL_OVERRIDE; + void hide() Q_DECL_OVERRIDE; +@@ -107,6 +111,7 @@ private Q_SLOTS: + private: + static void onSelectionChanged(GtkDialog *dialog, QGtk3FileDialogHelper *helper); + static void onCurrentFolderChanged(QGtk3FileDialogHelper *helper); ++ static void onUpdatePreview(GtkDialog *dialog, QGtk3FileDialogHelper *helper); + void applyOptions(); + void setNameFilters(const QStringList &filters); + +@@ -115,6 +120,7 @@ private: + QHash _filters; + QHash _filterNames; + QScopedPointer d; ++ GtkWidget *previewWidget; + }; + + class QGtk3FontDialogHelper : public QPlatformFontDialogHelper +diff --git a/decoration/decoration.pro b/decoration/decoration.pro +index 8f7f039..6c3bb05 100644 +--- a/decoration/decoration.pro ++++ b/decoration/decoration.pro +@@ -12,8 +12,7 @@ CONFIG += plugin \ + QT += core \ + gui \ + waylandclient-private \ +- widgets \ +- x11extras ++ widgets + + LIBS += -lcommon + +diff --git a/decoration/qgnomeplatformdecoration.cpp b/decoration/qgnomeplatformdecoration.cpp +index 61c2af9..c8b381c 100644 +--- a/decoration/qgnomeplatformdecoration.cpp ++++ b/decoration/qgnomeplatformdecoration.cpp +@@ -46,6 +46,7 @@ + #include + #include + #include ++#include + #include + #include + +diff --git a/theme/qgnomeplatformtheme.cpp b/theme/qgnomeplatformtheme.cpp +index 70dbf65..3394b3d 100644 +--- a/theme/qgnomeplatformtheme.cpp ++++ b/theme/qgnomeplatformtheme.cpp +@@ -23,8 +23,8 @@ + #include "qgtk3dialoghelpers.h" + + #include ++#include + #include +-#include + + #if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON) + #include +@@ -32,7 +32,7 @@ + + QGnomePlatformTheme::QGnomePlatformTheme() + { +- if (!QX11Info::isPlatformX11()) { ++ if (QGuiApplication::platformName() != QStringLiteral("xcb")) { + if (!qEnvironmentVariableIsSet("QT_WAYLAND_DECORATION")) + qputenv("QT_WAYLAND_DECORATION", "gnome"); + } +@@ -68,7 +68,9 @@ const QFont *QGnomePlatformTheme::font(Font type) const + + const QPalette *QGnomePlatformTheme::palette(Palette type) const + { +- return QPlatformTheme::palette(type); ++ Q_UNUSED(type); ++ ++ return m_hints->palette(); + } + + bool QGnomePlatformTheme::usePlatformNativeDialog(QPlatformTheme::DialogType type) const +diff --git a/theme/theme.pro b/theme/theme.pro +index a33d3af..8a1cba7 100644 +--- a/theme/theme.pro ++++ b/theme/theme.pro +@@ -13,7 +13,6 @@ QT += core-private \ + dbus \ + gui-private \ + theme_support-private \ +- x11extras \ + widgets + + LIBS += -lcommon diff --git a/qgnomeplatform.spec b/qgnomeplatform.spec index 348ae20..9502020 100644 --- a/qgnomeplatform.spec +++ b/qgnomeplatform.spec @@ -9,6 +9,7 @@ URL: https://github.com/MartinBriza/QGnomePlatform Source0: https://github.com/MartinBriza/QGnomePlatform/archive/%{version}/QGnomePlatform-%{version}.tar.gz # Upstream patches +Patch0: qgnomeplatform-upstream-fixes.patch BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(udev)