diff options
author | Alexander Mikhaylenko <alexm@gnome.org> | 2022-02-16 13:45:21 +0500 |
---|---|---|
committer | Marge Bot <marge-bot@gnome.org> | 2022-02-18 15:47:03 +0000 |
commit | 9464fe084317f8648261b081bd2b494636422ec2 (patch) | |
tree | 161a6e2f772bbd9ab4a50d5186d812ff2614fa82 /lib | |
parent | 646544c089ed88e579e47bb34f977f95a3336d41 (diff) | |
download | epiphany-9464fe084317f8648261b081bd2b494636422ec2.tar.gz |
Stop using gtk_container_get_children() for GtkListBox and GtkFlowBox
Leave one instance in EphyHistoryDialog that gets the last child of the
listbox - that would be painful to do with gtk_list_box_get_row_at_index()
and in GTK4 we'll just use gtk_widget_get_last_child() instead.
Part-of: <https://gitlab.gnome.org/GNOME/epiphany/-/merge_requests/1072>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/widgets/ephy-downloads-popover.c | 36 |
1 files changed, 11 insertions, 25 deletions
diff --git a/lib/widgets/ephy-downloads-popover.c b/lib/widgets/ephy-downloads-popover.c index c91857671..86e2541f0 100644 --- a/lib/widgets/ephy-downloads-popover.c +++ b/lib/widgets/ephy-downloads-popover.c @@ -95,29 +95,22 @@ static void download_removed_cb (EphyDownloadsPopover *popover, EphyDownload *download) { - g_autoptr (GList) children = NULL; - GList *l; EphyDownloadsManager *manager; - - children = gtk_container_get_children (GTK_CONTAINER (popover->downloads_box)); + GtkListBoxRow *row; + int i = 0; /* Hide the popover before removing the last download widget so it "crumples" * more smoothly */ - if (g_list_length (children) == 1) + if (!gtk_list_box_get_row_at_index (GTK_LIST_BOX (popover->downloads_box), 2)) gtk_widget_hide (GTK_WIDGET (popover)); - for (l = children; l; l = g_list_next (l)) { - GtkWidget *widget; - - if (!GTK_IS_LIST_BOX_ROW (l->data)) - continue; - - widget = gtk_bin_get_child (GTK_BIN (l->data)); + while ((row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (popover->downloads_box), i++))) { + GtkWidget *widget = gtk_bin_get_child (GTK_BIN (row)); if (!EPHY_IS_DOWNLOAD_WIDGET (widget)) continue; if (ephy_download_widget_get_download (EPHY_DOWNLOAD_WIDGET (widget)) == download) { - gtk_widget_destroy (l->data); + gtk_container_remove (GTK_CONTAINER (popover->downloads_box), GTK_WIDGET (row)); break; } } @@ -129,31 +122,24 @@ download_removed_cb (EphyDownloadsPopover *popover, static void clear_button_clicked_cb (EphyDownloadsPopover *popover) { - g_autoptr (GList) children = NULL; - GList *l; EphyDownloadsManager *manager; + GtkListBoxRow *row; gtk_widget_hide (GTK_WIDGET (popover)); manager = ephy_embed_shell_get_downloads_manager (ephy_embed_shell_get_default ()); g_signal_handlers_block_by_func (manager, download_removed_cb, popover); - children = gtk_container_get_children (GTK_CONTAINER (popover->downloads_box)); - for (l = children; l; l = g_list_next (l)) { + while ((row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (popover->downloads_box), 0))) { GtkWidget *widget; EphyDownload *download; - if (!GTK_IS_LIST_BOX_ROW (l->data)) - continue; - - widget = gtk_bin_get_child (GTK_BIN (l->data)); - if (!EPHY_IS_DOWNLOAD_WIDGET (widget)) - continue; - + widget = gtk_bin_get_child (GTK_BIN (row)); download = ephy_download_widget_get_download (EPHY_DOWNLOAD_WIDGET (widget)); + if (!ephy_download_is_active (download)) { ephy_downloads_manager_remove_download (manager, download); - gtk_widget_destroy (l->data); + gtk_container_remove (GTK_CONTAINER (popover->downloads_box), GTK_WIDGET (row)); } } gtk_widget_set_sensitive (popover->clear_button, FALSE); |