summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-font-picker.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnautilus-private/nautilus-font-picker.c')
-rw-r--r--libnautilus-private/nautilus-font-picker.c592
1 files changed, 282 insertions, 310 deletions
diff --git a/libnautilus-private/nautilus-font-picker.c b/libnautilus-private/nautilus-font-picker.c
index ffe2639d5..ef6264540 100644
--- a/libnautilus-private/nautilus-font-picker.c
+++ b/libnautilus-private/nautilus-font-picker.c
@@ -25,81 +25,109 @@
#include <config.h>
#include "nautilus-font-picker.h"
+
#include "nautilus-gtk-macros.h"
#include "nautilus-glib-extensions.h"
#include "nautilus-string-picker.h"
#include "nautilus-string.h"
+#include "nautilus-font-manager.h"
#include <gtk/gtklabel.h>
#include <gtk/gtkentry.h>
#include <gtk/gtksignal.h>
+#include <gtk/gtkhbox.h>
#include <libgnome/gnome-i18n.h>
+
+typedef struct {
+ char *name;
+ char *font_file_name;
+} FontStyle;
+
+typedef struct {
+ char *title;
+ char *foundry;
+ char *family;
+ char *name;
+ GList *style_list;
+} FontEntry;
+
+static const char *black_listed_fonts[] = {
+ "microsoft Webdings",
+ "microsoft Wingdings",
+ "monotype OCR",
+ "URW Zapf Dingbats",
+ "URW Symbol",
+ "xfree86 cursor"
+};
+
static const gint FONT_PICKER_SPACING = 10;
/* Signals */
typedef enum
{
- SELECTED_FONT_CHANGED,
+ CHANGED,
LAST_SIGNAL
} FontPickerSignals;
-struct _NautilusFontPickerDetail
+struct NautilusFontPickerDetails
{
- GtkWidget *family_picker;
- GtkWidget *weight_picker;
- GtkWidget *slant_picker;
- GtkWidget *set_width_picker;
-
- NautilusStringList *weight_list;
- NautilusStringList *slant_list;
- NautilusStringList *set_width_list;
+ NautilusStringPicker *font_name_picker;
+ NautilusStringPicker *style_picker;
+ GList *font_entry_list;
+ GtkWidget *title_label;
};
-/* NautilusFontPickerClass methods */
-static void nautilus_font_picker_initialize_class (NautilusFontPickerClass *klass);
-static void nautilus_font_picker_initialize (NautilusFontPicker *font_picker);
-
-
/* GtkObjectClass methods */
+static void nautilus_font_picker_initialize_class (NautilusFontPickerClass *font_picker_class);
+static void nautilus_font_picker_initialize (NautilusFontPicker *font_picker);
static void nautilus_font_picker_destroy (GtkObject *object);
-static void family_picker_changed_callback (GtkWidget *string_picker,
- gpointer user_data);
-static void weight_picker_changed_callback (GtkWidget *string_picker,
- gpointer user_data);
-static void slant_picker_changed_callback (GtkWidget *string_picker,
- gpointer user_data);
-static void set_width_picker_changed_callback (GtkWidget *string_picker,
- gpointer user_data);
-
-NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusFontPicker, nautilus_font_picker, GTK_TYPE_HBOX)
+static void font_picker_update (NautilusFontPicker *font_picker);
+
+/* Callbacks */
+static void font_name_picker_changed_callback (GtkWidget *string_picker,
+ gpointer callback_data);
+static void style_picker_changed_callback (GtkWidget *string_picker,
+ gpointer callback_data);
+static void font_manager_callback (const char *font_file_name,
+ NautilusFontType font_type,
+ const char *foundry,
+ const char *family,
+ const char *weight,
+ const char *slant,
+ const char *set_width,
+ const char *char_set_registry,
+ const char *char_set_encoding,
+ gpointer callback_data);
+static void font_entry_list_for_each_callback (gpointer data,
+ gpointer callback_data);
+static void style_list_for_each_callback (gpointer data,
+ gpointer callback_data);
+
+NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusFontPicker, nautilus_font_picker, GTK_TYPE_VBOX)
static guint font_picker_signals[LAST_SIGNAL] = { 0 };
-/*
- * NautilusFontPickerClass methods
- */
+/* GtkObjectClass methods */
static void
nautilus_font_picker_initialize_class (NautilusFontPickerClass *font_picker_class)
{
GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
object_class = GTK_OBJECT_CLASS (font_picker_class);
- widget_class = GTK_WIDGET_CLASS (font_picker_class);
/* GtkObjectClass */
object_class->destroy = nautilus_font_picker_destroy;
/* Signals */
- font_picker_signals[SELECTED_FONT_CHANGED] = gtk_signal_new ("selected_font_changed",
- GTK_RUN_LAST,
- object_class->type,
- 0,
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE,
- 0);
+ font_picker_signals[CHANGED] = gtk_signal_new ("changed",
+ GTK_RUN_LAST,
+ object_class->type,
+ 0,
+ gtk_marshal_NONE__NONE,
+ GTK_TYPE_NONE,
+ 0);
gtk_object_class_add_signals (object_class, font_picker_signals, LAST_SIGNAL);
}
@@ -107,73 +135,55 @@ nautilus_font_picker_initialize_class (NautilusFontPickerClass *font_picker_clas
static void
nautilus_font_picker_initialize (NautilusFontPicker *font_picker)
{
- NautilusStringList *family_list;
-
- font_picker->detail = g_new (NautilusFontPickerDetail, 1);
-
- font_picker->detail->weight_list = NULL;
- font_picker->detail->slant_list = NULL;
- font_picker->detail->set_width_list = NULL;
+ GtkWidget *hbox;
+ font_picker->details = g_new0 (NautilusFontPickerDetails, 1);
gtk_box_set_homogeneous (GTK_BOX (font_picker), FALSE);
gtk_box_set_spacing (GTK_BOX (font_picker), FONT_PICKER_SPACING);
- font_picker->detail->family_picker = nautilus_string_picker_new ();
- font_picker->detail->weight_picker = nautilus_string_picker_new ();
- font_picker->detail->slant_picker = nautilus_string_picker_new ();
- font_picker->detail->set_width_picker = nautilus_string_picker_new ();
-
- gtk_box_pack_start (GTK_BOX (font_picker), font_picker->detail->family_picker, TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (font_picker), font_picker->detail->weight_picker, TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (font_picker), font_picker->detail->slant_picker, TRUE, TRUE, 0);
- gtk_box_pack_end (GTK_BOX (font_picker), font_picker->detail->set_width_picker, TRUE, TRUE, 0);
+ font_picker->details->title_label = gtk_label_new ("");
+ gtk_label_set_justify (GTK_LABEL (font_picker->details->title_label),
+ GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (font_picker->details->title_label), 0.0, 0.5);
- nautilus_caption_set_title_label (NAUTILUS_CAPTION (font_picker->detail->family_picker), _("Font"));
+ gtk_box_pack_start (GTK_BOX (font_picker), font_picker->details->title_label, TRUE, TRUE, 0);
- nautilus_caption_set_show_title (NAUTILUS_CAPTION (font_picker->detail->family_picker), FALSE);
- nautilus_caption_set_show_title (NAUTILUS_CAPTION (font_picker->detail->weight_picker), FALSE);
- nautilus_caption_set_show_title (NAUTILUS_CAPTION (font_picker->detail->slant_picker), FALSE);
- nautilus_caption_set_show_title (NAUTILUS_CAPTION (font_picker->detail->set_width_picker), FALSE);
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (font_picker), hbox, TRUE, TRUE, 0);
- family_list = nautilus_scalable_font_get_font_family_list ();
+ font_picker->details->font_name_picker = NAUTILUS_STRING_PICKER (nautilus_string_picker_new ());
+ font_picker->details->style_picker = NAUTILUS_STRING_PICKER (nautilus_string_picker_new ());
- nautilus_string_list_sort (family_list);
-
- /* FIXME bugzilla.eazel.com 2557:
- * Need to deal with possiblity of there being no fonts */
- g_assert (family_list != NULL);
+ gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (font_picker->details->font_name_picker), TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (font_picker->details->style_picker), TRUE, TRUE, 0);
- nautilus_string_picker_set_string_list (NAUTILUS_STRING_PICKER (font_picker->detail->family_picker),
- family_list);
-
- nautilus_string_list_free (family_list);
+ nautilus_caption_set_title_label (NAUTILUS_CAPTION (font_picker->details->font_name_picker), _("Font"));
+ nautilus_caption_set_show_title (NAUTILUS_CAPTION (font_picker->details->font_name_picker), FALSE);
+ nautilus_caption_set_show_title (NAUTILUS_CAPTION (font_picker->details->style_picker), FALSE);
- gtk_signal_connect (GTK_OBJECT (font_picker->detail->family_picker),
+ gtk_signal_connect (GTK_OBJECT (font_picker->details->font_name_picker),
"changed",
- GTK_SIGNAL_FUNC (family_picker_changed_callback),
+ GTK_SIGNAL_FUNC (font_name_picker_changed_callback),
font_picker);
- gtk_signal_connect (GTK_OBJECT (font_picker->detail->weight_picker),
+ gtk_signal_connect (GTK_OBJECT (font_picker->details->style_picker),
"changed",
- GTK_SIGNAL_FUNC (weight_picker_changed_callback),
+ GTK_SIGNAL_FUNC (style_picker_changed_callback),
font_picker);
- gtk_signal_connect (GTK_OBJECT (font_picker->detail->slant_picker),
- "changed",
- GTK_SIGNAL_FUNC (slant_picker_changed_callback),
- font_picker);
+ gtk_widget_show (GTK_WIDGET (font_picker->details->font_name_picker));
+ gtk_widget_show (GTK_WIDGET (font_picker->details->style_picker));
+ gtk_widget_show (font_picker->details->title_label);
+ gtk_widget_show (hbox);
- gtk_signal_connect (GTK_OBJECT (font_picker->detail->set_width_picker),
- "changed",
- GTK_SIGNAL_FUNC (set_width_picker_changed_callback),
- font_picker);
+ /* Populate the font table */
+ nautilus_font_manager_for_each_font (font_manager_callback, font_picker);
- gtk_widget_show (font_picker->detail->family_picker);
- gtk_widget_show (font_picker->detail->weight_picker);
- gtk_widget_show (font_picker->detail->slant_picker);
- gtk_widget_show (font_picker->detail->set_width_picker);
+ /* Populate the font name (foundry+family) picker */
+ g_list_foreach (font_picker->details->font_entry_list, font_entry_list_for_each_callback, font_picker);
- family_picker_changed_callback (font_picker->detail->family_picker, font_picker);
+ /* Update the font picker */
+ font_picker_update (font_picker);;
}
/* GtkObjectClass methods */
@@ -181,317 +191,279 @@ static void
nautilus_font_picker_destroy (GtkObject* object)
{
NautilusFontPicker * font_picker;
-
- g_return_if_fail (object != NULL);
+
g_return_if_fail (NAUTILUS_IS_FONT_PICKER (object));
font_picker = NAUTILUS_FONT_PICKER (object);
-
- nautilus_string_list_free (font_picker->detail->weight_list);
- nautilus_string_list_free (font_picker->detail->slant_list);
- nautilus_string_list_free (font_picker->detail->set_width_list);
- g_free (font_picker->detail);
+ g_free (font_picker->details);
/* Chain */
NAUTILUS_CALL_PARENT (GTK_OBJECT_CLASS, destroy, (object));
}
-static void
-font_picker_update_weight_picker (NautilusFontPicker *font_picker)
+static FontEntry *
+font_entry_list_find (GList *font_entry_list,
+ const char *font_name)
{
- NautilusStringList *unique_weight_list;
- char *family;
-
- g_return_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker));
-
- family = nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->family_picker));
-
- unique_weight_list = nautilus_string_list_new_from_string_list (font_picker->detail->weight_list, TRUE);
-
- nautilus_string_list_sort (unique_weight_list);
- nautilus_string_list_remove_duplicates (unique_weight_list);
-
- nautilus_string_picker_set_string_list (NAUTILUS_STRING_PICKER (font_picker->detail->weight_picker),
- unique_weight_list);
+ while (font_entry_list != NULL) {
+ FontEntry *entry;
+ g_assert (font_entry_list->data != NULL);
+ entry = font_entry_list->data;
+ if (nautilus_istr_is_equal (font_name, entry->name)) {
+ return entry;
+ }
+
+ font_entry_list = font_entry_list->next;
+ }
- nautilus_string_list_free (unique_weight_list);
-
- g_free (family);
+ return NULL;
}
static void
-font_picker_update_slant_picker (NautilusFontPicker *font_picker)
+font_picker_update (NautilusFontPicker *font_picker)
{
- NautilusStringList *unique_slant_list;
- char *current_family;
- char *current_weight;
- guint i;
+ char *selected_font;
+ const FontEntry *entry;
g_return_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker));
- current_family = nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->family_picker));
- current_weight = nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->weight_picker));
-
- g_assert (nautilus_string_list_get_length (font_picker->detail->slant_list) ==
- nautilus_string_list_get_length (font_picker->detail->weight_list));
+ selected_font = nautilus_string_picker_get_selected_string (font_picker->details->font_name_picker);
- unique_slant_list = nautilus_string_list_new (TRUE);
+ entry = font_entry_list_find (font_picker->details->font_entry_list, selected_font);
+ g_return_if_fail (entry != NULL);
- for (i = 0; i < nautilus_string_list_get_length (font_picker->detail->slant_list); i++) {
- char *weight = nautilus_string_list_nth (font_picker->detail->weight_list, i);
- char *slant = nautilus_string_list_nth (font_picker->detail->slant_list, i);
+ nautilus_string_picker_clear (font_picker->details->style_picker);
+
+ g_list_foreach (entry->style_list, style_list_for_each_callback, font_picker);
+
+ g_free (selected_font);
+}
- if (nautilus_str_is_equal (current_weight, weight)) {
- nautilus_string_list_insert (unique_slant_list, slant);
- }
+static void
+font_name_picker_changed_callback (GtkWidget *string_picker,
+ gpointer callback_data)
+{
+ NautilusFontPicker *font_picker;
- g_free (weight);
- g_free (slant);
- }
+ g_return_if_fail (NAUTILUS_IS_FONT_PICKER (callback_data));
+ g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker));
- nautilus_string_list_sort (unique_slant_list);
- nautilus_string_list_remove_duplicates (unique_slant_list);
+ font_picker = NAUTILUS_FONT_PICKER (callback_data);
- nautilus_string_picker_set_string_list (NAUTILUS_STRING_PICKER (font_picker->detail->slant_picker),
- unique_slant_list);
-
- nautilus_string_list_free (unique_slant_list);
+ font_picker_update (font_picker);
- g_free (current_family);
- g_free (current_weight);
+ gtk_signal_emit (GTK_OBJECT (font_picker), font_picker_signals[CHANGED]);
}
static void
-font_picker_update_set_width_picker (NautilusFontPicker *font_picker)
+style_picker_changed_callback (GtkWidget *string_picker, gpointer callback_data)
{
- NautilusStringList *unique_set_width_list;
- char *current_family;
- char *current_weight;
- char *current_slant;
- guint i;
+ NautilusFontPicker *font_picker;
- g_return_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker));
-
- current_family = nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->family_picker));
- current_weight = nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->weight_picker));
- current_slant = nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->slant_picker));
-
- g_assert (nautilus_string_list_get_length (font_picker->detail->slant_list) ==
- nautilus_string_list_get_length (font_picker->detail->weight_list));
+ g_return_if_fail (NAUTILUS_IS_FONT_PICKER (callback_data));
+ g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker));
- g_assert (nautilus_string_list_get_length (font_picker->detail->slant_list) ==
- nautilus_string_list_get_length (font_picker->detail->set_width_list));
+ font_picker = NAUTILUS_FONT_PICKER (callback_data);
- unique_set_width_list = nautilus_string_list_new (TRUE);
+ gtk_signal_emit (GTK_OBJECT (font_picker), font_picker_signals[CHANGED]);
+}
+
+static gboolean
+ignore_font (const char *font_file_name,
+ const char *foundry,
+ const char *family,
+ const char *entry_name)
+{
+ guint i;
- for (i = 0; i < nautilus_string_list_get_length (font_picker->detail->set_width_list); i++) {
- char *weight = nautilus_string_list_nth (font_picker->detail->weight_list, i);
- char *slant = nautilus_string_list_nth (font_picker->detail->slant_list, i);
- char *set_width = nautilus_string_list_nth (font_picker->detail->set_width_list, i);
+ g_return_val_if_fail (font_file_name != NULL, TRUE);
+ g_return_val_if_fail (foundry != NULL, TRUE);
+ g_return_val_if_fail (family != NULL, TRUE);
+ g_return_val_if_fail (entry_name != NULL, TRUE);
- if (nautilus_str_is_equal (current_weight, weight)
- && nautilus_str_is_equal (current_slant, slant)) {
- nautilus_string_list_insert (unique_set_width_list, set_width);
+ for (i = 0; i < NAUTILUS_N_ELEMENTS (black_listed_fonts); i++) {
+ if (nautilus_istr_is_equal (entry_name, black_listed_fonts[i])) {
+ return TRUE;
}
-
- g_free (weight);
- g_free (slant);
- g_free (set_width);
}
-
- nautilus_string_list_sort (unique_set_width_list);
- nautilus_string_list_remove_duplicates (unique_set_width_list);
-
- nautilus_string_picker_set_string_list (NAUTILUS_STRING_PICKER (font_picker->detail->set_width_picker),
- unique_set_width_list);
-
- nautilus_string_list_free (unique_set_width_list);
- g_free (current_family);
- g_free (current_weight);
- g_free (current_slant);
+ return FALSE;
}
static void
-family_picker_changed_callback (GtkWidget *string_picker, gpointer user_data)
+font_manager_callback (const char *font_file_name,
+ NautilusFontType font_type,
+ const char *foundry,
+ const char *family,
+ const char *weight,
+ const char *slant,
+ const char *set_width,
+ const char *char_set_registry,
+ const char *char_set_encoding,
+ gpointer callback_data)
{
- NautilusFontPicker *font_picker;
- char *family;
- NautilusStringList *weight_list = NULL;
- NautilusStringList *slant_list = NULL;
- NautilusStringList *set_width_list = NULL;
+ NautilusFontPicker *font_picker;
+ char *entry_name;
+ FontEntry *entry;
+ FontStyle *style;
- g_return_if_fail (NAUTILUS_IS_FONT_PICKER (user_data));
- g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker));
+ g_return_if_fail (font_file_name != NULL);
+ g_return_if_fail (foundry != NULL);
+ g_return_if_fail (family != NULL);
+ g_return_if_fail (weight != NULL);
+ g_return_if_fail (slant != NULL);
+ g_return_if_fail (set_width != NULL);
+ g_return_if_fail (char_set_registry != NULL);
+ g_return_if_fail (char_set_encoding != NULL);
+ g_return_if_fail (NAUTILUS_IS_FONT_PICKER (callback_data));
- font_picker = NAUTILUS_FONT_PICKER (user_data);
+ font_picker = NAUTILUS_FONT_PICKER (callback_data);
- family = nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (string_picker));
-
- if (nautilus_scalable_font_query_font (family, &weight_list, &slant_list, &set_width_list)) {
- nautilus_string_list_free (font_picker->detail->weight_list);
- nautilus_string_list_free (font_picker->detail->slant_list);
- nautilus_string_list_free (font_picker->detail->set_width_list);
-
- font_picker->detail->weight_list = weight_list;
- font_picker->detail->slant_list = slant_list;
- font_picker->detail->set_width_list = set_width_list;
-
- font_picker_update_weight_picker (font_picker);
- font_picker_update_slant_picker (font_picker);
- font_picker_update_set_width_picker (font_picker);
+ entry_name = g_strdup_printf ("%s %s", foundry, family);
- gtk_signal_emit (GTK_OBJECT (font_picker), font_picker_signals[SELECTED_FONT_CHANGED]);
- }
- else {
- g_warning ("Trying to set a bogus non existant font '%s'\n", family);
+ if (ignore_font (font_file_name, foundry, family, entry_name)) {
+ g_free (entry_name);
+ return;
}
- g_free (family);
-}
+ entry = font_entry_list_find (font_picker->details->font_entry_list, entry_name);
-static void
-weight_picker_changed_callback (GtkWidget *string_picker, gpointer user_data)
-{
- NautilusFontPicker *font_picker;
-
- g_return_if_fail (NAUTILUS_IS_FONT_PICKER (user_data));
- g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker));
-
- font_picker = NAUTILUS_FONT_PICKER (user_data);
+ if (entry == NULL) {
+ entry = g_new0 (FontEntry, 1);
+ entry->name = g_strdup (entry_name);
+ entry->foundry = g_strdup (foundry);
+ entry->family = g_strdup (family);
+ font_picker->details->font_entry_list = g_list_prepend (font_picker->details->font_entry_list, entry);
+ }
+ g_assert (entry != NULL);
+ g_assert (font_entry_list_find (font_picker->details->font_entry_list, entry_name) == entry);
+ g_free (entry_name);
+
+ style = g_new0 (FontStyle, 1);
+ style->name = g_strdup_printf ("%s %s %s", weight, slant, set_width);
+ style->font_file_name = g_strdup (font_file_name);
- gtk_signal_emit (GTK_OBJECT (font_picker), font_picker_signals[SELECTED_FONT_CHANGED]);
+ entry->style_list = g_list_append (entry->style_list, style);
}
static void
-slant_picker_changed_callback (GtkWidget *string_picker, gpointer user_data)
+style_list_for_each_callback (gpointer data,
+ gpointer callback_data)
{
- NautilusFontPicker *font_picker;
+ NautilusFontPicker *font_picker;
+ FontStyle *style;
- g_return_if_fail (NAUTILUS_IS_FONT_PICKER (user_data));
- g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker));
+ g_return_if_fail (data != NULL);
+ g_return_if_fail (NAUTILUS_IS_FONT_PICKER (callback_data));
- font_picker = NAUTILUS_FONT_PICKER (user_data);
+ style = data;
+ font_picker = NAUTILUS_FONT_PICKER (callback_data);
- gtk_signal_emit (GTK_OBJECT (font_picker), font_picker_signals[SELECTED_FONT_CHANGED]);
+ nautilus_string_picker_insert_string (font_picker->details->style_picker, style->name);
}
-
static void
-set_width_picker_changed_callback (GtkWidget *string_picker, gpointer user_data)
+font_entry_list_for_each_callback (gpointer data,
+ gpointer callback_data)
{
- NautilusFontPicker *font_picker;
+ NautilusFontPicker *font_picker;
+ FontEntry *entry;
- g_return_if_fail (NAUTILUS_IS_FONT_PICKER (user_data));
- g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker));
+ g_return_if_fail (data != NULL);
+ g_return_if_fail (NAUTILUS_IS_FONT_PICKER (callback_data));
- font_picker = NAUTILUS_FONT_PICKER (user_data);
+ font_picker = NAUTILUS_FONT_PICKER (callback_data);
- gtk_signal_emit (GTK_OBJECT (font_picker), font_picker_signals[SELECTED_FONT_CHANGED]);
+ entry = data;
+ nautilus_string_picker_insert_string (font_picker->details->font_name_picker,
+ entry->name);
}
-
-/*
- * NautilusFontPicker public methods
- */
+/* NautilusFontPicker public methods */
GtkWidget *
nautilus_font_picker_new (void)
{
return gtk_widget_new (nautilus_font_picker_get_type (), NULL);
}
-void
-nautilus_font_picker_set_selected_family (NautilusFontPicker *font_picker,
- const char *family)
+char *
+nautilus_font_picker_get_selected_font (const NautilusFontPicker *font_picker)
{
- g_return_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker));
- g_return_if_fail (family != NULL);
+ char *result = NULL;
+ char *selected_font;
+ char *selected_style;
+ const FontEntry *entry;
+ GList *node;
- if (!nautilus_string_picker_contains (NAUTILUS_STRING_PICKER (font_picker->detail->family_picker), family)) {
- g_warning ("Trying to set a bogus family '%s'\n", family);
- return;
- }
+ g_return_val_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker), NULL);
- nautilus_string_picker_set_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->family_picker),
- family);
-}
+ selected_font = nautilus_string_picker_get_selected_string (font_picker->details->font_name_picker);
+ g_return_val_if_fail (selected_font != NULL, NULL);
+
+ selected_style = nautilus_string_picker_get_selected_string (font_picker->details->style_picker);
+ g_return_val_if_fail (selected_style != NULL, NULL);
+
+ entry = font_entry_list_find (font_picker->details->font_entry_list, selected_font);
+ g_return_val_if_fail (entry != NULL, NULL);
-void
-nautilus_font_picker_set_selected_weight (NautilusFontPicker *font_picker,
- const char *weight)
-{
- g_return_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker));
- g_return_if_fail (weight != NULL);
+ node = entry->style_list;
+ while (node != NULL && result == NULL) {
+ const FontStyle *style;
+ g_assert (node->data != NULL);
+ style = node->data;
- if (!nautilus_string_picker_contains (NAUTILUS_STRING_PICKER (font_picker->detail->weight_picker), weight)) {
- g_warning ("Trying to set a bogus weight '%s'\n", weight);
- return;
+ if (nautilus_istr_is_equal (style->name, selected_style)) {
+ result = g_strdup (style->font_file_name);
+ }
+ node = node->next;
}
-
- nautilus_string_picker_set_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->weight_picker),
- weight);
+
+ g_free (selected_font);
+ g_free (selected_style);
+
+ return result;
}
void
-nautilus_font_picker_set_selected_slant (NautilusFontPicker *font_picker,
- const char *slant)
+nautilus_font_picker_set_selected_font (NautilusFontPicker *font_picker,
+ const char *font_name)
{
- g_return_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker));
- g_return_if_fail (slant != NULL);
+ const FontEntry *entry;
+ const FontStyle *style;
+ GList *font_list_node;
+ GList *style_list_node;
- if (!nautilus_string_picker_contains (NAUTILUS_STRING_PICKER (font_picker->detail->slant_picker), slant)) {
- g_warning ("Trying to set a bogus slant '%s'\n", slant);
- return;
- }
+ g_return_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker));
- nautilus_string_picker_set_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->slant_picker),
- slant);
+ font_list_node = font_picker->details->font_entry_list;
+ while (font_list_node != NULL) {
+ g_assert (font_list_node->data != NULL);
+ entry = font_list_node->data;
+
+ style_list_node = entry->style_list;
+ while (style_list_node != NULL) {
+ g_assert (style_list_node->data != NULL);
+ style = style_list_node->data;
+
+ if (nautilus_istr_is_equal (style->font_file_name, font_name)) {
+ nautilus_string_picker_set_selected_string (font_picker->details->font_name_picker,
+ entry->name);
+ font_picker_update (font_picker);
+ gtk_signal_emit (GTK_OBJECT (font_picker), font_picker_signals[CHANGED]);
+ return;
+ }
+ style_list_node = style_list_node->next;
+ }
+
+ font_list_node = font_list_node->next;
+ }
}
void
-nautilus_font_picker_set_selected_set_width (NautilusFontPicker *font_picker,
- const char *set_width)
+nautilus_font_picker_set_title_label (NautilusFontPicker *font_picker,
+ const char *title_label)
{
g_return_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker));
- g_return_if_fail (set_width != NULL);
-
- if (!nautilus_string_picker_contains (NAUTILUS_STRING_PICKER (font_picker->detail->set_width_picker), set_width)) {
- g_warning ("Trying to set a bogus set_width '%s'\n", set_width);
- return;
- }
-
- nautilus_string_picker_set_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->set_width_picker),
- set_width);
-}
-
-char *
-nautilus_font_picker_get_selected_family (const NautilusFontPicker *font_picker)
-{
- g_return_val_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker), NULL);
-
- return nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->family_picker));
-}
-
-char *
-nautilus_font_picker_get_selected_weight (const NautilusFontPicker *font_picker)
-{
- g_return_val_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker), NULL);
-
- return nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->weight_picker));
-}
-
-char *
-nautilus_font_picker_get_selected_slant (const NautilusFontPicker *font_picker)
-{
- g_return_val_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker), NULL);
-
- return nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->slant_picker));
-}
-
-char *
-nautilus_font_picker_get_selected_set_width (const NautilusFontPicker *font_picker)
-{
- g_return_val_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker), NULL);
- return nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (font_picker->detail->set_width_picker));
+ gtk_label_set_text (GTK_LABEL (font_picker->details->title_label), title_label);
}