forward_display_line 无效

forward_display_line doesn't work

我正在使用 Gtk.TextView 显示文本,如下所示:

我的目标是以编程方式将光标移动到下一个 display 行的开头(不是缓冲行的开头,而是下一个 [=] 中的第一个字符16=]行)。

它使用 Gtk.WrapMode.WORD_CHAR 作为环绕首选项。从 TextBuffer:

访问时,移动 TextIter 对象工作正常
/* This works as expected */
Gtk.TextIter start_iter;
buffer.get_start_iter (out start_iter);

或者直接使用 TextIter:

/* This also works as expected */
Gtk.TextIter iter;
...
iter.forward_line ();

但是当我想使用 TextView 移动 TextIter 时,例如:

Gtk.TextView text_view;
Gtk.TextIter iter;
...
text_view.forward_display_line (iter);

它不移动迭代器,尽管 forward_display_line 返回 true(表示迭代器已移动)。

这是我正在使用的代码(在 TextView 派生的 class 中):

Gtk.TextIter line_end;
/* Initializing TextIter, placing it at the start of the buffer. */
this.buffer.get_start_iter (out line_end);

print ("Offset before forwarding: %i\n", line_end.get_offset ()); //returns 0

this.forward_display_line (line_end);

print ("Offset after forwarding: %i\n", line_end.get_offset ()); // still returns 0

为什么这段代码不起作用?由 TextBuffer 初始化的 TextIter 是否不适用于 TextView 方法?

在您的代码中,您调用 Gtk.TextBuffer forward_display_line() method which "consumes" a Gtk.TextIter but does not output this same "Iter" with the changes performed by the method. Both calls to Gtk.TextIter get_offset () 应该 return 相同的值。

相反,如果您使用 Gtk.TextIter forward_line (),则更改应该并且将会反映在第二次打印中,例如:

Gtk.TextIter line_end;
/* Initializing TextIter, placing it at the start of the buffer. */
this.buffer.get_start_iter (out line_end);

print ("Offset before forwarding: %i\n", line_end.get_offset ()); //returns 0

line_end.forward_line ();

print ("Offset after forwarding: %i\n", line_end.get_offset ()); // should be different from 0 if buffer has some text

正如@José 所建议的,这确实是 Vala C 绑定的一个错误。问题已发布 here

我会尝试修复这个错误,如果修复成功,我会更新这个答案。