X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-recpt-view.c;h=54e33c17dba6598521c914a8f65e2f37c9e804d9;hp=88d68e89d97e65187cc98a41269cdc055265db42;hb=a9a01aa613048aad970e0cc6d9cb03e119ddde5a;hpb=84c2681caafc791433135f704227111272e45203 diff --git a/src/widgets/modest-recpt-view.c b/src/widgets/modest-recpt-view.c index 88d68e8..54e33c1 100644 --- a/src/widgets/modest-recpt-view.c +++ b/src/widgets/modest-recpt-view.c @@ -36,6 +36,8 @@ #include #include +#define RECPT_VIEW_CLICK_AREA_THRESHOLD 32 + static GObjectClass *parent_class = NULL; /* signals */ @@ -123,20 +125,23 @@ button_release_event (GtkWidget *widget, if ((priv->button_pressed) && (event->type == GDK_BUTTON_RELEASE) && - (priv->pressed_x == event->x) && - (priv->pressed_y == event->y)) { + ((event->x >= priv->pressed_x - RECPT_VIEW_CLICK_AREA_THRESHOLD)&& + (event->x <= priv->pressed_x + RECPT_VIEW_CLICK_AREA_THRESHOLD)) && + ((event->y >= priv->pressed_y - RECPT_VIEW_CLICK_AREA_THRESHOLD)&& + (event->y <= priv->pressed_y + RECPT_VIEW_CLICK_AREA_THRESHOLD))) { priv->button_pressed = FALSE; if (event->button == 1) { gint buffer_x, buffer_y; int index; GtkTextIter iter; + gtk_widget_grab_focus (GTK_WIDGET (text_view)); gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view), GTK_TEXT_WINDOW_WIDGET, event->x, event->y, &buffer_x, &buffer_y); gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (text_view), &iter, buffer_x, buffer_y); index = gtk_text_iter_get_offset (&iter); if (!gtk_text_iter_is_end (&iter)) { - int selection_start, selection_end; + guint selection_start, selection_end; gboolean selected = FALSE; GtkTextIter start_iter, end_iter; GtkTextBuffer *buffer; @@ -153,23 +158,24 @@ button_release_event (GtkWidget *widget, gtk_text_buffer_get_end_iter (buffer, &end_iter); text = gtk_text_buffer_get_text (buffer, &start_iter, &end_iter, FALSE); - modest_text_utils_address_range_at_position (text, - index, - &selection_start, &selection_end); - /* TODO: now gtk label tries to select more than the label as usual, - * and we force it to recover the selected region for the defined area. - * It should be fixed (maybe preventing gtklabel to manage selections - * in parallel with us - */ - gtk_text_buffer_get_iter_at_offset (buffer, &start_iter, selection_start); - gtk_text_buffer_get_iter_at_offset (buffer, &end_iter, selection_end); - gtk_text_buffer_select_range (buffer, &start_iter, &end_iter); - - if (text) + /* text will not be NULL, but source code checkers should be satisfied */ + if (text) { + modest_text_utils_address_range_at_position (text, + index, + &selection_start, &selection_end); + /* TODO: now gtk label tries to select more than the label as usual, + * and we force it to recover the selected region for the defined area. + * It should be fixed (maybe preventing gtklabel to manage selections + * in parallel with us + */ + gtk_text_buffer_get_iter_at_offset (buffer, &start_iter, selection_start); + gtk_text_buffer_get_iter_at_offset (buffer, &end_iter, selection_end); + gtk_text_buffer_select_range (buffer, &start_iter, &end_iter); + g_free (text); - + } } - + if (selected) { gchar *selection;