static void theme_selection_changed_cb (GtkWidget *icon_view, AppearanceData *data) { GList *selection; MateThemeMetaInfo *theme = NULL; gboolean is_custom = FALSE; selection = gtk_icon_view_get_selected_items (GTK_ICON_VIEW (icon_view)); if (selection) { GtkTreeModel *model; GtkTreeIter iter; gchar *name; model = gtk_icon_view_get_model (GTK_ICON_VIEW (icon_view)); gtk_tree_model_get_iter (model, &iter, selection->data); gtk_tree_model_get (model, &iter, COL_NAME, &name, -1); is_custom = !strcmp (name, CUSTOM_THEME_NAME); if (is_custom) theme = data->theme_custom; else theme = mate_theme_meta_info_find (name); if (theme) { mate_meta_theme_set (theme); theme_message_area_update (data); } g_free (name); g_list_foreach (selection, (GFunc) gtk_tree_path_free, NULL); g_list_free (selection); } gtk_widget_set_sensitive (appearance_capplet_get_widget (data, "theme_delete"), theme_is_writable (theme)); gtk_widget_set_sensitive (appearance_capplet_get_widget (data, "theme_save"), is_custom); }
static void background_or_font_changed(MateConfEngine* conf, guint cnxn_id, MateConfEntry* entry, AppearanceData* data) { theme_message_area_update(data); }
static void theme_message_area_response_cb (GtkWidget *w, gint response_id, AppearanceData *data) { const MateThemeMetaInfo *theme; gchar *tmpfont; gchar *engine_path; theme = theme_get_selected (GTK_ICON_VIEW (appearance_capplet_get_widget (data, "theme_list")), data); if (!theme) return; switch (response_id) { case RESPONSE_APPLY_BG: mateconf_client_set_string (data->client, BACKGROUND_KEY, theme->background_image, NULL); break; case RESPONSE_REVERT_FONT: if (data->revert_application_font != NULL) { mateconf_client_set_string (data->client, APPLICATION_FONT_KEY, data->revert_application_font, NULL); g_free (data->revert_application_font); data->revert_application_font = NULL; } if (data->revert_documents_font != NULL) { mateconf_client_set_string (data->client, DOCUMENTS_FONT_KEY, data->revert_documents_font, NULL); g_free (data->revert_documents_font); data->revert_documents_font = NULL; } if (data->revert_desktop_font != NULL) { mateconf_client_set_string (data->client, DESKTOP_FONT_KEY, data->revert_desktop_font, NULL); g_free (data->revert_desktop_font); data->revert_desktop_font = NULL; } if (data->revert_windowtitle_font != NULL) { mateconf_client_set_string (data->client, WINDOWTITLE_FONT_KEY, data->revert_windowtitle_font, NULL); g_free (data->revert_windowtitle_font); data->revert_windowtitle_font = NULL; } if (data->revert_monospace_font != NULL) { mateconf_client_set_string (data->client, MONOSPACE_FONT_KEY, data->revert_monospace_font, NULL); g_free (data->revert_monospace_font); data->revert_monospace_font = NULL; } break; case RESPONSE_APPLY_FONT: if (theme->application_font) { tmpfont = mateconf_client_get_string (data->client, APPLICATION_FONT_KEY, NULL); if (tmpfont != NULL) { g_free (data->revert_application_font); if (strcmp (theme->application_font, tmpfont) == 0) { g_free (tmpfont); data->revert_application_font = NULL; } else data->revert_application_font = tmpfont; } mateconf_client_set_string (data->client, APPLICATION_FONT_KEY, theme->application_font, NULL); } if (theme->documents_font) { tmpfont = mateconf_client_get_string (data->client, DOCUMENTS_FONT_KEY, NULL); if (tmpfont != NULL) { g_free (data->revert_documents_font); if (strcmp (theme->documents_font, tmpfont) == 0) { g_free (tmpfont); data->revert_documents_font = NULL; } else data->revert_documents_font = tmpfont; } mateconf_client_set_string (data->client, DOCUMENTS_FONT_KEY, theme->documents_font, NULL); } if (theme->desktop_font) { tmpfont = mateconf_client_get_string (data->client, DESKTOP_FONT_KEY, NULL); if (tmpfont != NULL) { g_free (data->revert_desktop_font); if (strcmp (theme->desktop_font, tmpfont) == 0) { g_free (tmpfont); data->revert_desktop_font = NULL; } else data->revert_desktop_font = tmpfont; } mateconf_client_set_string (data->client, DESKTOP_FONT_KEY, theme->desktop_font, NULL); } if (theme->windowtitle_font) { tmpfont = mateconf_client_get_string (data->client, WINDOWTITLE_FONT_KEY, NULL); if (tmpfont != NULL) { g_free (data->revert_windowtitle_font); if (strcmp (theme->windowtitle_font, tmpfont) == 0) { g_free (tmpfont); data->revert_windowtitle_font = NULL; } else data->revert_windowtitle_font = tmpfont; } mateconf_client_set_string (data->client, WINDOWTITLE_FONT_KEY, theme->windowtitle_font, NULL); } if (theme->monospace_font) { tmpfont = mateconf_client_get_string (data->client, MONOSPACE_FONT_KEY, NULL); if (tmpfont != NULL) { g_free (data->revert_monospace_font); if (strcmp (theme->monospace_font, tmpfont) == 0) { g_free (tmpfont); data->revert_monospace_font = NULL; } else data->revert_monospace_font = tmpfont; } mateconf_client_set_string (data->client, MONOSPACE_FONT_KEY, theme->monospace_font, NULL); } break; case RESPONSE_INSTALL_ENGINE: engine_path = gtk_theme_info_missing_engine(theme->gtk_theme_name, FALSE); if (engine_path != NULL) { theme_install_file(GTK_WINDOW(gtk_widget_get_toplevel(data->install_button)), engine_path); g_free (engine_path); } theme_message_area_update(data); break; } }
static void background_or_font_changed(GSettings *settings, gchar *key, AppearanceData* data) { theme_message_area_update(data); }