X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fwidgets%2Flayer-selector.cpp;h=10b497cacacb8b730d65d5afd261f6f41370c06f;hb=f67bf41415152c650bdfe59bf8facf244ee3d3bb;hp=8fe0c928e73da187c9a086efe4eab5be704bfa98;hpb=6129af7cc5b723223e9617614c931936e5190421;p=inkscape.git diff --git a/src/widgets/layer-selector.cpp b/src/widgets/layer-selector.cpp index 8fe0c928e..10b497cac 100644 --- a/src/widgets/layer-selector.cpp +++ b/src/widgets/layer-selector.cpp @@ -28,7 +28,9 @@ #include "desktop.h" #include "document.h" #include "dialogs/layer-properties.h" +#include "layer-manager.h" #include "xml/node-event-vector.h" +#include "verbs.h" namespace Inkscape { namespace Widgets { @@ -74,18 +76,18 @@ public: } private: - Gtk::Widget *_a; + Gtk::Widget *_a; Gtk::Widget *_b; bool _state; }; } -/** LayerSelector constructor. Creates lock and hide buttons, +/** LayerSelector constructor. Creates lock and hide buttons, * initalizes the layer dropdown selector with a label renderer, * and hooks up signal for setting the desktop layer when the * selector is changed. - */ + */ LayerSelector::LayerSelector(SPDesktop *desktop) : _desktop(NULL), _layer(NULL) { @@ -148,7 +150,7 @@ LayerSelector::LayerSelector(SPDesktop *desktop) setDesktop(desktop); } -/** Destructor - disconnects signal handler +/** Destructor - disconnects signal handler */ LayerSelector::~LayerSelector() { setDesktop(NULL); @@ -157,7 +159,7 @@ LayerSelector::~LayerSelector() { namespace { -/** Helper function - detaches desktop from selector +/** Helper function - detaches desktop from selector */ bool detach(LayerSelector *selector) { selector->setDesktop(NULL); @@ -223,7 +225,7 @@ private: } -/** Selects the given layer in the dropdown selector. +/** Selects the given layer in the dropdown selector. */ void LayerSelector::_selectLayer(SPObject *layer) { using Inkscape::Util::List; @@ -290,11 +292,16 @@ void LayerSelector::_setDesktopLayer() { SPObject *layer=_selector.get_active()->get_value(_model_columns.object); if ( _desktop && layer ) { _layer_changed_connection.block(); - _desktop->setCurrentLayer(layer); + + _desktop->layer_manager->setCurrentLayer(layer); + _layer_changed_connection.unblock(); - sp_desktop_selection(_desktop)->clear(); + _selectLayer(_desktop->currentLayer()); } + if (_desktop && _desktop->canvas) { + gtk_widget_grab_focus (GTK_WIDGET(_desktop->canvas)); + } } /** Creates rows in the _layer_model data structure for each item @@ -354,9 +361,9 @@ struct Callbacks { sigc::slot update_list; }; -void attribute_changed(Inkscape::XML::Node *repr, gchar const *name, - gchar const *old_value, gchar const *new_value, - bool is_interactive, void *data) +void attribute_changed(Inkscape::XML::Node */*repr*/, gchar const *name, + gchar const */*old_value*/, gchar const */*new_value*/, + bool /*is_interactive*/, void *data) { if ( !std::strcmp(name, "inkscape:groupmode") ) { reinterpret_cast(data)->update_list(); @@ -365,22 +372,22 @@ void attribute_changed(Inkscape::XML::Node *repr, gchar const *name, } } -void node_added(Inkscape::XML::Node *parent, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, void *data) { +void node_added(Inkscape::XML::Node */*parent*/, Inkscape::XML::Node *child, Inkscape::XML::Node */*ref*/, void *data) { gchar const *mode=child->attribute("inkscape:groupmode"); if ( mode && !std::strcmp(mode, "layer") ) { reinterpret_cast(data)->update_list(); } } -void node_removed(Inkscape::XML::Node *parent, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, void *data) { +void node_removed(Inkscape::XML::Node */*parent*/, Inkscape::XML::Node *child, Inkscape::XML::Node */*ref*/, void *data) { gchar const *mode=child->attribute("inkscape:groupmode"); if ( mode && !std::strcmp(mode, "layer") ) { reinterpret_cast(data)->update_list(); } } -void node_reordered(Inkscape::XML::Node *parent, Inkscape::XML::Node *child, - Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref, +void node_reordered(Inkscape::XML::Node */*parent*/, Inkscape::XML::Node *child, + Inkscape::XML::Node */*old_ref*/, Inkscape::XML::Node */*new_ref*/, void *data) { gchar const *mode=child->attribute("inkscape:groupmode"); @@ -418,6 +425,18 @@ void LayerSelector::_protectUpdate(sigc::slot slot) { _visibility_toggled_connection.block(true); _lock_toggled_connection.block(true); slot(); + + SPObject *layer = _desktop ? _desktop->currentLayer() : 0; + if ( layer ) { + bool wantedValue = ( SP_IS_ITEM(layer) ? SP_ITEM(layer)->isLocked() : false ); + if ( _lock_toggle.get_active() != wantedValue ) { + _lock_toggle.set_active( wantedValue ); + } + wantedValue = ( SP_IS_ITEM(layer) ? SP_ITEM(layer)->isHidden() : false ); + if ( _visibility_toggle.get_active() != wantedValue ) { + _visibility_toggle.set_active( wantedValue ); + } + } _visibility_toggled_connection.block(visibility_blocked); _lock_toggled_connection.block(lock_blocked); } @@ -501,7 +520,7 @@ void LayerSelector::_destroyEntry(Gtk::ListStore::iterator const &row) { delete callbacks; } -/** Formats the label for a given layer row +/** Formats the label for a given layer row */ void LayerSelector::_prepareLabelRenderer( Gtk::TreeModel::const_iterator const &row @@ -545,7 +564,7 @@ void LayerSelector::_prepareLabelRenderer( label = _("(root)"); } - gchar *text = g_markup_printf_escaped(format, label); + gchar *text = g_markup_printf_escaped(format, label); _label_renderer.property_markup() = text; g_free(text); g_free(format); @@ -562,14 +581,16 @@ void LayerSelector::_prepareLabelRenderer( void LayerSelector::_lockLayer(bool lock) { if ( _layer && SP_IS_ITEM(_layer) ) { SP_ITEM(_layer)->setLocked(lock); - sp_document_maybe_done(sp_desktop_document(_desktop), "LayerSelector:lock"); + sp_document_done(sp_desktop_document(_desktop), SP_VERB_NONE, + lock? _("Lock layer") : _("Unlock layer")); } } void LayerSelector::_hideLayer(bool hide) { if ( _layer && SP_IS_ITEM(_layer) ) { SP_ITEM(_layer)->setHidden(hide); - sp_document_maybe_done(sp_desktop_document(_desktop), "LayerSelector:hide"); + sp_document_done(sp_desktop_document(_desktop), SP_VERB_NONE, + hide? _("Hide layer") : _("Unhide layer")); } }