Re: Come fix bugs! (Batteries included)



Hi,

Am Mittwoch, den 06.10.2004, 15:48 +0200 schrieb Alexander Larsson:
> [...]

> * history dropdown in Open Location dialog
> Add a history of recent locations to the Nautilus Ctrl-L Open Location
> dialog. A good place for this is in nautilus-location-entry.c, which
> is also used on the toolbar in browser mode and for entering raw uris
> in the connect to server dialog

Where to save the history items, where to get them from, will they be
shared with other components ? Is using gtk_entry_completion ok ?

> 
> * DnD drop on window should be more obvious
> When you drag and drop a file to a Nautilus window the only way you
> can see if the drop will succeed is by looking at the cursor. We
> should be highlighting the frame around the directory view when you
> hover over the view and the drop will be accepted.

Tried that but seems the entire file for drag&drop window special
actions is there and has been disabled. Maybe there was a reason :)

libnautilus-private/nautilus-drag-window.c:
nautilus_drag_window_register: 'return' statement at the beginning

Please confirm :)

> 
> [...]

> * tree sidebar timeout before load-uri when keynav:ing
> If you navigate the tree sidebar with cursor keys, it will immediately
> start loading the folders as you move over them. This makes keynav
> painful. We should have a delay here before we load the folder.

did that, are 300 ms ok ?  (attached, fm-tree-view.diff)

> 
> [...]
  
> * context menu poped up by keyboard appear at mouse pointer
> If you select a file and bring up the context menu (using ctrl-F10)
> the menu pops up at the current mouse position, not the location of
> the icon. This is distracting when you're using keyboard navigation,
> and the mouse cursor could be anywhere.

Yes, but it is hard to fix. I tried it in one of my other apps and what
I did was basically,

my_popup():
   if fromKeyboard == True:
           path, column = self.tree.get_cursor()
           if path != None:
               rect = self.tree.get_cell_area(path,
self.tree.get_columns()[0])

               self.popupRect = rect

               menu.popup(...menu_position_callback)

menu_position_callback():
    x = self.popupRect.x
    y = self.popupRect.y # + self.popupRect.height

    #if y> self.tree.allocation.height:
    #       y = 0

    visible =  self.tree.get_visible_rect()

    if x > visible.width: x = visible.width
    if y + self.popupRect.height > visible.height: y = visible.height

    ox,oy=self.tree.window.get_origin()
    oy = oy + 32 # FIXME
    dify = self.tree.allocation.height - visible.height
    #print dify
    oy = oy + dify
    x = x + ox
    y = y + oy

    return (x,y, True)

Really ugly. I hesitate to clobber nautilus up with that ;)
  
>[...]

> * .hidden reading follows symlinks/nodes etc
> When reading .hidden files we should only read it if the file is a
> regular file. We shouldn't follow symlinks, hang if someone puts a
> ..hidden pipe there, or whatever unregular.

did that, attached nautilus-directory-async.diff

> [...]

> * size of home on desktop wrong
> If you select properties on the home icon on the desktop, the size
> won't be calculated. Selecting it on the real folder in /home works
> though. We probably just have to follow the link when calculating the
> size.

Where is that icon handler code ? found nautilus-desktop-window.c, but
its not in there ;)

> [...]


cheers,
   Danny

-- 
www.keyserver.net key id A334AEA6

Index: fm-tree-view.c
===================================================================
RCS file: /cvs/gnome/nautilus/src/file-manager/fm-tree-view.c,v
retrieving revision 1.6
diff -u -p -r1.6 fm-tree-view.c
--- fm-tree-view.c	21 Jun 2004 18:33:43 -0000	1.6
+++ fm-tree-view.c	9 Oct 2004 10:14:10 -0000
@@ -92,6 +92,8 @@ struct FMTreeViewDetails {
 	GtkWidget *popup_trash;
 	GtkWidget *popup_properties;
 	NautilusFile *popup_file;
+	
+	guint selection_changed_timer;
 };
 
 typedef struct {
@@ -378,34 +380,48 @@ row_activated_callback (GtkTreeView *tre
 	}
 }
 
-
-static void
-selection_changed_callback (GtkTreeSelection *selection,
-			    FMTreeView *view)
+static gboolean 
+selection_changed_timer_callback(FMTreeView *view)
 {
 	NautilusFileAttributes attributes;
 	GtkTreeIter iter;
+	GtkTreeSelection *selection;
+	
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view->details->tree_widget));
 
 	/* no activation if popup menu is open */
 	if (view->details->popup_file != NULL) {
-		return;
+		return FALSE;
 	}
 
 	cancel_activation (view);
 
 	if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) {
-		return;
+		return FALSE;
 	}
 
 	view->details->activation_file = sort_model_iter_to_file (view, &iter);
 	if (view->details->activation_file == NULL) {
-		return;
+		return FALSE;
 	}
 	view->details->activation_in_new_window = FALSE;
 		
 	attributes = NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI;
 	nautilus_file_call_when_ready (view->details->activation_file, attributes,
 				       got_activation_uri_callback, view);
+	return FALSE; /* remove timeout */
+}
+
+static void
+selection_changed_callback (GtkTreeSelection *selection,
+			    FMTreeView *view)
+{
+	if (view->details->selection_changed_timer) {
+		g_source_remove (view->details->selection_changed_timer);
+		view->details->selection_changed_timer = 0;
+	}
+	
+	view->details->selection_changed_timer = g_timeout_add (300, (GSourceFunc) selection_changed_timer_callback, view);
 }
 
 static int
@@ -1279,6 +1295,11 @@ fm_tree_view_dispose (GObject *object)
 	
 	view = FM_TREE_VIEW (object);
 	
+	if (view->details->selection_changed_timer) {
+		g_source_remove (view->details->selection_changed_timer);
+		view->details->selection_changed_timer = 0;
+	}
+
 	if (view->details->drag_dest) {
 		g_object_unref (view->details->drag_dest);
 		view->details->drag_dest = NULL;
Index: nautilus-directory-async.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-directory-async.c,v
retrieving revision 1.210
diff -u -p -r1.210 nautilus-directory-async.c
--- nautilus-directory-async.c	6 Oct 2004 12:12:17 -0000	1.210
+++ nautilus-directory-async.c	9 Oct 2004 10:16:00 -0000
@@ -2018,6 +2018,8 @@ read_dot_hidden_file (NautilusDirectory 
 	GnomeVFSResult result;
 	int i, file_size;
 	char *file_contents;
+	GnomeVFSFileInfo *file_info;
+	gboolean file_ok;
 
 
 	/* FIXME: We only support .hidden on file: uri's for the moment.
@@ -2032,6 +2034,36 @@ read_dot_hidden_file (NautilusDirectory 
 	 * that works on strings, so we can avoid the VFS parsing step.
 	 */
 	dot_hidden_vfs_uri = gnome_vfs_uri_append_file_name (directory->details->vfs_uri, ".hidden");
+
+	file_info = gnome_vfs_file_info_new ();
+	if (!file_info)
+		return;
+	
+	if (gnome_vfs_get_file_info_uri (
+		dot_hidden_vfs_uri,
+		file_info, 
+		GNOME_VFS_FILE_INFO_DEFAULT) 
+	!= GNOME_VFS_OK) {
+		gnome_vfs_file_info_unref (file_info);
+		return;
+	}
+
+	/* FIXME check flags for GNOME_VFS_FILE_FLAGS_SYMLINK too ? */
+	/* or GNOME_VFS_FILE_FLAGS_LOCAL */
+		
+	file_ok = (
+		(file_info->valid_fields 
+	& (GNOME_VFS_FILE_INFO_FIELDS_TYPE | GNOME_VFS_FILE_INFO_FIELDS_SIZE)) 
+	== (GNOME_VFS_FILE_INFO_FIELDS_TYPE | GNOME_VFS_FILE_INFO_FIELDS_SIZE)
+	)
+	&& (file_info->type == GNOME_VFS_FILE_TYPE_REGULAR)
+	&& (file_info->size > 0);
+
+	gnome_vfs_file_info_unref (file_info);
+		
+	if (!file_ok)
+		return;
+	
 	dot_hidden_uri = gnome_vfs_uri_to_string (dot_hidden_vfs_uri, GNOME_VFS_URI_HIDE_NONE);
 	gnome_vfs_uri_unref (dot_hidden_vfs_uri);
 	

Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]