younker 发表于 2004-3-16 09:09:11

gedit 2.5.91得奇怪问题

打开gedit,然后向里面拷贝一些文字,然后存盘。在弹出的对话框的文件名文本框内单击,就会出现一个特殊的符号,然后清除这个符号,输入任何的文件名,都不能正确的存盘。如果你在文件名编辑框中不断的按delete,gedit就崩溃了。

如果你在gedit拷贝的文本中敲入任何内容,哪怕是一个空格,上面不能存盘的问题就没有了。但是按住delete依然崩溃。

不知道大家有没有遇到这个问题?可以试一下看看。

xLoneStar 发表于 2004-3-16 10:38:57

不能重现

我 gedit 2.5.91,按存盘后出现对话框中默认文件名为 “未命名 1”,点击或者删除并未出现异常情况

倒是在下面 Save in folder 中,一选“文件系统”,就崩溃了,大家有没有遇到?

xLoneStar 发表于 2004-3-16 10:49:32

在 gdb 中运行时,我获得如下 bt:

(gdb) bt
#00x035cef7e in gtk_file_chooser_dialog_new_with_backend ()
   from /usr/lib/libgtk-x11-2.0.so.0
#10x035cf11e in gtk_file_chooser_dialog_new_with_backend ()
   from /usr/lib/libgtk-x11-2.0.so.0
#20x035cf193 in gtk_file_chooser_dialog_new_with_backend ()
   from /usr/lib/libgtk-x11-2.0.so.0
#30x035d4ee0 in gtk_file_chooser_dialog_new_with_backend ()
   from /usr/lib/libgtk-x11-2.0.so.0
#40x035d5073 in gtk_file_chooser_dialog_new_with_backend ()
   from /usr/lib/libgtk-x11-2.0.so.0
#50x00291ed2 in g_cclosure_marshal_VOID__VOID ()
   from /usr/lib/libgobject-2.0.so.0
#60x0027ef12 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#70x002919ef in signal_emit_unlocked_R () from /usr/lib/libgobject-2.0.so.0
(gdb)

一下子看不出端倪。这到底算进了 libgnomeui 带的文件系统插件了没有?

我系统 locale 是zh_CN.GBK

younker 发表于 2004-3-16 11:11:50

不能重现

我 gedit 2.5.91,按存盘后出现对话框中默认文件名为 “未命名 1”,点击或者删除并未出现异常情况

倒是在下面 Save in folder 中,一选“文件系统”,就崩溃了,大家有没有遇到?

这个倒是出现过,不过后来升级了gtk2.3.6,而且里面好像永乐gentoo的一个补丁,这个问题就没有了。

younker 发表于 2004-3-16 11:13:30

Gedit-file.c:374
        fname = g_filename_from_utf8 (tmpstr, -1, NULL, NULL, NULL);
        这句代码似乎是错误的,不应该将utf8转换到locale编码。应该直接使用,因为在gtk_file_chooser_set_current_name需要的是utf8编码的字符串,

xLoneStar 发表于 2004-3-16 15:20:51

我相信 g_filename_from_utf8 并非简单地将 utf8 串转成 locale 编码。此函数的行为是受环境变量 G_BROKEN_FILENAMES 控制的

younker 发表于 2004-3-16 15:36:02

你的G_BROKEN_FILENAMES设置为1还是0

我相信 g_filename_from_utf8 并非简单地将 utf8 串转成 locale 编码。此函数的行为是受环境变量 G_BROKEN_FILENAMES 控制的

xLoneStar 发表于 2004-3-16 15:50:21

我没有设,你呢?

jcome 发表于 2004-3-16 18:25:58

我的locale设置是

gentoo jcome $ locale
LANG=zh_CN.gbk
LC_CTYPE=zh_CN.gbk
LC_NUMERIC=en_US
LC_TIME=en_US
LC_COLLATE=en_US
LC_MONETARY=en_US
LC_MESSAGES=en_US
LC_PAPER=en_US
LC_NAME=en_US
LC_ADDRESS=en_US
LC_TELEPHONE=en_US
LC_MEASUREMENT=en_US
LC_IDENTIFICATION=en_US
LC_ALL=

gentoo jcome $ export

......................
G_BROKEN_FILENAMES="1"
........................

younker 发表于 2004-3-16 20:51:11

Here is the patch

it works for me.
       

diff -uNrp gedit-2.5.91/gedit/gedit-file.c gedit-2.5.91.new/gedit/gedit-file.c
--- gedit-2.5.91/gedit/gedit-file.c 2004-03-05 23:19:46.000000000 +0800
+++ gedit-2.5.91.new/gedit/gedit-file.c 2004-03-16 20:32:59.543092960 +0800
@@ -370,12 +370,12 @@ gedit_file_save_as (GeditMDIChild *child
path = (gedit_default_path != NULL) ?
g_strdup (gedit_default_path) : NULL;

- tmpstr = gedit_document_get_uri (doc);
- fname = g_filename_from_utf8 (tmpstr, -1, NULL, NULL, NULL);
+ fname = gedit_document_get_uri (doc);
+ /*fname = g_filename_from_utf8 (tmpstr, -1, NULL, NULL, NULL);*/ if (!fname)
/* FIXME: should fname remain NULL in this case? - Paolo */
fname = g_strdup ("Untitled"); /* Use ASCII */
- g_free (tmpstr);
+ /*g_free (tmpstr);*/
}
else
{

xLoneStar 发表于 2004-3-16 22:01:06

Re: Here is the patch

it works for me.

我还没有看代码,不过我有点不是很明白。你在这里取消了对 g_filename_from_utf8 的调用,准备在哪儿再调用它呢?总不能不调吧,否则 G_BROKEN_FILENAMES 环境变量就不起作用了

younker 发表于 2004-3-16 22:31:20

这个地方是不许要调用的, 因为他通过这个来取得document的文件名,而在一个新文件没有被存盘之前他的标识应该是untitled,所以它会使用缺省的Untitled加一个数字作为序列号,如果你用了locale,那么他就会取得一个utf8的字符串,中文下就是未命名,然后他用这个字符串来调用gtk_file_chooser_set_current_name(),而这个函数是需要一个utf8字符串的,当你在file-chooser里面设定了文件名,确定之后, gedit会重新将得到的新的文件名在此转换为local编码的,然后进行实际的存盘。

不知道是不是正确,至少对我的是这样的
我的G_BROKEN_FILENAMES=1
在我设置LANG=zh_CN.UTF8和LC_ALL=zh_CN.UTF8之后, 即使不用补丁也正常。但是打了补丁之后在gb2312下面也正常了。

mandrakechina 发表于 2004-3-17 12:12:34

Re: Here is the patch

it works for me.
Where is the patch?

mandrakechina 发表于 2004-4-20 14:16:59

Let's check if it has been fixed now.

xLoneStar 发表于 2004-4-20 23:20:51

I've tried but still cannot reproduce it
页: [1]
查看完整版本: gedit 2.5.91得奇怪问题