int main (int argc, char *argv[]) { GList *themes, *list; gtk_init (&argc, &argv); mate_theme_init (); themes = mate_theme_meta_info_find_all (); if (themes == NULL) { g_print ("No meta themes were found.\n"); } else { g_print ("%d meta themes were found:\n", g_list_length (themes)); for (list = themes; list; list = list->next) { MateThemeMetaInfo *meta_theme_info; meta_theme_info = list->data; g_print ("\t%s\n", meta_theme_info->readable_name); } } g_list_free (themes); themes = mate_theme_icon_info_find_all (); if (themes == NULL) { g_print ("No icon themes were found.\n"); } else { g_print ("%d icon themes were found:\n", g_list_length (themes)); for (list = themes; list; list = list->next) { MateThemeIconInfo *icon_theme_info; icon_theme_info = list->data; g_print ("\t%s\n", icon_theme_info->name); } } g_list_free (themes); themes = mate_theme_info_find_by_type (MATE_THEME_MARCO); if (themes == NULL) { g_print ("No marco themes were found.\n"); } else { g_print ("%d marco themes were found:\n", g_list_length (themes)); for (list = themes; list; list = list->next) { MateThemeInfo *theme_info; theme_info = list->data; g_print ("\t%s\n", theme_info->name); } } g_list_free (themes); themes = mate_theme_info_find_by_type (MATE_THEME_GTK_2); if (themes == NULL) { gchar *str; g_print ("No gtk-2 themes were found. The following directories were tested:\n"); str = gtk_rc_get_theme_dir (); g_print ("\t%s\n", str); g_free (str); str = g_build_filename (g_get_home_dir (), ".themes", NULL); g_print ("\t%s\n", str); g_free (str); } else { g_print ("%d gtk-2 themes were found:\n", g_list_length (themes)); for (list = themes; list; list = list->next) { MateThemeInfo *theme_info; theme_info = list->data; g_print ("\t%s\n", theme_info->name); } } g_list_free (themes); themes = mate_theme_info_find_by_type (MATE_THEME_GTK_2_KEYBINDING); if (themes == NULL) { g_print ("No keybinding themes were found.\n"); } else { g_print ("%d keybinding themes were found:\n", g_list_length (themes)); for (list = themes; list; list = list->next) { MateThemeInfo *theme_info; theme_info = list->data; g_print ("\t%s\n", theme_info->name); } } g_list_free (themes); themes = mate_theme_cursor_info_find_all (); if (themes == NULL) { g_print ("No cursor themes were found.\n"); } else { g_print ("%d cursor themes were found:\n", g_list_length (themes)); for (list = themes; list; list = list->next) { MateThemeCursorInfo *cursor_theme_info; cursor_theme_info = list->data; g_print ("\t%s\n", cursor_theme_info->name); } } g_list_free (themes); return 0; }
static void prepare_list (AppearanceData *data, GtkWidget *list, ThemeType type, GCallback callback) { GtkListStore *store; GList *l, *themes = NULL; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeModel *sort_model; GdkPixbuf *thumbnail; const gchar *key; ThumbnailGenFunc generator; ThemeThumbnailFunc thumb_cb; ThemeConvData *conv_data; GSettings *settings; switch (type) { case THEME_TYPE_GTK: themes = mate_theme_info_find_by_type (MATE_THEME_GTK_2); thumbnail = data->gtk_theme_icon; settings = data->interface_settings; key = GTK_THEME_KEY; generator = (ThumbnailGenFunc) generate_gtk_theme_thumbnail_async; thumb_cb = (ThemeThumbnailFunc) gtk_theme_thumbnail_cb; break; case THEME_TYPE_WINDOW: themes = mate_theme_info_find_by_type (MATE_THEME_MARCO); thumbnail = data->window_theme_icon; settings = data->marco_settings; key = MARCO_THEME_KEY; generator = (ThumbnailGenFunc) generate_marco_theme_thumbnail_async; thumb_cb = (ThemeThumbnailFunc) marco_theme_thumbnail_cb; break; case THEME_TYPE_ICON: themes = mate_theme_icon_info_find_all (); thumbnail = data->icon_theme_icon; settings = data->interface_settings; key = ICON_THEME_KEY; generator = (ThumbnailGenFunc) generate_icon_theme_thumbnail_async; thumb_cb = (ThemeThumbnailFunc) icon_theme_thumbnail_cb; break; case THEME_TYPE_CURSOR: themes = mate_theme_cursor_info_find_all (); thumbnail = NULL; settings = data->mouse_settings; key = CURSOR_THEME_KEY; generator = NULL; thumb_cb = NULL; break; default: /* we don't deal with any other type of themes here */ return; } store = gtk_list_store_new (NUM_COLS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING); for (l = themes; l; l = g_list_next (l)) { MateThemeCommonInfo *theme = (MateThemeCommonInfo *) l->data; GtkTreeIter i; if (type == THEME_TYPE_CURSOR) { thumbnail = ((MateThemeCursorInfo *) theme)->thumbnail; } else { generator (theme, thumb_cb, data, NULL); } gtk_list_store_insert_with_values (store, &i, 0, COL_LABEL, theme->readable_name, COL_NAME, theme->name, COL_THUMBNAIL, thumbnail, -1); if (type == THEME_TYPE_CURSOR && thumbnail) { g_object_unref (thumbnail); thumbnail = NULL; } } g_list_free (themes); sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store)); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model), COL_LABEL, GTK_SORT_ASCENDING); if (type == THEME_TYPE_CURSOR) gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (sort_model), COL_LABEL, (GtkTreeIterCompareFunc) cursor_theme_sort_func, NULL, NULL); gtk_tree_view_set_model (GTK_TREE_VIEW (list), GTK_TREE_MODEL (sort_model)); renderer = gtk_cell_renderer_pixbuf_new (); g_object_set (renderer, "xpad", 3, "ypad", 3, NULL); column = gtk_tree_view_column_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_add_attribute (column, renderer, "pixbuf", COL_THUMBNAIL); gtk_tree_view_append_column (GTK_TREE_VIEW (list), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_add_attribute (column, renderer, "text", COL_LABEL); gtk_tree_view_append_column (GTK_TREE_VIEW (list), column); conv_data = g_new (ThemeConvData, 1); conv_data->data = data; conv_data->thumbnail = thumbnail; /* set useful data for callbacks */ g_object_set_data (G_OBJECT (list), THEME_DATA, conv_data); g_object_set_data (G_OBJECT (list), GSETTINGS_SETTINGS, settings); g_object_set_data (G_OBJECT (list), GSETTINGS_KEY, g_strdup(key)); /* select in treeview the theme set in gsettings */ GtkTreeModel *treemodel; treemodel = gtk_tree_view_get_model (GTK_TREE_VIEW (list)); gchar *theme = g_settings_get_string (settings, key); gchar *path = find_string_in_model (treemodel, theme, COL_NAME); if (path) { GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); GtkTreePath *treepath = gtk_tree_path_new_from_string (path); gtk_tree_selection_select_path (selection, treepath); gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (list), treepath, NULL, FALSE, 0, 0); gtk_tree_path_free (treepath); g_free (path); } if (theme) g_free (theme); /* connect to gsettings change event */ gchar *signal_name = g_strdup_printf("changed::%s", key); g_signal_connect (settings, signal_name, G_CALLBACK (treeview_gsettings_changed_callback), list); g_free (signal_name); /* connect to treeview change event */ g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (list)), "changed", G_CALLBACK (treeview_selection_changed_callback), list); }