summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2019-06-23 17:15:35 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2019-06-23 17:15:53 +0000
commite82a32013c7837f830b11637182ce3da8a097372 (patch)
tree3be83a1533bb0d22ca4c6ef1d89aa636fedf2d00 /src
parentUpdate macOS build pipeline (diff)
downloadinkscape-e82a32013c7837f830b11637182ce3da8a097372.tar.gz
inkscape-e82a32013c7837f830b11637182ce3da8a097372.zip
Remove experimental code to work in MR and fixes for selectors
Diffstat (limited to 'src')
-rw-r--r--src/inkscape.cpp44
-rw-r--r--src/inkscape.h5
-rw-r--r--src/object/sp-style-elem.cpp14
-rw-r--r--src/preferences-skeleton.h4
-rw-r--r--src/ui/dialog/dialog-manager.cpp5
-rw-r--r--src/ui/dialog/dialog.cpp27
-rw-r--r--src/ui/dialog/dialog.h4
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp36
-rw-r--r--src/ui/dialog/inkscape-preferences.h5
-rw-r--r--src/ui/dialog/selectorsdialog.cpp60
-rw-r--r--src/ui/dialog/selectorsdialog.h2
-rw-r--r--src/ui/dialog/styledialog.cpp20
-rw-r--r--src/ui/dialog/symbols.cpp2
-rw-r--r--src/widgets/desktop-widget.cpp1
14 files changed, 126 insertions, 103 deletions
diff --git a/src/inkscape.cpp b/src/inkscape.cpp
index 7b250f6dd..1871bff85 100644
--- a/src/inkscape.cpp
+++ b/src/inkscape.cpp
@@ -54,6 +54,9 @@
#include "libnrtype/FontFactory.h"
+#include "object/sp-root.h"
+#include "object/sp-style-elem.h"
+
#include "svg/svg-color.h"
#include "ui/dialog/debug.h"
@@ -417,29 +420,12 @@ Application::add_gtk_css()
if (prefs->getBool("/theme/symbolicIcons", false)) {
if (!prefs->getBool("/theme/symbolicIconsDefaultColor", true)) {
gchar colornamed[64];
- gchar colornamedsuccess[64];
- gchar colornamedwarning[64];
- gchar colornamederror[64];
gchar colornamed_inverse[64];
int colorset = prefs->getInt("/theme/symbolicColor", 0x2E3436ff);
sp_svg_write_color(colornamed, sizeof(colornamed), colorset);
- int colorsetsuccess = prefs->getInt("/theme/symbolicSuccessColor", 0x4AD589ff);
- sp_svg_write_color(colornamedsuccess, sizeof(colornamedsuccess), colorsetsuccess);
- int colorsetwarning = prefs->getInt("/theme/symbolicWarningColor", 0xF57900ff);
- sp_svg_write_color(colornamedwarning, sizeof(colornamedwarning), colorsetwarning);
- int colorseterror = prefs->getInt("/theme/symbolicErrorColor", 0xcc0000ff);
- sp_svg_write_color(colornamederror, sizeof(colornamederror), colorseterror);
// Use in case the special widgets have inverse theme background and symbolic
int colorset_inverse = colorset ^ 0xffffff00;
sp_svg_write_color(colornamed_inverse, sizeof(colornamed_inverse), colorset_inverse);
-
- css_str += "*{-gtk-icon-palette: success ";
- css_str += colornamedsuccess;
- css_str += ", warning ";
- css_str += colornamedwarning;
- css_str += ", error ";
- css_str += colornamederror;
- css_str += ";}";
css_str += "SPRuler, ruler-widget,";
css_str += ".bright image, .dark image";
css_str += "{color:";
@@ -479,6 +465,30 @@ Application::add_gtk_css()
}
}
+void Application::readStyleSheets(bool forceupd)
+{
+ SPDocument *document = SP_ACTIVE_DOCUMENT;
+ Inkscape::XML::Node *root = document->getReprRoot();
+ std::vector<Inkscape::XML::Node *> styles;
+ for (unsigned i = 0; i < root->childCount(); ++i) {
+ Inkscape::XML::Node *child = root->nthChild(i);
+ if (child && strcmp(child->name(), "svg:style") == 0) {
+ styles.insert(styles.begin(), child);
+ }
+ }
+ if (forceupd || styles.size() > 1) {
+ document->setStyleSheet(nullptr);
+ for (auto style : styles) {
+ gchar const *id = style->attribute("id");
+ if (id) {
+ SPStyleElem *styleelem = dynamic_cast<SPStyleElem *>(document->getObjectById(id));
+ styleelem->read_content();
+ }
+ }
+ document->getRoot()->emitModified(SP_OBJECT_MODIFIED_CASCADE);
+ }
+}
+
/* \brief Constructor for the application.
* Creates a new Inkscape::Application.
*
diff --git a/src/inkscape.h b/src/inkscape.h
index 815da0f1d..a673f0d49 100644
--- a/src/inkscape.h
+++ b/src/inkscape.h
@@ -124,6 +124,7 @@ public:
void switch_desktops_prev ();
void get_all_desktops (std::list< SPDesktop* >& listbuf);
void reactivate_desktop (SPDesktop * desktop);
+ void readStyleSheets(bool forceupd = false);
SPDesktop * find_desktop_by_dkey (unsigned int dkey);
unsigned int maximum_dkey();
SPDesktop * next_desktop ();
@@ -176,7 +177,9 @@ public:
sigc::signal<void, SPDesktop *> signal_activate_desktop;
// some desktop lost focus
sigc::signal<void, SPDesktop *> signal_deactivate_desktop;
-
+ // user change theme
+ sigc::signal<void> signal_change_theme;
+
// these are orphaned signals (nothing emits them and nothing connects to them)
sigc::signal<void, SPDocument *> signal_destroy_document;
sigc::signal<void, SPColor *, double /*opacity*/> signal_color_set;
diff --git a/src/object/sp-style-elem.cpp b/src/object/sp-style-elem.cpp
index 439a1b3cb..3b93ff190 100644
--- a/src/object/sp-style-elem.cpp
+++ b/src/object/sp-style-elem.cpp
@@ -188,10 +188,6 @@ import_style_cb (CRDocHandler *a_handler,
std::cerr << "import_style_cb: No document!" << std::endl;
return;
}
- if (!document->getStyleSheet()) {
- std::cerr << "import_style_cb: No document style sheet!" << std::endl;
- return;
- }
if (!document->getDocumentURI()) {
std::cerr << "import_style_cb: Document URI is NULL" << std::endl;
return;
@@ -207,7 +203,15 @@ import_style_cb (CRDocHandler *a_handler,
CRStatus const parse_status =
cr_parser_parse_file (parser, reinterpret_cast<const guchar *>(import_file.c_str()), CR_UTF_8);
if (parse_status == CR_OK) {
- cr_stylesheet_append_import (document->getStyleSheet(), stylesheet);
+ if (!document->getStyleSheet()) {
+ // if the style is the first style sheet that we've seen, set the document's
+ // first style sheet to this style and create a cascade object with it.
+ document->setStyleSheet(stylesheet);
+ cr_cascade_set_sheet(document->getStyleCascade(), document->getStyleSheet(), ORIGIN_AUTHOR);
+ } else {
+ // If not the first, then chain up this style_sheet
+ cr_stylesheet_append_import(document->getStyleSheet(), stylesheet);
+ }
} else {
std::cerr << "import_style_cb: Could not parse: " << import_file << std::endl;
cr_stylesheet_destroy (stylesheet);
diff --git a/src/preferences-skeleton.h b/src/preferences-skeleton.h
index fa975f8b9..569908868 100644
--- a/src/preferences-skeleton.h
+++ b/src/preferences-skeleton.h
@@ -79,10 +79,6 @@ R"=====(
inkscape:window-height="480" />
</group>
- <group id="theme"
- gtkTheme="" iconTheme="" symbolicIcons="0" darkTheme="0" symbolicColor="0x2E3436ff" >
- </group>
-
<group id="tools" bounding_box="0">
<group id="shapes" style="fill-rule:evenodd;" selcue="1" gradientdrag="1">
diff --git a/src/ui/dialog/dialog-manager.cpp b/src/ui/dialog/dialog-manager.cpp
index 727e578e2..66a682de6 100644
--- a/src/ui/dialog/dialog-manager.cpp
+++ b/src/ui/dialog/dialog-manager.cpp
@@ -16,14 +16,14 @@
#include "ui/dialog/dialog-manager.h"
-#include "ui/dialog/prototype.h"
+#include "style.h"
#include "ui/dialog/align-and-distribute.h"
#include "ui/dialog/document-metadata.h"
#include "ui/dialog/document-properties.h"
#include "ui/dialog/extension-editor.h"
#include "ui/dialog/fill-and-stroke.h"
-#include "ui/dialog/filter-effects-dialog.h"
#include "ui/dialog/filter-editor.h"
+#include "ui/dialog/filter-effects-dialog.h"
#include "ui/dialog/find.h"
#include "ui/dialog/glyphs.h"
#include "ui/dialog/inkscape-preferences.h"
@@ -31,6 +31,7 @@
#include "ui/dialog/livepatheffect-editor.h"
#include "ui/dialog/memory.h"
#include "ui/dialog/messages.h"
+#include "ui/dialog/prototype.h"
#include "ui/dialog/symbols.h"
#include "ui/dialog/tile.h"
diff --git a/src/ui/dialog/dialog.cpp b/src/ui/dialog/dialog.cpp
index 2ba2856ff..3baec5106 100644
--- a/src/ui/dialog/dialog.cpp
+++ b/src/ui/dialog/dialog.cpp
@@ -74,11 +74,13 @@ Dialog::Dialog(Behavior::BehaviorFactory behavior_factory, const char *prefs_pat
INKSCAPE.signal_dialogs_hide.connect(sigc::mem_fun(*this, &Dialog::onHideF12));
INKSCAPE.signal_dialogs_unhide.connect(sigc::mem_fun(*this, &Dialog::onShowF12));
INKSCAPE.signal_shut_down.connect(sigc::mem_fun(*this, &Dialog::onShutdown));
+ INKSCAPE.signal_change_theme.connect(sigc::mem_fun(*this, &Dialog::addTopWindowClasses));
Glib::wrap(gobj())->signal_event().connect(sigc::mem_fun(*this, &Dialog::_onEvent));
Glib::wrap(gobj())->signal_key_press_event().connect(sigc::mem_fun(*this, &Dialog::_onKeyPress));
read_geometry();
+ addTopWindowClasses();
}
Dialog::~Dialog()
@@ -308,6 +310,31 @@ Dialog::_getSelection()
return SP_ACTIVE_DESKTOP->getSelection();
}
+void Dialog::addTopWindowClasses()
+{
+ SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+ if (desktop) {
+ Gtk::Widget *canvas = Glib::wrap(GTK_WIDGET(desktop->canvas));
+ Gtk::Window *toplevel_window = dynamic_cast<Gtk::Window *>(canvas->get_toplevel());
+ if (toplevel_window) {
+ 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");
+ } else {
+ Glib::wrap(gobj())->get_style_context()->add_class("bright");
+ Glib::wrap(gobj())->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");
+ } else {
+ Glib::wrap(gobj())->get_style_context()->remove_class("symbolic");
+ Glib::wrap(gobj())->get_style_context()->add_class("regular");
+ }
+ }
+ }
+}
+
} // namespace Dialog
} // namespace UI
} // namespace Inkscape
diff --git a/src/ui/dialog/dialog.h b/src/ui/dialog/dialog.h
index 404f4f9a3..7b668a4ba 100644
--- a/src/ui/dialog/dialog.h
+++ b/src/ui/dialog/dialog.h
@@ -144,9 +144,11 @@ protected:
sigc::connection _dialogs_hidden_connection;
sigc::connection _dialogs_unhidden_connection;
sigc::connection _shutdown_connection;
+ sigc::connection _change_theme_connection;
-private:
+ private:
Behavior::Behavior* _behavior;
+ void addTopWindowClasses();
Dialog() = delete; // no constructor without params
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index 6151eeef0..0b7b68304 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -480,7 +480,7 @@ void InkscapePreferences::initPageTools()
cb->init ( _("Show font samples in the drop-down list"), "/tools/text/show_sample_in_list", true);
_page_text.add_line( false, "", *cb, "", _("Show font samples alongside font names in the drop-down list in Text bar"));
- _font_dialog.init ( _("Show font substitution warning dialog"), "/options/font/substitutedlg", false);
+ _font_dialog.init ( _("Show font substitution inng dialog"), "/options/font/substitutedlg", false);
_page_text.add_line( false, "", _font_dialog, "", _("Show font substitution warning dialog when requested fonts are not available on the system"));
cb = Gtk::manage(new PrefCheckButton);
@@ -651,28 +651,12 @@ void InkscapePreferences::symbolicStyling()
Glib::ustring css_str = "";
if (prefs->getBool("/theme/symbolicIcons", false)) {
gchar colornamed[64];
- gchar colornamedsuccess[64];
- gchar colornamedwarning[64];
- gchar colornamederror[64];
gchar colornamed_inverse[64];
int colorset = prefs->getInt("/theme/symbolicColor", 0x2E3436ff);
sp_svg_write_color(colornamed, sizeof(colornamed), colorset);
- int colorsetsuccess = prefs->getInt("/theme/symbolicSuccessColor", 0x4AD589ff);
- sp_svg_write_color(colornamedsuccess, sizeof(colornamedsuccess), colorsetsuccess);
- int colorsetwarning = prefs->getInt("/theme/symbolicWarningColor", 0xF57900ff);
- sp_svg_write_color(colornamedwarning, sizeof(colornamedwarning), colorsetwarning);
- int colorseterror = prefs->getInt("/theme/symbolicErrorColor", 0xcc0000ff);
- sp_svg_write_color(colornamederror, sizeof(colornamederror), colorseterror);
// Use in case the special widgets have inverse theme background and symbolic
int colorset_inverse = colorset ^ 0xffffff00;
sp_svg_write_color(colornamed_inverse, sizeof(colornamed_inverse), colorset_inverse);
- css_str += "*{-gtk-icon-palette: success ";
- css_str += colornamedsuccess;
- css_str += ", warning ";
- css_str += colornamedwarning;
- css_str += ", error ";
- css_str += colornamederror;
- css_str += ";}";
css_str += "SPRuler, ruler-widget,";
css_str += ".bright image, .dark image";
css_str += "{color:";
@@ -694,6 +678,7 @@ void InkscapePreferences::symbolicStyling()
window->get_style_context()->remove_class("symbolic");
}
}
+ INKSCAPE.signal_change_theme.emit();
try {
INKSCAPE.colorizeprovider->load_from_data(css_str);
} catch (const Gtk::CssProviderError &ex) {
@@ -732,9 +717,15 @@ void InkscapePreferences::themeChange()
window->get_style_context()->add_class("bright");
window->get_style_context()->remove_class("dark");
}
+ INKSCAPE.signal_change_theme.emit();
}
}
+void InkscapePreferences::changeIconsColor(guint32 /*color*/)
+{
+ symbolicStyling();
+}
+
void InkscapePreferences::initPageUI()
{
Gtk::TreeModel::iterator iter_ui = this->AddPage(_page_ui, _("Interface"), PREFS_PAGE_UI);
@@ -964,24 +955,15 @@ void InkscapePreferences::initPageUI()
_symbolic_icons.signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::symbolicStyling));
_page_theme.add_line(true, "", _symbolic_icons, "", "", true);
_symbolic_color.init(_("Color for symbolic icons:"), "/theme/symbolicColor", 0x2E3436ff);
- _symbolic_success_color.init(_("Color for symbolic success icons:"), "/theme/symbolicSuccessColor", 0x4AD589ff);
- _symbolic_warning_color.init(_("Color for symbolic warning icons:"), "/theme/symbolicWarningColor", 0xF57900ff);
- _symbolic_error_color.init(_("Color for symbolic error icons:"), "/theme/symbolicErrorColor", 0xcc0000ff);
Gtk::Label *_symbolic_color_label = Gtk::manage(new Gtk::Label(_("Change colors:")));
- Gtk::Button *apply_color = Gtk::manage(new Gtk::Button(_("Apply color")));
- apply_color->set_tooltip_text(_("Apply color to symbolic icons)"));
- apply_color->signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::symbolicStyling));
Gtk::Button *theme_decide_color = Gtk::manage(new Gtk::Button(_("Theme decides")));
theme_decide_color->set_tooltip_text(_("Theme decide symbolic icon color)"));
theme_decide_color->signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::symbolicDefaultColor));
Gtk::Box *icon_buttons = Gtk::manage(new Gtk::Box());
icon_buttons->pack_start(*_symbolic_color_label, true, true, 4);
icon_buttons->pack_start(_symbolic_color, true, true, 4);
- icon_buttons->pack_start(_symbolic_success_color, true, true, 4);
- icon_buttons->pack_start(_symbolic_warning_color, true, true, 4);
- icon_buttons->pack_start(_symbolic_error_color, true, true, 4);
- icon_buttons->pack_start(*apply_color, true, true, 4);
icon_buttons->pack_start(*theme_decide_color, true, true, 4);
+ _symbolic_color.connectChanged(sigc::mem_fun(this, &InkscapePreferences::changeIconsColor));
_page_theme.add_line(false,"", *icon_buttons, "", _("Color for symbolic icons, theme based or custom. Some icon color changes need reload"), false );
{
Glib::ustring sizeLabels[] = { C_("Icon size", "Larger"), C_("Icon size", "Large"), C_("Icon size", "Small"),
diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h
index c946eb6bd..3e0134e4d 100644
--- a/src/ui/dialog/inkscape-preferences.h
+++ b/src/ui/dialog/inkscape-preferences.h
@@ -246,14 +246,10 @@ protected:
UI::Widget::PrefCheckButton _dark_theme;
UI::Widget::PrefCheckButton _symbolic_icons;
UI::Widget::PrefColorPicker _symbolic_color;
- UI::Widget::PrefColorPicker _symbolic_warning_color;
- UI::Widget::PrefColorPicker _symbolic_error_color;
- UI::Widget::PrefColorPicker _symbolic_success_color;
UI::Widget::PrefCombo _misc_small_toolbar;
UI::Widget::PrefCombo _misc_small_secondary;
UI::Widget::PrefCombo _misc_small_tools;
UI::Widget::PrefCombo _menu_icons;
- Gtk::Button _apply_theme;
UI::Widget::PrefRadioButton _win_dockable;
UI::Widget::PrefRadioButton _win_floating;
@@ -591,6 +587,7 @@ protected:
private:
void themeChange();
+ void changeIconsColor(guint32 /*color*/);
void symbolicThemeCheck();
void symbolicStyling();
void symbolicDefaultColor();
diff --git a/src/ui/dialog/selectorsdialog.cpp b/src/ui/dialog/selectorsdialog.cpp
index acb8eea6e..4300adacf 100644
--- a/src/ui/dialog/selectorsdialog.cpp
+++ b/src/ui/dialog/selectorsdialog.cpp
@@ -315,8 +315,16 @@ SelectorsDialog::SelectorsDialog()
if ( col ) {
col->add_attribute(addRenderer->property_icon(), _mColumns._colType);
}
- _treeView.append_column("CSS Selector", _mColumns._colSelector);
+
+ Gtk::CellRendererText *label = Gtk::manage(new Gtk::CellRendererText());
+ addCol = _treeView.append_column("CSS Selector", *label) - 1;
+ col = _treeView.get_column(addCol);
+ if (col) {
+ col->add_attribute(label->property_text(),_mColumns._colSelector);
+ col->add_attribute(label->property_weight(), _mColumns._colSelected);
+ }
_treeView.set_expander_column(*(_treeView.get_column(1)));
+
// Signal handlers
_treeView.signal_button_release_event().connect( // Needs to be release, not press.
@@ -484,7 +492,6 @@ Inkscape::XML::Node *SelectorsDialog::_getStyleTextNode()
return textNode;
}
-
/**
* Fill the Gtk::TreeStore from the svg:style element.
*/
@@ -585,6 +592,7 @@ void SelectorsDialog::_readStyleElement()
row[_mColumns._colObj] = objVec;
row[_mColumns._colProperties] = properties;
row[_mColumns._colVisible] = true;
+ row[_mColumns._colSelected] = 400;
// Add as children, objects that match selector.
for (auto &obj : objVec) {
Gtk::TreeModel::Row childrow = *(_store->append(row->children()));
@@ -595,6 +603,7 @@ void SelectorsDialog::_readStyleElement()
childrow[_mColumns._colObj] = std::vector<SPObject *>(1, obj);
childrow[_mColumns._colProperties] = ""; // Unused
childrow[_mColumns._colVisible] = true; // Unused
+ childrow[_mColumns._colSelected] = 400;
}
}
@@ -628,7 +637,6 @@ void SelectorsDialog::_writeStyleElement()
}
_updating = true;
SPDocument *document = SP_ACTIVE_DOCUMENT;
- document->setStyleSheet(nullptr);
Glib::ustring styleContent;
for (auto& row: _store->children()) {
Glib::ustring selector = row[_mColumns._colSelector];
@@ -645,10 +653,11 @@ void SelectorsDialog::_writeStyleElement()
// harm in keeping it around ...
Inkscape::XML::Node *textNode = _getStyleTextNode();
textNode->setContent(styleContent.c_str());
-
+ INKSCAPE.readStyleSheets(true);
DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_SELECTORS, _("Edited style element."));
_updating = false;
+
g_debug("SelectorsDialog::_writeStyleElement(): | %s |", styleContent.c_str());
}
@@ -811,6 +820,7 @@ void SelectorsDialog::_addToSelector(Gtk::TreeModel::Row row)
childrow[_mColumns._colObj] = std::vector<SPObject *>(1, obj);
childrow[_mColumns._colProperties] = ""; // Unused
childrow[_mColumns._colVisible] = true; // Unused
+ childrow[_mColumns._colSelected] = 400;
}
objVec = _getObjVec(multiselector);
row[_mColumns._colSelector] = multiselector;
@@ -835,6 +845,7 @@ void SelectorsDialog::_removeFromSelector(Gtk::TreeModel::Row row)
SPObject *obj = nullptr;
Glib::ustring objectLabel = row[_mColumns._colSelector];
Gtk::TreeModel::iterator iter = row->parent();
+ Inkscape::Selection *selection = getDesktop()->getSelection();
if (iter) {
Gtk::TreeModel::Row parent = *iter;
Glib::ustring multiselector = parent[_mColumns._colSelector];
@@ -871,10 +882,6 @@ void SelectorsDialog::_removeFromSelector(Gtk::TreeModel::Row row)
// Add entry to style element
_writeStyleElement();
- if (obj) {
- obj->style->readFromObject(obj);
- obj->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
- }
}
}
@@ -1025,14 +1032,14 @@ void SelectorsDialog::_removeClass(SPObject *obj, const Glib::ustring &className
void SelectorsDialog::_selectObjects(int eventX, int eventY)
{
g_debug("SelectorsDialog::_selectObjects: %d, %d", eventX, eventY);
- getDesktop()->selection->clear();
Gtk::TreeViewColumn *col = _treeView.get_column(1);
Gtk::TreeModel::Path path;
int x2 = 0;
int y2 = 0;
// To do: We should be able to do this via passing in row.
if (_treeView.get_path_at_pos(eventX, eventY, path, col, x2, y2)) {
- if (col == _treeView.get_column(1)) {
+ if (col == _treeView.get_column(1) && x2 > 25) {
+ getDesktop()->selection->clear();
Gtk::TreeModel::iterator iter = _store->get_iter(path);
if (iter) {
Gtk::TreeModel::Row row = *iter;
@@ -1159,6 +1166,7 @@ void SelectorsDialog::_addSelector()
row[_mColumns._colObj] = objVec;
row[_mColumns._colProperties] = "";
row[_mColumns._colVisible] = true;
+ row[_mColumns._colSelected] = 400;
for (auto &obj : objVec) {
Gtk::TreeModel::Row childrow = *(_store->append(row->children()));
childrow[_mColumns._colSelector] = "#" + Glib::ustring(obj->getId());
@@ -1167,6 +1175,7 @@ void SelectorsDialog::_addSelector()
childrow[_mColumns._colObj] = std::vector<SPObject *>(1, obj);
childrow[_mColumns._colProperties] = ""; // Unused
childrow[_mColumns._colVisible] = true; // Unused
+ childrow[_mColumns._colSelected] = 400;
}
// Add entry to style element
_writeStyleElement();
@@ -1219,18 +1228,11 @@ bool SelectorsDialog::_handleButtonEvent(GdkEventButton *event)
if (_treeView.get_path_at_pos(x, y, path, col, x2, y2)) {
if (col == _treeView.get_column(0)) {
- bool remove_parent = false;
Gtk::TreeModel::iterator iter = _store->get_iter(path);
Gtk::TreeModel::Row row = *iter;
- Glib::RefPtr<Gtk::TreeSelection> sel = _treeView.get_selection();
- sel->select(row);
- // Add or remove objects from a
- Gtk::TreeModel::Row row_to_sel;
if (!row.parent()) {
- row_to_sel = row;
_addToSelector(row);
} else {
- row_to_sel = *row.parent();
_removeFromSelector(row);
}
}
@@ -1377,20 +1379,26 @@ void SelectorsDialog::_selectRow()
} else {
_style_dialog->setCurrentSelector("");
}
-
for (auto row : children) {
- std::vector<SPObject *> objVec = row[_mColumns._colObj];
- if (obj) {
- for (auto & i : objVec) {
- if (obj->getId() == i->getId()) {
+ Gtk::TreeModel::Children subchildren = row->children();
+ for (auto subrow : subchildren) {
+ subrow[_mColumns._colSelected] = 400;
+ }
+ }
+ for (auto obj: selection->items()) {
+ for (auto row : children) {
+ Gtk::TreeModel::Children subchildren = row->children();
+ for (auto subrow : subchildren) {
+ std::vector<SPObject *> objVec = subrow[_mColumns._colObj];
+ if (obj->getId() == objVec[0]->getId()) {
_treeView.get_selection()->select(row);
row[_mColumns._colVisible] = true;
- break;
+ subrow[_mColumns._colSelected] = 700;
}
}
- }
- if (row[_mColumns._colExpand]) {
- _treeView.expand_to_path(Gtk::TreePath(row));
+ if (row[_mColumns._colExpand]) {
+ _treeView.expand_to_path(Gtk::TreePath(row));
+ }
}
}
}
diff --git a/src/ui/dialog/selectorsdialog.h b/src/ui/dialog/selectorsdialog.h
index 109ffaf22..4a0e8dc1b 100644
--- a/src/ui/dialog/selectorsdialog.h
+++ b/src/ui/dialog/selectorsdialog.h
@@ -80,6 +80,7 @@ class SelectorsDialog : public Widget::Panel {
add(_colObj);
add(_colProperties);
add(_colVisible);
+ add(_colSelected);
}
Gtk::TreeModelColumn<Glib::ustring> _colSelector; // Selector or matching object id.
Gtk::TreeModelColumn<bool> _colExpand; // Open/Close store row.
@@ -87,6 +88,7 @@ class SelectorsDialog : public Widget::Panel {
Gtk::TreeModelColumn<std::vector<SPObject *> > _colObj; // List of matching objects.
Gtk::TreeModelColumn<Glib::ustring> _colProperties; // List of properties.
Gtk::TreeModelColumn<bool> _colVisible; // Make visible or not.
+ Gtk::TreeModelColumn<gint> _colSelected; // Make selected.
};
ModelColumns _mColumns;
diff --git a/src/ui/dialog/styledialog.cpp b/src/ui/dialog/styledialog.cpp
index fe9c6ed3b..3cdf5092b 100644
--- a/src/ui/dialog/styledialog.cpp
+++ b/src/ui/dialog/styledialog.cpp
@@ -130,17 +130,6 @@ class StyleDialog::NodeWatcher : public Inkscape::XML::NodeObserver {
if (name == "id" || name == "class" || name == "style") {
_styledialog->_nodeChanged(node);
}
- SPObject *obj = SP_ACTIVE_DOCUMENT->getObjectById(node.attribute("id"));
- if (obj) {
- for (auto iter : obj->style->properties()) {
- if (iter->name == name) {
- obj->style->readFromObject(obj);
- obj->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
- _styledialog->_nodeChanged(node);
- break;
- }
- }
- }
}
}
@@ -291,11 +280,11 @@ Inkscape::XML::Node *StyleDialog::_getStyleTextNode()
styleNode = SP_ACTIVE_DOCUMENT->getReprDoc()->createElement("svg:style");
textNode = SP_ACTIVE_DOCUMENT->getReprDoc()->createTextNode("");
- styleNode->appendChild(textNode);
- Inkscape::GC::release(textNode);
-
root->addChild(styleNode, nullptr);
Inkscape::GC::release(styleNode);
+
+ styleNode->appendChild(textNode);
+ Inkscape::GC::release(textNode);
}
if (_textNode != textNode) {
@@ -307,6 +296,7 @@ Inkscape::XML::Node *StyleDialog::_getStyleTextNode()
return textNode;
}
+
Glib::RefPtr<Gtk::TreeModel> StyleDialog::_selectTree(Glib::ustring selector)
{
Gtk::Label *selectorlabel;
@@ -915,7 +905,6 @@ void StyleDialog::_writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store, Glib::u
// We could test if styleContent is empty and then delete the style node here but there is no
// harm in keeping it around ...
SPDocument *document = SP_ACTIVE_DOCUMENT;
- document->setStyleSheet(nullptr);
std::string pos = std::to_string(selectorpos);
std::string selectormatch = "(";
for (selectorpos; selectorpos > 1; selectorpos--) {
@@ -928,6 +917,7 @@ void StyleDialog::_writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store, Glib::u
std::string result;
std::regex_replace(std::back_inserter(result), content.begin(), content.end(), e, "$1" + styleContent + "$3");
textNode->setContent(result.c_str());
+ INKSCAPE.readStyleSheets(true);
for (auto iter : document->getObjectsBySelector(selector)) {
iter->style->readFromObject(iter);
iter->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp
index a269ae094..37e522d5d 100644
--- a/src/ui/dialog/symbols.cpp
+++ b/src/ui/dialog/symbols.cpp
@@ -211,9 +211,9 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) :
// No results
overlay_icon = sp_get_icon_image("searching", Gtk::ICON_SIZE_DIALOG);
overlay_icon->set_pixel_size(110);
- overlay_icon->get_style_context()->add_class("iconsymbolic");
overlay_icon->set_halign(Gtk::ALIGN_CENTER);
overlay_icon->set_valign(Gtk::ALIGN_START);
+
overlay_icon->set_margin_top(45);
overlay_title = new Gtk::Label();
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index f228e3ecc..885cd5ed6 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -920,6 +920,7 @@ sp_desktop_widget_realize (GtkWidget *widget)
window->get_style_context()->add_class("regular");
window->get_style_context()->remove_class("symbolic");
}
+ INKSCAPE.signal_change_theme.emit();
}
#ifdef GDK_WINDOWING_QUARTZ