summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2009-05-28 11:43:14 +0200
committerCosimo Cecchi <cosimoc@gnome.org>2009-05-28 11:43:14 +0200
commit518a1ae6ba0a3e09236f944ee655334087d5ddee (patch)
treec76f541fe3d8a5db695e00aafc3620fb1bcd208a /src
parent4bb61206b7dd4a3510ab15e8df0288e670f816d6 (diff)
downloadnautilus-518a1ae6ba0a3e09236f944ee655334087d5ddee.tar.gz
Display information about the selected object
Display information about the selected object in the "Information" sidebar, using thumbnails if possible. Also, remove the "Open with" buttons there for directories. Fix bug #122045, thanks to Amos Brocco.
Diffstat (limited to 'src')
-rw-r--r--src/nautilus-information-panel.c102
-rw-r--r--src/nautilus-sidebar-title.c3
2 files changed, 68 insertions, 37 deletions
diff --git a/src/nautilus-information-panel.c b/src/nautilus-information-panel.c
index 5ef238e8b..505015145 100644
--- a/src/nautilus-information-panel.c
+++ b/src/nautilus-information-panel.c
@@ -86,8 +86,6 @@ static void nautilus_information_panel_style_set (GtkWidget
static void nautilus_information_panel_theme_changed (gpointer user_data);
static void nautilus_information_panel_update_appearance (NautilusInformationPanel *information_panel);
static void nautilus_information_panel_update_buttons (NautilusInformationPanel *information_panel);
-static void add_command_buttons (NautilusInformationPanel *information_panel,
- GList *application_list);
static void background_metadata_changed_callback (NautilusInformationPanel *information_panel);
static void nautilus_information_panel_iface_init (NautilusSidebarIface *iface);
static void nautilus_information_panel_iface_init (NautilusSidebarIface *iface);
@@ -819,40 +817,34 @@ metadata_button_callback (GtkWidget *button, const char *command_str)
/* utility routine that allocates the command buttons from the command list */
static void
-add_command_buttons (NautilusInformationPanel *information_panel, GList *application_list)
+add_command_button (NautilusInformationPanel *information_panel, GAppInfo *application)
{
char *temp_str;
- GList *p;
GtkWidget *temp_button, *label;
- GAppInfo *application;
/* There's always at least the "Open with..." button */
information_panel->details->has_buttons = TRUE;
- for (p = application_list; p != NULL; p = p->next) {
- application = p->data;
-
- temp_str = g_strdup_printf (_("Open with %s"), g_app_info_get_name (application));
- temp_button = gtk_button_new_with_label (temp_str);
- label = GTK_BIN (temp_button)->child;
- gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_START);
- g_free (temp_str);
- gtk_box_pack_start (GTK_BOX (information_panel->details->button_box),
- temp_button,
- FALSE, FALSE,
- 0);
-
- g_signal_connect_data (temp_button,
- "clicked",
- G_CALLBACK (command_button_callback),
- g_object_ref (application),
- (GClosureNotify)g_object_unref,
- 0);
-
- g_object_set_data (G_OBJECT (temp_button), "user_data", information_panel);
-
- gtk_widget_show (temp_button);
- }
+ temp_str = g_strdup_printf (_("Open with %s"), g_app_info_get_name (application));
+ temp_button = gtk_button_new_with_label (temp_str);
+ label = GTK_BIN (temp_button)->child;
+ gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_START);
+ g_free (temp_str);
+ gtk_box_pack_start (GTK_BOX (information_panel->details->button_box),
+ temp_button,
+ FALSE, FALSE,
+ 0);
+
+ g_signal_connect_data (temp_button,
+ "clicked",
+ G_CALLBACK (command_button_callback),
+ g_object_ref (application),
+ (GClosureNotify)g_object_unref,
+ 0);
+
+ g_object_set_data (G_OBJECT (temp_button), "user_data", information_panel);
+
+ gtk_widget_show (temp_button);
}
/* utility to construct command buttons for the information_panel from the passed in metadata string */
@@ -917,7 +909,7 @@ static void
nautilus_information_panel_update_buttons (NautilusInformationPanel *information_panel)
{
char *button_data;
- GList *short_application_list;
+ GAppInfo *default_app;
/* dispose of any existing buttons */
if (information_panel->details->has_buttons) {
@@ -935,12 +927,13 @@ nautilus_information_panel_update_buttons (NautilusInformationPanel *information
g_free(button_data);
}
- /* Make buttons for each application */
- if (nautilus_mime_has_any_applications_for_file (information_panel->details->file)) {
- short_application_list =
- nautilus_mime_get_applications_for_file (information_panel->details->file);
- add_command_buttons (information_panel, short_application_list);
- eel_g_object_list_free (short_application_list);
+ /* Make a button for the default application */
+ if (nautilus_mime_has_any_applications_for_file (information_panel->details->file) &&
+ !nautilus_file_is_directory (information_panel->details->file)) {
+ default_app =
+ nautilus_mime_get_default_application_for_file (information_panel->details->file);
+ add_command_button (information_panel, default_app);
+ g_object_unref (default_app);
}
gtk_widget_show (GTK_WIDGET (information_panel->details->button_box_centerer));
@@ -1109,6 +1102,41 @@ loading_uri_callback (NautilusWindowInfo *window,
}
static void
+selection_changed_callback (NautilusWindowInfo *window,
+ NautilusInformationPanel *panel)
+{
+ int selection_count;
+ GList *selection;
+ GFile *selected;
+ NautilusFile *file;
+ char *uri, *name;
+
+ selection = nautilus_window_info_get_selection (window);
+ selection_count = g_list_length (selection);
+
+ if (selection_count == 1) {
+ selection = nautilus_window_info_get_selection (window);
+ selected = selection->data;
+
+ /* this should never fail here, as we're displaying the file */
+ file = nautilus_file_get_existing (selected);
+ uri = nautilus_file_get_uri (file);
+ name = nautilus_file_get_display_name (file);
+
+ nautilus_file_unref (file);
+ } else {
+ uri = nautilus_window_info_get_current_location (window);
+ name = nautilus_window_info_get_title (window);
+ }
+
+ nautilus_information_panel_set_uri (panel, uri, name);
+
+ eel_g_object_list_unref (selection);
+ g_free (uri);
+ g_free (name);
+}
+
+static void
nautilus_information_panel_set_parent_window (NautilusInformationPanel *panel,
NautilusWindowInfo *window)
{
@@ -1121,6 +1149,8 @@ nautilus_information_panel_set_parent_window (NautilusInformationPanel *panel,
G_CALLBACK (loading_uri_callback), panel, 0);
g_signal_connect_object (window, "title_changed",
G_CALLBACK (title_changed_callback), panel, 0);
+ g_signal_connect_object (window, "selection-changed",
+ G_CALLBACK (selection_changed_callback), panel, 0);
slot = nautilus_window_info_get_active_slot (window);
diff --git a/src/nautilus-sidebar-title.c b/src/nautilus-sidebar-title.c
index 28bdbb062..2c9b081bd 100644
--- a/src/nautilus-sidebar-title.c
+++ b/src/nautilus-sidebar-title.c
@@ -310,7 +310,8 @@ update_icon (NautilusSidebarTitle *sidebar_title)
NAUTILUS_FILE_ATTRIBUTES_FOR_ICON)) {
pixbuf = nautilus_file_get_icon_pixbuf (sidebar_title->details->file,
sidebar_title->details->best_icon_size,
- FALSE,
+ TRUE,
+ NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS |
NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT);
} else if (sidebar_title->details->determined_icon) {
/* We used to know the icon for this file, but now the file says it isn't