在按钮小部件下调整GtkMenu时出现问题

在按钮小部件下调整GtkMenu时出现问题,gtk,Gtk,我使用以下代码添加了GtkMenu: // Add popup menu. gtk_menu_popup( GTK_MENU (widget), NULL, NULL, set_position, NULL, bevent->button, bevent->time); 为了调整我按钮下的GTK菜单,我使用了以下功能: void set_position (GtkMenu *menu, gint *px, gint

我使用以下代码添加了GtkMenu:

// Add popup menu.
gtk_menu_popup( GTK_MENU (widget), NULL, NULL, set_position, NULL,                 
                bevent->button, bevent->time);
为了调整我按钮下的GTK菜单,我使用了以下功能:

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;
}

但是弹出窗口显示在整个窗口的末尾,而不是按钮的末尾…

打印输出f:
w[350]h[400]px[341]py[607]

为什么没有正确给出按钮的x、y和高度、宽度,有什么问题吗?
注意:本文中使用的按钮小部件是一个自定义复合小部件,其中包含(GtkHBox+(GtkImage+GtkLabel))。

我用普通标签按钮尝试了相同的代码,但仍然显示GtkMenu 在根窗口下而不是按钮下

为什么会发生这种情况。。。我被困在这个…

thnaks,

好的,让我来回答这个问题。。。。如果任何人面临相同的问题,他/她可以参考此

要在GTK按钮(自定义复合按钮)下调整GTK菜单。。使用以下设置位置回调函数

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;
}
这将在GTK按钮小部件下设置GTK菜单的位置