#include GdkPixbuf *create_pixbuf(const gchar * filename) { GdkPixbuf *pixbuf; GError *error = NULL; pixbuf = gdk_pixbuf_new_from_file(filename, &error); if(!pixbuf) { fprintf(stderr, "%s\n", error->message); g_error_free(error); } return pixbuf; } int main( int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "icon"); gtk_window_set_default_size(GTK_WINDOW(window), 230, 150); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); GtkIconTheme* theme = gtk_icon_theme_get_default(); static const char* kIconName = "chromium-browser"; int size = 48; GtkIconInfo *icon_info = gtk_icon_theme_lookup_icon (theme, kIconName, size, GTK_ICON_LOOKUP_USE_BUILTIN); g_print ("icon for %s at %dx%d is %s\n", kIconName, size, size, icon_info ? (gtk_icon_info_get_builtin_pixbuf (icon_info) ? "" : gtk_icon_info_get_filename (icon_info)) : ""); const gchar *display_name = gtk_icon_info_get_display_name (icon_info); if (display_name) g_print ("Display name: %s\n", display_name); if (gtk_icon_theme_has_icon(theme, kIconName)) { printf("gtk_icon_theme_has_icon is true"); GError *error; GdkPixbuf *pixbuf = gtk_icon_theme_load_icon (theme, kIconName, size, GTK_ICON_LOOKUP_USE_BUILTIN, &error); gtk_window_set_icon(GTK_WINDOW(window), pixbuf); g_object_unref (pixbuf); // If either of these two commands is uncommented, the icon will reset to the "missing" icon. // #1 // gtk_window_set_default_icon_name(kIconName); // #2 // case where the first window created doesn't have an icon. gtk_window_set_icon_name(GTK_WINDOW(window), kIconName); } else { gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("chromium-browser.svg")); } gtk_widget_show(window); g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_main(); return 0; }