Mercurial > pidgin
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); |