我使用以下代码添加了GtkMenu:
// Add popup menu.
gtk_menu_popup( GTK_MENU (widget), NULL, NULL, set_position, NULL,
bevent->button, bevent->time);
为了在我的按钮下调整这个GtkMenu,我使用了这个功能:
void set_position (GtkMenu *menu, gint *px, gint *py, gboolean *push_in, gpointer data)
{
gint w, h;
GtkBuilder *builder = GetBuilderPointer();
GtkWidget *button = GTK_WIDGET( gtk_builder_get_object( builder, "button_presence"));
gdk_window_get_size (button->window, &w, &h);
gdk_window_get_origin (button->window, px, py);
*py = h;
printf("\n\n w[%d] h[%d] px[%d] py[%d]\n\n", w, h, *px, *py );
*push_in = TRUE;
}
但弹出窗口显示在整个窗口的末尾而不是按钮的末尾...
printf的输出:
w [350] h [400] px [341] py [607]
为什么没有正确地给出x,y和高度,按钮宽度会出现什么问题?
注意:此处使用的按钮小部件是一个自定义复合小部件,其中包含(GtkHBox +(GtkImage + GtkLabel))。
我尝试过使用普通标签按钮的相同代码,但仍会显示GtkMenu 在根窗口下不在按钮下。
为什么会发生这种情况......我继续坚持这个......
thnaks,
PP
答案 0 :(得分:1)
好的,让我回答一下......如果有人面临同样的问题,他/她可以参考这个......
在GtkButton(自定义复合按钮)下调整GtkMenu ..使用以下设置位置回调函数...
static void
pos_func( GtkMenu *menu,
gint *x,
gint *y,
gboolean *push,
GtkWidget *widget )
{
GtkRequisition req;
gtk_widget_size_request( widget, &req );
gdk_window_get_origin( gtk_widget_get_window( widget ), x, y );
*x += widget->allocation.x;
*y += widget->allocation.y + req.height;
*push = TRUE;
}
这将在GtkButton Widget下设置GtkMenu的位置!