int main (int argc, char *argv[]) { GtkWidget *window; GtkWidget *font_button; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); font_button = gtk_font_button_new (); gtk_container_add (GTK_CONTAINER (window), font_button); gtk_widget_show_all (window); g_signal_connect (font_button, "notify::font", G_CALLBACK (notify_font_cb), NULL); g_signal_connect (font_button, "notify::preview-text", G_CALLBACK (notify_preview_text_cb), NULL); g_signal_connect (font_button, "font-activated", G_CALLBACK (font_activated_cb), NULL); if (argc >= 2 && strcmp (argv[1], "--monospace") == 0) { gtk_font_chooser_set_filter_func (GTK_FONT_CHOOSER (font_button), monospace_filter, NULL, NULL); } g_signal_connect (window, "delete-event", G_CALLBACK (gtk_main_quit), NULL); gtk_main (); return 0; }
static VALUE rg_set_filter_func(VALUE self) { VALUE func = rb_block_proc(); G_RELATIVE(self, func); gtk_font_chooser_set_filter_func(_SELF(self), (GtkFontFilterFunc)filter_func, (gpointer)func, NULL); return self; }
static void gnm_font_button_font_chooser_set_filter_func (GtkFontChooser *chooser, GtkFontFilterFunc filter_func, gpointer filter_data, GDestroyNotify data_destroy) { GnmFontButton *font_button = GNM_FONT_BUTTON (chooser); GnmFontButtonPrivate *priv = font_button->priv; if (priv->font_dialog) { gtk_font_chooser_set_filter_func (GTK_FONT_CHOOSER (priv->font_dialog), filter_func, filter_data, data_destroy); return; } clear_font_filter_data (font_button); priv->font_filter = filter_func; priv->font_filter_data = filter_data; priv->font_filter_data_destroy = data_destroy; }
static void gnm_font_button_clicked (GtkButton *button) { GtkFontChooser *font_dialog; GnmFontButton *font_button = GNM_FONT_BUTTON (button); GnmFontButtonPrivate *priv = font_button->priv; if (!font_button->priv->font_dialog) { GtkWidget *parent; parent = gtk_widget_get_toplevel (GTK_WIDGET (font_button)); priv->font_dialog = g_object_new (priv->dialog_type, NULL); font_dialog = GTK_FONT_CHOOSER (font_button->priv->font_dialog); gtk_font_chooser_set_show_preview_entry (font_dialog, priv->show_preview_entry); if (priv->preview_text) { gtk_font_chooser_set_preview_text (font_dialog, priv->preview_text); g_free (priv->preview_text); priv->preview_text = NULL; } if (priv->font_filter) { gtk_font_chooser_set_filter_func (font_dialog, priv->font_filter, priv->font_filter_data, priv->font_filter_data_destroy); priv->font_filter = NULL; priv->font_filter_data = NULL; priv->font_filter_data_destroy = NULL; } if (gtk_widget_is_toplevel (parent) && GTK_IS_WINDOW (parent)) { if (GTK_WINDOW (parent) != gtk_window_get_transient_for (GTK_WINDOW (font_dialog))) gtk_window_set_transient_for (GTK_WINDOW (font_dialog), GTK_WINDOW (parent)); gtk_window_set_modal (GTK_WINDOW (font_dialog), gtk_window_get_modal (GTK_WINDOW (parent))); } g_signal_connect (font_dialog, "notify", G_CALLBACK (gnm_font_button_font_chooser_notify), button); g_signal_connect (font_dialog, "response", G_CALLBACK (response_cb), font_button); g_signal_connect (font_dialog, "destroy", G_CALLBACK (dialog_destroy), font_button); } if (!gtk_widget_get_visible (font_button->priv->font_dialog)) { font_dialog = GTK_FONT_CHOOSER (font_button->priv->font_dialog); gtk_font_chooser_set_font_desc (font_dialog, font_button->priv->font_desc); } gtk_window_present (GTK_WINDOW (font_button->priv->font_dialog)); }