talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit ed7728c6de788a15befb8f0bbf4531a4f36d2e7a
parent 0eb623897eb20efb61fd2de03a8bab3818066dba
Author: Colin Leroy <colin@colino.net>
Date:   Tue, 25 Oct 2011 19:28:04 +0000

2011-10-25 [colin]	3.7.10cvs52

	* src/gtk/gtkcmclist.c
	* src/gtk/gtkcmctree.c
		Fix focus things.

Diffstat:
MChangeLog | 6++++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/gtk/gtkcmclist.c | 88++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/gtk/gtkcmctree.c | 37++++++++++++++++++++++++++-----------
5 files changed, 78 insertions(+), 56 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,9 @@ +2011-10-25 [colin] 3.7.10cvs52 + + * src/gtk/gtkcmclist.c + * src/gtk/gtkcmctree.c + Fix focus things. + 2011-10-25 [colin] 3.7.10cvs51 * src/stock_pixmap.c diff --git a/PATCHSETS b/PATCHSETS @@ -4255,3 +4255,4 @@ ( cvs diff -u -r 1.2.2.35 -r 1.2.2.36 src/gtk/colorlabel.c; cvs diff -u -r 1.1.2.20 -r 1.1.2.21 src/gtk/gtkcmclist.c; ) > 3.7.10cvs49.patchset ( cvs diff -u -r 1.382.2.587 -r 1.382.2.588 src/compose.c; cvs diff -u -r 1.94.2.220 -r 1.94.2.221 src/messageview.c; cvs diff -u -r 1.150.2.118 -r 1.150.2.119 src/procmsg.c; cvs diff -u -r 1.60.2.56 -r 1.60.2.57 src/procmsg.h; ) > 3.7.10cvs50.patchset ( cvs diff -u -r 1.25.2.71 -r 1.25.2.72 src/stock_pixmap.c; ) > 3.7.10cvs51.patchset +( cvs diff -u -r 1.1.2.21 -r 1.1.2.22 src/gtk/gtkcmclist.c; cvs diff -u -r 1.1.2.22 -r 1.1.2.23 src/gtk/gtkcmctree.c; ) > 3.7.10cvs52.patchset diff --git a/configure.ac b/configure.ac @@ -12,7 +12,7 @@ MINOR_VERSION=7 MICRO_VERSION=10 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=51 +EXTRA_VERSION=52 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/gtk/gtkcmclist.c b/src/gtk/gtkcmclist.c @@ -5861,16 +5861,16 @@ draw_row (GtkCMCList *clist, gtk_widget_get_can_focus (widget) && gtk_widget_has_focus(widget)) { if (!area) { - cairo_rectangle(cr, row_rectangle.x + 1, row_rectangle.y, - row_rectangle.width - 1, row_rectangle.height); + cairo_rectangle(cr, row_rectangle.x, row_rectangle.y, + row_rectangle.width + 1, row_rectangle.height); gdk_cairo_set_source_color(cr, &style->fg[GTK_STATE_NORMAL]); cairo_stroke(cr); } else if (gdk_rectangle_intersect (area, &row_rectangle, &intersect_rectangle)) { - cairo_rectangle(cr, row_rectangle.x + 1, row_rectangle.y, - row_rectangle.width - 1, row_rectangle.height); + cairo_rectangle(cr, row_rectangle.x, row_rectangle.y, + row_rectangle.width + 1, row_rectangle.height); gdk_cairo_set_source_color(cr, &style->fg[GTK_STATE_NORMAL]); cairo_stroke(cr); } @@ -5929,11 +5929,19 @@ draw_rows (GtkCMCList *clist, if (!area) { int w, h, y; - gdk_drawable_get_size (GDK_DRAWABLE (clist->clist_window), &w, &h); + cairo_t *cr; +#if GTK_CHECK_VERSION(2,24,0) + w = gdk_window_get_width(clist->clist_window); + h = gdk_window_get_height(clist->clist_window); +#else + gdk_drawable_get_size(clist->clist_window, &w, &h); +#endif + cr = gdk_cairo_create(clist->clist_window); y = ROW_TOP_YPIXEL (clist, i); - gdk_window_clear_area (clist->clist_window, - 0, y, - w, h - y); + gdk_cairo_set_source_color(cr, &gtk_widget_get_style(GTK_WIDGET(clist))->base[GTK_STATE_NORMAL]); + cairo_rectangle(cr, 0, y, w, h - y); + cairo_fill(cr); + cairo_destroy(cr); } } @@ -6239,18 +6247,19 @@ hadjustment_value_changed (GtkAdjustment *adjustment, if (gtk_widget_is_drawable (GTK_WIDGET(clist))) { GtkWidget *focus_child = gtk_container_get_focus_child (container); + + gdk_window_scroll (clist->clist_window, dx, 0); + gdk_window_process_updates (clist->clist_window, FALSE); + if (gtk_widget_get_can_focus(GTK_WIDGET(clist)) && gtk_widget_has_focus(GTK_WIDGET(clist)) && !focus_child && GTK_CMCLIST_ADD_MODE(clist)) { y = ROW_TOP_YPIXEL (clist, clist->focus_row); - cairo_rectangle(cr, 0, y, clist->clist_window_width - 1, - clist->row_height - 1); + cairo_rectangle(cr, 0, y, clist->clist_window_width + 1, + clist->row_height); cairo_stroke(cr); } - - gdk_window_scroll (clist->clist_window, dx, 0); - gdk_window_process_updates (clist->clist_window, FALSE); if (gtk_widget_get_can_focus(GTK_WIDGET(clist)) && gtk_widget_has_focus(GTK_WIDGET(clist)) && @@ -6265,35 +6274,11 @@ hadjustment_value_changed (GtkAdjustment *adjustment, draw_rows (clist, &area); clist->focus_row = focus_row; - cairo_rectangle(cr, 0, y, clist->clist_window_width - 1, - clist->row_height - 1); + cairo_rectangle(cr, 0, y, clist->clist_window_width + 1, + clist->row_height); cairo_stroke(cr); return; } - else if (ABS(dx) < clist->clist_window_width - 1) - { - gint x0; - gint x1; - - if (dx > 0) - { - x0 = clist->clist_window_width - 1; - x1 = dx; - } - else - { - x0 = 0; - x1 = clist->clist_window_width - 1 + dx; - } - - y = ROW_TOP_YPIXEL (clist, clist->focus_row); - cairo_move_to(cr, x0, y + 1); - cairo_line_to(cr, x0, y + clist->row_height - 2); - cairo_stroke(cr); - cairo_move_to(cr, x1, y + 1); - cairo_line_to(cr, x1, y + clist->row_height - 2); - cairo_stroke(cr); - } } } cairo_destroy(cr); @@ -6556,8 +6541,8 @@ gtk_cmclist_draw_focus (GtkWidget *widget) cairo_dash_from_add_mode(clist, cr); cairo_set_line_width(cr, 1.0); cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); - cairo_rectangle(cr, 1, ROW_TOP_YPIXEL(clist, clist->focus_row), - clist->clist_window_width - 1, + cairo_rectangle(cr, 0, ROW_TOP_YPIXEL(clist, clist->focus_row), + clist->clist_window_width + 1, clist->row_height); cairo_stroke(cr); cairo_destroy(cr); @@ -6568,17 +6553,32 @@ static void gtk_cmclist_undraw_focus (GtkWidget *widget) { GtkCMCList *clist; - + int row; cm_return_if_fail (GTK_IS_CMCLIST (widget)); + clist = GTK_CMCLIST(widget); + + if (clist->focus_row < 0) + return; + if (!gtk_widget_is_drawable (widget) || !gtk_widget_get_can_focus (widget)) return; clist = GTK_CMCLIST (widget); if (clist->focus_row >= 0) { - GTK_CMCLIST_GET_CLASS(clist)->draw_row(clist, NULL, clist->focus_row, - ROW_ELEMENT (clist, clist->focus_row)->data); + cairo_t *cr = gdk_cairo_create(clist->clist_window); + cairo_set_line_width(cr, 1.0); + gdk_cairo_set_source_color(cr, &gtk_widget_get_style(widget)->base[GTK_STATE_NORMAL]); + cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); + cairo_rectangle(cr, 0, ROW_TOP_YPIXEL(clist, clist->focus_row), + clist->clist_window_width + 1, + clist->row_height); + cairo_stroke(cr); + cairo_destroy(cr); } + + row = clist->focus_row; + GTK_CMCLIST_GET_CLASS(GTK_CMCLIST(widget))->draw_row(clist, NULL, row, ROW_ELEMENT (clist, row)->data); } static gint diff --git a/src/gtk/gtkcmctree.c b/src/gtk/gtkcmctree.c @@ -638,7 +638,7 @@ draw_row (GtkCMCList *clist, static GdkColor greybg={0, 0, 0, 0}; static gboolean color_change = TRUE; cairo_t *cr; - GdkColor *fgcolor, *bgcolor, *focuscolor; + GdkColor *fgcolor, *bgcolor; cm_return_if_fail (clist != NULL); widget = GTK_WIDGET (clist); @@ -700,10 +700,8 @@ draw_row (GtkCMCList *clist, if (prefs_common.use_stripes_everywhere && GTK_SCTREE(ctree)->show_stripes && color_change && row % 2) { bgcolor = &greybg; - focuscolor = &greybg; } else { bgcolor = &style->base[GTK_STATE_NORMAL]; - focuscolor = &style->base[GTK_STATE_NORMAL]; } state = clist_row->state; @@ -716,7 +714,7 @@ draw_row (GtkCMCList *clist, crect = &intersect_rectangle; if (gdk_rectangle_intersect (area, &cell_rectangle, crect)) { - gdk_cairo_rectangle(cr, crect); + gdk_cairo_rectangle(cr, &cell_rectangle); gdk_cairo_set_source_color(cr, &style->base[GTK_STATE_NORMAL]); cairo_fill(cr); } @@ -726,7 +724,7 @@ draw_row (GtkCMCList *clist, rect = &clip_rectangle; crect = &cell_rectangle; - gdk_cairo_rectangle(cr, crect); + gdk_cairo_rectangle(cr, &cell_rectangle); gdk_cairo_set_source_color(cr, &style->base[GTK_STATE_NORMAL]); cairo_fill(cr); } @@ -780,12 +778,6 @@ draw_row (GtkCMCList *clist, pixbuf_width = 0; height = 0; - gdk_cairo_rectangle(cr, &cell_rectangle); - if (state == GTK_STATE_NORMAL) - gdk_cairo_set_source_color(cr, bgcolor); - else - gdk_cairo_set_source_color(cr, &style->base[state]); - cairo_fill(cr); if (area && !gdk_rectangle_intersect (area, &cell_rectangle, &intersect_rectangle)) { @@ -794,6 +786,13 @@ draw_row (GtkCMCList *clist, } else { + gdk_cairo_rectangle(cr, &cell_rectangle); + if (state == GTK_STATE_NORMAL) + gdk_cairo_set_source_color(cr, bgcolor); + else + gdk_cairo_set_source_color(cr, &style->base[state]); + cairo_fill(cr); + layout = create_cell_layout (clist, clist_row, i); if (layout) { @@ -954,6 +953,22 @@ draw_row (GtkCMCList *clist, g_object_unref (G_OBJECT (layout)); } } + /* draw focus rectangle */ + if (clist->focus_row == row && + gtk_widget_get_can_focus (widget) && gtk_widget_has_focus (widget)) + { + if (!area || gdk_rectangle_intersect (area, &row_rectangle, + &intersect_rectangle)) + { + cairo_set_line_width(cr, 1.0); + cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); + gdk_cairo_set_source_color(cr, &style->fg[GTK_STATE_NORMAL]); + cairo_rectangle(cr, row_rectangle.x, row_rectangle.y, + row_rectangle.width + 1, + row_rectangle.height); + cairo_stroke(cr); + } + } cairo_destroy(cr); }