diff --git a/ChangeLog b/ChangeLog index 85818de22..327e73776 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2000-08-03 Darin Adler + + * check-signals.pl: Wrote a script to check for people who forget + to call gtk_object_class_add_signals. It found only one violation, + and that was already fixed by the time I got around to checking + this in. + + * libnautilus-extensions/nautilus-directory-async.c: + (get_info_callback): Added a code to check the error result from + get_file_info. Without this, we were doing + + * src/nautilus-sidebar-title.c: (nautilus_sidebar_title_set_uri): + Fixed it so we won't destroy and then instantly recreate the same + NautilusFile if the URI is set to the same value. + 2000-08-03 Michael K. Fleming * diff --git a/check-signals.pl b/check-signals.pl new file mode 100755 index 000000000..822c20e04 --- /dev/null +++ b/check-signals.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl -w +# -*- Mode: perl; indent-tabs-mode: nil -*- + +# +# Nautilus +# +# Copyright (C) 2000 Eazel, Inc. +# +# This script is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This script is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this script; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Author: Darin Adler , +# + +# check-signals.pl: Search for .c files where someone forgot to +# put a call to gtk_object_class_add_signals. + +use diagnostics; +use strict; + +# default to all the files starting from the current directory +if (!@ARGV) + { + @ARGV = `find . -name '*.c' -print`; + } + +# locate all of the target lines +my @missing_files; +FILE: foreach my $file (@ARGV) + { + my $has_signal_new; + my $has_add_signals; + chomp $file; + open FILE, $file or die "can't open $file"; + while () + { + $has_signal_new = 1 if /gtk_signal_new/; + $has_add_signals = 1 if /gtk_object_class_add_signals/; + } + close FILE; + push @missing_files, $file if $has_signal_new && !$has_add_signals; + } + +if (@missing_files) + { + print "\n", scalar(@missing_files), " C files are missing a call to gtk_object_class_add_signals.\n\n"; + print join("\n", @missing_files), "\n"; + } + diff --git a/libnautilus-extensions/nautilus-directory-async.c b/libnautilus-extensions/nautilus-directory-async.c index 0f1c00b44..66188ba57 100644 --- a/libnautilus-extensions/nautilus-directory-async.c +++ b/libnautilus-extensions/nautilus-directory-async.c @@ -2035,13 +2035,14 @@ get_info_callback (GnomeVFSAsyncHandle *handle, get_info_file = directory->details->get_info_file; g_assert (NAUTILUS_IS_FILE (get_info_file)); - result = results->data; - nautilus_file_update_info (get_info_file, result->file_info); - directory->details->get_info_file = NULL; directory->details->get_info_in_progress = NULL; - - nautilus_file_changed (get_info_file); + + result = results->data; + if (result->result == GNOME_VFS_OK) { + nautilus_file_update_info (get_info_file, result->file_info); + nautilus_file_changed (get_info_file); + } nautilus_directory_async_state_changed (directory); } diff --git a/libnautilus-private/nautilus-directory-async.c b/libnautilus-private/nautilus-directory-async.c index 0f1c00b44..66188ba57 100644 --- a/libnautilus-private/nautilus-directory-async.c +++ b/libnautilus-private/nautilus-directory-async.c @@ -2035,13 +2035,14 @@ get_info_callback (GnomeVFSAsyncHandle *handle, get_info_file = directory->details->get_info_file; g_assert (NAUTILUS_IS_FILE (get_info_file)); - result = results->data; - nautilus_file_update_info (get_info_file, result->file_info); - directory->details->get_info_file = NULL; directory->details->get_info_in_progress = NULL; - - nautilus_file_changed (get_info_file); + + result = results->data; + if (result->result == GNOME_VFS_OK) { + nautilus_file_update_info (get_info_file, result->file_info); + nautilus_file_changed (get_info_file); + } nautilus_directory_async_state_changed (directory); } diff --git a/src/nautilus-sidebar-title.c b/src/nautilus-sidebar-title.c index e7e64af2b..729b54404 100644 --- a/src/nautilus-sidebar-title.c +++ b/src/nautilus-sidebar-title.c @@ -425,33 +425,39 @@ nautilus_sidebar_title_set_uri (NautilusSidebarTitle *sidebar_title, const char *initial_text) { GList *attributes; - - release_file (sidebar_title); + NautilusFile *file; if (new_uri == NULL) { - sidebar_title->details->file = NULL; + file = NULL; } else { - sidebar_title->details->file = nautilus_file_get (new_uri); + file = nautilus_file_get (new_uri); } - /* attach file */ - if (sidebar_title->details->file != NULL) { - sidebar_title->details->file_changed_connection = - gtk_signal_connect_object (GTK_OBJECT (sidebar_title->details->file), - "changed", - update_all, - GTK_OBJECT (sidebar_title)); - - /* Monitor the things needed to get the right - * icon. Also monitor a directory's item count because - * the "size" attribute is based on that. - */ - attributes = nautilus_icon_factory_get_required_file_attributes (); - attributes = g_list_prepend (attributes, - NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT); - nautilus_file_monitor_add (sidebar_title->details->file, sidebar_title, - attributes, TRUE); - g_list_free (attributes); + if (file == sidebar_title->details->file) { + nautilus_file_unref (file); + } else { + release_file (sidebar_title); + sidebar_title->details->file = file; + + /* attach file */ + if (file != NULL) { + sidebar_title->details->file_changed_connection = + gtk_signal_connect_object (GTK_OBJECT (sidebar_title->details->file), + "changed", + update_all, + GTK_OBJECT (sidebar_title)); + + /* Monitor the things needed to get the right + * icon. Also monitor a directory's item count because + * the "size" attribute is based on that. + */ + attributes = nautilus_icon_factory_get_required_file_attributes (); + attributes = g_list_prepend (attributes, + NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT); + nautilus_file_monitor_add (sidebar_title->details->file, sidebar_title, + attributes, TRUE); + g_list_free (attributes); + } } g_free (sidebar_title->details->title_text);