pidgin/gtkwebviewtoolbar.c

changeset 33275
8da9d2ec671d
parent 33266
2188505ba110
child 33276
6d50ed11fcec
equal deleted inserted replaced
33274:551fe73e2026 33275:8da9d2ec671d
41 #include "gtkthemes.h" 41 #include "gtkthemes.h"
42 #include "gtkutils.h" 42 #include "gtkutils.h"
43 43
44 #include <gdk/gdkkeysyms.h> 44 #include <gdk/gdkkeysyms.h>
45 45
46 #include "gtk3compat.h"
47
46 #define GTK_WEBVIEWTOOLBAR_GET_PRIVATE(obj) \ 48 #define GTK_WEBVIEWTOOLBAR_GET_PRIVATE(obj) \
47 (G_TYPE_INSTANCE_GET_PRIVATE((obj), GTK_TYPE_WEBVIEWTOOLBAR, GtkWebViewToolbarPriv)) 49 (G_TYPE_INSTANCE_GET_PRIVATE((obj), GTK_TYPE_WEBVIEWTOOLBAR, GtkWebViewToolbarPriv))
48 50
49 /****************************************************************************** 51 /******************************************************************************
50 * Structs 52 * Structs
158 g_return_if_fail(toolbar); 160 g_return_if_fail(toolbar);
159 gtk_webview_font_grow(GTK_WEBVIEW(toolbar->webview)); 161 gtk_webview_font_grow(GTK_WEBVIEW(toolbar->webview));
160 gtk_widget_grab_focus(toolbar->webview); 162 gtk_widget_grab_focus(toolbar->webview);
161 } 163 }
162 164
163 static gboolean 165 static void
164 destroy_toolbar_font(GtkWidget *widget, GdkEvent *event, 166 destroy_toolbar_font(GtkWebViewToolbar *toolbar)
165 GtkWebViewToolbar *toolbar) 167 {
166 { 168 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
167 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
168
169 if (widget != NULL)
170 gtk_webview_toggle_fontface(GTK_WEBVIEW(toolbar->webview), "");
171 169
172 if (priv->font_dialog != NULL) 170 if (priv->font_dialog != NULL)
173 { 171 {
174 gtk_widget_destroy(priv->font_dialog); 172 gtk_widget_destroy(priv->font_dialog);
175 priv->font_dialog = NULL; 173 priv->font_dialog = NULL;
176 } 174 }
177
178 return FALSE;
179 } 175 }
180 176
181 static void 177 static void
182 realize_toolbar_font(GtkWidget *widget, GtkWebViewToolbar *toolbar) 178 realize_toolbar_font(GtkWidget *widget, GtkWebViewToolbar *toolbar)
183 { 179 {
180 #if !GTK_CHECK_VERSION(3,2,0)
184 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 181 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
185 GtkFontSelection *sel; 182 GtkFontSelection *sel;
186 183
187 sel = GTK_FONT_SELECTION( 184 sel = GTK_FONT_SELECTION(
188 gtk_font_selection_dialog_get_font_selection(GTK_FONT_SELECTION_DIALOG(priv->font_dialog))); 185 gtk_font_selection_dialog_get_font_selection(GTK_FONT_SELECTION_DIALOG(priv->font_dialog)));
191 gtk_widget_show_all(gtk_font_selection_get_family_list(sel)); 188 gtk_widget_show_all(gtk_font_selection_get_family_list(sel));
192 gtk_widget_show(gtk_widget_get_parent( 189 gtk_widget_show(gtk_widget_get_parent(
193 gtk_font_selection_get_family_list(sel))); 190 gtk_font_selection_get_family_list(sel)));
194 gtk_widget_show(gtk_widget_get_parent(gtk_widget_get_parent( 191 gtk_widget_show(gtk_widget_get_parent(gtk_widget_get_parent(
195 gtk_font_selection_get_family_list(sel)))); 192 gtk_font_selection_get_family_list(sel))));
196 } 193 #endif
197 194 }
198 static void 195
199 cancel_toolbar_font(GtkWidget *widget, GtkWebViewToolbar *toolbar) 196 static void
200 { 197 apply_font(GtkDialog *dialog, gint response, GtkWebViewToolbar *toolbar)
201 destroy_toolbar_font(widget, NULL, toolbar);
202 }
203
204 static void
205 apply_font(GtkWidget *widget, GtkWebViewToolbar *toolbar)
206 { 198 {
207 /* this could be expanded to include font size, weight, etc. 199 /* this could be expanded to include font size, weight, etc.
208 but for now only works with font face */ 200 but for now only works with font face */
209 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); 201 gchar *fontname = NULL;
210 GtkFontSelectionDialog *fontsel = GTK_FONT_SELECTION_DIALOG(priv->font_dialog); 202
211 gchar *fontname = gtk_font_selection_dialog_get_font_name(fontsel); 203 if (response == GTK_RESPONSE_OK)
204 fontname = gtk_font_chooser_get_font(GTK_FONT_CHOOSER(dialog));
212 205
213 if (fontname) { 206 if (fontname) {
214 const gchar *family_name = NULL; 207 PangoFontDescription *desc;
215 PangoFontDescription *desc = NULL; 208 const gchar *family_name;
216 209
217 desc = pango_font_description_from_string(fontname); 210 desc = pango_font_description_from_string(fontname);
218 family_name = pango_font_description_get_family(desc); 211 family_name = pango_font_description_get_family(desc);
219 212
220 if (family_name) { 213 if (family_name) {
221 gtk_webview_toggle_fontface(GTK_WEBVIEW(toolbar->webview), 214 gtk_webview_toggle_fontface(GTK_WEBVIEW(toolbar->webview),
222 family_name); 215 family_name);
223 } 216 }
224 217
225 pango_font_description_free(desc); 218 pango_font_description_free(desc);
226 g_free(fontname); 219 g_free(fontname);
227 } 220 } else {
228 221 gtk_webview_toggle_fontface(GTK_WEBVIEW(toolbar->webview), "");
229 cancel_toolbar_font(NULL, toolbar); 222 }
223
224 destroy_toolbar_font(toolbar);
230 } 225 }
231 226
232 static void 227 static void
233 toggle_font(GtkAction *font, GtkWebViewToolbar *toolbar) 228 toggle_font(GtkAction *font, GtkWebViewToolbar *toolbar)
234 { 229 {
236 231
237 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(font))) { 232 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(font))) {
238 char *fontname = gtk_webview_get_current_fontface(GTK_WEBVIEW(toolbar->webview)); 233 char *fontname = gtk_webview_get_current_fontface(GTK_WEBVIEW(toolbar->webview));
239 234
240 if (!priv->font_dialog) { 235 if (!priv->font_dialog) {
241 priv->font_dialog = gtk_font_selection_dialog_new(_("Select Font")); 236 GtkWindow *window;
237 window = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(toolbar)));
238 priv->font_dialog = gtk_font_chooser_dialog_new(_("Select Font"), window);
242 239
243 if (fontname) { 240 if (fontname) {
244 char *fonttif = g_strdup_printf("%s 12", fontname); 241 char *fonttif = g_strdup_printf("%s 12", fontname);
245 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(priv->font_dialog), 242 gtk_font_chooser_set_font(GTK_FONT_CHOOSER(priv->font_dialog),
246 fonttif); 243 fonttif);
247 g_free(fonttif); 244 g_free(fonttif);
248 } else { 245 } else {
249 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(priv->font_dialog), 246 gtk_font_chooser_set_font(GTK_FONT_CHOOSER(priv->font_dialog),
250 DEFAULT_FONT_FACE); 247 DEFAULT_FONT_FACE);
251 } 248 }
252 249
253 g_signal_connect(G_OBJECT(priv->font_dialog), "delete_event", 250 g_signal_connect(G_OBJECT(priv->font_dialog), "response",
254 G_CALLBACK(destroy_toolbar_font), toolbar); 251 G_CALLBACK(apply_font), toolbar);
255 g_signal_connect(G_OBJECT(
256 gtk_font_selection_dialog_get_ok_button(GTK_FONT_SELECTION_DIALOG(priv->font_dialog))),
257 "clicked", G_CALLBACK(apply_font), toolbar);
258 g_signal_connect(G_OBJECT(
259 gtk_font_selection_dialog_get_cancel_button(GTK_FONT_SELECTION_DIALOG(priv->font_dialog))),
260 "clicked", G_CALLBACK(cancel_toolbar_font), toolbar);
261 g_signal_connect_after(G_OBJECT(priv->font_dialog), "realize", 252 g_signal_connect_after(G_OBJECT(priv->font_dialog), "realize",
262 G_CALLBACK(realize_toolbar_font), toolbar); 253 G_CALLBACK(realize_toolbar_font), toolbar);
263 } 254 }
264 255
265 gtk_window_present(GTK_WINDOW(priv->font_dialog)); 256 gtk_window_present(GTK_WINDOW(priv->font_dialog));
266 257
267 g_free(fontname); 258 g_free(fontname);
268 } else { 259 } else {
269 cancel_toolbar_font(GTK_WIDGET(toolbar), toolbar); 260 destroy_toolbar_font(toolbar);
270 } 261 }
271 262
272 gtk_widget_grab_focus(toolbar->webview); 263 gtk_widget_grab_focus(toolbar->webview);
273 } 264 }
274 265
1261 { 1252 {
1262 gtk_widget_destroy(priv->image_dialog); 1253 gtk_widget_destroy(priv->image_dialog);
1263 priv->image_dialog = NULL; 1254 priv->image_dialog = NULL;
1264 } 1255 }
1265 1256
1266 destroy_toolbar_font(NULL, NULL, toolbar); 1257 destroy_toolbar_font(toolbar);
1267 if (priv->smiley_dialog != NULL) { 1258 if (priv->smiley_dialog != NULL) {
1268 #if 0 1259 #if 0
1269 g_signal_handlers_disconnect_by_func(G_OBJECT(priv->smiley_dialog), close_smiley_dialog, toolbar); 1260 g_signal_handlers_disconnect_by_func(G_OBJECT(priv->smiley_dialog), close_smiley_dialog, toolbar);
1270 destroy_smiley_dialog(toolbar); 1261 destroy_smiley_dialog(toolbar);
1271 #endif 1262 #endif

mercurial