[gthumb/ext] moved the system bookmarks in the bookmarks menu



commit 72dfa54a13cf9ef1da88ddb8610572191052911b
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Thu Oct 29 01:30:02 2009 +0100

    moved the system bookmarks in the bookmarks menu

 gthumb/glib-utils.c                  |    2 +-
 gthumb/gth-browser-actions-entries.h |    1 +
 gthumb/gth-browser-ui.h              |    3 +
 gthumb/gth-browser.c                 |  170 ++++++++++++++++++++++++++++-
 gthumb/gth-location-chooser.c        |  200 +---------------------------------
 gthumb/gth-uri-list.c                |   10 ++-
 6 files changed, 185 insertions(+), 201 deletions(-)
---
diff --git a/gthumb/glib-utils.c b/gthumb/glib-utils.c
index 077b6d0..c9167b5 100644
--- a/gthumb/glib-utils.c
+++ b/gthumb/glib-utils.c
@@ -1593,7 +1593,7 @@ _g_file_get_display_name (GFile *file)
 	if (file_info != NULL)
 		name = g_strdup (g_file_info_get_attribute_string (file_info, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME));
 	else
-		name = g_file_get_uri (file);
+		name = g_file_get_parse_name (file);
 
 	return name;
 }
diff --git a/gthumb/gth-browser-actions-entries.h b/gthumb/gth-browser-actions-entries.h
index 823dca0..a928687 100644
--- a/gthumb/gth-browser-actions-entries.h
+++ b/gthumb/gth-browser-actions-entries.h
@@ -33,6 +33,7 @@ static GtkActionEntry gth_browser_action_entries[] = {
 	{ "ViewMenu", NULL, N_("_View") },
 	{ "GoMenu", NULL, N_("_Go") },
 	{ "BookmarksMenu", NULL, N_("_Bookmarks") },
+	{ "SystemBookmarksMenu", NULL, N_("_System Bookmarks") },
 	{ "HelpMenu", NULL, N_("_Help") },
 	{ "OpenWithMenu", NULL, N_("Open _With") },
 
diff --git a/gthumb/gth-browser-ui.h b/gthumb/gth-browser-ui.h
index 474d481..b40765b 100644
--- a/gthumb/gth-browser-ui.h
+++ b/gthumb/gth-browser-ui.h
@@ -91,6 +91,9 @@ static const char *fixed_ui_info =
 "    <menu name='Bookmarks' action='BookmarksMenu'>"
 "      <menuitem action='Bookmarks_Add'/>"
 "      <menuitem action='Bookmarks_Edit'/>"
+"      <separator/>"
+"      <menu name='SystemBookmarks' action='SystemBookmarksMenu'>"
+"      </menu>"
 "      <separator name='BookmarkListSeparator'/>"
 "      <placeholder name='BookmarkList'/>"
 "    </menu>"
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index b6daf91..860227b 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -325,9 +325,11 @@ _gth_browser_add_file_menu_item_full (GthBrowser *browser,
 
 	if (action == GTH_ACTION_GO_TO) {
 		char *parse_name;
+		char *tooltip;
 
 		parse_name = g_file_get_parse_name (file);
-		gtk_widget_set_tooltip_text (GTK_WIDGET (menu_item), parse_name);
+		tooltip = g_strdup_printf (_("Open %s"), parse_name);
+		gtk_widget_set_tooltip_text (GTK_WIDGET (menu_item), tooltip);
 
 		g_object_set_data_full (G_OBJECT (menu_item),
 					"uri",
@@ -338,6 +340,7 @@ _gth_browser_add_file_menu_item_full (GthBrowser *browser,
 				  G_CALLBACK (activate_go_to_menu_item),
 			  	  browser);
 
+		g_free (tooltip);
 		g_free (parse_name);
 	}
 	else {
@@ -389,6 +392,25 @@ _gth_browser_add_file_menu_item (GthBrowser *browser,
 						      -1);
 		g_object_unref (info);
 	}
+	else {
+		GIcon *icon;
+		char  *name;
+
+		icon = _g_file_get_icon (file);
+		name = _g_file_get_display_name (file);
+		_gth_browser_add_file_menu_item_full (browser,
+						      menu,
+						      file,
+						      icon,
+						      name,
+						      action,
+						      steps,
+						      -1);
+
+		g_free (name);
+		g_object_unref (icon);
+	}
+
 	g_object_unref (file_source);
 }
 
@@ -695,6 +717,150 @@ _gth_browser_add_to_history (GthBrowser *browser,
 }
 
 
+#define BUFFER_SIZE 4096
+
+
+typedef struct {
+	GthBrowser   *browser;
+	GInputStream *stream;
+	char          buffer[BUFFER_SIZE];
+	GString      *file_content;
+} UpdateBookmarksData;
+
+
+static void
+update_bookmakrs_data_free (UpdateBookmarksData *data)
+{
+	g_input_stream_close (data->stream, NULL, NULL);
+	g_object_unref (data->stream);
+	g_string_free (data->file_content, TRUE);
+	g_object_unref (data->browser);
+	g_free (data);
+}
+
+
+static void
+update_system_bookmark_list_from_content (GthBrowser *browser,
+					  const char *content)
+{
+	GtkWidget  *bookmark_list;
+	GtkWidget  *menu;
+	char      **lines;
+	int         i;
+
+	bookmark_list = gtk_ui_manager_get_widget (browser->priv->ui, "/MenuBar/Bookmarks/SystemBookmarks");
+	menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (bookmark_list));
+
+	_gtk_container_remove_children (GTK_CONTAINER (menu), NULL, NULL);
+
+	lines = g_strsplit (content, "\n", -1);
+	for (i = 0; lines[i] != NULL; i++) {
+		char  **line;
+		char   *uri;
+		GFile  *file;
+		GIcon  *icon;
+		char   *name;
+
+		line = g_strsplit (lines[i], " ", 2);
+		uri = line[0];
+		if (uri == NULL)
+			continue;
+
+		file = g_file_new_for_uri (uri);
+		icon = _g_file_get_icon (file);
+		name = g_strdup (strchr (lines[i], ' '));
+		if (name == NULL)
+			name = _g_file_get_display_name (file);
+		if (name == NULL)
+			name = g_file_get_parse_name (file);
+
+		_gth_browser_add_file_menu_item_full (browser,
+						      menu,
+						      file,
+						      icon,
+						      name,
+						      GTH_ACTION_GO_TO,
+						      i,
+						      -1);
+
+		g_free (name);
+		g_object_unref (icon);
+		g_object_unref (file);
+		g_strfreev (line);
+	}
+	g_strfreev (lines);
+
+	if (i > 0)
+		gtk_widget_show (bookmark_list);
+}
+
+
+static void
+update_system_bookmark_list_ready (GObject      *source_object,
+				   GAsyncResult *result,
+				   gpointer      user_data)
+{
+	UpdateBookmarksData *data = user_data;
+	gssize               size;
+
+	size = g_input_stream_read_finish (data->stream, result, NULL);
+	if (size < 0) {
+		update_bookmakrs_data_free (data);
+		return;
+	}
+
+	if (size > 0) {
+		data->buffer[size + 1] = '\0';
+		g_string_append (data->file_content, data->buffer);
+
+		g_input_stream_read_async (data->stream,
+				   	   data->buffer,
+				   	   BUFFER_SIZE - 1,
+					   G_PRIORITY_DEFAULT,
+					   NULL,
+					   update_system_bookmark_list_ready,
+					   data);
+		return;
+	}
+
+	update_system_bookmark_list_from_content (data->browser, data->file_content->str);
+	update_bookmakrs_data_free (data);
+}
+
+
+static void
+_gth_browser_update_system_bookmark_list (GthBrowser *browser)
+{
+	char                *bookmark_file_path;
+	GFile               *bookmark_file;
+	GFileInputStream    *input_stream;
+	UpdateBookmarksData *data;
+
+	bookmark_file_path = g_build_filename (g_get_home_dir (), ".gtk-bookmarks", NULL);
+	bookmark_file = g_file_new_for_path (bookmark_file_path);
+	g_free (bookmark_file_path);
+
+	input_stream = g_file_read (bookmark_file, NULL, NULL);
+	g_object_unref (bookmark_file);
+
+	if (input_stream == NULL)
+		return;
+
+	data = g_new0 (UpdateBookmarksData, 1);
+	data->browser = g_object_ref (browser);
+	data->stream = (GInputStream*) input_stream;
+	data->file_content = g_string_new ("");
+
+	g_input_stream_read_async (data->stream,
+				   data->buffer,
+				   BUFFER_SIZE - 1,
+				   G_PRIORITY_DEFAULT,
+				   NULL,
+				   update_system_bookmark_list_ready,
+				   data);
+}
+
+
 static void
 _gth_browser_update_bookmark_list (GthBrowser *browser)
 {
@@ -733,6 +899,8 @@ _gth_browser_update_bookmark_list (GthBrowser *browser)
 		g_object_unref (file);
 	}
 
+	_gth_browser_update_system_bookmark_list (browser);
+
 	g_strfreev (uris);
 }
 
diff --git a/gthumb/gth-location-chooser.c b/gthumb/gth-location-chooser.c
index ebe6361..61362df 100644
--- a/gthumb/gth-location-chooser.c
+++ b/gthumb/gth-location-chooser.c
@@ -35,14 +35,11 @@
 #include "pixbuf-utils.h"
 
 
-#define BUFFER_SIZE 4096
-
 
 enum {
 	ITEM_TYPE_NONE,
 	ITEM_TYPE_SEPARATOR,
 	ITEM_TYPE_LOCATION,
-	ITEM_TYPE_BOOKMARK,
 	ITEM_TYPE_ENTRY_POINT
 };
 
@@ -247,23 +244,22 @@ static void
 update_entry_point_list (GthLocationChooser *chooser)
 {
 	int    first_position;
-	int    last_position;
 	int    i;
 	int    position;
 	GList *scan;
 
 	if (! get_nth_separator_pos (chooser, 1, &first_position))
 		return;
-	if (! get_nth_separator_pos (chooser, 2, &last_position))
-		return;
 
-	for (i = first_position + 1; i < last_position; i++) {
+	for (i = first_position + 1; TRUE; i++) {
 		GtkTreePath *path;
 		GtkTreeIter  iter;
 
 		path = gtk_tree_path_new_from_indices (first_position + 1, -1);
 		if (gtk_tree_model_get_iter (GTK_TREE_MODEL (chooser->priv->model), &iter, path))
 			gtk_tree_store_remove (chooser->priv->model, &iter);
+		else
+			break;
 
 		gtk_tree_path_free (path);
 	}
@@ -292,169 +288,6 @@ update_entry_point_list (GthLocationChooser *chooser)
 }
 
 
-typedef struct {
-	GthLocationChooser *chooser;
-	GInputStream       *stream;
-	char                buffer[BUFFER_SIZE];
-	GString            *file_content;
-} UpdateBookmarksData;
-
-
-static gboolean
-get_bookmark_iter (GthLocationChooser *chooser,
-		   GtkTreeIter        *iter)
-{
-	gboolean found = FALSE;
-
-	if (! gtk_tree_model_get_iter_first (GTK_TREE_MODEL (chooser->priv->model), iter))
-		return FALSE;
-
-	do {
-		int item_type = ITEM_TYPE_NONE;
-
-		gtk_tree_model_get (GTK_TREE_MODEL (chooser->priv->model),
-				    iter,
-				    TYPE_COLUMN, &item_type,
-				    -1);
-		if (item_type == ITEM_TYPE_BOOKMARK) {
-			found = TRUE;
-			break;
-		}
-	}
-	while (gtk_tree_model_iter_next (GTK_TREE_MODEL (chooser->priv->model), iter));
-
-	return found;
-}
-
-
-static void
-update_bookmark_list_from_content (GthLocationChooser *chooser,
-				   const char         *content)
-{
-	GtkTreeIter    bookmark_iter;
-	GtkTreeIter    iter;
-	char         **lines;
-	int            i;
-
-	if (! get_bookmark_iter (chooser, &bookmark_iter))
-		return;
-
-	if (gtk_tree_model_iter_children (GTK_TREE_MODEL (chooser->priv->model), &iter, &bookmark_iter))
-		while (gtk_tree_store_remove (chooser->priv->model, &iter)) /* void */;
-
-	lines = g_strsplit (content, "\n", -1);
-	for (i = 0; lines[i] != NULL; i++) {
-		char      **line;
-		char       *uri;
-		GFile      *file;
-		GIcon      *icon;
-		char       *name;
-		GdkPixbuf  *pixbuf;
-
-		line = g_strsplit (lines[i], " ", 2);
-		uri = line[0];
-		if (uri == NULL)
-			continue;
-
-		file = g_file_new_for_uri (uri);
-		icon = _g_file_get_icon (file);
-		if (line[1] != NULL)
-			name = g_strdup (line[1]);
-		else
-			name = _g_file_get_display_name (file);
-		pixbuf = gth_icon_cache_get_pixbuf (chooser->priv->icon_cache, icon);
-
-		gtk_tree_store_append (chooser->priv->model, &iter, &bookmark_iter);
-		gtk_tree_store_set (chooser->priv->model, &iter,
-				    TYPE_COLUMN, ITEM_TYPE_LOCATION,
-				    ICON_COLUMN, pixbuf,
-				    NAME_COLUMN, name,
-				    URI_COLUMN, uri,
-				    ELLIPSIZE_COLUMN, PANGO_ELLIPSIZE_NONE,
-				    -1);
-
-		g_object_unref (pixbuf);
-		g_free (name);
-		g_object_unref (icon);
-		g_object_unref (file);
-		g_strfreev (line);
-	}
-	g_strfreev (lines);
-}
-
-
-static void
-update_bookmark_list_ready (GObject      *source_object,
-			    GAsyncResult *result,
-			    gpointer      user_data)
-{
-	UpdateBookmarksData *data = user_data;
-	gssize               size;
-
-	size = g_input_stream_read_finish (data->stream, result, NULL);
-	if (size < 0) {
-		g_input_stream_close (data->stream, NULL, NULL);
-		g_object_unref (data->stream);
-		g_free (data);
-		return;
-	}
-
-	if (size > 0) {
-		data->buffer[size + 1] = '\0';
-		g_string_append (data->file_content, data->buffer);
-
-		g_input_stream_read_async (data->stream,
-				   	   data->buffer,
-				   	   BUFFER_SIZE - 1,
-					   G_PRIORITY_DEFAULT,
-					   NULL,
-					   update_bookmark_list_ready,
-					   data);
-		return;
-	}
-
-	update_bookmark_list_from_content (data->chooser, data->file_content->str);
-
-	g_input_stream_close (data->stream, NULL, NULL);
-	g_object_unref (data->stream);
-	g_string_free (data->file_content, TRUE);
-	g_free (data);
-}
-
-
-static void
-update_bookmark_list (GthLocationChooser *chooser)
-{
-	char                *bookmark_file_path;
-	GFile               *bookmark_file;
-	GFileInputStream    *input_stream;
-	UpdateBookmarksData *data;
-
-	bookmark_file_path = g_build_filename (g_get_home_dir (), ".gtk-bookmarks", NULL);
-	bookmark_file = g_file_new_for_path (bookmark_file_path);
-	g_free (bookmark_file_path);
-
-	input_stream = g_file_read (bookmark_file, NULL, NULL);
-	g_object_unref (bookmark_file);
-
-	if (input_stream == NULL)
-		return;
-
-	data = g_new0 (UpdateBookmarksData, 1);
-	data->chooser = chooser;
-	data->stream = (GInputStream*) input_stream;
-	data->file_content = g_string_new ("");
-
-	g_input_stream_read_async (data->stream,
-				   data->buffer,
-				   BUFFER_SIZE - 1,
-				   G_PRIORITY_DEFAULT,
-				   NULL,
-				   update_bookmark_list_ready,
-				   data);
-}
-
-
 static void
 entry_points_changed_cb (GthMonitor         *monitor,
 			 GthLocationChooser *chooser)
@@ -468,8 +301,6 @@ gth_location_chooser_construct (GthLocationChooser *chooser)
 {
 	GtkCellRenderer *renderer;
 	GtkTreeIter      iter;
-	GIcon           *icon;
-	GdkPixbuf       *pixbuf;
 
 	chooser->priv->icon_cache = gth_icon_cache_new (gtk_icon_theme_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (chooser))),
 							 _gtk_icon_get_pixel_size (GTK_WIDGET (chooser), GTK_ICON_SIZE_MENU));
@@ -528,37 +359,12 @@ gth_location_chooser_construct (GthLocationChooser *chooser)
 			    TYPE_COLUMN, ITEM_TYPE_SEPARATOR,
 			    -1);
 
-	/* separator #2 */
-
-	gtk_tree_store_append (chooser->priv->model, &iter, NULL);
-	gtk_tree_store_set (chooser->priv->model, &iter,
-			    TYPE_COLUMN, ITEM_TYPE_SEPARATOR,
-			    -1);
-
-	icon = g_themed_icon_new ("bookmark-view");
-	pixbuf = gth_icon_cache_get_pixbuf (chooser->priv->icon_cache, icon);
-
-	gtk_tree_store_append (chooser->priv->model, &iter, NULL);
-	gtk_tree_store_set (chooser->priv->model, &iter,
-			    TYPE_COLUMN, ITEM_TYPE_BOOKMARK,
-			    ICON_COLUMN, pixbuf,
-			    NAME_COLUMN, _("System Bookmarks"),
-			    ELLIPSIZE_COLUMN, PANGO_ELLIPSIZE_END,
-			    -1);
-
-	g_object_unref (pixbuf);
-	g_object_unref (icon);
-
 	/**/
 
 	performance (DEBUG_INFO, "update_entry_point_list");
 
 	update_entry_point_list (chooser);
 
-	performance (DEBUG_INFO, "update_bookmark_list");
-
-	update_bookmark_list (chooser);
-
 	performance (DEBUG_INFO, "location constructed");
 
 	/**/
diff --git a/gthumb/gth-uri-list.c b/gthumb/gth-uri-list.c
index b57623b..d7ad569 100644
--- a/gthumb/gth-uri-list.c
+++ b/gthumb/gth-uri-list.c
@@ -260,8 +260,14 @@ gth_uri_list_set_uris (GthUriList  *uri_list,
 		file_source = gth_main_get_file_source (file);
 		info = gth_file_source_get_file_info (file_source, file, GFILE_DISPLAY_ATTRIBUTES);
 
-		display_name = g_file_info_get_display_name (info);
-		icon = g_file_info_get_icon (info);
+		if (info != NULL) {
+			display_name = g_file_info_get_display_name (info);
+			icon = g_file_info_get_icon (info);
+		}
+		else {
+			display_name = _g_file_get_display_name (file);
+			icon = _g_file_get_icon (file);
+		}
 		pixbuf = gth_icon_cache_get_pixbuf (uri_list->priv->icon_cache, icon);
 
 		gtk_list_store_append (uri_list->priv->list_store, &iter);



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