2013-02-28 2 views
0

GTK3을 사용하여 위젯에서 방출 된 모든 신호를 모니터링 할 수있는 방법이 있습니까? 나는 event 신호가 이벤트 전에 방출된다는 것을 알고 있지만, GTK 용어에서 "이벤트"와 "신호"의 구분이 확실하지 않습니다. 모든 신호를 포착하지는 않는 것 같습니다.GTK3 - 위젯에서 방출 된 모든 신호 모니터링

GDK는 기능이 gdk_set_show_events 인 것을 알고 있지만 주로 운영 체제에서 창으로 보내는 이벤트를 보여줍니다. GTK3에 상응하는 것이 있습니까?

+1

신호는 Gtk에만 국한되지 않는 GObject (즉, 시스템 유형) 기능입니다. 이벤트는 Gtk 용어이며, 디스플레이 서버로부터 메시지를 감싼 것입니다. 위젯이 이벤트를 받으면 대개 신호를 사용하여 위젯에 대해 알려줍니다. 디스플레이 서버 메시지 (예 : 버튼 클릭)의 결과가 아닌 다른 것들도 신호를 사용하여 전송됩니다. – Ancurio

답변

1

은이 AFAIK 기능 내장,하지만 난 당신이 함께 자신을 뭔가를 해킹 할 수 확신되지 않습니다

사용 g_signal_lookup이 gtype 모든 신호 ID를 얻을 수 있습니다. 그런 다음 특정 신호가 발생할 때마다 호출 할 후크를 등록하기 위해 인스턴스의 각 신호에 g_signal_add_emission_hook을 사용하십시오. 후크 기능에는 *ihint을 통해 신호 ID가 제공되며 여기에서 g_signal_query은 디버그 메시지를 인쇄하는 데 필요한 모든 정보를 제공해야합니다. (테스트하지는 않았지만 제대로 작동 할 것입니다.)

G_SIGNAL_NO_HOOKS로 정의 된 신호에는이 기능이 작동하지 않습니다.

0

사용 g_signal_lookup는 모든 신호 IDS

그것은 조금 더 복잡한 설명보다의를 얻을 수 있습니다. g_signal_lookup을 사용하려면 먼저 signal-name이 필요합니다. 오브젝트 유형과 상관없이 모든 신호를 모니터하려면 먼저 특정 인스턴스 유형의 모든 신호를 나열해야합니다. 이것은 g_signal_list_ids으로 정확히 배열 할 수 있습니다. GType입니다. 인스턴스에서 방출 된 모든 신호를 실제로 얻으려면이 인스턴스의 모든 부모 유형을 반복해야합니다. g_type_parent을 사용하면됩니다.

본인이 의도 한 동일한 디버깅 목적으로이 기능을 제공하는 일부 유틸리티 기능을 직접 빌드했습니다. GObject - 인스턴스의 모든 신호에 대해 Emission-Hook을 gemu_glib_util_connect_to_all_signals에 연결하거나 방출 고리를 GtkWidget -instance 및 모든 해당 하위에 gemu_gtk_util_signal_connect_to_widget_children으로 연결합니다.

관련 문제