diff src/gtkimhtml.c @ 2655:c4ad36781d1b

[gaim-migrate @ 2668] it's 10:50 committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Thu, 01 Nov 2001 18:50:39 +0000
parents 733471f39ac9
children ffa58bbe595d
line wrap: on
line diff
--- a/src/gtkimhtml.c	Thu Nov 01 17:34:41 2001 +0000
+++ b/src/gtkimhtml.c	Thu Nov 01 18:50:39 2001 +0000
@@ -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;
 
+	x = event->x + hadj->value;
+	y = event->y + vadj->value;
+
 	if (event->button == 1) {
-		x = event->x + hadj->value;
-		y = event->y + vadj->value;
-
 		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);
 	}