#include #include #include #include static gboolean destroy(GtkWidget *widget, GdkEvent *event, gpointer data) { gtk_main_quit(); return TRUE; } static gint comp_func(gconstpointer a, gconstpointer b, gpointer user_data) { return strcmp((const char *)a, (const char *)b); } int main(int argc, char *argv[]) { gtk_set_locale(); gtk_init(&argc, &argv); GtkWidget *wmain = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(wmain), "icon-view"); g_signal_connect(G_OBJECT(wmain), "delete-event", G_CALLBACK(destroy), 0); GtkWidget *tb = gtk_toolbar_new(); GtkTooltips *wtooltip = gtk_tooltips_new(); gtk_toolbar_set_show_arrow(GTK_TOOLBAR(tb), FALSE); gtk_toolbar_set_style(GTK_TOOLBAR(tb), GTK_TOOLBAR_ICONS); size_t i; if (argc == 1) { GdkDisplay *gdpy = gdk_display_get_default(); GdkScreen *gscreen = gdk_display_get_default_screen(gdpy); GtkIconTheme *icontheme = gtk_icon_theme_get_for_screen(gscreen); GList *list = gtk_icon_theme_list_icons(icontheme, NULL); list = g_list_sort_with_data(list, comp_func, NULL); GList *it; for (it = list; it != NULL; it = g_list_next(it)) { printf("%s\n", (char *)it->data); } return 0; } for (i = 1; i < argc; ++i) { int is_stock = 0; const char *name = argv[i]; if (strncmp("s:", name, 2) == 0) { is_stock = 1; name += 2; } GtkToolItem* ti; if (is_stock) { ti = gtk_tool_button_new_from_stock(name); } else { ti = gtk_tool_button_new(NULL, NULL); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(ti), name); } gtk_tool_item_set_expand(ti, TRUE); gtk_tool_item_set_tooltip(ti, wtooltip, name, NULL); gtk_toolbar_insert(GTK_TOOLBAR(tb), GTK_TOOL_ITEM(ti), -1); } gtk_container_add(GTK_CONTAINER(wmain), tb); gtk_widget_show_all(wmain); gtk_main(); return 0; }