2016-03-20 13 views
0

Ich möchte die linken und oberen Randgrößen eines GtkFrame berechnen. Ich verwende den folgenden Code ein:Computing Rahmengröße von GtkFrame, wenn Fenster nicht sichtbar ist

static void computeborder(GtkWidget *frame) 
{ 
    GtkAllocation alloc, child_alloc; 
    int borderTop, borderLeft; 

    gtk_widget_get_allocation(frame, &alloc); 
    GTK_FRAME_GET_CLASS(frame)->compute_child_allocation(GTK_FRAME(frame), &child_alloc); 

    borderTop = child_alloc.y - alloc.y; 
    borderLeft = child_alloc.x - alloc.x; 

    printf("BORDER TOP: %d BORDER LEFT %d\n", borderTop, borderLeft); 
} 

Dies funktioniert gut, aber nur, wenn das Fenster der obersten Ebene des GtkFrame Hosting ist bereits gezeigt. Allerdings muss ich herausfinden, über Randgrößen vor das oberste Fenster, das mein GtkFrame Widget enthält, wird angezeigt.

Wenn das Fenster der obersten Ebene, die enthält meine GtkFrame wurde noch nicht geöffnet, (-1,-1) in alloc zurückgegeben und (1,1) wird in child_alloc zurückgegeben. Wenn das Fenster der obersten Ebene bereits geöffnet wurde, werden die richtigen Größen zurückgegeben und ich kann die Rahmengrößen berechnen.

Allerdings muss ich die Rahmengrößen berechnen, wenn das Top-Level-Fenster ausgeblendet ist. Also wie kann ich in diesem Fall die Randgrößen meiner GtkFrame berechnen?

ich GTK 2.

+0

Sie anfordernden Sie sofort die Größen benötigen? Wenn Sie die Berechnung verschieben können, bis das Fenster [realisiert, zugeordnet oder angezeigt] wurde (https://blogs.gnome.org/jnelson/2010/10/13/those-realize-map-widget-signals/), Sie erhalten wahrscheinlich die richtigen Zuordnungsdaten. – user4815162342

+0

Leider kann ich die Berechnung nicht verschieben, bis das Fenster realisiert wurde. Gibt es eine Möglichkeit, die Größen vor der Realisierung zu bekommen? – Andreas

Antwort

0

diese Werte abhängig von Realisierung, da sie Informationen über das Zielanzeige benötigen usw. Verschiedene Displays in der Theorie können verschiedene Einstellungen haben, die die Größen ändern machen.

Sie können gtk_widget_realize() oder gtk_widget_map() oder beide auf dem Toplevel-Fenster versuchen, bevor die Größen