comparison 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
comparison
equal deleted inserted replaced
2654:edd8cc296a06 2655:c4ad36781d1b
294 struct url_widget { 294 struct url_widget {
295 gint x; 295 gint x;
296 gint y; 296 gint y;
297 gint width; 297 gint width;
298 gint height; 298 gint height;
299 GtkIMHtml *imhtml;
299 GtkIMHtmlBit *bit; 300 GtkIMHtmlBit *bit;
300 }; 301 };
301 302
302 static GtkLayoutClass *parent_class = NULL; 303 static GtkLayoutClass *parent_class = NULL;
303 304
1473 imhtml->tip_bit = NULL; 1474 imhtml->tip_bit = NULL;
1474 1475
1475 return TRUE; 1476 return TRUE;
1476 } 1477 }
1477 1478
1479 static void
1480 menu_open_url (GtkObject *object,
1481 gpointer data)
1482 {
1483 struct url_widget *uw = data;
1484
1485 gtk_signal_emit (GTK_OBJECT (uw->imhtml), signals [URL_CLICKED], uw->bit->url);
1486 }
1487
1488 static void
1489 menu_copy_link (GtkObject *object,
1490 gpointer data)
1491 {
1492 struct url_widget *uw = data;
1493 GtkIMHtml *imhtml = uw->imhtml;
1494
1495 if (imhtml->selected_text)
1496 g_string_free (imhtml->selected_text, TRUE);
1497
1498 gtk_imhtml_select_none (uw->imhtml);
1499
1500 imhtml->selection = TRUE;
1501 imhtml->selected_text = g_string_new (uw->bit->url);
1502
1503 gtk_selection_owner_set (GTK_WIDGET (imhtml), GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME);
1504 }
1505
1478 static gint 1506 static gint
1479 gtk_imhtml_button_press_event (GtkWidget *widget, 1507 gtk_imhtml_button_press_event (GtkWidget *widget,
1480 GdkEventButton *event) 1508 GdkEventButton *event)
1481 { 1509 {
1482 GtkIMHtml *imhtml = GTK_IMHTML (widget); 1510 GtkIMHtml *imhtml = GTK_IMHTML (widget);
1483 GtkAdjustment *vadj = GTK_LAYOUT (widget)->vadjustment; 1511 GtkAdjustment *vadj = GTK_LAYOUT (widget)->vadjustment;
1484 GtkAdjustment *hadj = GTK_LAYOUT (widget)->hadjustment; 1512 GtkAdjustment *hadj = GTK_LAYOUT (widget)->hadjustment;
1485 gint x, y; 1513 gint x, y;
1486 1514
1515 x = event->x + hadj->value;
1516 y = event->y + vadj->value;
1517
1487 if (event->button == 1) { 1518 if (event->button == 1) {
1488 x = event->x + hadj->value;
1489 y = event->y + vadj->value;
1490
1491 imhtml->sel_startx = x; 1519 imhtml->sel_startx = x;
1492 imhtml->sel_starty = y; 1520 imhtml->sel_starty = y;
1493 imhtml->selection = TRUE; 1521 imhtml->selection = TRUE;
1494 gtk_imhtml_select_none (imhtml); 1522 gtk_imhtml_select_none (imhtml);
1523 }
1524
1525 if (event->button == 3) {
1526 GList *urls = imhtml->urls;
1527 struct url_widget *uw;
1528
1529 while (urls) {
1530 uw = urls->data;
1531 if ((x > uw->x) && (x < uw->x + uw->width) &&
1532 (y > uw->y) && (y < uw->y + uw->height)) {
1533 GtkWidget *menu = gtk_menu_new ();
1534
1535 GtkWidget *button = gtk_menu_item_new_with_label ("Open URL");
1536 gtk_signal_connect (GTK_OBJECT (button), "activate",
1537 GTK_SIGNAL_FUNC (menu_open_url), uw);
1538 gtk_menu_append (GTK_MENU (menu), button);
1539 gtk_widget_show (button);
1540
1541 button = gtk_menu_item_new_with_label ("Copy Link Location");
1542 gtk_signal_connect (GTK_OBJECT (button), "activate",
1543 GTK_SIGNAL_FUNC (menu_copy_link), uw);
1544 gtk_menu_append (GTK_MENU (menu), button);
1545 gtk_widget_show (button);
1546
1547 gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
1548 3, event->time);
1549
1550 if (imhtml->tip_timer) {
1551 gtk_timeout_remove (imhtml->tip_timer);
1552 imhtml->tip_timer = 0;
1553 }
1554 if (imhtml->tip_window) {
1555 gtk_widget_destroy (imhtml->tip_window);
1556 imhtml->tip_window = NULL;
1557 }
1558 imhtml->tip_bit = NULL;
1559
1560 return TRUE;
1561 }
1562 urls = g_list_next (urls);
1563 }
1495 } 1564 }
1496 1565
1497 return TRUE; 1566 return TRUE;
1498 } 1567 }
1499 1568
2224 uw = g_new0 (struct url_widget, 1); 2293 uw = g_new0 (struct url_widget, 1);
2225 uw->x = imhtml->x; 2294 uw->x = imhtml->x;
2226 uw->y = imhtml->y; 2295 uw->y = imhtml->y;
2227 uw->width = width; 2296 uw->width = width;
2228 uw->height = imhtml->llheight; 2297 uw->height = imhtml->llheight;
2298 uw->imhtml = imhtml;
2229 uw->bit = bit; 2299 uw->bit = bit;
2230 imhtml->urls = g_list_append (imhtml->urls, uw); 2300 imhtml->urls = g_list_append (imhtml->urls, uw);
2231 } 2301 }
2232 2302
2233 bit->chunks = g_list_append (bit->chunks, li); 2303 bit->chunks = g_list_append (bit->chunks, li);
2256 uw = g_new0 (struct url_widget, 1); 2326 uw = g_new0 (struct url_widget, 1);
2257 uw->x = imhtml->x; 2327 uw->x = imhtml->x;
2258 uw->y = imhtml->y; 2328 uw->y = imhtml->y;
2259 uw->width = width; 2329 uw->width = width;
2260 uw->height = imhtml->llheight; 2330 uw->height = imhtml->llheight;
2331 uw->imhtml = imhtml;
2261 uw->bit = bit; 2332 uw->bit = bit;
2262 imhtml->urls = g_list_append (imhtml->urls, uw); 2333 imhtml->urls = g_list_append (imhtml->urls, uw);
2263 } 2334 }
2264 2335
2265 bit->chunks = g_list_append (bit->chunks, li); 2336 bit->chunks = g_list_append (bit->chunks, li);