diff options
Diffstat (limited to 'nautilus-desktop/nautilus-desktop-canvas-view.c')
-rw-r--r-- | nautilus-desktop/nautilus-desktop-canvas-view.c | 1016 |
1 files changed, 528 insertions, 488 deletions
diff --git a/nautilus-desktop/nautilus-desktop-canvas-view.c b/nautilus-desktop/nautilus-desktop-canvas-view.c index 4aa618aed..772c859fa 100644 --- a/nautilus-desktop/nautilus-desktop-canvas-view.c +++ b/nautilus-desktop/nautilus-desktop-canvas-view.c @@ -1,26 +1,25 @@ - /* nautilus-desktop-canvas-view.c - implementation of canvas view for managing the desktop. - - Copyright (C) 2000, 2001 Eazel, Inc.mou - - The Gnome Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The Gnome Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the Gnome Library; see the file COPYING.LIB. If not, - see <http://www.gnu.org/licenses/>. - - Authors: Mike Engber <engber@eazel.com> - Gene Z. Ragan <gzr@eazel.com> - Miguel de Icaza <miguel@ximian.com> -*/ + * + * Copyright (C) 2000, 2001 Eazel, Inc.mou + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If not, + * see <http://www.gnu.org/licenses/>. + * + * Authors: Mike Engber <engber@eazel.com> + * Gene Z. Ragan <gzr@eazel.com> + * Miguel de Icaza <miguel@ximian.com> + */ #include <config.h> #include <stdlib.h> @@ -61,685 +60,726 @@ struct NautilusDesktopCanvasViewDetails { - GdkWindow *root_window; + GdkWindow *root_window; }; -static void default_zoom_level_changed (gpointer user_data); -static void real_update_context_menus (NautilusFilesView *view); -static char* real_get_backing_uri (NautilusFilesView *view); -static void real_check_empty_states (NautilusFilesView *view); -static void nautilus_desktop_canvas_view_update_canvas_container_fonts (NautilusDesktopCanvasView *view); -static void font_changed_callback (gpointer callback_data); +static void default_zoom_level_changed (gpointer user_data); +static void real_update_context_menus (NautilusFilesView *view); +static char *real_get_backing_uri (NautilusFilesView *view); +static void real_check_empty_states (NautilusFilesView *view); +static void nautilus_desktop_canvas_view_update_canvas_container_fonts (NautilusDesktopCanvasView *view); +static void font_changed_callback (gpointer callback_data); G_DEFINE_TYPE (NautilusDesktopCanvasView, nautilus_desktop_canvas_view, NAUTILUS_TYPE_CANVAS_VIEW) static char *desktop_directory; -#define get_canvas_container(w) nautilus_canvas_view_get_canvas_container(NAUTILUS_CANVAS_VIEW (w)) +#define get_canvas_container(w) nautilus_canvas_view_get_canvas_container (NAUTILUS_CANVAS_VIEW (w)) -#define POPUP_PATH_CANVAS_APPEARANCE "/selection/Canvas Appearance Items" +#define POPUP_PATH_CANVAS_APPEARANCE "/selection/Canvas Appearance Items" static void canvas_container_set_workarea (NautilusCanvasContainer *canvas_container, - GdkScreen *screen, - long *workareas, - int n_items) + GdkScreen *screen, + long *workareas, + int n_items) { - int left, right, top, bottom; - int screen_width, screen_height; - int scale; - int i; + int left, right, top, bottom; + int screen_width, screen_height; + int scale; + int i; - left = right = top = bottom = 0; + left = right = top = bottom = 0; - screen_width = gdk_screen_get_width (screen); - screen_height = gdk_screen_get_height (screen); + screen_width = gdk_screen_get_width (screen); + screen_height = gdk_screen_get_height (screen); - scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen)); - scale = scale ? scale : 1; + scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen)); + scale = scale ? scale : 1; - for (i = 0; i < n_items; i += 4) { - int x = workareas [i] / scale; - int y = workareas [i + 1] / scale; - int width = workareas [i + 2] / scale; - int height = workareas [i + 3] / scale; + for (i = 0; i < n_items; i += 4) + { + int x = workareas [i] / scale; + int y = workareas [i + 1] / scale; + int width = workareas [i + 2] / scale; + int height = workareas [i + 3] / scale; - if ((x + width) > screen_width || (y + height) > screen_height) - continue; + if ((x + width) > screen_width || (y + height) > screen_height) + { + continue; + } - left = MAX (left, x); - right = MAX (right, screen_width - width - x); - top = MAX (top, y); - bottom = MAX (bottom, screen_height - height - y); - } + left = MAX (left, x); + right = MAX (right, screen_width - width - x); + top = MAX (top, y); + bottom = MAX (bottom, screen_height - height - y); + } - nautilus_canvas_container_set_margins (canvas_container, - left, right, top, bottom); + nautilus_canvas_container_set_margins (canvas_container, + left, right, top, bottom); } static void net_workarea_changed (NautilusDesktopCanvasView *canvas_view, - GdkWindow *window) + GdkWindow *window) { - long *nworkareas = NULL; - long *workareas = NULL; - GdkAtom type_returned; - int format_returned; - int length_returned; - NautilusCanvasContainer *canvas_container; - GdkScreen *screen; - - g_return_if_fail (NAUTILUS_IS_DESKTOP_CANVAS_VIEW (canvas_view)); - - canvas_container = get_canvas_container (canvas_view); - - /* Find the number of desktops so we know how long the - * workareas array is going to be (each desktop will have four - * elements in the workareas array describing - * x,y,width,height) */ - gdk_error_trap_push (); - if (!gdk_property_get (window, - gdk_atom_intern ("_NET_NUMBER_OF_DESKTOPS", FALSE), - gdk_x11_xatom_to_atom (XA_CARDINAL), - 0, 4, FALSE, - &type_returned, - &format_returned, - &length_returned, - (guchar **) &nworkareas)) { - g_warning("Can not calculate _NET_NUMBER_OF_DESKTOPS"); - } - if (gdk_error_trap_pop() - || nworkareas == NULL - || type_returned != gdk_x11_xatom_to_atom (XA_CARDINAL) - || format_returned != 32) - g_warning("Can not calculate _NET_NUMBER_OF_DESKTOPS"); - - /* Note : gdk_property_get() is broken (API documents admit - * this). As a length argument, it expects the number of - * _bytes_ of data you require. Internally, gdk_property_get - * converts that value to a count of 32 bit (4 byte) elements. - * However, the length returned is in bytes, but is calculated - * via the count of returned elements * sizeof(long). This - * means on a 64 bit system, the number of bytes you have to - * request does not correspond to the number of bytes you get - * back, and is the reason for the workaround below. - */ - gdk_error_trap_push (); - if (nworkareas == NULL || (*nworkareas < 1) - || !gdk_property_get (window, - gdk_atom_intern ("_NET_WORKAREA", FALSE), - gdk_x11_xatom_to_atom (XA_CARDINAL), - 0, ((*nworkareas) * 4 * 4), FALSE, - &type_returned, - &format_returned, - &length_returned, - (guchar **) &workareas)) { - g_warning("Can not get _NET_WORKAREA"); - workareas = NULL; - } - - if (gdk_error_trap_pop () - || workareas == NULL - || type_returned != gdk_x11_xatom_to_atom (XA_CARDINAL) - || ((*nworkareas) * 4 * sizeof(long)) != length_returned - || format_returned != 32) { - g_warning("Can not determine workarea, guessing at layout"); - nautilus_canvas_container_set_margins (canvas_container, - 0, 0, 0, 0); - } else { - screen = gdk_window_get_screen (window); - - canvas_container_set_workarea - (canvas_container, screen, workareas, length_returned / sizeof (long)); - } - - if (nworkareas != NULL) - g_free (nworkareas); - - if (workareas != NULL) - g_free (workareas); + long *nworkareas = NULL; + long *workareas = NULL; + GdkAtom type_returned; + int format_returned; + int length_returned; + NautilusCanvasContainer *canvas_container; + GdkScreen *screen; + + g_return_if_fail (NAUTILUS_IS_DESKTOP_CANVAS_VIEW (canvas_view)); + + canvas_container = get_canvas_container (canvas_view); + + /* Find the number of desktops so we know how long the + * workareas array is going to be (each desktop will have four + * elements in the workareas array describing + * x,y,width,height) */ + gdk_error_trap_push (); + if (!gdk_property_get (window, + gdk_atom_intern ("_NET_NUMBER_OF_DESKTOPS", FALSE), + gdk_x11_xatom_to_atom (XA_CARDINAL), + 0, 4, FALSE, + &type_returned, + &format_returned, + &length_returned, + (guchar **) &nworkareas)) + { + g_warning ("Can not calculate _NET_NUMBER_OF_DESKTOPS"); + } + if (gdk_error_trap_pop () + || nworkareas == NULL + || type_returned != gdk_x11_xatom_to_atom (XA_CARDINAL) + || format_returned != 32) + { + g_warning ("Can not calculate _NET_NUMBER_OF_DESKTOPS"); + } + + /* Note : gdk_property_get() is broken (API documents admit + * this). As a length argument, it expects the number of + * _bytes_ of data you require. Internally, gdk_property_get + * converts that value to a count of 32 bit (4 byte) elements. + * However, the length returned is in bytes, but is calculated + * via the count of returned elements * sizeof(long). This + * means on a 64 bit system, the number of bytes you have to + * request does not correspond to the number of bytes you get + * back, and is the reason for the workaround below. + */ + gdk_error_trap_push (); + if (nworkareas == NULL || (*nworkareas < 1) + || !gdk_property_get (window, + gdk_atom_intern ("_NET_WORKAREA", FALSE), + gdk_x11_xatom_to_atom (XA_CARDINAL), + 0, ((*nworkareas) * 4 * 4), FALSE, + &type_returned, + &format_returned, + &length_returned, + (guchar **) &workareas)) + { + g_warning ("Can not get _NET_WORKAREA"); + workareas = NULL; + } + + if (gdk_error_trap_pop () + || workareas == NULL + || type_returned != gdk_x11_xatom_to_atom (XA_CARDINAL) + || ((*nworkareas) * 4 * sizeof (long)) != length_returned + || format_returned != 32) + { + g_warning ("Can not determine workarea, guessing at layout"); + nautilus_canvas_container_set_margins (canvas_container, + 0, 0, 0, 0); + } + else + { + screen = gdk_window_get_screen (window); + + canvas_container_set_workarea + (canvas_container, screen, workareas, length_returned / sizeof (long)); + } + + if (nworkareas != NULL) + { + g_free (nworkareas); + } + + if (workareas != NULL) + { + g_free (workareas); + } } static GdkFilterReturn desktop_canvas_view_property_filter (GdkXEvent *gdk_xevent, - GdkEvent *event, - gpointer data) + GdkEvent *event, + gpointer data) { - XEvent *xevent = gdk_xevent; - NautilusDesktopCanvasView *canvas_view; - - canvas_view = NAUTILUS_DESKTOP_CANVAS_VIEW (data); - - switch (xevent->type) { - case PropertyNotify: - if (xevent->xproperty.atom == gdk_x11_get_xatom_by_name ("_NET_WORKAREA")) - net_workarea_changed (canvas_view, event->any.window); - break; - default: - break; - } - - return GDK_FILTER_CONTINUE; + XEvent *xevent = gdk_xevent; + NautilusDesktopCanvasView *canvas_view; + + canvas_view = NAUTILUS_DESKTOP_CANVAS_VIEW (data); + + switch (xevent->type) + { + case PropertyNotify: + { + if (xevent->xproperty.atom == gdk_x11_get_xatom_by_name ("_NET_WORKAREA")) + { + net_workarea_changed (canvas_view, event->any.window); + } + } + break; + + default: + { + } + break; + } + + return GDK_FILTER_CONTINUE; } static guint real_get_id (NautilusFilesView *view) { - return NAUTILUS_VIEW_DESKTOP_ID; + return NAUTILUS_VIEW_DESKTOP_ID; } static void nautilus_desktop_canvas_view_dispose (GObject *object) { - NautilusDesktopCanvasView *canvas_view; + NautilusDesktopCanvasView *canvas_view; - canvas_view = NAUTILUS_DESKTOP_CANVAS_VIEW (object); + canvas_view = NAUTILUS_DESKTOP_CANVAS_VIEW (object); - g_signal_handlers_disconnect_by_func (nautilus_icon_view_preferences, - default_zoom_level_changed, - canvas_view); - g_signal_handlers_disconnect_by_func (nautilus_preferences, - font_changed_callback, - canvas_view); - g_signal_handlers_disconnect_by_func (gnome_lockdown_preferences, - nautilus_files_view_update_context_menus, - canvas_view); + g_signal_handlers_disconnect_by_func (nautilus_icon_view_preferences, + default_zoom_level_changed, + canvas_view); + g_signal_handlers_disconnect_by_func (nautilus_preferences, + font_changed_callback, + canvas_view); + g_signal_handlers_disconnect_by_func (gnome_lockdown_preferences, + nautilus_files_view_update_context_menus, + canvas_view); - G_OBJECT_CLASS (nautilus_desktop_canvas_view_parent_class)->dispose (object); + G_OBJECT_CLASS (nautilus_desktop_canvas_view_parent_class)->dispose (object); } static void nautilus_desktop_canvas_view_end_loading (NautilusFilesView *view, - gboolean all_files_seen) + gboolean all_files_seen) { - gboolean needs_reorganization; - gchar *stored_size_icon; - guint current_zoom; - guint current_icon_size; - gchar *current_icon_size_string; - NautilusFile *file; - - NAUTILUS_FILES_VIEW_CLASS (nautilus_desktop_canvas_view_parent_class)->end_loading (view, all_files_seen); - - if (!all_files_seen) - return; - - file = nautilus_files_view_get_directory_as_file (view); - g_return_if_fail (file != NULL); - - stored_size_icon = nautilus_file_get_metadata (file, NAUTILUS_METADATA_KEY_DESKTOP_ICON_SIZE, NULL); - current_zoom = nautilus_canvas_container_get_zoom_level (get_canvas_container (view)); - current_icon_size = nautilus_canvas_container_get_icon_size_for_zoom_level (current_zoom); - needs_reorganization = stored_size_icon == NULL || atoi (stored_size_icon) != current_icon_size; - - if (needs_reorganization) { - current_icon_size_string = g_strdup_printf ("%d", current_icon_size); - nautilus_canvas_view_clean_up_by_name (NAUTILUS_CANVAS_VIEW (view)); - nautilus_file_set_metadata (file, NAUTILUS_METADATA_KEY_DESKTOP_ICON_SIZE, - NULL, current_icon_size_string); - - g_free (current_icon_size_string); - } - - g_free (stored_size_icon); + gboolean needs_reorganization; + gchar *stored_size_icon; + guint current_zoom; + guint current_icon_size; + gchar *current_icon_size_string; + NautilusFile *file; + + NAUTILUS_FILES_VIEW_CLASS (nautilus_desktop_canvas_view_parent_class)->end_loading (view, all_files_seen); + + if (!all_files_seen) + { + return; + } + + file = nautilus_files_view_get_directory_as_file (view); + g_return_if_fail (file != NULL); + + stored_size_icon = nautilus_file_get_metadata (file, NAUTILUS_METADATA_KEY_DESKTOP_ICON_SIZE, NULL); + current_zoom = nautilus_canvas_container_get_zoom_level (get_canvas_container (view)); + current_icon_size = nautilus_canvas_container_get_icon_size_for_zoom_level (current_zoom); + needs_reorganization = stored_size_icon == NULL || atoi (stored_size_icon) != current_icon_size; + + if (needs_reorganization) + { + current_icon_size_string = g_strdup_printf ("%d", current_icon_size); + nautilus_canvas_view_clean_up_by_name (NAUTILUS_CANVAS_VIEW (view)); + nautilus_file_set_metadata (file, NAUTILUS_METADATA_KEY_DESKTOP_ICON_SIZE, + NULL, current_icon_size_string); + + g_free (current_icon_size_string); + } + + g_free (stored_size_icon); } static NautilusCanvasContainer * real_create_canvas_container (NautilusCanvasView *canvas_view) { - return NAUTILUS_CANVAS_CONTAINER (nautilus_desktop_canvas_view_container_new ()); + return NAUTILUS_CANVAS_CONTAINER (nautilus_desktop_canvas_view_container_new ()); } static void nautilus_desktop_canvas_view_class_init (NautilusDesktopCanvasViewClass *class) { - NautilusFilesViewClass *vclass; - NautilusCanvasViewClass *canvas_class; + NautilusFilesViewClass *vclass; + NautilusCanvasViewClass *canvas_class; - vclass = NAUTILUS_FILES_VIEW_CLASS (class); - canvas_class = NAUTILUS_CANVAS_VIEW_CLASS (class); + vclass = NAUTILUS_FILES_VIEW_CLASS (class); + canvas_class = NAUTILUS_CANVAS_VIEW_CLASS (class); - G_OBJECT_CLASS (class)->dispose = nautilus_desktop_canvas_view_dispose; + G_OBJECT_CLASS (class)->dispose = nautilus_desktop_canvas_view_dispose; - canvas_class->create_canvas_container = real_create_canvas_container; + canvas_class->create_canvas_container = real_create_canvas_container; - vclass->update_context_menus = real_update_context_menus; - vclass->get_view_id = real_get_id; - vclass->end_loading = nautilus_desktop_canvas_view_end_loading; - vclass->get_backing_uri = real_get_backing_uri; - vclass->check_empty_states = real_check_empty_states; + vclass->update_context_menus = real_update_context_menus; + vclass->get_view_id = real_get_id; + vclass->end_loading = nautilus_desktop_canvas_view_end_loading; + vclass->get_backing_uri = real_get_backing_uri; + vclass->check_empty_states = real_check_empty_states; - g_type_class_add_private (class, sizeof (NautilusDesktopCanvasViewDetails)); + g_type_class_add_private (class, sizeof (NautilusDesktopCanvasViewDetails)); } static void -unrealized_callback (GtkWidget *widget, NautilusDesktopCanvasView *desktop_canvas_view) +unrealized_callback (GtkWidget *widget, + NautilusDesktopCanvasView *desktop_canvas_view) { - g_return_if_fail (desktop_canvas_view->details->root_window != NULL); + g_return_if_fail (desktop_canvas_view->details->root_window != NULL); - /* Remove the property filter */ - gdk_window_remove_filter (desktop_canvas_view->details->root_window, - desktop_canvas_view_property_filter, - desktop_canvas_view); - desktop_canvas_view->details->root_window = NULL; + /* Remove the property filter */ + gdk_window_remove_filter (desktop_canvas_view->details->root_window, + desktop_canvas_view_property_filter, + desktop_canvas_view); + desktop_canvas_view->details->root_window = NULL; } static void -realized_callback (GtkWidget *widget, NautilusDesktopCanvasView *desktop_canvas_view) +realized_callback (GtkWidget *widget, + NautilusDesktopCanvasView *desktop_canvas_view) { - GdkWindow *root_window; - GdkScreen *screen; + GdkWindow *root_window; + GdkScreen *screen; - g_return_if_fail (desktop_canvas_view->details->root_window == NULL); + g_return_if_fail (desktop_canvas_view->details->root_window == NULL); - screen = gtk_widget_get_screen (widget); - root_window = gdk_screen_get_root_window (screen); + screen = gtk_widget_get_screen (widget); + root_window = gdk_screen_get_root_window (screen); - desktop_canvas_view->details->root_window = root_window; + desktop_canvas_view->details->root_window = root_window; - /* Read out the workarea geometry and update the icon container accordingly */ - net_workarea_changed (desktop_canvas_view, root_window); + /* Read out the workarea geometry and update the icon container accordingly */ + net_workarea_changed (desktop_canvas_view, root_window); - /* Setup the property filter */ - gdk_window_set_events (root_window, GDK_PROPERTY_CHANGE_MASK); - gdk_window_add_filter (root_window, - desktop_canvas_view_property_filter, - desktop_canvas_view); + /* Setup the property filter */ + gdk_window_set_events (root_window, GDK_PROPERTY_CHANGE_MASK); + gdk_window_add_filter (root_window, + desktop_canvas_view_property_filter, + desktop_canvas_view); } static void -desktop_canvas_container_realize (GtkWidget *widget, - NautilusDesktopCanvasView *desktop_canvas_view) +desktop_canvas_container_realize (GtkWidget *widget, + NautilusDesktopCanvasView *desktop_canvas_view) { - GdkWindow *bin_window; - GdkRGBA transparent = { 0, 0, 0, 0 }; + GdkWindow *bin_window; + GdkRGBA transparent = { 0, 0, 0, 0 }; - bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (widget)); - gdk_window_set_background_rgba (bin_window, &transparent); + bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (widget)); + gdk_window_set_background_rgba (bin_window, &transparent); } static NautilusCanvasZoomLevel get_default_zoom_level (void) { - NautilusCanvasZoomLevel default_zoom_level; + NautilusCanvasZoomLevel default_zoom_level; - default_zoom_level = g_settings_get_enum (nautilus_icon_view_preferences, - NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_ZOOM_LEVEL); + default_zoom_level = g_settings_get_enum (nautilus_icon_view_preferences, + NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_ZOOM_LEVEL); - return CLAMP (default_zoom_level, NAUTILUS_CANVAS_ZOOM_LEVEL_SMALL, NAUTILUS_CANVAS_ZOOM_LEVEL_LARGE); + return CLAMP (default_zoom_level, NAUTILUS_CANVAS_ZOOM_LEVEL_SMALL, NAUTILUS_CANVAS_ZOOM_LEVEL_LARGE); } static void set_up_zoom_level (NautilusDesktopCanvasView *desktop_canvas_view) { - NautilusCanvasZoomLevel new_level; + NautilusCanvasZoomLevel new_level; - new_level = get_default_zoom_level (); - nautilus_canvas_container_set_zoom_level (get_canvas_container (desktop_canvas_view), - new_level); + new_level = get_default_zoom_level (); + nautilus_canvas_container_set_zoom_level (get_canvas_container (desktop_canvas_view), + new_level); } static void default_zoom_level_changed (gpointer user_data) { - NautilusCanvasZoomLevel new_level; - NautilusDesktopCanvasView *desktop_canvas_view; - gint new_icon_size; - NautilusFile *file; - gchar *new_icon_size_string; - - desktop_canvas_view = NAUTILUS_DESKTOP_CANVAS_VIEW (user_data); - file = nautilus_files_view_get_directory_as_file (NAUTILUS_FILES_VIEW (user_data)); - new_level = get_default_zoom_level (); - new_icon_size = nautilus_canvas_container_get_icon_size_for_zoom_level (new_level); - new_icon_size_string = g_strdup_printf ("%d", new_icon_size); - - nautilus_file_set_metadata (file, NAUTILUS_METADATA_KEY_DESKTOP_ICON_SIZE, - NULL, new_icon_size_string); - set_up_zoom_level (desktop_canvas_view); - - g_free (new_icon_size_string); + NautilusCanvasZoomLevel new_level; + NautilusDesktopCanvasView *desktop_canvas_view; + gint new_icon_size; + NautilusFile *file; + gchar *new_icon_size_string; + + desktop_canvas_view = NAUTILUS_DESKTOP_CANVAS_VIEW (user_data); + file = nautilus_files_view_get_directory_as_file (NAUTILUS_FILES_VIEW (user_data)); + new_level = get_default_zoom_level (); + new_icon_size = nautilus_canvas_container_get_icon_size_for_zoom_level (new_level); + new_icon_size_string = g_strdup_printf ("%d", new_icon_size); + + nautilus_file_set_metadata (file, NAUTILUS_METADATA_KEY_DESKTOP_ICON_SIZE, + NULL, new_icon_size_string); + set_up_zoom_level (desktop_canvas_view); + + g_free (new_icon_size_string); } static void font_changed_callback (gpointer callback_data) { - g_return_if_fail (NAUTILUS_IS_DESKTOP_CANVAS_VIEW (callback_data)); - - nautilus_desktop_canvas_view_update_canvas_container_fonts (NAUTILUS_DESKTOP_CANVAS_VIEW (callback_data)); + g_return_if_fail (NAUTILUS_IS_DESKTOP_CANVAS_VIEW (callback_data)); + + nautilus_desktop_canvas_view_update_canvas_container_fonts (NAUTILUS_DESKTOP_CANVAS_VIEW (callback_data)); } static void nautilus_desktop_canvas_view_update_canvas_container_fonts (NautilusDesktopCanvasView *canvas_view) { - NautilusCanvasContainer *canvas_container; - char *font; + NautilusCanvasContainer *canvas_container; + char *font; - canvas_container = get_canvas_container (canvas_view); - g_assert (canvas_container != NULL); + canvas_container = get_canvas_container (canvas_view); + g_assert (canvas_container != NULL); - font = g_settings_get_string (nautilus_desktop_preferences, - NAUTILUS_PREFERENCES_DESKTOP_FONT); + font = g_settings_get_string (nautilus_desktop_preferences, + NAUTILUS_PREFERENCES_DESKTOP_FONT); - nautilus_canvas_container_set_font (canvas_container, font); + nautilus_canvas_container_set_font (canvas_container, font); - g_free (font); + g_free (font); } static const gchar * -get_control_center_command (const gchar ** params_out) +get_control_center_command (const gchar **params_out) { - gchar *path; - const gchar *retval; - const gchar *params; - const gchar *xdg_current_desktop; - gchar **desktop_names; - gboolean is_unity; - int i; - - path = NULL; - retval = NULL; - params = NULL; - - xdg_current_desktop = g_getenv ("XDG_CURRENT_DESKTOP"); - - /* Detect the Unity-based environments */ - is_unity = FALSE; - if (xdg_current_desktop != NULL) { - desktop_names = g_strsplit (xdg_current_desktop, ":", 0); - for (i = 0; desktop_names[i]; ++i) { - if (!g_strcmp0 (desktop_names[i], "Unity")) { - is_unity = TRUE; - break; - } - } - g_strfreev (desktop_names); - } - - /* In Unity look for unity-control-center */ - if (is_unity) { - path = g_find_program_in_path ("unity-control-center"); - if (path != NULL) { - retval = "unity-control-center"; - params = "appearance"; - goto out; - } - } - - /* Otherwise look for gnome-control-center */ - path = g_find_program_in_path ("gnome-control-center"); - if (path != NULL) { - retval = "gnome-control-center"; - params = "background"; - } - - out: - g_free (path); - if (params_out != NULL) { - *params_out = params; - } - - return retval; + gchar *path; + const gchar *retval; + const gchar *params; + const gchar *xdg_current_desktop; + gchar **desktop_names; + gboolean is_unity; + int i; + + path = NULL; + retval = NULL; + params = NULL; + + xdg_current_desktop = g_getenv ("XDG_CURRENT_DESKTOP"); + + /* Detect the Unity-based environments */ + is_unity = FALSE; + if (xdg_current_desktop != NULL) + { + desktop_names = g_strsplit (xdg_current_desktop, ":", 0); + for (i = 0; desktop_names[i]; ++i) + { + if (!g_strcmp0 (desktop_names[i], "Unity")) + { + is_unity = TRUE; + break; + } + } + g_strfreev (desktop_names); + } + + /* In Unity look for unity-control-center */ + if (is_unity) + { + path = g_find_program_in_path ("unity-control-center"); + if (path != NULL) + { + retval = "unity-control-center"; + params = "appearance"; + goto out; + } + } + + /* Otherwise look for gnome-control-center */ + path = g_find_program_in_path ("gnome-control-center"); + if (path != NULL) + { + retval = "gnome-control-center"; + params = "background"; + } + +out: + g_free (path); + if (params_out != NULL) + { + *params_out = params; + } + + return retval; } static void action_change_background (GSimpleAction *action, - GVariant *state, - gpointer user_data) + GVariant *state, + gpointer user_data) { - const gchar *control_center_cmd, *params; + const gchar *control_center_cmd, *params; - g_assert (NAUTILUS_FILES_VIEW (user_data)); + g_assert (NAUTILUS_FILES_VIEW (user_data)); - control_center_cmd = get_control_center_command (¶ms); - if (control_center_cmd == NULL) { - return; - } + control_center_cmd = get_control_center_command (¶ms); + if (control_center_cmd == NULL) + { + return; + } - nautilus_launch_application_from_command (gtk_widget_get_screen (GTK_WIDGET (user_data)), - control_center_cmd, - FALSE, - params, NULL); + nautilus_launch_application_from_command (gtk_widget_get_screen (GTK_WIDGET (user_data)), + control_center_cmd, + FALSE, + params, NULL); } static void action_empty_trash (GSimpleAction *action, - GVariant *state, - gpointer user_data) + GVariant *state, + gpointer user_data) { - g_assert (NAUTILUS_IS_FILES_VIEW (user_data)); + g_assert (NAUTILUS_IS_FILES_VIEW (user_data)); - nautilus_file_operations_empty_trash (GTK_WIDGET (user_data)); + nautilus_file_operations_empty_trash (GTK_WIDGET (user_data)); } static void action_stretch (GSimpleAction *action, - GVariant *state, - gpointer user_data) + GVariant *state, + gpointer user_data) { - nautilus_canvas_container_show_stretch_handles - (get_canvas_container (user_data)); + nautilus_canvas_container_show_stretch_handles + (get_canvas_container (user_data)); } static void action_unstretch (GSimpleAction *action, - GVariant *state, - gpointer user_data) + GVariant *state, + gpointer user_data) { - nautilus_canvas_container_unstretch (get_canvas_container (user_data)); + nautilus_canvas_container_unstretch (get_canvas_container (user_data)); } static void action_organize_desktop_by_name (GSimpleAction *action, - GVariant *state, - gpointer user_data) + GVariant *state, + gpointer user_data) { - nautilus_canvas_view_clean_up_by_name (NAUTILUS_CANVAS_VIEW (user_data)); + nautilus_canvas_view_clean_up_by_name (NAUTILUS_CANVAS_VIEW (user_data)); } static gboolean trash_link_is_selection (NautilusFilesView *view) { - GList *selection; - NautilusDesktopLink *link; - gboolean result; - - result = FALSE; - - selection = nautilus_view_get_selection (NAUTILUS_VIEW (view)); - - if ((g_list_length (selection) == 1) && - NAUTILUS_IS_DESKTOP_ICON_FILE (selection->data)) { - link = nautilus_desktop_icon_file_get_link (NAUTILUS_DESKTOP_ICON_FILE (selection->data)); - /* link may be NULL if the link was recently removed (unmounted) */ - if (link != NULL && - nautilus_desktop_link_get_link_type (link) == NAUTILUS_DESKTOP_LINK_TRASH) { - result = TRUE; - } - if (link) { - g_object_unref (link); - } - } - - nautilus_file_list_free (selection); - - return result; + GList *selection; + NautilusDesktopLink *link; + gboolean result; + + result = FALSE; + + selection = nautilus_view_get_selection (NAUTILUS_VIEW (view)); + + if ((g_list_length (selection) == 1) && + NAUTILUS_IS_DESKTOP_ICON_FILE (selection->data)) + { + link = nautilus_desktop_icon_file_get_link (NAUTILUS_DESKTOP_ICON_FILE (selection->data)); + /* link may be NULL if the link was recently removed (unmounted) */ + if (link != NULL && + nautilus_desktop_link_get_link_type (link) == NAUTILUS_DESKTOP_LINK_TRASH) + { + result = TRUE; + } + if (link) + { + g_object_unref (link); + } + } + + nautilus_file_list_free (selection); + + return result; } -const GActionEntry desktop_view_entries[] = { - { "change-background", action_change_background }, - { "organize-desktop-by-name", action_organize_desktop_by_name }, - { "empty-trash", action_empty_trash }, - { "stretch", action_stretch }, - { "unstretch", action_unstretch }, +const GActionEntry desktop_view_entries[] = +{ + { "change-background", action_change_background }, + { "organize-desktop-by-name", action_organize_desktop_by_name }, + { "empty-trash", action_empty_trash }, + { "stretch", action_stretch }, + { "unstretch", action_unstretch }, }; static void real_check_empty_states (NautilusFilesView *view) { - /* Do nothing */ + /* Do nothing */ } -static char* +static char * real_get_backing_uri (NautilusFilesView *view) { - gchar *uri; - NautilusDirectory *directory; - NautilusDirectory *model; + gchar *uri; + NautilusDirectory *directory; + NautilusDirectory *model; - g_return_val_if_fail (NAUTILUS_IS_FILES_VIEW (view), NULL); + g_return_val_if_fail (NAUTILUS_IS_FILES_VIEW (view), NULL); - model = nautilus_files_view_get_model (view); + model = nautilus_files_view_get_model (view); - if (model == NULL) { - return NULL; - } + if (model == NULL) + { + return NULL; + } - directory = nautilus_desktop_directory_get_real_directory (NAUTILUS_DESKTOP_DIRECTORY (model)); + directory = nautilus_desktop_directory_get_real_directory (NAUTILUS_DESKTOP_DIRECTORY (model)); - uri = nautilus_directory_get_uri (directory); + uri = nautilus_directory_get_uri (directory); - nautilus_directory_unref (directory); + nautilus_directory_unref (directory); - return uri; + return uri; } static void real_update_context_menus (NautilusFilesView *view) { - NautilusCanvasContainer *canvas_container; - NautilusDesktopCanvasView *desktop_view; - GAction *action; - GActionGroup *view_action_group; - GList *selection; - int selection_count; + NautilusCanvasContainer *canvas_container; + NautilusDesktopCanvasView *desktop_view; + GAction *action; + GActionGroup *view_action_group; + GList *selection; + int selection_count; - g_assert (NAUTILUS_IS_DESKTOP_CANVAS_VIEW (view)); + g_assert (NAUTILUS_IS_DESKTOP_CANVAS_VIEW (view)); - NAUTILUS_FILES_VIEW_CLASS (nautilus_desktop_canvas_view_parent_class)->update_context_menus (view); + NAUTILUS_FILES_VIEW_CLASS (nautilus_desktop_canvas_view_parent_class)->update_context_menus (view); - view_action_group = nautilus_files_view_get_action_group (view); - desktop_view = NAUTILUS_DESKTOP_CANVAS_VIEW (view); - selection = nautilus_view_get_selection (NAUTILUS_VIEW (view)); - selection_count = g_list_length (selection); + view_action_group = nautilus_files_view_get_action_group (view); + desktop_view = NAUTILUS_DESKTOP_CANVAS_VIEW (view); + selection = nautilus_view_get_selection (NAUTILUS_VIEW (view)); + selection_count = g_list_length (selection); - action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "empty-trash"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), trash_link_is_selection (view)); + action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "empty-trash"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), trash_link_is_selection (view)); - action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "keep-aligned"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "keep-aligned"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "organize-desktop-by-name"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "organize-desktop-by-name"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "change-background"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "change-background"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "properties"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), selection_count > 0); + action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "properties"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), selection_count > 0); - /* Stretch */ - canvas_container = get_canvas_container (desktop_view); + /* Stretch */ + canvas_container = get_canvas_container (desktop_view); - action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "stretch"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), selection_count == 1 && - canvas_container != NULL && - !nautilus_canvas_container_has_stretch_handles (canvas_container)); + action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "stretch"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), selection_count == 1 && + canvas_container != NULL && + !nautilus_canvas_container_has_stretch_handles (canvas_container)); - nautilus_file_list_free (selection); + nautilus_file_list_free (selection); - /* Unstretch */ - action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "unstretch"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), canvas_container != NULL && - nautilus_canvas_container_is_stretched (canvas_container)); + /* Unstretch */ + action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "unstretch"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), canvas_container != NULL && + nautilus_canvas_container_is_stretched (canvas_container)); } static void nautilus_desktop_canvas_view_init (NautilusDesktopCanvasView *desktop_canvas_view) { - NautilusCanvasContainer *canvas_container; - GtkAllocation allocation; - GActionGroup *view_action_group; - GtkAdjustment *hadj, *vadj; + NautilusCanvasContainer *canvas_container; + GtkAllocation allocation; + GActionGroup *view_action_group; + GtkAdjustment *hadj, *vadj; - desktop_canvas_view->details = G_TYPE_INSTANCE_GET_PRIVATE (desktop_canvas_view, - NAUTILUS_TYPE_DESKTOP_CANVAS_VIEW, - NautilusDesktopCanvasViewDetails); + desktop_canvas_view->details = G_TYPE_INSTANCE_GET_PRIVATE (desktop_canvas_view, + NAUTILUS_TYPE_DESKTOP_CANVAS_VIEW, + NautilusDesktopCanvasViewDetails); - if (desktop_directory == NULL) { - desktop_directory = nautilus_get_desktop_directory (); - } + if (desktop_directory == NULL) + { + desktop_directory = nautilus_get_desktop_directory (); + } - canvas_container = get_canvas_container (desktop_canvas_view); + canvas_container = get_canvas_container (desktop_canvas_view); - nautilus_canvas_container_set_is_fixed_size (canvas_container, TRUE); - nautilus_canvas_container_set_is_desktop (canvas_container, TRUE); - nautilus_canvas_container_set_store_layout_timestamps (canvas_container, TRUE); + nautilus_canvas_container_set_is_fixed_size (canvas_container, TRUE); + nautilus_canvas_container_set_is_desktop (canvas_container, TRUE); + nautilus_canvas_container_set_store_layout_timestamps (canvas_container, TRUE); - /* Set allocation to be at 0, 0 */ - gtk_widget_get_allocation (GTK_WIDGET (canvas_container), &allocation); - allocation.x = 0; - allocation.y = 0; - gtk_widget_set_allocation (GTK_WIDGET (canvas_container), &allocation); + /* Set allocation to be at 0, 0 */ + gtk_widget_get_allocation (GTK_WIDGET (canvas_container), &allocation); + allocation.x = 0; + allocation.y = 0; + gtk_widget_set_allocation (GTK_WIDGET (canvas_container), &allocation); - gtk_widget_queue_resize (GTK_WIDGET (canvas_container)); + gtk_widget_queue_resize (GTK_WIDGET (canvas_container)); - hadj = gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (canvas_container)); - vadj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (canvas_container)); + hadj = gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (canvas_container)); + vadj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (canvas_container)); - gtk_adjustment_set_value (hadj, 0); - gtk_adjustment_set_value (vadj, 0); + gtk_adjustment_set_value (hadj, 0); + gtk_adjustment_set_value (vadj, 0); - nautilus_files_view_ignore_hidden_file_preferences - (NAUTILUS_FILES_VIEW (desktop_canvas_view)); + nautilus_files_view_ignore_hidden_file_preferences + (NAUTILUS_FILES_VIEW (desktop_canvas_view)); - nautilus_files_view_set_show_foreign (NAUTILUS_FILES_VIEW (desktop_canvas_view), - FALSE); + nautilus_files_view_set_show_foreign (NAUTILUS_FILES_VIEW (desktop_canvas_view), + FALSE); - g_signal_connect_object (canvas_container, "realize", - G_CALLBACK (desktop_canvas_container_realize), desktop_canvas_view, 0); + g_signal_connect_object (canvas_container, "realize", + G_CALLBACK (desktop_canvas_container_realize), desktop_canvas_view, 0); - g_signal_connect_object (desktop_canvas_view, "realize", - G_CALLBACK (realized_callback), desktop_canvas_view, 0); - g_signal_connect_object (desktop_canvas_view, "unrealize", - G_CALLBACK (unrealized_callback), desktop_canvas_view, 0); + g_signal_connect_object (desktop_canvas_view, "realize", + G_CALLBACK (realized_callback), desktop_canvas_view, 0); + g_signal_connect_object (desktop_canvas_view, "unrealize", + G_CALLBACK (unrealized_callback), desktop_canvas_view, 0); - g_signal_connect_swapped (nautilus_icon_view_preferences, - "changed::" NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_ZOOM_LEVEL, - G_CALLBACK (default_zoom_level_changed), - desktop_canvas_view); + g_signal_connect_swapped (nautilus_icon_view_preferences, + "changed::" NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_ZOOM_LEVEL, + G_CALLBACK (default_zoom_level_changed), + desktop_canvas_view); - g_signal_connect_swapped (nautilus_desktop_preferences, - "changed::" NAUTILUS_PREFERENCES_DESKTOP_FONT, - G_CALLBACK (font_changed_callback), - desktop_canvas_view); + g_signal_connect_swapped (nautilus_desktop_preferences, + "changed::" NAUTILUS_PREFERENCES_DESKTOP_FONT, + G_CALLBACK (font_changed_callback), + desktop_canvas_view); - set_up_zoom_level (desktop_canvas_view); - nautilus_desktop_canvas_view_update_canvas_container_fonts (desktop_canvas_view); + set_up_zoom_level (desktop_canvas_view); + nautilus_desktop_canvas_view_update_canvas_container_fonts (desktop_canvas_view); - g_signal_connect_swapped (gnome_lockdown_preferences, - "changed::" NAUTILUS_PREFERENCES_LOCKDOWN_COMMAND_LINE, - G_CALLBACK (nautilus_files_view_update_context_menus), - desktop_canvas_view); + g_signal_connect_swapped (gnome_lockdown_preferences, + "changed::" NAUTILUS_PREFERENCES_LOCKDOWN_COMMAND_LINE, + G_CALLBACK (nautilus_files_view_update_context_menus), + desktop_canvas_view); - view_action_group = nautilus_files_view_get_action_group (NAUTILUS_FILES_VIEW (desktop_canvas_view)); + view_action_group = nautilus_files_view_get_action_group (NAUTILUS_FILES_VIEW (desktop_canvas_view)); - g_action_map_add_action_entries (G_ACTION_MAP (view_action_group), - desktop_view_entries, - G_N_ELEMENTS (desktop_view_entries), - NAUTILUS_FILES_VIEW (desktop_canvas_view)); + g_action_map_add_action_entries (G_ACTION_MAP (view_action_group), + desktop_view_entries, + G_N_ELEMENTS (desktop_view_entries), + NAUTILUS_FILES_VIEW (desktop_canvas_view)); } NautilusFilesView * nautilus_desktop_canvas_view_new (NautilusWindowSlot *slot) { - return g_object_new (NAUTILUS_TYPE_DESKTOP_CANVAS_VIEW, - "window-slot", slot, - "supports-zooming", FALSE, - "supports-auto-layout", FALSE, - "supports-manual-layout", TRUE, - "supports-scaling", TRUE, - "supports-keep-aligned", TRUE, - NULL); + return g_object_new (NAUTILUS_TYPE_DESKTOP_CANVAS_VIEW, + "window-slot", slot, + "supports-zooming", FALSE, + "supports-auto-layout", FALSE, + "supports-manual-layout", TRUE, + "supports-scaling", TRUE, + "supports-keep-aligned", TRUE, + NULL); } |