Commit e053fb90 authored by William Jon McCann's avatar William Jon McCann

Remove bookmark items from the menu

parent a4dabd2d
...@@ -65,8 +65,6 @@ ...@@ -65,8 +65,6 @@
<menuitem name="Add Bookmark" action="Add Bookmark"/> <menuitem name="Add Bookmark" action="Add Bookmark"/>
<menuitem name="Edit Bookmark" action="Edit Bookmarks"/> <menuitem name="Edit Bookmark" action="Edit Bookmarks"/>
<menuitem name="Go to Location" action="Go to Location"/> <menuitem name="Go to Location" action="Go to Location"/>
<separator/>
<placeholder name="Bookmarks Placeholder"/>
</menu> </menu>
<placeholder name="Extension Actions"/> <placeholder name="Extension Actions"/>
<separator/> <separator/>
......
...@@ -41,64 +41,11 @@ ...@@ -41,64 +41,11 @@
#include <glib/gi18n.h> #include <glib/gi18n.h>
#define MENU_ITEM_MAX_WIDTH_CHARS 32 #define MENU_ITEM_MAX_WIDTH_CHARS 32
#define MENU_PATH_BOOKMARKS_PLACEHOLDER "/ViewMenu/Bookmarks/Bookmarks Placeholder"
static GtkWindow *bookmarks_window = NULL; static GtkWindow *bookmarks_window = NULL;
static void refresh_bookmarks_menu (NautilusWindow *window); static void refresh_bookmarks_menu (NautilusWindow *window);
static void
remove_bookmarks_for_uri_if_yes (GtkDialog *dialog, int response, gpointer callback_data)
{
const char *uri;
NautilusWindow *window;
g_assert (GTK_IS_DIALOG (dialog));
g_assert (callback_data != NULL);
window = callback_data;
if (response == GTK_RESPONSE_YES) {
uri = g_object_get_data (G_OBJECT (dialog), "uri");
nautilus_bookmark_list_delete_items_with_uri (window->details->bookmark_list, uri);
}
gtk_widget_destroy (GTK_WIDGET (dialog));
}
static void
show_bogus_bookmark_window (NautilusWindow *window,
NautilusBookmark *bookmark)
{
GtkDialog *dialog;
GFile *location;
char *uri_for_display;
char *prompt;
char *detail;
location = nautilus_bookmark_get_location (bookmark);
uri_for_display = g_file_get_parse_name (location);
prompt = _("Do you want to remove any bookmarks with the "
"non-existing location from your list?");
detail = g_strdup_printf (_("The location \"%s\" does not exist."), uri_for_display);
dialog = eel_show_yes_no_dialog (prompt, detail,
_("Bookmark for Nonexistent Location"),
GTK_STOCK_CANCEL,
GTK_WINDOW (window));
g_signal_connect (dialog, "response",
G_CALLBACK (remove_bookmarks_for_uri_if_yes), window);
g_object_set_data_full (G_OBJECT (dialog), "uri", g_file_get_uri (location), g_free);
gtk_dialog_set_default_response (dialog, GTK_RESPONSE_NO);
g_object_unref (location);
g_free (uri_for_display);
g_free (detail);
}
/** /**
* add_bookmark_for_current_location * add_bookmark_for_current_location
* *
...@@ -152,175 +99,9 @@ remove_bookmarks_menu_items (NautilusWindow *window) ...@@ -152,175 +99,9 @@ remove_bookmarks_menu_items (NautilusWindow *window)
} }
} }
static void
connect_proxy_cb (GtkActionGroup *action_group,
GtkAction *action,
GtkWidget *proxy,
gpointer dummy)
{
GtkLabel *label;
GIcon *icon;
if (!GTK_IS_MENU_ITEM (proxy))
return;
label = GTK_LABEL (gtk_bin_get_child (GTK_BIN (proxy)));
gtk_label_set_use_underline (label, FALSE);
gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_END);
gtk_label_set_max_width_chars (label, MENU_ITEM_MAX_WIDTH_CHARS);
icon = g_object_get_data (G_OBJECT (action), "menu-icon");
if (icon != NULL) {
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (proxy),
gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU));
}
}
/* Struct that stores all the info necessary to activate a bookmark. */
typedef struct {
NautilusBookmark *bookmark;
NautilusWindow *window;
GCallback refresh_callback;
NautilusBookmarkFailedCallback failed_callback;
} BookmarkHolder;
static BookmarkHolder *
bookmark_holder_new (NautilusBookmark *bookmark,
NautilusWindow *window,
GCallback refresh_callback,
NautilusBookmarkFailedCallback failed_callback)
{
BookmarkHolder *new_bookmark_holder;
new_bookmark_holder = g_new (BookmarkHolder, 1);
new_bookmark_holder->window = window;
new_bookmark_holder->bookmark = bookmark;
new_bookmark_holder->failed_callback = failed_callback;
new_bookmark_holder->refresh_callback = refresh_callback;
/* Ref the bookmark because it might be unreffed away while
* we're holding onto it (not an issue for window).
*/
g_object_ref (bookmark);
g_signal_connect_object (bookmark, "notify::icon",
refresh_callback,
window, G_CONNECT_SWAPPED);
g_signal_connect_object (bookmark, "notify::name",
refresh_callback,
window, G_CONNECT_SWAPPED);
return new_bookmark_holder;
}
static void
bookmark_holder_free (BookmarkHolder *bookmark_holder)
{
g_signal_handlers_disconnect_by_func (bookmark_holder->bookmark,
bookmark_holder->refresh_callback, bookmark_holder->window);
g_object_unref (bookmark_holder->bookmark);
g_free (bookmark_holder);
}
static void
bookmark_holder_free_cover (gpointer callback_data, GClosure *closure)
{
bookmark_holder_free (callback_data);
}
static void
activate_bookmark_in_menu_item (GtkAction *action, gpointer user_data)
{
NautilusWindowSlot *slot;
BookmarkHolder *holder;
GFile *location;
holder = (BookmarkHolder *)user_data;
if (nautilus_bookmark_uri_known_not_to_exist (holder->bookmark)) {
holder->failed_callback (holder->window, holder->bookmark);
} else {
location = nautilus_bookmark_get_location (holder->bookmark);
slot = nautilus_window_get_active_slot (holder->window);
nautilus_window_slot_open_location (slot, location,
nautilus_event_get_window_open_flags ());
g_object_unref (location);
}
}
static void
nautilus_menus_append_bookmark_to_menu (NautilusWindow *window,
NautilusBookmark *bookmark,
const char *parent_path,
const char *parent_id,
guint index_in_parent,
GtkActionGroup *action_group,
guint merge_id,
GCallback refresh_callback,
NautilusBookmarkFailedCallback failed_callback)
{
BookmarkHolder *bookmark_holder;
char action_name[128];
const char *name;
char *path;
GIcon *icon;
GtkAction *action;
GtkWidget *menuitem;
g_assert (NAUTILUS_IS_WINDOW (window));
g_assert (NAUTILUS_IS_BOOKMARK (bookmark));
bookmark_holder = bookmark_holder_new (bookmark, window, refresh_callback, failed_callback);
name = nautilus_bookmark_get_name (bookmark);
/* Create menu item with pixbuf */
icon = nautilus_bookmark_get_icon (bookmark);
g_snprintf (action_name, sizeof (action_name), "%s%d", parent_id, index_in_parent);
action = gtk_action_new (action_name,
name,
_("Go to the location specified by this bookmark"),
NULL);
g_object_set_data_full (G_OBJECT (action), "menu-icon",
icon,
g_object_unref);
g_signal_connect_data (action, "activate",
G_CALLBACK (activate_bookmark_in_menu_item),
bookmark_holder,
bookmark_holder_free_cover, 0);
gtk_action_group_add_action (action_group,
GTK_ACTION (action));
g_object_unref (action);
gtk_ui_manager_add_ui (window->details->ui_manager,
merge_id,
parent_path,
action_name,
action_name,
GTK_UI_MANAGER_MENUITEM,
FALSE);
path = g_strdup_printf ("%s/%s", parent_path, action_name);
menuitem = gtk_ui_manager_get_widget (window->details->ui_manager,
path);
gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menuitem),
TRUE);
g_free (path);
}
static void static void
update_bookmarks (NautilusWindow *window) update_bookmarks (NautilusWindow *window)
{ {
NautilusBookmarkList *bookmarks;
NautilusBookmark *bookmark;
guint bookmark_count;
guint index;
GtkUIManager *ui_manager; GtkUIManager *ui_manager;
g_assert (NAUTILUS_IS_WINDOW (window)); g_assert (NAUTILUS_IS_WINDOW (window));
...@@ -331,40 +112,15 @@ update_bookmarks (NautilusWindow *window) ...@@ -331,40 +112,15 @@ update_bookmarks (NautilusWindow *window)
window->details->bookmark_list = nautilus_bookmark_list_new (); window->details->bookmark_list = nautilus_bookmark_list_new ();
} }
bookmarks = window->details->bookmark_list;
ui_manager = nautilus_window_get_ui_manager (NAUTILUS_WINDOW (window)); ui_manager = nautilus_window_get_ui_manager (NAUTILUS_WINDOW (window));
window->details->bookmarks_merge_id = gtk_ui_manager_new_merge_id (ui_manager); window->details->bookmarks_merge_id = gtk_ui_manager_new_merge_id (ui_manager);
window->details->bookmarks_action_group = gtk_action_group_new ("BookmarksGroup"); window->details->bookmarks_action_group = gtk_action_group_new ("BookmarksGroup");
g_signal_connect (window->details->bookmarks_action_group, "connect-proxy",
G_CALLBACK (connect_proxy_cb), NULL);
gtk_ui_manager_insert_action_group (ui_manager, gtk_ui_manager_insert_action_group (ui_manager,
window->details->bookmarks_action_group, window->details->bookmarks_action_group,
-1); -1);
g_object_unref (window->details->bookmarks_action_group); g_object_unref (window->details->bookmarks_action_group);
/* append new set of bookmarks */
bookmark_count = nautilus_bookmark_list_length (bookmarks);
for (index = 0; index < bookmark_count; ++index) {
bookmark = nautilus_bookmark_list_item_at (bookmarks, index);
if (nautilus_bookmark_uri_known_not_to_exist (bookmark)) {
continue;
}
nautilus_menus_append_bookmark_to_menu
(NAUTILUS_WINDOW (window),
bookmark,
MENU_PATH_BOOKMARKS_PLACEHOLDER,
"dynamic",
index,
window->details->bookmarks_action_group,
window->details->bookmarks_merge_id,
G_CALLBACK (refresh_bookmarks_menu),
show_bogus_bookmark_window);
}
} }
static void static void
...@@ -388,9 +144,4 @@ nautilus_window_initialize_bookmarks_menu (NautilusWindow *window) ...@@ -388,9 +144,4 @@ nautilus_window_initialize_bookmarks_menu (NautilusWindow *window)
g_assert (NAUTILUS_IS_WINDOW (window)); g_assert (NAUTILUS_IS_WINDOW (window));
refresh_bookmarks_menu (window); refresh_bookmarks_menu (window);
/* Recreate dynamic part of menu if bookmark list changes */
g_signal_connect_object (window->details->bookmark_list, "changed",
G_CALLBACK (refresh_bookmarks_menu),
window, G_CONNECT_SWAPPED);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment