2009-11-09 4 views
0

J'ai ajouté GtkMenu en utilisant le code suivant:
Problème Lors du réglage de GtkMenu sous le bouton Widget

// Add popup menu. 
gtk_menu_popup(GTK_MENU (widget), NULL, NULL, set_position, NULL,     
       bevent->button, bevent->time); 

Et pour régler cette GtkMenu sous mon bouton j'ai utilisé cette fonction:

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


mais la fenêtre contextuelle s'affiche à la fin de la fenêtre entière et non à la fin du bouton ...

eteint du printf:
w [350] h [400] px [341] py [607]

ce qui se passe mal pourquoi il ne donne pas x, y et hauteur, largeur du bouton correctement ?
Remarque: Le widget de bouton utilisé ici est un widget composite personnalisé avec (GtkHBox + (GtkImage + GtkLabel)).

J'ai essayé le même code avec le bouton label normal mais GtkMenu est toujours affiché sous la fenêtre root non sous le bouton.

Pourquoi cela pourrait se passer ... Je suis coincé le relais sur cette ...

thnaks,
PP

Répondre

1

Ok Permettez-moi de répondre à cette .... si quelqu'un est confronté à la même problème, il/elle peut renvoyer cette ..

Pour régler GtkMenu sous GtkButton (bouton personnalisé composite) .. Utilisez la fonction suivante de rappel Position ...

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

Cela va définir la position de GtkMenu sous Widget GtkButton!

Questions connexes