사용자가 클릭 할 때 모든 텍스트가 선택되는 텍스트보기를 구현하려고합니다. 그러나 다음을 시도 할 때 텍스트보기를 클릭 할 때 텍스트가 선택되지 않습니다. 그러나 창을 끌면 텍스트가 선택됩니다. 내가 원하는 결과를 얻기 위해 변경해야합니까GtkTextView 포커스가있는 모든 텍스트를 선택하십시오.
#include <gtk/gtk.h>
gboolean cb(GtkWidget *tv, GdkEvent *event, gpointer user_data) {
GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv));
GtkTextIter start, end;
gtk_text_buffer_get_start_iter(buf, &start);
gtk_text_buffer_get_end_iter(buf, &end);
gtk_text_buffer_select_range(buf, &start, &end);
return FALSE;
}
int main(int argc, char *argv[]) {
gtk_init(&argc, &argv);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkWidget *box1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(window), box1);
GtkWidget *tv1 = gtk_text_view_new();
GtkWidget *tv2 = gtk_text_view_new();
gtk_box_pack_start(GTK_BOX(box1), tv1, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box1), tv2, TRUE, TRUE, 0);
GtkTextBuffer *buf1 = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv1));
GtkTextBuffer *buf2 = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv2));
gtk_text_buffer_set_text(buf1, "asdf", -1);
gtk_text_buffer_set_text(buf2, "ghjkl", -1);
g_signal_connect(tv2, "focus-in-event", G_CALLBACK(cb), NULL);
gtk_widget_show(tv1);
gtk_widget_show(tv2);
gtk_widget_show(box1);
gtk_widget_show(window);
gtk_main();
return 0;
}
:
이 최소한의 예를 생각해?
거짓. 이 함수는 콜백에서 추가 한'g_print()'문에 의해 트리거됩니다. – ace
아마도 처리기에서 'TRUE'를 반환하여 이벤트를 중지해야합니다. 디폴트의 핸들러가 아직 불려 가고 있기 (위해) 때문에, 선택을 삭제할 가능성이 있습니다. – ptomato
'TRUE'를 반환하려고했으나 도움이되지 않습니다. 'button-press-event'를 시도했으나 작동하지 않습니다. 나는'button-release-event'를 시도한 다음 작동합니다. 그래서 당신이 그것을 당신의 대답으로 편집한다면 나는 그것을 받아 들인 것으로 표시하게되어 기쁩니다. – ace