From: Eric W. <war...@us...> - 2001-11-01 18:50:43
|
Update of /cvsroot/gaim/gaim/src In directory usw-pr-cvs1:/tmp/cvs-serv9565/src Modified Files: gtkimhtml.c Log Message: it's 10:50 Index: gtkimhtml.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/gtkimhtml.c,v retrieving revision 1.63 retrieving revision 1.64 diff -u -d -r1.63 -r1.64 --- gtkimhtml.c 2001/10/26 23:07:08 1.63 +++ gtkimhtml.c 2001/11/01 18:50:39 1.64 @@ -296,6 +296,7 @@ gint y; gint width; gint height; + GtkIMHtml *imhtml; GtkIMHtmlBit *bit; }; @@ -1475,6 +1476,33 @@ return TRUE; } +static void +menu_open_url (GtkObject *object, + gpointer data) +{ + struct url_widget *uw = data; + + gtk_signal_emit (GTK_OBJECT (uw->imhtml), signals [URL_CLICKED], uw->bit->url); +} + +static void +menu_copy_link (GtkObject *object, + gpointer data) +{ + struct url_widget *uw = data; + GtkIMHtml *imhtml = uw->imhtml; + + if (imhtml->selected_text) + g_string_free (imhtml->selected_text, TRUE); + + gtk_imhtml_select_none (uw->imhtml); + + imhtml->selection = TRUE; + imhtml->selected_text = g_string_new (uw->bit->url); + + gtk_selection_owner_set (GTK_WIDGET (imhtml), GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME); +} + static gint gtk_imhtml_button_press_event (GtkWidget *widget, GdkEventButton *event) @@ -1484,16 +1512,57 @@ GtkAdjustment *hadj = GTK_LAYOUT (widget)->hadjustment; gint x, y; - if (event->button == 1) { - x = event->x + hadj->value; - y = event->y + vadj->value; + x = event->x + hadj->value; + y = event->y + vadj->value; + if (event->button == 1) { imhtml->sel_startx = x; imhtml->sel_starty = y; imhtml->selection = TRUE; gtk_imhtml_select_none (imhtml); } + if (event->button == 3) { + GList *urls = imhtml->urls; + struct url_widget *uw; + + while (urls) { + uw = urls->data; + if ((x > uw->x) && (x < uw->x + uw->width) && + (y > uw->y) && (y < uw->y + uw->height)) { + GtkWidget *menu = gtk_menu_new (); + + GtkWidget *button = gtk_menu_item_new_with_label ("Open URL"); + gtk_signal_connect (GTK_OBJECT (button), "activate", + GTK_SIGNAL_FUNC (menu_open_url), uw); + gtk_menu_append (GTK_MENU (menu), button); + gtk_widget_show (button); + + button = gtk_menu_item_new_with_label ("Copy Link Location"); + gtk_signal_connect (GTK_OBJECT (button), "activate", + GTK_SIGNAL_FUNC (menu_copy_link), uw); + gtk_menu_append (GTK_MENU (menu), button); + gtk_widget_show (button); + + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, + 3, event->time); + + if (imhtml->tip_timer) { + gtk_timeout_remove (imhtml->tip_timer); + imhtml->tip_timer = 0; + } + if (imhtml->tip_window) { + gtk_widget_destroy (imhtml->tip_window); + imhtml->tip_window = NULL; + } + imhtml->tip_bit = NULL; + + return TRUE; + } + urls = g_list_next (urls); + } + } + return TRUE; } @@ -2226,6 +2295,7 @@ uw->y = imhtml->y; uw->width = width; uw->height = imhtml->llheight; + uw->imhtml = imhtml; uw->bit = bit; imhtml->urls = g_list_append (imhtml->urls, uw); } @@ -2258,6 +2328,7 @@ uw->y = imhtml->y; uw->width = width; uw->height = imhtml->llheight; + uw->imhtml = imhtml; uw->bit = bit; imhtml->urls = g_list_append (imhtml->urls, uw); } |