summaryrefslogtreecommitdiffstats
path: root/src/dialogs
diff options
context:
space:
mode:
authorJon A. Cruz <jon@joncruz.org>2006-05-21 15:58:09 +0000
committerjoncruz <joncruz@users.sourceforge.net>2006-05-21 15:58:09 +0000
commita06c4627fac215a02736eeaa7b2f0c29e3757850 (patch)
treefecc2a6cfd3856681740c0a95b71a319b3f870ce /src/dialogs
parentfix unstable behavior when ctrl+alt+dragging more than one sharp node (diff)
downloadinkscape-a06c4627fac215a02736eeaa7b2f0c29e3757850.tar.gz
inkscape-a06c4627fac215a02736eeaa7b2f0c29e3757850.zip
Adding notification when managed layers change.
(bzr r917)
Diffstat (limited to 'src/dialogs')
-rw-r--r--src/dialogs/layers-panel.cpp28
-rw-r--r--src/dialogs/layers-panel.h8
2 files changed, 30 insertions, 6 deletions
diff --git a/src/dialogs/layers-panel.cpp b/src/dialogs/layers-panel.cpp
index 0ee6ac7e7..21b3102ef 100644
--- a/src/dialogs/layers-panel.cpp
+++ b/src/dialogs/layers-panel.cpp
@@ -350,6 +350,27 @@ public:
Gtk::TreeModelColumn<bool> _colLocked;
};
+void LayersPanel::_updateLayer( SPObject *layer ) {
+ _store->foreach( sigc::bind<SPObject*>(sigc::mem_fun(*this, &LayersPanel::_checkForUpdated), layer) );
+}
+
+bool LayersPanel::_checkForUpdated(const Gtk::TreePath &path, const Gtk::TreeIter& iter, SPObject* layer)
+{
+ bool stopGoing = false;
+ Gtk::TreeModel::Row row = *iter;
+ Glib::ustring tmp = row[_model->_colLabel];
+ if ( layer == row[_model->_colObject] )
+ {
+ row[_model->_colLabel] = layer->label() ? layer->label() : SP_OBJECT_ID(layer);
+ row[_model->_colVisible] = SP_IS_ITEM(layer) ? !SP_ITEM(layer)->isHidden() : false;
+ row[_model->_colLocked] = SP_IS_ITEM(layer) ? SP_ITEM(layer)->isLocked() : false;
+
+ stopGoing = true;
+ }
+
+ return stopGoing;
+}
+
void LayersPanel::_selectLayer( SPObject *layer ) {
if ( !layer || (_desktop && _desktop->doc() && (layer == _desktop->doc()->root)) ) {
if ( _tree.get_selection()->count_selected_rows() != 0 ) {
@@ -705,6 +726,7 @@ void LayersPanel::setDesktop( SPDesktop* desktop )
{
if ( desktop != _desktop ) {
_layerChangedConnection.disconnect();
+ _layerUpdatedConnection.disconnect();
_changedConnection.disconnect();
if ( _mgr ) {
_mgr = 0;
@@ -715,13 +737,13 @@ void LayersPanel::setDesktop( SPDesktop* desktop )
_desktop = SP_ACTIVE_DESKTOP;
if ( _desktop ) {
- _layerChangedConnection = _desktop->connectCurrentLayerChanged( sigc::mem_fun(*this, &LayersPanel::_selectLayer) );
-
setLabel( _desktop->doc()->name );
_mgr = _desktop->layer_manager;
if ( _mgr ) {
- _mgr->connectChanged( sigc::mem_fun(*this, &LayersPanel::_layersChanged) );
+ _layerChangedConnection = _mgr->connectCurrentLayerChanged( sigc::mem_fun(*this, &LayersPanel::_selectLayer) );
+ _layerUpdatedConnection = _mgr->connectLayerDetailsChanged( sigc::mem_fun(*this, &LayersPanel::_updateLayer) );
+ _changedConnection = _mgr->connectChanged( sigc::mem_fun(*this, &LayersPanel::_layersChanged) );
}
_layersChanged();
diff --git a/src/dialogs/layers-panel.h b/src/dialogs/layers-panel.h
index bdfab6b29..f7a9f0799 100644
--- a/src/dialogs/layers-panel.h
+++ b/src/dialogs/layers-panel.h
@@ -71,6 +71,9 @@ private:
void _takeAction( int val );
bool _executeAction();
+ void _updateLayer(SPObject *layer);
+ bool _checkForUpdated(const Gtk::TreePath &path, const Gtk::TreeIter& iter, SPObject* layer);
+
void _selectLayer(SPObject *layer);
bool _checkForSelected(const Gtk::TreePath& path, const Gtk::TreeIter& iter, SPObject* layer);
@@ -79,10 +82,9 @@ private:
SPObject* _selectedLayer();
- // Hooked to the desktop:
- sigc::connection _layerChangedConnection;
-
// Hooked to the layer manager:
+ sigc::connection _layerChangedConnection;
+ sigc::connection _layerUpdatedConnection;
sigc::connection _changedConnection;
sigc::connection _addedConnection;
sigc::connection _removedConnection;