我正在C中使用GTK +编辑器。我添加了一个显示当前行号和列表号在光标位置的功能。它的工作很好。但缺点是当我尝试用箭头键移动光标时,行号和列号不会更新。下面是我的代码更新行号和列号在GTK文本缓冲区中检测光标移动
update_statusbar(GtkTextBuffer *buffer,GtkStatusbar *statusbar)
{
gchar *msg;
gint row, col;
GtkTextIter iter;
gtk_statusbar_pop(statusbar, 0);
g_print("c");
gtk_text_buffer_get_iter_at_mark(buffer,
&iter, gtk_text_buffer_get_insert(buffer));
row = gtk_text_iter_get_line(&iter);
col = gtk_text_iter_get_line_offset(&iter);
msg = g_strdup_printf("Col %d Ln %d", col+1, row+1);
gtk_statusbar_push(statusbar, 0, msg);
g_free(msg);
}
int main (int argc, char *argv[])
{
.
.
.
.
.
.
g_signal_connect(buffer, "changed", G_CALLBACK(update_statusbar), statusbar);
update_statusbar(buffer, GTK_STATUSBAR (statusbar));
}
我想问题是“改变”的信号。由于光标用箭头键移动,缓冲区不会被改变。所以任何人都可以建议我解决问题的更好方法。
在此先感谢:)。
这种感觉是“这是我的代码,为我修好。”你有什么尝试?你怎么知道这个问题在这块代码中? – Richard
此代码在缓冲区更改时工作良好。我的状态栏中的行号和列号发生了变化。我提供我的代码只是作为我的问题的参考。 –