Use new GtkFontChooser where available.
This currently ignores the font size, even though it's still visible, but
I think that may change in the future.
1.1 --- a/pidgin/gtk3compat.h
1.2 +++ b/pidgin/gtk3compat.h
1.3 @@ -25,6 +25,13 @@
1.4 * Also, any public API should not depend on this file.
1.5 */
1.6
1.7 +#if !GTK_CHECK_VERSION(3,2,0)
1.8 +
1.9 +#define GTK_FONT_CHOOSER GTK_FONT_SELECTION_DIALOG
1.10 +#define gtk_font_chooser_dialog_new(x,y) gtk_font_selection_dialog_new(x)
1.11 +#define gtk_font_chooser_get_font gtk_font_selection_dialog_get_font_name
1.12 +#define gtk_font_chooser_set_font gtk_font_selection_dialog_set_font_name
1.13 +
1.14 #if !GTK_CHECK_VERSION(3,0,0)
1.15
1.16 #define gdk_x11_window_get_xid GDK_WINDOW_XWINDOW
1.17 @@ -169,5 +176,7 @@
1.18
1.19 #endif /* 3.0.0 */
1.20
1.21 +#endif /* 3.2.0 */
1.22 +
1.23 #endif /* _PIDGINGTK3COMPAT_H_ */
1.24
2.1 --- a/pidgin/gtkwebviewtoolbar.c
2.2 +++ b/pidgin/gtkwebviewtoolbar.c
2.3 @@ -43,6 +43,8 @@
2.4
2.5 #include <gdk/gdkkeysyms.h>
2.6
2.7 +#include "gtk3compat.h"
2.8 +
2.9 #define GTK_WEBVIEWTOOLBAR_GET_PRIVATE(obj) \
2.10 (G_TYPE_INSTANCE_GET_PRIVATE((obj), GTK_TYPE_WEBVIEWTOOLBAR, GtkWebViewToolbarPriv))
2.11
2.12 @@ -160,27 +162,22 @@
2.13 gtk_widget_grab_focus(toolbar->webview);
2.14 }
2.15
2.16 -static gboolean
2.17 -destroy_toolbar_font(GtkWidget *widget, GdkEvent *event,
2.18 - GtkWebViewToolbar *toolbar)
2.19 +static void
2.20 +destroy_toolbar_font(GtkWebViewToolbar *toolbar)
2.21 {
2.22 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
2.23
2.24 - if (widget != NULL)
2.25 - gtk_webview_toggle_fontface(GTK_WEBVIEW(toolbar->webview), "");
2.26 -
2.27 if (priv->font_dialog != NULL)
2.28 {
2.29 gtk_widget_destroy(priv->font_dialog);
2.30 priv->font_dialog = NULL;
2.31 }
2.32 -
2.33 - return FALSE;
2.34 }
2.35
2.36 static void
2.37 realize_toolbar_font(GtkWidget *widget, GtkWebViewToolbar *toolbar)
2.38 {
2.39 +#if !GTK_CHECK_VERSION(3,2,0)
2.40 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
2.41 GtkFontSelection *sel;
2.42
2.43 @@ -193,40 +190,38 @@
2.44 gtk_font_selection_get_family_list(sel)));
2.45 gtk_widget_show(gtk_widget_get_parent(gtk_widget_get_parent(
2.46 gtk_font_selection_get_family_list(sel))));
2.47 +#endif
2.48 }
2.49
2.50 static void
2.51 -cancel_toolbar_font(GtkWidget *widget, GtkWebViewToolbar *toolbar)
2.52 -{
2.53 - destroy_toolbar_font(widget, NULL, toolbar);
2.54 -}
2.55 -
2.56 -static void
2.57 -apply_font(GtkWidget *widget, GtkWebViewToolbar *toolbar)
2.58 +apply_font(GtkDialog *dialog, gint response, GtkWebViewToolbar *toolbar)
2.59 {
2.60 /* this could be expanded to include font size, weight, etc.
2.61 but for now only works with font face */
2.62 - GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
2.63 - GtkFontSelectionDialog *fontsel = GTK_FONT_SELECTION_DIALOG(priv->font_dialog);
2.64 - gchar *fontname = gtk_font_selection_dialog_get_font_name(fontsel);
2.65 + gchar *fontname = NULL;
2.66 +
2.67 + if (response == GTK_RESPONSE_OK)
2.68 + fontname = gtk_font_chooser_get_font(GTK_FONT_CHOOSER(dialog));
2.69
2.70 if (fontname) {
2.71 - const gchar *family_name = NULL;
2.72 - PangoFontDescription *desc = NULL;
2.73 + PangoFontDescription *desc;
2.74 + const gchar *family_name;
2.75
2.76 desc = pango_font_description_from_string(fontname);
2.77 family_name = pango_font_description_get_family(desc);
2.78
2.79 if (family_name) {
2.80 gtk_webview_toggle_fontface(GTK_WEBVIEW(toolbar->webview),
2.81 - family_name);
2.82 + family_name);
2.83 }
2.84
2.85 pango_font_description_free(desc);
2.86 g_free(fontname);
2.87 + } else {
2.88 + gtk_webview_toggle_fontface(GTK_WEBVIEW(toolbar->webview), "");
2.89 }
2.90
2.91 - cancel_toolbar_font(NULL, toolbar);
2.92 + destroy_toolbar_font(toolbar);
2.93 }
2.94
2.95 static void
2.96 @@ -238,35 +233,31 @@
2.97 char *fontname = gtk_webview_get_current_fontface(GTK_WEBVIEW(toolbar->webview));
2.98
2.99 if (!priv->font_dialog) {
2.100 - priv->font_dialog = gtk_font_selection_dialog_new(_("Select Font"));
2.101 + GtkWindow *window;
2.102 + window = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(toolbar)));
2.103 + priv->font_dialog = gtk_font_chooser_dialog_new(_("Select Font"), window);
2.104
2.105 if (fontname) {
2.106 char *fonttif = g_strdup_printf("%s 12", fontname);
2.107 - gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(priv->font_dialog),
2.108 - fonttif);
2.109 + gtk_font_chooser_set_font(GTK_FONT_CHOOSER(priv->font_dialog),
2.110 + fonttif);
2.111 g_free(fonttif);
2.112 } else {
2.113 - gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(priv->font_dialog),
2.114 - DEFAULT_FONT_FACE);
2.115 + gtk_font_chooser_set_font(GTK_FONT_CHOOSER(priv->font_dialog),
2.116 + DEFAULT_FONT_FACE);
2.117 }
2.118
2.119 - g_signal_connect(G_OBJECT(priv->font_dialog), "delete_event",
2.120 - G_CALLBACK(destroy_toolbar_font), toolbar);
2.121 - g_signal_connect(G_OBJECT(
2.122 - gtk_font_selection_dialog_get_ok_button(GTK_FONT_SELECTION_DIALOG(priv->font_dialog))),
2.123 - "clicked", G_CALLBACK(apply_font), toolbar);
2.124 - g_signal_connect(G_OBJECT(
2.125 - gtk_font_selection_dialog_get_cancel_button(GTK_FONT_SELECTION_DIALOG(priv->font_dialog))),
2.126 - "clicked", G_CALLBACK(cancel_toolbar_font), toolbar);
2.127 + g_signal_connect(G_OBJECT(priv->font_dialog), "response",
2.128 + G_CALLBACK(apply_font), toolbar);
2.129 g_signal_connect_after(G_OBJECT(priv->font_dialog), "realize",
2.130 - G_CALLBACK(realize_toolbar_font), toolbar);
2.131 + G_CALLBACK(realize_toolbar_font), toolbar);
2.132 }
2.133
2.134 gtk_window_present(GTK_WINDOW(priv->font_dialog));
2.135
2.136 g_free(fontname);
2.137 } else {
2.138 - cancel_toolbar_font(GTK_WIDGET(toolbar), toolbar);
2.139 + destroy_toolbar_font(toolbar);
2.140 }
2.141
2.142 gtk_widget_grab_focus(toolbar->webview);
2.143 @@ -1263,7 +1254,7 @@
2.144 priv->image_dialog = NULL;
2.145 }
2.146
2.147 - destroy_toolbar_font(NULL, NULL, toolbar);
2.148 + destroy_toolbar_font(toolbar);
2.149 if (priv->smiley_dialog != NULL) {
2.150 #if 0
2.151 g_signal_handlers_disconnect_by_func(G_OBJECT(priv->smiley_dialog), close_smiley_dialog, toolbar);
3.1 --- a/pidgin/plugins/pidginrc.c
3.2 +++ b/pidgin/plugins/pidginrc.c
3.3 @@ -31,6 +31,8 @@
3.4 #include "util.h"
3.5 #include "version.h"
3.6
3.7 +#include "gtk3compat.h"
3.8 +
3.9 static guint pref_callback;
3.10
3.11 static const gchar *color_prefs[] = {
3.12 @@ -306,7 +308,7 @@
3.13 prefpath = font_prefs[subscript];
3.14 }
3.15
3.16 - fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(font_dialog));
3.17 + fontname = gtk_font_chooser_get_font(GTK_FONT_CHOOSER(font_dialog));
3.18
3.19 purple_prefs_set_string(prefpath, fontname);
3.20 g_free(fontname);
3.21 @@ -318,6 +320,7 @@
3.22 purplerc_set_font(GtkWidget *widget, gpointer data)
3.23 {
3.24 gchar title[128];
3.25 + GtkWindow *window;
3.26 GtkWidget *font_dialog = NULL;
3.27 gint subscript = GPOINTER_TO_INT(data);
3.28 const gchar *pref = NULL, *prefpath = NULL;
3.29 @@ -331,14 +334,15 @@
3.30 prefpath = font_prefs[subscript];
3.31 }
3.32
3.33 - font_dialog = gtk_font_selection_dialog_new(title);
3.34 + window = GTK_WINDOW(gtk_widget_get_toplevel(widget));
3.35 + font_dialog = gtk_font_chooser_dialog_new(title, window);
3.36 g_signal_connect(G_OBJECT(font_dialog), "response",
3.37 G_CALLBACK(purplerc_font_response), data);
3.38
3.39 pref = purple_prefs_get_string(prefpath);
3.40
3.41 if (pref != NULL && strcmp(pref, "")) {
3.42 - gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_dialog), pref);
3.43 + gtk_font_chooser_set_font(GTK_FONT_CHOOSER(font_dialog), pref);
3.44 }
3.45
3.46 gtk_window_present(GTK_WINDOW(font_dialog));
4.1 --- a/pidgin/plugins/themeedit.c
4.2 +++ b/pidgin/plugins/themeedit.c
4.3 @@ -98,7 +98,7 @@
4.4 theme_font_face_selected(GtkWidget *dialog, gint response, gpointer font)
4.5 {
4.6 if (response == GTK_RESPONSE_OK || response == GTK_RESPONSE_APPLY) {
4.7 - const char *fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(dialog));
4.8 + const char *fontname = gtk_font_chooser_get_font(GTK_FONT_CHOOSER(dialog));
4.9 pidgin_theme_font_set_font_face(font, fontname);
4.10 pidgin_blist_refresh(purple_get_blist());
4.11 }
4.12 @@ -108,6 +108,7 @@
4.13 static void
4.14 theme_font_select_face(GtkWidget *widget, gpointer prop)
4.15 {
4.16 + GtkWindow *window;
4.17 GtkWidget *dialog;
4.18 PidginBlistTheme *theme;
4.19 PidginThemeFont *font = NULL;
4.20 @@ -124,10 +125,10 @@
4.21 }
4.22
4.23 face = pidgin_theme_font_get_font_face(font);
4.24 - dialog = gtk_font_selection_dialog_new(_("Select Font"));
4.25 + window = GTK_WINDOW(gtk_widget_get_toplevel(widget));
4.26 + dialog = gtk_font_chooser_dialog_new(_("Select Font"), window);
4.27 if (face && *face)
4.28 - gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(dialog),
4.29 - face);
4.30 + gtk_font_chooser_set_font(GTK_FONT_CHOOSER(dialog), face);
4.31 g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(theme_font_face_selected),
4.32 font);
4.33 gtk_widget_show_all(dialog);