diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-06-25 13:54:22 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-07-08 21:04:16 +0000 |
| commit | 3b3407821d119426c8029033974c582b680ad4cd (patch) | |
| tree | a539764bde0433fcd50bc99abecf3d4ee0ceffa9 /src | |
| parent | Improve scrool on selectors (diff) | |
| download | inkscape-3b3407821d119426c8029033974c582b680ad4cd.tar.gz inkscape-3b3407821d119426c8029033974c582b680ad4cd.zip | |
fix issue on theme change
Diffstat (limited to 'src')
| -rw-r--r-- | src/inkscape.cpp | 2 | ||||
| -rw-r--r-- | src/ui/dialog/dialog.cpp | 17 | ||||
| -rw-r--r-- | src/ui/dialog/inkscape-preferences.cpp | 52 | ||||
| -rw-r--r-- | src/ui/dialog/inkscape-preferences.h | 3 | ||||
| -rw-r--r-- | src/ui/widget/color-picker.cpp | 12 | ||||
| -rw-r--r-- | src/ui/widget/color-picker.h | 2 |
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", >kThemeName, NULL); g_object_get(settings, "gtk-application-prefer-dark-theme", >kApplicationPreferDarkTheme, 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; }; |
