Thanks, I'll get these bugfixes into CVS in time for the 0.44 release

On Mon, Jan 06, 2003 at 06:33:59PM +0800, sanit wrote:
> Hi, Micah
>   There are some other bugs, we fixed.
> 1. in widget/textedit_logical.c, old code in most skins cause pgserver crashed.
> 
> #ifdef CONFIG_HANDINFO_FIXED  
> g_error text_backend_build ( text_widget * widget,
>                              s16 w,
>                              s16 h ) {
> #else
> g_error text_backend_build ( text_widget * widget,
>                              u16 w,
>                              u16 h ) {
> #endif
> 
> 2.in widget/textedit_logical.c, we must judge if the buffer had chars.
> 
> g_error text_backend_set_selection ( text_widget * widget,
>                                      struct pgstring * text ) {
>     g_error e;
> #ifdef CONFIG_TEXTEDIT_WCHART
>     wchar_t * wBuffer;
> #ifdef CONFIG_HANDINFO_FIXED
>    if (!text->buffer || text->num_chars == 0)
>    {
>      return success;
>    }
> #endif
> ....
> 
> }
> 
>  3. in gcore/pgstring.c pgstr_utf8_seek function, we handle negative char_num, that 
>be used in textbox widget if we want to support utf8 code (Chinese). but this code is 
>vey ugly and slow and it can work.
> 
> 
> void pgstr_utf8_seek(const struct pgstring *str, struct pgstr_iterator *p, s32 
>char_num, int whence) {
>   int num = 0, savenum = 0;
>   struct pgstr_iterator temp_iterator;
>   switch (whence) {
> 
>   case PGSEEK_SET:
>     p->offset = 0;
>     break;
> 
>   case PGSEEK_END:
> #ifdef CONFIG_HANDINFO_FIXED
>    if (str->num_chars == 0) 
>      p->offset = 0;
>    else
> #endif
>      p->offset = str->num_chars - 1;
>     break;
>   }
>   /* FIXME: handle negative char_num by sanit Handinfo Ltd.*/
> #ifdef CONFIG_TEXTBOX_SUPPORT_UTF8
>   if (char_num >= 0)
>   {
> #endif
>     while (char_num) {
>       if (!pgstring_decode(str,p))
>         return;
>       char_num--;
>     }
> #ifdef CONFIG_TEXTBOX_SUPPORT_UTF8
>   }else
>   {
>     if ((num = char_num + str->num_chars) <= 0)
>       p->offset = 0;
>     else
>     {
>       temp_iterator = *p;
>       temp_iterator.offset = 0;
> 
>       /*FIXED ME this is a very urgly code, sanit */
>       savenum = str->num_chars;
> 
>       while (savenum) {
>         if (!pgstring_decode(str,&temp_iterator))
>           return;
>  if (temp_iterator.offset == p->offset)
>  {
>    break;
>  }
>         savenum--;
>       }
>       if (savenum == 0)
>  return;
> 
>       num = str->num_chars - savenum;
>       temp_iterator.offset = 0;
> 
>       while (num) {
>         if (!pgstring_decode(str,&temp_iterator))
>           return;
>         num--;
>       }
>       *p = temp_iterator;
>     }
>   }
> #endif
> }
> 
> 
>                                                                   
>sanit???????????????????????????????????????????+,???????X???'???u??N??g??g?r????zH^j???m?????????(?????????????????????????????????????????u???f??)??+->????z????l??.??????w???i????+-??(??~???????b????+-?w???.??^
-- 
Only you can prevent creeping featurism!


-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
Pgui-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/pgui-devel

Reply via email to