2017-11-18 3 views
2

Da gtk_style_context_get_background_color ist seit Version gtk V3.16 deprected Ich möchte folgende Stil-Eigenschaft vorzulesen: GTK_STYLE_PROPERTY_BACKGROUND_COLORErste Objekte aus einem Gwert

currrently mein Code sieht so aus:

GdkRGBA   *color; 

    ... 
    GValue value = G_VALUE_INIT; 
    gtk_style_context_get_property (context,GTK_STYLE_PROPERTY_BACKGROUND_COLOR, state, &value); 
    color = g_value_get_object (&value); 

jedoch es scheint, als ob ich es falsch mache. Während der Laufzeit erhalte ich nur die folgende Glib-GObject-KRITISCH:

(thunar: 6564): Glib-GObject KRITISCHE **: g_value_get_object: Behauptung 'G_VALUE_HOLDS_OBJECT (Wert)'

fehlgeschlagen Wie kann ich also gtk-Eigenschaften nutzen, die komplexere Datentypen enthalten?

EDIT: die komplette Lösung, die für mich jetzt funktioniert:

GtkStateFlags state; 
    GdkRGBA   *color; 
    GtkStyleContext *context = gtk_widget_get_style_context (widget); 

    // get the color 
    gtk_style_context_get (context, GTK_STATE_FLAG_SELECTED, GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &color, NULL); 

    // do something with the color 
    gdk_cairo_set_source_rgba (cr, color); 

    // dont forget to free it afterwards !! (Otherwise segfaults may occur) 
    gdk_rgba_free (color); 
+0

GdkRgba ​​es ist kein Objekt. Es ist eine einfache Struktur mit Farbkomponenten. –

Antwort

2

Sie können ganz gehen durch Gwert überspringen:

GdkRGBA *c; 
gtk_style_context_get (context, 
         GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &c, 
         NULL); 
// ... 
gdk_rgba_free (c); 
+0

Danke, der Anruf selbst scheint soweit zu funktionieren .. jetzt bekomme ich ein seg. Fehler bei der Verwendung von * c in einer anderen Methode oO. Wird später weiter untersuchen. – Alex

+0

Ok, scheint wie das Problem für meine segfault war, dass ich c nach Gebrauch frei c. Denken Sie, es wäre wert, dies zu Ihrer Antwort hinzuzufügen. Wahrscheinlich hast du den Code von hier genommen? https://github.com/GNOME/gtk/blob/master/gtk/gtkstylecontext.c#L1574: D – Alex

+0

Fühlen Sie sich frei, die Antwort besser zu machen, indem Sie sie bearbeiten. – ptomato

Verwandte Themen