본문 바로가기
컴퓨터 관련/Linux || Unix

GTK+ 이벤트[1] 시그널 형태

by _BlankSpace 2017. 4. 23.

GTK를 개발하다보면 당연히 시그널을 처리해야하는 경우가 발생할 것이다.

그 이유는 GUI에서 마우스나 키보드로 이벤트를 입력할 것인데, 그에 해당하는 출력을 주기 위해서는 어떠한 신호를 줘야하기 때문이다.

이때, 시그널을 처리함으로써, GTK는 좀 더 자유롭고 다양한 기능을 발휘한다고 생각한다.

이번 포스팅은 시그널에 대한 설명을 하고자 한다.

1
2
3
4
5
6
7
gulong g_signal_connect( gpointer* object,
 
                         const gchar* name,
 
                         GCallback func,
 
                         gpointer func_data );
cs

- gulong형 리턴값 : callback함수를 확인하기 위한 꼬리표. 따라서 시그널과 object에 대해 필요한 만큼의 많은 callback을 가질 수 있고, 그것들이 붙여져 있는 순서대로 각각 실행된다. 이때, 꼬리표는 우리가 리스트에서 callback을 제거할 수 있도록 도와준다.

- 첫번째 인자는 시그널을 발생시킬 widget.

- 두번째 인자는 잡아내고자 하는 시그널의 이름.

- 세번째 인자는 시그널이 탐지되었을 때 호출할 함수.

- 네번째 인자는 이 함수에 넘겨줄 정보.

1
2
3
4
5
void callback_func( GtkWidget *widget,
 
                    ... /* other signal arguments */
 
                    gpointer callback_data );
cs

- 첫번째 인자는 시그널을 발생시킨 widget을 향한 포인터.

- 마지막 인자는 g_signal_connect() 함수의 네번째 인자로 주어져 있는 정보에 대한 포인터.

1
2
3
4
5
6
7
gulong g_signal_connect_swapped( gpointer* object,
 
                                 const gchar* name,
 
                                 GCallback func,
 
                                 gpointer* callback_data );
cs

- callback함수가 GTK object에 대한 포인터라는 단 하나의 인자를 이용한다는 점을 빼면 gtk_signal_connect()와 같다.

- 따라서 이때의 callback 함수는 다음과 같은 모양을 해야 할 것이다.

1
2
3
4
5
void callback_func( gpointer callback_data,
 
                    ... /* other signal arguments */
 
                    GtkWidget* widget);
cs

- 따라서 callback 함수에 부가적인 데이터를 사용하려면 g_signal_swapped()가 아닌 g_signal_connect()를 사용해야 한다.


댓글