Fixed an uninitialized variable problem that caused a crash on boot for

* src/nautilus-sidebar-tabs.c: (draw_or_hit_test_all_tabs):
	Fixed an uninitialized variable problem that caused a crash on
	boot for Kai Lahmann (thanks for the help, Kai).

	* libnautilus-extensions/nautilus-file.c:
	(nautilus_file_compare_for_sort_internal):
	(nautilus_file_get_string_attribute), Got rid of "real_name"
	and made "name" just do what "real_name" did before. Renamed
	"real_directory" to just "directory".

	* src/file-manager/fm-list-view.h:
	* src/file-manager/fm-list-view-private.h:
	* src/file-manager/fm-list-view.c: (fm_list_view_initialize_class),
	(fm_list_view_initialize), (fm_list_view_destroy),
	(fm_list_view_compare_rows), (compare_rows_by_name),
	(match_row_name), (select_matching_name_callback),
	(fm_list_nautilus_file_at), (row_get_data_binder),
	(fm_list_get_drag_pixmap), (create_list), (set_up_list),
	(add_to_list), (get_list), (fm_list_view_begin_loading),
	(fm_list_view_set_zoom_level), (fm_list_view_sort_items),
	(get_column_from_attribute), (get_sort_column_from_attribute),
	(install_row_images), (update_icons),
	(fm_list_view_embedded_text_policy_changed),
	(fm_list_view_image_display_policy_changed),
	(get_number_of_columns), (get_link_column),
	(get_column_specification), (get_column_titles),
	(get_column_attribute), (get_column_sort_criterion),
	(fm_list_view_column_set), (real_get_number_of_columns),
	(real_get_link_column), (real_get_column_specification):
	* src/file-manager/fm-search-list-view.h:
	* src/file-manager/fm-search-list-view.c:
	(fm_search_list_view_initialize_class),
	(fm_search_list_view_initialize), (real_get_number_of_columns),
	(real_get_link_column), (real_get_column_specification):
	Refactored the list view code so that the search list view
	doesn't have to replicate anything and can just describe the
	differences between it and the non-search list view. I was
	able to get rid of a lot of complexity while doing this.
	Changed to use the new "name" and "directory" instead of the
	old "real_name" and "real_directory" at the same time.

	* libnautilus-extensions/nautilus-file.c:
	(nautilus_file_new_from_name), (nautilus_file_get), (destroy),
	(nautilus_file_is_self_owned),
	(nautilus_file_get_parent_uri_as_string),
	(get_file_for_parent_directory), (nautilus_file_rename),
	(nautilus_file_get_gnome_vfs_uri),
	(nautilus_file_get_uri), (nautilus_file_mark_gone),
	(nautilus_file_changed):
	* libnautilus-extensions/nautilus-directory-private.h:
	* libnautilus-extensions/nautilus-directory-async.c:
	(select_needy_file):
	Redid the "self-owning" file handling (for URIs with no parent) so
	that a URI doesn't show up as one of its own children.

	* libnautilus-extensions/nautilus-directory.c:
	(nautilus_directory_is_search_directory):
	Took out "gnome-trash:" which doesn't belong in here. We are doing
	trash at the NautilusDirectory level, not the gnome-vfs level.

	* icons/arlo/backgrounds/.cvsignore: [added]
	* icons/arlo/backgrounds/Makefile.in: [removed]
	Added the missing cvsignore file and got rid of the Makefile.in,
	which should not be in cvs.
This commit is contained in:
Darin Adler 2000-08-02 01:42:02 +00:00
parent 2d9ab4129d
commit a0be119686
17 changed files with 767 additions and 1014 deletions

View file

@ -1,6 +1,73 @@
2000-08-01 Darin Adler <darin@eazel.com>
* src/nautilus-sidebar-tabs.c: (draw_or_hit_test_all_tabs):
Fixed an uninitialized variable problem that caused a crash on
boot for Kai Lahmann (thanks for the help, Kai).
* libnautilus-extensions/nautilus-file.c:
(nautilus_file_compare_for_sort_internal):
(nautilus_file_get_string_attribute), Got rid of "real_name"
and made "name" just do what "real_name" did before. Renamed
"real_directory" to just "directory".
* src/file-manager/fm-list-view.h:
* src/file-manager/fm-list-view-private.h:
* src/file-manager/fm-list-view.c: (fm_list_view_initialize_class),
(fm_list_view_initialize), (fm_list_view_destroy),
(fm_list_view_compare_rows), (compare_rows_by_name),
(match_row_name), (select_matching_name_callback),
(fm_list_nautilus_file_at), (row_get_data_binder),
(fm_list_get_drag_pixmap), (create_list), (set_up_list),
(add_to_list), (get_list), (fm_list_view_begin_loading),
(fm_list_view_set_zoom_level), (fm_list_view_sort_items),
(get_column_from_attribute), (get_sort_column_from_attribute),
(install_row_images), (update_icons),
(fm_list_view_embedded_text_policy_changed),
(fm_list_view_image_display_policy_changed),
(get_number_of_columns), (get_link_column),
(get_column_specification), (get_column_titles),
(get_column_attribute), (get_column_sort_criterion),
(fm_list_view_column_set), (real_get_number_of_columns),
(real_get_link_column), (real_get_column_specification):
* src/file-manager/fm-search-list-view.h:
* src/file-manager/fm-search-list-view.c:
(fm_search_list_view_initialize_class),
(fm_search_list_view_initialize), (real_get_number_of_columns),
(real_get_link_column), (real_get_column_specification):
Refactored the list view code so that the search list view
doesn't have to replicate anything and can just describe the
differences between it and the non-search list view. I was
able to get rid of a lot of complexity while doing this.
Changed to use the new "name" and "directory" instead of the
old "real_name" and "real_directory" at the same time.
* libnautilus-extensions/nautilus-file.c:
(nautilus_file_new_from_name), (nautilus_file_get), (destroy),
(nautilus_file_is_self_owned),
(nautilus_file_get_parent_uri_as_string),
(get_file_for_parent_directory), (nautilus_file_rename),
(nautilus_file_get_gnome_vfs_uri),
(nautilus_file_get_uri), (nautilus_file_mark_gone),
(nautilus_file_changed):
* libnautilus-extensions/nautilus-directory-private.h:
* libnautilus-extensions/nautilus-directory-async.c:
(select_needy_file):
Redid the "self-owning" file handling (for URIs with no parent) so
that a URI doesn't show up as one of its own children.
* libnautilus-extensions/nautilus-directory.c:
(nautilus_directory_is_search_directory):
Took out "gnome-trash:" which doesn't belong in here. We are doing
trash at the NautilusDirectory level, not the gnome-vfs level.
* icons/arlo/backgrounds/.cvsignore: [added]
* icons/arlo/backgrounds/Makefile.in: [removed]
Added the missing cvsignore file and got rid of the Makefile.in,
which should not be in cvs.
2000-08-01 Arlo Rose <arlo@eazel.com>
* icons/thumbnail_frame.aa.png
* icons/thumbnail_frame.png
* icons/thumbnail_frame.aa.png
Made them a bit lighter.
@ -16,7 +83,6 @@
* icons/gnome-pack-rpm.png
Arlo-ized the icon.
2000-08-01 Gene Z. Ragan <gzr@eazel.com>
Fixed bug 1790, want a command to cause-removable media check.
@ -2549,8 +2615,7 @@ Thu Jul 20 10:41:26 2000 Raph Levien <raph@acm.org>
2000-07-19 Eskil Heyn Olsen <eskil@eazel.com>
* components/services/install/command-line/Makefile.am:
*
components/services/install/command-line/eazel-alt-install-corba.c:
* components/services/install/command-line/eazel-alt-install-corba.c:
Added the uninstall stuff.
(set_parameters_from_command_line), (eazel_preflight_check_signal),
@ -2607,12 +2672,10 @@ Thu Jul 20 10:41:26 2000 Raph Levien <raph@acm.org>
(parse_package), (eazel_install_packagedata_to_xml),
(eazel_install_packagelist_to_xml),
(eazel_install_categorydata_to_xml):
*
components/services/install/lib/eazel-install-xml-package-list.h:
* components/services/install/lib/eazel-install-xml-package-list.h:
Functions to convert packagedata lists to xml.
*
components/services/trilobite/libtrilobite/trilobite-service-passwo
* components/services/trilobite/libtrilobite/trilobite-service-passwo
rdquery.c: (trilobite_passwordquery_get_password):
Destroy the password query dialog.

View file

@ -0,0 +1,2 @@
Makefile
Makefile.in

View file

@ -1,287 +0,0 @@
# Makefile.in generated automatically by automake 1.4 from Makefile.am
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DESTDIR =
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ../../..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
AS = @AS@
BONOBO_CFLAGS = @BONOBO_CFLAGS@
BONOBO_LIBS = @BONOBO_LIBS@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CPP = @CPP@
CXX = @CXX@
DATADIRNAME = @DATADIRNAME@
DLLTOOL = @DLLTOOL@
EAZEL_SERVICES = @EAZEL_SERVICES@
GCONF_CFLAGS = @GCONF_CFLAGS@
GCONF_CONFIG = @GCONF_CONFIG@
GCONF_LIBS = @GCONF_LIBS@
GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GENCAT = @GENCAT@
GHTTP_CFLAGS = @GHTTP_CFLAGS@
GHTTP_CONFIG = @GHTTP_CONFIG@
GHTTP_LIBS = @GHTTP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_CONFIG = @GLIB_CONFIG@
GLIB_LIBS = @GLIB_LIBS@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GNOMECANVASPIXBUF_INCLUDEDIR = @GNOMECANVASPIXBUF_INCLUDEDIR@
GNOMECANVASPIXBUF_LIBS = @GNOMECANVASPIXBUF_LIBS@
GNOMEUI_CFLAGS = @GNOMEUI_CFLAGS@
GNOMEUI_LIBS = @GNOMEUI_LIBS@
GNOME_CFLAGS = @GNOME_CFLAGS@
GNOME_CONFIG = @GNOME_CONFIG@
GNOME_LIBS = @GNOME_LIBS@
GNORBA_CFLAGS = @GNORBA_CFLAGS@
GNORBA_LIBS = @GNORBA_LIBS@
GTKHTML_CFLAGS = @GTKHTML_CFLAGS@
GTKHTML_LIBS = @GTKHTML_LIBS@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_LIBS = @GTK_LIBS@
GT_NO = @GT_NO@
GT_YES = @GT_YES@
IDL_CFLAGS = @IDL_CFLAGS@
INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
INSTOBJEXT = @INSTOBJEXT@
INTLDEPS = @INTLDEPS@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
LD = @LD@
LIBPNG = @LIBPNG@
LIBTOOL = @LIBTOOL@
LIBWWW_CFLAGS = @LIBWWW_CFLAGS@
LIBWWW_CONFIG = @LIBWWW_CONFIG@
LIBWWW_LIBS = @LIBWWW_LIBS@
LN_S = @LN_S@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MEDUSA_CFLAGS = @MEDUSA_CFLAGS@
MEDUSA_LIBS = @MEDUSA_LIBS@
MKINSTALLDIRS = @MKINSTALLDIRS@
MOZILLA_COMPONENT_CFLAGS = @MOZILLA_COMPONENT_CFLAGS@
MOZILLA_COMPONENT_LDFLAGS = @MOZILLA_COMPONENT_LDFLAGS@
MOZILLA_COMPONENT_LIBS = @MOZILLA_COMPONENT_LIBS@
NM = @NM@
OAF_CFLAGS = @OAF_CFLAGS@
OAF_CONFIG = @OAF_CONFIG@
OAF_LIBS = @OAF_LIBS@
OBJDUMP = @OBJDUMP@
ORBIT_CFLAGS = @ORBIT_CFLAGS@
ORBIT_CONFIG = @ORBIT_CONFIG@
ORBIT_IDL = @ORBIT_IDL@
ORBIT_LIBS = @ORBIT_LIBS@
PACKAGE = @PACKAGE@
PAM_LIBS = @PAM_LIBS@
POFILES = @POFILES@
POSUB = @POSUB@
RANLIB = @RANLIB@
RPM_LIBS = @RPM_LIBS@
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
VFS_CFLAGS = @VFS_CFLAGS@
VFS_LIBS = @VFS_LIBS@
XML_CFLAGS = @XML_CFLAGS@
XML_CONFIG = @XML_CONFIG@
XML_LIBS = @XML_LIBS@
ZVT_LIBS = @ZVT_LIBS@
Z_LIBS = @Z_LIBS@
gnomelocaledir = @gnomelocaledir@
l = @l@
arlodir = $(datadir)/pixmaps/nautilus/arlo/backgrounds
arlo_DATA = background_pattern.png window_pattern.png
EXTRA_DIST = $(arlo_DATA)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../../../config.h
CONFIG_CLEAN_FILES =
DATA = $(arlo_DATA)
DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
GZIP_ENV = --best
all: all-redirect
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu icons/arlo/backgrounds/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
install-arloDATA: $(arlo_DATA)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(arlodir)
@list='$(arlo_DATA)'; for p in $$list; do \
if test -f $(srcdir)/$$p; then \
echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(arlodir)/$$p"; \
$(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(arlodir)/$$p; \
else if test -f $$p; then \
echo " $(INSTALL_DATA) $$p $(DESTDIR)$(arlodir)/$$p"; \
$(INSTALL_DATA) $$p $(DESTDIR)$(arlodir)/$$p; \
fi; fi; \
done
uninstall-arloDATA:
@$(NORMAL_UNINSTALL)
list='$(arlo_DATA)'; for p in $$list; do \
rm -f $(DESTDIR)$(arlodir)/$$p; \
done
tags: TAGS
TAGS:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = icons/arlo/backgrounds
distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu icons/arlo/backgrounds/Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
cp -pr $$/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
info-am:
info: info-am
dvi-am:
dvi: dvi-am
check-am: all-am
check: check-am
installcheck-am:
installcheck: installcheck-am
install-exec-am:
install-exec: install-exec-am
install-data-am: install-arloDATA
install-data: install-data-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-am
uninstall-am: uninstall-arloDATA
uninstall: uninstall-am
all-am: Makefile $(DATA)
all-redirect: all-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(arlodir)
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic:
mostlyclean-am: mostlyclean-generic
mostlyclean: mostlyclean-am
clean-am: clean-generic mostlyclean-am
clean: clean-am
distclean-am: distclean-generic clean-am
-rm -f libtool
distclean: distclean-am
maintainer-clean-am: maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-am
.PHONY: uninstall-arloDATA install-arloDATA tags distdir info-am info \
dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
install-exec install-data-am install-data install-am install \
uninstall-am uninstall all-redirect all-am all installdirs \
mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View file

@ -1580,7 +1580,6 @@ select_needy_file (NautilusDirectory *directory,
for (p = directory->details->files; p != NULL; p = p->next) {
file = p->data;
if ((* check_missing) (file)) {
/* Make sure that someone cares about this particular directory's count. */
for (p2 = directory->details->call_when_ready_list; p2 != NULL; p2 = p2->next) {
callback = p2->data;
if ((* check_wanted) (&callback->request)
@ -1603,6 +1602,34 @@ select_needy_file (NautilusDirectory *directory,
}
}
}
/* Finally, check the file for the directory itself. */
file = directory->details->as_file;
if (file != NULL) {
if ((* check_missing) (file)) {
for (p2 = directory->details->call_when_ready_list; p2 != NULL; p2 = p2->next) {
callback = p2->data;
if ((* check_wanted) (&callback->request)
&& callback->file == file) {
break;
}
}
if (p2 != NULL) {
return file;
}
for (p2 = directory->details->monitor_list; p2 != NULL; p2 = p2->next) {
monitor = p2->data;
if ((* check_wanted) (&monitor->request)
&& monitor->file == file) {
break;
}
}
if (p2 != NULL) {
return file;
}
}
}
return NULL;
}

View file

@ -46,6 +46,7 @@ struct NautilusDirectoryDetails
GnomeVFSURI *alternate_metafile_uri;
/* The file objects. */
NautilusFile *as_file;
GList *files;
/* The metadata. */

View file

@ -462,13 +462,12 @@ nautilus_directory_is_search_directory (NautilusDirectory *directory)
g_return_val_if_fail (NAUTILUS_IS_DIRECTORY (directory), FALSE);
/* 3 hard-coded schemes for now. */
/* Two hard-coded schemes for now. */
/* FIXME: Later we gnome-vfs will tell us somehow that this is
* a virtual directory.
*/
return nautilus_istr_has_prefix (directory->details->uri_text, "search:")
|| nautilus_istr_has_prefix (directory->details->uri_text, "gnome-search:")
|| nautilus_istr_has_prefix (directory->details->uri_text, "gnome-trash:");
|| nautilus_istr_has_prefix (directory->details->uri_text, "gnome-search:");
#if 0
GnomeVFSFileInfo *info;

View file

@ -120,8 +120,7 @@ nautilus_file_initialize (NautilusFile *file)
static NautilusFile *
nautilus_file_new_from_name (NautilusDirectory *directory,
const char *name,
gboolean self_owned)
const char *name)
{
NautilusFile *file;
@ -138,7 +137,6 @@ nautilus_file_new_from_name (NautilusDirectory *directory,
file->details->directory = directory;
file->details->name = g_strdup (name);
file->details->self_owned = self_owned;
return file;
}
@ -223,14 +221,22 @@ nautilus_file_get (const char *uri)
if (file_name == NULL) {
return NULL;
}
file = nautilus_directory_find_file (directory, file_name);
if (self_owned) {
file = directory->details->as_file;
} else {
file = nautilus_directory_find_file (directory, file_name);
}
if (file != NULL) {
g_assert (file->details->self_owned == self_owned);
nautilus_file_ref (file);
} else {
file = nautilus_file_new_from_name (directory, file_name, self_owned);
directory->details->files =
g_list_prepend (directory->details->files, file);
file = nautilus_file_new_from_name (directory, file_name);
if (self_owned) {
g_assert (directory->details->as_file == NULL);
directory->details->as_file = file;
} else {
directory->details->files =
g_list_prepend (directory->details->files, file);
}
}
g_free (file_name);
@ -242,6 +248,7 @@ nautilus_file_get (const char *uri)
static void
destroy (GtkObject *object)
{
NautilusDirectory *directory;
NautilusFile *file;
GList **files;
@ -251,12 +258,18 @@ destroy (GtkObject *object)
nautilus_async_destroying_file (file);
files = &file->details->directory->details->files;
if (file->details->is_gone) {
g_assert (g_list_find (*files, file) == NULL);
directory = file->details->directory;
if (directory->details->as_file == file) {
directory->details->as_file = NULL;
} else {
g_assert (g_list_find (*files, file) != NULL);
*files = g_list_remove (*files, file);
files = &directory->details->files;
if (file->details->is_gone) {
g_assert (g_list_find (*files, file) == NULL);
} else {
g_assert (g_list_find (*files, file) != NULL);
*files = g_list_remove (*files, file);
}
}
nautilus_directory_unref (file->details->directory);
@ -298,6 +311,12 @@ nautilus_file_unref (NautilusFile *file)
gtk_object_unref (GTK_OBJECT (file));
}
static gboolean
nautilus_file_is_self_owned (NautilusFile *file)
{
return file->details->directory->details->as_file == file;
}
/**
* nautilus_file_get_parent_uri_as_string:
*
@ -313,7 +332,7 @@ nautilus_file_get_parent_uri_as_string (NautilusFile *file)
{
g_assert (NAUTILUS_IS_FILE (file));
if (file->details->self_owned) {
if (nautilus_file_is_self_owned (file)) {
/* Callers expect an empty string, not a NULL. */
return g_strdup ("");
}
@ -329,7 +348,7 @@ get_file_for_parent_directory (NautilusFile *file)
g_assert (NAUTILUS_IS_FILE (file));
if (file->details->self_owned) {
if (nautilus_file_is_self_owned (file)) {
return NULL;
}
@ -682,7 +701,7 @@ nautilus_file_rename (NautilusFile *file,
*/
/* Self-owned files can't be renamed. */
if (file->details->self_owned) {
if (nautilus_file_is_self_owned (file)) {
/* Claim that something changed even if the rename
* failed. This makes it easier for some clients who
* see the "reverting" to the old name as "changing
@ -768,7 +787,7 @@ nautilus_file_cancel (NautilusFile *file,
static GnomeVFSURI *
nautilus_file_get_gnome_vfs_uri (NautilusFile *file)
{
if (file->details->self_owned) {
if (nautilus_file_is_self_owned (file)) {
gnome_vfs_uri_ref (file->details->directory->details->uri);
return file->details->directory->details->uri;
}
@ -1036,7 +1055,6 @@ nautilus_file_compare_by_real_directory (NautilusFile *file_1, NautilusFile *fil
return nautilus_file_compare_by_real_name (file_1, file_2);
}
static int
nautilus_file_compare_by_emblems (NautilusFile *file_1, NautilusFile *file_2)
{
@ -1142,14 +1160,17 @@ nautilus_file_compare_for_sort_internal (NautilusFile *file_1,
* but I can imagine discussing this further.
* John Sullivan <sullivan@eazel.com>
*/
return nautilus_file_compare_by_real_name (file_1, file_2);
break;
case NAUTILUS_FILE_SORT_BY_DIRECTORY:
compare = nautilus_file_compare_by_real_name (file_1, file_2);
if (compare != 0) {
return compare;
}
return nautilus_file_compare_by_real_directory (file_1, file_2);
break;
case NAUTILUS_FILE_SORT_BY_DIRECTORY:
compare = nautilus_file_compare_by_real_directory (file_1, file_2);
if (compare != 0) {
return compare;
}
return nautilus_file_compare_by_real_name (file_1, file_2);
case NAUTILUS_FILE_SORT_BY_SIZE:
/* Compare directory sizes ourselves, then if necessary
* use GnomeVFS to compare file sizes.
@ -1423,7 +1444,7 @@ nautilus_file_get_uri (NautilusFile *file)
g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
if (file->details->self_owned) {
if (nautilus_file_is_self_owned (file)) {
return g_strdup (file->details->directory->details->uri_text);
}
@ -2763,7 +2784,7 @@ nautilus_file_get_deep_directory_count_as_string (NautilusFile *file)
* set includes "name", "type", "mime_type", "size", "deep_size", "deep_directory_count",
* "deep_file_count", "deep_total_count", "date_modified", "date_changed", "date_accessed",
* "date_permissions", "owner", "group", "permissions", "octal_permissions", "uri", "parent_uri",
* "real_name", "real_directory".
* "directory".
*
* Returns: Newly allocated string ready to display to the user, or NULL
* if the value is unknown or @attribute_name is not supported.
@ -2777,7 +2798,7 @@ nautilus_file_get_string_attribute (NautilusFile *file, const char *attribute_na
*/
if (strcmp (attribute_name, "name") == 0) {
return nautilus_file_get_name (file);
return nautilus_file_get_real_name (file);
}
if (strcmp (attribute_name, "type") == 0) {
@ -2852,11 +2873,7 @@ nautilus_file_get_string_attribute (NautilusFile *file, const char *attribute_na
return nautilus_file_get_parent_uri_as_string (file);
}
if (strcmp (attribute_name, "real_name") == 0) {
return nautilus_file_get_real_name (file);
}
if (strcmp (attribute_name, "real_directory") == 0) {
if (strcmp (attribute_name, "directory") == 0) {
return nautilus_file_get_real_directory (file);
}
@ -3410,11 +3427,13 @@ nautilus_file_mark_gone (NautilusFile *file)
/* Let the directory know it's gone. */
directory = file->details->directory;
files = &directory->details->files;
g_assert (g_list_find (*files, file) != NULL);
*files = g_list_remove (*files, file);
if (nautilus_directory_is_file_list_monitored (directory)) {
nautilus_file_unref (file);
if (directory->details->as_file != file) {
files = &directory->details->files;
g_assert (g_list_find (*files, file) != NULL);
*files = g_list_remove (*files, file);
if (nautilus_directory_is_file_list_monitored (directory)) {
nautilus_file_unref (file);
}
}
}
@ -3431,10 +3450,12 @@ nautilus_file_changed (NautilusFile *file)
g_return_if_fail (NAUTILUS_IS_FILE (file));
fake_list.data = file;
fake_list.next = NULL;
fake_list.prev = NULL;
nautilus_directory_emit_files_changed (file->details->directory, &fake_list);
if (!nautilus_file_is_self_owned (file)) {
fake_list.data = file;
fake_list.next = NULL;
fake_list.prev = NULL;
nautilus_directory_emit_files_changed (file->details->directory, &fake_list);
}
}
/**

View file

@ -1580,7 +1580,6 @@ select_needy_file (NautilusDirectory *directory,
for (p = directory->details->files; p != NULL; p = p->next) {
file = p->data;
if ((* check_missing) (file)) {
/* Make sure that someone cares about this particular directory's count. */
for (p2 = directory->details->call_when_ready_list; p2 != NULL; p2 = p2->next) {
callback = p2->data;
if ((* check_wanted) (&callback->request)
@ -1603,6 +1602,34 @@ select_needy_file (NautilusDirectory *directory,
}
}
}
/* Finally, check the file for the directory itself. */
file = directory->details->as_file;
if (file != NULL) {
if ((* check_missing) (file)) {
for (p2 = directory->details->call_when_ready_list; p2 != NULL; p2 = p2->next) {
callback = p2->data;
if ((* check_wanted) (&callback->request)
&& callback->file == file) {
break;
}
}
if (p2 != NULL) {
return file;
}
for (p2 = directory->details->monitor_list; p2 != NULL; p2 = p2->next) {
monitor = p2->data;
if ((* check_wanted) (&monitor->request)
&& monitor->file == file) {
break;
}
}
if (p2 != NULL) {
return file;
}
}
}
return NULL;
}

View file

@ -46,6 +46,7 @@ struct NautilusDirectoryDetails
GnomeVFSURI *alternate_metafile_uri;
/* The file objects. */
NautilusFile *as_file;
GList *files;
/* The metadata. */

View file

@ -462,13 +462,12 @@ nautilus_directory_is_search_directory (NautilusDirectory *directory)
g_return_val_if_fail (NAUTILUS_IS_DIRECTORY (directory), FALSE);
/* 3 hard-coded schemes for now. */
/* Two hard-coded schemes for now. */
/* FIXME: Later we gnome-vfs will tell us somehow that this is
* a virtual directory.
*/
return nautilus_istr_has_prefix (directory->details->uri_text, "search:")
|| nautilus_istr_has_prefix (directory->details->uri_text, "gnome-search:")
|| nautilus_istr_has_prefix (directory->details->uri_text, "gnome-trash:");
|| nautilus_istr_has_prefix (directory->details->uri_text, "gnome-search:");
#if 0
GnomeVFSFileInfo *info;

View file

@ -120,8 +120,7 @@ nautilus_file_initialize (NautilusFile *file)
static NautilusFile *
nautilus_file_new_from_name (NautilusDirectory *directory,
const char *name,
gboolean self_owned)
const char *name)
{
NautilusFile *file;
@ -138,7 +137,6 @@ nautilus_file_new_from_name (NautilusDirectory *directory,
file->details->directory = directory;
file->details->name = g_strdup (name);
file->details->self_owned = self_owned;
return file;
}
@ -223,14 +221,22 @@ nautilus_file_get (const char *uri)
if (file_name == NULL) {
return NULL;
}
file = nautilus_directory_find_file (directory, file_name);
if (self_owned) {
file = directory->details->as_file;
} else {
file = nautilus_directory_find_file (directory, file_name);
}
if (file != NULL) {
g_assert (file->details->self_owned == self_owned);
nautilus_file_ref (file);
} else {
file = nautilus_file_new_from_name (directory, file_name, self_owned);
directory->details->files =
g_list_prepend (directory->details->files, file);
file = nautilus_file_new_from_name (directory, file_name);
if (self_owned) {
g_assert (directory->details->as_file == NULL);
directory->details->as_file = file;
} else {
directory->details->files =
g_list_prepend (directory->details->files, file);
}
}
g_free (file_name);
@ -242,6 +248,7 @@ nautilus_file_get (const char *uri)
static void
destroy (GtkObject *object)
{
NautilusDirectory *directory;
NautilusFile *file;
GList **files;
@ -251,12 +258,18 @@ destroy (GtkObject *object)
nautilus_async_destroying_file (file);
files = &file->details->directory->details->files;
if (file->details->is_gone) {
g_assert (g_list_find (*files, file) == NULL);
directory = file->details->directory;
if (directory->details->as_file == file) {
directory->details->as_file = NULL;
} else {
g_assert (g_list_find (*files, file) != NULL);
*files = g_list_remove (*files, file);
files = &directory->details->files;
if (file->details->is_gone) {
g_assert (g_list_find (*files, file) == NULL);
} else {
g_assert (g_list_find (*files, file) != NULL);
*files = g_list_remove (*files, file);
}
}
nautilus_directory_unref (file->details->directory);
@ -298,6 +311,12 @@ nautilus_file_unref (NautilusFile *file)
gtk_object_unref (GTK_OBJECT (file));
}
static gboolean
nautilus_file_is_self_owned (NautilusFile *file)
{
return file->details->directory->details->as_file == file;
}
/**
* nautilus_file_get_parent_uri_as_string:
*
@ -313,7 +332,7 @@ nautilus_file_get_parent_uri_as_string (NautilusFile *file)
{
g_assert (NAUTILUS_IS_FILE (file));
if (file->details->self_owned) {
if (nautilus_file_is_self_owned (file)) {
/* Callers expect an empty string, not a NULL. */
return g_strdup ("");
}
@ -329,7 +348,7 @@ get_file_for_parent_directory (NautilusFile *file)
g_assert (NAUTILUS_IS_FILE (file));
if (file->details->self_owned) {
if (nautilus_file_is_self_owned (file)) {
return NULL;
}
@ -682,7 +701,7 @@ nautilus_file_rename (NautilusFile *file,
*/
/* Self-owned files can't be renamed. */
if (file->details->self_owned) {
if (nautilus_file_is_self_owned (file)) {
/* Claim that something changed even if the rename
* failed. This makes it easier for some clients who
* see the "reverting" to the old name as "changing
@ -768,7 +787,7 @@ nautilus_file_cancel (NautilusFile *file,
static GnomeVFSURI *
nautilus_file_get_gnome_vfs_uri (NautilusFile *file)
{
if (file->details->self_owned) {
if (nautilus_file_is_self_owned (file)) {
gnome_vfs_uri_ref (file->details->directory->details->uri);
return file->details->directory->details->uri;
}
@ -1036,7 +1055,6 @@ nautilus_file_compare_by_real_directory (NautilusFile *file_1, NautilusFile *fil
return nautilus_file_compare_by_real_name (file_1, file_2);
}
static int
nautilus_file_compare_by_emblems (NautilusFile *file_1, NautilusFile *file_2)
{
@ -1142,14 +1160,17 @@ nautilus_file_compare_for_sort_internal (NautilusFile *file_1,
* but I can imagine discussing this further.
* John Sullivan <sullivan@eazel.com>
*/
return nautilus_file_compare_by_real_name (file_1, file_2);
break;
case NAUTILUS_FILE_SORT_BY_DIRECTORY:
compare = nautilus_file_compare_by_real_name (file_1, file_2);
if (compare != 0) {
return compare;
}
return nautilus_file_compare_by_real_directory (file_1, file_2);
break;
case NAUTILUS_FILE_SORT_BY_DIRECTORY:
compare = nautilus_file_compare_by_real_directory (file_1, file_2);
if (compare != 0) {
return compare;
}
return nautilus_file_compare_by_real_name (file_1, file_2);
case NAUTILUS_FILE_SORT_BY_SIZE:
/* Compare directory sizes ourselves, then if necessary
* use GnomeVFS to compare file sizes.
@ -1423,7 +1444,7 @@ nautilus_file_get_uri (NautilusFile *file)
g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
if (file->details->self_owned) {
if (nautilus_file_is_self_owned (file)) {
return g_strdup (file->details->directory->details->uri_text);
}
@ -2763,7 +2784,7 @@ nautilus_file_get_deep_directory_count_as_string (NautilusFile *file)
* set includes "name", "type", "mime_type", "size", "deep_size", "deep_directory_count",
* "deep_file_count", "deep_total_count", "date_modified", "date_changed", "date_accessed",
* "date_permissions", "owner", "group", "permissions", "octal_permissions", "uri", "parent_uri",
* "real_name", "real_directory".
* "directory".
*
* Returns: Newly allocated string ready to display to the user, or NULL
* if the value is unknown or @attribute_name is not supported.
@ -2777,7 +2798,7 @@ nautilus_file_get_string_attribute (NautilusFile *file, const char *attribute_na
*/
if (strcmp (attribute_name, "name") == 0) {
return nautilus_file_get_name (file);
return nautilus_file_get_real_name (file);
}
if (strcmp (attribute_name, "type") == 0) {
@ -2852,11 +2873,7 @@ nautilus_file_get_string_attribute (NautilusFile *file, const char *attribute_na
return nautilus_file_get_parent_uri_as_string (file);
}
if (strcmp (attribute_name, "real_name") == 0) {
return nautilus_file_get_real_name (file);
}
if (strcmp (attribute_name, "real_directory") == 0) {
if (strcmp (attribute_name, "directory") == 0) {
return nautilus_file_get_real_directory (file);
}
@ -3410,11 +3427,13 @@ nautilus_file_mark_gone (NautilusFile *file)
/* Let the directory know it's gone. */
directory = file->details->directory;
files = &directory->details->files;
g_assert (g_list_find (*files, file) != NULL);
*files = g_list_remove (*files, file);
if (nautilus_directory_is_file_list_monitored (directory)) {
nautilus_file_unref (file);
if (directory->details->as_file != file) {
files = &directory->details->files;
g_assert (g_list_find (*files, file) != NULL);
*files = g_list_remove (*files, file);
if (nautilus_directory_is_file_list_monitored (directory)) {
nautilus_file_unref (file);
}
}
}
@ -3431,10 +3450,12 @@ nautilus_file_changed (NautilusFile *file)
g_return_if_fail (NAUTILUS_IS_FILE (file));
fake_list.data = file;
fake_list.next = NULL;
fake_list.prev = NULL;
nautilus_directory_emit_files_changed (file->details->directory, &fake_list);
if (!nautilus_file_is_self_owned (file)) {
fake_list.data = file;
fake_list.next = NULL;
fake_list.prev = NULL;
nautilus_directory_emit_files_changed (file->details->directory, &fake_list);
}
}
/**

View file

@ -24,23 +24,19 @@
*/
struct FMListViewDetails
{
int number_of_columns;
char **column_titles;
int *column_width;
int *minimum_column_width;
int *maximum_column_width;
int default_sort_column;
gboolean list_instantiated;
int sort_column;
gboolean sort_reversed;
guint zoom_level;
NautilusZoomLevel default_zoom_level;
struct FMListViewColumn {
const char *attribute;
const char *title;
NautilusFileSortType sort_criterion;
int minimum_width, default_width, maximum_width;
gboolean right_justified;
};
guint fm_list_view_get_icon_size (FMListView *list_view);
void fm_list_view_column_set (FMListViewColumn *column,
const char *attribute,
const char *title,
NautilusFileSortType sort_criterion,
int minimum_width,
int default_width,
int maximum_width,
gboolean right_justified);

File diff suppressed because it is too large Load diff

View file

@ -25,37 +25,36 @@
#ifndef FM_LIST_VIEW_H
#define FM_LIST_VIEW_H
#include <gtk/gtkclist.h>
/* This is not a general purpose class.
* It has just enough generality to be reused by the search list view.
* But for more use it would have to be refactored more.
*/
#include "fm-directory-view.h"
typedef struct FMListView FMListView;
typedef struct FMListViewClass FMListViewClass;
#define FM_TYPE_LIST_VIEW (fm_list_view_get_type ())
#define FM_LIST_VIEW(obj) (GTK_CHECK_CAST ((obj), FM_TYPE_LIST_VIEW, FMListView))
#define FM_LIST_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FM_TYPE_LIST_VIEW, FMListViewClass))
#define FM_IS_LIST_VIEW(obj) (GTK_CHECK_TYPE ((obj), FM_TYPE_LIST_VIEW))
#define FM_IS_LIST_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FM_TYPE_LIST_VIEW))
#define FM_TYPE_LIST_VIEW (fm_list_view_get_type ())
#define FM_LIST_VIEW(obj) (GTK_CHECK_CAST ((obj), FM_TYPE_LIST_VIEW, FMListView))
#define FM_LIST_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FM_TYPE_LIST_VIEW, FMListViewClass))
#define FM_IS_LIST_VIEW(obj) (GTK_CHECK_TYPE ((obj), FM_TYPE_LIST_VIEW))
#define FM_IS_LIST_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FM_TYPE_LIST_VIEW))
typedef struct FMListViewDetails FMListViewDetails;
typedef struct FMListViewColumn FMListViewColumn;
struct FMListView {
FMDirectoryView parent;
typedef struct {
FMDirectoryView parent_slot;
FMListViewDetails *details;
};
} FMListView;
struct FMListViewClass {
FMDirectoryViewClass parent_class;
typedef struct {
FMDirectoryViewClass parent_slot;
const char * (* get_attribute_from_column) (int column);
int (* compare_rows) (GtkCList *clist,
gconstpointer ptr1,
gconstpointer ptr2);
gboolean (* column_is_right_justified) (int column);
};
int (* get_number_of_columns) (FMListView *list_view);
int (* get_link_column) (FMListView *list_view);
void (* get_column_specification) (FMListView *list_view,
int column_number,
FMListViewColumn *specification);
} FMListViewClass;
/* GtkObject support */
GtkType fm_list_view_get_type (void);

View file

@ -27,252 +27,105 @@
We haven't changed much, and there is a lot of copied code (duplicate functionality)*/
#include <config.h>
#include <glib.h>
#include <gtk/gtkclist.h>
#include <libgnomeui/gnome-pixmap.h>
#include <libgnome/gnome-i18n.h>
#include <stdio.h>
#include <libnautilus-extensions/nautilus-gtk-macros.h>
#include <libnautilus-extensions/nautilus-list.h>
#include "fm-list-view.h"
#include "fm-list-view-private.h"
#include "fm-search-list-view.h"
#define PENDING_USER_DATA_KEY "pending user data"
#define SEARCH_LIST_VIEW_COLUMN_NONE -1
#define SEARCH_LIST_VIEW_COLUMN_ICON 0
#define SEARCH_LIST_VIEW_COLUMN_EMBLEMS 1
#define SEARCH_LIST_VIEW_COLUMN_NAME 3
#define SEARCH_LIST_VIEW_COLUMN_ACTUAL_PATH 2
#define SEARCH_LIST_VIEW_COLUMN_SIZE 4
#define SEARCH_LIST_VIEW_COLUMN_MIME_TYPE 5
#define SEARCH_LIST_VIEW_COLUMN_DATE_MODIFIED 6
#define SEARCH_LIST_VIEW_COLUMN_COUNT 7
#define SEARCH_LIST_VIEW_ICON_ATTRIBUTE "icon"
#define SEARCH_LIST_VIEW_EMBLEMS_ATTRIBUTE "emblems"
#define SEARCH_LIST_VIEW_ACTUAL_PATH_ATTRIBUTE "real_directory"
#define SEARCH_LIST_VIEW_NAME_ATTRIBUTE "real_name"
#define SEARCH_LIST_VIEW_SIZE_ATTRIBUTE "size"
#define SEARCH_LIST_VIEW_MIME_TYPE_ATTRIBUTE "type"
#define SEARCH_LIST_VIEW_DATE_MODIFIED_ATTRIBUTE "date_modified"
#define LIST_VIEW_DEFAULT_SORTING_ATTRIBUTE LIST_VIEW_NAME_ATTRIBUTE
struct FMSearchListViewDetails {
};
static void fm_search_list_view_initialize (gpointer object,
gpointer klass);
static void fm_search_list_view_initialize_class (gpointer klass);
static void fm_search_list_view_destroy (GtkObject *object);
const char * fm_search_list_view_get_attribute_from_column (int column);
static gboolean fm_search_list_view_column_is_right_justified (int column);
static int fm_search_list_view_compare_rows (GtkCList *clist,
gconstpointer ptr1,
gconstpointer ptr2);
static int fm_search_list_view_get_sort_criterion_from_column (int column);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (FMSearchListView, fm_search_list_view, FM_TYPE_LIST_VIEW);
#include "fm-list-view-private.h"
#include <libgnome/gnome-i18n.h>
#include <libnautilus-extensions/nautilus-gtk-macros.h>
static void fm_search_list_view_initialize (gpointer object,
gpointer klass);
static void fm_search_list_view_initialize_class (gpointer klass);
static int real_get_number_of_columns (FMListView *list_view);
static int real_get_link_column (FMListView *list_view);
static void real_get_column_specification (FMListView *list_view,
int column_number,
FMListViewColumn *specification);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (FMSearchListView,
fm_search_list_view,
FM_TYPE_LIST_VIEW)
static void
fm_search_list_view_initialize_class (gpointer klass)
{
GtkObjectClass *object_class;
FMDirectoryViewClass *fm_directory_view_class;
FMListViewClass *fm_list_view_class;
object_class = GTK_OBJECT_CLASS (klass);
fm_directory_view_class = FM_DIRECTORY_VIEW_CLASS (klass);
fm_list_view_class = FM_LIST_VIEW_CLASS (klass);
fm_list_view_class->compare_rows = fm_search_list_view_compare_rows;
fm_list_view_class->get_attribute_from_column = fm_search_list_view_get_attribute_from_column;
fm_list_view_class->column_is_right_justified = fm_search_list_view_column_is_right_justified;
object_class->destroy = fm_search_list_view_destroy;
fm_list_view_class->get_number_of_columns = real_get_number_of_columns;
fm_list_view_class->get_link_column = real_get_link_column;
fm_list_view_class->get_column_specification = real_get_column_specification;
}
static void
fm_search_list_view_initialize (gpointer object,
gpointer klass)
{
FMListView *list_view;
int i;
g_return_if_fail (FM_IS_SEARCH_LIST_VIEW (object));
g_return_if_fail (GTK_BIN (object)->child == NULL);
list_view = FM_LIST_VIEW (object);
/* FIXME: This would probably be neater with get a set
functions, but this will do for now */
/* These have already been allocated, so free the old values before
overwriting new ones */
for (i = 0; i < list_view->details->number_of_columns; i++) {
if (list_view->details->column_titles[i] != NULL) {
g_free (list_view->details->column_titles[i]);
}
}
g_free (list_view->details->column_titles);
g_free (list_view->details->column_width);
g_free (list_view->details->maximum_column_width);
g_free (list_view->details->minimum_column_width);
list_view->details->number_of_columns = SEARCH_LIST_VIEW_COLUMN_COUNT;
list_view->details->column_titles = g_new0 (char *, list_view->details->number_of_columns);
list_view->details->column_titles[SEARCH_LIST_VIEW_COLUMN_ICON] = NULL;
list_view->details->column_titles[SEARCH_LIST_VIEW_COLUMN_EMBLEMS] = NULL;
list_view->details->column_titles[SEARCH_LIST_VIEW_COLUMN_NAME] = _("Name");
list_view->details->column_titles[SEARCH_LIST_VIEW_COLUMN_ACTUAL_PATH] = _("Directory");
list_view->details->column_titles[SEARCH_LIST_VIEW_COLUMN_SIZE] = _("Size");
list_view->details->column_titles[SEARCH_LIST_VIEW_COLUMN_MIME_TYPE] = _("Type");
list_view->details->column_titles[SEARCH_LIST_VIEW_COLUMN_DATE_MODIFIED] = _("Date Modified");
list_view->details->column_width = g_new0 (int, list_view->details->number_of_columns);
list_view->details->column_width[SEARCH_LIST_VIEW_COLUMN_ICON] = fm_list_view_get_icon_size (FM_LIST_VIEW (list_view));
list_view->details->column_width[SEARCH_LIST_VIEW_COLUMN_EMBLEMS] = 40;
list_view->details->column_width[SEARCH_LIST_VIEW_COLUMN_NAME] = 200;
list_view->details->column_width[SEARCH_LIST_VIEW_COLUMN_ACTUAL_PATH] = 130;
list_view->details->column_width[SEARCH_LIST_VIEW_COLUMN_SIZE] = 55;
list_view->details->column_width[SEARCH_LIST_VIEW_COLUMN_MIME_TYPE] = 95;
list_view->details->column_width[SEARCH_LIST_VIEW_COLUMN_DATE_MODIFIED] = 95;
list_view->details->minimum_column_width = g_new0 (int, list_view->details->number_of_columns);
list_view->details->minimum_column_width[SEARCH_LIST_VIEW_COLUMN_ICON] = fm_list_view_get_icon_size (FM_LIST_VIEW (list_view));
list_view->details->minimum_column_width[SEARCH_LIST_VIEW_COLUMN_EMBLEMS] = 20;
list_view->details->minimum_column_width[SEARCH_LIST_VIEW_COLUMN_NAME] = 30;
list_view->details->minimum_column_width[SEARCH_LIST_VIEW_COLUMN_ACTUAL_PATH] = 30;
list_view->details->minimum_column_width[SEARCH_LIST_VIEW_COLUMN_SIZE] = 20;
list_view->details->minimum_column_width[SEARCH_LIST_VIEW_COLUMN_MIME_TYPE] = 20;
list_view->details->minimum_column_width[SEARCH_LIST_VIEW_COLUMN_DATE_MODIFIED] = 30;
list_view->details->maximum_column_width = g_new0 (int, list_view->details->number_of_columns);
list_view->details->maximum_column_width[SEARCH_LIST_VIEW_COLUMN_ICON] = fm_list_view_get_icon_size (FM_LIST_VIEW (list_view));
list_view->details->maximum_column_width[SEARCH_LIST_VIEW_COLUMN_EMBLEMS] = 300;
list_view->details->maximum_column_width[SEARCH_LIST_VIEW_COLUMN_NAME] = 300;
list_view->details->maximum_column_width[SEARCH_LIST_VIEW_COLUMN_ACTUAL_PATH] = 500;
list_view->details->maximum_column_width[SEARCH_LIST_VIEW_COLUMN_SIZE] = 80;
list_view->details->maximum_column_width[SEARCH_LIST_VIEW_COLUMN_MIME_TYPE] = 200;
list_view->details->maximum_column_width[SEARCH_LIST_VIEW_COLUMN_DATE_MODIFIED] = 200;
}
static int
fm_search_list_view_get_sort_criterion_from_column (int column)
{
switch (column) {
case SEARCH_LIST_VIEW_COLUMN_ICON:
return NAUTILUS_FILE_SORT_BY_TYPE;
case SEARCH_LIST_VIEW_COLUMN_NAME:
return NAUTILUS_FILE_SORT_BY_NAME;
case SEARCH_LIST_VIEW_COLUMN_ACTUAL_PATH:
return NAUTILUS_FILE_SORT_BY_DIRECTORY;
case SEARCH_LIST_VIEW_COLUMN_EMBLEMS:
return NAUTILUS_FILE_SORT_BY_EMBLEMS;
case SEARCH_LIST_VIEW_COLUMN_SIZE:
return NAUTILUS_FILE_SORT_BY_SIZE;
case SEARCH_LIST_VIEW_COLUMN_DATE_MODIFIED:
return NAUTILUS_FILE_SORT_BY_MTIME;
case SEARCH_LIST_VIEW_COLUMN_MIME_TYPE:
return NAUTILUS_FILE_SORT_BY_TYPE;
default:
return NAUTILUS_FILE_SORT_NONE;
}
}
const char *
fm_search_list_view_get_attribute_from_column (int column)
{
switch (column) {
case SEARCH_LIST_VIEW_COLUMN_ICON:
return SEARCH_LIST_VIEW_ICON_ATTRIBUTE;
case SEARCH_LIST_VIEW_COLUMN_NAME:
return SEARCH_LIST_VIEW_NAME_ATTRIBUTE;
case SEARCH_LIST_VIEW_COLUMN_ACTUAL_PATH:
return SEARCH_LIST_VIEW_ACTUAL_PATH_ATTRIBUTE;
case SEARCH_LIST_VIEW_COLUMN_EMBLEMS:
return SEARCH_LIST_VIEW_EMBLEMS_ATTRIBUTE;
case SEARCH_LIST_VIEW_COLUMN_SIZE:
return SEARCH_LIST_VIEW_SIZE_ATTRIBUTE;
case SEARCH_LIST_VIEW_COLUMN_MIME_TYPE:
return SEARCH_LIST_VIEW_MIME_TYPE_ATTRIBUTE;
case SEARCH_LIST_VIEW_COLUMN_DATE_MODIFIED:
return SEARCH_LIST_VIEW_DATE_MODIFIED_ATTRIBUTE;
default:
g_assert_not_reached ();
return NULL;
}
g_assert (GTK_BIN (object)->child == NULL);
}
static int
fm_search_list_view_compare_rows (GtkCList *clist,
gconstpointer ptr1,
gconstpointer ptr2)
real_get_number_of_columns (FMListView *view)
{
GtkCListRow *row1;
GtkCListRow *row2;
NautilusFile *file1;
NautilusFile *file2;
int sort_criterion;
g_return_val_if_fail (NAUTILUS_IS_LIST (clist), 0);
g_return_val_if_fail (clist->sort_column != SEARCH_LIST_VIEW_COLUMN_NONE, 0);
row1 = (GtkCListRow *) ptr1;
row2 = (GtkCListRow *) ptr2;
file1 = (NautilusFile *) row1->data;
file2 = (NautilusFile *) row2->data;
/* All of our rows have a NautilusFile in the row data. Therefore if
* the row data is NULL it must be a row that's being added, and hasn't
* had a chance to have its row data set yet. Use our special hack-o-rama
* static variable for that case.
*/
g_assert (file1 != NULL || file2 != NULL);
if (file1 == NULL) {
file1 = gtk_object_get_data (GTK_OBJECT (clist), PENDING_USER_DATA_KEY);
} else if (file2 == NULL) {
file2 = gtk_object_get_data (GTK_OBJECT (clist), PENDING_USER_DATA_KEY);
}
g_assert (file1 != NULL && file2 != NULL);
sort_criterion = fm_search_list_view_get_sort_criterion_from_column (clist->sort_column);
return nautilus_file_compare_for_sort (file1, file2, sort_criterion);
return 7;
}
static gboolean
fm_search_list_view_column_is_right_justified (int column)
static int
real_get_link_column (FMListView *view)
{
return column == SEARCH_LIST_VIEW_COLUMN_SIZE;
return 3;
}
static void
fm_search_list_view_destroy (GtkObject *object)
real_get_column_specification (FMListView *view,
int column_number,
FMListViewColumn *specification)
{
g_return_if_fail (FM_IS_SEARCH_LIST_VIEW (object));
NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (object));
switch (column_number) {
case 0:
fm_list_view_column_set (specification,
"icon", NULL,
NAUTILUS_FILE_SORT_BY_TYPE,
0, 0, 0, FALSE);
break;
case 1:
fm_list_view_column_set (specification,
"emblems", NULL,
NAUTILUS_FILE_SORT_BY_EMBLEMS,
20, 40, 300, FALSE);
break;
case 2:
fm_list_view_column_set (specification,
"directory", _("Directory"),
NAUTILUS_FILE_SORT_BY_DIRECTORY,
30, 130, 500, FALSE);
break;
case 3:
fm_list_view_column_set (specification,
"name", _("Name"),
NAUTILUS_FILE_SORT_BY_NAME,
30, 200, 300, FALSE);
break;
case 4:
fm_list_view_column_set (specification,
"size", _("Size"),
NAUTILUS_FILE_SORT_BY_SIZE,
20, 55, 80, TRUE);
break;
case 5:
fm_list_view_column_set (specification,
"type", _("Type"),
NAUTILUS_FILE_SORT_BY_TYPE,
20, 95, 200, FALSE);
break;
case 6:
fm_list_view_column_set (specification,
"date_modified", _("Date Modified"),
NAUTILUS_FILE_SORT_BY_MTIME,
30, 95, 200, FALSE);
break;
default:
g_assert_not_reached ();
}
}

View file

@ -27,25 +27,19 @@
#include "fm-list-view.h"
typedef struct FMSearchListView FMSearchListView;
typedef struct FMSearchListViewClass FMSearchListViewClass;
#define FM_TYPE_SEARCH_LIST_VIEW (fm_search_list_view_get_type ())
#define FM_SEARCH_LIST_VIEW(obj) (GTK_CHECK_CAST ((obj), FM_TYPE_SEARCH_LIST_VIEW, FMSearchListView))
#define FM_SEARCH_LIST_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FM_TYPE_SEARCH_LIST_VIEW, FMSearch_ListViewClass))
#define FM_IS_SEARCH_LIST_VIEW(obj) (GTK_CHECK_TYPE ((obj), FM_TYPE_SEARCH_LIST_VIEW))
#define FM_IS_SEARCH_LIST_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FM_TYPE_SEARCH_LIST_VIEW))
#define FM_TYPE_SEARCH_LIST_VIEW (fm_search_list_view_get_type ())
#define FM_SEARCH_LIST_VIEW(obj) (GTK_CHECK_CAST ((obj), FM_TYPE_SEARCH_LIST_VIEW, FMSearchListView))
#define FM_SEARCH_LIST_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FM_TYPE_SEARCH_LIST_VIEW, FMSearch_ListViewClass))
#define FM_IS_SEARCH_LIST_VIEW(obj) (GTK_CHECK_TYPE ((obj), FM_TYPE_SEARCH_LIST_VIEW))
#define FM_IS_SEARCH_LIST_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FM_TYPE_SEARCH_LIST_VIEW))
typedef struct {
FMListView parent_slot;
} FMSearchListView;
typedef struct FMSearchListViewDetails FMSearchListViewDetails;
struct FMSearchListView {
FMListView parent;
FMSearchListViewDetails *details;
};
struct FMSearchListViewClass {
FMListViewClass parent_class;
};
typedef struct {
FMListViewClass parent_slot;
} FMSearchListViewClass;
/* GtkObject support */
GtkType fm_search_list_view_get_type (void);

View file

@ -629,6 +629,7 @@ draw_or_hit_test_all_tabs (NautilusSidebarTabs *sidebar_tabs, gboolean draw_flag
/* draw as many tabs per row as will fit */
first_flag = TRUE;
prev_item = NULL;
while (next_tab != NULL) {
TabItem *this_item = next_tab->data;