floating-bar: ellipsize the filename separately from the details

This patch does three things:
- It adds API to the floating bar to have primary and details labels
  instead of a single label. The primary label is ellipsized separately
  from the details, so it makes a good fit for a filename.
- Modifies the code setting status messages in NautilusView to split
  them into two separate strings
- Removes obsolete code in NautilusView and NautilusWindowSlot that was
  setting long statuses for the old non-floating statusbar

https://bugzilla.gnome.org/show_bug.cgi?id=660695
This commit is contained in:
Cosimo Cecchi 2012-08-31 15:14:35 -04:00
parent 9082b6b578
commit c68a487c8f
9 changed files with 171 additions and 262 deletions

View file

@ -1071,32 +1071,6 @@ nautilus_canvas_view_get_selection (NautilusView *view)
return list;
}
static void
count_item (NautilusCanvasIconData *icon_data,
gpointer callback_data)
{
guint *count;
count = callback_data;
(*count)++;
}
static guint
nautilus_canvas_view_get_item_count (NautilusView *view)
{
guint count;
g_return_val_if_fail (NAUTILUS_IS_CANVAS_VIEW (view), 0);
count = 0;
nautilus_canvas_container_for_each
(get_canvas_container (NAUTILUS_CANVAS_VIEW (view)),
count_item, &count);
return count;
}
static void
set_sort_criterion_by_sort_type (NautilusCanvasView *canvas_view,
NautilusFileSortType sort_type)
@ -2282,7 +2256,6 @@ nautilus_canvas_view_class_init (NautilusCanvasViewClass *klass)
nautilus_view_class->get_selected_icon_locations = nautilus_canvas_view_get_selected_icon_locations;
nautilus_view_class->get_selection = nautilus_canvas_view_get_selection;
nautilus_view_class->get_selection_for_file_transfer = nautilus_canvas_view_get_selection;
nautilus_view_class->get_item_count = nautilus_canvas_view_get_item_count;
nautilus_view_class->is_empty = nautilus_canvas_view_is_empty;
nautilus_view_class->remove_file = nautilus_canvas_view_remove_file;
nautilus_view_class->reset_to_defaults = nautilus_canvas_view_reset_to_defaults;

View file

@ -25,19 +25,24 @@
#include <config.h>
#include <string.h>
#include "nautilus-floating-bar.h"
struct _NautilusFloatingBarDetails {
gchar *label;
gchar *primary_label;
gchar *details_label;
GtkWidget *label_widget;
GtkWidget *primary_label_widget;
GtkWidget *details_label_widget;
GtkWidget *spinner;
gboolean show_spinner;
gboolean is_interactive;
};
enum {
PROP_LABEL = 1,
PROP_PRIMARY_LABEL = 1,
PROP_DETAILS_LABEL,
PROP_SHOW_SPINNER,
NUM_PROPERTIES
};
@ -70,7 +75,8 @@ nautilus_floating_bar_finalize (GObject *obj)
{
NautilusFloatingBar *self = NAUTILUS_FLOATING_BAR (obj);
g_free (self->priv->label);
g_free (self->priv->primary_label);
g_free (self->priv->details_label);
G_OBJECT_CLASS (nautilus_floating_bar_parent_class)->finalize (obj);
}
@ -84,8 +90,11 @@ nautilus_floating_bar_get_property (GObject *object,
NautilusFloatingBar *self = NAUTILUS_FLOATING_BAR (object);
switch (property_id) {
case PROP_LABEL:
g_value_set_string (value, self->priv->label);
case PROP_PRIMARY_LABEL:
g_value_set_string (value, self->priv->primary_label);
break;
case PROP_DETAILS_LABEL:
g_value_set_string (value, self->priv->details_label);
break;
case PROP_SHOW_SPINNER:
g_value_set_boolean (value, self->priv->show_spinner);
@ -105,8 +114,11 @@ nautilus_floating_bar_set_property (GObject *object,
NautilusFloatingBar *self = NAUTILUS_FLOATING_BAR (object);
switch (property_id) {
case PROP_LABEL:
nautilus_floating_bar_set_label (self, g_value_get_string (value));
case PROP_PRIMARY_LABEL:
nautilus_floating_bar_set_primary_label (self, g_value_get_string (value));
break;
case PROP_DETAILS_LABEL:
nautilus_floating_bar_set_details_label (self, g_value_get_string (value));
break;
case PROP_SHOW_SPINNER:
nautilus_floating_bar_set_show_spinner (self, g_value_get_boolean (value));
@ -118,9 +130,22 @@ nautilus_floating_bar_set_property (GObject *object,
}
static void
update_label (NautilusFloatingBar *self)
update_labels (NautilusFloatingBar *self)
{
gtk_label_set_text (GTK_LABEL (self->priv->label_widget), self->priv->label);
gboolean primary_visible, details_visible;
primary_visible = (self->priv->primary_label != NULL) &&
(strlen (self->priv->primary_label) > 0);
details_visible = (self->priv->details_label != NULL) &&
(strlen (self->priv->details_label) > 0);
gtk_label_set_text (GTK_LABEL (self->priv->primary_label_widget),
self->priv->primary_label);
gtk_widget_set_visible (self->priv->primary_label_widget, primary_visible);
gtk_label_set_text (GTK_LABEL (self->priv->details_label_widget),
self->priv->details_label);
gtk_widget_set_visible (self->priv->details_label_widget, details_visible);
}
static gboolean
@ -218,7 +243,7 @@ static void
nautilus_floating_bar_constructed (GObject *obj)
{
NautilusFloatingBar *self = NAUTILUS_FLOATING_BAR (obj);
GtkWidget *w, *box;
GtkWidget *w, *box, *labels_box;
G_OBJECT_CLASS (nautilus_floating_bar_parent_class)->constructed (obj);
@ -232,17 +257,27 @@ nautilus_floating_bar_constructed (GObject *obj)
gtk_widget_set_size_request (w, 16, 16);
gtk_widget_set_margin_left (w, 8);
w = gtk_label_new (NULL);
gtk_label_set_ellipsize (GTK_LABEL (w), PANGO_ELLIPSIZE_END);
gtk_label_set_single_line_mode (GTK_LABEL (w), TRUE);
gtk_box_pack_start (GTK_BOX (box), w, FALSE, FALSE, 0);
g_object_set (w,
labels_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
gtk_box_pack_start (GTK_BOX (box), labels_box, TRUE, TRUE, 0);
g_object_set (labels_box,
"margin-top", 2,
"margin-bottom", 2,
"margin-left", 12,
"margin-right", 12,
NULL);
self->priv->label_widget = w;
gtk_widget_show (labels_box);
w = gtk_label_new (NULL);
gtk_label_set_ellipsize (GTK_LABEL (w), PANGO_ELLIPSIZE_MIDDLE);
gtk_label_set_single_line_mode (GTK_LABEL (w), TRUE);
gtk_container_add (GTK_CONTAINER (labels_box), w);
self->priv->primary_label_widget = w;
gtk_widget_show (w);
w = gtk_label_new (NULL);
gtk_label_set_single_line_mode (GTK_LABEL (w), TRUE);
gtk_container_add (GTK_CONTAINER (labels_box), w);
self->priv->details_label_widget = w;
gtk_widget_show (w);
}
@ -274,10 +309,16 @@ nautilus_floating_bar_class_init (NautilusFloatingBarClass *klass)
wclass->hide = nautilus_floating_bar_hide;
wclass->parent_set = nautilus_floating_bar_parent_set;
properties[PROP_LABEL] =
g_param_spec_string ("label",
"Bar's label",
"Label displayed by the bar",
properties[PROP_PRIMARY_LABEL] =
g_param_spec_string ("primary-label",
"Bar's primary label",
"Primary label displayed by the bar",
NULL,
G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS);
properties[PROP_DETAILS_LABEL] =
g_param_spec_string ("details-label",
"Bar's details label",
"Details label displayed by the bar",
NULL,
G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS);
properties[PROP_SHOW_SPINNER] =
@ -301,19 +342,42 @@ nautilus_floating_bar_class_init (NautilusFloatingBarClass *klass)
}
void
nautilus_floating_bar_set_label (NautilusFloatingBar *self,
const gchar *label)
nautilus_floating_bar_set_primary_label (NautilusFloatingBar *self,
const gchar *label)
{
if (g_strcmp0 (self->priv->label, label) != 0) {
g_free (self->priv->label);
self->priv->label = g_strdup (label);
if (g_strcmp0 (self->priv->primary_label, label) != 0) {
g_free (self->priv->primary_label);
self->priv->primary_label = g_strdup (label);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_LABEL]);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_PRIMARY_LABEL]);
update_label (self);
update_labels (self);
}
}
void
nautilus_floating_bar_set_details_label (NautilusFloatingBar *self,
const gchar *label)
{
if (g_strcmp0 (self->priv->details_label, label) != 0) {
g_free (self->priv->details_label);
self->priv->details_label = g_strdup (label);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_DETAILS_LABEL]);
update_labels (self);
}
}
void
nautilus_floating_bar_set_labels (NautilusFloatingBar *self,
const gchar *primary_label,
const gchar *details_label)
{
nautilus_floating_bar_set_primary_label (self, primary_label);
nautilus_floating_bar_set_details_label (self, details_label);
}
void
nautilus_floating_bar_set_show_spinner (NautilusFloatingBar *self,
gboolean show_spinner)
@ -328,11 +392,13 @@ nautilus_floating_bar_set_show_spinner (NautilusFloatingBar *self,
}
GtkWidget *
nautilus_floating_bar_new (const gchar *label,
nautilus_floating_bar_new (const gchar *primary_label,
const gchar *details_label,
gboolean show_spinner)
{
return g_object_new (NAUTILUS_TYPE_FLOATING_BAR,
"label", label,
"primary-label", primary_label,
"details-label", details_label,
"show-spinner", show_spinner,
"orientation", GTK_ORIENTATION_HORIZONTAL,
"spacing", 8,

View file

@ -58,11 +58,17 @@ struct _NautilusFloatingBarClass {
/* GObject */
GType nautilus_floating_bar_get_type (void);
GtkWidget * nautilus_floating_bar_new (const gchar *label,
GtkWidget * nautilus_floating_bar_new (const gchar *primary_label,
const gchar *details_label,
gboolean show_spinner);
void nautilus_floating_bar_set_label (NautilusFloatingBar *self,
void nautilus_floating_bar_set_primary_label (NautilusFloatingBar *self,
const gchar *label);
void nautilus_floating_bar_set_details_label (NautilusFloatingBar *self,
const gchar *label);
void nautilus_floating_bar_set_labels (NautilusFloatingBar *self,
const gchar *primary,
const gchar *detail);
void nautilus_floating_bar_set_show_spinner (NautilusFloatingBar *self,
gboolean show_spinner);

View file

@ -2056,17 +2056,6 @@ nautilus_list_view_get_selection_for_file_transfer (NautilusView *view)
return g_list_reverse (selection_data.list);
}
static guint
nautilus_list_view_get_item_count (NautilusView *view)
{
g_return_val_if_fail (NAUTILUS_IS_LIST_VIEW (view), 0);
return nautilus_list_model_get_length (NAUTILUS_LIST_VIEW (view)->details->model);
}
static gboolean
nautilus_list_view_is_empty (NautilusView *view)
{
@ -3015,7 +3004,6 @@ nautilus_list_view_class_init (NautilusListViewClass *class)
nautilus_view_class->get_backing_uri = nautilus_list_view_get_backing_uri;
nautilus_view_class->get_selection = nautilus_list_view_get_selection;
nautilus_view_class->get_selection_for_file_transfer = nautilus_list_view_get_selection_for_file_transfer;
nautilus_view_class->get_item_count = nautilus_list_view_get_item_count;
nautilus_view_class->is_empty = nautilus_list_view_is_empty;
nautilus_view_class->remove_file = nautilus_list_view_remove_file;
nautilus_view_class->merge_menus = nautilus_list_view_merge_menus;

View file

@ -489,14 +489,6 @@ nautilus_view_using_manual_layout (NautilusView *view)
return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->using_manual_layout (view);
}
static guint
nautilus_view_get_item_count (NautilusView *view)
{
g_return_val_if_fail (NAUTILUS_IS_VIEW (view), 0);
return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_item_count (view);
}
/**
* nautilus_view_can_rename_file
*
@ -2850,13 +2842,12 @@ nautilus_view_display_selection_info (NautilusView *view)
guint file_item_count;
GList *p;
char *first_item_name;
char *non_folder_str;
char *non_folder_count_str;
char *non_folder_item_count_str;
char *folder_count_str;
char *folder_item_count_str;
char *status_string;
char *view_status_string;
char *free_space_str;
char *obj_selected_free_space_str;
char *primary_status;
char *detail_status;
NautilusFile *file;
g_return_if_fail (NAUTILUS_IS_VIEW (view));
@ -2871,12 +2862,9 @@ nautilus_view_display_selection_info (NautilusView *view)
non_folder_size = 0;
first_item_name = NULL;
folder_count_str = NULL;
non_folder_str = NULL;
folder_item_count_str = NULL;
free_space_str = NULL;
obj_selected_free_space_str = NULL;
status_string = NULL;
view_status_string = NULL;
non_folder_count_str = NULL;
non_folder_item_count_str = NULL;
for (p = selection; p != NULL; p = p->next) {
file = p->data;
@ -2920,8 +2908,8 @@ nautilus_view_display_selection_info (NautilusView *view)
if (!folder_item_count_known) {
folder_item_count_str = g_strdup ("");
} else {
folder_item_count_str = g_strdup_printf (ngettext(" (containing %'d item)",
" (containing %'d items)",
folder_item_count_str = g_strdup_printf (ngettext("(containing %'d item)",
"(containing %'d items)",
folder_item_count),
folder_item_count);
}
@ -2931,8 +2919,8 @@ nautilus_view_display_selection_info (NautilusView *view)
folder_item_count_str = g_strdup ("");
} else {
/* translators: this is preceded with a string of form 'N folders' (N more than 1) */
folder_item_count_str = g_strdup_printf (ngettext(" (containing a total of %'d item)",
" (containing a total of %'d items)",
folder_item_count_str = g_strdup_printf (ngettext("(containing a total of %'d item)",
"(containing a total of %'d items)",
folder_item_count),
folder_item_count);
}
@ -2941,24 +2929,22 @@ nautilus_view_display_selection_info (NautilusView *view)
}
if (non_folder_count != 0) {
char *items_string;
if (folder_count == 0) {
if (non_folder_count == 1) {
items_string = g_strdup_printf (_("“%s” selected"),
first_item_name);
non_folder_count_str = g_strdup_printf (_("“%s” selected"),
first_item_name);
} else {
items_string = g_strdup_printf (ngettext("%'d item selected",
"%'d items selected",
non_folder_count),
non_folder_count);
non_folder_count_str = g_strdup_printf (ngettext("%'d item selected",
"%'d items selected",
non_folder_count),
non_folder_count);
}
} else {
/* Folders selected also, use "other" terminology */
items_string = g_strdup_printf (ngettext("%'d other item selected",
"%'d other items selected",
non_folder_count),
non_folder_count);
non_folder_count_str = g_strdup_printf (ngettext("%'d other item selected",
"%'d other items selected",
non_folder_count),
non_folder_count);
}
if (non_folder_size_known) {
@ -2967,72 +2953,24 @@ nautilus_view_display_selection_info (NautilusView *view)
size_string = g_format_size (non_folder_size);
/* This is marked for translation in case a localiser
* needs to use something other than parentheses. The
* first message gives the number of items selected;
* the message in parentheses the size of those items.
* the message in parentheses is the size of the selected items.
*/
non_folder_str = g_strdup_printf (_("%s (%s)"),
items_string,
size_string);
non_folder_item_count_str = g_strdup_printf (_("(%s)"), size_string);
g_free (size_string);
g_free (items_string);
} else {
non_folder_str = items_string;
non_folder_item_count_str = g_strdup ("");
}
}
free_space_str = nautilus_file_get_volume_free_space (view->details->directory_as_file);
if (free_space_str != NULL) {
obj_selected_free_space_str = g_strdup_printf (_("Free space: %s"), free_space_str);
}
if (folder_count == 0 && non_folder_count == 0) {
char *item_count_str;
guint item_count;
item_count = nautilus_view_get_item_count (view);
item_count_str = g_strdup_printf (ngettext ("%'u item", "%'u items", item_count), item_count);
if (free_space_str != NULL) {
status_string = g_strdup_printf (_("%s, Free space: %s"), item_count_str, free_space_str);
g_free (item_count_str);
} else {
status_string = item_count_str;
}
primary_status = NULL;
detail_status = NULL;
} else if (folder_count == 0) {
view_status_string = g_strdup (non_folder_str);
if (free_space_str != NULL) {
/* Marking this for translation, since you
* might want to change "," to something else.
* After the comma the amount of free space will
* be shown.
*/
status_string = g_strdup_printf (_("%s, %s"),
non_folder_str,
obj_selected_free_space_str);
}
primary_status = g_strdup (non_folder_count_str);
detail_status = g_strdup (non_folder_item_count_str);
} else if (non_folder_count == 0) {
/* No use marking this for translation, since you
* can't reorder the strings, which is the main thing
* you'd want to do.
*/
view_status_string = g_strdup_printf ("%s%s",
folder_count_str,
folder_item_count_str);
if (free_space_str != NULL) {
/* Marking this for translation, since you
* might want to change "," to something else.
* After the comma the amount of free space will
* be shown.
*/
status_string = g_strdup_printf (_("%s%s, %s"),
folder_count_str,
folder_item_count_str,
obj_selected_free_space_str);
}
primary_status = g_strdup (folder_count_str);
detail_status = g_strdup (folder_item_count_str);
} else {
/* This is marked for translation in case a localizer
* needs to change ", " to something else. The comma
@ -3041,45 +2979,25 @@ nautilus_view_display_selection_info (NautilusView *view)
* message about the number of other items and the
* total size of those items.
*/
view_status_string = g_strdup_printf (_("%s%s, %s"),
folder_count_str,
folder_item_count_str,
non_folder_str);
if (obj_selected_free_space_str != NULL) {
/* This is marked for translation in case a localizer
* needs to change ", " to something else. The first comma
* is between the message about the number of folders
* and the number of items in those folders and the
* message about the number of other items and the
* total size of those items. After the second comma
* the free space is written.
*/
status_string = g_strdup_printf (_("%s%s, %s, %s"),
folder_count_str,
folder_item_count_str,
non_folder_str,
obj_selected_free_space_str);
}
primary_status = g_strdup_printf (_("%s %s, %s %s"),
folder_count_str,
folder_item_count_str,
non_folder_count_str,
non_folder_item_count_str);
detail_status = NULL;
}
g_free (free_space_str);
g_free (obj_selected_free_space_str);
g_free (first_item_name);
g_free (folder_count_str);
g_free (folder_item_count_str);
g_free (non_folder_str);
if (status_string == NULL) {
status_string = g_strdup (view_status_string);
}
g_free (non_folder_count_str);
g_free (non_folder_item_count_str);
nautilus_window_slot_set_status (view->details->slot,
status_string,
view_status_string);
primary_status, detail_status);
g_free (status_string);
g_free (view_status_string);
g_free (primary_status);
g_free (detail_status);
}
static void
@ -6100,8 +6018,6 @@ copy_or_cut_files (NautilusView *view,
GList *clipboard_contents,
gboolean cut)
{
int count;
char *status_string, *name;
NautilusClipboardInfo info;
GtkTargetList *target_list;
GtkTargetEntry *targets;
@ -6125,41 +6041,6 @@ copy_or_cut_files (NautilusView *view,
gtk_target_table_free (targets, n_targets);
nautilus_clipboard_monitor_set_clipboard_info (nautilus_clipboard_monitor_get (), &info);
count = g_list_length (clipboard_contents);
if (count == 1) {
name = nautilus_file_get_display_name (clipboard_contents->data);
if (cut) {
status_string = g_strdup_printf (_("“%s” will be moved "
"if you select the Paste command"),
name);
} else {
status_string = g_strdup_printf (_("“%s” will be copied "
"if you select the Paste command"),
name);
}
g_free (name);
} else {
if (cut) {
status_string = g_strdup_printf (ngettext("The %'d selected item will be moved "
"if you select the Paste command",
"The %'d selected items will be moved "
"if you select the Paste command",
count),
count);
} else {
status_string = g_strdup_printf (ngettext("The %'d selected item will be copied "
"if you select the Paste command",
"The %'d selected items will be copied "
"if you select the Paste command",
count),
count);
}
}
nautilus_window_slot_set_status (view->details->slot,
status_string, NULL);
g_free (status_string);
}
static void
@ -6222,11 +6103,7 @@ paste_clipboard_data (NautilusView *view,
item_uris = nautilus_clipboard_get_uri_list_from_selection_data (selection_data, &cut,
copied_files_atom);
if (item_uris == NULL|| destination_uri == NULL) {
nautilus_window_slot_set_status (view->details->slot,
_("There is nothing on the clipboard to paste."),
NULL);
} else {
if (item_uris != NULL && destination_uri != NULL) {
nautilus_view_move_copy_items (view, item_uris, NULL, destination_uri,
cut ? GDK_ACTION_MOVE : GDK_ACTION_COPY,
0, 0);

View file

@ -188,8 +188,6 @@ struct NautilusViewClass {
/* Return an array of locations of selected icons in their view. */
GArray * (* get_selected_icon_locations) (NautilusView *view);
guint (* get_item_count) (NautilusView *view);
/* bump_zoom_level is a function pointer that subclasses must override
* to change the zoom level of an object. */
void (* bump_zoom_level) (NautilusView *view,

View file

@ -652,7 +652,7 @@ begin_location_change (NautilusWindowSlot *slot,
end_location_change (slot);
nautilus_window_slot_set_allow_stop (slot, TRUE);
nautilus_window_slot_set_status (slot, " ", NULL);
nautilus_window_slot_set_status (slot, NULL, NULL);
g_assert (slot->pending_location == NULL);
g_assert (slot->pending_selection == NULL);
@ -1183,9 +1183,9 @@ real_setup_loading_floating_bar (NautilusWindowSlot *slot)
return;
}
nautilus_floating_bar_set_label (NAUTILUS_FLOATING_BAR (slot->floating_bar),
NAUTILUS_IS_SEARCH_DIRECTORY (nautilus_view_get_model (slot->content_view)) ?
_("Searching...") : _("Loading..."));
nautilus_floating_bar_set_primary_label (NAUTILUS_FLOATING_BAR (slot->floating_bar),
NAUTILUS_IS_SEARCH_DIRECTORY (nautilus_view_get_model (slot->content_view)) ?
_("Searching...") : _("Loading..."));
nautilus_floating_bar_set_show_spinner (NAUTILUS_FLOATING_BAR (slot->floating_bar),
TRUE);
nautilus_floating_bar_add_action (NAUTILUS_FLOATING_BAR (slot->floating_bar),

View file

@ -356,7 +356,7 @@ nautilus_window_slot_constructed (GObject *object)
gtk_box_pack_start (GTK_BOX (slot), slot->view_overlay, TRUE, TRUE, 0);
gtk_widget_show (slot->view_overlay);
slot->floating_bar = nautilus_floating_bar_new ("", FALSE);
slot->floating_bar = nautilus_floating_bar_new (NULL, NULL, FALSE);
gtk_widget_set_halign (slot->floating_bar, GTK_ALIGN_END);
gtk_widget_set_valign (slot->floating_bar, GTK_ALIGN_END);
gtk_overlay_add_overlay (GTK_OVERLAY (slot->view_overlay),
@ -436,9 +436,6 @@ nautilus_window_slot_dispose (GObject *object)
g_free (slot->title);
slot->title = NULL;
g_free (slot->status_text);
slot->status_text = NULL;
G_OBJECT_CLASS (nautilus_window_slot_parent_class)->dispose (object);
}
@ -618,7 +615,8 @@ nautilus_window_slot_set_allow_stop (NautilusWindowSlot *slot,
static void
real_slot_set_short_status (NautilusWindowSlot *slot,
const gchar *status)
const gchar *primary_status,
const gchar *detail_status)
{
gboolean disable_chrome;
@ -630,17 +628,19 @@ real_slot_set_short_status (NautilusWindowSlot *slot,
"disable-chrome", &disable_chrome,
NULL);
if (status == NULL || disable_chrome) {
if ((primary_status == NULL && detail_status == NULL) || disable_chrome) {
gtk_widget_hide (slot->floating_bar);
return;
}
nautilus_floating_bar_set_label (NAUTILUS_FLOATING_BAR (slot->floating_bar), status);
nautilus_floating_bar_set_labels (NAUTILUS_FLOATING_BAR (slot->floating_bar),
primary_status, detail_status);
gtk_widget_show (slot->floating_bar);
}
typedef struct {
gchar *status;
gchar *primary_status;
gchar *detail_status;
NautilusWindowSlot *slot;
} SetStatusData;
@ -649,7 +649,8 @@ set_status_data_free (gpointer data)
{
SetStatusData *status_data = data;
g_free (status_data->status);
g_free (status_data->primary_status);
g_free (status_data->detail_status);
g_slice_free (SetStatusData, data);
}
@ -660,14 +661,17 @@ set_status_timeout_cb (gpointer data)
SetStatusData *status_data = data;
status_data->slot->set_status_timeout_id = 0;
real_slot_set_short_status (status_data->slot, status_data->status);
real_slot_set_short_status (status_data->slot,
status_data->primary_status,
status_data->detail_status);
return FALSE;
}
static void
set_floating_bar_status (NautilusWindowSlot *slot,
const gchar *status)
const gchar *primary_status,
const gchar *detail_status)
{
GtkSettings *settings;
gint double_click_time;
@ -684,7 +688,8 @@ set_floating_bar_status (NautilusWindowSlot *slot,
NULL);
status_data = g_slice_new0 (SetStatusData);
status_data->status = g_strdup (status);
status_data->primary_status = g_strdup (primary_status);
status_data->detail_status = g_strdup (detail_status);
status_data->slot = slot;
/* waiting for half of the double-click-time before setting
@ -701,16 +706,13 @@ set_floating_bar_status (NautilusWindowSlot *slot,
void
nautilus_window_slot_set_status (NautilusWindowSlot *slot,
const char *status,
const char *short_status)
const char *primary_status,
const char *detail_status)
{
g_assert (NAUTILUS_IS_WINDOW_SLOT (slot));
g_free (slot->status_text);
slot->status_text = g_strdup (status);
if (slot->content_view != NULL) {
set_floating_bar_status (slot, short_status);
set_floating_bar_status (slot, primary_status, detail_status);
}
}

View file

@ -81,7 +81,6 @@ struct NautilusWindowSlot {
/* Current location. */
GFile *location;
char *title;
char *status_text;
NautilusFile *viewed_file;
gboolean viewed_file_seen;
@ -164,8 +163,8 @@ void nautilus_window_slot_set_viewed_file (NautilusWindowSlot *slot,
void nautilus_window_slot_set_allow_stop (NautilusWindowSlot *slot,
gboolean allow_stop);
void nautilus_window_slot_set_status (NautilusWindowSlot *slot,
const char *status,
const char *short_status);
const char *primary_status,
const char *detail_status);
void nautilus_window_slot_add_extra_location_widget (NautilusWindowSlot *slot,
GtkWidget *widget);