summaryrefslogtreecommitdiffstats
path: root/src/inkscape.cpp
diff options
context:
space:
mode:
authorJabiertxof <jabier.arraiza@marker.es>2019-08-03 11:04:56 +0000
committerJabiertxof <jabier.arraiza@marker.es>2019-08-03 11:04:56 +0000
commit8188af28103fe5badfcba8635279775f06bebfff (patch)
treea0a3320083188253455b0d7829cad93386cb8bec /src/inkscape.cpp
parentInitial code (diff)
downloadinkscape-8188af28103fe5badfcba8635279775f06bebfff.tar.gz
inkscape-8188af28103fe5badfcba8635279775f06bebfff.zip
Add custom GTK3 themes inside Inkscape
Diffstat (limited to 'src/inkscape.cpp')
-rw-r--r--src/inkscape.cpp90
1 files changed, 64 insertions, 26 deletions
diff --git a/src/inkscape.cpp b/src/inkscape.cpp
index 2164a90a2..71ed178b7 100644
--- a/src/inkscape.cpp
+++ b/src/inkscape.cpp
@@ -541,6 +541,64 @@ Glib::ustring Application::get_symbolic_colors()
/**
* \brief Add our CSS style sheets
*/
+void Application::add_inkscape_css()
+{
+ using namespace Inkscape::IO::Resource;
+ auto const screen = Gdk::Screen::get_default();
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ if (!customcssprovider) {
+ customcssprovider = Gtk::CssProvider::create();
+ } else {
+ Gtk::StyleContext::remove_provider_for_screen(screen, customcssprovider);
+ }
+ Glib::ustring customthemename = prefs->getString("/theme/gtkTheme");
+ if (customthemename.find("inkscapecustom::") != -1) {
+ customthemename = customthemename.substr(16);
+ Glib::ustring style = customthemename + "/gtk-3.0/gtk.css";
+ bool dark = prefs->getBool("/theme/preferDarkTheme", false) || customthemename.find(":dark") != -1;
+ if (dark) {
+ style = customthemename + "/gtk-3.0/gtk-dark.css";
+ }
+ style = get_filename(THEMES, style.c_str());
+ if (!style.empty()) {
+ try {
+ customcssprovider->load_from_path(style);
+ } catch (const Gtk::CssProviderError &ex) {
+ g_critical("CSSProviderError::load_from_path(): failed to load '%s'\n(%s)", style.c_str(),
+ ex.what().c_str());
+ }
+ Gtk::StyleContext::add_provider_for_screen(screen, customcssprovider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ }
+ }
+ Glib::ustring style = get_filename(UIS, "style.css");
+ if (!style.empty()) {
+ auto provider = Gtk::CssProvider::create();
+ try {
+ provider->load_from_path(style);
+ } catch (const Gtk::CssProviderError &ex) {
+ g_critical("CSSProviderError::load_from_path(): failed to load '%s'\n(%s)", style.c_str(),
+ ex.what().c_str());
+ }
+ Gtk::StyleContext::add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ }
+ if (!colorizeprovider) {
+ colorizeprovider = Gtk::CssProvider::create();
+ }
+ Glib::ustring css_str = "";
+ if (prefs->getBool("/theme/symbolicIcons", false)) {
+ css_str = get_symbolic_colors();
+ }
+ try {
+ colorizeprovider->load_from_data(css_str);
+ } catch (const Gtk::CssProviderError &ex) {
+ g_critical("CSSProviderError::load_from_data(): failed to load '%s'\n(%s)", css_str.c_str(), ex.what().c_str());
+ }
+ Gtk::StyleContext::add_provider_for_screen(screen, colorizeprovider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+}
+
+/**
+ * \brief Add our CSS style sheets
+ */
void Application::add_gtk_css()
{
using namespace Inkscape::IO::Resource;
@@ -563,6 +621,10 @@ void Application::add_gtk_css()
prefs->setString("/theme/defaultIconTheme", Glib::ustring(gtkIconThemeName));
Glib::ustring gtkthemename = prefs->getString("/theme/gtkTheme");
if (gtkthemename != "") {
+ if (gtkthemename.find("inkscapecustom::") != -1) {
+ //we use adwaita as base of all custom CSS, seems more standar than user default theme than can make unwanted results
+ gtkthemename = "Adwaita";
+ }
g_object_set(settings, "gtk-theme-name", gtkthemename.c_str(), NULL);
} else {
prefs->setString("/theme/gtkTheme", Glib::ustring(gtkThemeName));
@@ -575,33 +637,9 @@ void Application::add_gtk_css()
}
g_object_get(settings, "gtk-font-name", &gtk_font_name, NULL);
}
-
-
- Glib::ustring style = get_filename(UIS, "style.css");
- if (!style.empty()) {
- auto provider = Gtk::CssProvider::create();
- try {
- provider->load_from_path(style);
- } catch (const Gtk::CssProviderError &ex) {
- g_critical("CSSProviderError::load_from_path(): failed to load '%s'\n(%s)", style.c_str(),
- ex.what().c_str());
- }
- Gtk::StyleContext::add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
- }
- if (!colorizeprovider) {
- colorizeprovider = Gtk::CssProvider::create();
- }
+ add_inkscape_css();
+
Glib::ustring css_str = "";
- if (prefs->getBool("/theme/symbolicIcons", false)) {
- css_str = get_symbolic_colors();
- }
- try {
- colorizeprovider->load_from_data(css_str);
- } catch (const Gtk::CssProviderError &ex) {
- g_critical("CSSProviderError::load_from_data(): failed to load '%s'\n(%s)", css_str.c_str(), ex.what().c_str());
- }
- Gtk::StyleContext::add_provider_for_screen(screen, colorizeprovider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-
if (!strncmp(gtk_font_name, "Cantarell", 9)) {
auto provider = Gtk::CssProvider::create();
css_str = "#monoStrokeWidth,";