static void textview_key_pressed (GtkWidget *widget,
GdkEventKey *event,
TextView *textview);
-static void textview_button_pressed (GtkWidget *widget,
+static gint textview_button_pressed (GtkWidget *widget,
+ GdkEventButton *event,
+ TextView *textview);
+static gint textview_button_released (GtkWidget *widget,
GdkEventButton *event,
TextView *textview);
gtk_signal_connect_after(GTK_OBJECT(text_sb), "button_press_event",
GTK_SIGNAL_FUNC(textview_button_pressed),
textview);
+ gtk_signal_connect_after(GTK_OBJECT(text_sb), "button_release_event",
+ GTK_SIGNAL_FUNC(textview_button_released),
+ textview);
gtk_signal_connect(GTK_OBJECT(text_mb), "key_press_event",
GTK_SIGNAL_FUNC(textview_key_pressed),
textview);
gtk_signal_connect_after(GTK_OBJECT(text_mb), "button_press_event",
GTK_SIGNAL_FUNC(textview_button_pressed),
textview);
+ gtk_signal_connect_after(GTK_OBJECT(text_mb), "button_release_event",
+ GTK_SIGNAL_FUNC(textview_button_released),
+ textview);
gtk_widget_show(scrolledwin_sb);
gtk_widget_show(scrolledwin_mb);
textview->uri_list = NULL;
textview->body_pos = 0;
textview->cur_pos = 0;
+ textview->last_buttonpress = GDK_NOTHING;
return textview;
}
GtkWidget *parent;
parent = textview->scrolledwin_mb->parent;
- gtk_editable_select_region
- (GTK_EDITABLE(textview->text_mb), 0, 0);
+ gtk_editable_claim_selection(GTK_EDITABLE(textview->text_mb),
+ FALSE, GDK_CURRENT_TIME);
gtk_container_remove(GTK_CONTAINER(parent),
textview->scrolledwin_mb);
gtk_container_add(GTK_CONTAINER(parent),
GtkWidget *parent;
parent = textview->scrolledwin_sb->parent;
- gtk_editable_select_region
- (GTK_EDITABLE(textview->text_sb), 0, 0);
+ gtk_editable_claim_selection(GTK_EDITABLE(textview->text_sb),
+ FALSE, GDK_CURRENT_TIME);
gtk_container_remove(GTK_CONTAINER(parent),
textview->scrolledwin_sb);
gtk_container_add(GTK_CONTAINER(parent),
}
}
-static void textview_button_pressed(GtkWidget *widget, GdkEventButton *event,
+static gint textview_button_pressed(GtkWidget *widget, GdkEventButton *event,
+ TextView *textview)
+{
+ if (event)
+ textview->last_buttonpress = event->type;
+ return FALSE;
+}
+
+static gint textview_button_released(GtkWidget *widget, GdkEventButton *event,
TextView *textview)
{
textview->cur_pos =
gtk_editable_get_position(GTK_EDITABLE(textview->text));
- if (event &&
- ((event->button == 1 && event->type == GDK_2BUTTON_PRESS)
+ if (event &&
+ ((event->button == 1 && textview->last_buttonpress == GDK_2BUTTON_PRESS)
|| event->button == 2 || event->button == 3)) {
GSList *cur;
/* double click seems to set the cursor after the current
* word. The cursor position needs fixing, otherwise the
* last word of a clickable zone will not work */
- if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) {
+ if (event->button == 1 && textview->last_buttonpress == GDK_2BUTTON_PRESS) {
textview->cur_pos--;
}
if (!g_strncasecmp(uri->uri, "mailto:", 7)) {
if (event->button == 3) {
gchar *fromname, *fromaddress;
+ GdkEventButton tmpev;
+
/* extract url */
fromaddress = g_strdup(uri->uri + 7);
/* Hiroyuki: please put this function in utils.c! */
fromname = procheader_get_fromname(fromaddress);
extract_address(fromaddress);
g_message("adding from textview %s <%s>", fromname, fromaddress);
- // Add to address book - Match
+ /* Add to address book - Match */
addressbook_add_contact( fromname, fromaddress, NULL );
+
g_free(fromaddress);
g_free(fromname);
} else {
}
}
}
+ if (event)
+ textview->last_buttonpress = event->type;
+ return FALSE;
}
static void textview_uri_list_remove_all(GSList *uri_list)