comparison src/gtkimhtml.c @ 7807:317f43c8287c

[gaim-migrate @ 8454] It's getting better all the ti-ee-ime. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Mon, 08 Dec 2003 06:00:53 +0000
parents 9db4ec5e6bca
children 4707d8436806
comparison
equal deleted inserted replaced
7806:c86f075b269a 7807:317f43c8287c
417 { 417 {
418 char *text; 418 char *text;
419 guint16 c; 419 guint16 c;
420 if (selection_data->length < 0) { 420 if (selection_data->length < 0) {
421 text = gtk_clipboard_wait_for_text(clipboard); 421 text = gtk_clipboard_wait_for_text(clipboard);
422 printf("%s\n", text);
423 } else { 422 } else {
424 text = g_malloc((selection_data->format / 8) * selection_data->length); 423 text = g_malloc((selection_data->format / 8) * selection_data->length);
425 memcpy(text, selection_data->data, selection_data->length * (selection_data->format / 8)); 424 memcpy(text, selection_data->data, selection_data->length * (selection_data->format / 8));
426 printf("%s\n", text);
427 } 425 }
428 426
429 memcpy (&c, text, 2); 427 memcpy (&c, text, 2);
430 if (c == 0xfeff) { 428 if (c == 0xfeff) {
431 /* This is UCS2 */ 429 /* This is UCS2 */
432 char *utf8 = g_convert(text+2, selection_data->length * (selection_data->format / 8), "UTF-8", "UCS-2", NULL, NULL, NULL); 430 char *utf8 = g_convert(text+2, (selection_data->length * (selection_data->format / 8)) - 2, "UTF-8", "UCS-2", NULL, NULL, NULL);
433 g_free(text); 431 g_free(text);
434 text = utf8; 432 text = utf8;
435 } 433 }
436 gtk_imhtml_close_tags(imhtml); 434 gtk_imhtml_close_tags(imhtml);
437 gtk_imhtml_append_text_with_images(imhtml, text, 0, NULL); 435 gtk_imhtml_append_text_with_images(imhtml, text, GTK_IMHTML_NO_NEWLINE, NULL);
438 } 436 }
439 437
440 438
441 static void paste_clipboard_cb(GtkIMHtml *imhtml, gpointer blah) 439 static void paste_clipboard_cb(GtkIMHtml *imhtml, gpointer blah)
442 { 440 {
526 gtk_text_buffer_get_end_iter (imhtml->text_buffer, &iter); 524 gtk_text_buffer_get_end_iter (imhtml->text_buffer, &iter);
527 imhtml->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, FALSE); 525 imhtml->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, FALSE);
528 gtk_text_view_set_buffer(GTK_TEXT_VIEW(imhtml), imhtml->text_buffer); 526 gtk_text_view_set_buffer(GTK_TEXT_VIEW(imhtml), imhtml->text_buffer);
529 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD_CHAR); 527 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD_CHAR);
530 gtk_text_view_set_pixels_below_lines(GTK_TEXT_VIEW(imhtml), 5); 528 gtk_text_view_set_pixels_below_lines(GTK_TEXT_VIEW(imhtml), 5);
529 /*gtk_text_view_set_indent(GTK_TEXT_VIEW(imhtml), -15);*/
531 /*gtk_text_view_set_justification(GTK_TEXT_VIEW(imhtml), GTK_JUSTIFY_FILL);*/ 530 /*gtk_text_view_set_justification(GTK_TEXT_VIEW(imhtml), GTK_JUSTIFY_FILL);*/
532 531
533 /* These tags will be used often and can be reused--we create them on init and then apply them by name 532 /* These tags will be used often and can be reused--we create them on init and then apply them by name
534 * other tags (color, size, face, etc.) will have to be created and applied dynamically */ 533 * other tags (color, size, face, etc.) will have to be created and applied dynamically */
535 gtk_text_buffer_create_tag(imhtml->text_buffer, "BOLD", "weight", PANGO_WEIGHT_BOLD, NULL); 534 gtk_text_buffer_create_tag(imhtml->text_buffer, "BOLD", "weight", PANGO_WEIGHT_BOLD, NULL);
620 gchar *url; 619 gchar *url;
621 }; 620 };
622 621
623 static void url_open(GtkWidget *w, struct url_data *data) { 622 static void url_open(GtkWidget *w, struct url_data *data) {
624 if(!data) return; 623 if(!data) return;
625
626 g_signal_emit(data->object, signals[URL_CLICKED], 0, data->url); 624 g_signal_emit(data->object, signals[URL_CLICKED], 0, data->url);
627 625
628 g_object_unref(data->object); 626 g_object_unref(data->object);
629 g_free(data->url); 627 g_free(data->url);
630 g_free(data); 628 g_free(data);
1219 1217
1220 1218
1221 g_return_val_if_fail (imhtml != NULL, NULL); 1219 g_return_val_if_fail (imhtml != NULL, NULL);
1222 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL); 1220 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL);
1223 g_return_val_if_fail (text != NULL, NULL); 1221 g_return_val_if_fail (text != NULL, NULL);
1224 1222 printf("Appending: %s\n", text);
1225 c = text; 1223 c = text;
1226 len = strlen(text); 1224 len = strlen(text);
1227 ws = g_malloc(len + 1); 1225 ws = g_malloc(len + 1);
1228 ws[0] = 0; 1226 ws[0] = 0;
1229 1227
1614 fd = fonts->data; 1612 fd = fonts->data;
1615 sml = fd->sml; 1613 sml = fd->sml;
1616 } 1614 }
1617 if (url) 1615 if (url)
1618 gtk_imhtml_insert_link(imhtml, url, ws); 1616 gtk_imhtml_insert_link(imhtml, url, ws);
1619 else 1617 else {
1618 printf("Inserting %s\n", ws);
1620 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos); 1619 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
1621 ws[0] = '\0'; 1620 }
1622 //NEW_BIT (NEW_TEXT_BIT);
1623 wpos = g_snprintf (ws, smilelen + 1, "%s", c); 1621 wpos = g_snprintf (ws, smilelen + 1, "%s", c);
1624 gtk_imhtml_insert_smiley(imhtml, sml, ws); 1622 gtk_imhtml_insert_smiley(imhtml, sml, ws);
1625
1626 /*anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, &iter);
1627 annipixbuf = gtk_smiley_tree_image(imhtml, sml, ws);
1628 if(annipixbuf) {
1629 if(gdk_pixbuf_animation_is_static_image(annipixbuf)) {
1630 pixbuf = gdk_pixbuf_animation_get_static_image(annipixbuf);
1631 if(pixbuf)
1632 icon = gtk_image_new_from_pixbuf(pixbuf);
1633 } else {
1634 icon = gtk_image_new_from_animation(annipixbuf);
1635 }
1636 }
1637
1638 if (icon) {
1639 gtk_widget_show(icon);
1640 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), icon, anchor);
1641 }
1642 1623
1643 copy = iter; 1624 ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
1644 gtk_text_iter_backward_char(&copy); 1625 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
1645 if (bg) { 1626
1646 texttag = gtk_text_buffer_create_tag(imhtml->text_buffer, NULL, "background", bg, NULL);
1647 gtk_text_buffer_apply_tag(imhtml->text_buffer, texttag, &iter, &copy);
1648 }
1649 if (fonts) {
1650 GtkIMHtmlFontDetail *fd = fonts->data;
1651 if (fd->back) {
1652 texttag = gtk_text_buffer_create_tag(imhtml->text_buffer, NULL, "background", fd->back, NULL);
1653 gtk_text_buffer_apply_tag(imhtml->text_buffer, texttag, &iter, &copy);
1654 }
1655 }
1656 */
1657 c += smilelen; 1627 c += smilelen;
1658 pos += smilelen; 1628 pos += smilelen;
1659 wpos = 0; 1629 wpos = 0;
1660 ws[0] = 0; 1630 ws[0] = 0;
1661 } else if (*c) { 1631 } else if (*c) {
1662 ws [wpos++] = *c++; 1632 ws [wpos++] = *c++;
1663 pos++; 1633 pos++;
1664 } else { 1634 } else {
1665 break; 1635 break;
1666 } 1636 }
2455 GdkPixbufAnimation *annipixbuf = NULL; 2425 GdkPixbufAnimation *annipixbuf = NULL;
2456 GtkWidget *icon = NULL; 2426 GtkWidget *icon = NULL;
2457 printf("%s %s\n", sml, smiley); 2427 printf("%s %s\n", sml, smiley);
2458 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins); 2428 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
2459 GtkTextChildAnchor *anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, &iter); 2429 GtkTextChildAnchor *anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, &iter);
2460 g_object_set_data(G_OBJECT(anchor), "text_tag", smiley); 2430 g_object_set_data(G_OBJECT(anchor), "text_tag", g_strdup(smiley));
2461 2431
2462 annipixbuf = gtk_smiley_tree_image(imhtml, sml, smiley); 2432 annipixbuf = gtk_smiley_tree_image(imhtml, sml, smiley);
2463 if(annipixbuf) { 2433 if(annipixbuf) {
2464 if(gdk_pixbuf_animation_is_static_image(annipixbuf)) { 2434 if(gdk_pixbuf_animation_is_static_image(annipixbuf)) {
2465 pixbuf = gdk_pixbuf_animation_get_static_image(annipixbuf); 2435 pixbuf = gdk_pixbuf_animation_get_static_image(annipixbuf);
2487 int span_compare_end(GtkIMHtmlFormatSpan *a, GtkIMHtmlFormatSpan *b) 2457 int span_compare_end(GtkIMHtmlFormatSpan *a, GtkIMHtmlFormatSpan *b)
2488 { 2458 {
2489 GtkTextIter ia, ib; 2459 GtkTextIter ia, ib;
2490 gtk_text_buffer_get_iter_at_mark(a->buffer, &ia, a->start); 2460 gtk_text_buffer_get_iter_at_mark(a->buffer, &ia, a->start);
2491 gtk_text_buffer_get_iter_at_mark(b->buffer, &ib, b->start); 2461 gtk_text_buffer_get_iter_at_mark(b->buffer, &ib, b->start);
2492 return gtk_text_iter_compare(&ia, &ib); 2462 /* The -1 here makes it so that if I have two spans that close at the same point, the
2463 * span added second will be closed first, as in <b><i>Hello</i></b>. Without this,
2464 * it would be <b><i>Hello</b></i> */
2465 return gtk_text_iter_compare(&ia, &ib) - 1;
2493 } 2466 }
2494 2467
2495 /* Basic notion here: traverse through the text buffer one-by-one, non-character elements, such 2468 /* Basic notion here: traverse through the text buffer one-by-one, non-character elements, such
2496 * as smileys and IM images are represented by the Unicode "unknown" character. Handle them. Else 2469 * as smileys and IM images are represented by the Unicode "unknown" character. Handle them. Else
2497 * check the list of formatted strings, sorted by the position of the starting tags and apply them as 2470 * check the list of formatted strings, sorted by the position of the starting tags and apply them as
2592 else 2565 else
2593 str = g_string_append_unichar(str, c); 2566 str = g_string_append_unichar(str, c);
2594 } 2567 }
2595 gtk_text_iter_forward_char(&iter); 2568 gtk_text_iter_forward_char(&iter);
2596 } 2569 }
2570 closers = g_list_reverse(closers);
2597 while (closers) { 2571 while (closers) {
2598 GtkIMHtmlFormatSpan *span = (GtkIMHtmlFormatSpan*)closers->data; 2572 GtkIMHtmlFormatSpan *span = (GtkIMHtmlFormatSpan*)closers->data;
2599 str = g_string_append(str, span->end_tag); 2573 str = g_string_append(str, span->end_tag);
2600 closers = g_list_remove(closers, span); 2574 closers = g_list_remove(closers, span);
2601 } 2575
2576 }
2577 printf("Gotten: %s\n", str->str);
2602 return g_string_free(str, FALSE); 2578 return g_string_free(str, FALSE);
2603 } 2579 }
2604 2580
2605 void gtk_imhtml_close_tags(GtkIMHtml *imhtml) 2581 void gtk_imhtml_close_tags(GtkIMHtml *imhtml)
2606 { 2582 {