Hack to make the subsurface work on Gnome3 shell

The Gtk+ style on the Gnome shell is somewhat broken on Qt for
some reason. This hack pokes the system, checks if it's running
gnome-shell, and if the current style is gtk+ ( I couldn't just
check for gtk+ since it worked on XFCE and other Gtk based enviro
ments. so a double check is needed. ) then I changed the Pallete
of the affected widgets by hand.
not a pretty hack but worked.

[Dirk Hohndel: redid the patch to be simpler and more consistent]

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Tomaz Canabrava 2013-09-27 12:52:01 -03:00 committed by Dirk Hohndel
parent d629321799
commit e81bbc1dab
5 changed files with 43 additions and 5 deletions

View file

@ -93,11 +93,6 @@ void init_ui(int *argcp, char ***argvp)
// note: on Linux, "system" == "environment variables"
QNetworkProxyFactory::setUseSystemConfiguration(true);
// the Gtk theme makes things unbearably ugly
// so switch to Oxygen in this case
if (application->style()->objectName() == "gtk+")
application->setStyle("Oxygen");
#if QT_VERSION < 0x050000
// ask QString in Qt 4 to interpret all char* as UTF-8,
// like Qt 5 does.

View file

@ -96,6 +96,17 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
setMinimumHeight(0);
setMinimumWidth(0);
// Current display of things on Gnome3 looks like shit, so
// let`s fix that.
if (isGnome3Session()) {
QPalette p;
p.setColor(QPalette::Window, QColor(Qt::white));
ui->scrollArea->viewport()->setPalette(p);
ui->scrollArea_2->viewport()->setPalette(p);
ui->scrollArea_3->viewport()->setPalette(p);
ui->scrollArea_4->viewport()->setPalette(p);
}
}
void MainTab::addDiveStarted()

View file

@ -4,6 +4,7 @@
#include "starwidget.h"
#include "models.h"
#include "diveplanner.h"
#include "simplewidgets.h"
#include <QtDebug>
#include <QPainter>
@ -16,6 +17,7 @@
#include <QKeyEvent>
#include <QAbstractItemView>
#include <QStringListModel>
#include <QApplication>
// Gets the index of the model in the currentRow and column.
// currCombo is defined below.
@ -100,6 +102,16 @@ QWidget* ComboBoxDelegate::createEditor(QWidget* parent, const QStyleOptionViewI
currCombo.comboEditor = comboDelegate;
currCombo.currRow = index.row();
currCombo.model = const_cast<QAbstractItemModel*>(index.model());
// Current display of things on Gnome3 looks like shit, so
// let`s fix that.
if (isGnome3Session()) {
QPalette p;
p.setColor(QPalette::Window, QColor(Qt::white));
p.setColor(QPalette::Base, QColor(Qt::white));
comboDelegate->lineEdit()->setPalette(p);
comboDelegate->setPalette(p);
}
return comboDelegate;
}

View file

@ -8,6 +8,9 @@
#include <QSpinBox>
#include <QButtonGroup>
#include <QDebug>
#include <QProcess>
#include <QStringList>
#include <QDebug>
#include "../dive.h"
@ -118,3 +121,18 @@ RenumberDialog::RenumberDialog(): QDialog(), ui( new Ui::RenumberDialog())
ui->setupUi(this);
connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(buttonClicked(QAbstractButton*)));
}
bool isGnome3Session()
{
#if defined(QT_OS_WIW) || defined(QT_OS_MAC)
return false;
#else
if (qApp->style()->objectName() != "gtk+")
return false;
QProcess p;
p.start("pidof", QStringList() << "gnome-shell" );
p.waitForFinished(-1);
QString p_stdout = p.readAllStandardOutput();
return !p_stdout.isEmpty();
#endif
}

View file

@ -43,4 +43,6 @@ private:
Ui::RenumberDialog *ui;
};
bool isGnome3Session();
#endif