summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2008-10-06 10:41:42 +0000
committerAlexander Larsson <alexl@src.gnome.org>2008-10-06 10:41:42 +0000
commit8da0445210d3c50b4ddb69239b0644e59e8bc28c (patch)
tree52d23682c2ade7a0687847c67e6e65edde8a878d /src
parent816294572188d00bcdcca16ad0aed03878e356e0 (diff)
downloadnautilus-8da0445210d3c50b4ddb69239b0644e59e8bc28c.tar.gz
Based on patch from Cosimo Cecchi
2008-10-06 Alexander Larsson <alexl@redhat.com> Based on patch from Cosimo Cecchi * src/file-manager/fm-tree-view.c: * src/nautilus-emblem-sidebar.c: Use gtk_menu_popup instead of gnome_popup_menu_do_popup_modal Don't use GNOME_PAD svn path=/trunk/; revision=14687
Diffstat (limited to 'src')
-rw-r--r--src/file-manager/fm-tree-view.c65
-rw-r--r--src/nautilus-emblem-sidebar.c30
2 files changed, 66 insertions, 29 deletions
diff --git a/src/file-manager/fm-tree-view.c b/src/file-manager/fm-tree-view.c
index 1ffa0f09c..d4ca4b917 100644
--- a/src/file-manager/fm-tree-view.c
+++ b/src/file-manager/fm-tree-view.c
@@ -43,8 +43,6 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <gio/gio.h>
-#include <libgnomeui/gnome-uidefs.h>
-#include <libgnomeui/gnome-popup-menu.h>
#include <libnautilus-private/nautilus-clipboard.h>
#include <libnautilus-private/nautilus-clipboard-monitor.h>
#include <libnautilus-private/nautilus-desktop-icon-file.h>
@@ -104,6 +102,7 @@ struct FMTreeViewDetails {
GtkWidget *popup_unmount;
GtkWidget *popup_eject;
NautilusFile *popup_file;
+ guint popup_file_idle_handler;
guint selection_changed_timer;
};
@@ -679,6 +678,10 @@ button_pressed_callback (GtkTreeView *treeview, GdkEventButton *event,
gboolean show_unmount = FALSE;
gboolean show_eject = FALSE;
GMount *mount = NULL;
+
+ if (view->details->popup_file != NULL) {
+ return FALSE; /* Already up, ignore */
+ }
if (!gtk_tree_view_get_path_at_pos (treeview, event->x, event->y,
&path, NULL, NULL, NULL)) {
@@ -752,20 +755,13 @@ button_pressed_callback (GtkTreeView *treeview, GdkEventButton *event,
gtk_widget_hide (view->details->popup_unmount_separator);
}
- g_object_ref (view);
-
- gnome_popup_menu_do_popup_modal (view->details->popup,
- NULL, NULL, event, NULL,
- GTK_WIDGET (treeview));
-
+ gtk_menu_popup (GTK_MENU (view->details->popup),
+ NULL, NULL, NULL, NULL,
+ event->button, event->time);
+
gtk_tree_view_set_cursor (view->details->tree_widget, cursor_path, NULL, FALSE);
gtk_tree_path_free (cursor_path);
- nautilus_file_unref (view->details->popup_file);
- view->details->popup_file = NULL;
-
- g_object_unref (view);
-
return TRUE;
} else if (event->button == 2 && event->type == GDK_BUTTON_PRESS) {
NautilusFile *file;
@@ -1155,6 +1151,39 @@ fm_tree_view_eject_cb (GtkWidget *menu_item,
}
}
+static gboolean
+free_popup_file_in_idle_cb (gpointer data)
+{
+ FMTreeView *view;
+
+ view = FM_TREE_VIEW (data);
+
+ if (view->details->popup_file != NULL) {
+ nautilus_file_unref (view->details->popup_file);
+ view->details->popup_file = NULL;
+ }
+ view->details->popup_file_idle_handler = 0;
+ return FALSE;
+}
+
+static void
+popup_menu_deactivated (GtkMenuShell *menu_shell, gpointer data)
+{
+ FMTreeView *view;
+
+ view = FM_TREE_VIEW (data);
+
+ /* The popup menu is deactivated. (I.E. hidden)
+ We want to free popup_file, but can't right away as it might immediately get
+ used if we're deactivation due to activating a menu item. So, we free it in
+ idle */
+
+ if (view->details->popup_file != NULL &&
+ view->details->popup_file_idle_handler == 0) {
+ view->details->popup_file_idle_handler = g_idle_add (free_popup_file_in_idle_cb, view);
+ }
+}
+
static void
create_popup_menu (FMTreeView *view)
{
@@ -1166,6 +1195,11 @@ create_popup_menu (FMTreeView *view)
}
popup = gtk_menu_new ();
+
+ g_signal_connect (popup, "deactivate",
+ G_CALLBACK (popup_menu_deactivated),
+ view);
+
/* add the "open" menu item */
menu_image = gtk_image_new_from_stock (GTK_STOCK_OPEN,
@@ -1543,6 +1577,11 @@ fm_tree_view_dispose (GObject *object)
view->details->popup = NULL;
}
+ if (view->details->popup_file_idle_handler != 0) {
+ g_source_remove (view->details->popup_file_idle_handler);
+ view->details->popup_file_idle_handler = 0;
+ }
+
if (view->details->popup_file != NULL) {
nautilus_file_unref (view->details->popup_file);
view->details->popup_file = NULL;
diff --git a/src/nautilus-emblem-sidebar.c b/src/nautilus-emblem-sidebar.c
index 0210d04ee..483598573 100644
--- a/src/nautilus-emblem-sidebar.c
+++ b/src/nautilus-emblem-sidebar.c
@@ -44,8 +44,6 @@
#include <gtk/gtk.h>
#include <librsvg/rsvg.h>
#include <glib/gi18n.h>
-#include <libgnomeui/gnome-uidefs.h>
-#include <libgnomeui/gnome-popup-menu.h>
#include <gconf/gconf-client.h>
#include <libnautilus-private/nautilus-icon-dnd.h>
#include <libnautilus-private/nautilus-emblem-utils.h>
@@ -192,9 +190,9 @@ nautilus_emblem_sidebar_button_press_cb (GtkWidget *widget,
nautilus_emblem_can_rename_emblem (keyword));
- gnome_popup_menu_do_popup_modal (emblem_sidebar->details->popup,
- NULL, NULL, event, NULL,
- widget);
+ gtk_menu_popup (GTK_MENU (emblem_sidebar->details->popup),
+ NULL, NULL, NULL, NULL, event->button,
+ event->time);
}
return TRUE;
@@ -299,15 +297,15 @@ create_rename_emblem_dialog (NautilusEmblemSidebar *emblem_sidebar,
label = gtk_label_new (_("Enter a new name for the displayed emblem:"));
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), label,
- FALSE, FALSE, GNOME_PAD);
+ FALSE, FALSE, 8);
- hbox = gtk_hbox_new (FALSE, GNOME_PAD);
- gtk_box_pack_start (GTK_BOX (hbox), image, TRUE, TRUE, GNOME_PAD);
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_box_pack_start (GTK_BOX (hbox), image, TRUE, TRUE, 8);
gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
- gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, FALSE, GNOME_PAD);
+ gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, FALSE, 8);
gtk_widget_show_all (hbox);
/* it would be nice to have the text selected, ready to be overwritten
@@ -317,7 +315,7 @@ create_rename_emblem_dialog (NautilusEmblemSidebar *emblem_sidebar,
gtk_entry_set_text (GTK_ENTRY (entry), orig_name);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox,
- TRUE, TRUE, GNOME_PAD);
+ TRUE, TRUE, 8);
return dialog;
@@ -548,12 +546,12 @@ create_add_emblems_dialog (NautilusEmblemSidebar *emblem_sidebar,
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
- label, FALSE, FALSE, GNOME_PAD);
+ label, FALSE, FALSE, 8);
gtk_widget_show (label);
scroller = eel_scrolled_wrap_table_new (TRUE, &table);
- eel_wrap_table_set_x_spacing (EEL_WRAP_TABLE (table), GNOME_PAD);
- eel_wrap_table_set_y_spacing (EEL_WRAP_TABLE (table), GNOME_PAD);
+ eel_wrap_table_set_x_spacing (EEL_WRAP_TABLE (table), 8);
+ eel_wrap_table_set_y_spacing (EEL_WRAP_TABLE (table), 8);
num_emblems=0;
list = emblems;
@@ -586,9 +584,9 @@ create_add_emblems_dialog (NautilusEmblemSidebar *emblem_sidebar,
num_emblems++;
}
- gtk_container_set_border_width (GTK_CONTAINER (dialog), GNOME_PAD);
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 8);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
- scroller, TRUE, TRUE, GNOME_PAD);
+ scroller, TRUE, TRUE, 8);
gtk_widget_show_all (scroller);
gtk_widget_grab_focus (first_entry);
@@ -877,7 +875,7 @@ nautilus_emblem_sidebar_create_container (NautilusEmblemSidebar *emblem_sidebar)
/* The emblems wrapped table */
scroller = eel_scrolled_wrap_table_new (TRUE, &emblems_table);
- gtk_container_set_border_width (GTK_CONTAINER (emblems_table), GNOME_PAD);
+ gtk_container_set_border_width (GTK_CONTAINER (emblems_table), 8);
/* set up dnd for adding emblems */
gtk_drag_dest_set (scroller,