1 /*
2 This program is free software; you can redistribute it and/or modify
3 it under the terms of the GNU General Public License as published by
4 the Free Software Foundation; either version 2, or (at your option)
5 any later version.
6 
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10 GNU General Public License for more details.
11 
12 You should have received a copy of the GNU General Public License
13 along with this program; if not, write to the Free Software
14 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
15 */
16 
17 #include <gtk/gtk.h>
18 #include "font_sel.h"
19 #include "main.h"
20 
21 GtkWidget *font_entry;
22 
font_dlg_ok_clicked(GtkWidget * widget,gboolean * flag)23 static void font_dlg_ok_clicked(GtkWidget *widget, gboolean *flag)
24 {
25 	*flag = TRUE;
26 }
27 
font_browse_clicked(GtkWidget * widget,gpointer u)28 static void font_browse_clicked(GtkWidget *widget, gpointer u)
29 {
30 	const gchar *curfont;
31 	gboolean is_confirmed = FALSE;
32 
33 	GtkFontSelectionDialog *font_dlg =
34 		GTK_FONT_SELECTION_DIALOG(gtk_font_selection_dialog_new("Select Font"));
35 
36 	gtk_font_selection_dialog_set_preview_text(font_dlg, PROJNAME);
37 
38 	curfont = gtk_entry_get_text(GTK_ENTRY(font_entry));
39 
40 	if (g_utf8_strlen(curfont, -1))
41 		gtk_font_selection_dialog_set_font_name(font_dlg, curfont);
42 
43 
44 	g_signal_connect(G_OBJECT(font_dlg->ok_button), "clicked",
45 		G_CALLBACK(font_dlg_ok_clicked), &is_confirmed);
46 
47 	gtk_dialog_run(GTK_DIALOG(font_dlg));
48 
49 	if(is_confirmed)
50 		set_font(gtk_font_selection_dialog_get_font_name(font_dlg), TRUE);
51 
52 	gtk_widget_destroy(GTK_WIDGET(font_dlg));
53 }
54 
font_clear_clicked(GtkWidget * widget,gpointer u)55 static void font_clear_clicked(GtkWidget *widget, gpointer u)
56 {
57 	set_font(NULL, TRUE);
58 }
59 
font_entry_set_from_style(GtkWidget * w,GtkStyle * prev,gpointer u)60 static void font_entry_set_from_style(GtkWidget *w, GtkStyle *prev, gpointer u)
61 {
62 	gchar *font = get_font();
63 	gtk_entry_set_text(GTK_ENTRY(font_entry), font ? font : "");
64 }
65 
create_font_sel(void)66 GtkWidget *create_font_sel(void)
67 {
68 	GtkWidget *box = gtk_hbox_new(FALSE, 0);
69 	GtkWidget *button;
70 
71 	button = gtk_button_new_from_stock(GTK_STOCK_SELECT_FONT);
72 	await_activation(button);
73 	g_signal_connect(G_OBJECT(button), "clicked",
74 		G_CALLBACK(font_browse_clicked), NULL);
75 	gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
76 
77 	font_entry = gtk_entry_new();
78 	gtk_editable_set_editable(GTK_EDITABLE(font_entry), FALSE);
79 	gtk_box_pack_start(GTK_BOX(box), font_entry, TRUE, TRUE, 3);
80 
81 	g_signal_connect(G_OBJECT(font_entry), "style-set",
82 		G_CALLBACK(font_entry_set_from_style), NULL);
83 
84 	button = gtk_button_new_from_stock(GTK_STOCK_CLEAR);
85 	await_activation(button);
86 	g_signal_connect(G_OBJECT(button), "clicked",
87 		G_CALLBACK(font_clear_clicked), NULL);
88 	gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
89 
90 	return box;
91 }
92