[gthumb/ext] moved the system bookmarks in the bookmarks menu
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb/ext] moved the system bookmarks in the bookmarks menu
- Date: Thu, 29 Oct 2009 00:46:53 +0000 (UTC)
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]