Search code examples
csscgtk3

Trying to get 'Style' list for a GtkWidget


I'm trying hard to get a list of style properties for a GtkWidget (GtkButton). This is my code so far:

#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
// Declare variables.
    GtkWidget *btn = gtk_button_new();
    guint *count = {0};
    GParamSpec **list = NULL;

// Initialize gtk.
    gtk_init(&argc, &argv);

// Get style properties.
    list = gtk_widget_class_list_style_properties(GTK_WIDGET_CLASS(btn), count);

// Exit cleanly.
    exit(EXIT_SUCCESS);
}

I get a clean compile with:

gcc -o gtk_test gtk_test.c `pkg-config --cflags --libs gtk+-3.0`

But I get the following errors when run:

(process:72182): Gtk-CRITICAL **: 10:42:23.167: _gtk_style_provider_private_get_settings: assertion 'GTK_IS_STYLE_PROVIDER_PRIVATE (provider)' failed

(process:72182): Gtk-CRITICAL **: 10:42:23.167: _gtk_style_provider_private_get_settings: assertion 'GTK_IS_STYLE_PROVIDER_PRIVATE (provider)' failed

(process:72182): Gtk-CRITICAL **: 10:42:23.167: _gtk_style_provider_private_get_settings: assertion 'GTK_IS_STYLE_PROVIDER_PRIVATE (provider)' failed
Segmentation fault

I don't think I'm doing it right, but I can't find any examples that use gtk_widget_class_list_style_properties that I understand. They ones I do find use klass and the first argument. But I can never find where klass is declared or even what it is.

Can someone please help point me in the right direction? I went to the gtk website and did a search on GTK_WIDGET_CLASS and it came back with nothing! Very frustrating to say the least.

What am I supposed to use for the GTK_WIDGET_CLASS argument that will return the style properties for a GtkButton?


Solution

  • I tried out your sample code. Actually, it looks like you just have the incorrect macro. Instead of:

    GTK_WIDGET_CLASS(btn)
    

    try:

    GTK_WIDGET_GET_CLASS(btn)
    

    I tried that and then received no critical messages.

    Regards.