Skip to content

Instantly share code, notes, and snippets.

@JohnCoconut
Last active February 24, 2018 17:10
Show Gist options
  • Select an option

  • Save JohnCoconut/bf17df5a3d13c889acd673740c9c2898 to your computer and use it in GitHub Desktop.

Select an option

Save JohnCoconut/bf17df5a3d13c889acd673740c9c2898 to your computer and use it in GitHub Desktop.
GtkTreeView warnings
#include <gtk/gtk.h>
static void activate_main (GtkApplication *app, gpointer user_data);
static void setup_tree_view (GtkWidget *treeview);
static void populate_tree_store (GtkTreeStore *store);
int
main (int argc,
char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new (NULL, G_APPLICATION_FLAGS_NONE);
g_signal_connect(app, "activate", G_CALLBACK (activate_main), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
static void
activate_main (GtkApplication *app,
gpointer user_data)
{
GtkWidget *window, *scrolled_win;
GtkWidget *treeview;
GtkWidget *toolbar;
GtkToolItem *expand_tree_view_button, *collapse_tree_view_button;
GtkWidget *image;
GtkWidget *status_bar;
guint context_id;
GtkWidget *master_grid;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Gtk Tree View");
gtk_widget_set_size_request(window, 1280, 720);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
GtkTreeStore *store;
store = gtk_tree_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
populate_tree_store (store);
treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
g_object_unref (store);
gtk_widget_set_hexpand (treeview, TRUE);
gtk_widget_set_vexpand (treeview, TRUE);
setup_tree_view (treeview);
scrolled_win = gtk_scrolled_window_new (NULL, NULL);
gtk_container_add (GTK_CONTAINER (scrolled_win), treeview);
toolbar = gtk_toolbar_new ();
image = gtk_image_new_from_icon_name ("list-add", GTK_ICON_SIZE_SMALL_TOOLBAR);
expand_tree_view_button = gtk_tool_button_new (image, NULL);
image = gtk_image_new_from_icon_name ("list-remove", GTK_ICON_SIZE_SMALL_TOOLBAR);
collapse_tree_view_button = gtk_tool_button_new (image, NULL);
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), expand_tree_view_button, -1);
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), collapse_tree_view_button, -1);
g_signal_connect_swapped (expand_tree_view_button, "clicked",
G_CALLBACK (gtk_tree_view_expand_all), GTK_TREE_VIEW (treeview));
g_signal_connect_swapped (collapse_tree_view_button, "clicked",
G_CALLBACK (gtk_tree_view_collapse_all), GTK_TREE_VIEW (treeview));
status_bar = gtk_statusbar_new ();
context_id = gtk_statusbar_get_context_id (GTK_STATUSBAR (status_bar), "Status Message");
gtk_statusbar_push (GTK_STATUSBAR (status_bar), context_id, "A status message.");
master_grid = gtk_grid_new ();
gtk_grid_attach (GTK_GRID (master_grid), toolbar, 0, 0, 1, 1);
gtk_grid_attach (GTK_GRID (master_grid), scrolled_win, 0, 1, 1, 1);
gtk_grid_attach (GTK_GRID (master_grid), status_bar, 0, 2, 1, 1);
gtk_container_add (GTK_CONTAINER (window), master_grid);
gtk_widget_show_all (window);
}
static void
populate_tree_store (GtkTreeStore *store)
{
GtkTreeIter item1, item2, item3;
for (int i = 0; i < 100; i++)
{
gtk_tree_store_append (store, &item1, NULL);
gtk_tree_store_set (store, &item1,
0, g_strdup_printf ("Window %d", i + 1),
1, "12345678",
2, "ClassName",
-1);
for (int j = 0; j < 3; j++)
{
gtk_tree_store_append (store, &item2, &item1);
gtk_tree_store_set (store, &item2,
0, g_strdup_printf ("Window %d%d", i + 1, i + 2),
1, "12345678",
2, "ClassName",
-1);
for (int k = 0; k < 5; k++)
{
gtk_tree_store_append (store, &item3, &item2);
gtk_tree_store_set (store, &item3,
0, g_strdup_printf ("Window %d%d%d", i + 1, j + 1, k+ 1),
1, "12345678",
2, "ClassName",
-1);
}
}
}
}
static void
setup_tree_view (GtkWidget *treeview)
{
GtkTreeViewColumn *window_column, *handle_column, *class_column;
GtkCellRenderer *renderer;
renderer = gtk_cell_renderer_text_new ();
window_column = gtk_tree_view_column_new_with_attributes
("Window", renderer, "text", 0, NULL);
gtk_tree_view_column_set_resizable (window_column, TRUE);
renderer = gtk_cell_renderer_text_new ();
handle_column = gtk_tree_view_column_new_with_attributes
("Handle", renderer, "text", 1, NULL);
renderer = gtk_cell_renderer_text_new ();
class_column = gtk_tree_view_column_new_with_attributes
("Class", renderer, "text", 2, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), handle_column);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), window_column);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), class_column);
}
@ivanstepanovftw

Copy link
Copy Markdown

Problem appears even in GTKmm... Somebody, report bug...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment