From 4881e9cb3642dd384dc445969775f2f2433c5995 Mon Sep 17 00:00:00 2001 From: Jan Arne Petersen Date: Wed, 6 Nov 2002 14:40:26 +0000 Subject: In single click mode use a hand cursor instead of underlining. 2002-11-07 Jan Arne Petersen * libnautilus-private/nautilus-icon-canvas-item.c: (draw_or_measure_label_text), (create_label_layout), (get_label_layout), (nautilus_icon_canvas_item_event): In single click mode use a hand cursor instead of underlining. * src/nautilus-window.c: (create_view_as_menu_item): * src/Nautilus_shell.server.in: Add mnemonics to the 'View as List' and 'View as Icons' entries. * icons/Makefile.am: * src/nautilus-window-manage-views.c: (compute_title), (nautilus_window_update_icon), (set_displayed_location), (viewed_file_changed_callback), (location_has_really_changed), (title_changed_callback): * src/nautilus-window-private.h: * src/nautilus-window.c: (icons_changed_callback), (nautilus_window_instance_init): Use the real file icons as window border icons in the nautilus window and file properties dialog. Use a special desktop icon and title in the Ctrl-Alt-Tab window. --- ChangeLog | 26 ++++++++++++++ icons/Makefile.am | 1 + icons/nautilus-desktop.png | Bin 0 -> 3002 bytes libnautilus-private/nautilus-icon-canvas-item.c | 39 +++++++------------- src/Nautilus_shell.server.in | 4 +-- src/nautilus-navigation-window.c | 16 ++++++++- src/nautilus-object-window.c | 16 ++++++++- src/nautilus-spatial-window.c | 16 ++++++++- src/nautilus-window-manage-views.c | 46 +++++++++++++++++++++++- src/nautilus-window-private.h | 1 + src/nautilus-window.c | 16 ++++++++- 11 files changed, 147 insertions(+), 34 deletions(-) create mode 100644 icons/nautilus-desktop.png diff --git a/ChangeLog b/ChangeLog index b36788d4b..8af688aa4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,29 @@ +2002-11-07 Jan Arne Petersen + + * libnautilus-private/nautilus-icon-canvas-item.c: + (draw_or_measure_label_text), (create_label_layout), + (get_label_layout), (nautilus_icon_canvas_item_event): + + In single click mode use a hand cursor instead of underlining. + + * src/nautilus-window.c: (create_view_as_menu_item): + * src/Nautilus_shell.server.in: + + Add mnemonics to the 'View as List' and 'View as Icons' entries. + + * icons/Makefile.am: + * src/nautilus-window-manage-views.c: (compute_title), + (nautilus_window_update_icon), (set_displayed_location), + (viewed_file_changed_callback), (location_has_really_changed), + (title_changed_callback): + * src/nautilus-window-private.h: + * src/nautilus-window.c: (icons_changed_callback), + (nautilus_window_instance_init): + + Use the real file icons as window border icons in the nautilus window + and file properties dialog. Use a special desktop icon and title in + the Ctrl-Alt-Tab window. + 2002-11-06 Alexander Larsson * libnautilus-private/nautilus-program-chooser.c: diff --git a/icons/Makefile.am b/icons/Makefile.am index 974fd00ca..8d2a1c838 100644 --- a/icons/Makefile.am +++ b/icons/Makefile.am @@ -22,6 +22,7 @@ icon_DATA =\ emblems.png \ increment.png \ knob.png \ + nautilus-desktop.png \ nautilus-launch-icon.png \ nautilus-mini-logo.png \ nautilus-server-connect.png \ diff --git a/icons/nautilus-desktop.png b/icons/nautilus-desktop.png new file mode 100644 index 000000000..e3107a6e0 Binary files /dev/null and b/icons/nautilus-desktop.png differ diff --git a/libnautilus-private/nautilus-icon-canvas-item.c b/libnautilus-private/nautilus-icon-canvas-item.c index 6f9aae6a1..6e29a2a7a 100644 --- a/libnautilus-private/nautilus-icon-canvas-item.c +++ b/libnautilus-private/nautilus-icon-canvas-item.c @@ -178,7 +178,6 @@ static void draw_label_layout (NautilusIconCanvasItem static gboolean hit_test_stretch_handle (NautilusIconCanvasItem *item, ArtIRect canvas_rect); -static void update_label_layouts (NautilusIconCanvasItem *item); static void clear_rounded_corners (GdkPixbuf *destination_pixbuf, GdkPixbuf *corner_pixbuf, int corner_size); @@ -1241,23 +1240,6 @@ nautilus_icon_canvas_item_draw (EelCanvasItem *item, GdkDrawable *drawable, draw_label_text (icon_item, drawable, icon_rect.x0, icon_rect.y1); } -static void -update_label_layouts (NautilusIconCanvasItem *item) -{ - PangoUnderline underline; - - underline = (item->details->is_prelit && in_single_click_mode ()) ? - PANGO_UNDERLINE_SINGLE : PANGO_UNDERLINE_NONE; - - if (item->details->editable_text_layout != NULL) { - eel_pango_layout_set_underline (item->details->editable_text_layout, underline); - } - - if (item->details->additional_text_layout != NULL) { - eel_pango_layout_set_underline (item->details->additional_text_layout, underline); - } -} - static PangoLayout * create_label_layout (NautilusIconCanvasItem *item, const char *text) @@ -1292,11 +1274,6 @@ create_label_layout (NautilusIconCanvasItem *item, pango_layout_set_font_description (layout, desc); pango_font_description_free (desc); - /* if it's prelit, and we're in click-to-activate mode, underline the text */ - if (item->details->is_prelit && in_single_click_mode ()) { - eel_pango_layout_set_underline (layout, PANGO_UNDERLINE_SINGLE); - } - return layout; } @@ -1307,8 +1284,6 @@ get_label_layout (PangoLayout **layout, { if (*layout == NULL) { *layout = create_label_layout (item, text); - - update_label_layouts (item); } g_object_ref (*layout); @@ -1395,6 +1370,7 @@ static int nautilus_icon_canvas_item_event (EelCanvasItem *item, GdkEvent *event) { NautilusIconCanvasItem *icon_item; + GdkCursor *cursor; icon_item = NAUTILUS_ICON_CANVAS_ITEM (item); @@ -1402,8 +1378,15 @@ nautilus_icon_canvas_item_event (EelCanvasItem *item, GdkEvent *event) case GDK_ENTER_NOTIFY: if (!icon_item->details->is_prelit) { icon_item->details->is_prelit = TRUE; - update_label_layouts (icon_item); eel_canvas_item_request_update (item); + /* show a hand cursor */ + if (in_single_click_mode ()) { + cursor = gdk_cursor_new_for_display (gdk_display_get_default(), + GDK_HAND2); + gdk_window_set_cursor (((GdkEventAny *)event)->window, cursor); + gdk_cursor_unref (cursor); + } + /* FIXME bugzilla.gnome.org 42473: * We should emit our own signal here, * not one from the container; it could hook @@ -1443,8 +1426,10 @@ nautilus_icon_canvas_item_event (EelCanvasItem *item, GdkEvent *event) icon_item->details->is_prelit = FALSE; icon_item->details->is_active = 0; icon_item->details->is_highlighted_for_drop = FALSE; - update_label_layouts (icon_item); eel_canvas_item_request_update (item); + + /* show default cursor */ + gdk_window_set_cursor (((GdkEventAny *)event)->window, NULL); } return TRUE; diff --git a/src/Nautilus_shell.server.in b/src/Nautilus_shell.server.in index 80397dc0d..48a4e930b 100644 --- a/src/Nautilus_shell.server.in +++ b/src/Nautilus_shell.server.in @@ -27,7 +27,7 @@ - + @@ -62,7 +62,7 @@ - + diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c index af87078b6..b0177d68e 100644 --- a/src/nautilus-navigation-window.c +++ b/src/nautilus-navigation-window.c @@ -154,6 +154,14 @@ set_up_default_icon_list (void) eel_g_list_free_deep_custom (icon_list, (GFunc) g_object_unref, NULL); } +static void +icons_changed_callback (GObject *factory, NautilusWindow *window) +{ + g_return_if_fail (NAUTILUS_IS_WINDOW (window)); + + nautilus_window_update_icon (window); +} + static void nautilus_window_instance_init (NautilusWindow *window) { @@ -179,6 +187,12 @@ nautilus_window_instance_init (NautilusWindow *window) nautilus_window_get_ui_container (window), NULL); + /* Register IconFactory callback to update the window border icon + * when the icon-theme is changed. + */ + g_signal_connect (nautilus_icon_factory_get (), "icons_changed", + G_CALLBACK (icons_changed_callback), window); + /* Create a separate component so when we remove the status * we don't loose the status bar */ @@ -1124,7 +1138,7 @@ create_view_as_menu_item (NautilusWindow *window, char *menu_label; menu_label = g_strdup (_(identifier->view_as_label)); - menu_item = gtk_menu_item_new_with_label (menu_label); + menu_item = gtk_menu_item_new_with_mnemonic (menu_label); g_free (menu_label); g_signal_connect_object (menu_item, "activate", diff --git a/src/nautilus-object-window.c b/src/nautilus-object-window.c index af87078b6..b0177d68e 100644 --- a/src/nautilus-object-window.c +++ b/src/nautilus-object-window.c @@ -154,6 +154,14 @@ set_up_default_icon_list (void) eel_g_list_free_deep_custom (icon_list, (GFunc) g_object_unref, NULL); } +static void +icons_changed_callback (GObject *factory, NautilusWindow *window) +{ + g_return_if_fail (NAUTILUS_IS_WINDOW (window)); + + nautilus_window_update_icon (window); +} + static void nautilus_window_instance_init (NautilusWindow *window) { @@ -179,6 +187,12 @@ nautilus_window_instance_init (NautilusWindow *window) nautilus_window_get_ui_container (window), NULL); + /* Register IconFactory callback to update the window border icon + * when the icon-theme is changed. + */ + g_signal_connect (nautilus_icon_factory_get (), "icons_changed", + G_CALLBACK (icons_changed_callback), window); + /* Create a separate component so when we remove the status * we don't loose the status bar */ @@ -1124,7 +1138,7 @@ create_view_as_menu_item (NautilusWindow *window, char *menu_label; menu_label = g_strdup (_(identifier->view_as_label)); - menu_item = gtk_menu_item_new_with_label (menu_label); + menu_item = gtk_menu_item_new_with_mnemonic (menu_label); g_free (menu_label); g_signal_connect_object (menu_item, "activate", diff --git a/src/nautilus-spatial-window.c b/src/nautilus-spatial-window.c index af87078b6..b0177d68e 100644 --- a/src/nautilus-spatial-window.c +++ b/src/nautilus-spatial-window.c @@ -154,6 +154,14 @@ set_up_default_icon_list (void) eel_g_list_free_deep_custom (icon_list, (GFunc) g_object_unref, NULL); } +static void +icons_changed_callback (GObject *factory, NautilusWindow *window) +{ + g_return_if_fail (NAUTILUS_IS_WINDOW (window)); + + nautilus_window_update_icon (window); +} + static void nautilus_window_instance_init (NautilusWindow *window) { @@ -179,6 +187,12 @@ nautilus_window_instance_init (NautilusWindow *window) nautilus_window_get_ui_container (window), NULL); + /* Register IconFactory callback to update the window border icon + * when the icon-theme is changed. + */ + g_signal_connect (nautilus_icon_factory_get (), "icons_changed", + G_CALLBACK (icons_changed_callback), window); + /* Create a separate component so when we remove the status * we don't loose the status bar */ @@ -1124,7 +1138,7 @@ create_view_as_menu_item (NautilusWindow *window, char *menu_label; menu_label = g_strdup (_(identifier->view_as_label)); - menu_item = gtk_menu_item_new_with_label (menu_label); + menu_item = gtk_menu_item_new_with_mnemonic (menu_label); g_free (menu_label); g_signal_connect_object (menu_item, "activate", diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c index 923bfbdcb..34562b9e3 100644 --- a/src/nautilus-window-manage-views.c +++ b/src/nautilus-window-manage-views.c @@ -185,7 +185,11 @@ compute_title (NautilusWindow *window) char *title; title = NULL; - if (window->new_content_view != NULL) { + + if (NAUTILUS_IS_DESKTOP_WINDOW (window)) { + /* Special Desktop window title (displayed in the Ctrl-Alt-Tab window) */ + title = g_strdup(_("Desktop")); + } else if (window->new_content_view != NULL) { title = nautilus_view_frame_get_title (window->new_content_view); } else if (window->content_view != NULL) { title = nautilus_view_frame_get_title (window->content_view); @@ -258,6 +262,42 @@ update_title (NautilusWindow *window) g_free (title); } +/* nautilus_window_update_icon: + * + * Update the non-NautilusViewFrame objects that use the location's user-displayable + * icon in some way. Called when the location or icon-theme has changed. + * @window: The NautilusWindow in question. + * + */ +void +nautilus_window_update_icon (NautilusWindow *window) +{ + char *path; + GdkPixbuf *pixbuf; + + pixbuf = NULL; + + /* Desktop window special icon */ + if (NAUTILUS_IS_DESKTOP_WINDOW (window)) { + path = nautilus_pixmap_file ("nautilus-desktop.png"); + + if (path != NULL) { + pixbuf = gdk_pixbuf_new_from_file (path, NULL); + + g_free (path); + } + } else { + pixbuf = nautilus_icon_factory_get_pixbuf_for_file (window->details->viewed_file, + "open", + NAUTILUS_ICON_SIZE_STANDARD); + } + + if (pixbuf != NULL) { + gtk_window_set_icon (GTK_WINDOW (window), pixbuf); + g_object_unref (pixbuf); + } +} + /* set_displayed_location: * * Update the non-NautilusViewFrame objects that use the location's user-displayable @@ -290,6 +330,7 @@ set_displayed_location (NautilusWindow *window, const char *location) } update_title (window); + nautilus_window_update_icon (window); } static void @@ -501,6 +542,7 @@ viewed_file_changed_callback (NautilusFile *file, } update_title (window); + nautilus_window_update_icon (window); } } @@ -652,6 +694,7 @@ location_has_really_changed (NautilusWindow *window) free_location_change (window); update_title (window); + nautilus_window_update_icon (window); /* The whole window has been finished. Now show it, unless * we're still waiting for the saved positions from the @@ -1964,6 +2007,7 @@ title_changed_callback (NautilusViewFrame *view, g_assert (NAUTILUS_IS_WINDOW (window)); update_title (window); + nautilus_window_update_icon (window); } static void diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h index 5e1803c62..7bf03ca92 100644 --- a/src/nautilus-window-private.h +++ b/src/nautilus-window-private.h @@ -172,5 +172,6 @@ void nautilus_window_add_current_location_to_history_list (Nautil void nautilus_remove_from_history_list_no_notify (const char *location); GList * nautilus_get_history_list (void); void nautilus_window_bookmarks_preference_changed_callback (gpointer user_data); +void nautilus_window_update_icon (NautilusWindow *window); #endif /* NAUTILUS_WINDOW_PRIVATE_H */ diff --git a/src/nautilus-window.c b/src/nautilus-window.c index af87078b6..b0177d68e 100644 --- a/src/nautilus-window.c +++ b/src/nautilus-window.c @@ -154,6 +154,14 @@ set_up_default_icon_list (void) eel_g_list_free_deep_custom (icon_list, (GFunc) g_object_unref, NULL); } +static void +icons_changed_callback (GObject *factory, NautilusWindow *window) +{ + g_return_if_fail (NAUTILUS_IS_WINDOW (window)); + + nautilus_window_update_icon (window); +} + static void nautilus_window_instance_init (NautilusWindow *window) { @@ -179,6 +187,12 @@ nautilus_window_instance_init (NautilusWindow *window) nautilus_window_get_ui_container (window), NULL); + /* Register IconFactory callback to update the window border icon + * when the icon-theme is changed. + */ + g_signal_connect (nautilus_icon_factory_get (), "icons_changed", + G_CALLBACK (icons_changed_callback), window); + /* Create a separate component so when we remove the status * we don't loose the status bar */ @@ -1124,7 +1138,7 @@ create_view_as_menu_item (NautilusWindow *window, char *menu_label; menu_label = g_strdup (_(identifier->view_as_label)); - menu_item = gtk_menu_item_new_with_label (menu_label); + menu_item = gtk_menu_item_new_with_mnemonic (menu_label); g_free (menu_label); g_signal_connect_object (menu_item, "activate", -- cgit v1.2.1