| 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 |