nautilus r14003 - in trunk: . libnautilus-private src src/file-manager
- From: cneumair svn gnome org
- To: svn-commits-list gnome org
- Subject: nautilus r14003 - in trunk: . libnautilus-private src src/file-manager
- Date: Sat, 29 Mar 2008 21:21:47 +0000 (GMT)
Author: cneumair
Date: Sat Mar 29 21:21:47 2008
New Revision: 14003
URL: http://svn.gnome.org/viewvc/nautilus?rev=14003&view=rev
Log:
2008-03-29 Christian Neumair <cneumair gnome org>
* libnautilus-private/apps_nautilus_preferences.schemas.in:
* libnautilus-private/nautilus-global-preferences.c
(nautilus_global_preferences_get_default_folder_viewer_preference_a
s_iid):
* libnautilus-private/nautilus-global-preferences.h:
* libnautilus-private/nautilus-icon-canvas-item.c
(create_label_layout),
(nautilus_icon_canvas_item_get_max_text_width):
* libnautilus-private/nautilus-icon-container.c
(lay_down_one_column), (get_max_icon_dimensions),
(lay_down_icons_vertical), (lay_down_icons_vertical_desktop),
(lay_down_icons), (size_allocate),
(nautilus_icon_container_update_icon),
(nautilus_icon_container_set_layout_mode),
(nautilus_icon_container_start_renaming_selected_item),
(nautilus_icon_container_set_forced_icon_size),
(nautilus_icon_container_set_all_columns_same_width):
* libnautilus-private/nautilus-icon-container.h:
* libnautilus-private/nautilus-icon-private.h:
* libnautilus-private/nautilus-metadata.h:
* src/file-manager/fm-icon-container.c
(fm_icon_container_get_icon_images),
(fm_icon_container_get_icon_text):
* src/file-manager/fm-icon-view.c
(get_stored_icon_position_callback),
(fm_icon_view_supports_manual_layout),
(fm_icon_view_supports_tighter_layout), (update_layout_menus),
(fm_icon_view_real_set_directory_sort_reversed),
(fm_icon_view_get_directory_auto_layout),
(fm_icon_view_real_get_directory_auto_layout),
(fm_icon_view_set_directory_auto_layout),
(fm_icon_view_real_set_directory_auto_layout),
(fm_icon_view_real_set_directory_tighter_layout),
(real_supports_manual_layout), (get_default_zoom_level),
(set_labels_beside_icons), (set_columns_same_width),
(fm_icon_view_begin_loading), (fm_icon_view_set_zoom_level),
(fm_icon_view_zoom_to_level),
(fm_icon_view_restore_default_zoom_level),
(default_zoom_level_changed_callback),
(all_columns_same_width_changed_callback),
(fm_icon_view_set_property), (fm_icon_view_class_init),
(fm_icon_view_get_id), (fm_icon_view_init), (fm_icon_view_create),
(fm_compact_view_create), (fm_icon_view_is_compact),
(fm_icon_view_register):
* src/file-manager/fm-icon-view.h:
* src/nautilus-file-management-properties.c
(nautilus_file_management_properties_dialog_setup):
* src/nautilus-file-management-properties.glade:
Added compact view.
Modified:
trunk/ChangeLog
trunk/libnautilus-private/apps_nautilus_preferences.schemas.in
trunk/libnautilus-private/nautilus-global-preferences.c
trunk/libnautilus-private/nautilus-global-preferences.h
trunk/libnautilus-private/nautilus-icon-canvas-item.c
trunk/libnautilus-private/nautilus-icon-container.c
trunk/libnautilus-private/nautilus-icon-container.h
trunk/libnautilus-private/nautilus-icon-private.h
trunk/libnautilus-private/nautilus-metadata.h
trunk/src/file-manager/fm-icon-container.c
trunk/src/file-manager/fm-icon-view.c
trunk/src/file-manager/fm-icon-view.h
trunk/src/nautilus-file-management-properties.c
trunk/src/nautilus-file-management-properties.glade
Modified: trunk/libnautilus-private/apps_nautilus_preferences.schemas.in
==============================================================================
--- trunk/libnautilus-private/apps_nautilus_preferences.schemas.in (original)
+++ trunk/libnautilus-private/apps_nautilus_preferences.schemas.in Sat Mar 29 21:21:47 2008
@@ -532,8 +532,8 @@
<short>Default folder viewer</short>
<long>
When a folder is visited this viewer is used unless you have selected
- another view for that particular folder. Possible values are "list_view"
- and "icon_view".
+ another view for that particular folder. Possible values are "list_view",
+ "icon_view" and "compact_view".
</long>
</locale>
</schema>
@@ -663,6 +663,36 @@
</long>
</locale>
</schema>
+
+ <!-- Icon View -->
+ <schema>
+ <key>/schemas/apps/nautilus/compact_view/default_zoom_level</key>
+ <applyto>/apps/nautilus/compact_view/default_zoom_level</applyto>
+ <owner>nautilus</owner>
+ <type>string</type>
+ <default>standard</default>
+ <locale name="C">
+ <short>Default compact view zoom level</short>
+ <long>
+ Default zoom level used by the compact view.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/nautilus/compact_view/all_columns_have_same_width</key>
+ <applyto>/apps/nautilus/compact_view/all_columns_have_same_width</applyto>
+ <owner>nautilus</owner>
+ <type>string</type>
+ <default>standard</default>
+ <locale name="C">
+ <short>All columns have same width</short>
+ <long>
+ If this preference is set, all columns in the compact view have the same
+ width. Otherwise, the width of each column is determined seperately.
+ </long>
+ </locale>
+ </schema>
<!-- List View -->
Modified: trunk/libnautilus-private/nautilus-global-preferences.c
==============================================================================
--- trunk/libnautilus-private/nautilus-global-preferences.c (original)
+++ trunk/libnautilus-private/nautilus-global-preferences.c Sat Mar 29 21:21:47 2008
@@ -137,6 +137,7 @@
static EelEnumerationEntry default_folder_viewer_enum_entries[] = {
{ "icon_view", N_("Icon View"), NAUTILUS_DEFAULT_FOLDER_VIEWER_ICON_VIEW },
+ { "compact_view", N_("Compact View"), NAUTILUS_DEFAULT_FOLDER_VIEWER_COMPACT_VIEW },
{ "list_view", N_("List View"), NAUTILUS_DEFAULT_FOLDER_VIEWER_LIST_VIEW }
};
@@ -415,6 +416,14 @@
PREFERENCE_INTEGER,
GINT_TO_POINTER (96)
},
+
+ /* Compact Icon View Default Preferences */
+ { NAUTILUS_PREFERENCES_COMPACT_VIEW_DEFAULT_ZOOM_LEVEL,
+ PREFERENCE_STRING,
+ "standard",
+ NULL, NULL,
+ "default_zoom_level"
+ },
/* List View Default Preferences */
{ NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_SORT_ORDER,
@@ -706,6 +715,8 @@
if (preference_value == NAUTILUS_DEFAULT_FOLDER_VIEWER_LIST_VIEW) {
viewer_iid = NAUTILUS_LIST_VIEW_IID;
+ } else if (preference_value == NAUTILUS_DEFAULT_FOLDER_VIEWER_COMPACT_VIEW) {
+ viewer_iid = NAUTILUS_COMPACT_VIEW_IID;
} else {
viewer_iid = NAUTILUS_ICON_VIEW_IID;
}
Modified: trunk/libnautilus-private/nautilus-global-preferences.h
==============================================================================
--- trunk/libnautilus-private/nautilus-global-preferences.h (original)
+++ trunk/libnautilus-private/nautilus-global-preferences.h Sat Mar 29 21:21:47 2008
@@ -109,13 +109,15 @@
enum
{
NAUTILUS_DEFAULT_FOLDER_VIEWER_ICON_VIEW,
+ NAUTILUS_DEFAULT_FOLDER_VIEWER_COMPACT_VIEW,
NAUTILUS_DEFAULT_FOLDER_VIEWER_LIST_VIEW,
NAUTILUS_DEFAULT_FOLDER_VIEWER_OTHER
};
/* These IIDs are used by the preferences code and in nautilus-application.c */
-#define NAUTILUS_ICON_VIEW_IID "OAFIID:Nautilus_File_Manager_Icon_View"
-#define NAUTILUS_LIST_VIEW_IID "OAFIID:Nautilus_File_Manager_List_View"
+#define NAUTILUS_ICON_VIEW_IID "OAFIID:Nautilus_File_Manager_Icon_View"
+#define NAUTILUS_COMPACT_VIEW_IID "OAFIID:Nautilus_File_Manager_Compact_View"
+#define NAUTILUS_LIST_VIEW_IID "OAFIID:Nautilus_File_Manager_List_View"
/* Icon View */
@@ -143,6 +145,10 @@
/* The default size for thumbnail icons */
#define NAUTILUS_PREFERENCES_ICON_VIEW_THUMBNAIL_SIZE "icon_view/thumbnail_size"
+/* Compact View */
+#define NAUTILUS_PREFERENCES_COMPACT_VIEW_DEFAULT_ZOOM_LEVEL "compact_view/default_zoom_level"
+#define NAUTILUS_PREFERENCES_COMPACT_VIEW_ALL_COLUMNS_SAME_WIDTH "compact_view/all_columns_same_width"
+
/* List View */
#define NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_SORT_IN_REVERSE_ORDER "list_view/default_sort_in_reverse_order"
#define NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_SORT_ORDER "list_view/default_sort_order"
Modified: trunk/libnautilus-private/nautilus-icon-canvas-item.c
==============================================================================
--- trunk/libnautilus-private/nautilus-icon-canvas-item.c (original)
+++ trunk/libnautilus-private/nautilus-icon-canvas-item.c Sat Mar 29 21:21:47 2008
@@ -62,6 +62,7 @@
#define MAX_TEXT_WIDTH_STANDARD 135
#define MAX_TEXT_WIDTH_TIGHTER 80
#define MAX_TEXT_WIDTH_BESIDE 90
+#define MAX_TEXT_WIDTH_BESIDE_TOP_TO_BOTTOM 300
/* Private part of the NautilusIconCanvasItem structure. */
struct NautilusIconCanvasItemDetails {
@@ -1816,6 +1817,11 @@
(g_ascii_isdigit (*(p+1)) && \
g_ascii_isdigit (*(p+2))))
+#define IS_COMPACT_VIEW(container) \
+ container->details->layout_mode == NAUTILUS_ICON_LAYOUT_T_B_L_R && \
+ container->details->label_position == NAUTILUS_ICON_LABEL_POSITION_BESIDE
+
+
static PangoLayout *
create_label_layout (NautilusIconCanvasItem *item,
const char *text)
@@ -1872,6 +1878,9 @@
pango_layout_set_spacing (layout, LABEL_LINE_SPACING);
pango_layout_set_wrap (layout, PANGO_WRAP_WORD_CHAR);
+ if (IS_COMPACT_VIEW (container)) {
+ pango_layout_set_ellipsize (layout, PANGO_ELLIPSIZE_END);
+ }
/* Create a font description */
if (container->details->font) {
@@ -2424,14 +2433,19 @@
nautilus_icon_canvas_item_get_max_text_width (NautilusIconCanvasItem *item)
{
EelCanvasItem *canvas_item;
-
+
canvas_item = EEL_CANVAS_ITEM (item);
if (nautilus_icon_container_is_tighter_layout (NAUTILUS_ICON_CONTAINER (canvas_item->canvas))) {
return MAX_TEXT_WIDTH_TIGHTER * canvas_item->canvas->pixels_per_unit;
} else {
if (NAUTILUS_ICON_CONTAINER (canvas_item->canvas)->details->label_position == NAUTILUS_ICON_LABEL_POSITION_BESIDE) {
- return MAX_TEXT_WIDTH_BESIDE * canvas_item->canvas->pixels_per_unit;
+ if (NAUTILUS_ICON_CONTAINER (canvas_item->canvas)->details->layout_mode == NAUTILUS_ICON_LAYOUT_T_B_L_R ||
+ NAUTILUS_ICON_CONTAINER (canvas_item->canvas)->details->layout_mode == NAUTILUS_ICON_LAYOUT_T_B_R_L) {
+ return MAX_TEXT_WIDTH_BESIDE_TOP_TO_BOTTOM * canvas_item->canvas->pixels_per_unit;
+ } else {
+ return MAX_TEXT_WIDTH_BESIDE * canvas_item->canvas->pixels_per_unit;
+ }
} else {
return MAX_TEXT_WIDTH_STANDARD * canvas_item->canvas->pixels_per_unit;
}
Modified: trunk/libnautilus-private/nautilus-icon-container.c
==============================================================================
--- trunk/libnautilus-private/nautilus-icon-container.c (original)
+++ trunk/libnautilus-private/nautilus-icon-container.c Sat Mar 29 21:21:47 2008
@@ -1001,6 +1001,40 @@
}
static void
+lay_down_one_column (NautilusIconContainer *container,
+ GList *line_start,
+ GList *line_end,
+ double x,
+ double y_start,
+ double y_iter,
+ GArray *positions)
+{
+ GList *p;
+ NautilusIcon *icon;
+ double y;
+ IconPositions *position;
+ int i;
+
+ /* FIXME: Should layout differently when in RTL base mode */
+
+ /* Lay out the icons along the baseline. */
+ y = y_start;
+ i = 0;
+ for (p = line_start; p != line_end; p = p->next) {
+ icon = p->data;
+
+ position = &g_array_index (positions, IconPositions, i++);
+
+ icon_set_position
+ (icon,
+ x + position->x_offset,
+ y + position->y_offset);
+
+ y += y_iter;
+ }
+}
+
+static void
lay_down_icons_horizontal (NautilusIconContainer *container,
GList *icons,
double start_y)
@@ -1162,6 +1196,160 @@
}
static void
+get_max_icon_dimensions (GList *icon_start,
+ GList *icon_end,
+ double *max_icon_width,
+ double *max_icon_height,
+ double *max_text_width,
+ double *max_text_height)
+{
+ NautilusIcon *icon;
+ EelDRect icon_bounds;
+ EelDRect text_bounds;
+ GList *p;
+
+ *max_icon_width = *max_text_width = 0.0;
+ *max_icon_height = *max_text_height = 0.0;
+
+ /* Would it be worth caching these bounds for the next loop? */
+ for (p = icon_start; p != icon_end; p = p->next) {
+ icon = p->data;
+
+ icon_bounds = nautilus_icon_canvas_item_get_icon_rectangle (icon->item);
+ *max_icon_width = MAX (*max_icon_width, ceil (icon_bounds.x1 - icon_bounds.x0));
+ *max_icon_height = MAX (*max_icon_height, ceil (icon_bounds.y1 - icon_bounds.y0));
+
+ text_bounds = nautilus_icon_canvas_item_get_text_rectangle (icon->item);
+ *max_text_width = MAX (*max_text_width, ceil (text_bounds.x1 - text_bounds.x0));
+ *max_text_height = MAX (*max_text_height, ceil (text_bounds.y1 - text_bounds.y0));
+ }
+}
+
+/* column-wise layout. At the moment, this only works with label-beside-icon (used by "Compact View"). */
+static void
+lay_down_icons_vertical (NautilusIconContainer *container,
+ GList *icons,
+ double start_y)
+{
+ GList *p, *line_start;
+ NautilusIcon *icon;
+ double canvas_width, x, canvas_height;
+ GArray *positions;
+ IconPositions *position;
+ EelDRect icon_bounds;
+ EelDRect text_bounds;
+ EelCanvasItem *item;
+
+ double line_height;
+
+ double max_height;
+ double max_height_with_borders;
+ double max_width;
+ double max_width_in_column;
+
+ double max_text_width, max_icon_width;
+ double max_text_height, max_icon_height;
+ int height;
+ int i;
+
+ g_assert (NAUTILUS_IS_ICON_CONTAINER (container));
+ g_assert (container->details->label_position == NAUTILUS_ICON_LABEL_POSITION_BESIDE);
+
+ if (icons == NULL) {
+ return;
+ }
+
+ positions = g_array_new (FALSE, FALSE, sizeof (IconPositions));
+
+ /* Lay out icons a column at a time. */
+ canvas_width = CANVAS_WIDTH(container);
+ canvas_height = CANVAS_HEIGHT(container);
+
+ max_icon_width = max_text_width = 0.0;
+ max_icon_height = max_text_height = 0.0;
+
+ get_max_icon_dimensions (icons, NULL,
+ &max_icon_width, &max_icon_height,
+ &max_text_width, &max_text_height);
+
+ max_width = max_icon_width + max_text_width;
+ max_height = MAX (max_icon_height, max_text_height);
+ max_height_with_borders = ICON_PAD_TOP + max_height + ICON_PAD_BOTTOM;
+
+ line_height = ICON_PAD_TOP;
+ line_start = icons;
+ x = 0;
+ i = 0;
+
+ max_width_in_column = 0.0;
+
+ for (p = icons; p != NULL; p = p->next) {
+ icon = p->data;
+ item = EEL_CANVAS_ITEM (icon->item);
+
+ /* If this icon doesn't fit, it's time to lay out the column that's queued up. */
+ if (line_start != p && line_height + max_height_with_borders + ICON_PAD_BOTTOM > canvas_height ) {
+ x += ICON_PAD_LEFT;
+
+ /* correctly set (per-column) width */
+ if (!container->details->all_columns_same_width) {
+ for (i = 0; i < (int) positions->len; i++) {
+ position = &g_array_index (positions, IconPositions, i);
+ position->width = max_width_in_column;
+ }
+ }
+
+ lay_down_one_column (container, line_start, p, x, CONTAINER_PAD_TOP, max_height_with_borders, positions);
+
+ /* Advance to next column. */
+ if (container->details->all_columns_same_width) {
+ x += max_width + ICON_PAD_RIGHT;
+ } else {
+ x += max_width_in_column + ICON_PAD_RIGHT;
+ }
+
+ line_height = ICON_PAD_TOP;
+ line_start = p;
+ i = 0;
+
+ max_width_in_column = 0;
+ }
+
+ icon_bounds = nautilus_icon_canvas_item_get_icon_rectangle (icon->item);
+ text_bounds = nautilus_icon_canvas_item_get_text_rectangle (icon->item);
+
+ max_width_in_column = MAX (max_width_in_column,
+ ceil (icon_bounds.x1 - icon_bounds.x0) +
+ ceil (text_bounds.x1 - text_bounds.x0));
+
+ g_array_set_size (positions, i + 1);
+ position = &g_array_index (positions, IconPositions, i++);
+ if (container->details->all_columns_same_width) {
+ position->width = max_width;
+ }
+ position->height = max_height;
+ position->y_offset = ICON_PAD_TOP;
+ position->x_offset = ICON_PAD_LEFT;
+
+ position->x_offset += max_icon_width - ceil (icon_bounds.x1 - icon_bounds.x0);
+
+ height = MAX (ceil (icon_bounds.y1 - icon_bounds.y0), ceil(text_bounds.y1 - text_bounds.y0));
+ position->y_offset += (max_height - height) / 2;
+
+ /* Add this icon. */
+ line_height += max_height_with_borders;
+ }
+
+ /* Lay down that last column of icons. */
+ if (line_start != NULL) {
+ x += ICON_PAD_LEFT;
+ lay_down_one_column (container, line_start, NULL, x, CONTAINER_PAD_TOP, max_height_with_borders, positions);
+ }
+
+ g_array_free (positions, TRUE);
+}
+
+static void
snap_position (NautilusIconContainer *container,
NautilusIcon *icon,
int *x, int *y)
@@ -1488,7 +1676,7 @@
}
static void
-lay_down_icons_vertical (NautilusIconContainer *container, GList *icons)
+lay_down_icons_vertical_desktop (NautilusIconContainer *container, GList *icons)
{
GList *p, *placed_icons, *unplaced_icons;
int total, new_length, placed;
@@ -1669,7 +1857,11 @@
case NAUTILUS_ICON_LAYOUT_T_B_L_R:
case NAUTILUS_ICON_LAYOUT_T_B_R_L:
- lay_down_icons_vertical (container, icons);
+ if (nautilus_icon_container_get_is_desktop (container)) {
+ lay_down_icons_vertical_desktop (container, icons);
+ } else {
+ lay_down_icons_vertical (container, icons, start_y);
+ }
break;
default:
@@ -3157,6 +3349,10 @@
need_layout_redone = TRUE;
}
+ if (allocation->height != widget->allocation.height) {
+ need_layout_redone = TRUE;
+ }
+
GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation);
container->details->has_been_allocated = TRUE;
@@ -5768,9 +5964,14 @@
/* compute the maximum size based on the scale factor */
min_image_size = MINIMUM_IMAGE_SIZE * EEL_CANVAS (container)->pixels_per_unit;
max_image_size = MAX (MAXIMUM_IMAGE_SIZE * EEL_CANVAS (container)->pixels_per_unit, NAUTILUS_ICON_MAXIMUM_SIZE);
-
+
/* Get the appropriate images for the file. */
- icon_get_size (container, icon, &icon_size);
+ if (container->details->forced_icon_size > 0) {
+ icon_size = container->details->forced_icon_size;
+ } else {
+ icon_get_size (container, icon, &icon_size);
+ }
+
icon_size = MAX (icon_size, min_image_size);
icon_size = MIN (icon_size, max_image_size);
@@ -5787,7 +5988,10 @@
&has_open_window);
- pixbuf = nautilus_icon_info_get_pixbuf (icon_info);
+ if (container->details->forced_icon_size > 0)
+ pixbuf = nautilus_icon_info_get_pixbuf_at_size (icon_info, icon_size);
+ else
+ pixbuf = nautilus_icon_info_get_pixbuf (icon_info);
nautilus_icon_info_get_attach_points (icon_info, &attach_points, &n_attach_points);
has_embedded_text_rect = nautilus_icon_info_get_embedded_rect (icon_info,
&embedded_text_rect);
@@ -6803,6 +7007,7 @@
g_return_if_fail (NAUTILUS_IS_ICON_CONTAINER (container));
container->details->layout_mode = mode;
+ invalidate_label_sizes (container);
redo_layout (container);
@@ -7022,7 +7227,11 @@
eel_editable_label_set_line_wrap (EEL_EDITABLE_LABEL (details->rename_widget), TRUE);
eel_editable_label_set_line_wrap_mode (EEL_EDITABLE_LABEL (details->rename_widget), PANGO_WRAP_WORD_CHAR);
eel_editable_label_set_draw_outline (EEL_EDITABLE_LABEL (details->rename_widget), TRUE);
- eel_editable_label_set_justify (EEL_EDITABLE_LABEL (details->rename_widget), GTK_JUSTIFY_CENTER);
+
+ if (details->label_position != NAUTILUS_ICON_LABEL_POSITION_BESIDE) {
+ eel_editable_label_set_justify (EEL_EDITABLE_LABEL (details->rename_widget), GTK_JUSTIFY_CENTER);
+ }
+
gtk_misc_set_padding (GTK_MISC (details->rename_widget), 1, 1);
gtk_layout_put (GTK_LAYOUT (container),
details->rename_widget, 0, 0);
@@ -7591,6 +7800,34 @@
container->details->drag_allow_moves = allow_moves;
}
+void
+nautilus_icon_container_set_forced_icon_size (NautilusIconContainer *container,
+ int forced_icon_size)
+{
+ g_return_if_fail (NAUTILUS_IS_ICON_CONTAINER (container));
+
+ if (forced_icon_size != container->details->forced_icon_size) {
+ container->details->forced_icon_size = forced_icon_size;
+
+ invalidate_label_sizes (container);
+ nautilus_icon_container_request_update_all (container);
+ }
+}
+
+void
+nautilus_icon_container_set_all_columns_same_width (NautilusIconContainer *container,
+ gboolean all_columns_same_width)
+{
+ g_return_if_fail (NAUTILUS_IS_ICON_CONTAINER (container));
+
+ if (all_columns_same_width != container->details->all_columns_same_width) {
+ container->details->all_columns_same_width = all_columns_same_width;
+
+ invalidate_label_sizes (container);
+ nautilus_icon_container_request_update_all (container);
+ }
+}
+
/* NautilusIconContainerAccessible */
static NautilusIconContainerAccessiblePrivate *
Modified: trunk/libnautilus-private/nautilus-icon-container.h
==============================================================================
--- trunk/libnautilus-private/nautilus-icon-container.h (original)
+++ trunk/libnautilus-private/nautilus-icon-container.h Sat Mar 29 21:21:47 2008
@@ -302,6 +302,10 @@
gboolean nautilus_icon_container_get_allow_moves (NautilusIconContainer *container);
void nautilus_icon_container_set_allow_moves (NautilusIconContainer *container,
gboolean allow_moves);
+void nautilus_icon_container_set_forced_icon_size (NautilusIconContainer *container,
+ int forced_icon_size);
+void nautilus_icon_container_set_all_columns_same_width (NautilusIconContainer *container,
+ gboolean all_columns_same_width);
gboolean nautilus_icon_container_is_layout_rtl (NautilusIconContainer *container);
Modified: trunk/libnautilus-private/nautilus-icon-private.h
==============================================================================
--- trunk/libnautilus-private/nautilus-icon-private.h (original)
+++ trunk/libnautilus-private/nautilus-icon-private.h Sat Mar 29 21:21:47 2008
@@ -224,6 +224,10 @@
gboolean single_click_mode;
gboolean auto_layout;
gboolean tighter_layout;
+
+ /* Whether for the vertical layout, all columns are supposed to
+ * have the same width. */
+ gboolean all_columns_same_width;
/* Layout mode */
NautilusIconLayoutMode layout_mode;
@@ -231,6 +235,9 @@
/* Label position */
NautilusIconLabelPosition label_position;
+ /* Forced icon size, iff greater than 0 */
+ int forced_icon_size;
+
/* Should the container keep icons aligned to a grid */
gboolean keep_aligned;
Modified: trunk/libnautilus-private/nautilus-metadata.h
==============================================================================
--- trunk/libnautilus-private/nautilus-metadata.h (original)
+++ trunk/libnautilus-private/nautilus-metadata.h Sat Mar 29 21:21:47 2008
@@ -52,6 +52,8 @@
#define NAUTILUS_METADATA_KEY_LIST_VIEW_COLUMN_ORDER "list_view_column_order"
#define NAUTILUS_METADATA_SUBKEY_COLUMNS "columns"
+#define NAUTILUS_METADATA_KEY_COMPACT_VIEW_ZOOM_LEVEL "compact_view_zoom_level"
+
#define NAUTILUS_METADATA_KEY_WINDOW_GEOMETRY "window_geometry"
#define NAUTILUS_METADATA_KEY_WINDOW_SCROLL_POSITION "window_scroll_position"
#define NAUTILUS_METADATA_KEY_WINDOW_SHOW_HIDDEN_FILES "window_show_hidden_files"
Modified: trunk/src/file-manager/fm-icon-container.c
==============================================================================
--- trunk/src/file-manager/fm-icon-container.c (original)
+++ trunk/src/file-manager/fm-icon-container.c Sat Mar 29 21:21:47 2008
@@ -82,19 +82,28 @@
if (emblem_pixbufs != NULL) {
emblem_size = nautilus_icon_get_emblem_size_for_icon_size (size);
-
- emblems_to_ignore = fm_directory_view_get_emblem_names_to_exclude
- (FM_DIRECTORY_VIEW (icon_view));
- *emblem_pixbufs = nautilus_file_get_emblem_pixbufs (file,
- emblem_size,
- FALSE,
- emblems_to_ignore);
- g_strfreev (emblems_to_ignore);
+ /* don't return images larger than the actual icon size */
+ emblem_size = MIN (emblem_size, size);
+
+ if (emblem_size > 0) {
+ emblems_to_ignore = fm_directory_view_get_emblem_names_to_exclude
+ (FM_DIRECTORY_VIEW (icon_view));
+ *emblem_pixbufs = nautilus_file_get_emblem_pixbufs (file,
+ emblem_size,
+ FALSE,
+ emblems_to_ignore);
+ g_strfreev (emblems_to_ignore);
+ }
}
*has_window_open = nautilus_file_has_open_window (file);
- flags = NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS;
+ flags = 0;
+ if (!fm_icon_view_is_compact (icon_view) ||
+ nautilus_icon_container_get_zoom_level (container) > NAUTILUS_ZOOM_LEVEL_STANDARD) {
+ flags |= NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS;
+ }
+
if (use_embedding) {
flags |= NAUTILUS_FILE_ICON_FLAGS_EMBEDDING_TEXT;
}
@@ -321,6 +330,11 @@
*editable_text = nautilus_file_get_display_name (file);
}
+ if (fm_icon_view_is_compact (icon_view)) {
+ *additional_text = NULL;
+ return;
+ }
+
if (NAUTILUS_IS_DESKTOP_ICON_FILE (file)) {
/* Don't show the normal extra information for desktop icons, it doesn't
* make sense. */
Modified: trunk/src/file-manager/fm-icon-view.c
==============================================================================
--- trunk/src/file-manager/fm-icon-view.c (original)
+++ trunk/src/file-manager/fm-icon-view.c Sat Mar 29 21:21:47 2008
@@ -74,6 +74,12 @@
#define POPUP_PATH_ICON_APPEARANCE "/selection/Icon Appearance Items"
+enum
+{
+ PROP_0,
+ PROP_COMPACT
+};
+
typedef struct {
const NautilusFileSortType sort_type;
const char *metadata_text;
@@ -108,6 +114,8 @@
gboolean filter_by_screen;
int num_screens;
+
+ gboolean compact;
};
@@ -166,6 +174,7 @@
static void fm_icon_view_set_directory_tighter_layout (FMIconView *icon_view,
NautilusFile *file,
gboolean tighter_layout);
+static gboolean fm_icon_view_supports_manual_layout (FMIconView *icon_view);
static const SortCriterion *get_sort_criterion_by_sort_type (NautilusFileSortType sort_type);
static void set_sort_criterion_by_sort_type (FMIconView *icon_view,
NautilusFileSortType sort_type);
@@ -177,6 +186,7 @@
gboolean start_flag);
static void update_layout_menus (FMIconView *view);
+
static void fm_icon_view_iface_init (NautilusViewIface *iface);
G_DEFINE_TYPE_WITH_CODE (FMIconView, fm_icon_view, FM_TYPE_DIRECTORY_VIEW,
@@ -249,6 +259,10 @@
g_assert (position != NULL);
g_assert (FM_IS_ICON_VIEW (icon_view));
+ if (!fm_icon_view_supports_manual_layout (icon_view)) {
+ return FALSE;
+ }
+
/* Doing parsing in the "C" locale instead of the one set
* by the user ensures that data in the metafile is not in
* a locale-specific format. It's only necessary for floating
@@ -606,6 +620,16 @@
}
static gboolean
+fm_icon_view_supports_manual_layout (FMIconView *view)
+{
+ g_return_val_if_fail (FM_IS_ICON_VIEW (view), FALSE);
+
+ return EEL_CALL_METHOD_WITH_RETURN_VALUE
+ (FM_ICON_VIEW_CLASS, view,
+ supports_manual_layout, (view));
+}
+
+static gboolean
fm_icon_view_supports_keep_aligned (FMIconView *view)
{
g_return_val_if_fail (FM_IS_ICON_VIEW (view), FALSE);
@@ -625,6 +649,12 @@
supports_labels_beside_icons, (view));
}
+static gboolean
+fm_icon_view_supports_tighter_layout (FMIconView *view)
+{
+ return !fm_icon_view_is_compact (view);
+}
+
static void
update_layout_menus (FMIconView *view)
{
@@ -649,6 +679,9 @@
FM_ACTION_TIGHTER_LAYOUT);
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
fm_icon_view_using_tighter_layout (view));
+ gtk_action_set_sensitive (action, fm_icon_view_supports_tighter_layout (view));
+ gtk_action_set_visible (action, fm_icon_view_supports_tighter_layout (view));
+
action = gtk_action_group_get_action (view->details->icon_action_group,
FM_ACTION_REVERSED_ORDER);
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
@@ -656,6 +689,11 @@
gtk_action_set_sensitive (action, is_auto_layout);
}
+ action = gtk_action_group_get_action (view->details->icon_action_group,
+ FM_ACTION_MANUAL_LAYOUT);
+ gtk_action_set_visible (action,
+ fm_icon_view_supports_manual_layout (view));
+
/* Clean Up is only relevant for manual layout */
action = gtk_action_group_get_action (view->details->icon_action_group,
FM_ACTION_CLEAN_UP);
@@ -772,7 +810,7 @@
fm_icon_view_real_get_directory_sort_reversed (FMIconView *icon_view,
NautilusFile *file)
{
- return nautilus_file_get_boolean_metadata
+ return nautilus_file_get_boolean_metadata
(file,
NAUTILUS_METADATA_KEY_ICON_VIEW_SORT_REVERSED,
get_default_sort_in_reverse_order ());
@@ -797,8 +835,9 @@
NautilusFile *file,
gboolean sort_reversed)
{
- nautilus_file_set_boolean_metadata
- (file, NAUTILUS_METADATA_KEY_ICON_VIEW_SORT_REVERSED,
+ return nautilus_file_set_boolean_metadata
+ (file,
+ NAUTILUS_METADATA_KEY_ICON_VIEW_SORT_REVERSED,
get_default_sort_in_reverse_order (),
sort_reversed);
}
@@ -863,6 +902,10 @@
return FALSE;
}
+ if (!fm_icon_view_supports_manual_layout (icon_view)) {
+ return TRUE;
+ }
+
return EEL_CALL_METHOD_WITH_RETURN_VALUE
(FM_ICON_VIEW_CLASS, icon_view,
get_directory_auto_layout, (icon_view, file));
@@ -872,6 +915,8 @@
fm_icon_view_real_get_directory_auto_layout (FMIconView *icon_view,
NautilusFile *file)
{
+
+
return nautilus_file_get_boolean_metadata
(file, NAUTILUS_METADATA_KEY_ICON_VIEW_AUTO_LAYOUT, !get_default_directory_manual_layout ());
}
@@ -881,7 +926,8 @@
NautilusFile *file,
gboolean auto_layout)
{
- if (!fm_icon_view_supports_auto_layout (icon_view)) {
+ if (!fm_icon_view_supports_auto_layout (icon_view) ||
+ !fm_icon_view_supports_manual_layout (icon_view)) {
return;
}
@@ -894,6 +940,10 @@
NautilusFile *file,
gboolean auto_layout)
{
+ if (!fm_icon_view_supports_manual_layout (icon_view)) {
+ return;
+ }
+
nautilus_file_set_boolean_metadata
(file, NAUTILUS_METADATA_KEY_ICON_VIEW_AUTO_LAYOUT,
!get_default_directory_manual_layout (),
@@ -950,6 +1000,10 @@
NautilusFile *file,
gboolean tighter_layout)
{
+ if (!fm_icon_view_supports_tighter_layout (icon_view)) {
+ return;
+ }
+
nautilus_file_set_boolean_metadata
(file, NAUTILUS_METADATA_KEY_ICON_VIEW_TIGHTER_LAYOUT,
get_default_directory_tighter_layout (),
@@ -965,6 +1019,14 @@
}
static gboolean
+real_supports_manual_layout (FMIconView *view)
+{
+ g_return_val_if_fail (FM_IS_ICON_VIEW (view), FALSE);
+
+ return !fm_icon_view_is_compact (view);
+}
+
+static gboolean
real_supports_keep_aligned (FMIconView *view)
{
g_return_val_if_fail (FM_IS_ICON_VIEW (view), FALSE);
@@ -1027,9 +1089,11 @@
}
static NautilusZoomLevel default_zoom_level = NAUTILUS_ZOOM_LEVEL_STANDARD;
+static NautilusZoomLevel default_compact_zoom_level = NAUTILUS_ZOOM_LEVEL_STANDARD;
+#define DEFAULT_ZOOM_LEVEL(icon_view) icon_view->details->compact ? default_compact_zoom_level : default_zoom_level
static NautilusZoomLevel
-get_default_zoom_level (void)
+get_default_zoom_level (FMIconView *icon_view)
{
static gboolean auto_storage_added = FALSE;
@@ -1037,9 +1101,11 @@
auto_storage_added = TRUE;
eel_preferences_add_auto_enum (NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_ZOOM_LEVEL,
(int *) &default_zoom_level);
+ eel_preferences_add_auto_enum (NAUTILUS_PREFERENCES_COMPACT_VIEW_DEFAULT_ZOOM_LEVEL,
+ (int *) &default_compact_zoom_level);
}
- return CLAMP (default_zoom_level, NAUTILUS_ZOOM_LEVEL_SMALLEST, NAUTILUS_ZOOM_LEVEL_LARGEST);
+ return CLAMP (DEFAULT_ZOOM_LEVEL(icon_view), NAUTILUS_ZOOM_LEVEL_SMALLEST, NAUTILUS_ZOOM_LEVEL_LARGEST);
}
static void
@@ -1048,7 +1114,8 @@
gboolean labels_beside;
if (fm_icon_view_supports_labels_beside_icons (icon_view)) {
- labels_beside = eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ICON_VIEW_LABELS_BESIDE_ICONS);
+ labels_beside = fm_icon_view_is_compact (icon_view) ||
+ eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ICON_VIEW_LABELS_BESIDE_ICONS);
if (labels_beside) {
nautilus_icon_container_set_label_position
@@ -1063,6 +1130,17 @@
}
static void
+set_columns_same_width (FMIconView *icon_view)
+{
+ gboolean all_columns_same_width;
+
+ if (fm_icon_view_is_compact (icon_view)) {
+ all_columns_same_width = eel_preferences_get_boolean (NAUTILUS_PREFERENCES_COMPACT_VIEW_ALL_COLUMNS_SAME_WIDTH);
+ nautilus_icon_container_set_all_columns_same_width (get_icon_container (icon_view), all_columns_same_width);
+ }
+}
+
+static void
fm_icon_view_begin_loading (FMDirectoryView *view)
{
FMIconView *icon_view;
@@ -1106,10 +1184,18 @@
/* Set up the zoom level from the metadata. */
if (fm_directory_view_supports_zooming (FM_DIRECTORY_VIEW (icon_view))) {
- level = nautilus_file_get_integer_metadata
- (file,
- NAUTILUS_METADATA_KEY_ICON_VIEW_ZOOM_LEVEL,
- get_default_zoom_level ());
+ if (icon_view->details->compact) {
+ level = nautilus_file_get_integer_metadata
+ (file,
+ NAUTILUS_METADATA_KEY_COMPACT_VIEW_ZOOM_LEVEL,
+ get_default_zoom_level (icon_view));
+ } else {
+ level = nautilus_file_get_integer_metadata
+ (file,
+ NAUTILUS_METADATA_KEY_ICON_VIEW_ZOOM_LEVEL,
+ get_default_zoom_level (icon_view));
+ }
+
fm_icon_view_set_zoom_level (icon_view, level, TRUE);
}
@@ -1132,6 +1218,7 @@
fm_icon_view_get_directory_tighter_layout (icon_view, file));
set_labels_beside_icons (icon_view);
+ set_columns_same_width (icon_view);
/* We must set auto-layout last, because it invokes the layout_changed
* callback, which works incorrectly if the other layout criteria are
@@ -1180,11 +1267,19 @@
return;
}
- nautilus_file_set_integer_metadata
- (fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (view)),
- NAUTILUS_METADATA_KEY_ICON_VIEW_ZOOM_LEVEL,
- get_default_zoom_level (),
- new_level);
+ if (view->details->compact) {
+ nautilus_file_set_integer_metadata
+ (fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (view)),
+ NAUTILUS_METADATA_KEY_COMPACT_VIEW_ZOOM_LEVEL,
+ get_default_zoom_level (view),
+ new_level);
+ } else {
+ nautilus_file_set_integer_metadata
+ (fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (view)),
+ NAUTILUS_METADATA_KEY_ICON_VIEW_ZOOM_LEVEL,
+ get_default_zoom_level (view),
+ new_level);
+ }
nautilus_icon_container_set_zoom_level (icon_container, new_level);
@@ -1216,7 +1311,7 @@
{
FMIconView *icon_view;
- g_return_if_fail (FM_IS_ICON_VIEW (view));
+ g_assert (FM_IS_ICON_VIEW (view));
icon_view = FM_ICON_VIEW (view);
fm_icon_view_set_zoom_level (icon_view, zoom_level, FALSE);
@@ -1225,8 +1320,13 @@
static void
fm_icon_view_restore_default_zoom_level (FMDirectoryView *view)
{
+ FMIconView *icon_view;
+
+ g_return_if_fail (FM_IS_ICON_VIEW (view));
+
+ icon_view = FM_ICON_VIEW (view);
fm_directory_view_zoom_to_level
- (view, get_default_zoom_level ());
+ (view, get_default_zoom_level (icon_view));
}
static gboolean
@@ -2358,10 +2458,16 @@
if (fm_directory_view_supports_zooming (FM_DIRECTORY_VIEW (icon_view))) {
file = fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (icon_view));
-
- level = nautilus_file_get_integer_metadata (file,
- NAUTILUS_METADATA_KEY_ICON_VIEW_ZOOM_LEVEL,
- get_default_zoom_level ());
+
+ if (fm_icon_view_is_compact (icon_view)) {
+ level = nautilus_file_get_integer_metadata (file,
+ NAUTILUS_METADATA_KEY_COMPACT_VIEW_ZOOM_LEVEL,
+ get_default_zoom_level (icon_view));
+ } else {
+ level = nautilus_file_get_integer_metadata (file,
+ NAUTILUS_METADATA_KEY_ICON_VIEW_ZOOM_LEVEL,
+ get_default_zoom_level (icon_view));
+ }
fm_directory_view_zoom_to_level (FM_DIRECTORY_VIEW (icon_view), level);
}
}
@@ -2379,6 +2485,19 @@
}
static void
+all_columns_same_width_changed_callback (gpointer callback_data)
+{
+ FMIconView *icon_view;
+
+ g_assert (FM_IS_ICON_VIEW (callback_data));
+
+ icon_view = FM_ICON_VIEW (callback_data);
+
+ set_columns_same_width (icon_view);
+}
+
+
+static void
fm_icon_view_sort_directories_first_changed (FMDirectoryView *directory_view)
{
FMIconView *icon_view;
@@ -2566,6 +2685,34 @@
}
}
+static void
+fm_icon_view_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ FMIconView *icon_view;
+
+ icon_view = FM_ICON_VIEW (object);
+
+ switch (prop_id) {
+ case PROP_COMPACT:
+ icon_view->details->compact = g_value_get_boolean (value);
+ if (icon_view->details->compact) {
+ nautilus_icon_container_set_layout_mode (get_icon_container (icon_view),
+ NAUTILUS_ICON_LAYOUT_T_B_L_R);
+ nautilus_icon_container_set_forced_icon_size (get_icon_container (icon_view),
+ NAUTILUS_ICON_SIZE_SMALLEST);
+ }
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
static void
fm_icon_view_class_init (FMIconViewClass *klass)
@@ -2574,6 +2721,7 @@
fm_directory_view_class = FM_DIRECTORY_VIEW_CLASS (klass);
+ G_OBJECT_CLASS (klass)->set_property = fm_icon_view_set_property;
G_OBJECT_CLASS (klass)->finalize = fm_icon_view_finalize;
GTK_OBJECT_CLASS (klass)->destroy = fm_icon_view_destroy;
@@ -2620,6 +2768,7 @@
klass->clean_up = fm_icon_view_real_clean_up;
klass->supports_auto_layout = real_supports_auto_layout;
+ klass->supports_manual_layout = real_supports_manual_layout;
klass->supports_keep_aligned = real_supports_keep_aligned;
klass->supports_labels_beside_icons = real_supports_labels_beside_icons;
klass->get_directory_auto_layout = fm_icon_view_real_get_directory_auto_layout;
@@ -2630,6 +2779,16 @@
klass->set_directory_sort_by = fm_icon_view_real_set_directory_sort_by;
klass->set_directory_sort_reversed = fm_icon_view_real_set_directory_sort_reversed;
klass->set_directory_tighter_layout = fm_icon_view_real_set_directory_tighter_layout;
+
+ g_object_class_install_property (G_OBJECT_CLASS (klass),
+ PROP_COMPACT,
+ g_param_spec_boolean ("compact",
+ "Compact",
+ "Whether this view provides a compact listing",
+ FALSE,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+
}
static const char *
@@ -2638,6 +2797,11 @@
if (FM_IS_DESKTOP_ICON_VIEW (view)) {
return FM_DESKTOP_ICON_VIEW_ID;
}
+
+ if (fm_icon_view_is_compact (FM_ICON_VIEW (view))) {
+ return FM_COMPACT_VIEW_ID;
+ }
+
return FM_ICON_VIEW_ID;
}
@@ -2698,6 +2862,13 @@
labels_beside_icons_changed_callback,
icon_view, G_OBJECT (icon_view));
+ eel_preferences_add_callback_while_alive (NAUTILUS_PREFERENCES_COMPACT_VIEW_DEFAULT_ZOOM_LEVEL,
+ default_zoom_level_changed_callback,
+ icon_view, G_OBJECT (icon_view));
+ eel_preferences_add_callback_while_alive (NAUTILUS_PREFERENCES_COMPACT_VIEW_ALL_COLUMNS_SAME_WIDTH,
+ all_columns_same_width_changed_callback,
+ icon_view, G_OBJECT (icon_view));
+
g_signal_connect_object (get_icon_container (icon_view), "handle_netscape_url",
G_CALLBACK (icon_view_handle_netscape_url), icon_view, 0);
g_signal_connect_object (get_icon_container (icon_view), "handle_uri_list",
@@ -2711,7 +2882,18 @@
{
FMIconView *view;
- view = g_object_new (FM_TYPE_ICON_VIEW, "window", window, NULL);
+ view = g_object_new (FM_TYPE_ICON_VIEW, "window", window, "compact", FALSE, NULL);
+ g_object_ref (view);
+ gtk_object_sink (GTK_OBJECT (view));
+ return NAUTILUS_VIEW (view);
+}
+
+static NautilusView *
+fm_compact_view_create (NautilusWindowInfo *window)
+{
+ FMIconView *view;
+
+ view = g_object_new (FM_TYPE_ICON_VIEW, "window", window, "compact", TRUE, NULL);
g_object_ref (view);
gtk_object_sink (GTK_OBJECT (view));
return NAUTILUS_VIEW (view);
@@ -2738,6 +2920,15 @@
return FALSE;
}
+#define TRANSLATE_VIEW_INFO(view_info) \
+ view_info.label = _(view_info.label); \
+ view_info.view_as_label = _(view_info.view_as_label); \
+ view_info.view_as_label_with_mnemonic = _(view_info.view_as_label_with_mnemonic); \
+ view_info.error_label = _(view_info.error_label); \
+ view_info.startup_error_label = _(view_info.startup_error_label); \
+ view_info.display_location_label = _(view_info.display_location_label); \
+
+
static NautilusViewInfo fm_icon_view = {
FM_ICON_VIEW_ID,
N_("Icons"),
@@ -2750,15 +2941,30 @@
fm_icon_view_supports_uri
};
+static NautilusViewInfo fm_compact_view = {
+ FM_COMPACT_VIEW_ID,
+ N_("Compact"),
+ N_("Compact View"),
+ N_("_Compact View"),
+ N_("The compact view encountered an error."),
+ N_("The compact view encountered an error while starting up."),
+ N_("Display this location with the compact view."),
+ fm_compact_view_create,
+ fm_icon_view_supports_uri
+};
+
+gboolean
+fm_icon_view_is_compact (FMIconView *view)
+{
+ return view->details->compact;
+}
+
void
fm_icon_view_register (void)
{
- fm_icon_view.label = _(fm_icon_view.label);
- fm_icon_view.view_as_label = _(fm_icon_view.view_as_label);
- fm_icon_view.view_as_label_with_mnemonic = _(fm_icon_view.view_as_label_with_mnemonic);
- fm_icon_view.error_label = _(fm_icon_view.error_label);
- fm_icon_view.startup_error_label = _(fm_icon_view.startup_error_label);
- fm_icon_view.display_location_label = _(fm_icon_view.display_location_label);
-
+ TRANSLATE_VIEW_INFO (fm_icon_view)
nautilus_view_factory_register (&fm_icon_view);
+
+ TRANSLATE_VIEW_INFO (fm_compact_view)
+ nautilus_view_factory_register (&fm_compact_view);
}
Modified: trunk/src/file-manager/fm-icon-view.h
==============================================================================
--- trunk/src/file-manager/fm-icon-view.h (original)
+++ trunk/src/file-manager/fm-icon-view.h Sat Mar 29 21:21:47 2008
@@ -37,6 +37,7 @@
#define FM_IS_ICON_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FM_TYPE_ICON_VIEW))
#define FM_ICON_VIEW_ID "OAFIID:Nautilus_File_Manager_Icon_View"
+#define FM_COMPACT_VIEW_ID "OAFIID:Nautilus_File_Manager_Compact_View"
typedef struct FMIconViewDetails FMIconViewDetails;
@@ -86,6 +87,13 @@
*/
gboolean (* supports_auto_layout) (FMIconView *view);
+ /* supports_manual_layout is a function pointer that subclasses may
+ * override to control whether or not the manual layout options
+ * should be enabled. The default implementation returns TRUE iff
+ * not in compact mode.
+ */
+ gboolean (* supports_manual_layout) (FMIconView *view);
+
/* supports_auto_layout is a function pointer that subclasses may
* override to control whether snap-to-grid mode
* should be enabled. The default implementation returns FALSE.
@@ -105,6 +113,7 @@
NautilusFile *a,
NautilusFile *b);
void fm_icon_view_filter_by_screen (FMIconView *icon_view, gboolean filter);
+gboolean fm_icon_view_is_compact (FMIconView *icon_view);
void fm_icon_view_register (void);
Modified: trunk/src/nautilus-file-management-properties.c
==============================================================================
--- trunk/src/nautilus-file-management-properties.c (original)
+++ trunk/src/nautilus-file-management-properties.c Sat Mar 29 21:21:47 2008
@@ -50,6 +50,7 @@
/* string enum preferences */
#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_DEFAULT_VIEW_WIDGET "default_view_combobox"
#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_ICON_VIEW_ZOOM_WIDGET "icon_view_zoom_combobox"
+#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_COMPACT_VIEW_ZOOM_WIDGET "compact_view_zoom_combobox"
#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_LIST_VIEW_ZOOM_WIDGET "list_view_zoom_combobox"
#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_SORT_ORDER_WIDGET "sort_order_combobox"
#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_DATE_FORMAT_WIDGET "date_format_combobox"
@@ -62,6 +63,7 @@
#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_FOLDERS_FIRST_WIDGET "sort_folders_first_checkbutton"
#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_COMPACT_LAYOUT_WIDGET "compact_layout_checkbutton"
#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_LABELS_BESIDE_ICONS_WIDGET "labels_beside_icons_checkbutton"
+#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_ALL_COLUMNS_SAME_WIDTH "all_columns_same_width_checkbutton"
#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_ALWAYS_USE_BROWSER_WIDGET "always_use_browser_checkbutton"
#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_ALWAYS_USE_LOCATION_ENTRY_WIDGET "always_use_location_entry_checkbutton"
#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_TRASH_CONFIRM_WIDGET "trash_confirm_checkbutton"
@@ -77,6 +79,7 @@
static const char * const default_view_values[] = {
"icon_view",
+ "compact_view",
"list_view",
NULL
};
@@ -661,6 +664,8 @@
/* setup gconf stuff */
eel_gconf_monitor_add ("/apps/nautilus/icon_view");
eel_gconf_preload_cache ("/apps/nautilus/icon_view", GCONF_CLIENT_PRELOAD_ONELEVEL);
+ eel_gconf_monitor_add ("/apps/nautilus/compact_view");
+ eel_gconf_preload_cache ("/apps/nautilus/compact_view", GCONF_CLIENT_PRELOAD_ONELEVEL);
eel_gconf_monitor_add ("/apps/nautilus/list_view");
eel_gconf_preload_cache ("/apps/nautilus/list_view", GCONF_CLIENT_PRELOAD_ONELEVEL);
eel_gconf_monitor_add ("/apps/nautilus/preferences");
@@ -671,7 +676,7 @@
/* setup UI */
nautilus_file_management_properties_size_group_create (xml_dialog,
"views_label",
- 4);
+ 5);
nautilus_file_management_properties_size_group_create (xml_dialog,
"captions_label",
3);
@@ -688,6 +693,9 @@
NAUTILUS_FILE_MANAGEMENT_PROPERTIES_LABELS_BESIDE_ICONS_WIDGET,
NAUTILUS_PREFERENCES_ICON_VIEW_LABELS_BESIDE_ICONS);
eel_preferences_glade_connect_bool (xml_dialog,
+ NAUTILUS_FILE_MANAGEMENT_PROPERTIES_ALL_COLUMNS_SAME_WIDTH,
+ NAUTILUS_PREFERENCES_COMPACT_VIEW_ALL_COLUMNS_SAME_WIDTH);
+ eel_preferences_glade_connect_bool (xml_dialog,
NAUTILUS_FILE_MANAGEMENT_PROPERTIES_FOLDERS_FIRST_WIDGET,
NAUTILUS_PREFERENCES_SORT_DIRECTORIES_FIRST);
eel_preferences_glade_connect_bool (xml_dialog,
@@ -726,6 +734,10 @@
NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_ZOOM_LEVEL,
(const char **) zoom_values);
eel_preferences_glade_connect_string_enum_combo_box (xml_dialog,
+ NAUTILUS_FILE_MANAGEMENT_PROPERTIES_COMPACT_VIEW_ZOOM_WIDGET,
+ NAUTILUS_PREFERENCES_COMPACT_VIEW_DEFAULT_ZOOM_LEVEL,
+ (const char **) zoom_values);
+ eel_preferences_glade_connect_string_enum_combo_box (xml_dialog,
NAUTILUS_FILE_MANAGEMENT_PROPERTIES_LIST_VIEW_ZOOM_WIDGET,
NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_ZOOM_LEVEL,
(const char **) zoom_values);
Modified: trunk/src/nautilus-file-management-properties.glade
==============================================================================
--- trunk/src/nautilus-file-management-properties.glade (original)
+++ trunk/src/nautilus-file-management-properties.glade Sat Mar 29 21:21:47 2008
@@ -168,6 +168,7 @@
<widget class="GtkComboBox" id="default_view_combobox">
<property name="visible">True</property>
<property name="items" translatable="yes">Icon View
+Compact View
List View</property>
<property name="add_tearoffs">False</property>
<property name="focus_on_click">True</property>
@@ -460,6 +461,149 @@
</child>
<child>
+ <widget class="GtkVBox" id="vbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Compact View Defaults</b></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">1</property>
+ <property name="yscale">1</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">12</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkLabel" id="views_label_4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Default zoom level:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">compact_view_zoom_combobox</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkComboBox" id="compact_view_zoom_combobox">
+ <property name="visible">True</property>
+ <property name="items" translatable="yes">25%
+50%
+75%
+100%
+150%
+200%
+400%</property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="all_columns_same_width_checkbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">A_ll columns have the same width</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
<widget class="GtkVBox" id="vbox4">
<property name="visible">True</property>
<property name="homogeneous">False</property>
@@ -517,7 +661,7 @@
<child>
<widget class="GtkLabel" id="views_label_3">
<property name="visible">True</property>
- <property name="label" translatable="yes">_Default zoom level:</property>
+ <property name="label" translatable="yes">D_efault zoom level:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -1172,7 +1316,7 @@
<child>
<widget class="GtkLabel" id="captions_label_0">
<property name="visible">True</property>
- <property name="label" translatable="no"></property>
+ <property name="label"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -1224,7 +1368,7 @@
<child>
<widget class="GtkLabel" id="captions_label_1">
<property name="visible">True</property>
- <property name="label" translatable="no"></property>
+ <property name="label"></property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -1276,7 +1420,7 @@
<child>
<widget class="GtkLabel" id="captions_label_2">
<property name="visible">True</property>
- <property name="label" translatable="no"></property>
+ <property name="label"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -1516,7 +1660,7 @@
<child>
<widget class="GtkLabel" id="label32">
<property name="visible">True</property>
- <property name="label" translatable="no"> </property>
+ <property name="label"> </property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]