diff --git a/kcms/krdb/krdb.cpp b/kcms/krdb/krdb.cpp --- a/kcms/krdb/krdb.cpp +++ b/kcms/krdb/krdb.cpp @@ -38,6 +38,7 @@ #include #include +#include #include #include #include @@ -402,6 +403,11 @@ // ----------------------------------------------------------------------------- +QString gtkColorsHelper(const QString &name, const QString &color) +{ + return QStringLiteral("@define-color %1 %2;\n").arg(name, color); +} + void runRdb( uint flags ) { // Obtain the application palette that is about to be set. @@ -473,6 +479,101 @@ for (QStringList::ConstIterator it = list.constBegin(); it != list.constEnd(); ++it) copyFile(tmpFile, QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kdisplay/app-defaults/"+(*it)), true); + + QFile gtkCss(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/gtk-3.0/gtk.css"); + QFile colorsCss(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/gtk-3.0/colors.css"); + + if (gtkCss.open(QIODevice::ReadWrite)) { + QTextStream gtkStream(>kCss); + bool hasImport = false; + while (!gtkStream.atEnd()) { + QString line = gtkStream.readLine(); + if (line.contains("@import 'colors.css';")) { + hasImport = true; + } + } + if (!hasImport) { + gtkStream << "@import 'colors.css';"; + } + } + if (colorsCss.open(QIODevice::WriteOnly | QIODevice::Truncate)) { + QTextStream colorsStream(&colorsCss); + /* + 0 Active View + 1 Active Window + 2 Active Button + 3 Active Selection + 4 Active Tooltip + 5 Active Complimentary + */ + const QList activeColorSchemes{ + KColorScheme(QPalette::Active, KColorScheme::View), + KColorScheme(QPalette::Active, KColorScheme::Window), + KColorScheme(QPalette::Active, KColorScheme::Button), + KColorScheme(QPalette::Active, KColorScheme::Selection), + KColorScheme(QPalette::Active, KColorScheme::Tooltip), + KColorScheme(QPalette::Active, KColorScheme::Complementary) + }; + + /* + Normal (Non Backdrop, Non Insensitive) + */ + + // General Colors + + colorsStream << gtkColorsHelper("theme_fg_color", activeColorSchemes[1].foreground(KColorScheme::NormalText).color().name()); + colorsStream << gtkColorsHelper("theme_bg_color", activeColorSchemes[1].background(KColorScheme::NormalBackground).color().name()); + colorsStream << gtkColorsHelper("theme_text_color", activeColorSchemes[0].foreground(KColorScheme::NormalText).color().name()); + colorsStream << gtkColorsHelper("theme_base_color", activeColorSchemes[0].background(KColorScheme::NormalBackground).color().name()); + colorsStream << gtkColorsHelper("theme_view_hover_decoration_color", activeColorSchemes[0].decoration(KColorScheme::HoverColor).color().name()); + colorsStream << gtkColorsHelper("theme_hovering_selected_bg_color", activeColorSchemes[3].decoration(KColorScheme::HoverColor).color().name()); + colorsStream << gtkColorsHelper("theme_selected_bg_color", activeColorSchemes[3].background(KColorScheme::NormalBackground).color().name()); + colorsStream << gtkColorsHelper("theme_selected_fg_color", activeColorSchemes[3].foreground(KColorScheme::NormalText).color().name()); + colorsStream << gtkColorsHelper("theme_view_active_decoration_color", activeColorSchemes[0].decoration(KColorScheme::HoverColor).color().name()); + + // Button Colors + colorsStream << gtkColorsHelper("theme_button_background_normal", activeColorSchemes[2].background(KColorScheme::NormalBackground).color().name()); + colorsStream << gtkColorsHelper("theme_button_decoration_hover", activeColorSchemes[2].decoration(KColorScheme::HoverColor).color().name()); + colorsStream << gtkColorsHelper("theme_button_decoration_focus", activeColorSchemes[2].decoration(KColorScheme::FocusColor).color().name()); + colorsStream << gtkColorsHelper("theme_button_foreground_normal", activeColorSchemes[2].foreground(KColorScheme::NormalText).color().name()); + colorsStream << gtkColorsHelper("theme_button_foreground_active", activeColorSchemes[3].foreground(KColorScheme::NormalText).color().name()); + + // Misc Colors + QColor windowForegroundColor = activeColorSchemes[1].foreground(KColorScheme::NormalText).color(); + QColor windowBackgroundColor = activeColorSchemes[1].background(KColorScheme::NormalBackground).color(); + QColor bordersColor = KColorUtils::mix(windowBackgroundColor,windowForegroundColor, 0.25); + + colorsStream << gtkColorsHelper("borders", bordersColor.name()); + colorsStream << gtkColorsHelper("warning_color", activeColorSchemes[0].foreground(KColorScheme::NeutralText).color().name()); + colorsStream << gtkColorsHelper("success_color", activeColorSchemes[0].foreground(KColorScheme::PositiveText).color().name()); + colorsStream << gtkColorsHelper("error_color", activeColorSchemes[0].foreground(KColorScheme::NegativeText).color().name()); + + /* + Ignorant Colors (These colors do not care about backdrop or insensitive states) + */ + + colorsStream << gtkColorsHelper("link_color", activeColorSchemes[0].foreground(KColorScheme::LinkText).color().name()); + colorsStream << gtkColorsHelper("link_visited_color", activeColorSchemes[0].foreground(KColorScheme::VisitedText).color().name()); + + QColor tooltipForegroundColor = activeColorSchemes[4].foreground(KColorScheme::NormalText).color(); + QColor tooltipBackgroundColor = activeColorSchemes[4].background(KColorScheme::NormalBackground).color(); + QColor tooltipBorderColor = KColorUtils::mix(tooltipBackgroundColor, tooltipForegroundColor, 0.25); + + colorsStream << gtkColorsHelper("tooltip_text", tooltipForegroundColor.name()); + colorsStream << gtkColorsHelper("tooltip_background", tooltipBackgroundColor.name()); + colorsStream << gtkColorsHelper("tooltip_border", tooltipBorderColor.name()); + + colorsStream << gtkColorsHelper("content_view_bg", activeColorSchemes[0].background(KColorScheme::NormalBackground).color().name()); + + /* + Theme titlebar colors + */ + colorsStream << gtkColorsHelper("theme_titlebar_background", "rgb(" + g.readEntry("activeBackground", "") + ")"); + colorsStream << gtkColorsHelper("theme_titlebar_foreground", "rgb(" + g.readEntry("activeForeground", "") + ")"); + colorsStream << gtkColorsHelper("theme_titlebar_background_light", activeColorSchemes[1].background(KColorScheme::NormalBackground).color().name()); + colorsStream << gtkColorsHelper("theme_titlebar_foreground_backdrop", "rgb(" + g.readEntry("inactiveForeground", "") + ")"); + colorsStream << gtkColorsHelper("theme_titlebar_background_backdrop", "rgb(" + g.readEntry("inactiveBackground", "") + ")"); + } } // Merge ~/.Xresources or fallback to ~/.Xdefaults