From 2c7c4d9a513f8ddb80093cf7f2ed52095cc59b06 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Mon, 16 Aug 2010 19:08:11 +0200 Subject: [PATCH] GtkStyleContext: Return insertion position if not found when matching classes/regions --- gtk/gtkstylecontext.c | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index f944014ab2..41b607f34f 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -705,6 +705,7 @@ style_class_find (GArray *array, { gint min, max, mid; gboolean found = FALSE; + guint pos; if (position) *position = 0; @@ -719,23 +720,26 @@ style_class_find (GArray *array, { GQuark item; - mid = min + max / 2; + mid = (min + max) / 2; item = g_array_index (array, GQuark, mid); if (class_quark == item) - found = TRUE; + { + found = TRUE; + pos = mid; + } else if (class_quark > item) - min = mid = mid + 1; + min = pos = mid + 1; else - max = mid = mid - 1; + { + max = mid - 1; + pos = mid; + } } while (!found && min <= max); - if (mid < 0) - mid = 0; - if (position) - *position = mid; + *position = pos; return found; } @@ -747,6 +751,7 @@ region_find (GArray *array, { gint min, max, mid; gboolean found = FALSE; + guint pos; if (position) *position = 0; @@ -761,23 +766,26 @@ region_find (GArray *array, { GtkRegion *region; - mid = min + max / 2; + mid = (min + max) / 2; region = &g_array_index (array, GtkRegion, mid); if (region->class_quark == class_quark) - found = TRUE; + { + found = TRUE; + pos = mid; + } else if (region->class_quark > class_quark) - min = mid = mid + 1; + min = pos = mid + 1; else - max = mid = mid - 1; + { + max = mid - 1; + pos = mid; + } } while (!found && min <= max); - if (mid < 0) - mid = 0; - if (position) - *position = mid; + *position = pos; return found; }