diff --git a/src/desktop.cpp b/src/desktop.cpp index 7abd51c830883fcbfefbc9be61a2bc0a44390135..846202fb2ded0dae1624884fa5dd50882c76f3b7 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -182,6 +182,11 @@ void SPDesktop::_setupCanvasItems() _canvas_drawing->connect_drawing_event(sigc::mem_fun(*this, &SPDesktop::drawing_handler)); canvas->set_drawing(_canvas_drawing->get_drawing()); + + _layer_changed_connection = _layer_manager->connectCurrentLayerChanged([this](SPGroup *group) { + updateTranslucenyGroups(); + }); + } SPDesktop::~SPDesktop() @@ -1395,6 +1400,17 @@ void SPDesktop::on_zoom_end(Gdk::EventSequence * /*sequence*/) _begin_zoom.reset(); } +/** + * Set or unset the translucency group if needed. + */ +void SPDesktop::updateTranslucenyGroups() +{ + auto group = _layer_manager->currentLayer(); + bool enabled = !group->isLayer(); + // TODO: Add preference to control this here? + _translucency_group->setSolidItem(enabled ? group : nullptr); +} + /* Local Variables: mode:c++ diff --git a/src/desktop.h b/src/desktop.h index 63c4c010643b62bdc5e63bdf9e25c6a21e27983d..39a66eaa1487006da28e913ef7976131ca5b0627 100644 --- a/src/desktop.h +++ b/src/desktop.h @@ -550,6 +550,7 @@ private: sigc::scoped_connection _reconstruction_finish_connection; sigc::scoped_connection _schedule_zoom_from_document_connection; sigc::scoped_connection _y_axis_flipped; + sigc::scoped_connection _layer_changed_connection; bool drawing_handler(Inkscape::CanvasEvent const &event, Inkscape::DrawingItem *item); void reconstruction_start(); @@ -563,6 +564,8 @@ private: void on_zoom_end(Gdk::EventSequence *sequence); void onStatusMessage(Inkscape::MessageType type, char const *message); + + void updateTranslucenyGroups(); }; #endif // INKSCAPE_DESKTOP_H