diff --git a/share/ui/inkscape-start.glade b/share/ui/inkscape-start.glade index 7472ccd4fc4fdbd7f73cd98066daccc45415e34c..02eb8d9ef3c4f60f1ee0abe79cc6824848c36924 100644 --- a/share/ui/inkscape-start.glade +++ b/share/ui/inkscape-start.glade @@ -890,17 +890,28 @@ along with Inkscape Extensions Manager. If not, see - - + + default + User Default + + + 0 + 0 + 0 + 0 + False + False + False + classic Classic Adwaita Adwaita - hicolor + Adwaita 0 0 0 @@ -908,13 +919,12 @@ along with Inkscape Extensions Manager. If not, see False False False - False symbolic Symbolic Adwaita Adwaita - hicolor + Adwaita 0 0 0 @@ -922,13 +932,12 @@ along with Inkscape Extensions Manager. If not, see False True False - False symbolic-dark Symbolic Adwaita Dark Adwaita - hicolor + Adwaita 0 0 0 @@ -936,7 +945,6 @@ along with Inkscape Extensions Manager. If not, see True True False - False dark-color @@ -950,7 +958,6 @@ along with Inkscape Extensions Manager. If not, see True True False - False light-color @@ -964,7 +971,6 @@ along with Inkscape Extensions Manager. If not, see False True False - False dark-grey @@ -978,21 +984,6 @@ along with Inkscape Extensions Manager. If not, see True True False - False - - - light-min - Compacted (Small Screens) - Minwaita - multicolor - #000000 - #00990a - #ff1990 - #0099e6 - False - True - True - False @@ -1241,7 +1232,7 @@ along with Inkscape Extensions Manager. If not, see - 11 + 10 1 @@ -1271,19 +1262,119 @@ along with Inkscape Extensions Manager. If not, see - + True False - 4 - 4 - 3 - True + vertical - - True + False - tool-pointer - 3 + 4 + 4 + 3 + True + + + True + False + tool-pointer + 5 + + + False + True + 0 + + + + + True + False + tool-node-editor + 5 + + + False + True + 1 + + + + + True + False + center + + + False + True + 2 + + + + + True + False + draw-rectangle + 5 + + + False + True + 3 + + + + + True + False + draw-polygon-star + 5 + + + False + True + 4 + + + + + True + False + center + + + False + True + 5 + + + + + True + False + draw-path + 5 + + + False + True + 6 + + + + + True + False + draw-freehand + 5 + + + False + True + 7 + + False @@ -1292,11 +1383,115 @@ along with Inkscape Extensions Manager. If not, see - - True + False - tool-node-editor - 3 + True + 4 + 4 + 3 + True + + + True + False + tool-pointer + 3 + + + False + True + 0 + + + + + True + False + tool-node-editor + 3 + + + False + True + 1 + + + + + True + False + center + + + False + True + 2 + + + + + True + False + draw-rectangle + 3 + + + False + True + 3 + + + + + True + False + draw-polygon-star + 3 + + + False + True + 4 + + + + + True + False + center + + + False + True + 5 + + + + + True + False + draw-path + 3 + + + False + True + 6 + + + + + True + False + draw-freehand + 3 + + + False + True + 7 + + False @@ -1304,80 +1499,69 @@ along with Inkscape Extensions Manager. If not, see 1 + + + 1 + 5 + + + + + True + False - - True - False - center - - - False - True - 2 - - - - - True - False - draw-rectangle - 3 - - - False - True - 3 - - - - + True False - draw-polygon-star - 3 + 8 + Compact False True - 4 + 0 - + + compactSwitch True - False + True center + center False True - 5 + 1 - + True False - draw-path - 3 + 8 + 8 + Small icons False True - 6 + 2 - + + smalliconsSwitch True - False - draw-freehand - 3 + True + center + center False True - 7 + 3 diff --git a/src/inkscape.cpp b/src/inkscape.cpp index bd2aa91202250b90c6cd8d64e40d4b42c5fc646e..dbeaff7a334092daa12291a58522ff3de4aafd13 100644 --- a/src/inkscape.cpp +++ b/src/inkscape.cpp @@ -315,6 +315,9 @@ Glib::ustring Application::get_symbolic_colors() gchar colornamed_inverse[64]; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); + if (themeiconname == "") { + themeiconname = prefs->getString("/theme/defaultIconTheme"); + } guint32 colorsetbase = 0x2E3436ff; guint32 colorsetbase_inverse = colorsetbase ^ 0xffffff00; guint32 colorsetsuccess = 0x4AD589ff; @@ -435,23 +438,27 @@ void Application::add_gtk_css(bool only_providers) g_object_get(settings, "gtk-icon-theme-name", >kIconThemeName, NULL); 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/preferDarkTheme", gtkApplicationPreferDarkTheme), NULL); + prefs->setBool("/theme/defaultPreferDarkTheme", gtkApplicationPreferDarkTheme); prefs->setString("/theme/defaultTheme", Glib::ustring(gtkThemeName)); prefs->setString("/theme/defaultIconTheme", Glib::ustring(gtkIconThemeName)); Glib::ustring gtkthemename = prefs->getString("/theme/gtkTheme"); if (gtkthemename != "") { g_object_set(settings, "gtk-theme-name", gtkthemename.c_str(), NULL); } else { - prefs->setString("/theme/gtkTheme", Glib::ustring(gtkThemeName)); + Glib::RefPtr display = Gdk::Display::get_default(); + Glib::RefPtr screen = display->get_default_screen(); + Glib::RefPtr icon_theme = Gtk::IconTheme::get_for_screen(screen); + Gtk::IconInfo iconinfo = icon_theme->lookup_icon("tool-pointer", 22, Gtk::ICON_LOOKUP_FORCE_SIZE); + prefs->setBool("/theme/symbolicIcons", iconinfo.is_symbolic()); + } + bool preferdarktheme = prefs->getBool("/theme/preferDarkTheme", false); + if (preferdarktheme) { + g_object_set(settings, "gtk-application-prefer-dark-theme", true, NULL); } themeiconname = prefs->getString("/theme/iconTheme"); if (themeiconname != "") { g_object_set(settings, "gtk-icon-theme-name", themeiconname.c_str(), NULL); - } else { - prefs->setString("/theme/iconTheme", Glib::ustring(gtkIconThemeName)); } - } g_free(gtkThemeName); @@ -474,8 +481,12 @@ void Application::add_gtk_css(bool only_providers) contrast *= 2.5; shade = 1 + contrast; } + Glib::ustring current_theme = prefs->getString("/theme/gtkTheme"); + if (current_theme == "") { + current_theme = prefs->getString("/theme/defaultTheme"); + } GtkCssProvider *currentthemeprovider = - gtk_css_provider_get_named(prefs->getString("/theme/gtkTheme").c_str(), variant); + gtk_css_provider_get_named(current_theme.c_str(), variant); std::string cssstring = gtk_css_provider_to_string(currentthemeprovider); std::string appenddefined = ""; if (contrast) { @@ -512,6 +523,9 @@ void Application::add_gtk_css(bool only_providers) } Glib::ustring gtkthemename = prefs->getString("/theme/gtkTheme"); + if (gtkthemename == "") { + gtkthemename = prefs->getString("/theme/defaultTheme"); + } gtkthemename += ".css"; style = get_filename(UIS, gtkthemename.c_str(), false, true); if (!style.empty()) { diff --git a/src/ui/cursor-utils.cpp b/src/ui/cursor-utils.cpp index bafce3bbe1f83ecd6bc8b43d238839558acae9d3..10a58d4ce4e687c6c94160ace3aaade5bc12c1ad 100644 --- a/src/ui/cursor-utils.cpp +++ b/src/ui/cursor-utils.cpp @@ -60,6 +60,9 @@ load_svg_cursor(Glib::RefPtr display, // Set in preferences Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Glib::ustring theme_name = prefs->getString("/theme/iconTheme"); + if (theme_name == "") { + theme_name = prefs->getString("/theme/defaultIconTheme"); + } if (!theme_name.empty()) { theme_names.push_back(theme_name); } diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index 78149f8781321e3e6672721ec8e3428ac767a225..e9786e35892699557e47261af266c7c247194c27 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -1048,8 +1048,8 @@ void InkscapePreferences::get_highlight_colors(guint32 &colorsetbase, guint32 &c using namespace Inkscape::IO::Resource; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); - if (themeiconname == prefs->getString("/theme/defaultIconTheme")) { - themeiconname = "hicolor"; + if (themeiconname == "") { + themeiconname = prefs->getString("/theme/defaultIconTheme"); } Glib::ustring prefix = ""; if (prefs->getBool("/theme/darkTheme", false)) { @@ -1118,6 +1118,9 @@ void InkscapePreferences::resetIconsColors(bool themechange) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); + if (themeiconname == "") { + themeiconname = prefs->getString("/theme/defaultIconTheme"); + } if (!prefs->getBool("/theme/symbolicIcons", false)) { _symbolic_base_colors.set_sensitive(false); _symbolic_highlight_colors.set_sensitive(false); @@ -1195,6 +1198,9 @@ void InkscapePreferences::changeIconsColors() { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); + if (themeiconname == "") { + themeiconname = prefs->getString("/theme/defaultIconTheme"); + } guint32 colorsetbase = prefs->getUInt("/theme/" + themeiconname + "/symbolicBaseColor", 0x2E3436ff); guint32 colorsetsuccess = prefs->getUInt("/theme/" + themeiconname + "/symbolicSuccessColor", 0x4AD589ff); guint32 colorsetwarning = prefs->getUInt("/theme/" + themeiconname + "/symbolicWarningColor", 0xF57900ff); @@ -1233,8 +1239,10 @@ void InkscapePreferences::toggleSymbolic() _symbolic_base_colors.set_sensitive(true); _symbolic_highlight_colors.set_sensitive(true); Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); - if (prefs->getBool("/theme/symbolicDefaultHighColors", true) || - prefs->getBool("/theme/symbolicDefaultBaseColors", true) || + if (themeiconname == "") { + themeiconname = prefs->getString("/theme/defaultIconTheme"); + } + if (prefs->getBool("/theme/symbolicDefaultColors", true) || !prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid()) { resetIconsColors(); } else { @@ -1275,6 +1283,9 @@ void InkscapePreferences::themeChange() } Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Glib::ustring current_theme = prefs->getString("/theme/gtkTheme"); + if (current_theme == "") { + current_theme = prefs->getString("/theme/defaultTheme"); + } auto settings = Gtk::Settings::get_default(); _dark_theme.get_parent()->set_no_show_all(false); if (dark_themes[current_theme]) { @@ -1316,6 +1327,9 @@ void InkscapePreferences::preferDarkThemeChange() Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool dark_theme = prefs->getBool("/theme/preferDarkTheme", false); Glib::ustring current_theme = prefs->getString("/theme/gtkTheme"); + if (current_theme == "") { + current_theme = prefs->getString("/theme/defaultTheme"); + } auto settings = Gtk::Settings::get_default(); settings->property_gtk_application_prefer_dark_theme() = dark_theme; bool dark = current_theme.find(":dark") != std::string::npos; @@ -1348,6 +1362,9 @@ void InkscapePreferences::symbolicThemeCheck() using namespace Inkscape::IO::Resource; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); + if (themeiconname == "") { + themeiconname = prefs->getString("/theme/defaultIconTheme"); + } bool symbolic = false; auto settings = Gtk::Settings::get_default(); if (settings) { @@ -1355,7 +1372,8 @@ void InkscapePreferences::symbolicThemeCheck() settings->property_gtk_icon_theme_name() = themeiconname; } } - if (prefs->getString("/theme/defaultIconTheme") != prefs->getString("/theme/iconTheme")) { + if (themeiconname != "Adwaita") { + auto folders = get_foldernames(ICONS, { "application" }); for (auto &folder : folders) { auto path = folder; @@ -1363,7 +1381,7 @@ void InkscapePreferences::symbolicThemeCheck() if (std::string::npos != last_slash_idx) { folder.erase(0, last_slash_idx + 1); } - if (folder == prefs->getString("/theme/iconTheme")) { + if (folder == themeiconname) { #ifdef _WIN32 path += g_win32_locale_filename_from_utf8("/symbolic/actions"); #else @@ -1616,6 +1634,9 @@ void InkscapePreferences::initPageUI() _dark_theme.init(_("Use dark theme"), "/theme/preferDarkTheme", false); Glib::ustring current_theme = prefs->getString("/theme/gtkTheme"); Glib::ustring default_theme = prefs->getString("/theme/defaultTheme"); + if (current_theme == "") { + current_theme = default_theme; + } Glib::ustring theme = ""; { dark_themes = get_available_themes(); @@ -1635,8 +1656,8 @@ void InkscapePreferences::initPageUI() Glib::ustring default_theme_label = _("Use system theme"); default_theme_label += " (" + default_theme + ")"; labels.emplace_back(default_theme_label); - values.push_back(default_theme); - _gtk_theme.init("/theme/gtkTheme", labels, values, "Adwaita"); + values.emplace_back(""); + _gtk_theme.init("/theme/gtkTheme", labels, values, ""); _page_theme.add_line(false, _("Change GTK theme:"), _gtk_theme, "", "", false); _gtk_theme.signal_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::themeChange)); } @@ -1675,25 +1696,24 @@ void InkscapePreferences::initPageUI() if (std::string::npos != last_slash_idx) { folder.erase(0, last_slash_idx + 1); } - if (folder == default_icon_theme || (default_icon_theme == "Adwaita" && folder == "hicolor")) { - continue; + if (folder == "hicolor") { + labels.emplace_back("Adwaita"); + values.emplace_back("Adwaita"); + } else { + labels.push_back(folder); + values.push_back(folder); } - labels.push_back(folder); - values.push_back(folder); } std::sort(labels.begin(), labels.end()); std::sort(values.begin(), values.end()); labels.erase(unique(labels.begin(), labels.end()), labels.end()); values.erase(unique(values.begin(), values.end()), values.end()); - values.push_back(default_icon_theme); - if (default_icon_theme == "Adwaita") { - default_icon_theme = "hicolor"; - } + values.emplace_back(""); Glib::ustring default_icon_label = _("Use system icons"); default_icon_label += " (" + default_icon_theme + ")"; labels.emplace_back(default_icon_label); - _icon_theme.init("/theme/iconTheme", labels, values, "Adwaita"); + _icon_theme.init("/theme/iconTheme", labels, values, ""); _page_theme.add_line(false, _("Change icon theme:"), _icon_theme, "", "", false); _icon_theme.signal_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::symbolicThemeCheck)); _sys_user_icons_dir_copy.init((char const *)IO::Resource::get_path(IO::Resource::USER, IO::Resource::ICONS, ""), @@ -1701,6 +1721,9 @@ void InkscapePreferences::initPageUI() _page_theme.add_line(true, _("User icons: "), _sys_user_icons_dir_copy, "", _("Location of the user’s icons"), true, Gtk::manage(new Gtk::Box())); } Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); + if (themeiconname == "") { + themeiconname = prefs->getString("/theme/defaultIconTheme"); + } _symbolic_icons.init(_("Use symbolic icons"), "/theme/symbolicIcons", false); _symbolic_icons.signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::toggleSymbolic)); _page_theme.add_line(true, "", _symbolic_icons, "", "", true); diff --git a/src/ui/dialog/startup.cpp b/src/ui/dialog/startup.cpp index 7c109d249f923b6a0631cdc79c5498e26336f102..116684697f848a4d9efd405602be3f31319dab63 100644 --- a/src/ui/dialog/startup.cpp +++ b/src/ui/dialog/startup.cpp @@ -100,7 +100,6 @@ class ThemeCols: public Gtk::TreeModel::ColumnRecord { this->add(this->error); this->add(this->dark); this->add(this->symbolic); - this->add(this->smallicons); this->add(this->enabled); } Gtk::TreeModelColumn id; @@ -113,7 +112,6 @@ class ThemeCols: public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn error; Gtk::TreeModelColumn dark; Gtk::TreeModelColumn symbolic; - Gtk::TreeModelColumn smallicons; Gtk::TreeModelColumn enabled; }; @@ -175,7 +173,10 @@ StartScreen::StartScreen() builder->get_widget("thanks", thanks); builder->get_widget("show_toggle", show_toggle); builder->get_widget("load", load); - + builder->get_widget("compact", compact); + builder->get_widget("smallicons", smallicons); + builder->get_widget("iconrowsmall", iconrowsmall); + builder->get_widget("iconrow", iconrow); // Unparent to move to our dialog window. auto parent = banners->get_parent(); parent->remove(*banners); @@ -190,6 +191,21 @@ StartScreen::StartScreen() enlist_recent_files(); enlist_keys(); filter_themes(); + if (prefs->getString("/options/boot/theme") == "") { + compact->set_sensitive(false); + } + Glib::ustring gtkthemename = prefs->getString("/theme/gtkTheme"); + if (gtkthemename == "Minwaita") { + compact->set_active(true); + } + if (prefs->getBool("/toolbox/tools/small",false)) { + smallicons->set_active(true); + iconrowsmall->show(); + iconrow->hide(); + } else { + iconrow->show(); + iconrowsmall->hide(); + } set_active_combo("themes", prefs->getString("/options/boot/theme")); set_active_combo("canvas", prefs->getString("/options/boot/canvas")); @@ -197,6 +213,8 @@ StartScreen::StartScreen() canvas->signal_changed().connect(sigc::mem_fun(*this, &StartScreen::canvas_changed)); keys->signal_changed().connect(sigc::mem_fun(*this, &StartScreen::keyboard_changed)); themes->signal_changed().connect(sigc::mem_fun(*this, &StartScreen::theme_changed)); + compact->property_active().signal_changed().connect(sigc::mem_fun(*this, &StartScreen::theme_changed)); + smallicons->property_active().signal_changed().connect(sigc::mem_fun(*this, &StartScreen::theme_changed)); save->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this, &StartScreen::notebook_next), save)); // "Supported by You" tab @@ -490,10 +508,36 @@ StartScreen::refresh_theme(Glib::ustring theme_name) auto settings = Gtk::Settings::get_default(); auto prefs = Inkscape::Preferences::get(); - - settings->property_gtk_theme_name() = theme_name; - settings->property_gtk_application_prefer_dark_theme() = prefs->getBool("/theme/darkTheme", true); - settings->property_gtk_icon_theme_name() = prefs->getString("/theme/iconTheme"); + if (theme_name == "") { + theme_name = prefs->getString("/theme/defaultTheme"); + bool preferDarkTheme = prefs->getBool("/theme/defaultPreferDarkTheme", false); + prefs->setBool("/theme/preferDarkTheme", preferDarkTheme); + settings->property_gtk_application_prefer_dark_theme() = preferDarkTheme; + settings->property_gtk_theme_name() = theme_name; + bool dark = Glib::ustring(theme_name).find(":dark") != std::string::npos; + if (!dark) { + Glib::RefPtr stylecontext = get_style_context(); + Gdk::RGBA rgba; + bool background_set = stylecontext->lookup_color("theme_bg_color", rgba); + if (background_set && (0.299 * rgba.get_red() + 0.587 * rgba.get_green() + 0.114 * rgba.get_blue()) < 0.5) { + dark = true; + } + } + prefs->setBool("/theme/darkTheme", dark); + Glib::RefPtr display = Gdk::Display::get_default(); + Glib::RefPtr screen = display->get_default_screen(); + Glib::RefPtr icon_theme = Gtk::IconTheme::get_for_screen(screen); + Gtk::IconInfo iconinfo = icon_theme->lookup_icon("tool-pointer", 22, Gtk::ICON_LOOKUP_FORCE_SIZE); + prefs->setBool("/theme/symbolicIcons", iconinfo.is_symbolic()); + } else { + settings->property_gtk_theme_name() = theme_name; + settings->property_gtk_application_prefer_dark_theme() = prefs->getBool("/theme/preferDarkTheme", false); + } + Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); + if (themeiconname == "") { + themeiconname = prefs->getString("/theme/defaultIconTheme"); + } + settings->property_gtk_icon_theme_name() = themeiconname; if (prefs->getBool("/theme/symbolicIcons", false)) { get_style_context()->add_class("symbolic"); @@ -537,8 +581,25 @@ StartScreen::theme_changed() // Update theme from combo. Glib::ustring icons = row[cols.icons]; - prefs->setBool("/toolbox/tools/small", row[cols.smallicons]); - prefs->setString("/theme/gtkTheme", row[cols.theme]); + if (smallicons->get_active()) { + smallicons->set_active(true); + iconrowsmall->show(); + iconrow->hide(); + } else { + iconrow->show(); + iconrowsmall->hide(); + } + prefs->setBool("/toolbox/tools/small", smallicons->get_active()); + if (row[cols.theme] == "") { + compact->set_sensitive(false); + } else { + compact->set_sensitive(has_minwaita); + } + if (compact->get_active()) { + prefs->setString("/theme/gtkTheme", "Minwaita"); + } else { + prefs->setString("/theme/gtkTheme", row[cols.theme]); + } prefs->setString("/theme/iconTheme", icons); prefs->setBool("/theme/preferDarkTheme", row[cols.dark]); prefs->setBool("/theme/darkTheme", row[cols.dark]); @@ -557,8 +618,7 @@ StartScreen::theme_changed() prefs->setUInt(prefix + "/symbolicWarningColor", get_color_value(row[cols.warn])); prefs->setUInt(prefix + "/symbolicErrorColor", get_color_value(row[cols.error])); } - - refresh_theme(row[cols.theme]); + refresh_theme(prefs->getString("/theme/gtkTheme")); } catch(int e) { g_warning("Couldn't find theme value."); } @@ -602,11 +662,17 @@ StartScreen::filter_themes() // We need to disable themes which aren't available. auto store = Glib::wrap(GTK_LIST_STORE(gtk_combo_box_get_model(themes->gobj()))); auto available = get_available_themes(); - for(auto row : store->children()) { Glib::ustring theme = row[cols.theme]; - row[cols.enabled] = available.find(theme) != available.end(); + + if (theme == "") { + row[cols.enabled] = true; + } else { + row[cols.enabled] = available.find(theme) != available.end(); + } } + has_minwaita = available.find("Minwaita") != available.end(); + compact->set_sensitive(has_minwaita); } void diff --git a/src/ui/dialog/startup.h b/src/ui/dialog/startup.h index 302783e3937b0b1d42d7b321e546d26e9f93866f..8b78efe89f734ac6626318670e3c2c94c965cbc3 100644 --- a/src/ui/dialog/startup.h +++ b/src/ui/dialog/startup.h @@ -39,7 +39,6 @@ private: void filter_themes(); void keyboard_changed(); void notebook_switch(Gtk::Widget *tab, guint page_num); - void theme_changed(); void canvas_changed(); void refresh_theme(Glib::ustring theme_name); @@ -55,7 +54,11 @@ private: Gtk::Fixed *banners = nullptr; Gtk::ComboBox *themes = nullptr; Gtk::TreeView *recent_treeview = nullptr; - + Gtk::Switch *smallicons = nullptr; + Gtk::Switch *compact = nullptr; + Gtk::Box *iconrowsmall = nullptr; + Gtk::Box *iconrow = nullptr; + bool has_minwaita = false; SPDocument* _document = nullptr; };