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.
144 lines
3.8 KiB
144 lines
3.8 KiB
9 years ago
|
#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;
|
||
|
}
|