forward_display_line不起作用

时间:2018-02-28 08:29:29

标签: gtk vala

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

TextView with wrapping

我的目标是以编程方式将光标移动到下一个显示行的开头(不是缓冲行的开头,而是下一行TextView行中的第一个字符)

它使用Gtk.WrapMode.WORD_CHAR作为包装首选项。从TextIter

访问时,移动TextBuffer个对象可以正常工作
/* 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 ();

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

在您的代码中,您调用Gtk.TextBuffer forward_display_line()方法“消耗”Gtk.TextIter,但不会输出与方法执行的更改相同的“Iter”。对Gtk.TextIter get_offset ()的两次调用都应返回相同的值。

相反,如果您使用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

答案 1 :(得分:0)

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

我会尝试修复此错误,如果我成功修复它,将会更新此答案。