GTKの目的の場所にポップアップメニューを配置するのに問題があります(ボタンと同じy軸に沿っているため、ボタンからドロップダウンしているように見えます)。
私はwin32で同様のものをコーディングしていたときにそれを機能させましたが、私の人生の間、私はこのものを私が望む場所に描くことができません!
私は調査を行い、(私が思うに)何が機能するかを知っています。それがgtk_menu_popup()を呼び出すときです。
ポップアップを配置するためのメソッドへの関数ポインターでそれを渡す必要があります(メソッド仕様へのリンク-http://developer.gnome.org/gtk/2.24/GtkMenu.html#GtkMenuPositionFunc)
しかし、私は関数ポインターで少しごちゃごちゃしています(私が話すとき、私はカーニハンとリッチーの本を横に持っています)が、私はそれを正しくやっていると確信しています。
これが私の試みです:
void set_position(GtkMenu *menu,gint *x,gint *y,gboolean push_in,gpointer user_data)
{
printf("Help!\n";
GtkWidget *originButton = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(menu),"button");
gdk_window_get_position(originButton->window,x,y);
//now I realise this will place it at the top of the widget but thats acceptable for now, I just want the method to be called!
}
私はこれを行うことによってボタンハンドラーからそれを呼び出します:
static gboolean handler (GtkWidget *widget,GdkEvent *event)
{
GdkEventButton *bevent = (GdkEventButton *) event;
gtk_menu_popup(GTK_MENU(widget),NULL,NULL,set_position,bevent->button,bevent->button,bevent->time);
}
しかし、これをコンパイルすると、GtkMenuPositionFuncではないと表示されるので、キャストするだけです(それが正しいかどうかはわかりません)。
問題は、ヘルプが出力されないため、メソッドが呼び出されているとは思わないことです:(さらに、クリックした場所でメニューが生成されます(おそらく、メソッドが呼び出されないため、またはメソッドが実行する必要があるため)。
どんな助け/アイデアも大いに受け取られるでしょう:)ありがとう:)