summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoanmarie Diggs <[email protected]>2018-04-26 16:13:50 -0400
committerlukefromdc <[email protected]>2018-05-03 15:31:47 -0400
commit99cf0cad9fc6ceb0f86066e85af242d2f46c3b88 (patch)
treed0b2a6065365c795b8a29c57912ce7e1a8a251b7
parent5e236e94cc6274dc18d88d1b86cb83c7646287fe (diff)
downloadcaja-99cf0cad9fc6ceb0f86066e85af242d2f46c3b88.tar.bz2
caja-99cf0cad9fc6ceb0f86066e85af242d2f46c3b88.tar.xz
Eliminate accessible children-changed event flood on container repopulation
When the icon container is repopulated (e.g. when using back/forward) finish_adding_new_icons is called leading to an accessible children- changed event flood. We can distinguish these unwanted notifications from desired notifications by comparing the number of new icons to add with the size of the container's icon set.
-rw-r--r--libcaja-private/caja-icon-container.c6
-rw-r--r--libcaja-private/caja-icon-private.h1
2 files changed, 5 insertions, 2 deletions
diff --git a/libcaja-private/caja-icon-container.c b/libcaja-private/caja-icon-container.c
index e1db560d..cae3af44 100644
--- a/libcaja-private/caja-icon-container.c
+++ b/libcaja-private/caja-icon-container.c
@@ -7703,6 +7703,8 @@ finish_adding_new_icons (CajaIconContainer *container)
new_icons = container->details->new_icons;
container->details->new_icons = NULL;
+ container->details->is_populating_container =
+ g_list_length(new_icons) == g_hash_table_size(container->details->icon_set);
/* Position most icons (not unpositioned manual-layout icons). */
new_icons = g_list_reverse (new_icons);
@@ -9582,8 +9584,8 @@ caja_icon_container_accessible_icon_added_cb (CajaIconContainer *container,
AtkObject *atk_child;
int index;
- // We don't want to emit children_changed signals during the initial load.
- if (container->details->is_loading)
+ // We don't want to emit children_changed signals during any type of load.
+ if (container->details->is_loading || container->details->is_populating_container)
return;
icon = g_hash_table_lookup (container->details->icon_set, icon_data);
diff --git a/libcaja-private/caja-icon-private.h b/libcaja-private/caja-icon-private.h
index de74cba4..7145a3c4 100644
--- a/libcaja-private/caja-icon-private.h
+++ b/libcaja-private/caja-icon-private.h
@@ -271,6 +271,7 @@ struct CajaIconContainerDetails
GQueue* a11y_item_action_queue;
eel_boolean_bit is_loading : 1;
+ eel_boolean_bit is_populating_container : 1;
eel_boolean_bit store_layout_timestamps : 1;
eel_boolean_bit store_layout_timestamps_when_finishing_new_icons : 1;