Re: [gnome-cyr] gnome2 - how configurable is it?



14 Июнь 2002 14:20, Вы написали:
> On Fri, 14 Jun 2002, Сукиязов Сергей Александрович wrote:
>
>  Hi,
>
> > 14 Июнь 2002 13:02, Вы написали:
> > > В Чтв, 13.06.2002, в 21:52, Сукиязов Сергей Александрович написал:
> > > > 13 Июнь 2002 21:25, Вы написали:
> > > > > В Чтв, 13.06.2002, в 17:29, Serge Pavlovsky написал:
> > > > > > а савфиш вообще хотят выкинуть в угоду метасити.
> > > > > > типа некому им заниматься... если бы лицемер хп силы тратил на
> > > > > > савфиш, а не на метасити...
> > > > >
> > > > > Ну так потратьте силы на савфиш Вы. А то говорить у нас все
> > > > > горазды, а где русский вклад в Гном?
> > > >
> > > > Могу предложить вариант патча который частично решает проблемы с
> > > > русским. Полностью решить мне не удалось :-((( ,  там всё намного
> > > > серьёзнее. Всё равно потребуется глубокая переработка sawfish :-(
> > >
> > > Очень хорошо, в багзиллу его или в какой-нибудь из листов. А ещё лучше
> > > как раз савфиш глубоко переработать. Или бросить силы на metacity :)
> >
> > У меня нет времени этим заниматься. Мои патчи только демострируют суть
> > проблемы. В результате - с русским (и с др. языками) проблем нет, но
> > добавляется memory-leak :-((.
> >
> > Я могу кинуть сюда, может кто-нибудь до ума доведет ?
>

Блин залепил не тот файл. Сейчас найду правильный. 

>  Сходу заметил это:
>  sgtk_rep_to_string (repv obj)
>  {
> -    return rep_STRINGP (obj) ? rep_STR (obj) : (u_char *)"";
> +/*    return rep_STRINGP (obj) ? rep_STR (obj) : (u_char *)""; */
> +    static u_char *result = 0;
> +    u_char *string;
> +
> +    if(!result) g_free(result);
>
>  В последней строке должно быть
>
> if(result) g_free(result);
>
>  Может это и было место лика?
>
 Нет лик возникает не в этом месте. Эту строку можно даже стереть.  Основная идея - ели строки
передаются в GTK2 то они должны быть в UTF-8, если в X-сы то в локали. Тогда sawfish2 работает
с языками нормально. В последнем варианте эта функции выглядели:

--------------
char *
sgtk_rep_to_string (repv obj)
{
    if (rep_STRINGP (obj))
    {
        gchar *tmpbuf = rep_STR (obj);
        gsize tmplen = strlen(tmpbuf);

        if (tmplen!=0)
        {
            GError *error = NULL;
            gsize convlen = 0;
            gchar *convbuf;

            if (g_utf8_validate (tmpbuf,tmplen,0)) return g_strdup(tmpbuf);

            convbuf = g_locale_to_utf8 (tmpbuf, tmplen, NULL, &convlen, &error);
            if (!error)
                return convbuf;
            else
            {
                g_warning ("Error converting string to UTF-8: %s\n", error->message);
                g_error_free (error);
            }
        }
    }
    return g_strdup("");
}

repv
sgtk_string_to_rep (char *x)
{
    repv obj;
    if (x == 0)
	return Qnil;
    if (g_utf8_validate (x,-1,0))
    {
        u_char *tmp = g_locale_from_utf8 (x, -1, 0, 0, 0);
        g_free(x);
        x = tmp;
    }
    obj = rep_string_dup (x);
    g_free (x);
    return obj;
}

repv
sgtk_static_string_to_rep (const char *x)
{
    repv obj;
    if (x == 0)
	return Qnil;
    if (g_utf8_validate (x,-1,0))
    {
        u_char *tmp = g_locale_from_utf8 (x, -1, 0, 0, 0);
        obj = rep_string_dup (tmp);
        g_free (tmp);
    }
    else
        obj = rep_string_dup (x);
    return obj;
}

--------------

Лик возникает из-за вызова изменённой  функции sgtk_rep_to_string (repv obj).  Преобразование к 
UTF-8 приводит к  динамическому выделению памяти под строку, и везде после вызова 
sgtk_rep_to_string нужно освобождать память. Если изменить только эти функции то лик будет 
проявляться, но появятся русские буквы :-))) 

Все вызовы sgtk_rep_to_string в файле gtk-glue.c (там около 1000 вызовов), но этот файл генерится 
при помощи lisp-скрипта, и патч оказывается бесполезным :-(( 

Если кто разберётся с этими скриптами - тогда можно будет сразу генерить gtk-glue.c, такой
какой нужно. Файл я прицеплю, это исправленный вариант - лики в нем не возникают. Но...
Он каждый раз генериться с пом скрипта build-gtk.jl (и связанных с ним).

-- 
С Уважением
Сукиязов Сергей

Attachment: gtk-glue.c.bz2
Description: BZip2 compressed data



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]