Skip to content

Commit 83720c7

Browse files
gtkui: fix stalls on large medialib when selecting items
1 parent 37cbcfe commit 83720c7

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

plugins/gtkui/medialib/medialibwidget.c

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ typedef struct {
4141
GtkTreeStore *store;
4242
ddb_medialib_item_t *item_tree;
4343
gint collapse_expand_select_timeout;
44-
int is_reloading;
44+
gboolean is_reloading;
45+
gboolean has_changed_selection;
4546
MlCellRendererPixbufDelegate pixbuf_cell_delegate;
4647

4748
GdkPixbuf *folder_icon;
@@ -175,7 +176,7 @@ _reload_content (w_medialib_viewer_t *mlv) {
175176
free (curr_preset);
176177
}
177178

178-
mlv->is_reloading = 1;
179+
mlv->is_reloading = TRUE;
179180
// clear
180181
GtkTreeIter iter;
181182
if (gtk_tree_model_iter_children (GTK_TREE_MODEL (store), &iter, &mlv->root_iter)) {
@@ -194,7 +195,7 @@ _reload_content (w_medialib_viewer_t *mlv) {
194195
// restore selected/expanded state
195196
_restore_selected_expanded_state_for_iter (mlv, store, &mlv->root_iter);
196197

197-
mlv->is_reloading = 0;
198+
mlv->is_reloading = FALSE;
198199
}
199200

200201
static gboolean
@@ -310,8 +311,7 @@ _restore_selected_expanded_state_for_iter (w_medialib_viewer_t *mlv, GtkTreeStor
310311
static gboolean
311312
_row_collapse_expand_selection_did_change (void *user_data) {
312313
w_medialib_viewer_t *mlv = user_data;
313-
GtkTreeStore *store = mlv->store;
314-
_save_selection_state_with_iter (mlv, store, &mlv->root_iter);
314+
mlv->has_changed_selection = TRUE;
315315
mlv->collapse_expand_select_timeout = 0;
316316
return FALSE;
317317
}
@@ -602,17 +602,28 @@ _select_at_position (GtkTreeView *treeview, gint x, gint y) {
602602
return TRUE;
603603
}
604604

605+
static void
606+
_refresh_mediasource(w_medialib_viewer_t *mlv) {
607+
if (mlv->has_changed_selection) {
608+
GtkTreeStore *store = mlv->store;
609+
_save_selection_state_with_iter (mlv, store, &mlv->root_iter);
610+
mlv->has_changed_selection = FALSE;
611+
}
612+
613+
plugin->refresh (mlv->source);
614+
}
615+
605616
static void
606617
_trkproperties_did_change_tracks (void *user_data) {
607618
w_medialib_viewer_t *mlv = user_data;
608-
plugin->refresh (mlv->source);
619+
_refresh_mediasource(mlv);
609620
}
610621

611622
static void
612623
_trkproperties_did_delete_files (void *user_data, int cancelled) {
613624
if (!cancelled) {
614625
w_medialib_viewer_t *mlv = user_data;
615-
plugin->refresh (mlv->source);
626+
_refresh_mediasource(mlv);
616627
}
617628
}
618629

0 commit comments

Comments
 (0)