Yattm - unified GTK instant-messaging client | |
[Generated for version 0.2-17 - Mon Jan 6 19:01:23 GMT+1 2003] |
#include <gtk/gtk.h>
#include "extgtktext.h"
Include dependency graph for gtk_eb_html.h:
This graph shows which files directly or indirectly include this file:
Go to the source code of this file.
Functions | |
void | gtk_eb_html_init (ExtGtkText *widget) |
void | gtk_eb_html_add (ExtGtkText *widget, char *text, int ignore_bgcolor, int ignore_fgcolor, int ignore_font) |
|
Definition at line 463 of file gtk_eb_html.c. References _adjust_colors(), _extract_parameter(), _font_stack_init(), _font_stack_pop(), _font_stack_push(), _getcolor(), _getfont(), _unescape_string(), _font_stack::back, DBG_HTML, eb_debug, ext_gtk_text_insert(), ext_gtk_text_insert_data_underlined(), ext_gtk_text_insert_divider(), ext_gtk_text_insert_pixmap(), _font_stack::font_name, _font_stack::font_ptsize, _font_stack::font_size, _font_stack::fore, handle_click(), smiley_struct::name, and smiley_struct::pixmap. Referenced by eb_chat_room_show_3rdperson(), eb_chat_room_show_message(), eb_chat_window_display_error(), eb_chat_window_display_remote_message(), eb_chat_window_do_timestamp(), eb_info_window_add_info(), eb_restore_last_conv(), send_file(), send_message(), and set_html_text().
00465 { 00466 gchar ** tokens; 00467 int i = 0; 00468 #ifndef HAVE_LIBXFT 00469 GdkFont * font = NULL; 00470 #else 00471 XftFont * font = NULL; 00472 #endif 00473 /* 00474 * these atributes don't go into the font stact because we should not 00475 * allow nesting of these attributes, but allow then to be changed 00476 * independently of the font stact 00477 */ 00478 00479 int font_bold = 0; 00480 int font_italic = 0; 00481 char * url = NULL; 00482 00483 int first = 0; 00484 00485 00486 00487 /* 00488 * the ignore variable is used so we can ignore any header that may 00489 * be on the html 00490 */ 00491 00492 int ignore = 0; 00493 00494 font_stack * fs = _font_stack_init(); 00495 00496 fs->fore = g_new0(GdkColor, 1); 00497 memcpy(fs->fore, >K_WIDGET (widget)->style->fg[0], 00498 sizeof(GdkColor)); 00499 00500 //#ifdef HAVE_LIBXFT 00501 font = _getfont(fs->font_name, font_bold, font_italic, 00502 fs->font_size, fs->font_ptsize); 00503 //#endif 00504 00505 00506 /* 00507 * Since the first thing in a split list may or may not be starting with a 00508 * < we need to keep track of that manually 00509 */ 00510 00511 if(*text != '<') 00512 { 00513 first = 1; 00514 } 00515 00516 /* 00517 * a nice heuristic to decide if we should be proper with 00518 * our html and ignore the \n 00519 * or deal with our not-so-fortunate human typers 00520 * that don't do proper html 00521 */ 00522 00523 if(strstr(text, "<br>") || strstr(text, "<BR>")) 00524 { 00525 char * c = text; 00526 while((c = strstr(c, "\n")) != 0) 00527 { 00528 *c = ' '; 00529 } 00530 c = text; 00531 while((c = strstr(c, "\r")) != 0) 00532 { 00533 *c = ' '; 00534 } 00535 } 00536 else if(strstr(text, "\r")) 00537 { char * c = text; 00538 if(strstr(text, "\n")) 00539 { /* drop the useless \r's */ 00540 while((c = strstr(c,"\r")) != 0) 00541 { 00542 *c = ' '; 00543 } 00544 } 00545 else 00546 { /* convert the \r to readable \n */ 00547 while((c = strstr(c,"\r")) != 0) 00548 { 00549 *c = '\n'; 00550 } 00551 } 00552 } 00553 00554 tokens = g_strsplit(text, "<", 0); 00555 00556 00557 /* 00558 * if we started with a < then the first thing in the list 00559 * will be a 0 lenght string, so we want to skip that 00560 */ 00561 00562 for( i = first?0:1; tokens[i]; i++ ) 00563 { 00564 00565 00566 eb_debug(DBG_HTML, "Part %d: %s\n", i, tokens[i]); 00567 00568 if(!first && strstr(tokens[i], ">")) 00569 { 00570 char * copy = strdup(tokens[i]); 00571 #ifdef __MINGW32__ 00572 gchar ** tags = g_strsplit(tokens[i], ">", 2); 00573 #else 00574 gchar ** tags = g_strsplit(tokens[i], ">", 1); 00575 #endif 00576 /* 00577 * Okay, we now know that tags[0] is an html tag because 00578 * there was a < before it and a > after it 00579 */ 00580 00581 /* 00582 * first let's clean it up 00583 */ 00584 00585 eb_debug(DBG_HTML, "\t Part a: %s\n", tags[0]); 00586 eb_debug(DBG_HTML, "\t Part b: %s\n", tags[1]); 00587 g_strstrip(tags[0]); 00588 g_strdown(tags[0]); 00589 00590 if(!strncmp(tags[0], "font", strlen("font"))) 00591 { 00592 char * data = tags[0] + strlen("font"); 00593 char * parm; 00594 00595 fs = _font_stack_push(fs); 00596 00597 if((parm = strstr(data, "face=")) != NULL) 00598 { 00599 parm += strlen("face="); 00600 _extract_parameter(parm, fs->font_name, 255); 00601 } 00602 00603 if((parm = strstr(data, "ptsize=")) != NULL) 00604 { 00605 char size[25]; 00606 parm += strlen("ptsize="); 00607 _extract_parameter(parm, size, 25); 00608 fs->font_size = -1; 00609 fs->font_ptsize = atoi(size); 00610 eb_debug(DBG_HTML, "got a ptsize of %d\n", fs->font_ptsize); 00611 } 00612 else if((parm = strstr(data, "absz=")) != NULL) 00613 { 00614 char size[25]; 00615 parm += strlen("absz="); 00616 _extract_parameter(parm, size, 25); 00617 fs->font_size = -1; 00618 fs->font_ptsize = atoi(size); 00619 eb_debug(DBG_HTML, "got a ptsize of %d\n", fs->font_ptsize); 00620 } 00621 else if((parm = strstr(data, "size=")) != NULL) 00622 { 00623 char size[25]; 00624 parm += strlen("size="); 00625 _extract_parameter(parm, size, 25); 00626 00627 if(*size == '+') 00628 { 00629 fs->font_size += atoi(size+1); 00630 } 00631 else if(*size == '-') 00632 { 00633 fs->font_size -= atoi(size+1); 00634 } 00635 else 00636 { 00637 fs->font_size = atoi(size); 00638 } 00639 } 00640 if((parm = strstr(data, "color=")) != NULL) 00641 { 00642 char color[255]; 00643 parm += strlen("color="); 00644 _extract_parameter(parm, color, 255); 00645 if(fs->fore) 00646 { 00647 g_free(fs->fore); 00648 fs->fore = NULL; 00649 } 00650 if(!ignore_fgcolor) 00651 { 00652 //fprintf(stderr, "color: %s\n", color); 00653 00654 00655 if(!fs->back) 00656 { 00657 GdkColor * bg = >K_WIDGET(widget)->style->base[GTK_STATE_NORMAL]; 00658 int r, g, b; 00659 char color2[20]; 00660 int fg_r, fg_g, fg_b; 00661 if(!sscanf(color, "#%02x%02x%02x", &fg_r, &fg_g, &fg_b)) 00662 { 00663 GdkColor *tmpColor = _getcolor(gdk_window_get_colormap(GTK_WIDGET(widget)->window), color); 00664 fg_r = (tmpColor->red >> 8)&0xFF; 00665 fg_g = (tmpColor->green >> 8)&0xFF; 00666 fg_b = (tmpColor->blue >> 8)&0xFF; 00667 g_free(tmpColor); 00668 00669 } 00670 00671 00672 r = (bg->red >> 8)&0xFF; 00673 g = (bg->green >> 8)&0xFF; 00674 b = (bg->blue >> 8)&0xFF; 00675 00676 _adjust_colors(&fg_r, &fg_g, &fg_b, 00677 r, g, b); 00678 00679 sprintf(color2, "#%02x%02x%02x",fg_r, fg_g,fg_b); 00680 //fprintf(stderr, "Result: %s\n", color2); 00681 fs->fore = _getcolor(gdk_window_get_colormap(GTK_WIDGET(widget)->window), color2); 00682 } 00683 else 00684 { 00685 fs->fore = _getcolor(gdk_window_get_colormap(GTK_WIDGET(widget)->window), color); 00686 } 00687 } 00688 else 00689 { 00690 if(!fs->back && !ignore_bgcolor) 00691 { 00692 fs->fore = g_new0(GdkColor, 1); 00693 memcpy(fs->fore, >K_WIDGET (widget)->style->fg[0], 00694 sizeof(GdkColor)); 00695 } 00696 else 00697 { 00698 fs->fore = _getcolor(gdk_window_get_colormap(GTK_WIDGET(widget)->window), "black"); 00699 } 00700 } 00701 00702 } 00703 00704 if(!ignore_font) 00705 { 00706 font = _getfont(fs->font_name, font_bold, font_italic, 00707 fs->font_size, fs->font_ptsize); 00708 } 00709 else 00710 { 00711 #ifndef HAVE_LIBXFT 00712 font = NULL; 00713 #endif 00714 } 00715 } 00716 else if(!strncmp(tags[0], "img ", strlen("img "))) 00717 { 00718 char * parm; 00719 if((parm = strstr(copy, "src=")) != NULL 00720 ||(parm = strstr(copy, "SRC=")) != NULL) 00721 { 00722 char tmp_url[1024]; 00723 GdkPixmap *icon; 00724 GdkBitmap *mask; 00725 parm += strlen("src="); 00726 00727 _extract_parameter(parm, 00728 tmp_url, 1024); 00729 00730 if(!strcmp(tmp_url, "aol_icon.gif")) 00731 { 00732 icon = gdk_pixmap_create_from_xpm_d(GTK_WIDGET(widget)->window, &mask, NULL, aol_icon_xpm); 00733 ext_gtk_text_insert_pixmap(widget, font, fs->fore, fs->back, 00734 icon, mask, "aol_icon", 0); 00735 00736 } 00737 else if(!strcmp(tmp_url, "free_icon.gif")) 00738 { 00739 icon = gdk_pixmap_create_from_xpm_d(GTK_WIDGET(widget)->window, &mask, NULL, free_icon_xpm); 00740 ext_gtk_text_insert_pixmap(widget, font, fs->fore, fs->back, 00741 icon, mask, "free_icon", 0); 00742 00743 } 00744 else if(!strcmp(tmp_url, "dt_icon.gif")) 00745 { 00746 icon = gdk_pixmap_create_from_xpm_d(GTK_WIDGET(widget)->window, &mask, NULL, dt_icon_xpm); 00747 ext_gtk_text_insert_pixmap(widget, font, fs->fore, fs->back, 00748 icon, mask, "dt_icon", 0); 00749 00750 } 00751 else if(!strcmp(tmp_url, "admin_icon.gif")) 00752 { 00753 icon = gdk_pixmap_create_from_xpm_d(GTK_WIDGET(widget)->window, &mask, NULL, admin_icon_xpm); 00754 ext_gtk_text_insert_pixmap(widget, font, fs->fore, fs->back, 00755 icon, mask, "admin_icon", 0); 00756 00757 } 00758 } 00759 } 00760 else if(!strncmp(tags[0], "smiley ", strlen("smiley "))) 00761 { 00762 char * parm; 00763 if((parm = strstr(copy, "name=")) != NULL 00764 ||(parm = strstr(copy, "NAME=")) != NULL) 00765 { 00766 char tmp_sname[64]; 00767 GdkPixmap *icon; 00768 GdkBitmap *mask; 00769 GList * slist=smileys; 00770 smiley * smile; 00771 00772 parm += strlen("name="); 00773 // here 00774 _extract_parameter(parm, tmp_sname, 64); 00775 00776 while(slist!=NULL) 00777 { 00778 smile=(smiley *)slist->data; 00779 if(!strcmp(smile->name, tmp_sname)) 00780 { 00781 icon = gdk_pixmap_create_from_xpm_d(GTK_WIDGET(widget)->window, &mask, NULL, smile->pixmap); 00782 ext_gtk_text_insert_pixmap(widget, font, fs->fore, fs->back, 00783 icon, mask, "smiley", strlen("smiley")); 00784 break; 00785 } 00786 slist=slist->next; 00787 } 00788 if(slist==NULL) 00789 { 00790 if((parm = strstr(copy, "alt=")) != NULL 00791 || (parm = strstr(copy, "ALT=")) != NULL) 00792 { 00793 parm += strlen("alt="); 00794 _extract_parameter(parm, tmp_sname, 64); 00795 ext_gtk_text_insert(widget, font, fs->fore, fs->back, 00796 tmp_sname, strlen(tmp_sname)); 00797 } 00798 else 00799 { 00800 icon =gdk_pixmap_create_from_xpm_d(GTK_WIDGET(widget)->window, &mask, NULL, no_such_smiley_xpm); 00801 ext_gtk_text_insert_pixmap(widget, font, fs->fore, fs->back, 00802 icon, mask, "smiley", strlen("smiley")); 00803 } 00804 } 00805 } 00806 } 00807 else if(!strncmp(tags[0], "a ", strlen("a "))) 00808 { 00809 /* UNUSED char * data = tags[0] + strlen("a "); */ 00810 char * parm; 00811 00812 fs = _font_stack_push(fs); 00813 00814 if((parm = strstr(copy, "href=")) != NULL 00815 ||(parm = strstr(copy, "HREF=")) != NULL 00816 ) 00817 { 00818 char tmp_url[1024]; 00819 int r=0, g=0, b=0xFF; 00820 GdkColor * bg = >K_WIDGET(widget)->style->base[GTK_STATE_NORMAL]; 00821 char color[20]; 00822 int bg_r, bg_g, bg_b; 00823 00824 00825 bg_r = (bg->red >> 8)&0xFF; 00826 bg_g = (bg->green >> 8)&0xFF; 00827 bg_b = (bg->blue >> 8)&0xFF; 00828 00829 _adjust_colors(&r, &g, &b, bg_r, bg_g, bg_b); 00830 sprintf(color, "#%02x%02x%02x", r, g, b); 00831 fs->fore = _getcolor(gdk_window_get_colormap(GTK_WIDGET(widget)->window), color); 00832 00833 parm += strlen("href="); 00834 00835 _extract_parameter(parm, 00836 tmp_url, 1024); 00837 if(url) 00838 { 00839 g_free(url); 00840 } 00841 url = strdup(tmp_url); 00842 00843 00844 } 00845 } 00846 else if(!strcmp(tags[0], "/a")) 00847 { 00848 fs = _font_stack_pop(fs); 00849 if(url) 00850 { 00851 g_free(url); 00852 } 00853 url = NULL; 00854 00855 if(!fs) 00856 { 00857 fs = _font_stack_init(); 00858 fs->fore = g_new0(GdkColor, 1); 00859 memcpy(fs->fore, >K_WIDGET (widget)->style->fg[0], 00860 sizeof(GdkColor)); 00861 } 00862 if(!ignore_font) 00863 { 00864 font = _getfont(fs->font_name, font_bold, font_italic, 00865 fs->font_size, fs->font_ptsize); 00866 } 00867 else 00868 { 00869 #ifndef HAVE_LIBXFT 00870 font = NULL; 00871 #endif 00872 } 00873 } 00874 else if(!strcmp(tags[0], "b")) 00875 { 00876 font_bold = 1; 00877 if(!ignore_font) 00878 { 00879 font = _getfont(fs->font_name, font_bold, font_italic, 00880 fs->font_size, fs->font_ptsize); 00881 } 00882 else 00883 { 00884 #ifndef HAVE_LIBXFT 00885 font = NULL; 00886 #endif 00887 } 00888 00889 } 00890 else if(!strcmp(tags[0], "u")) 00891 { 00892 eb_debug(DBG_HTML, "Underline tag found\n"); 00893 if(!url) 00894 { 00895 url = strdup(""); 00896 } 00897 else 00898 { 00899 eb_debug(DBG_HTML, "Underline tag ignored\n"); 00900 } 00901 } 00902 else if(!strcmp(tags[0], "/u")) 00903 { 00904 /* 00905 * the widget stores a copy, so we must free 00906 * the original 00907 */ 00908 if(url) 00909 { 00910 g_free(url); 00911 url = NULL; 00912 } 00913 } 00914 else if(!strcmp(tags[0], "/b")) 00915 { 00916 font_bold = 0; 00917 if(!ignore_font) 00918 { 00919 font = _getfont(fs->font_name, font_bold, font_italic, 00920 fs->font_size, fs->font_ptsize); 00921 } 00922 else 00923 { 00924 #ifndef HAVE_LIBXFT 00925 font = NULL; 00926 #endif 00927 } 00928 } 00929 else if(!strcmp(tags[0], "i")) 00930 { 00931 font_italic = 1; 00932 if(!ignore_font) 00933 { 00934 font = _getfont(fs->font_name, font_bold, font_italic, 00935 fs->font_size, fs->font_ptsize); 00936 } 00937 else 00938 { 00939 #ifndef HAVE_LIBXFT 00940 font = NULL; 00941 #endif 00942 } 00943 } 00944 else if(!strcmp(tags[0], "/i")) 00945 { 00946 font_italic = 0; 00947 if(!ignore_font) 00948 { 00949 font = _getfont(fs->font_name, font_bold, font_italic, 00950 fs->font_size, fs->font_ptsize); 00951 } 00952 else 00953 { 00954 #ifndef HAVE_LIBXFT 00955 font = NULL; 00956 #endif 00957 } 00958 } 00959 else if(!strcmp(tags[0], "br")) 00960 { 00961 if(url) 00962 { 00963 ext_gtk_text_insert_data_underlined(widget, font, fs->fore, fs->back, 00964 url, strlen(url)+1, handle_click, "\n", strlen("\n")); 00965 } 00966 else 00967 { 00968 ext_gtk_text_insert(widget, font, fs->fore, fs->back, 00969 "\n", strlen("\n")); 00970 } 00971 } 00972 else if(!strcmp(tags[0], "html") 00973 | !strcmp(tags[0], "/html") 00974 | !strcmp(tags[0], "/p") 00975 | !strcmp(tags[0], "p") 00976 | !strcmp(tags[0], "title") 00977 | !strcmp(tags[0], "/title") 00978 | !strcmp(tags[0], "pre") 00979 | !strcmp(tags[0], "/pre") 00980 | !strncmp(tags[0], "img", strlen("img"))) 00981 { 00982 } 00983 else if(!strcmp(tags[0], "hr") 00984 || !strncmp(tags[0], "hr ", strlen("hr "))) 00985 { 00986 ext_gtk_text_insert(widget, font, fs->fore, fs->back, 00987 "\n", strlen("\n")); 00988 ext_gtk_text_insert_divider(widget, font, fs->fore, fs->back, 00989 " \n", strlen(" \n")); 00990 00991 00992 } 00993 else if(!strcmp(tags[0], "/font") 00994 || !strcmp(tags[0], "/body")) 00995 { 00996 fs = _font_stack_pop(fs); 00997 00998 00999 /* 01000 * we don't want to pop off the very first element in the stack 01001 * because that is the defaults, if we are in a positon of trying 01002 * that means the user tried doing one too many </font>'s 01003 * heh 01004 */ 01005 01006 if(!fs) 01007 { 01008 fs = _font_stack_init(); 01009 fs->fore = g_new0(GdkColor, 1); 01010 memcpy(fs->fore, >K_WIDGET (widget)->style->fg[0], 01011 sizeof(GdkColor)); 01012 } 01013 if(!ignore_font) 01014 { 01015 font = _getfont(fs->font_name, font_bold, font_italic, 01016 fs->font_size, fs->font_ptsize); 01017 } 01018 else 01019 { 01020 #ifndef HAVE_LIBXFT 01021 font = NULL; 01022 #endif 01023 } 01024 } 01025 else if(!strncmp(tags[0], "head", strlen("head"))) 01026 { 01027 /* 01028 * we want to ignore the header of an html doc 01029 */ 01030 01031 ignore = 1; 01032 } 01033 else if(!strncmp(tags[0], "body", strlen("body"))) 01034 { 01035 char * data = tags[0] + strlen("body"); 01036 char * parm; 01037 01038 ignore = 0; 01039 01040 01041 fs = _font_stack_push(fs); 01042 01043 if((parm = strstr(data, "bgcolor=")) != NULL) 01044 { 01045 char color[255]; 01046 parm += strlen("bgcolor="); 01047 _extract_parameter(parm, color, 255); 01048 if(fs->back) 01049 { 01050 g_free(fs->back); 01051 } 01052 if(!ignore_bgcolor) 01053 { 01054 fs->back = _getcolor(gdk_window_get_colormap(GTK_WIDGET(widget)->window), color); 01055 //fs->fore = _getcolor(gdk_window_get_colormap(GTK_WIDGET(widget)->window), "black"); 01056 } 01057 else 01058 { 01059 fs->back = NULL; 01060 } 01061 } 01062 } 01063 else 01064 { 01065 _unescape_string(copy); 01066 if(url) 01067 { 01068 ext_gtk_text_insert_data_underlined(widget, font, fs->fore, fs->back, 01069 url, strlen(url)+1, handle_click, "<", 1); 01070 ext_gtk_text_insert_data_underlined(widget, font, fs->fore, fs->back, 01071 url, strlen(url)+1, handle_click, copy, strlen(copy)); 01072 } 01073 else 01074 { 01075 ext_gtk_text_insert(widget, font, fs->fore, fs->back, 01076 "<", 1); 01077 ext_gtk_text_insert(widget, font, fs->fore, fs->back, 01078 copy, strlen(copy)); 01079 } 01080 g_strfreev(tags); 01081 free(copy); 01082 first = 0; 01083 continue; 01084 01085 } 01086 01087 if(tags[1] && !ignore) 01088 { 01089 _unescape_string(tags[1]); 01090 01091 if(url) 01092 { 01093 ext_gtk_text_insert_data_underlined(widget, font, fs->fore, fs->back, 01094 url, strlen(url)+1, handle_click, tags[1], strlen(tags[1])); 01095 eb_debug(DBG_HTML, "Underlined text inserted\n"); 01096 } 01097 else 01098 { 01099 ext_gtk_text_insert(widget, font, fs->fore, fs->back, 01100 tags[1], strlen(tags[1])); 01101 } 01102 } 01103 g_strfreev(tags); 01104 free(copy); 01105 } 01106 else 01107 { 01108 /* 01109 * Otherwise then it is all just text 01110 */ 01111 01112 /* 01113 * first we were not supposed to have gotten rid of that < ;P 01114 */ 01115 01116 if(!ignore) 01117 { 01118 if(!first) 01119 { 01120 if(url) 01121 { 01122 ext_gtk_text_insert_data_underlined( widget, font, fs->fore, 01123 fs->back, url, strlen(url)+1, handle_click, "<", strlen("<") ); 01124 } 01125 else 01126 { 01127 ext_gtk_text_insert( widget, font, fs->fore, 01128 fs->back, "<", strlen("<") ); 01129 } 01130 } 01131 01132 _unescape_string(tokens[i]); 01133 if(url) 01134 { 01135 ext_gtk_text_insert_data_underlined(widget, font, fs->fore, fs->back, 01136 url, strlen(url)+1, handle_click, tokens[i], strlen(tokens[i])); 01137 } 01138 else 01139 { 01140 ext_gtk_text_insert(widget, font, fs->fore, fs->back, 01141 tokens[i], strlen(tokens[i])); 01142 } 01143 } 01144 01145 } 01146 first = 0; 01147 } 01148 /* 01149 * we got this quirk of loosing the < if it ends 01150 * with the < 01151 * this is the fix 01152 */ 01153 01154 if(text[strlen(text)-1] == '<') 01155 { 01156 if(url) 01157 { 01158 ext_gtk_text_insert_data_underlined( widget, font, fs->fore, 01159 fs->back, url, strlen(url)+1, handle_click, "<", strlen("<") ); 01160 } 01161 else 01162 { 01163 ext_gtk_text_insert( widget, font, fs->fore, 01164 fs->back, "<", strlen("<") ); 01165 } 01166 } 01167 01168 g_strfreev(tokens); 01169 01170 while(fs) 01171 { 01172 fs = _font_stack_pop(fs); 01173 } 01174 } |
|
Definition at line 400 of file gtk_eb_html.c. References EXT_GTK_TEXT, ext_gtk_text_set_editable(), ext_gtk_text_set_line_wrap(), ext_gtk_text_set_word_wrap(), and handle_click(). Referenced by create_html_widget(), eb_chat_window_new(), eb_info_window_new(), and eb_join_chat_room().
00401 { 00402 gtk_signal_connect_after(GTK_OBJECT(widget), "button_press_event", 00403 GTK_SIGNAL_FUNC(handle_click), NULL); 00404 ext_gtk_text_set_editable(EXT_GTK_TEXT(widget), FALSE); 00405 ext_gtk_text_set_line_wrap(EXT_GTK_TEXT(widget), TRUE); 00406 ext_gtk_text_set_word_wrap(EXT_GTK_TEXT(widget), TRUE); 00407 00408 00409 00410 } |