我正在使用Gtk.TextView
来显示文字,如下所示:
我的目标是以编程方式将光标移动到下一个显示行的开头(不是缓冲行的开头,而是下一行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
方法?
答案 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。
我会尝试修复此错误,如果我成功修复它,将会更新此答案。