X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fwidgets%2Flayer-selector.cpp;h=94a891dc24106c7eca22eb889a977a9ae858d85c;hb=094274801cb2c50c17ec95032edb6788b5b5ce0a;hp=34433e9b77005b69ad7c9ce8c4750f105fd552f5;hpb=6b15695578f07a3f72c4c9475c1a261a3021472a;p=inkscape.git diff --git a/src/widgets/layer-selector.cpp b/src/widgets/layer-selector.cpp index 34433e9b7..94a891dc2 100644 --- a/src/widgets/layer-selector.cpp +++ b/src/widgets/layer-selector.cpp @@ -28,6 +28,7 @@ #include "desktop.h" #include "document.h" #include "dialogs/layer-properties.h" +#include "layer-manager.h" #include "xml/node-event-vector.h" namespace Inkscape { @@ -37,7 +38,7 @@ namespace { class AlternateIcons : public Gtk::HBox { public: - AlternateIcons(GtkIconSize size, gchar const *a, gchar const *b) + AlternateIcons(Inkscape::IconSize size, gchar const *a, gchar const *b) : _a(NULL), _b(NULL) { if (a) { @@ -46,7 +47,7 @@ public: add(*_a); } if (b) { - _b = Gtk::manage(sp_icon_get_icon(b,size)); + _b = Gtk::manage(sp_icon_get_icon(b, size)); _b->set_no_show_all(true); add(*_b); } @@ -91,7 +92,7 @@ LayerSelector::LayerSelector(SPDesktop *desktop) { AlternateIcons *label; - label = Gtk::manage(new AlternateIcons(GTK_ICON_SIZE_MENU, "visible", "hidden")); + label = Gtk::manage(new AlternateIcons(Inkscape::ICON_SIZE_DECORATION, "visible", "hidden")); _visibility_toggle.add(*label); _visibility_toggle.signal_toggled().connect( sigc::compose( @@ -111,7 +112,7 @@ LayerSelector::LayerSelector(SPDesktop *desktop) _tooltips.set_tip(_visibility_toggle, _("Toggle current layer visibility")); pack_start(_visibility_toggle, Gtk::PACK_EXPAND_PADDING); - label = Gtk::manage(new AlternateIcons(GTK_ICON_SIZE_MENU, "lock_unlocked", "width_height_lock")); + label = Gtk::manage(new AlternateIcons(Inkscape::ICON_SIZE_DECORATION, "lock_unlocked", "width_height_lock")); _lock_toggle.add(*label); _lock_toggle.signal_toggled().connect( sigc::compose( @@ -290,9 +291,11 @@ 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_DT_SELECTION(_desktop)->clear(); + _selectLayer(_desktop->currentLayer()); } } @@ -418,6 +421,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); } @@ -562,14 +577,14 @@ void LayerSelector::_prepareLabelRenderer( void LayerSelector::_lockLayer(bool lock) { if ( _layer && SP_IS_ITEM(_layer) ) { SP_ITEM(_layer)->setLocked(lock); - sp_document_maybe_done(SP_DT_DOCUMENT(_desktop), "LayerSelector:lock"); + sp_document_maybe_done(sp_desktop_document(_desktop), "LayerSelector:lock"); } } void LayerSelector::_hideLayer(bool hide) { if ( _layer && SP_IS_ITEM(_layer) ) { SP_ITEM(_layer)->setHidden(hide); - sp_document_maybe_done(SP_DT_DOCUMENT(_desktop), "LayerSelector:hide"); + sp_document_maybe_done(sp_desktop_document(_desktop), "LayerSelector:hide"); } }