2009-11-06 3 views
0

나는 GtkMenu 위젯을 가지고 있으며 버튼 클릭시 화면에 추가하려고합니다. 하지만 마우스 위치에 추가되지만 버튼의 끝 부분에 추가하고 싶습니다. 위젯 같은, 내가 팝업 메뉴를 추가하려면 다음 코드를 사용하고Gtk 위젯의 끝 가장자리에 GtkMenu 위젯을 추가하는 방법

+-------+ 
|BUTTON | 
+-------+ 
+------------+ 
|Menu Item 1 | 
|Menu Item 2 | 
+------------+ 

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

확인이 기능을 추가하지만, 팝업 메뉴가 ...
하지 버튼 위젯의 끝에서 윈도우의 마지막에 추가됩니다

다음과 같은
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] 피리 [607]

나 X, Y, 높이, 버튼의 폭을 검색 할 아니다 위젯 ...
참고 :이 버튼은 (GtkHBox + (GtkImage + GtkLabel))이있는 맞춤 위젯입니다.

감사합니다.

답변

1

gtk_menu_popup()의 네 번째 인수는 정의 할 수있는 콜백 인 GtkMenuPositionFunc에 대한 포인터입니다. 콜백을 추가하고 단추 위젯의 GdkWindow에서 원하는 위치를 반환해야합니다.

내가 이것을한지 오래되었지만 부모 창 위치를 화면에 표시하고 위젯의 위치를 ​​추가하여 메뉴를 표시 할 절대 좌표를 가져와야 할 수도 있습니다.

+0

감사합니다. 이 기능을 추가했지만 여전히 문제가 있습니다. 문제의 바다를 업데이트하십시오. – User7723337

관련 문제