From 03dac6ab2fcccff40528024321512442606be549 Mon Sep 17 00:00:00 2001 From: Melvin Hadasht Date: Sun, 9 Dec 2001 20:44:24 +0000 Subject: [PATCH] fixed bug #490076 (hunted down by Alfons who implemented a workaround in 0.6.5claws65) --- ChangeLog.claws | 6 ++++++ configure.in | 2 +- src/textview.c | 46 ++++++++++++++++++++++++++-------------------- src/textview.h | 2 ++ 4 files changed, 35 insertions(+), 21 deletions(-) diff --git a/ChangeLog.claws b/ChangeLog.claws index 0cc3b92fe..bbb4aaad7 100644 --- a/ChangeLog.claws +++ b/ChangeLog.claws @@ -1,3 +1,9 @@ +2001-12-09 [melvin] 0.6.5claws70 + + * src/textview.[ch] + fixed bug #490076 (hunted down by Alfons who implemented + a workaround in 0.6.5claws65) + 2001-12-09 [christoph] 0.6.5claws69 * src/summaryview.c diff --git a/configure.in b/configure.in index fdea532dc..ccc76c384 100644 --- a/configure.in +++ b/configure.in @@ -8,7 +8,7 @@ MINOR_VERSION=6 MICRO_VERSION=5 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=claws69 +EXTRA_VERSION=claws70 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION dnl diff --git a/src/textview.c b/src/textview.c index 3af5cc4e3..53d8e0f37 100644 --- a/src/textview.c +++ b/src/textview.c @@ -119,7 +119,10 @@ static void textview_show_header (TextView *textview, 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); @@ -194,12 +197,18 @@ TextView *textview_create(void) 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); @@ -218,6 +227,7 @@ TextView *textview_create(void) textview->uri_list = NULL; textview->body_pos = 0; textview->cur_pos = 0; + textview->last_buttonpress = GDK_NOTHING; return textview; } @@ -1438,21 +1448,29 @@ static void textview_key_pressed(GtkWidget *widget, GdkEventKey *event, } } -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--; } @@ -1475,20 +1493,6 @@ static void textview_button_pressed(GtkWidget *widget, GdkEventButton *event, /* Add to address book - Match */ addressbook_add_contact( fromname, fromaddress, NULL ); - /* force press and release at (0, 0) to work around secondary - * selection claim */ - tmpev = *event; - tmpev.x_root -= tmpev.x; - tmpev.y_root -= tmpev.y; - tmpev.x = 0; - tmpev.y = 0; - tmpev.time = GDK_CURRENT_TIME; - gtk_widget_event(widget, (GdkEvent *)&tmpev); - - tmpev.type = GDK_BUTTON_RELEASE; - tmpev.time = GDK_CURRENT_TIME; - gtk_widget_event(widget, (GdkEvent *)&tmpev); - g_free(fromaddress); g_free(fromname); } else { @@ -1502,7 +1506,9 @@ static void textview_button_pressed(GtkWidget *widget, GdkEventButton *event, } } } - return TRUE; + if (event) + textview->last_buttonpress = event->type; + return FALSE; } static void textview_uri_list_remove_all(GSList *uri_list) diff --git a/src/textview.h b/src/textview.h index e3eccdf48..dca4d8587 100644 --- a/src/textview.h +++ b/src/textview.h @@ -54,6 +54,8 @@ struct _TextView gint prev_descent; MessageView *messageview; + + gint last_buttonpress; }; TextView *textview_create (void); -- 2.25.1