-gtk_font_selection_class_init (GtkFontSelectionClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- gobject_class->finalize = gtk_font_selection_finalize;
- gobject_class->set_property = gtk_font_selection_set_property;
- gobject_class->get_property = gtk_font_selection_get_property;
-
- widget_class->screen_changed = gtk_font_selection_screen_changed;
- widget_class->style_updated = gtk_font_selection_style_updated;
-
- g_object_class_install_property (gobject_class,
- PROP_FONT_NAME,
- g_param_spec_string ("font-name",
- P_("Font name"),
- P_("The string that represents this font"),
- DEFAULT_FONT_NAME,
- GTK_PARAM_READWRITE));
- g_object_class_install_property (gobject_class,
- PROP_PREVIEW_TEXT,
- g_param_spec_string ("preview-text",
- P_("Preview text"),
- P_("The text to display in order to demonstrate the selected font"),
- _(PREVIEW_TEXT),
- GTK_PARAM_READWRITE));
-
- g_type_class_add_private (klass, sizeof (GtkFontSelectionPrivate));
-}
-
-static void
-gtk_font_selection_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GtkFontSelection *fontsel;
-
- fontsel = GTK_FONT_SELECTION (object);
-
- switch (prop_id)
- {
- case PROP_FONT_NAME:
- gtk_font_selection_set_font_name (fontsel, g_value_get_string (value));
- break;
- case PROP_PREVIEW_TEXT:
- gtk_font_selection_set_preview_text (fontsel, g_value_get_string (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void gtk_font_selection_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GtkFontSelection *fontsel;
-
- fontsel = GTK_FONT_SELECTION (object);
-
- switch (prop_id)
- {
- case PROP_FONT_NAME:
- g_value_take_string (value, gtk_font_selection_get_font_name (fontsel));
- break;
- case PROP_PREVIEW_TEXT:
- g_value_set_string (value, gtk_font_selection_get_preview_text (fontsel));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-void
-deleted_text_cb (GtkEntryBuffer *buffer,
- guint position,
- guint n_chars,
- gpointer user_data)
-{
- GtkFontSelectionPrivate *priv = (GtkFontSelectionPrivate*)user_data;
- GtkWidget *entry = priv->search_entry;
-
- if (gtk_entry_buffer_get_length (buffer) == 0)
- {
- gtk_entry_set_icon_from_stock (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY,
- GTK_STOCK_FIND);
- }
-
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (priv->filter));
-}
-
-void
-inserted_text_cb (GtkEntryBuffer *buffer,
- guint position,
- gchar *chars,
- guint n_chars,
- gpointer user_data)
-{
- GtkFontSelectionPrivate *priv = (GtkFontSelectionPrivate*)user_data;
- GtkWidget *entry = priv->search_entry;
-
- if (g_strcmp0 (gtk_entry_get_icon_stock (GTK_ENTRY (entry), GTK_ENTRY_ICON_SECONDARY),
- GTK_STOCK_CLEAR))
- gtk_entry_set_icon_from_stock (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY,
- GTK_STOCK_CLEAR);
-
-
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (priv->filter));
-}
-
-void
-icon_press_cb (GtkEntry *entry,
- GtkEntryIconPosition pos,
- GdkEvent *event,
- gpointer user_data)
-{
- gtk_entry_buffer_delete_text (gtk_entry_get_buffer (entry), 0, -1);
-}
-
-void
-slider_change_cb (GtkAdjustment *adjustment, gpointer data)
-{
- GtkFontSelectionPrivate *priv = (GtkFontSelectionPrivate*)data;
-
- gtk_adjustment_set_value (gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON(priv->size_spin)),
- gtk_adjustment_get_value (adjustment));
-}
-
-void
-spin_change_cb (GtkAdjustment *adjustment, gpointer data)
-{
- GtkFontSelectionPrivate *priv = (GtkFontSelectionPrivate*)data;
-
- gdouble size = gtk_adjustment_get_value (adjustment);
-
- GtkAdjustment *slider_adj = gtk_range_get_adjustment (GTK_RANGE (priv->size_slider));
-
- if (size >= gtk_adjustment_get_lower (slider_adj) ||
- size <= gtk_adjustment_get_upper (slider_adj))
- {
- gtk_adjustment_set_value (slider_adj, size);
- }
-
- priv->size = ((gint)gtk_adjustment_get_value (adjustment)) * PANGO_SCALE;
-}
-
-static void
-gtk_font_selection_init (GtkFontSelection *fontsel)
-{
- GtkFontSelectionPrivate *priv;
- PangoFontDescription *font_desc;
- GtkWidget *scrolled_win;
- GtkWidget *alignment;
- GtkWidget *preview_and_size;
- GtkWidget *size_controls;
-#if 0
- GList *focus_chain = NULL;
- AtkObject *atk_obj;
-#endif
-
- fontsel->priv = G_TYPE_INSTANCE_GET_PRIVATE (fontsel,
- GTK_TYPE_FONT_SELECTION,
- GtkFontSelectionPrivate);
- priv = fontsel->priv;
- gtk_widget_push_composite_child ();
-
- /* Creating fundamental widgets for the private struct */
- priv->search_entry = gtk_entry_new ();
- priv->family_face_list = gtk_tree_view_new ();
- priv->preview = gtk_entry_new ();
- priv->size_slider = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL,
- (gdouble) font_sizes[0],
- (gdouble) font_sizes[FONT_SIZES_LENGTH - 1],
- 1.0);
-
- priv->size_spin = gtk_spin_button_new_with_range (0.0, (gdouble)(G_MAXINT / PANGO_SCALE), 1.0);
-
- /** Bootstrapping widget layout **/
- /* Main font family/face view */
- scrolled_win = gtk_scrolled_window_new (NULL, NULL);
- gtk_container_add (GTK_CONTAINER (scrolled_win), priv->family_face_list);
-
- /* Alignment for the preview and size controls */
- alignment = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (alignment),
- PREVIEW_TOP_PADDING, 0, 0, 0);
-
- preview_and_size = gtk_vbox_new (TRUE, 0);
- gtk_box_set_homogeneous (GTK_BOX (preview_and_size), FALSE);
- gtk_box_pack_start (GTK_BOX (preview_and_size), priv->preview, FALSE, TRUE, 0);
- gtk_widget_set_size_request (priv->preview, -1, PREVIEW_HEIGHT);
-
- /* Packing the slider and the spin in a hbox */
- size_controls = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- gtk_scale_set_draw_value (GTK_SCALE (priv->size_slider), FALSE);
- gtk_box_pack_start (GTK_BOX (size_controls), priv->size_slider, TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (size_controls), priv->size_spin, FALSE, TRUE, 0);
-
- gtk_box_pack_start (GTK_BOX (preview_and_size), size_controls, FALSE, FALSE, 0);
- gtk_container_add (GTK_CONTAINER (alignment), preview_and_size);
-
- /* Packing everything in the selection */
- gtk_box_pack_start (GTK_BOX (fontsel), priv->search_entry, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (fontsel), scrolled_win, TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (fontsel), GTK_WIDGET(alignment), FALSE, TRUE, 0);
-
- /* Getting the default size */
- font_desc = pango_context_get_font_description (gtk_widget_get_pango_context (GTK_WIDGET (fontsel)));
- priv->size = pango_font_description_get_size (font_desc);
- priv->face = NULL;
- priv->family = NULL;
-
- gtk_adjustment_set_value (gtk_range_get_adjustment (GTK_RANGE (priv->size_slider)),
- (gdouble)(priv->size / PANGO_SCALE));
- gtk_adjustment_set_value (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (priv->size_spin)),
- (gdouble)(priv->size / PANGO_SCALE));
-
-
- gtk_widget_show_all (GTK_WIDGET (fontsel));
- gtk_widget_hide (GTK_WIDGET (fontsel));
-
- /* Treeview column and model bootstrapping */
- gtk_font_selection_bootstrap_fontlist (fontsel);
-
- /* Set default preview text */
- gtk_entry_set_text (GTK_ENTRY (priv->preview),
- pango_language_get_sample_string (NULL));
-
- /* Set search icon and place holder text */
- gtk_entry_set_icon_from_stock (GTK_ENTRY (priv->search_entry),
- GTK_ENTRY_ICON_SECONDARY,
- GTK_STOCK_FIND);
- gtk_entry_set_placeholder_text (GTK_ENTRY (priv->search_entry), _("Search font name"));
-
- /** Callback connections **/
- /* Connect to callback for the live search text entry */
- g_signal_connect (G_OBJECT (gtk_entry_get_buffer (GTK_ENTRY (priv->search_entry))),
- "deleted-text", G_CALLBACK (deleted_text_cb), (gpointer)priv);
- g_signal_connect (G_OBJECT (gtk_entry_get_buffer (GTK_ENTRY (priv->search_entry))),
- "inserted-text", G_CALLBACK (inserted_text_cb), (gpointer)priv);
- g_signal_connect (G_OBJECT (priv->search_entry),
- "icon-press", G_CALLBACK (icon_press_cb), (gpointer)priv);
-
- /* Size controls callbacks */
- g_signal_connect (G_OBJECT (gtk_range_get_adjustment (GTK_RANGE (priv->size_slider))),
- "value-changed", G_CALLBACK (slider_change_cb), (gpointer)priv);
- g_signal_connect (G_OBJECT (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (priv->size_spin))),
- "value-changed", G_CALLBACK (spin_change_cb), (gpointer)priv);
-
- gtk_widget_pop_composite_child();
+gtk_font_chooser_default_init (GtkFontChooserInterface *iface)
+{
+ /**
+ * GtkFontChooser:font:
+ *
+ * The font description as a string, e.g. "Sans Italic 12".
+ */
+ g_object_interface_install_property
+ (iface,
+ g_param_spec_string ("font",
+ P_("Font"),
+ P_("Font description as a string, e.g. \"Sans Italic 12\""),
+ GTK_FONT_CHOOSER_DEFAULT_FONT_NAME,
+ GTK_PARAM_READWRITE));
+
+ /**
+ * GtkFontChooser:font-desc:
+ *
+ * The font description as a #PangoFontDescription.
+ */
+ g_object_interface_install_property
+ (iface,
+ g_param_spec_boxed ("font-desc",
+ P_("Font description"),
+ P_("Font description as a PangoFontDescription struct"),
+ PANGO_TYPE_FONT_DESCRIPTION,
+ GTK_PARAM_READWRITE));
+
+ /**
+ * GtkFontChooser:preview-text:
+ *
+ * The string with which to preview the font.
+ */
+ g_object_interface_install_property
+ (iface,
+ g_param_spec_string ("preview-text",
+ P_("Preview text"),
+ P_("The text to display in order to demonstrate the selected font"),
+ pango_language_get_sample_string (NULL),
+ GTK_PARAM_READWRITE));
+
+ /**
+ * GtkFontChooser:show-preview-entry:
+ *
+ * Whether to show an entry to change the preview text.
+ */
+ g_object_interface_install_property
+ (iface,
+ g_param_spec_boolean ("show-preview-entry",
+ P_("Show preview text entry"),
+ P_("Whether the preview text entry is shown or not"),
+ TRUE,
+ GTK_PARAM_READWRITE));
+
+ /**
+ * GtkFontChooserWidget::font-activated:
+ * @self: the object which received the signal
+ * @fontname: the font name
+ *
+ * Emitted when a font is activated from the widget's list.
+ * This usually happens when the user double clicks an item,
+ * or an item is selected and the user presses one of the keys
+ * Space, Shift+Space, Return or Enter.
+ */
+ chooser_signals[SIGNAL_FONT_ACTIVATED] =
+ g_signal_new ("font-activated",
+ GTK_TYPE_FONT_CHOOSER,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GtkFontChooserIface, font_activated),
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE,
+ 1, G_TYPE_STRING);