diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-11-17 14:21:59 -0600 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-11-17 14:21:59 -0600 |
commit | 381fd1dcdfc205283428ebba6b3bf38324a93ca5 (patch) | |
tree | fc811900ff3619290b1bcb7145cf6391776971be /kcm_gtk/kcmgtk.cpp | |
parent | a862630a8353b47d09c8a109051c5f194799f905 (diff) | |
download | gtk-qt-engine-381fd1dcdfc205283428ebba6b3bf38324a93ca5.tar.gz gtk-qt-engine-381fd1dcdfc205283428ebba6b3bf38324a93ca5.zip |
Add GTK3 theme configuration support
Diffstat (limited to 'kcm_gtk/kcmgtk.cpp')
-rw-r--r-- | kcm_gtk/kcmgtk.cpp | 96 |
1 files changed, 91 insertions, 5 deletions
diff --git a/kcm_gtk/kcmgtk.cpp b/kcm_gtk/kcmgtk.cpp index 328d286..c577306 100644 --- a/kcm_gtk/kcmgtk.cpp +++ b/kcm_gtk/kcmgtk.cpp @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include <tqlayout.h> @@ -60,6 +60,9 @@ const TQString KcmGtk::GTK_RC_FILE(".gtkrc-2.0-kde-kde4"); const TQString KcmGtk::KDE_RC_DIR(KGlobal::dirs()->localtdedir() + "/env/"); const TQString KcmGtk::GTK_TQT_RC_FILE("gtk-qt-engine.rc.sh"); +const TQString KcmGtk::GTK3_INI_DIR(TQDir::homeDirPath() + "/.config/gtk-3.0/"); +const TQString KcmGtk::GTK3_INI_FILE("settings.ini"); + /*typedef KGenericFactory<KcmGtk, TQWidget> KcmGtkFactory; K_EXPORT_COMPONENT_FACTORY( kcm_gtk, KcmGtkFactory("gtk"))*/ @@ -183,6 +186,7 @@ KcmGtk::KcmGtk(TQWidget *parent, const char *name, const TQStringList&) // Load the icons KIconLoader iconLoader; widget->styleIcon->setPixmap(iconLoader.loadIcon("style", KIcon::Desktop)); + widget->styleIcon3->setPixmap(iconLoader.loadIcon("style", KIcon::Desktop)); widget->fontIcon->setPixmap(iconLoader.loadIcon("fonts", KIcon::Desktop)); widget->firefoxIcon->setPixmap(iconLoader.loadIcon("firefox", KIcon::Desktop)); widget->keyboardIcon->setPixmap(iconLoader.loadIcon("keyboard", KIcon::Desktop)); @@ -193,14 +197,19 @@ KcmGtk::KcmGtk(TQWidget *parent, const char *name, const TQStringList&) // Connect some signals connect(widget->warning2, TQT_SIGNAL(leftClickedURL(const TQString&)), KApplication::kApplication(), TQT_SLOT(invokeBrowser(const TQString&))); connect(widget->styleGroup, TQT_SIGNAL(clicked(int)), TQT_SLOT(itemChanged())); + connect(widget->warning5, TQT_SIGNAL(leftClickedURL(const TQString&)), KApplication::kApplication(), TQT_SLOT(invokeBrowser(const TQString&))); + connect(widget->styleGroup3, TQT_SIGNAL(clicked(int)), TQT_SLOT(itemChanged())); connect(widget->fontGroup, TQT_SIGNAL(clicked(int)), TQT_SLOT(itemChanged())); connect(widget->styleBox, TQT_SIGNAL(activated(int)), TQT_SLOT(itemChanged())); connect(widget->styleBox, TQT_SIGNAL(activated(int)), TQT_SLOT(styleChanged())); + connect(widget->styleBox3, TQT_SIGNAL(activated(int)), TQT_SLOT(itemChanged())); + connect(widget->styleBox3, TQT_SIGNAL(activated(int)), TQT_SLOT(styleChanged())); connect(widget->emacsBox, TQT_SIGNAL(toggled(bool)), TQT_SLOT(itemChanged())); connect(widget->fontChange, TQT_SIGNAL(clicked()), TQT_SLOT(fontChangeClicked())); connect(widget->firefoxFix, TQT_SIGNAL(clicked()), TQT_SLOT(firefoxFixClicked())); connect(widget->emacsDetails, TQT_SIGNAL(clicked()), TQT_SLOT(emacsDetailsClicked())); connect(widget->warning3, TQT_SIGNAL(clicked()), TQT_SLOT(searchPathsClicked())); + connect(widget->warning6, TQT_SIGNAL(clicked()), TQT_SLOT(searchPathsClicked())); } void KcmGtk::getInstalledThemes() @@ -224,13 +233,44 @@ void KcmGtk::getInstalledThemes() } widget->styleBox->clear(); - widget->styleBox->insertStringList(themes.keys()); + TQStringList otherStyles = themes.keys(); + otherStyles.remove(otherStyles.find("Qt")); + widget->styleBox->insertStringList(otherStyles); bool installed = (themes.find("Qt") != themes.end()); widget->styleKde->setEnabled(installed); widget->warning1->setHidden(installed); widget->warning2->setHidden(installed); widget->warning3->setHidden(installed); + + gtk3Themes.clear(); + for ( TQStringList::Iterator it = gtkSearchPaths.begin(); it != gtkSearchPaths.end(); ++it ) + { + TQString path = (*it) + "/share/themes/"; + TQDir dir(path); + TQStringList entryList = dir.entryList(TQDir::Dirs, TQDir::Unsorted); + for ( TQStringList::Iterator it2 = entryList.begin(); it2 != entryList.end(); ++it2 ) + { + if ((*it2).startsWith(".")) + continue; + if (gtk3Themes.find(*it2) != gtk3Themes.end()) + continue; + if (!TQFile::exists(path + (*it2) + "/gtk-3.0/gtk.css")) + continue; + gtk3Themes.insert((*it2), path + (*it2) + "/gtk-3.0/gtk.css"); + } + } + + widget->styleBox3->clear(); + TQStringList otherGtk3Styles = gtk3Themes.keys(); + otherGtk3Styles.remove(otherGtk3Styles.find("tdegtk")); + widget->styleBox3->insertStringList(otherGtk3Styles); + + bool gtk3installed = (gtk3Themes.find("tdegtk") != gtk3Themes.end()); + widget->styleKde3->setEnabled(gtk3installed); + widget->warning4->setHidden(gtk3installed); + widget->warning5->setHidden(gtk3installed); + widget->warning6->setHidden(gtk3installed); } void KcmGtk::itemChanged() @@ -306,10 +346,12 @@ void KcmGtk::load() break; } - if (usingQtEngine) + if (usingQtEngine) { widget->styleGroup->setButton(widget->styleGroup->id(widget->styleKde)); - else + } + else { widget->styleGroup->setButton(widget->styleGroup->id(widget->styleOther)); + } } font = parser.font; @@ -324,6 +366,30 @@ void KcmGtk::load() widget->emacsBox->setChecked(parser.emacs); updateFontPreview(); + + bool usingGtk3TQtEngine = false; + if (TQFile::exists(GTK3_INI_DIR + GTK3_INI_FILE)) { + TQString activeGtk3Style; + KConfig gtk3Config(GTK3_INI_DIR + GTK3_INI_FILE); + gtk3Config.setGroup("Settings"); + activeGtk3Style = gtk3Config.readEntry("gtk-theme-name"); + if (activeGtk3Style == "tdegtk") { + usingGtk3TQtEngine = true; + } + + if (usingGtk3TQtEngine) { + widget->styleGroup3->setButton(widget->styleGroup3->id(widget->styleKde3)); + } + else { + widget->styleGroup3->setButton(widget->styleGroup3->id(widget->styleOther3)); + for (int i=0; i<widget->styleBox3->count(); ++i) { + if (widget->styleBox3->text(i) == activeGtk3Style) { + widget->styleBox3->setCurrentItem(i); + break; + } + } + } + } } @@ -342,6 +408,9 @@ void KcmGtk::save() TQString themeName = widget->styleKde->isChecked() ? themes["Qt"] : themes[widget->styleBox->currentText()]; TQString themeNameShort = widget->styleKde->isChecked() ? TQString("Qt") : widget->styleBox->currentText(); + + TQString themeName3 = widget->styleKde3->isChecked() ? gtk3Themes["tdegtk"] : gtk3Themes[widget->styleBox3->currentText()]; + TQString themeNameShort3 = widget->styleKde3->isChecked() ? TQString("tdegtk") : widget->styleBox3->currentText(); stream << "# This file was written by TDE\n"; stream << "# You can edit it in the TDE control center, under \"GTK Styles and Fonts\"\n"; @@ -438,7 +507,24 @@ void KcmGtk::save() stream << fileDataString; file.close(); } - + + TQDir gtk3IniDir; + if (!gtk3IniDir.exists(GTK3_INI_DIR)) + { + // Make sure the GTK INI dir exists + gtk3IniDir.mkdir(GTK3_INI_DIR); + } + + TQFile gtk3IniFile(GTK3_INI_DIR + GTK3_INI_FILE); + gtk3IniFile.open(IO_WriteOnly); + TQTextStream gtk3IniStream(>k3IniFile); + gtk3IniStream << "# This file was written by TDE\n"; + gtk3IniStream << "# You can edit it in the TDE control center, under \"GTK Styles and Fonts\"\n"; + gtk3IniStream << "\n"; + gtk3IniStream << "[Settings]\n"; + gtk3IniStream << "gtk-theme-name = " << themeNameShort3 << "\n"; + gtk3IniFile.close(); + emit changed(true); } |