You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
obconf-qt-packaging/src/preview_update.c

144 lines
3.8 KiB

#include "preview_update.h"
#include "preview.h"
#include "main.h"
static gboolean restart_theme_preview_update = TRUE;
static GtkTreeView *tree_view = NULL;
static GtkListStore *list_store = NULL;
static gchar *title_layout = NULL;
static RrFont *active_window_font = NULL;
static RrFont *inactive_window_font = NULL;
static RrFont *menu_title_font = NULL;
static RrFont *menu_item_font = NULL;
static RrFont *osd_active_font = NULL;
static RrFont *osd_inactive_font = NULL;
static gboolean update_theme_preview_iterate(gpointer data);
void preview_update_all()
{
if (!list_store) return;
if (!RR_CHECK_VERSION(3,5,0)) return;
g_idle_remove_by_data(list_store);
if (!(title_layout && active_window_font && inactive_window_font &&
menu_title_font && menu_item_font &&
osd_active_font && osd_inactive_font))
return; /* not set up */
restart_theme_preview_update = TRUE;
g_idle_add_full(G_PRIORITY_LOW,
update_theme_preview_iterate,
list_store, NULL);
}
void preview_update_set_tree_view(GtkTreeView *tr, GtkListStore *ls)
{
g_assert(!!tr == !!ls);
if (list_store) g_idle_remove_by_data(list_store);
tree_view = tr;
list_store = ls;
if (list_store) preview_update_all();
}
void preview_update_set_active_font(RrFont *f)
{
RrFontClose(active_window_font);
active_window_font = f;
preview_update_all();
}
void preview_update_set_inactive_font(RrFont *f)
{
RrFontClose(inactive_window_font);
inactive_window_font = f;
preview_update_all();
}
void preview_update_set_menu_header_font(RrFont *f)
{
RrFontClose(menu_title_font);
menu_title_font = f;
preview_update_all();
}
void preview_update_set_menu_item_font(RrFont *f)
{
RrFontClose(menu_item_font);
menu_item_font = f;
preview_update_all();
}
void preview_update_set_osd_active_font(RrFont *f)
{
RrFontClose(osd_active_font);
osd_active_font = f;
preview_update_all();
}
void preview_update_set_osd_inactive_font(RrFont *f)
{
RrFontClose(osd_inactive_font);
osd_inactive_font = f;
preview_update_all();
}
void preview_update_set_title_layout(const gchar *layout)
{
g_free(title_layout);
title_layout = g_strdup(layout);
preview_update_all();
}
static gboolean update_theme_preview_iterate(gpointer data)
{
GtkListStore *ls = data;
GdkPixbuf *preview;
static GtkTreeIter iter;
gchar *name;
if (restart_theme_preview_update) {
/* get the first iterator position if there is such a thing */
if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ls), &iter)) {
/* nothing to show */
obconf_show_main();
return FALSE;
}
restart_theme_preview_update = FALSE;
} else {
/* get the next iterator position if there is such a thing */
if (!gtk_tree_model_iter_next(GTK_TREE_MODEL(ls), &iter)) {
GtkTreePath *path;
restart_theme_preview_update = TRUE;
gtk_tree_view_get_cursor(tree_view, &path, NULL);
if (path) {
gtk_tree_view_scroll_to_cell(tree_view, path, NULL,
FALSE, 0, 0);
gtk_tree_path_free(path);
}
obconf_show_main();
return FALSE;
}
}
gtk_tree_model_get(GTK_TREE_MODEL(ls), &iter, 0, &name, -1);
preview = preview_theme(name, title_layout, active_window_font,
inactive_window_font, menu_title_font,
menu_item_font, osd_active_font,
osd_inactive_font);
if (preview)
gtk_list_store_set(GTK_LIST_STORE(ls), &iter, 1, preview, -1);
return TRUE;
}