|
|
@@ -784,9 +784,14 @@ move(const MouseWatcherParameter ¶m) {
|
|
|
*/
|
|
|
void PGItem::
|
|
|
background_press(const MouseWatcherParameter ¶m) {
|
|
|
- for (PGItem *item : _background_focus) {
|
|
|
+ // We have to be careful, because objects may remove themselves from the set
|
|
|
+ // while we're iterating over it.
|
|
|
+ auto it = _background_focus.begin();
|
|
|
+ while (it != _background_focus.end()) {
|
|
|
+ PGItem *item = *it++;
|
|
|
if (!item->get_focus()) {
|
|
|
- item->press(param, true);
|
|
|
+ PT(PGItem) item_ref(item);
|
|
|
+ item_ref->press(param, true);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -796,9 +801,12 @@ background_press(const MouseWatcherParameter ¶m) {
|
|
|
*/
|
|
|
void PGItem::
|
|
|
background_release(const MouseWatcherParameter ¶m) {
|
|
|
- for (PGItem *item : _background_focus) {
|
|
|
+ auto it = _background_focus.begin();
|
|
|
+ while (it != _background_focus.end()) {
|
|
|
+ PGItem *item = *it++;
|
|
|
if (!item->get_focus()) {
|
|
|
- item->release(param, true);
|
|
|
+ PT(PGItem) item_ref(item);
|
|
|
+ item_ref->release(param, true);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -808,9 +816,12 @@ background_release(const MouseWatcherParameter ¶m) {
|
|
|
*/
|
|
|
void PGItem::
|
|
|
background_keystroke(const MouseWatcherParameter ¶m) {
|
|
|
- for (PGItem *item : _background_focus) {
|
|
|
+ auto it = _background_focus.begin();
|
|
|
+ while (it != _background_focus.end()) {
|
|
|
+ PGItem *item = *it++;
|
|
|
if (!item->get_focus()) {
|
|
|
- item->keystroke(param, true);
|
|
|
+ PT(PGItem) item_ref(item);
|
|
|
+ item_ref->keystroke(param, true);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -820,9 +831,12 @@ background_keystroke(const MouseWatcherParameter ¶m) {
|
|
|
*/
|
|
|
void PGItem::
|
|
|
background_candidate(const MouseWatcherParameter ¶m) {
|
|
|
- for (PGItem *item : _background_focus) {
|
|
|
+ auto it = _background_focus.begin();
|
|
|
+ while (it != _background_focus.end()) {
|
|
|
+ PGItem *item = *it++;
|
|
|
if (!item->get_focus()) {
|
|
|
- item->candidate(param, true);
|
|
|
+ PT(PGItem) item_ref(item);
|
|
|
+ item_ref->candidate(param, true);
|
|
|
}
|
|
|
}
|
|
|
}
|