second cumulative gtk2 patch
[claws.git] / src / gtk / gtkstext.c
index 1e08a30932bf9dddeec69eaf272e920ae904ac52..52b2ad8aec876580444eda558dbaabfdf6a13bfe 100644 (file)
@@ -487,7 +487,7 @@ static void gtk_stext_show_props (GtkSText* test,
 #define TEXT_SHOW_ADJ(text,adj,msg)
 #endif
 
-#define AHX_DEBUG
+/* #define AHX_DEBUG */
 #if defined(AHX_DEBUG)
 #      define XDEBUG(args) g_message args
 #else
@@ -4387,7 +4387,9 @@ static gint forward_display_row_fetcher(GtkSText *text,
                                __FILE__, __LINE__, data->start, data->end, lp->start.index, lp->end.index) );
                data->lp = *lp;
                data->completed = TRUE;
+#if defined(AHX_DEBUG)         
                print_line(text, lp->start.index, lp->end.index);
+#endif         
                return TRUE;
        }
        else if (range_intersect(data->start, data->end, lp->start.index, lp->end.index)) {
@@ -5553,9 +5555,12 @@ draw_line (GtkSText* text,
            pixels_remaining -= running_offset;
          
          space_width = MARK_CURRENT_TEXT_FONT(text, &mark)->char_widths[' '];
-         
-         spaces_avail = pixels_remaining / space_width;
-         spaces_avail = MIN (spaces_avail, tab_mark.to_next_tab);
+         if (space_width > 0) {
+           spaces_avail = pixels_remaining / space_width;
+           spaces_avail = MIN (spaces_avail, tab_mark.to_next_tab);
+         } else {
+           spaces_avail = 0;
+         }
 
          draw_bg_rect (text, &mark, running_offset, pixel_start_height,
                        spaces_avail * space_width, LINE_HEIGHT (*lp), TRUE);
@@ -6231,6 +6236,34 @@ guint gtk_stext_str_compare(GtkSText *text, guint start_pos, guint text_len,
        return result ? len : 0;
 }
 
+gint gtkut_stext_find(GtkSText *text, guint start_pos, const gchar *str,
+                     gboolean case_sens)
+{
+       gint pos;
+       wchar_t *wcs;
+       gint len;
+       gint text_len;
+       gint found_pos = -1;
+
+       wcs = strdup_mbstowcs(str);
+       g_return_val_if_fail(wcs != NULL, -1);
+       len = wcslen(wcs);
+       text_len = gtk_stext_get_length(text);
+
+       for (pos = start_pos; pos < text_len; pos++) {
+               if (text_len - pos < len)
+                       break;
+               if (gtk_stext_match_string(text, pos, wcs, len, case_sens)
+                   == TRUE) {
+                       found_pos = pos;
+                       break;
+               }
+       }
+
+       g_free(wcs);
+       return found_pos;
+}
+
 gboolean gtk_stext_is_uri_string(GtkSText *text,
                                   guint start_pos, guint text_len)
 {
@@ -6243,7 +6276,7 @@ gboolean gtk_stext_is_uri_string(GtkSText *text,
        return FALSE;
 }
 
-void gtk_stext_clear(GtkSText *text)
+void gtkut_stext_clear(GtkSText *text)
 {
        gtk_stext_freeze(text);
        gtk_stext_set_point(text, 0);