Use new GtkFontChooser where available.
authorElliott Sales de Andrade <qulogic@pidgin.im>
Thu, 16 Aug 2012 02:17:37 -0400
changeset8da9d2ec671d pushlog
parent 551fe73e2026
child 6d50ed11fcec
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.
pidgin/gtk3compat.h
pidgin/gtkwebviewtoolbar.c
pidgin/plugins/pidginrc.c
pidgin/plugins/themeedit.c
     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);