diff options
Diffstat (limited to 'capplets')
-rw-r--r-- | capplets/common/mate-theme-info.c | 732 |
1 files changed, 381 insertions, 351 deletions
diff --git a/capplets/common/mate-theme-info.c b/capplets/common/mate-theme-info.c index ea9a6635..47412a4d 100644 --- a/capplets/common/mate-theme-info.c +++ b/capplets/common/mate-theme-info.c @@ -66,26 +66,26 @@ */ typedef struct _ThemeCallbackData { - ThemeChangedCallback func; - gpointer data; + ThemeChangedCallback func; + gpointer data; } ThemeCallbackData; typedef struct { - GFileMonitor* common_theme_dir_handle; - GFileMonitor* gtk2_dir_handle; - GFileMonitor* keybinding_dir_handle; - GFileMonitor* marco_dir_handle; - gint priority; + GFileMonitor *common_theme_dir_handle; + GFileMonitor *gtk2_dir_handle; + GFileMonitor *keybinding_dir_handle; + GFileMonitor *marco_dir_handle; + gint priority; } CommonThemeDirMonitorData; typedef struct { - GFileMonitor* common_icon_theme_dir_handle; - gint priority; + GFileMonitor *common_icon_theme_dir_handle; + gint priority; } CommonIconThemeDirMonitorData; typedef struct { - GHashTable* handle_hash; - gint priority; + GHashTable *handle_hash; + gint priority; } CallbackTuple; /* Hash tables */ @@ -102,29 +102,27 @@ typedef struct { * well as globally in $prefix. All access to them must be done via helper * functions. */ -static GList* callbacks = NULL; - -static GHashTable* meta_theme_hash_by_uri; -static GHashTable* meta_theme_hash_by_name; -static GHashTable* icon_theme_hash_by_uri; -static GHashTable* icon_theme_hash_by_name; -static GHashTable* cursor_theme_hash_by_uri; -static GHashTable* cursor_theme_hash_by_name; -static GHashTable* theme_hash_by_uri; -static GHashTable* theme_hash_by_name; -static gboolean initting = FALSE; +static GList *callbacks = NULL; + +static GHashTable *meta_theme_hash_by_uri; +static GHashTable *meta_theme_hash_by_name; +static GHashTable *icon_theme_hash_by_uri; +static GHashTable *icon_theme_hash_by_name; +static GHashTable *cursor_theme_hash_by_uri; +static GHashTable *cursor_theme_hash_by_name; +static GHashTable *theme_hash_by_uri; +static GHashTable *theme_hash_by_name; +static gboolean initting = FALSE; /* private functions */ -static gint safe_strcmp(const gchar* a_str, const gchar* b_str) -{ - if (a_str && b_str) - { - return strcmp(a_str, b_str); - } - else - { - return a_str - b_str; - } +static gint +safe_strcmp (const gchar *a_str, + const gchar *b_str) +{ + if (a_str && b_str) + return strcmp (a_str, b_str); + else + return a_str - b_str; } static GFileType @@ -179,7 +177,9 @@ add_theme_to_hash_by_name (GHashTable *hash_table, if (!added) list = g_list_append (list, info); } - g_hash_table_insert (hash_table, g_strdup (info->name), list); + g_hash_table_insert (hash_table, + g_strdup (info->name), + list); } static void @@ -273,164 +273,176 @@ theme_free (MateThemeCommonInfo *info) } } -GQuark mate_theme_info_error_quark(void) +GQuark +mate_theme_info_error_quark (void) { - return g_quark_from_static_string("mate-theme-info-error-quark"); + return g_quark_from_static_string ("mate-theme-info-error-quark"); } -MateThemeMetaInfo* mate_theme_read_meta_theme(GFile* meta_theme_uri) +MateThemeMetaInfo * +mate_theme_read_meta_theme (GFile *meta_theme_uri) { - MateThemeMetaInfo* meta_theme_info; - GFile* common_theme_dir_uri; - MateDesktopItem* meta_theme_ditem; - gchar* meta_theme_file; - const gchar* str; - gchar* scheme; - - meta_theme_file = g_file_get_uri(meta_theme_uri); - meta_theme_ditem = mate_desktop_item_new_from_uri(meta_theme_file, 0, NULL); - g_free(meta_theme_file); - - if (meta_theme_ditem == NULL) - return NULL; - - common_theme_dir_uri = g_file_get_parent(meta_theme_uri); - meta_theme_info = mate_theme_meta_info_new(); - meta_theme_info->path = g_file_get_path(meta_theme_uri); - meta_theme_info->name = g_file_get_basename(common_theme_dir_uri); - g_object_unref(common_theme_dir_uri); - - str = mate_desktop_item_get_localestring(meta_theme_ditem, THEME_NAME); - - if (!str) - { - str = mate_desktop_item_get_localestring(meta_theme_ditem, MATE_DESKTOP_ITEM_NAME); - if (!str) - { /* shouldn't reach */ - mate_theme_meta_info_free(meta_theme_info); - return NULL; - } - } - - meta_theme_info->readable_name = g_strdup(str); - - str = mate_desktop_item_get_localestring(meta_theme_ditem, THEME_COMMENT); - - if (str == NULL) - str = mate_desktop_item_get_localestring(meta_theme_ditem, MATE_DESKTOP_ITEM_COMMENT); - - if (str != NULL) - meta_theme_info->comment = g_strdup(str); - - str = mate_desktop_item_get_string(meta_theme_ditem, MATE_DESKTOP_ITEM_ICON); - - if (str != NULL) - meta_theme_info->icon_file = g_strdup(str); - - str = mate_desktop_item_get_string(meta_theme_ditem, GTK_THEME_KEY); - - if (str == NULL) - { - mate_theme_meta_info_free(meta_theme_info); - return NULL; - } - meta_theme_info->gtk_theme_name = g_strdup(str); - - str = mate_desktop_item_get_string(meta_theme_ditem, GTK_COLOR_SCHEME_KEY); - - if (str == NULL || str[0] == '\0') - scheme = gtkrc_get_color_scheme_for_theme(meta_theme_info->gtk_theme_name); - else - scheme = g_strdup(str); + MateThemeMetaInfo *meta_theme_info; + GFile *common_theme_dir_uri; + MateDesktopItem *meta_theme_ditem; + gchar *meta_theme_file; + const gchar *str; + gchar *scheme; - if (scheme != NULL) - { - meta_theme_info->gtk_color_scheme = scheme; + meta_theme_file = g_file_get_uri (meta_theme_uri); + meta_theme_ditem = mate_desktop_item_new_from_uri (meta_theme_file, 0, NULL); + g_free (meta_theme_file); - for (; *scheme != '\0'; scheme++) - if (*scheme == ',') - *scheme = '\n'; - } - - str = mate_desktop_item_get_string (meta_theme_ditem, MARCO_THEME_KEY); - - if (str == NULL) - { - mate_theme_meta_info_free (meta_theme_info); - return NULL; - } - - meta_theme_info->marco_theme_name = g_strdup (str); - - str = mate_desktop_item_get_string(meta_theme_ditem, ICON_THEME_KEY); - - if (str == NULL) - { - mate_theme_meta_info_free(meta_theme_info); - return NULL; - } - - meta_theme_info->icon_theme_name = g_strdup(str); - - str = mate_desktop_item_get_string(meta_theme_ditem, NOTIFICATION_THEME_KEY); - - if (str != NULL) - meta_theme_info->notification_theme_name = g_strdup(str); - - str = mate_desktop_item_get_string(meta_theme_ditem, CURSOR_THEME_KEY); - - if (str != NULL) - { - meta_theme_info->cursor_theme_name = g_strdup(str); - - str = mate_desktop_item_get_string(meta_theme_ditem, CURSOR_SIZE_KEY); - - if (str) - meta_theme_info->cursor_size = (int) g_ascii_strtoll(str, NULL, 10); - else - meta_theme_info->cursor_size = 24; - } - else - { - meta_theme_info->cursor_theme_name = g_strdup("default"); - meta_theme_info->cursor_size = 24; - } - - str = mate_desktop_item_get_string(meta_theme_ditem, APPLICATION_FONT_KEY); - - if (str != NULL) - meta_theme_info->application_font = g_strdup(str); - - str = mate_desktop_item_get_string(meta_theme_ditem, DOCUMENTS_FONT_KEY); - - if (str != NULL) - meta_theme_info->documents_font = g_strdup(str); + if (meta_theme_ditem == NULL) + return NULL; - str = mate_desktop_item_get_string(meta_theme_ditem, DESKTOP_FONT_KEY); + common_theme_dir_uri = g_file_get_parent (meta_theme_uri); - if (str != NULL) - meta_theme_info->desktop_font = g_strdup(str); + meta_theme_info = mate_theme_meta_info_new (); - str = mate_desktop_item_get_string(meta_theme_ditem, WINDOWTITLE_FONT_KEY); + /* meta_theme_info->path */ + meta_theme_info->path = g_file_get_path (meta_theme_uri); - if (str != NULL) - meta_theme_info->windowtitle_font = g_strdup(str); + /* meta_theme_info->name */ + meta_theme_info->name = g_file_get_basename (common_theme_dir_uri); - str = mate_desktop_item_get_string(meta_theme_ditem, MONOSPACE_FONT_KEY); + g_object_unref (common_theme_dir_uri); - if (str != NULL) - meta_theme_info->monospace_font = g_strdup(str); + /* meta_theme_info->readable_name */ + str = mate_desktop_item_get_localestring (meta_theme_ditem, + THEME_NAME); + if (str == NULL) { + str = mate_desktop_item_get_localestring (meta_theme_ditem, + MATE_DESKTOP_ITEM_NAME); + if (str == NULL) /* shouldn't reach */ + goto mate_theme_read_meta_theme_out; + } + meta_theme_info->readable_name = g_strdup (str); + + /* meta_theme_info->comment */ + str = mate_desktop_item_get_localestring (meta_theme_ditem, + THEME_COMMENT); + if (str == NULL) + str = mate_desktop_item_get_localestring (meta_theme_ditem, + MATE_DESKTOP_ITEM_COMMENT); + if (str != NULL) + meta_theme_info->comment = g_strdup (str); + + /* meta_theme_info->icon_file */ + str = mate_desktop_item_get_string (meta_theme_ditem, + MATE_DESKTOP_ITEM_ICON); + if (str != NULL) + meta_theme_info->icon_file = g_strdup(str); + + /* meta_theme_info->gtk_theme_name */ + str = mate_desktop_item_get_string (meta_theme_ditem, + GTK_THEME_KEY); + if (str == NULL) + goto mate_theme_read_meta_theme_out; + meta_theme_info->gtk_theme_name = g_strdup (str); + + /* meta_theme_info->gtk_color_scheme */ + str = mate_desktop_item_get_string (meta_theme_ditem, + GTK_COLOR_SCHEME_KEY); + if (str == NULL || str[0] == '\0') + scheme = gtkrc_get_color_scheme_for_theme (meta_theme_info->gtk_theme_name); + else + scheme = g_strdup(str); - str = mate_desktop_item_get_string(meta_theme_ditem, BACKGROUND_IMAGE_KEY); + if (scheme != NULL) { + meta_theme_info->gtk_color_scheme = scheme; - if (str != NULL) - meta_theme_info->background_image = g_strdup(str); + for (; *scheme != '\0'; scheme++) + if (*scheme == ',') - meta_theme_info->hidden = mate_desktop_item_get_boolean(meta_theme_ditem, HIDDEN_KEY); + *scheme = '\n'; + } - mate_desktop_item_unref(meta_theme_ditem); + /* meta_theme_info->marco_theme_name */ + str = mate_desktop_item_get_string (meta_theme_ditem, + MARCO_THEME_KEY); + if (str == NULL) + goto mate_theme_read_meta_theme_out; + meta_theme_info->marco_theme_name = g_strdup (str); + + /* meta_theme_info->icon_theme_name */ + str = mate_desktop_item_get_string (meta_theme_ditem, + ICON_THEME_KEY); + if (str == NULL) + goto mate_theme_read_meta_theme_out; + meta_theme_info->icon_theme_name = g_strdup (str); + + /* meta_theme_info->notification_theme_name */ + str = mate_desktop_item_get_string (meta_theme_ditem, + NOTIFICATION_THEME_KEY); + if (str != NULL) + meta_theme_info->notification_theme_name = g_strdup (str); + + /* meta_theme_info->cursor_theme_name + * meta_theme_info->cursor_size */ + str = mate_desktop_item_get_string (meta_theme_ditem, + CURSOR_THEME_KEY); + if (str != NULL) { + meta_theme_info->cursor_theme_name = g_strdup (str); + + str = mate_desktop_item_get_string (meta_theme_ditem, + CURSOR_SIZE_KEY); + if (str != NULL) + meta_theme_info->cursor_size = (int) g_ascii_strtoll (str, NULL, 10); + else + meta_theme_info->cursor_size = 24; + } else { + meta_theme_info->cursor_theme_name = g_strdup ("default"); + meta_theme_info->cursor_size = 24; + } - return meta_theme_info; + /* meta_theme_info->application_font */ + str = mate_desktop_item_get_string (meta_theme_ditem, + APPLICATION_FONT_KEY); + if (str != NULL) + meta_theme_info->application_font = g_strdup (str); + + /* meta_theme_info->documents_font */ + str = mate_desktop_item_get_string (meta_theme_ditem, + DOCUMENTS_FONT_KEY); + if (str != NULL) + meta_theme_info->documents_font = g_strdup (str); + + /* meta_theme_info->desktop_font */ + str = mate_desktop_item_get_string (meta_theme_ditem, + DESKTOP_FONT_KEY); + if (str != NULL) + meta_theme_info->desktop_font = g_strdup (str); + + /* meta_theme_info->windowtitle_font */ + str = mate_desktop_item_get_string (meta_theme_ditem, + WINDOWTITLE_FONT_KEY); + if (str != NULL) + meta_theme_info->windowtitle_font = g_strdup (str); + + /* meta_theme_info->monospace_font */ + str = mate_desktop_item_get_string (meta_theme_ditem, + MONOSPACE_FONT_KEY); + if (str != NULL) + meta_theme_info->monospace_font = g_strdup (str); + + /* meta_theme_info->background_image */ + str = mate_desktop_item_get_string (meta_theme_ditem, + BACKGROUND_IMAGE_KEY); + if (str != NULL) + meta_theme_info->background_image = g_strdup (str); + + /* meta_theme_info->hidden */ + meta_theme_info->hidden = mate_desktop_item_get_boolean (meta_theme_ditem, + HIDDEN_KEY); + + mate_desktop_item_unref (meta_theme_ditem); + + return meta_theme_info; + +mate_theme_read_meta_theme_out: + mate_theme_meta_info_free (meta_theme_info); + return NULL; } static MateThemeIconInfo * @@ -450,26 +462,26 @@ read_icon_theme (GFile *icon_theme_uri) if (icon_theme_ditem == NULL) return NULL; - name = mate_desktop_item_get_localestring (icon_theme_ditem, "Icon Theme/Name"); + name = mate_desktop_item_get_localestring (icon_theme_ditem, + "Icon Theme/Name"); if (!name) { - name = mate_desktop_item_get_localestring (icon_theme_ditem, MATE_DESKTOP_ITEM_NAME); - if (!name) { - mate_desktop_item_unref (icon_theme_ditem); - return NULL; - } + name = mate_desktop_item_get_localestring (icon_theme_ditem, + MATE_DESKTOP_ITEM_NAME); + if (!name) + goto read_icon_theme_out; } /* If index.theme has no Directories entry, it is only a cursor theme */ - directories = mate_desktop_item_get_string (icon_theme_ditem, "Icon Theme/Directories"); - if (directories == NULL) { - mate_desktop_item_unref (icon_theme_ditem); - return NULL; - } + directories = mate_desktop_item_get_string (icon_theme_ditem, + "Icon Theme/Directories"); + if (directories == NULL) + goto read_icon_theme_out; icon_theme_info = mate_theme_icon_info_new (); icon_theme_info->readable_name = g_strdup (name); icon_theme_info->path = g_file_get_path (icon_theme_uri); - icon_theme_info->hidden = mate_desktop_item_get_boolean (icon_theme_ditem, "Icon Theme/Hidden"); + icon_theme_info->hidden = mate_desktop_item_get_boolean (icon_theme_ditem, + "Icon Theme/Hidden"); dir_name = g_path_get_dirname (icon_theme_info->path); icon_theme_info->name = g_path_get_basename (dir_name); g_free (dir_name); @@ -477,6 +489,10 @@ read_icon_theme (GFile *icon_theme_uri) mate_desktop_item_unref (icon_theme_ditem); return icon_theme_info; + +read_icon_theme_out: + mate_desktop_item_unref (icon_theme_ditem); + return NULL; } static void @@ -519,11 +535,11 @@ gdk_pixbuf_from_xcursor_image (XcursorImage *cursor) } pixbuf = gdk_pixbuf_new_from_data ((const guchar *) buf, - GDK_COLORSPACE_RGB, TRUE, 8, - cursor->width, cursor->height, - cursor->width * 4, - (GdkPixbufDestroyNotify) g_free, - NULL); + GDK_COLORSPACE_RGB, TRUE, 8, + cursor->width, cursor->height, + cursor->width * 4, + (GdkPixbufDestroyNotify) g_free, + NULL); if (!pixbuf) g_free (buf); @@ -599,14 +615,14 @@ read_cursor_theme (GFile *cursor_theme_uri) const gchar *readable_name; readable_name = mate_desktop_item_get_string (cursor_theme_ditem, - "Icon Theme/Name"); + "Icon Theme/Name"); if (readable_name) cursor_theme_info->readable_name = g_strdup (readable_name); else cursor_theme_info->readable_name = g_strdup (name); cursor_theme_info->hidden = mate_desktop_item_get_boolean (cursor_theme_ditem, - "Icon Theme/Hidden"); + "Icon Theme/Hidden"); mate_desktop_item_unref (cursor_theme_ditem); } else { @@ -623,8 +639,8 @@ read_cursor_theme (GFile *cursor_theme_uri) static void handle_change_signal (gpointer data, - MateThemeChangeType change_type, - MateThemeElement element_type) + MateThemeChangeType change_type, + MateThemeElement element_type) { #ifdef DEBUG gchar *type_str = NULL; @@ -684,7 +700,7 @@ handle_change_signal (gpointer data, /* index_uri should point to the gtkrc file that was modified */ static void update_theme_index (GFile *index_uri, - MateThemeElement key_element, + MateThemeElement key_element, gint priority) { gboolean theme_exists; @@ -762,27 +778,33 @@ static void update_gtk2_index (GFile *gtk2_index_uri, gint priority) { - update_theme_index (gtk2_index_uri, MATE_THEME_GTK_2, priority); + update_theme_index (gtk2_index_uri, + MATE_THEME_GTK_2, + priority); } static void update_keybinding_index (GFile *keybinding_index_uri, gint priority) { - update_theme_index (keybinding_index_uri, MATE_THEME_GTK_2_KEYBINDING, priority); + update_theme_index (keybinding_index_uri, + MATE_THEME_GTK_2_KEYBINDING, + priority); } static void update_marco_index (GFile *marco_index_uri, - gint priority) + gint priority) { - update_theme_index (marco_index_uri, MATE_THEME_MARCO, priority); + update_theme_index (marco_index_uri, + MATE_THEME_MARCO, + priority); } static void -update_common_theme_dir_index (GFile *theme_index_uri, - MateThemeType type, - gint priority) +update_common_theme_dir_index (GFile *theme_index_uri, + MateThemeType type, + gint priority) { gboolean theme_exists; MateThemeCommonInfo *theme_info = NULL; @@ -870,21 +892,27 @@ static void update_meta_theme_index (GFile *meta_theme_index_uri, gint priority) { - update_common_theme_dir_index (meta_theme_index_uri, MATE_THEME_TYPE_METATHEME, priority); + update_common_theme_dir_index (meta_theme_index_uri, + MATE_THEME_TYPE_METATHEME, + priority); } static void update_icon_theme_index (GFile *icon_theme_index_uri, gint priority) { - update_common_theme_dir_index (icon_theme_index_uri, MATE_THEME_TYPE_ICON, priority); + update_common_theme_dir_index (icon_theme_index_uri, + MATE_THEME_TYPE_ICON, + priority); } static void update_cursor_theme_index (GFile *cursor_theme_index_uri, gint priority) { - update_common_theme_dir_index (cursor_theme_index_uri, MATE_THEME_TYPE_CURSOR, priority); + update_common_theme_dir_index (cursor_theme_index_uri, + MATE_THEME_TYPE_CURSOR, + priority); } static void @@ -927,10 +955,10 @@ keybinding_dir_changed (GFileMonitor *monitor, static void marco_dir_changed (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type, - CommonThemeDirMonitorData *monitor_data) + GFile *file, + GFile *other_file, + GFileMonitorEvent event_type, + CommonThemeDirMonitorData *monitor_data) { gchar *affected_file; @@ -1015,7 +1043,8 @@ add_common_theme_dir_monitor (GFile *theme_dir_uri, return FALSE; g_signal_connect (monitor, "changed", - (GCallback) common_theme_dir_changed, monitor_data); + (GCallback) common_theme_dir_changed, + monitor_data); monitor_data->common_theme_dir_handle = monitor; @@ -1030,7 +1059,8 @@ add_common_theme_dir_monitor (GFile *theme_dir_uri, monitor = g_file_monitor_directory (subdir, G_FILE_MONITOR_NONE, NULL, NULL); if (monitor != NULL) { g_signal_connect (monitor, "changed", - (GCallback) gtk2_dir_changed, monitor_data); + (GCallback) gtk2_dir_changed, + monitor_data); } monitor_data->gtk2_dir_handle = monitor; g_object_unref (subdir); @@ -1046,7 +1076,8 @@ add_common_theme_dir_monitor (GFile *theme_dir_uri, monitor = g_file_monitor_directory (subdir, G_FILE_MONITOR_NONE, NULL, NULL); if (monitor != NULL) { g_signal_connect (monitor, "changed", - (GCallback) keybinding_dir_changed, monitor_data); + (GCallback) keybinding_dir_changed, + monitor_data); } monitor_data->keybinding_dir_handle = monitor; g_object_unref (subdir); @@ -1069,7 +1100,8 @@ add_common_theme_dir_monitor (GFile *theme_dir_uri, monitor = g_file_monitor_directory (subdir, G_FILE_MONITOR_NONE, NULL, NULL); if (monitor != NULL) { g_signal_connect (monitor, "changed", - (GCallback) marco_dir_changed, monitor_data); + (GCallback) marco_dir_changed, + monitor_data); } monitor_data->marco_dir_handle = monitor; g_object_unref (subdir); @@ -1096,7 +1128,8 @@ add_common_icon_theme_dir_monitor (GFile *theme_dir_uri return FALSE; g_signal_connect (monitor, "changed", - (GCallback) common_icon_theme_dir_changed, monitor_data); + (GCallback) common_icon_theme_dir_changed, + monitor_data); monitor_data->common_icon_theme_dir_handle = monitor; return TRUE; @@ -1118,11 +1151,11 @@ remove_common_icon_theme_dir_monitor (CommonIconThemeDirMonitorData *monitor_dat } static void -top_theme_dir_changed (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type, - CallbackTuple *tuple) +top_theme_dir_changed (GFileMonitor *monitor, + GFile *file, + GFile *other_file, + GFileMonitorEvent event_type, + CallbackTuple *tuple) { GHashTable *handle_hash; CommonThemeDirMonitorData *monitor_data; @@ -1153,11 +1186,11 @@ top_theme_dir_changed (GFileMonitor *monitor, } static void -top_icon_theme_dir_changed (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type, - CallbackTuple *tuple) +top_icon_theme_dir_changed (GFileMonitor *monitor, + GFile *file, + GFile *other_file, + GFileMonitorEvent event_type, + CallbackTuple *tuple) { GHashTable *handle_hash; CommonIconThemeDirMonitorData *monitor_data; @@ -1355,69 +1388,61 @@ mate_theme_info_find_by_type (guint elements) return data.list; } -static void mate_theme_info_find_all_helper(const gchar* key, GList* list, GList** themes) +static void +mate_theme_info_find_all_helper (const gchar *key, + GList *list, + GList **themes) { - /* only return visible themes */ - if (!((MateThemeCommonInfo*) list->data)->hidden) - { - *themes = g_list_prepend(*themes, list->data); - } + /* only return visible themes */ + if (!((MateThemeCommonInfo*) list->data)->hidden) + *themes = g_list_prepend(*themes, list->data); } -gchar* gtk_theme_info_missing_engine(const gchar* gtk_theme, gboolean name_only) -{ - gchar* engine = NULL; - gchar* gtkrc; - - gtkrc = gtkrc_find_named(gtk_theme); - - if (gtkrc) - { - GSList* engines = NULL; - GSList* l; - - gtkrc_get_details(gtkrc, &engines, NULL); - - g_free(gtkrc); - - for (l = engines; l; l = l->next) - { - /* This code do not work on distros with more of one gtk theme - * engine path. Like debian. But yes on others like Archlinux. - * Example, debian use: - * /usr/lib/i386-linux-gnu/2.10.0/engines/ - * and /usr/lib/2.10.0/engines/ - * - * some links - * http://forums.linuxmint.com/viewtopic.php?f=190&t=85015 - */ - gchar* full = g_module_build_path(GTK_ENGINE_DIR, l->data); - - gboolean found = g_file_test(full, G_FILE_TEST_EXISTS); - - if (!found) - { - if (name_only) - { - engine = g_strdup(l->data); - g_free(full); - } - else - { - engine = full; - } - - break; - } - - g_free(full); - } - - g_slist_foreach(engines, (GFunc) g_free, NULL); - g_slist_free(engines); - } +gchar* +gtk_theme_info_missing_engine (const gchar *gtk_theme, + gboolean name_only) +{ + gchar* engine = NULL; + gchar* gtkrc; + + gtkrc = gtkrc_find_named (gtk_theme); + + if (gtkrc) { + GSList *engines = NULL; + GSList *l; + + gtkrc_get_details (gtkrc, &engines, NULL); + g_free (gtkrc); + + for (l = engines; l; l = l->next) { + /* This code do not work on distros with more of one gtk theme + * engine path. Like debian. But yes on others like Archlinux. + * Example, debian use: + * /usr/lib/i386-linux-gnu/2.10.0/engines/ + * and /usr/lib/2.10.0/engines/ + * + * some links + * http://forums.linuxmint.com/viewtopic.php?f=190&t=85015 + */ + gchar *full = g_module_build_path (GTK_ENGINE_DIR, l->data); + gboolean found = g_file_test (full, G_FILE_TEST_EXISTS); + if (!found) { + if (name_only) { + engine = g_strdup(l->data); + g_free (full); + } else { + engine = full; + } + break; + } + + g_free(full); + } - return engine; + g_slist_foreach (engines, (GFunc) g_free, NULL); + g_slist_free (engines); + } + return engine; } /* Icon themes */ @@ -1464,7 +1489,7 @@ mate_theme_icon_info_find_all (void) gint mate_theme_icon_info_compare (MateThemeIconInfo *a, - MateThemeIconInfo *b) + MateThemeIconInfo *b) { gint cmp; @@ -1521,7 +1546,7 @@ mate_theme_cursor_info_find_all (void) gint mate_theme_cursor_info_compare (MateThemeCursorInfo *a, - MateThemeCursorInfo *b) + MateThemeCursorInfo *b) { gint cmp; @@ -1532,95 +1557,98 @@ mate_theme_cursor_info_compare (MateThemeCursorInfo *a, } /* Meta themes */ -MateThemeMetaInfo* mate_theme_meta_info_new(void) +MateThemeMetaInfo* +mate_theme_meta_info_new (void) { - MateThemeMetaInfo* theme_info; + MateThemeMetaInfo* theme_info; - theme_info = g_new0(MateThemeMetaInfo, 1); - theme_info->type = MATE_THEME_TYPE_METATHEME; + theme_info = g_new0 (MateThemeMetaInfo, 1); + theme_info->type = MATE_THEME_TYPE_METATHEME; - return theme_info; + return theme_info; } -void mate_theme_meta_info_free(MateThemeMetaInfo* meta_theme_info) -{ - g_free (meta_theme_info->application_font); - g_free (meta_theme_info->background_image); - g_free (meta_theme_info->comment); - g_free (meta_theme_info->cursor_theme_name); - g_free (meta_theme_info->desktop_font); - g_free (meta_theme_info->documents_font); - g_free (meta_theme_info->gtk_color_scheme); - g_free (meta_theme_info->gtk_theme_name); - g_free (meta_theme_info->icon_file); - g_free (meta_theme_info->icon_theme_name); - g_free (meta_theme_info->marco_theme_name); - g_free (meta_theme_info->monospace_font); - g_free (meta_theme_info->name); - g_free (meta_theme_info->notification_theme_name); - g_free (meta_theme_info->path); - g_free (meta_theme_info->sound_theme_name); - g_free (meta_theme_info->windowtitle_font); - g_free (meta_theme_info->readable_name); - g_free (meta_theme_info); +void +mate_theme_meta_info_free (MateThemeMetaInfo *meta_theme_info) +{ + g_free (meta_theme_info->application_font); + g_free (meta_theme_info->background_image); + g_free (meta_theme_info->comment); + g_free (meta_theme_info->cursor_theme_name); + g_free (meta_theme_info->desktop_font); + g_free (meta_theme_info->documents_font); + g_free (meta_theme_info->gtk_color_scheme); + g_free (meta_theme_info->gtk_theme_name); + g_free (meta_theme_info->icon_file); + g_free (meta_theme_info->icon_theme_name); + g_free (meta_theme_info->marco_theme_name); + g_free (meta_theme_info->monospace_font); + g_free (meta_theme_info->name); + g_free (meta_theme_info->notification_theme_name); + g_free (meta_theme_info->path); + g_free (meta_theme_info->sound_theme_name); + g_free (meta_theme_info->windowtitle_font); + g_free (meta_theme_info->readable_name); + g_free (meta_theme_info); } -gboolean mate_theme_meta_info_validate(const MateThemeMetaInfo* info, GError** error) +gboolean +mate_theme_meta_info_validate (const MateThemeMetaInfo *info, + GError **error) { - MateThemeInfo* theme; - - g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + MateThemeInfo *theme; - theme = mate_theme_info_find (info->gtk_theme_name); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - if (!theme || !theme->has_gtk) - { - g_set_error (error, MATE_THEME_ERROR, MATE_THEME_ERROR_GTK_THEME_NOT_AVAILABLE, - _("This theme will not look as intended because the required GTK+ theme '%s' is not installed."), - info->gtk_theme_name); - return FALSE; - } - - theme = mate_theme_info_find (info->marco_theme_name); + theme = mate_theme_info_find (info->gtk_theme_name); + if (!theme || !theme->has_gtk) { + g_set_error (error, MATE_THEME_ERROR, MATE_THEME_ERROR_GTK_THEME_NOT_AVAILABLE, + _("This theme will not look as intended because the required GTK+ theme '%s' is not installed."), + info->gtk_theme_name); + return FALSE; + } - if (!theme || !theme->has_marco) - { - g_set_error (error, MATE_THEME_ERROR, MATE_THEME_ERROR_WM_THEME_NOT_AVAILABLE, - _("This theme will not look as intended because the required window manager theme '%s' is not installed."), - info->marco_theme_name); - return FALSE; - } + theme = mate_theme_info_find (info->marco_theme_name); + if (!theme || !theme->has_marco) { + g_set_error (error, MATE_THEME_ERROR, MATE_THEME_ERROR_WM_THEME_NOT_AVAILABLE, + _("This theme will not look as intended because the required window manager theme '%s' is not installed."), + info->marco_theme_name); + return FALSE; + } - if (!mate_theme_icon_info_find (info->icon_theme_name)) - { - g_set_error (error, MATE_THEME_ERROR, MATE_THEME_ERROR_ICON_THEME_NOT_AVAILABLE, - _("This theme will not look as intended because the required icon theme '%s' is not installed."), - info->icon_theme_name); - return FALSE; - } + if (!mate_theme_icon_info_find (info->icon_theme_name)) { + g_set_error (error, MATE_THEME_ERROR, MATE_THEME_ERROR_ICON_THEME_NOT_AVAILABLE, + _("This theme will not look as intended because the required icon theme '%s' is not installed."), + info->icon_theme_name); + return FALSE; + } - return TRUE; + return TRUE; } -MateThemeMetaInfo* mate_theme_meta_info_find(const char* meta_theme_name) +MateThemeMetaInfo * +mate_theme_meta_info_find (const char *meta_theme_name) { - g_return_val_if_fail(meta_theme_name != NULL, NULL); + g_return_val_if_fail(meta_theme_name != NULL, NULL); - return (MateThemeMetaInfo*) get_theme_from_hash_by_name (meta_theme_hash_by_name, meta_theme_name, -1); + return (MateThemeMetaInfo*) get_theme_from_hash_by_name (meta_theme_hash_by_name, meta_theme_name, -1); } -GList* mate_theme_meta_info_find_all(void) +GList * +mate_theme_meta_info_find_all (void) { - GList* list = NULL; + GList *list = NULL; - g_hash_table_foreach (meta_theme_hash_by_name, (GHFunc) mate_theme_info_find_all_helper, &list); + g_hash_table_foreach (meta_theme_hash_by_name, + (GHFunc) mate_theme_info_find_all_helper, + &list); return list; } gint mate_theme_meta_info_compare (MateThemeMetaInfo *a, - MateThemeMetaInfo *b) + MateThemeMetaInfo *b) { gint cmp; @@ -1677,7 +1705,7 @@ mate_theme_meta_info_compare (MateThemeMetaInfo *a, void mate_theme_info_register_theme_change (ThemeChangedCallback func, - gpointer data) + gpointer data) { ThemeCallbackData *callback_data; @@ -1691,7 +1719,8 @@ mate_theme_info_register_theme_change (ThemeChangedCallback func, } gboolean -mate_theme_color_scheme_parse (const gchar *scheme, GdkRGBA *colors) +mate_theme_color_scheme_parse (const gchar *scheme, + GdkRGBA *colors) { gchar **color_scheme_strings, **color_scheme_pair, *current_string; gint i; @@ -1744,7 +1773,8 @@ mate_theme_color_scheme_parse (const gchar *scheme, GdkRGBA *colors) } gboolean -mate_theme_color_scheme_equal (const gchar *s1, const gchar *s2) +mate_theme_color_scheme_equal (const gchar *s1, + const gchar *s2) { GdkRGBA c1[NUM_SYMBOLIC_COLORS], c2[NUM_SYMBOLIC_COLORS]; int i; |