summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Harper <jsh@eazel.com>2001-04-03 21:00:03 +0000
committerJohn Harper <jsh@src.gnome.org>2001-04-03 21:00:03 +0000
commitdbf3da8b83fa72999fbe3bc6564415cc9fa9a7ad (patch)
tree4faa5127f4bbf7c069411beeca92c94ed224ab87
parentf7ea58e25b70b3d675ad2d10a41892aa6bc12223 (diff)
downloadnautilus-dbf3da8b83fa72999fbe3bc6564415cc9fa9a7ad.tar.gz
reviewed by: Darin Adler <darin@eazel.com>
2001-04-03 John Harper <jsh@eazel.com> reviewed by: Darin Adler <darin@eazel.com> 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
-rw-r--r--ChangeLog20
-rw-r--r--libnautilus-extensions/nautilus-ctree.c6
-rw-r--r--libnautilus-extensions/nautilus-list.c53
-rw-r--r--libnautilus-extensions/nautilus-list.h5
-rw-r--r--libnautilus-private/nautilus-ctree.c6
-rw-r--r--libnautilus-private/nautilus-list.c53
-rw-r--r--libnautilus-private/nautilus-list.h5
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 <jsh@eazel.com>
+
+ reviewed by: Darin Adler <darin@eazel.com>
+
+ 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 <darin@eazel.com>
reviewed by: John Sullivan <sullivan@eazel.com>
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
- (&GTK_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
- (&GTK_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
- (&GTK_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
- (&GTK_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 */