summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2019-06-25 13:54:22 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2019-07-08 21:04:16 +0000
commit3b3407821d119426c8029033974c582b680ad4cd (patch)
treea539764bde0433fcd50bc99abecf3d4ee0ceffa9 /src
parentImprove scrool on selectors (diff)
downloadinkscape-3b3407821d119426c8029033974c582b680ad4cd.tar.gz
inkscape-3b3407821d119426c8029033974c582b680ad4cd.zip
fix issue on theme change
Diffstat (limited to 'src')
-rw-r--r--src/inkscape.cpp2
-rw-r--r--src/ui/dialog/dialog.cpp17
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp52
-rw-r--r--src/ui/dialog/inkscape-preferences.h3
-rw-r--r--src/ui/widget/color-picker.cpp12
-rw-r--r--src/ui/widget/color-picker.h2
6 files changed, 48 insertions, 40 deletions
diff --git a/src/inkscape.cpp b/src/inkscape.cpp
index d29d4f1ce..3c58b1972 100644
--- a/src/inkscape.cpp
+++ b/src/inkscape.cpp
@@ -558,7 +558,7 @@ void Application::add_gtk_css()
g_object_get(settings, "gtk-theme-name", &gtkThemeName, NULL);
g_object_get(settings, "gtk-application-prefer-dark-theme", &gtkApplicationPreferDarkTheme, NULL);
g_object_set(settings, "gtk-application-prefer-dark-theme",
- prefs->getBool("/theme/darkTheme", gtkApplicationPreferDarkTheme), NULL);
+ prefs->getBool("/theme/preferDarkTheme", gtkApplicationPreferDarkTheme), NULL);
prefs->setString("/theme/defaultTheme", Glib::ustring(gtkThemeName));
prefs->setString("/theme/defaultIconTheme", Glib::ustring(gtkIconThemeName));
Glib::ustring gtkthemename = prefs->getString("/theme/gtkTheme");
diff --git a/src/ui/dialog/dialog.cpp b/src/ui/dialog/dialog.cpp
index 3baec5106..8f703c319 100644
--- a/src/ui/dialog/dialog.cpp
+++ b/src/ui/dialog/dialog.cpp
@@ -317,19 +317,20 @@ void Dialog::addTopWindowClasses()
Gtk::Widget *canvas = Glib::wrap(GTK_WIDGET(desktop->canvas));
Gtk::Window *toplevel_window = dynamic_cast<Gtk::Window *>(canvas->get_toplevel());
if (toplevel_window) {
+ Gtk::Widget *dialog_window = Glib::wrap(gobj());
if (toplevel_window->get_style_context()->has_class("dark")) {
- Glib::wrap(gobj())->get_style_context()->add_class("dark");
- Glib::wrap(gobj())->get_style_context()->remove_class("bright");
+ dialog_window->get_style_context()->add_class("dark");
+ dialog_window->get_style_context()->remove_class("bright");
} else {
- Glib::wrap(gobj())->get_style_context()->add_class("bright");
- Glib::wrap(gobj())->get_style_context()->remove_class("dark");
+ dialog_window->get_style_context()->add_class("bright");
+ dialog_window->get_style_context()->remove_class("dark");
}
if (toplevel_window->get_style_context()->has_class("symbolic")) {
- Glib::wrap(gobj())->get_style_context()->add_class("symbolic");
- Glib::wrap(gobj())->get_style_context()->remove_class("regular");
+ dialog_window->get_style_context()->add_class("symbolic");
+ dialog_window->get_style_context()->remove_class("regular");
} else {
- Glib::wrap(gobj())->get_style_context()->remove_class("symbolic");
- Glib::wrap(gobj())->get_style_context()->add_class("regular");
+ dialog_window->get_style_context()->remove_class("symbolic");
+ dialog_window->get_style_context()->add_class("regular");
}
}
}
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index de74161aa..4aa6495ef 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -656,29 +656,40 @@ void InkscapePreferences::get_highlight_colors(guint32 &colorsetbase, guint32 &c
}
}
-void InkscapePreferences::resetIconsColors()
+void InkscapePreferences::resetIconsColors(bool themechange)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
Glib::ustring themeiconname = prefs->getString("/theme/iconTheme");
if (!prefs->getBool("/theme/symbolicIcons", false)) {
-/* _symbolic_base_colors.set_sensitive(false);
+ _symbolic_base_colors.set_sensitive(false);
_symbolic_base_color.setSensitive(false);
_symbolic_success_color.setSensitive(false);
_symbolic_warning_color.setSensitive(false);
- _symbolic_error_color.setSensitive(false); */
+ _symbolic_error_color.setSensitive(false);
return;
}
if (prefs->getBool("/theme/symbolicDefaultColors", true) ||
- !prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid()) {
- Gdk::RGBA normal_color = _symbolic_base_color.get_style_context()->get_color();
+ !prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid())
+ {
+ auto const screen = Gdk::Screen::get_default();
+ if (INKSCAPE.colorizeprovider) {
+ Gtk::StyleContext::remove_provider_for_screen(screen, INKSCAPE.colorizeprovider);
+ }
+ // This colors are setted on style.css of inkscape
+ Gdk::RGBA base_color = _symbolic_base_color.get_style_context()->get_color();
+ // This is a hack to fix a proble style is not updated enoght fast on
+ // chage from dark to bright themes
+ if (themechange) {
+ base_color = _symbolic_base_color.get_style_context()->get_background_color();
+ }
Gdk::RGBA success_color = _symbolic_success_color.get_style_context()->get_color();
Gdk::RGBA warning_color = _symbolic_warning_color.get_style_context()->get_color();
Gdk::RGBA error_color = _symbolic_error_color.get_style_context()->get_color();
- SPColor normal_color_sp(normal_color.get_red(), normal_color.get_green(), normal_color.get_blue());
+ SPColor base_color_sp(base_color.get_red(), base_color.get_green(), base_color.get_blue());
SPColor success_color_sp(success_color.get_red(), success_color.get_green(), success_color.get_blue());
SPColor warning_color_sp(warning_color.get_red(), warning_color.get_green(), warning_color.get_blue());
SPColor error_color_sp(error_color.get_red(), error_color.get_green(), error_color.get_blue());
- guint32 colorsetbase = normal_color_sp.toRGBA32(normal_color.get_alpha());
+ guint32 colorsetbase = base_color_sp.toRGBA32(base_color.get_alpha());
guint32 colorsetsuccess = success_color_sp.toRGBA32(success_color.get_alpha());
guint32 colorsetwarning = warning_color_sp.toRGBA32(warning_color.get_alpha());
guint32 colorseterror = error_color_sp.toRGBA32(error_color.get_alpha());
@@ -708,6 +719,11 @@ void InkscapePreferences::resetIconsColors()
}
}
+void InkscapePreferences::resetIconsColorsWrapper()
+{
+ resetIconsColors(false);
+}
+
void InkscapePreferences::changeIconsColors()
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -749,7 +765,9 @@ void InkscapePreferences::toggleSymbolic()
}
_symbolic_base_colors.set_sensitive(true);
Glib::ustring themeiconname = prefs->getString("/theme/iconTheme");
- if (!prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid()) {
+ if (prefs->getBool("/theme/symbolicDefaultColors", true) ||
+ !prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid())
+ {
resetIconsColors();
} else {
changeIconsColors();
@@ -773,7 +791,7 @@ void InkscapePreferences::themeChange()
Gtk::Window *window = SP_ACTIVE_DESKTOP->getToplevel();
if (window) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- bool darktheme = prefs->getBool("/theme/darkTheme", false);
+ bool darktheme = prefs->getBool("/theme/preferDarkTheme", false);
Glib::ustring themename = prefs->getString("/theme/gtkTheme");
Glib::ustring themeiconname = prefs->getString("/theme/iconTheme");
GtkSettings *settings = gtk_settings_get_default();
@@ -790,6 +808,8 @@ void InkscapePreferences::themeChange()
dark = true;
}
}
+ Gtk::Widget *dialog_window = Glib::wrap(gobj());
+ bool toggled = prefs->getBool("/theme/darkTheme", false) != dark;
if (dark) {
prefs->setBool("/theme/darkTheme", true);
window->get_style_context()->add_class("dark");
@@ -799,8 +819,8 @@ void InkscapePreferences::themeChange()
window->get_style_context()->add_class("bright");
window->get_style_context()->remove_class("dark");
}
- resetIconsColors();
INKSCAPE.signal_change_theme.emit();
+ resetIconsColors(toggled);
}
}
@@ -855,7 +875,9 @@ void InkscapePreferences::symbolicThemeCheck()
}
}
if (symbolic) {
- if (!prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid()) {
+ if (prefs->getBool("/theme/symbolicDefaultColors", true) ||
+ !prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid())
+ {
resetIconsColors();
} else {
changeIconsColors();
@@ -1111,7 +1133,7 @@ void InkscapePreferences::initPageUI()
_page_theme.add_line(false, _("Change Gtk theme:"), _gtk_theme, "", "", false);
_gtk_theme.signal_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::themeChange));
}
- _dark_theme.init(_("Use dark theme"), "/theme/darkTheme", false);
+ _dark_theme.init(_("Use dark theme"), "/theme/preferDarkTheme", false);
_page_theme.add_line(true, "", _dark_theme, "", _("Use dark theme"), true);
_dark_theme.signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::themeChange));
// Icons
@@ -1149,7 +1171,7 @@ void InkscapePreferences::initPageUI()
_symbolic_icons.signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::toggleSymbolic));
_page_theme.add_line(true, "", _symbolic_icons, "", "", true);
_symbolic_base_colors.init(_("Use default colors for icons"), "/theme/symbolicDefaultColors", true);
- _symbolic_base_colors.signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::resetIconsColors));
+ _symbolic_base_colors.signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::resetIconsColorsWrapper));
_page_theme.add_line(true, "", _symbolic_base_colors, "", "", true);
_symbolic_base_color.init(_("Color for symbolic icons:"), "/theme/" + themeiconname + "/symbolicBaseColor",
0x2E3436ff);
@@ -1171,10 +1193,6 @@ void InkscapePreferences::initPageUI()
_symbolic_warning_color.connectChanged(sigc::mem_fun(this, &InkscapePreferences::changeIconsColor));
_symbolic_success_color.connectChanged(sigc::mem_fun(this, &InkscapePreferences::changeIconsColor));
_symbolic_error_color.connectChanged(sigc::mem_fun(this, &InkscapePreferences::changeIconsColor));
- _symbolic_base_color.setParentDialog(this);
- _symbolic_success_color.setParentDialog(this);
- _symbolic_warning_color.setParentDialog(this);
- _symbolic_error_color.setParentDialog(this);
/* _complementary_colors = Gtk::manage(new Gtk::Image()); */
Gtk::Box *icon_buttons = Gtk::manage(new Gtk::Box());
icon_buttons->pack_start(_symbolic_base_color, true, true, 4);
diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h
index 3b9fd1395..638ca53c2 100644
--- a/src/ui/dialog/inkscape-preferences.h
+++ b/src/ui/dialog/inkscape-preferences.h
@@ -597,7 +597,8 @@ private:
void symbolicThemeCheck();
void toggleSymbolic();
void changeIconsColors();
- void resetIconsColors();
+ void resetIconsColors(bool themechange = false);
+ void resetIconsColorsWrapper();
void changeIconsColor(guint32 /*color*/);
void get_highlight_colors(guint32 &colorsetbase, guint32 &colorsetsuccess, guint32 &colorsetwarning,
guint32 &colorseterror);
diff --git a/src/ui/widget/color-picker.cpp b/src/ui/widget/color-picker.cpp
index 3e0bf316c..5beb0900b 100644
--- a/src/ui/widget/color-picker.cpp
+++ b/src/ui/widget/color-picker.cpp
@@ -37,7 +37,6 @@ ColorPicker::ColorPicker (const Glib::ustring& title, const Glib::ustring& tip,
_preview.show();
add (_preview);
set_tooltip_text (tip);
- _parent_dialog = nullptr;
_selected_color.signal_changed.connect(sigc::mem_fun(this, &ColorPicker::_onSelectedColorChanged));
_selected_color.signal_dragged.connect(sigc::mem_fun(this, &ColorPicker::_onSelectedColorChanged));
_selected_color.signal_released.connect(sigc::mem_fun(this, &ColorPicker::_onSelectedColorChanged));
@@ -63,8 +62,6 @@ void ColorPicker::setupDialog(const Glib::ustring &title)
_color_selector->show();
}
-void ColorPicker::setParentDialog(Gtk::Widget *parent_dialog) { _parent_dialog = parent_dialog; }
-
void ColorPicker::setSensitive(bool sensitive) { set_sensitive(sensitive); }
void ColorPicker::setRgba32 (guint32 rgba)
@@ -94,18 +91,11 @@ void ColorPicker::on_clicked()
_selected_color.setValue(_rgba);
_updating = false;
}
- Gtk::Window *originalwindow = dynamic_cast<Gtk::Window *>(_parent_dialog->get_toplevel());
- if (originalwindow) {
- originalwindow->hide();
- }
_colorSelectorDialog.show();
- Glib::RefPtr<Gdk::Window> window = get_parent_window();
+ Glib::RefPtr<Gdk::Window> window = _colorSelectorDialog.get_parent_window();
if (window) {
window->focus(1);
}
- if (originalwindow) {
- originalwindow->show();
- }
}
void ColorPicker::on_changed (guint32)
diff --git a/src/ui/widget/color-picker.h b/src/ui/widget/color-picker.h
index ffe9ef2e0..b98f832dd 100644
--- a/src/ui/widget/color-picker.h
+++ b/src/ui/widget/color-picker.h
@@ -48,7 +48,6 @@ public:
void setRgba32 (guint32 rgba);
void setSensitive(bool sensitive);
void closeWindow();
- void setParentDialog(Gtk::Widget *parent_dialog);
sigc::connection connectChanged (const sigc::slot<void,guint>& slot)
{ return _changed_signal.connect (slot); }
@@ -71,7 +70,6 @@ protected:
//Inkscape::UI::Dialog::Dialog _colorSelectorDialog;
Gtk::Dialog _colorSelectorDialog;
SelectedColor _selected_color;
- Gtk::Widget *_parent_dialog;
Gtk::Widget *_color_selector;
};