GTK +信号に必要なGDKイベントを調べるにはどうすればよいですか?
質問
GUIの設計にGlade-3を使用していますが、この問題が発生し続けています。シグナルをイベントにマッピングするGTK +ドキュメントやGlade-3(3.4.5)には何も表示されません。 GTK +ソースコードにこの情報を見つける場所はありますか?
注:この質問では、イベントとシグナルはGTKで同じものではないことを認識することが重要です。
例:
次のシグナルを受信するには、次のイベントを必要とするイベントボックスがあります。特定のシグナルに必要なイベントを特定するにはどうすればよいですか?
Events: GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK
Signals: leave_notify_event, enter_notify_event
解決
さて、私はあなたの今の意味を知っていると思います。このテーブルはgtkシグナルとgdkイベントを一致させました。 こちら。
他のヒント
あなたの質問を正しく解釈したと仮定すると、Gladeファイルで指定した信号をソースコードの関数に接続したいと考えています。これを行う方法は、libgladeを使用してファイルgenerateまたはGtkBuilderをロードするかどうかによって異なりますが、どちらも似ていますが、完成させるためにCでサンプルを提供します。
libgladeを使用すると、次のようになります。
GladeXml *xml = glade_xml_new(filename, NULL, NULL); // Load the file
glade_xml_signal_autoconnect(xml); // Connect the signals
GtkBuilderを使用すると、次のようになります。
GtkBuilder *xml = gtk_builder_new();
gtk_builder_add_from_file(xml, filename, NULL); // Load the file
gtk_builder_connect_signals(xml, NULL); // Connect the signals
GtkBuilderを使用する場合、シグナル接続関数の2番目のパラメーターをデータへのポインターに置き換えてから、シグナルハンドラーに渡すことができます。
今後は、libgladeが廃止される予定なので、GtkBuilderを使用することをお勧めします。
リンク
上記の2つの機能に関する関連ドキュメントへのリンクは次のとおりです
最初に、起動時に独自のGDKイベントハンドラーを登録します。
gdk_event_handler_set(my_gdk_event_handler, NULL, NULL);
...次に、有用な情報を出力するために使用し、次のように gtk_main_do_event()
を介してGTK +にイベントを渡すことを忘れないでください:
void my_gdk_event_handler(GdkEvent *event, gpointer data)
{
printf("Received GdkEvent of type %d", event->type);
gtk_main_do_event(event); // Pass event to GTK+
}