]> Dogcows Code - chaz/tint2/blob - src/tint2conf/theme_view.c
b6715c203716fed95a6d8e42eda5cdd67c3ef1dc
[chaz/tint2] / src / tint2conf / theme_view.c
1
2 #include <stdlib.h>
3 #include <glib.h>
4 #include <glib/gstdio.h>
5
6 #include "theme_view.h"
7
8 // The data columns that we export via the tree model interface
9 GtkWidget *g_theme_view;
10 GtkListStore *g_store;
11 int g_width_list, g_height_list;
12 GtkCellRenderer *g_renderer;
13
14
15
16 GtkWidget *create_view()
17 {
18 GtkTreeViewColumn *col;
19 GtkCellRenderer *renderer;
20 GtkWidget *view;
21
22 g_store = gtk_list_store_new(NB_COL, G_TYPE_STRING, GDK_TYPE_PIXBUF);
23
24 view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(g_store));
25 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE);
26 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE);
27
28 g_object_unref(g_store); // destroy store automatically with view
29
30 renderer = gtk_cell_renderer_text_new();
31 col = gtk_tree_view_column_new();
32 gtk_tree_view_column_pack_start(col, renderer, TRUE);
33 gtk_tree_view_column_add_attribute(col, renderer, "text", COL_THEME_FILE);
34 gtk_tree_view_column_set_visible(col, FALSE);
35 gtk_tree_view_append_column(GTK_TREE_VIEW(view),col);
36
37 g_width_list = 200;
38 g_height_list = 30;
39 g_renderer = gtk_cell_renderer_pixbuf_new();
40 g_object_set(g_renderer, "xalign", 0.0, NULL);
41 gtk_cell_renderer_set_fixed_size(g_renderer, g_width_list, g_height_list);
42 // specific to gtk-2.18 or higher
43 //gtk_cell_renderer_set_padding(g_renderer, 5, 5);
44 col = gtk_tree_view_column_new();
45 gtk_tree_view_column_pack_start(col, g_renderer, TRUE);
46 gtk_tree_view_column_add_attribute(col, g_renderer, "pixbuf", COL_SNAPSHOT);
47 gtk_tree_view_append_column(GTK_TREE_VIEW(view),col);
48
49 return view;
50 }
51
52
53 void custom_list_append(const gchar *name)
54 {
55 GtkTreeIter iter;
56
57 gtk_list_store_append(g_store, &iter);
58 gtk_list_store_set(g_store, &iter, COL_THEME_FILE, name, -1);
59 }
60
61
62 gboolean update_snapshot()
63 {
64 GtkTreeModel *model;
65 GtkTreeIter iter;
66 GdkPixbuf *icon;
67 gboolean have_iter, found = FALSE;
68
69 model = gtk_tree_view_get_model(GTK_TREE_VIEW(g_theme_view));
70 have_iter = gtk_tree_model_get_iter_first(model, &iter);
71 while (have_iter) {
72 gtk_tree_model_get(model, &iter, COL_SNAPSHOT, &icon, -1);
73 if (icon != NULL) {
74 g_object_unref(icon);
75 have_iter = gtk_tree_model_iter_next(model, &iter);
76 }
77 else {
78 found = TRUE;
79 break;
80 }
81 }
82
83 if (found) {
84 // build panel's snapshot
85 GdkPixbuf *pixbuf;
86 gchar *name, *snap, *cmd;
87 gint pixWidth, pixHeight;
88 gboolean changeSize = FALSE;
89
90 snap = g_build_filename (g_get_user_config_dir(), "tint2", "snap.jpg", NULL);
91 g_remove(snap);
92
93 gtk_tree_model_get(model, &iter, COL_THEME_FILE, &name, -1);
94 cmd = g_strdup_printf("tint2 -c \'%s\' -s \'%s\'", name, snap);
95 system(cmd);
96
97 // load
98 pixbuf = gdk_pixbuf_new_from_file(snap, NULL);
99 if (pixbuf == NULL) {
100 printf("snapshot NULL : %s\n", cmd);
101 found = FALSE;
102 }
103 g_free(snap);
104 g_free(cmd);
105 g_free(name);
106
107 pixWidth = gdk_pixbuf_get_width(pixbuf);
108 pixHeight = gdk_pixbuf_get_height(pixbuf);
109 if (g_width_list < pixWidth) {
110 g_width_list = pixWidth;
111 changeSize = TRUE;
112 }
113 if (g_height_list < (pixHeight+6)) {
114 g_height_list = pixHeight+6;
115 changeSize = TRUE;
116 }
117 if (changeSize)
118 gtk_cell_renderer_set_fixed_size(g_renderer, g_width_list, g_height_list);
119
120 gtk_list_store_set(g_store, &iter, COL_SNAPSHOT, pixbuf, -1);
121 }
122 return found;
123 }
124
125
126
This page took 0.036253 seconds and 3 git commands to generate.