[nautilus/wip/antoniof/gtk4-preparation-miscellaneous: 6/6] general: Stop overriding GtkWidget.destroy()
- From: António Fernandes <antoniof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus/wip/antoniof/gtk4-preparation-miscellaneous: 6/6] general: Stop overriding GtkWidget.destroy()
- Date: Mon, 16 Aug 2021 09:02:09 +0000 (UTC)
commit 3b53d7b2f4fc6f806a9b4153697212bf7543e84f
Author: António Fernandes <antoniof gnome org>
Date: Sun Aug 15 21:50:02 2021 +0100
general: Stop overriding GtkWidget.destroy()
It's gone in GTK4.
Anything we are doing on ::destroy can be done on ::dispose().
Extra care must be taken, however, because GObject.dispose() may be
run multiple times.
Also, while we are at it, move some object unreferencing from
.finalize() to .dispose(), which is where we should do it.
src/nautilus-files-view.c | 42 ++++++++++++++++++++--------------------
src/nautilus-location-entry.c | 18 ++++++++---------
src/nautilus-properties-window.c | 6 +++---
src/nautilus-window.c | 27 +++++++++-----------------
4 files changed, 41 insertions(+), 52 deletions(-)
---
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index f013fa68c..ef0b615c9 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -3248,7 +3248,7 @@ nautilus_files_view_set_selection (NautilusView *nautilus_files_view,
}
static void
-nautilus_files_view_destroy (GtkWidget *object)
+nautilus_files_view_dispose (GObject *object)
{
NautilusFilesView *view;
NautilusFilesViewPrivate *priv;
@@ -3341,11 +3341,18 @@ nautilus_files_view_destroy (GtkWidget *object)
g_clear_object (&priv->search_query);
g_clear_object (&priv->location);
+ g_clear_object (&priv->view_action_group);
+ g_clear_object (&priv->background_menu_model);
+ g_clear_object (&priv->selection_menu_model);
+ g_clear_object (&priv->toolbar_menu_sections->zoom_section);
+ g_clear_object (&priv->toolbar_menu_sections->extended_section);
+ g_clear_object (&priv->extensions_background_menu);
+ g_clear_object (&priv->templates_menu);
+ g_clear_object (&priv->rename_file_controller);
+ g_clear_object (&priv->new_folder_controller);
+ g_clear_object (&priv->compress_controller);
- /* We don't own the slot, so no unref */
- priv->slot = NULL;
-
- GTK_WIDGET_CLASS (nautilus_files_view_parent_class)->destroy (object);
+ G_OBJECT_CLASS (nautilus_files_view_parent_class)->dispose (object);
}
static void
@@ -3357,16 +3364,9 @@ nautilus_files_view_finalize (GObject *object)
view = NAUTILUS_FILES_VIEW (object);
priv = nautilus_files_view_get_instance_private (view);
- g_clear_object (&priv->view_action_group);
- g_clear_object (&priv->background_menu_model);
- g_clear_object (&priv->selection_menu_model);
- g_clear_object (&priv->toolbar_menu_sections->zoom_section);
- g_clear_object (&priv->toolbar_menu_sections->extended_section);
- g_clear_object (&priv->extensions_background_menu);
- g_clear_object (&priv->templates_menu);
- g_clear_object (&priv->rename_file_controller);
- g_clear_object (&priv->new_folder_controller);
- g_clear_object (&priv->compress_controller);
+ /* We don't own the slot, so no unref */
+ priv->slot = NULL;
+
g_free (priv->toolbar_menu_sections);
g_hash_table_destroy (priv->non_ready_files);
@@ -7327,7 +7327,7 @@ on_clipboard_contents_received (GtkClipboard *clipboard,
view = NAUTILUS_FILES_VIEW (user_data);
priv = nautilus_files_view_get_instance_private (view);
- if (priv->slot == NULL ||
+ if (priv->in_destruction ||
!priv->active)
{
/* We've been destroyed or became inactive since call */
@@ -7369,7 +7369,7 @@ on_clipboard_targets_received (GtkClipboard *clipboard,
priv = nautilus_files_view_get_instance_private (view);
is_data_copied = FALSE;
- if (priv->slot == NULL ||
+ if (priv->in_destruction ||
!priv->active)
{
/* We've been destroyed or became inactive since call */
@@ -8400,7 +8400,7 @@ nautilus_files_view_update_toolbar_menus (NautilusFilesView *view)
/* Don't update after destroy (#349551),
* or if we are not active.
*/
- if (priv->slot == NULL ||
+ if (priv->in_destruction ||
!priv->active)
{
return;
@@ -8557,7 +8557,7 @@ schedule_update_context_menus (NautilusFilesView *view)
/* Don't schedule updates after destroy (#349551),
* or if we are not active.
*/
- if (priv->slot == NULL ||
+ if (priv->in_destruction ||
!priv->active)
{
return;
@@ -8608,7 +8608,7 @@ schedule_update_status (NautilusFilesView *view)
priv = nautilus_files_view_get_instance_private (view);
/* Make sure we haven't already destroyed it */
- if (priv->slot == NULL)
+ if (priv->in_destruction)
{
return;
}
@@ -9699,11 +9699,11 @@ nautilus_files_view_class_init (NautilusFilesViewClass *klass)
widget_class = GTK_WIDGET_CLASS (klass);
oclass = G_OBJECT_CLASS (klass);
+ oclass->dispose = nautilus_files_view_dispose;
oclass->finalize = nautilus_files_view_finalize;
oclass->get_property = nautilus_files_view_get_property;
oclass->set_property = nautilus_files_view_set_property;
- widget_class->destroy = nautilus_files_view_destroy;
widget_class->event = nautilus_files_view_event;
widget_class->parent_set = nautilus_files_view_parent_set;
widget_class->grab_focus = nautilus_files_view_grab_focus;
diff --git a/src/nautilus-location-entry.c b/src/nautilus-location-entry.c
index 91b9ec7cb..4e1043396 100644
--- a/src/nautilus-location-entry.c
+++ b/src/nautilus-location-entry.c
@@ -576,18 +576,14 @@ finalize (GObject *object)
entry = NAUTILUS_LOCATION_ENTRY (object);
priv = nautilus_location_entry_get_instance_private (entry);
- g_object_unref (priv->completer);
g_free (priv->special_text);
-
- g_clear_object (&priv->last_location);
- g_clear_object (&priv->completion);
- g_clear_object (&priv->completions_store);
+ g_free (priv->current_directory);
G_OBJECT_CLASS (nautilus_location_entry_parent_class)->finalize (object);
}
static void
-destroy (GtkWidget *object)
+nautilus_location_entry_dispose (GObject *object)
{
NautilusLocationEntry *entry;
NautilusLocationEntryPrivate *priv;
@@ -602,10 +598,12 @@ destroy (GtkWidget *object)
priv->idle_id = 0;
}
- g_free (priv->current_directory);
- priv->current_directory = NULL;
+ g_clear_object (&priv->completer);
+ g_clear_object (&priv->last_location);
+ g_clear_object (&priv->completion);
+ g_clear_object (&priv->completions_store);
- GTK_WIDGET_CLASS (nautilus_location_entry_parent_class)->destroy (object);
+ G_OBJECT_CLASS (nautilus_location_entry_parent_class)->dispose (object);
}
static void
@@ -851,10 +849,10 @@ nautilus_location_entry_class_init (NautilusLocationEntryClass *class)
GtkBindingSet *binding_set;
widget_class = GTK_WIDGET_CLASS (class);
- widget_class->destroy = destroy;
widget_class->event = nautilus_location_entry_on_event;
gobject_class = G_OBJECT_CLASS (class);
+ gobject_class->dispose = nautilus_location_entry_dispose;
gobject_class->finalize = finalize;
entry_class = GTK_ENTRY_CLASS (class);
diff --git a/src/nautilus-properties-window.c b/src/nautilus-properties-window.c
index a841eed97..c0bfdaa79 100644
--- a/src/nautilus-properties-window.c
+++ b/src/nautilus-properties-window.c
@@ -5090,7 +5090,7 @@ nautilus_properties_window_present (GList *original_f
}
static void
-real_destroy (GtkWidget *object)
+real_dispose (GObject *object)
{
NautilusPropertiesWindow *self;
@@ -5133,7 +5133,7 @@ real_destroy (GtkWidget *object)
g_clear_handle_id (&self->update_directory_contents_timeout_id, g_source_remove);
g_clear_handle_id (&self->update_files_timeout_id, g_source_remove);
- GTK_WIDGET_CLASS (nautilus_properties_window_parent_class)->destroy (object);
+ G_OBJECT_CLASS (nautilus_properties_window_parent_class)->dispose (object);
}
static void
@@ -5375,8 +5375,8 @@ nautilus_properties_window_class_init (NautilusPropertiesWindowClass *klass)
widget_class = GTK_WIDGET_CLASS (klass);
oclass = G_OBJECT_CLASS (klass);
+ oclass->dispose = real_dispose;
oclass->finalize = real_finalize;
- widget_class->destroy = real_destroy;
binding_set = gtk_binding_set_by_class (klass);
g_signal_new ("close",
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 54566b94d..945f3a833 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -2181,8 +2181,9 @@ destroy_slots_foreach (gpointer data,
close_slot (window, slot, TRUE);
}
+
static void
-nautilus_window_destroy (GtkWidget *object)
+nautilus_window_dispose (GObject *object)
{
NautilusWindow *window;
NautilusApplication *application;
@@ -2209,23 +2210,19 @@ nautilus_window_destroy (GtkWidget *object)
g_clear_weak_pointer (&window->active_slot);
- g_clear_signal_handler (&window->bookmarks_id, nautilus_application_get_bookmarks (application));
+ if (application != NULL)
+ {
+ g_clear_signal_handler (&window->bookmarks_id, nautilus_application_get_bookmarks (application));
+ }
g_clear_handle_id (&window->in_app_notification_undo_timeout_id, g_source_remove);
nautilus_window_unexport_handle (window);
- GTK_WIDGET_CLASS (nautilus_window_parent_class)->destroy (object);
-}
-
-static void
-nautilus_window_dispose (GObject *object)
-{
- NautilusWindow *window;
-
- window = NAUTILUS_WINDOW (object);
-
+ g_clear_object (&window->selected_file);
+ g_clear_object (&window->selected_volume);
g_clear_object (&window->notebook_multi_press_gesture);
+ g_clear_object (&window->pad_controller);
G_OBJECT_CLASS (nautilus_window_parent_class)->dispose (object);
}
@@ -2255,17 +2252,12 @@ nautilus_window_finalize (GObject *object)
window->notification_operation_timeout_id = 0;
}
- g_clear_object (&window->selected_file);
- g_clear_object (&window->selected_volume);
-
g_signal_handlers_disconnect_by_func (nautilus_file_undo_manager_get (),
G_CALLBACK (nautilus_window_on_undo_changed),
window);
g_queue_free_full (window->tab_data_queue, free_navigation_state);
- g_object_unref (window->pad_controller);
-
/* nautilus_window_close() should have run */
g_assert (window->slots == NULL);
@@ -2744,7 +2736,6 @@ nautilus_window_class_init (NautilusWindowClass *class)
oclass->finalize = nautilus_window_finalize;
oclass->constructed = nautilus_window_constructed;
- wclass->destroy = nautilus_window_destroy;
wclass->show = nautilus_window_show;
wclass->realize = nautilus_window_realize;
wclass->key_press_event = nautilus_window_key_press_event;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]