GtkTextView 커서 움직이기? 혹은 scroll 움직이기
글쓴이: freedom / 작성시간: 월, 2006/11/13 - 5:35오전
안녕하세요 gtk 를 공부하고 있는 학생입니다..
GtkTextView 를 이용해서
알ftp 의 상태창 처럼 새로운 내용이 추가 될때마다
포커스 혹은 커서가 최근 내용을 가리키게 하고 싶은데..
어떻게 해야 할지 모르겠네요..
시그널에서는 "move cursor" 라는 시그널이 있는데.. 이건
커서가 이동될때 발생하는 시그널 같고
그렇다고 scroll (textview 를 scrolledwindow 에 넣었습니다.)을 움직이려고 했는데
그렇다할 것을 찾지 못했습니다..
새로운 내용을 추가할때마다 (gtk_text_buffer_set_text 이용)
맨 상위가 포커스가 되네요..ㅠㅠ
Forums:
scroll to iter를 쓰세요.
devhelp를 찾아보시면 자세한 함수를 알 수 있습니다.
1. 텍스트 내용이 바뀌는 시그널을 잡아서
2. 바뀐 이후 end iter를 확보하고
3. scroll to iter로 end까지 scroll 합니다.
이때 구현상의 주의점이 있었는데, gaim에서 이 기능을 쓰고 있으니 그쪽 코드를 살펴보세요.
오래되서 잘 기억은
오래되서 잘 기억은 나지 않지만.. selection(현재 선택된 내용)을 이동해서 커서를 이동시켰던 것으로 기억합니다. 아마도 gtk_*_set_selection_*()식의 함수이던지 아니면 *_place_cursor() 식의 함수를 찾아보기 바랍니다.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
우선 kz 님, cinsk 님의
우선 kz 님, cinsk 님의 조언 감사드립니다.
두분 말씀중 kz 님의 말씀이 잘이해가 되서 아래와 같이 구현했는데
여기서 문제가 생겼습니다..
void move_scroll_to_end(GtkTextView* textview)
{
GtkTextIter end;
// end iter 구함
gtk_text_buffer_get_end_iter(textbuffer_console, &end);
// scroll 을 end iter 까지 x - center, y - right 로 이동
gtk_text_view_scroll_to_iter(textview, &end, 1, TRUE, 0.0, 1.0);
}
여기서 문제가 되는것이 스크롤이 내려가다 만다는 점입니다..
예를 들어 스크롤을 아래의 화살표를 이용 내렸을때 2칸 정도의 공간을 남기고
이동한다는 점입니다..
TextBuffer 의 내용은 gchar* 로부터 문자열을 입력을 받아서 넣은것입니다.
혹시나 '\n' 등의 문자열이 문제인가 싶어서 빼보기도 했는데 잘 안되더군요,
또한가지 kz 님께서 말씀하신 gaim 이 어떤건지 잘 모르겠습니다..
다시한번 답변 부탁드립니다!
댓글 달기