From 2928e1088e1c92e7ca27d8c32eafe0ca8f8c1de3 Mon Sep 17 00:00:00 2001 From: David Rose Date: Wed, 11 Jun 2008 20:54:50 +0000 Subject: [PATCH] new fix (idea suggested by Clemens Pecinovsky) --- panda/src/tform/mouseWatcher.cxx | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/panda/src/tform/mouseWatcher.cxx b/panda/src/tform/mouseWatcher.cxx index 599ab9d008..6b21bd4ffb 100644 --- a/panda/src/tform/mouseWatcher.cxx +++ b/panda/src/tform/mouseWatcher.cxx @@ -202,7 +202,7 @@ remove_group(MouseWatcherGroup *group) { Regions only_a, only_b, both; intersect_regions(only_a, only_b, both, _current_regions, group->_regions); - _current_regions.swap(only_a); + set_current_regions(only_a); if (has_region_in(both, _preferred_region)) { if (_preferred_region != (MouseWatcherRegion *)NULL) { @@ -271,12 +271,16 @@ replace_group(MouseWatcherGroup *old_group, MouseWatcherGroup *new_group) { intersect_regions(remove, add, keep, old_group->_regions, new_group->_regions); + Regions new_current_regions; + bool any_new_current_regions = false; + // Remove the old regions if (!remove.empty()) { Regions only_a, only_b, both; intersect_regions(only_a, only_b, both, _current_regions, remove); - _current_regions.swap(only_a); + new_current_regions.swap(only_a); + any_new_current_regions = true; if (has_region_in(both, _preferred_region)) { if (_preferred_region != (MouseWatcherRegion *)NULL) { @@ -292,9 +296,19 @@ replace_group(MouseWatcherGroup *old_group, MouseWatcherGroup *new_group) { // And add the new regions if (!add.empty()) { Regions new_list; - intersect_regions(new_list, new_list, new_list, - _current_regions, add); - _current_regions.swap(new_list); + if (any_new_current_regions) { + intersect_regions(new_list, new_list, new_list, + new_current_regions, add); + } else { + intersect_regions(new_list, new_list, new_list, + _current_regions, add); + } + new_current_regions.swap(new_list); + any_new_current_regions = true; + } + + if (any_new_current_regions) { + set_current_regions(new_current_regions); } // Add the new group, if it's not already there.