I am practicing programs from gtk4-demo
I am not able to understand g_resources_lookup_data parameters. First one is being explained as
“A pathname inside the resource.”
can some one help me how to pass correct parameter ?
the following is the code I am using :
#include <gtk/gtk.h>
static void css_text_changed( GtkTextBuffer *buffer, GtkCssProvider *provider )
{
GtkTextIter start, end;
gtk_text_buffer_get_start_iter( buffer, &start );
gtk_text_buffer_get_end_iter( buffer, &end );
gtk_text_buffer_remove_all_tags( buffer, &start, &end );
char *text = gtk_text_buffer_get_text( buffer, &start, &end, FALSE );
gtk_css_provider_load_from_data( provider, text, -1 );
g_free( text );
}
static void apply_css (GtkWidget *widget, GtkStyleProvider *provider)
{
GtkWidget *child;
gtk_style_context_add_provider( gtk_widget_get_style_context( widget ), provider, G_MAXUINT );
for( child = gtk_widget_get_first_child( widget ); child != NULL; child = gtk_widget_get_next_sibling(child) )
apply_css( child, provider );
}
GtkWidget* do_css_basics( GtkWidget *do_widget )
{
static GtkWidget *window = NULL;
if( !window )
{
GtkWidget *container, *child;
GtkStyleProvider *provider;
window = do_widget;
gtk_window_set_title (GTK_WINDOW (window), "CSS Basics");
gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
GtkTextBuffer *text = gtk_text_buffer_new( NULL );
gtk_text_buffer_create_tag( text, "warning", "underline", PANGO_UNDERLINE_SINGLE, NULL );
gtk_text_buffer_create_tag( text, "error", "underline", PANGO_UNDERLINE_ERROR, NULL );
provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ());
container = gtk_scrolled_window_new ();
gtk_window_set_child (GTK_WINDOW (window), container);
child = gtk_text_view_new_with_buffer (text);
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (container), child);
g_signal_connect( text, "changed", G_CALLBACK( css_text_changed ), provider );
GBytes *bytes = g_resources_lookup_data( "/home/lokesh/Desktop/ttk_gui/css_basics.css", 0, NULL );
gtk_text_buffer_set_text( text, g_bytes_get_data( bytes, NULL ), g_bytes_get_size( bytes ) );
g_bytes_unref (bytes);
apply_css( window, provider );
}
if (!gtk_widget_get_visible (window))
gtk_widget_show (window);
else
gtk_window_destroy (GTK_WINDOW (window));
return window;
}
static void activate( GtkApplication *app, gpointer user_data )
{
GtkWidget *window = gtk_application_window_new( app );
do_css_basics( window );
gtk_window_destroy( GTK_WINDOW( window ) );
// gtk_widget_show (window);
}
int main( int argc, char **argv )
{
GtkApplication *app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect( app, "activate", G_CALLBACK( activate ), NULL );
int status = g_application_run( G_APPLICATION( app ), argc, argv);
g_object_unref( app );
return status;
}