From dbf3da8b83fa72999fbe3bc6564415cc9fa9a7ad Mon Sep 17 00:00:00 2001 From: John Harper Date: Tue, 3 Apr 2001 21:00:03 +0000 Subject: reviewed by: Darin Adler 2001-04-03 John Harper reviewed by: Darin Adler Fixed bug 7967 (Tree view uses non-standard colors instead of gtk theme colors): * libnautilus-extensions/nautilus-list.c, libnautilus-extensions/nautilus-list.h (nautilus_list_set_alternate_row_colors, nautilus_list_set_background_color_offsets): new functions. They give some control over how the list background is drawn. The offsets function takes two offsets into the GtkStyle structure (which should point to GdkColor structures) * libnautilus-extensions/nautilus-ctree.c (nautilus_ctree_init): call the above two functions with suitable values to make the tree look like it used to, before being derived from the NautilusList widget --- ChangeLog | 20 +++++++++++++ libnautilus-extensions/nautilus-ctree.c | 6 ++++ libnautilus-extensions/nautilus-list.c | 53 ++++++++++++++++++++++++++++----- libnautilus-extensions/nautilus-list.h | 5 ++++ libnautilus-private/nautilus-ctree.c | 6 ++++ libnautilus-private/nautilus-list.c | 53 ++++++++++++++++++++++++++++----- libnautilus-private/nautilus-list.h | 5 ++++ 7 files changed, 134 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index a395b4b4a..1261963be 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2001-04-03 John Harper + + reviewed by: Darin Adler + + Fixed bug 7967 (Tree view uses non-standard colors instead of + gtk theme colors): + + * libnautilus-extensions/nautilus-list.c, + libnautilus-extensions/nautilus-list.h + (nautilus_list_set_alternate_row_colors, + nautilus_list_set_background_color_offsets): new functions. + They give some control over how the list background is drawn. + The offsets function takes two offsets into the GtkStyle + structure (which should point to GdkColor structures) + + * libnautilus-extensions/nautilus-ctree.c + (nautilus_ctree_init): call the above two functions with + suitable values to make the tree look like it used to, before + being derived from the NautilusList widget + 2001-04-03 Darin Adler reviewed by: John Sullivan diff --git a/libnautilus-extensions/nautilus-ctree.c b/libnautilus-extensions/nautilus-ctree.c index 4337c8a0a..3c64dfef7 100644 --- a/libnautilus-extensions/nautilus-ctree.c +++ b/libnautilus-extensions/nautilus-ctree.c @@ -607,6 +607,12 @@ nautilus_ctree_init (NautilusCTree *ctree) clist->button_actions[0] |= NAUTILUS_BUTTON_EXPANDS; + /* Some random GNOME luser wants trees to look `normal' */ + nautilus_list_set_alternate_row_colors (NAUTILUS_LIST (ctree), FALSE); + nautilus_list_set_background_color_offsets (NAUTILUS_LIST (ctree), + G_STRUCT_OFFSET (GtkStyle, + base[GTK_STATE_NORMAL]), -1); + gtk_signal_connect (GTK_OBJECT (ctree), "event", GTK_SIGNAL_FUNC (nautilus_ctree_event), ctree); } diff --git a/libnautilus-extensions/nautilus-list.c b/libnautilus-extensions/nautilus-list.c index 478eccbb8..34df7aa95 100644 --- a/libnautilus-extensions/nautilus-list.c +++ b/libnautilus-extensions/nautilus-list.c @@ -137,6 +137,9 @@ struct NautilusListDetails guint32 selection_light_color_rgb; guint32 selection_medium_color_rgb; guint32 selection_main_color_rgb; + + gboolean alternate_row_colors; + gulong background_color_offset, selection_color_offset; }; /* maximum amount of milliseconds the mouse button is allowed to stay down and still be considered a click */ @@ -596,7 +599,11 @@ nautilus_list_initialize (NautilusList *list) list->details->anchor_row = -1; list->details->drag_prelight_row = NULL; - + + list->details->alternate_row_colors = TRUE; + list->details->background_color_offset = G_STRUCT_OFFSET (GtkStyle, bg[GTK_STATE_NORMAL]); + list->details->selection_color_offset = G_STRUCT_OFFSET (GtkStyle, bg[GTK_STATE_SELECTED]); + /* GtkCList does not specify pointer motion by default */ gtk_widget_add_events (GTK_WIDGET (list), GDK_POINTER_MOTION_MASK); @@ -1563,9 +1570,11 @@ nautilus_list_setup_style_colors (NautilusList *list) gdk_rgb_init(); style_background_color = nautilus_gdk_color_to_rgb - (>K_WIDGET (list)->style->bg [GTK_STATE_NORMAL]); + (G_STRUCT_MEMBER_P (GTK_WIDGET (list)->style, + list->details->background_color_offset)); selection_background_color = nautilus_gdk_color_to_rgb - (>K_WIDGET (list)->style->bg [GTK_STATE_SELECTED]); + (G_STRUCT_MEMBER_P (GTK_WIDGET (list)->style, + list->details->selection_color_offset)); list->details->cell_lighter_background_rgb = nautilus_gdk_set_shifted_foreground_gc_color (list->details->cell_lighter_background, @@ -1996,6 +2005,11 @@ nautilus_list_get_cell_style (NautilusList *list, NautilusCListRow *row, int state, int row_index, int column_index, GtkStyle **style, GdkGC **fg_gc, GdkGC **bg_gc, guint32 *bg_rgb) { + gboolean lighter_row; + + lighter_row = (list->details->alternate_row_colors + ? (row_index % 2) != 0 : TRUE); + if (style) { *style = GTK_WIDGET (list)->style; } @@ -2029,13 +2043,13 @@ nautilus_list_get_cell_style (NautilusList *list, NautilusCListRow *row, if (bg_gc != NULL) { if (column_index == selected_column_index (list)) { - if ((row_index % 2) != 0) { + if (lighter_row) { *bg_gc = list->details->cell_selected_lighter_background; } else { *bg_gc = list->details->cell_selected_darker_background; } } else { - if ((row_index % 2) != 0) { + if (lighter_row) { *bg_gc = list->details->cell_lighter_background; } else { *bg_gc = list->details->cell_darker_background; @@ -2044,13 +2058,13 @@ nautilus_list_get_cell_style (NautilusList *list, NautilusCListRow *row, } if (bg_rgb != NULL) { if (column_index == selected_column_index (list)) { - if ((row_index % 2) != 0) { + if (lighter_row) { *bg_rgb = list->details->cell_selected_lighter_background_rgb; } else { *bg_rgb = list->details->cell_selected_darker_background_rgb; } } else { - if ((row_index % 2) != 0) { + if (lighter_row) { *bg_rgb = list->details->cell_lighter_background_rgb; } else { *bg_rgb = list->details->cell_darker_background_rgb; @@ -2059,6 +2073,31 @@ nautilus_list_get_cell_style (NautilusList *list, NautilusCListRow *row, } } +void +nautilus_list_set_alternate_row_colors (NautilusList *list, + gboolean state) +{ + list->details->alternate_row_colors = state; +} + +void +nautilus_list_set_background_color_offsets (NautilusList *list, + long background_offset, + long selection_offset) +{ + g_return_if_fail (background_offset < 0 + || (gulong) background_offset < sizeof (GtkStyle)); + g_return_if_fail (selection_offset < 0 + || (gulong) selection_offset < sizeof (GtkStyle)); + + if (background_offset >= 0) { + list->details->background_color_offset = background_offset; + } + if (selection_offset >= 0) { + list->details->selection_color_offset = selection_offset; + } +} + int nautilus_list_draw_cell_pixbuf (NautilusList *list, GdkWindow *window, GdkRectangle *clip_rectangle, diff --git a/libnautilus-extensions/nautilus-list.h b/libnautilus-extensions/nautilus-list.h index 31dc66bab..b9d43d588 100644 --- a/libnautilus-extensions/nautilus-list.h +++ b/libnautilus-extensions/nautilus-list.h @@ -206,6 +206,11 @@ void nautilus_list_get_cell_style (NautilusList *list, GdkGC **fg_gc, GdkGC **bg_gc, guint32 *bg_rgb); +void nautilus_list_set_alternate_row_colors (NautilusList *list, + gboolean state); +void nautilus_list_set_background_color_offsets (NautilusList *list, + long background_offset, + long selection_offset); #endif /* NAUTILUS_LIST_H */ diff --git a/libnautilus-private/nautilus-ctree.c b/libnautilus-private/nautilus-ctree.c index 4337c8a0a..3c64dfef7 100644 --- a/libnautilus-private/nautilus-ctree.c +++ b/libnautilus-private/nautilus-ctree.c @@ -607,6 +607,12 @@ nautilus_ctree_init (NautilusCTree *ctree) clist->button_actions[0] |= NAUTILUS_BUTTON_EXPANDS; + /* Some random GNOME luser wants trees to look `normal' */ + nautilus_list_set_alternate_row_colors (NAUTILUS_LIST (ctree), FALSE); + nautilus_list_set_background_color_offsets (NAUTILUS_LIST (ctree), + G_STRUCT_OFFSET (GtkStyle, + base[GTK_STATE_NORMAL]), -1); + gtk_signal_connect (GTK_OBJECT (ctree), "event", GTK_SIGNAL_FUNC (nautilus_ctree_event), ctree); } diff --git a/libnautilus-private/nautilus-list.c b/libnautilus-private/nautilus-list.c index 478eccbb8..34df7aa95 100644 --- a/libnautilus-private/nautilus-list.c +++ b/libnautilus-private/nautilus-list.c @@ -137,6 +137,9 @@ struct NautilusListDetails guint32 selection_light_color_rgb; guint32 selection_medium_color_rgb; guint32 selection_main_color_rgb; + + gboolean alternate_row_colors; + gulong background_color_offset, selection_color_offset; }; /* maximum amount of milliseconds the mouse button is allowed to stay down and still be considered a click */ @@ -596,7 +599,11 @@ nautilus_list_initialize (NautilusList *list) list->details->anchor_row = -1; list->details->drag_prelight_row = NULL; - + + list->details->alternate_row_colors = TRUE; + list->details->background_color_offset = G_STRUCT_OFFSET (GtkStyle, bg[GTK_STATE_NORMAL]); + list->details->selection_color_offset = G_STRUCT_OFFSET (GtkStyle, bg[GTK_STATE_SELECTED]); + /* GtkCList does not specify pointer motion by default */ gtk_widget_add_events (GTK_WIDGET (list), GDK_POINTER_MOTION_MASK); @@ -1563,9 +1570,11 @@ nautilus_list_setup_style_colors (NautilusList *list) gdk_rgb_init(); style_background_color = nautilus_gdk_color_to_rgb - (>K_WIDGET (list)->style->bg [GTK_STATE_NORMAL]); + (G_STRUCT_MEMBER_P (GTK_WIDGET (list)->style, + list->details->background_color_offset)); selection_background_color = nautilus_gdk_color_to_rgb - (>K_WIDGET (list)->style->bg [GTK_STATE_SELECTED]); + (G_STRUCT_MEMBER_P (GTK_WIDGET (list)->style, + list->details->selection_color_offset)); list->details->cell_lighter_background_rgb = nautilus_gdk_set_shifted_foreground_gc_color (list->details->cell_lighter_background, @@ -1996,6 +2005,11 @@ nautilus_list_get_cell_style (NautilusList *list, NautilusCListRow *row, int state, int row_index, int column_index, GtkStyle **style, GdkGC **fg_gc, GdkGC **bg_gc, guint32 *bg_rgb) { + gboolean lighter_row; + + lighter_row = (list->details->alternate_row_colors + ? (row_index % 2) != 0 : TRUE); + if (style) { *style = GTK_WIDGET (list)->style; } @@ -2029,13 +2043,13 @@ nautilus_list_get_cell_style (NautilusList *list, NautilusCListRow *row, if (bg_gc != NULL) { if (column_index == selected_column_index (list)) { - if ((row_index % 2) != 0) { + if (lighter_row) { *bg_gc = list->details->cell_selected_lighter_background; } else { *bg_gc = list->details->cell_selected_darker_background; } } else { - if ((row_index % 2) != 0) { + if (lighter_row) { *bg_gc = list->details->cell_lighter_background; } else { *bg_gc = list->details->cell_darker_background; @@ -2044,13 +2058,13 @@ nautilus_list_get_cell_style (NautilusList *list, NautilusCListRow *row, } if (bg_rgb != NULL) { if (column_index == selected_column_index (list)) { - if ((row_index % 2) != 0) { + if (lighter_row) { *bg_rgb = list->details->cell_selected_lighter_background_rgb; } else { *bg_rgb = list->details->cell_selected_darker_background_rgb; } } else { - if ((row_index % 2) != 0) { + if (lighter_row) { *bg_rgb = list->details->cell_lighter_background_rgb; } else { *bg_rgb = list->details->cell_darker_background_rgb; @@ -2059,6 +2073,31 @@ nautilus_list_get_cell_style (NautilusList *list, NautilusCListRow *row, } } +void +nautilus_list_set_alternate_row_colors (NautilusList *list, + gboolean state) +{ + list->details->alternate_row_colors = state; +} + +void +nautilus_list_set_background_color_offsets (NautilusList *list, + long background_offset, + long selection_offset) +{ + g_return_if_fail (background_offset < 0 + || (gulong) background_offset < sizeof (GtkStyle)); + g_return_if_fail (selection_offset < 0 + || (gulong) selection_offset < sizeof (GtkStyle)); + + if (background_offset >= 0) { + list->details->background_color_offset = background_offset; + } + if (selection_offset >= 0) { + list->details->selection_color_offset = selection_offset; + } +} + int nautilus_list_draw_cell_pixbuf (NautilusList *list, GdkWindow *window, GdkRectangle *clip_rectangle, diff --git a/libnautilus-private/nautilus-list.h b/libnautilus-private/nautilus-list.h index 31dc66bab..b9d43d588 100644 --- a/libnautilus-private/nautilus-list.h +++ b/libnautilus-private/nautilus-list.h @@ -206,6 +206,11 @@ void nautilus_list_get_cell_style (NautilusList *list, GdkGC **fg_gc, GdkGC **bg_gc, guint32 *bg_rgb); +void nautilus_list_set_alternate_row_colors (NautilusList *list, + gboolean state); +void nautilus_list_set_background_color_offsets (NautilusList *list, + long background_offset, + long selection_offset); #endif /* NAUTILUS_LIST_H */ -- cgit v1.2.1