From 4cd61dfa7d9363082c8161823634f497b82d8f98 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Thu, 30 Jun 2011 13:34:23 +0200 Subject: [PATCH] fix invert selection logic --- radiant/select.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/radiant/select.cpp b/radiant/select.cpp index c232da20..f4e8b7f9 100644 --- a/radiant/select.cpp +++ b/radiant/select.cpp @@ -290,13 +290,16 @@ void Select_Delete (void) class InvertSelectionWalker : public scene::Graph::Walker { SelectionSystem::EMode m_mode; - mutable Selectable* m_selectable; public: InvertSelectionWalker(SelectionSystem::EMode mode) - : m_mode(mode), m_selectable(0) + : m_mode(mode) { } bool pre(const scene::Path& path, scene::Instance& instance) const + { + return true; + } + void post(const scene::Path& path, scene::Instance& instance) const { Selectable* selectable = Instance_getSelectable(instance); if(selectable) @@ -305,26 +308,17 @@ public: { case SelectionSystem::eEntity: if(Node_isEntity(path.top()) != 0) - { - m_selectable = path.top().get().visible() ? selectable : 0; - } + if(path.top().get().visible()) + selectable->setSelected(!selectable->isSelected()); break; case SelectionSystem::ePrimitive: - m_selectable = path.top().get().visible() ? selectable : 0; + if(path.top().get().visible()) + selectable->setSelected(!selectable->isSelected()); break; case SelectionSystem::eComponent: break; } } - return true; - } - void post(const scene::Path& path, scene::Instance& instance) const - { - if(m_selectable != 0) - { - m_selectable->setSelected(!m_selectable->isSelected()); - m_selectable = 0; - } } }; -- 2.39.2