From 603492342f7dc248e131d783af2606e6bcf6324f Mon Sep 17 00:00:00 2001 From: chr Date: Tue, 23 May 2017 21:48:27 +0200 Subject: bugfix: change active layer note: the actions "LayerNext"/"LayerPrev" (ctrl+pageup/down) never clear the selection, they ignore the user setting "clear selection on layer change" So the object panel will only change if there is no selection! (bzr r15698.1.11) --- src/ui/dialog/objects.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/ui/dialog/objects.cpp') diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index 61ce3ada3..fd78fec90 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -309,11 +309,13 @@ void ObjectsPanel::_objectsChanged(SPObject */*obj*/) SPRoot* root = document->getRoot(); if ( root ) { _selectedConnection.block(); + _documentChangedCurrentLayer.block(); //Clear the tree store _store->clear(); //Add all items recursively _addObject( root, 0 ); _selectedConnection.unblock(); + _documentChangedCurrentLayer.unblock(); //Set the tree selection _objectsSelected(_desktop->selection); //Handle button sensitivity @@ -588,6 +590,7 @@ void ObjectsPanel::_pushTreeSelectionToCurrent() if ( _desktop && _desktop->currentRoot() ) { //block connections for selection and compositing values to prevent interference _selectionChangedConnection.block(); + _documentChangedCurrentLayer.block(); //Clear the selection and then iterate over the tree selection, pushing each item to the desktop _desktop->selection->clear(); @@ -595,6 +598,7 @@ void ObjectsPanel::_pushTreeSelectionToCurrent() _tree.get_selection()->selected_foreach_iter( sigc::bind(sigc::mem_fun(*this, &ObjectsPanel::_selected_row_callback), &setOpacity)); //unblock connections _selectionChangedConnection.unblock(); + _documentChangedCurrentLayer.unblock(); _checkTreeSelection(); } @@ -2056,6 +2060,7 @@ void ObjectsPanel::setDesktop( SPDesktop* desktop ) if ( desktop != _desktop ) { _documentChangedConnection.disconnect(); + _documentChangedCurrentLayer.disconnect(); _selectionChangedConnection.disconnect(); if ( _desktop ) { _desktop = 0; @@ -2065,6 +2070,9 @@ void ObjectsPanel::setDesktop( SPDesktop* desktop ) if ( _desktop ) { //Connect desktop signals _documentChangedConnection = _desktop->connectDocumentReplaced( sigc::mem_fun(*this, &ObjectsPanel::setDocument)); + + _documentChangedCurrentLayer = _desktop->connectCurrentLayerChanged( sigc::mem_fun(*this, &ObjectsPanel::_objectsChanged)); + _selectionChangedConnection = _desktop->selection->connectChanged( sigc::mem_fun(*this, &ObjectsPanel::_objectsSelected)); setDocument(_desktop, _desktop->doc()); -- cgit v1.2.3