From a06c4627fac215a02736eeaa7b2f0c29e3757850 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 21 May 2006 15:58:09 +0000 Subject: Adding notification when managed layers change. (bzr r917) --- src/layer-manager.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/layer-manager.cpp') diff --git a/src/layer-manager.cpp b/src/layer-manager.cpp index c2999f6c8..ab2dff107 100644 --- a/src/layer-manager.cpp +++ b/src/layer-manager.cpp @@ -23,7 +23,7 @@ namespace Inkscape { LayerManager::LayerManager(SPDesktop *desktop) : _desktop(desktop), _document(NULL) { -// _layer_connection = desktop->connectCurrentLayerChanged( sigc::hide<0>( sigc::mem_fun(*this, &LayerManager::_rebuild) ) ); + _layer_connection = desktop->connectCurrentLayerChanged( sigc::mem_fun(*this, &LayerManager::_selectedLayerChanged) ); sigc::bound_mem_functor1 first = sigc::mem_fun(*this, &LayerManager::_setDocument); @@ -47,6 +47,17 @@ void LayerManager::_setDocument(SPDocument *document) { _rebuild(); } + +void LayerManager::_objectModifiedCB( SPObject* obj, guint flags, LayerManager* mgr ) +{ + mgr->_objectModified( obj, flags ); +} + +void LayerManager::_objectModified( SPObject* obj, guint flags ) +{ + _details_changed_signal.emit( obj ); +} + void LayerManager::_rebuild() { _clear(); GSList const *layers=sp_document_get_resource_list(_document, "layer"); @@ -69,6 +80,8 @@ void LayerManager::_rebuild() { } Inkscape::XML::Node* node = higher ? SP_OBJECT_REPR(higher) : 0; if ( node && node->parent() ) { + g_signal_connect( G_OBJECT(curr), "modified", G_CALLBACK( _objectModifiedCB ), this ); + _addOne(curr); } } @@ -77,6 +90,13 @@ void LayerManager::_rebuild() { } } +// Connected to the desktop's CurrentLayerChanged signal +void LayerManager::_selectedLayerChanged(SPObject *layer) +{ + // notify anyone who's listening to this instead of directly to the desktop + _layer_changed_signal.emit(layer); +} + } /* -- cgit v1.2.3