Mercurial > pidgin
comparison pidgin/gtkwebviewtoolbar.c @ 32462:15fa3f5e2c3f
Move all internal toolbar pointers into a private struct.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Thu, 05 Jan 2012 08:55:56 +0000 |
parents | 4cae9a5630e9 |
children | 8a8751c06d65 |
comparison
equal
deleted
inserted
replaced
32461:53d0779a32a1 | 32462:15fa3f5e2c3f |
---|---|
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 #define GTK_WEBVIEWTOOLBAR_GET_PRIVATE(obj) \ | |
47 (G_TYPE_INSTANCE_GET_PRIVATE((obj), GTK_TYPE_WEBVIEWTOOLBAR, GtkWebViewToolbarPriv)) | |
48 | |
49 /****************************************************************************** | |
50 * Structs | |
51 *****************************************************************************/ | |
52 | |
53 typedef struct _GtkWebViewToolbarPriv { | |
54 GtkTooltips *tooltips; | |
55 | |
56 GtkWidget *bold; | |
57 GtkWidget *italic; | |
58 GtkWidget *underline; | |
59 GtkWidget *strike; | |
60 GtkWidget *insert_hr; | |
61 GtkWidget *call; | |
62 | |
63 GtkWidget *larger_size; | |
64 GtkWidget *normal_size; | |
65 GtkWidget *smaller_size; | |
66 | |
67 GtkWidget *font; | |
68 GtkWidget *fgcolor; | |
69 GtkWidget *bgcolor; | |
70 | |
71 GtkWidget *clear; | |
72 | |
73 GtkWidget *image; | |
74 GtkWidget *link; | |
75 GtkWidget *smiley; | |
76 GtkWidget *attention; | |
77 | |
78 GtkWidget *font_dialog; | |
79 GtkWidget *fgcolor_dialog; | |
80 GtkWidget *bgcolor_dialog; | |
81 GtkWidget *link_dialog; | |
82 GtkWidget *smiley_dialog; | |
83 GtkWidget *image_dialog; | |
84 | |
85 char *sml; | |
86 } GtkWebViewToolbarPriv; | |
87 | |
46 /****************************************************************************** | 88 /****************************************************************************** |
47 * Globals | 89 * Globals |
48 *****************************************************************************/ | 90 *****************************************************************************/ |
49 | 91 |
50 static GtkHBoxClass *parent_class = NULL; | 92 static GtkHBoxClass *parent_class = NULL; |
119 | 161 |
120 static gboolean | 162 static gboolean |
121 destroy_toolbar_font(GtkWidget *widget, GdkEvent *event, | 163 destroy_toolbar_font(GtkWidget *widget, GdkEvent *event, |
122 GtkWebViewToolbar *toolbar) | 164 GtkWebViewToolbar *toolbar) |
123 { | 165 { |
166 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
167 | |
124 if (widget != NULL) | 168 if (widget != NULL) |
125 gtk_webview_toggle_fontface(GTK_WEBVIEW(toolbar->webview), ""); | 169 gtk_webview_toggle_fontface(GTK_WEBVIEW(toolbar->webview), ""); |
126 | 170 |
127 if (toolbar->font_dialog != NULL) | 171 if (priv->font_dialog != NULL) |
128 { | 172 { |
129 gtk_widget_destroy(toolbar->font_dialog); | 173 gtk_widget_destroy(priv->font_dialog); |
130 toolbar->font_dialog = NULL; | 174 priv->font_dialog = NULL; |
131 } | 175 } |
176 | |
132 return FALSE; | 177 return FALSE; |
133 } | 178 } |
134 | 179 |
135 static void | 180 static void |
136 realize_toolbar_font(GtkWidget *widget, GtkWebViewToolbar *toolbar) | 181 realize_toolbar_font(GtkWidget *widget, GtkWebViewToolbar *toolbar) |
137 { | 182 { |
183 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
138 GtkFontSelection *sel; | 184 GtkFontSelection *sel; |
139 | 185 |
140 sel = GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->fontsel); | 186 sel = GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(priv->font_dialog)->fontsel); |
141 gtk_widget_hide_all(gtk_widget_get_parent(sel->size_entry)); | 187 gtk_widget_hide_all(gtk_widget_get_parent(sel->size_entry)); |
142 gtk_widget_show_all(sel->family_list); | 188 gtk_widget_show_all(sel->family_list); |
143 gtk_widget_show(gtk_widget_get_parent(sel->family_list)); | 189 gtk_widget_show(gtk_widget_get_parent(sel->family_list)); |
144 gtk_widget_show(gtk_widget_get_parent(gtk_widget_get_parent(sel->family_list))); | 190 gtk_widget_show(gtk_widget_get_parent(gtk_widget_get_parent(sel->family_list))); |
145 } | 191 } |
179 } | 225 } |
180 | 226 |
181 static void | 227 static void |
182 toggle_font(GtkWidget *font, GtkWebViewToolbar *toolbar) | 228 toggle_font(GtkWidget *font, GtkWebViewToolbar *toolbar) |
183 { | 229 { |
230 GtkWebViewToolbarPriv *priv; | |
184 g_return_if_fail(toolbar); | 231 g_return_if_fail(toolbar); |
232 priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
185 | 233 |
186 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(font))) { | 234 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(font))) { |
187 const char *fontname = gtk_webview_get_current_fontface(GTK_WEBVIEW(toolbar->webview)); | 235 const char *fontname = gtk_webview_get_current_fontface(GTK_WEBVIEW(toolbar->webview)); |
188 | 236 |
189 if (!toolbar->font_dialog) { | 237 if (!priv->font_dialog) { |
190 toolbar->font_dialog = gtk_font_selection_dialog_new(_("Select Font")); | 238 priv->font_dialog = gtk_font_selection_dialog_new(_("Select Font")); |
191 | 239 |
192 g_object_set_data(G_OBJECT(toolbar->font_dialog), "purple_toolbar", toolbar); | 240 g_object_set_data(G_OBJECT(priv->font_dialog), "purple_toolbar", toolbar); |
193 | 241 |
194 if (fontname) { | 242 if (fontname) { |
195 char *fonttif = g_strdup_printf("%s 12", fontname); | 243 char *fonttif = g_strdup_printf("%s 12", fontname); |
196 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog), | 244 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(priv->font_dialog), |
197 fonttif); | 245 fonttif); |
198 g_free(fonttif); | 246 g_free(fonttif); |
199 } else { | 247 } else { |
200 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog), | 248 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(priv->font_dialog), |
201 DEFAULT_FONT_FACE); | 249 DEFAULT_FONT_FACE); |
202 } | 250 } |
203 | 251 |
204 g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event", | 252 g_signal_connect(G_OBJECT(priv->font_dialog), "delete_event", |
205 G_CALLBACK(destroy_toolbar_font), toolbar); | 253 G_CALLBACK(destroy_toolbar_font), toolbar); |
206 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->ok_button), "clicked", | 254 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(priv->font_dialog)->ok_button), "clicked", |
207 G_CALLBACK(apply_font), toolbar->font_dialog); | 255 G_CALLBACK(apply_font), priv->font_dialog); |
208 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->cancel_button), "clicked", | 256 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(priv->font_dialog)->cancel_button), "clicked", |
209 G_CALLBACK(cancel_toolbar_font), toolbar); | 257 G_CALLBACK(cancel_toolbar_font), toolbar); |
210 g_signal_connect_after(G_OBJECT(toolbar->font_dialog), "realize", | 258 g_signal_connect_after(G_OBJECT(priv->font_dialog), "realize", |
211 G_CALLBACK(realize_toolbar_font), toolbar); | 259 G_CALLBACK(realize_toolbar_font), toolbar); |
212 } | 260 } |
213 gtk_window_present(GTK_WINDOW(toolbar->font_dialog)); | 261 gtk_window_present(GTK_WINDOW(priv->font_dialog)); |
214 } else { | 262 } else { |
215 cancel_toolbar_font(font, toolbar); | 263 cancel_toolbar_font(font, toolbar); |
216 } | 264 } |
265 | |
217 gtk_widget_grab_focus(toolbar->webview); | 266 gtk_widget_grab_focus(toolbar->webview); |
218 } | 267 } |
219 | 268 |
220 static gboolean | 269 static gboolean |
221 destroy_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event, | 270 destroy_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event, |
222 GtkWebViewToolbar *toolbar) | 271 GtkWebViewToolbar *toolbar) |
223 { | 272 { |
273 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
274 | |
224 if (widget != NULL) | 275 if (widget != NULL) |
225 gtk_webview_toggle_forecolor(GTK_WEBVIEW(toolbar->webview), ""); | 276 gtk_webview_toggle_forecolor(GTK_WEBVIEW(toolbar->webview), ""); |
226 | 277 |
227 if (toolbar->fgcolor_dialog != NULL) | 278 if (priv->fgcolor_dialog != NULL) |
228 { | 279 { |
229 gtk_widget_destroy(toolbar->fgcolor_dialog); | 280 gtk_widget_destroy(priv->fgcolor_dialog); |
230 toolbar->fgcolor_dialog = NULL; | 281 priv->fgcolor_dialog = NULL; |
231 } | 282 } |
283 | |
232 return FALSE; | 284 return FALSE; |
233 } | 285 } |
234 | 286 |
235 static void | 287 static void |
236 cancel_toolbar_fgcolor(GtkWidget *widget, GtkWebViewToolbar *toolbar) | 288 cancel_toolbar_fgcolor(GtkWidget *widget, GtkWebViewToolbar *toolbar) |
258 } | 310 } |
259 | 311 |
260 static void | 312 static void |
261 toggle_fg_color(GtkWidget *color, GtkWebViewToolbar *toolbar) | 313 toggle_fg_color(GtkWidget *color, GtkWebViewToolbar *toolbar) |
262 { | 314 { |
315 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
263 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color))) { | 316 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color))) { |
264 GtkWidget *colorsel; | 317 GtkWidget *colorsel; |
265 GdkColor fgcolor; | 318 GdkColor fgcolor; |
266 const char *color = gtk_webview_get_current_forecolor(GTK_WEBVIEW(toolbar->webview)); | 319 const char *color = gtk_webview_get_current_forecolor(GTK_WEBVIEW(toolbar->webview)); |
267 | 320 |
268 if (!toolbar->fgcolor_dialog) { | 321 if (!priv->fgcolor_dialog) { |
269 | 322 |
270 toolbar->fgcolor_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); | 323 priv->fgcolor_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); |
271 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->colorsel; | 324 colorsel = GTK_COLOR_SELECTION_DIALOG(priv->fgcolor_dialog)->colorsel; |
272 if (color) { | 325 if (color) { |
273 gdk_color_parse(color, &fgcolor); | 326 gdk_color_parse(color, &fgcolor); |
274 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); | 327 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); |
275 } | 328 } |
276 | 329 |
277 g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); | 330 g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); |
278 | 331 |
279 g_signal_connect(G_OBJECT(toolbar->fgcolor_dialog), "delete_event", | 332 g_signal_connect(G_OBJECT(priv->fgcolor_dialog), "delete_event", |
280 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); | 333 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); |
281 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->ok_button), "clicked", | 334 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(priv->fgcolor_dialog)->ok_button), "clicked", |
282 G_CALLBACK(do_fgcolor), colorsel); | 335 G_CALLBACK(do_fgcolor), colorsel); |
283 g_signal_connect(G_OBJECT (GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->cancel_button), "clicked", | 336 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(priv->fgcolor_dialog)->cancel_button), "clicked", |
284 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); | 337 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); |
285 } | 338 } |
286 gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog)); | 339 gtk_window_present(GTK_WINDOW(priv->fgcolor_dialog)); |
287 } else { | 340 } else { |
288 cancel_toolbar_fgcolor(color, toolbar); | 341 cancel_toolbar_fgcolor(color, toolbar); |
289 } | 342 } |
343 | |
290 gtk_widget_grab_focus(toolbar->webview); | 344 gtk_widget_grab_focus(toolbar->webview); |
291 } | 345 } |
292 | 346 |
293 static gboolean | 347 static gboolean |
294 destroy_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event, | 348 destroy_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event, |
295 GtkWebViewToolbar *toolbar) | 349 GtkWebViewToolbar *toolbar) |
296 { | 350 { |
351 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
297 if (widget != NULL) { | 352 if (widget != NULL) { |
298 #if 0 | 353 #if 0 |
299 if (gtk_text_buffer_get_selection_bounds(GTK_WEBVIEW(toolbar->webview)->text_buffer, NULL, NULL)) | 354 if (gtk_text_buffer_get_selection_bounds(GTK_WEBVIEW(toolbar->webview)->text_buffer, NULL, NULL)) |
300 gtk_webview_toggle_backcolor(GTK_WEBVIEW(toolbar->webview), ""); | 355 gtk_webview_toggle_backcolor(GTK_WEBVIEW(toolbar->webview), ""); |
301 else | 356 else |
302 #endif | 357 #endif |
303 gtk_webview_toggle_background(GTK_WEBVIEW(toolbar->webview), ""); | 358 gtk_webview_toggle_background(GTK_WEBVIEW(toolbar->webview), ""); |
304 } | 359 } |
305 | 360 |
306 if (toolbar->bgcolor_dialog != NULL) | 361 if (priv->bgcolor_dialog != NULL) |
307 { | 362 { |
308 gtk_widget_destroy(toolbar->bgcolor_dialog); | 363 gtk_widget_destroy(priv->bgcolor_dialog); |
309 toolbar->bgcolor_dialog = NULL; | 364 priv->bgcolor_dialog = NULL; |
310 } | 365 } |
366 | |
311 return FALSE; | 367 return FALSE; |
312 } | 368 } |
313 | 369 |
314 static void | 370 static void |
315 cancel_toolbar_bgcolor(GtkWidget *widget, GtkWebViewToolbar *toolbar) | 371 cancel_toolbar_bgcolor(GtkWidget *widget, GtkWebViewToolbar *toolbar) |
342 } | 398 } |
343 | 399 |
344 static void | 400 static void |
345 toggle_bg_color(GtkWidget *color, GtkWebViewToolbar *toolbar) | 401 toggle_bg_color(GtkWidget *color, GtkWebViewToolbar *toolbar) |
346 { | 402 { |
403 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
347 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color))) { | 404 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color))) { |
348 GtkWidget *colorsel; | 405 GtkWidget *colorsel; |
349 GdkColor bgcolor; | 406 GdkColor bgcolor; |
350 const char *color = gtk_webview_get_current_backcolor(GTK_WEBVIEW(toolbar->webview)); | 407 const char *color = gtk_webview_get_current_backcolor(GTK_WEBVIEW(toolbar->webview)); |
351 | 408 |
352 if (!toolbar->bgcolor_dialog) { | 409 if (!priv->bgcolor_dialog) { |
353 | 410 |
354 toolbar->bgcolor_dialog = gtk_color_selection_dialog_new(_("Select Background Color")); | 411 priv->bgcolor_dialog = gtk_color_selection_dialog_new(_("Select Background Color")); |
355 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->colorsel; | 412 colorsel = GTK_COLOR_SELECTION_DIALOG(priv->bgcolor_dialog)->colorsel; |
356 if (color) { | 413 if (color) { |
357 gdk_color_parse(color, &bgcolor); | 414 gdk_color_parse(color, &bgcolor); |
358 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); | 415 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); |
359 } | 416 } |
360 | 417 |
361 g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); | 418 g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); |
362 | 419 |
363 g_signal_connect(G_OBJECT(toolbar->bgcolor_dialog), "delete_event", | 420 g_signal_connect(G_OBJECT(priv->bgcolor_dialog), "delete_event", |
364 G_CALLBACK(destroy_toolbar_bgcolor), toolbar); | 421 G_CALLBACK(destroy_toolbar_bgcolor), toolbar); |
365 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->ok_button), "clicked", | 422 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(priv->bgcolor_dialog)->ok_button), "clicked", |
366 G_CALLBACK(do_bgcolor), colorsel); | 423 G_CALLBACK(do_bgcolor), colorsel); |
367 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->cancel_button), "clicked", | 424 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(priv->bgcolor_dialog)->cancel_button), "clicked", |
368 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); | 425 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); |
369 | 426 |
370 } | 427 } |
371 gtk_window_present(GTK_WINDOW(toolbar->bgcolor_dialog)); | 428 gtk_window_present(GTK_WINDOW(priv->bgcolor_dialog)); |
372 } else { | 429 } else { |
373 cancel_toolbar_bgcolor(color, toolbar); | 430 cancel_toolbar_bgcolor(color, toolbar); |
374 } | 431 } |
432 | |
375 gtk_widget_grab_focus(toolbar->webview); | 433 gtk_widget_grab_focus(toolbar->webview); |
376 } | 434 } |
377 | 435 |
378 static void | 436 static void |
379 clear_formatting_cb(GtkWidget *clear, GtkWebViewToolbar *toolbar) | 437 clear_formatting_cb(GtkWidget *clear, GtkWebViewToolbar *toolbar) |
380 { | 438 { |
381 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->clear), FALSE, toolbar); | 439 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
440 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(priv->clear), FALSE, toolbar); | |
382 gtk_webview_clear_formatting(GTK_WEBVIEW(toolbar->webview)); | 441 gtk_webview_clear_formatting(GTK_WEBVIEW(toolbar->webview)); |
383 } | 442 } |
384 | 443 |
385 static void | 444 static void |
386 cancel_link_cb(GtkWebViewToolbar *toolbar, PurpleRequestFields *fields) | 445 cancel_link_cb(GtkWebViewToolbar *toolbar, PurpleRequestFields *fields) |
387 { | 446 { |
388 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link), FALSE); | 447 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
389 | 448 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->link), FALSE); |
390 toolbar->link_dialog = NULL; | 449 |
450 priv->link_dialog = NULL; | |
391 } | 451 } |
392 | 452 |
393 static void | 453 static void |
394 close_link_dialog(GtkWebViewToolbar *toolbar) | 454 close_link_dialog(GtkWebViewToolbar *toolbar) |
395 { | 455 { |
396 if (toolbar->link_dialog != NULL) | 456 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
457 if (priv->link_dialog != NULL) | |
397 { | 458 { |
398 purple_request_close(PURPLE_REQUEST_FIELDS, toolbar->link_dialog); | 459 purple_request_close(PURPLE_REQUEST_FIELDS, priv->link_dialog); |
399 toolbar->link_dialog = NULL; | 460 priv->link_dialog = NULL; |
400 } | 461 } |
401 } | 462 } |
402 | 463 |
403 static void | 464 static void |
404 do_insert_link_cb(GtkWebViewToolbar *toolbar, PurpleRequestFields *fields) | 465 do_insert_link_cb(GtkWebViewToolbar *toolbar, PurpleRequestFields *fields) |
405 { | 466 { |
467 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
406 const char *url, *description; | 468 const char *url, *description; |
407 | 469 |
408 url = purple_request_fields_get_string(fields, "url"); | 470 url = purple_request_fields_get_string(fields, "url"); |
409 if (gtk_webview_get_format_functions(GTK_WEBVIEW(toolbar->webview)) & GTK_WEBVIEW_LINKDESC) | 471 if (gtk_webview_get_format_functions(GTK_WEBVIEW(toolbar->webview)) & GTK_WEBVIEW_LINKDESC) |
410 description = purple_request_fields_get_string(fields, "description"); | 472 description = purple_request_fields_get_string(fields, "description"); |
418 gtk_webview_insert_link(GTK_WEBVIEW(toolbar->webview), | 480 gtk_webview_insert_link(GTK_WEBVIEW(toolbar->webview), |
419 gtk_text_buffer_get_insert(GTK_WEBVIEW(toolbar->webview)->text_buffer), | 481 gtk_text_buffer_get_insert(GTK_WEBVIEW(toolbar->webview)->text_buffer), |
420 url, description); | 482 url, description); |
421 #endif | 483 #endif |
422 | 484 |
423 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link), FALSE); | 485 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->link), FALSE); |
424 | 486 |
425 toolbar->link_dialog = NULL; | 487 priv->link_dialog = NULL; |
426 } | 488 } |
427 | 489 |
428 static void | 490 static void |
429 insert_link_cb(GtkWidget *w, GtkWebViewToolbar *toolbar) | 491 insert_link_cb(GtkWidget *w, GtkWebViewToolbar *toolbar) |
430 { | 492 { |
431 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->link))) { | 493 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
494 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->link))) { | |
432 PurpleRequestFields *fields; | 495 PurpleRequestFields *fields; |
433 PurpleRequestFieldGroup *group; | 496 PurpleRequestFieldGroup *group; |
434 PurpleRequestField *field; | 497 PurpleRequestField *field; |
435 #if 0 | 498 #if 0 |
436 GtkTextIter start, end; | 499 GtkTextIter start, end; |
462 } else { | 525 } else { |
463 msg = g_strdup(_("Please enter the URL of the " | 526 msg = g_strdup(_("Please enter the URL of the " |
464 "link that you want to insert.")); | 527 "link that you want to insert.")); |
465 } | 528 } |
466 | 529 |
467 toolbar->link_dialog = | 530 priv->link_dialog = |
468 purple_request_fields(toolbar, _("Insert Link"), | 531 purple_request_fields(toolbar, _("Insert Link"), |
469 NULL, | 532 NULL, |
470 msg, | 533 msg, |
471 fields, | 534 fields, |
472 _("_Insert"), G_CALLBACK(do_insert_link_cb), | 535 _("_Insert"), G_CALLBACK(do_insert_link_cb), |
476 g_free(msg); | 539 g_free(msg); |
477 g_free(desc); | 540 g_free(desc); |
478 } else { | 541 } else { |
479 close_link_dialog(toolbar); | 542 close_link_dialog(toolbar); |
480 } | 543 } |
544 | |
481 gtk_widget_grab_focus(toolbar->webview); | 545 gtk_widget_grab_focus(toolbar->webview); |
482 } | 546 } |
483 | 547 |
484 static void | 548 static void |
485 insert_hr_cb(GtkWidget *widget, GtkWebViewToolbar *toolbar) | 549 insert_hr_cb(GtkWidget *widget, GtkWebViewToolbar *toolbar) |
497 } | 561 } |
498 | 562 |
499 static void | 563 static void |
500 do_insert_image_cb(GtkWidget *widget, int response, GtkWebViewToolbar *toolbar) | 564 do_insert_image_cb(GtkWidget *widget, int response, GtkWebViewToolbar *toolbar) |
501 { | 565 { |
502 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | 566 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
567 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->image), FALSE); | |
503 #if 0 | 568 #if 0 |
504 gchar *filename, *name, *buf; | 569 gchar *filename, *name, *buf; |
505 char *filedata; | 570 char *filedata; |
506 size_t size; | 571 size_t size; |
507 GError *error = NULL; | 572 GError *error = NULL; |
509 GtkTextIter iter; | 574 GtkTextIter iter; |
510 GtkTextMark *ins; | 575 GtkTextMark *ins; |
511 | 576 |
512 if (response != GTK_RESPONSE_ACCEPT) | 577 if (response != GTK_RESPONSE_ACCEPT) |
513 { | 578 { |
514 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | 579 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->image), FALSE); |
515 return; | 580 return; |
516 } | 581 } |
517 | 582 |
518 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)); | 583 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)); |
519 | 584 |
520 if (filename == NULL) { | 585 if (filename == NULL) { |
521 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | 586 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->image), FALSE); |
522 return; | 587 return; |
523 } | 588 } |
524 | 589 |
525 /* The following triggers a callback that closes the widget */ | 590 /* The following triggers a callback that closes the widget */ |
526 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | 591 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->image), FALSE); |
527 | 592 |
528 if (!g_file_get_contents(filename, &filedata, &size, &error)) { | 593 if (!g_file_get_contents(filename, &filedata, &size, &error)) { |
529 purple_notify_error(NULL, NULL, error->message, NULL); | 594 purple_notify_error(NULL, NULL, error->message, NULL); |
530 | 595 |
531 g_error_free(error); | 596 g_error_free(error); |
559 } | 624 } |
560 | 625 |
561 static void | 626 static void |
562 insert_image_cb(GtkWidget *save, GtkWebViewToolbar *toolbar) | 627 insert_image_cb(GtkWidget *save, GtkWebViewToolbar *toolbar) |
563 { | 628 { |
629 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
564 GtkWidget *window; | 630 GtkWidget *window; |
565 | 631 |
566 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))) { | 632 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->image))) { |
567 window = gtk_file_chooser_dialog_new(_("Insert Image"), | 633 window = gtk_file_chooser_dialog_new(_("Insert Image"), |
568 NULL, | 634 NULL, |
569 GTK_FILE_CHOOSER_ACTION_OPEN, | 635 GTK_FILE_CHOOSER_ACTION_OPEN, |
570 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | 636 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
571 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, | 637 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, |
573 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_ACCEPT); | 639 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_ACCEPT); |
574 g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(window)), | 640 g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(window)), |
575 "response", G_CALLBACK(do_insert_image_cb), toolbar); | 641 "response", G_CALLBACK(do_insert_image_cb), toolbar); |
576 | 642 |
577 gtk_widget_show(window); | 643 gtk_widget_show(window); |
578 toolbar->image_dialog = window; | 644 priv->image_dialog = window; |
579 } else { | 645 } else { |
580 gtk_widget_destroy(toolbar->image_dialog); | 646 gtk_widget_destroy(priv->image_dialog); |
581 toolbar->image_dialog = NULL; | 647 priv->image_dialog = NULL; |
582 } | 648 } |
583 | 649 |
584 gtk_widget_grab_focus(toolbar->webview); | 650 gtk_widget_grab_focus(toolbar->webview); |
585 } | 651 } |
586 | 652 |
587 #if 0 | 653 #if 0 |
588 static void | 654 static void |
589 destroy_smiley_dialog(GtkWebViewToolbar *toolbar) | 655 destroy_smiley_dialog(GtkWebViewToolbar *toolbar) |
590 { | 656 { |
591 if (toolbar->smiley_dialog != NULL) | 657 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
658 if (priv->smiley_dialog != NULL) | |
592 { | 659 { |
593 gtk_widget_destroy(toolbar->smiley_dialog); | 660 gtk_widget_destroy(priv->smiley_dialog); |
594 toolbar->smiley_dialog = NULL; | 661 priv->smiley_dialog = NULL; |
595 } | 662 } |
596 } | 663 } |
597 | 664 |
598 static gboolean | 665 static gboolean |
599 close_smiley_dialog(GtkWebViewToolbar *toolbar) | 666 close_smiley_dialog(GtkWebViewToolbar *toolbar) |
600 { | 667 { |
601 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->smiley), FALSE); | 668 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
669 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->smiley), FALSE); | |
602 return FALSE; | 670 return FALSE; |
603 } | 671 } |
604 | 672 |
605 | 673 |
606 static void | 674 static void |
607 insert_smiley_text(GtkWidget *widget, GtkWebViewToolbar *toolbar) | 675 insert_smiley_text(GtkWidget *widget, GtkWebViewToolbar *toolbar) |
608 { | 676 { |
677 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
609 char *smiley_text, *escaped_smiley; | 678 char *smiley_text, *escaped_smiley; |
610 | 679 |
611 smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); | 680 smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); |
612 escaped_smiley = g_markup_escape_text(smiley_text, -1); | 681 escaped_smiley = g_markup_escape_text(smiley_text, -1); |
613 | 682 |
630 | 699 |
631 static struct smiley_button_list * | 700 static struct smiley_button_list * |
632 sort_smileys(struct smiley_button_list *ls, GtkWebViewToolbar *toolbar, | 701 sort_smileys(struct smiley_button_list *ls, GtkWebViewToolbar *toolbar, |
633 int *width, const GtkIMHtmlSmiley *smiley) | 702 int *width, const GtkIMHtmlSmiley *smiley) |
634 { | 703 { |
704 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
635 GtkWidget *image; | 705 GtkWidget *image; |
636 GtkWidget *button; | 706 GtkWidget *button; |
637 GtkRequisition size; | 707 GtkRequisition size; |
638 struct smiley_button_list *cur; | 708 struct smiley_button_list *cur; |
639 struct smiley_button_list *it, *it_last; | 709 struct smiley_button_list *it, *it_last; |
683 gtk_container_add(GTK_CONTAINER(button), image); | 753 gtk_container_add(GTK_CONTAINER(button), image); |
684 | 754 |
685 g_object_set_data(G_OBJECT(button), "smiley_text", face); | 755 g_object_set_data(G_OBJECT(button), "smiley_text", face); |
686 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(insert_smiley_text), toolbar); | 756 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(insert_smiley_text), toolbar); |
687 | 757 |
688 gtk_tooltips_set_tip(toolbar->tooltips, button, face, NULL); | 758 gtk_tooltips_set_tip(priv->tooltips, button, face, NULL); |
689 | 759 |
690 /* these look really weird with borders */ | 760 /* these look really weird with borders */ |
691 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | 761 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
692 | 762 |
693 psmiley = purple_smileys_find_by_shortcut(smiley->smile); | 763 psmiley = purple_smileys_find_by_shortcut(smiley->smile); |
697 if (supports_custom && psmiley && !(smiley->flags & GTK_WEBVIEW_SMILEY_CUSTOM)) { | 767 if (supports_custom && psmiley && !(smiley->flags & GTK_WEBVIEW_SMILEY_CUSTOM)) { |
698 gchar tip[128]; | 768 gchar tip[128]; |
699 g_snprintf(tip, sizeof(tip), | 769 g_snprintf(tip, sizeof(tip), |
700 _("This smiley is disabled because a custom smiley exists for this shortcut:\n %s"), | 770 _("This smiley is disabled because a custom smiley exists for this shortcut:\n %s"), |
701 face); | 771 face); |
702 gtk_tooltips_set_tip(toolbar->tooltips, button, tip, NULL); | 772 gtk_tooltips_set_tip(priv->tooltips, button, tip, NULL); |
703 gtk_widget_set_sensitive(button, FALSE); | 773 gtk_widget_set_sensitive(button, FALSE); |
704 } else if (psmiley) { | 774 } else if (psmiley) { |
705 /* Remove the button if the smiley is destroyed */ | 775 /* Remove the button if the smiley is destroyed */ |
706 g_signal_connect_object(G_OBJECT(psmiley), "destroy", G_CALLBACK(gtk_widget_destroy), | 776 g_signal_connect_object(G_OBJECT(psmiley), "destroy", G_CALLBACK(gtk_widget_destroy), |
707 button, G_CONNECT_SWAPPED); | 777 button, G_CONNECT_SWAPPED); |
727 } | 797 } |
728 | 798 |
729 static gboolean | 799 static gboolean |
730 smiley_is_unique(GSList *list, GtkIMHtmlSmiley *smiley) | 800 smiley_is_unique(GSList *list, GtkIMHtmlSmiley *smiley) |
731 { | 801 { |
802 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
732 while (list) { | 803 while (list) { |
733 GtkIMHtmlSmiley *cur = (GtkIMHtmlSmiley *) list->data; | 804 GtkIMHtmlSmiley *cur = (GtkIMHtmlSmiley *) list->data; |
734 if (!strcmp(cur->file, smiley->file)) | 805 if (!strcmp(cur->file, smiley->file)) |
735 return FALSE; | 806 return FALSE; |
736 list = list->next; | 807 list = list->next; |
783 | 854 |
784 static void | 855 static void |
785 insert_smiley_cb(GtkWidget *smiley, GtkWebViewToolbar *toolbar) | 856 insert_smiley_cb(GtkWidget *smiley, GtkWebViewToolbar *toolbar) |
786 { | 857 { |
787 #if 0 | 858 #if 0 |
859 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
788 GtkWidget *dialog, *vbox; | 860 GtkWidget *dialog, *vbox; |
789 GtkWidget *smiley_table = NULL; | 861 GtkWidget *smiley_table = NULL; |
790 GSList *smileys, *unique_smileys = NULL; | 862 GSList *smileys, *unique_smileys = NULL; |
791 const GSList *custom_smileys = NULL; | 863 const GSList *custom_smileys = NULL; |
792 gboolean supports_custom = FALSE; | 864 gboolean supports_custom = FALSE; |
797 destroy_smiley_dialog(toolbar); | 869 destroy_smiley_dialog(toolbar); |
798 gtk_widget_grab_focus(toolbar->webview); | 870 gtk_widget_grab_focus(toolbar->webview); |
799 return; | 871 return; |
800 } | 872 } |
801 | 873 |
802 if (toolbar->sml) | 874 if (priv->sml) |
803 smileys = pidgin_themes_get_proto_smileys(toolbar->sml); | 875 smileys = pidgin_themes_get_proto_smileys(priv->sml); |
804 else | 876 else |
805 smileys = pidgin_themes_get_proto_smileys(NULL); | 877 smileys = pidgin_themes_get_proto_smileys(NULL); |
806 | 878 |
807 /* Note: prepend smileys to list to avoid O(n^2) overhead when there is | 879 /* Note: prepend smileys to list to avoid O(n^2) overhead when there is |
808 a large number of smileys... need to revers the list after for the dialog | 880 a large number of smileys... need to revers the list after for the dialog |
922 | 994 |
923 #ifdef _WIN32 | 995 #ifdef _WIN32 |
924 winpidgin_ensure_onscreen(dialog); | 996 winpidgin_ensure_onscreen(dialog); |
925 #endif | 997 #endif |
926 | 998 |
927 toolbar->smiley_dialog = dialog; | 999 priv->smiley_dialog = dialog; |
928 | 1000 |
929 gtk_widget_grab_focus(toolbar->webview); | 1001 gtk_widget_grab_focus(toolbar->webview); |
930 #endif | 1002 #endif |
931 } | 1003 } |
932 | 1004 |
945 | 1017 |
946 static void | 1018 static void |
947 update_buttons_cb(GtkWebView *webview, GtkWebViewButtons buttons, | 1019 update_buttons_cb(GtkWebView *webview, GtkWebViewButtons buttons, |
948 GtkWebViewToolbar *toolbar) | 1020 GtkWebViewToolbar *toolbar) |
949 { | 1021 { |
950 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->bold), buttons & GTK_WEBVIEW_BOLD); | 1022 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
951 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->italic), buttons & GTK_WEBVIEW_ITALIC); | 1023 gtk_widget_set_sensitive(GTK_WIDGET(priv->bold), buttons & GTK_WEBVIEW_BOLD); |
952 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->underline), buttons & GTK_WEBVIEW_UNDERLINE); | 1024 gtk_widget_set_sensitive(GTK_WIDGET(priv->italic), buttons & GTK_WEBVIEW_ITALIC); |
953 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->strikethrough), buttons & GTK_WEBVIEW_STRIKE); | 1025 gtk_widget_set_sensitive(GTK_WIDGET(priv->underline), buttons & GTK_WEBVIEW_UNDERLINE); |
954 | 1026 gtk_widget_set_sensitive(GTK_WIDGET(priv->strike), buttons & GTK_WEBVIEW_STRIKE); |
955 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->larger_size), buttons & GTK_WEBVIEW_GROW); | 1027 |
956 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->smaller_size), buttons & GTK_WEBVIEW_SHRINK); | 1028 gtk_widget_set_sensitive(GTK_WIDGET(priv->larger_size), buttons & GTK_WEBVIEW_GROW); |
957 | 1029 gtk_widget_set_sensitive(GTK_WIDGET(priv->smaller_size), buttons & GTK_WEBVIEW_SHRINK); |
958 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->font), buttons & GTK_WEBVIEW_FACE); | 1030 |
959 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->fgcolor), buttons & GTK_WEBVIEW_FORECOLOR); | 1031 gtk_widget_set_sensitive(GTK_WIDGET(priv->font), buttons & GTK_WEBVIEW_FACE); |
960 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->bgcolor), buttons & GTK_WEBVIEW_BACKCOLOR); | 1032 gtk_widget_set_sensitive(GTK_WIDGET(priv->fgcolor), buttons & GTK_WEBVIEW_FORECOLOR); |
961 | 1033 gtk_widget_set_sensitive(GTK_WIDGET(priv->bgcolor), buttons & GTK_WEBVIEW_BACKCOLOR); |
962 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->clear), | 1034 |
1035 gtk_widget_set_sensitive(GTK_WIDGET(priv->clear), | |
963 (buttons & GTK_WEBVIEW_BOLD || | 1036 (buttons & GTK_WEBVIEW_BOLD || |
964 buttons & GTK_WEBVIEW_ITALIC || | 1037 buttons & GTK_WEBVIEW_ITALIC || |
965 buttons & GTK_WEBVIEW_UNDERLINE || | 1038 buttons & GTK_WEBVIEW_UNDERLINE || |
966 buttons & GTK_WEBVIEW_STRIKE || | 1039 buttons & GTK_WEBVIEW_STRIKE || |
967 buttons & GTK_WEBVIEW_GROW || | 1040 buttons & GTK_WEBVIEW_GROW || |
968 buttons & GTK_WEBVIEW_SHRINK || | 1041 buttons & GTK_WEBVIEW_SHRINK || |
969 buttons & GTK_WEBVIEW_FACE || | 1042 buttons & GTK_WEBVIEW_FACE || |
970 buttons & GTK_WEBVIEW_FORECOLOR || | 1043 buttons & GTK_WEBVIEW_FORECOLOR || |
971 buttons & GTK_WEBVIEW_BACKCOLOR)); | 1044 buttons & GTK_WEBVIEW_BACKCOLOR)); |
972 | 1045 |
973 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->image), buttons & GTK_WEBVIEW_IMAGE); | 1046 gtk_widget_set_sensitive(GTK_WIDGET(priv->image), buttons & GTK_WEBVIEW_IMAGE); |
974 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->link), buttons & GTK_WEBVIEW_LINK); | 1047 gtk_widget_set_sensitive(GTK_WIDGET(priv->link), buttons & GTK_WEBVIEW_LINK); |
975 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->smiley), buttons & GTK_WEBVIEW_SMILEY); | 1048 gtk_widget_set_sensitive(GTK_WIDGET(priv->smiley), buttons & GTK_WEBVIEW_SMILEY); |
976 } | 1049 } |
977 | 1050 |
978 /* we call this when we want to _set_active the toggle button, it'll | 1051 /* we call this when we want to _set_active the toggle button, it'll |
979 * block the callback thats connected to the button so we don't have to | 1052 * block the callback thats connected to the button so we don't have to |
980 * do the double toggling hack | 1053 * do the double toggling hack |
996 } | 1069 } |
997 | 1070 |
998 static void | 1071 static void |
999 update_buttons(GtkWebViewToolbar *toolbar) | 1072 update_buttons(GtkWebViewToolbar *toolbar) |
1000 { | 1073 { |
1074 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
1001 gboolean bold, italic, underline, strike; | 1075 gboolean bold, italic, underline, strike; |
1002 const char *tmp; | 1076 const char *tmp; |
1003 const char *tmp2; | 1077 const char *tmp2; |
1004 GtkLabel *label = g_object_get_data(G_OBJECT(toolbar), "font_label"); | 1078 GtkLabel *label = g_object_get_data(G_OBJECT(toolbar), "font_label"); |
1005 | 1079 |
1006 gtk_label_set_label(label, _("_Font")); | 1080 gtk_label_set_label(label, _("_Font")); |
1007 | 1081 |
1008 gtk_webview_get_current_format(GTK_WEBVIEW(toolbar->webview), | 1082 gtk_webview_get_current_format(GTK_WEBVIEW(toolbar->webview), |
1009 &bold, &italic, &underline, &strike); | 1083 &bold, &italic, &underline, &strike); |
1010 | 1084 |
1011 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)) != bold) | 1085 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->bold)) != bold) |
1012 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold, | 1086 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(priv->bold), bold, |
1013 toolbar); | 1087 toolbar); |
1014 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic)) != italic) | 1088 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->italic)) != italic) |
1015 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), italic, | 1089 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(priv->italic), italic, |
1016 toolbar); | 1090 toolbar); |
1017 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline)) != underline) | 1091 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->underline)) != underline) |
1018 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | 1092 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(priv->underline), |
1019 underline, toolbar); | 1093 underline, toolbar); |
1020 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->strikethrough)) != strike) | 1094 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->strike)) != strike) |
1021 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->strikethrough), | 1095 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(priv->strike), |
1022 strike, toolbar); | 1096 strike, toolbar); |
1023 | 1097 |
1024 /* These buttons aren't ever "active". */ | 1098 /* These buttons aren't ever "active". */ |
1025 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->smaller_size), FALSE); | 1099 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->smaller_size), FALSE); |
1026 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->larger_size), FALSE); | 1100 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->larger_size), FALSE); |
1027 | 1101 |
1028 if (bold) { | 1102 if (bold) { |
1029 gchar *markup = g_strdup_printf("<b>%s</b>", | 1103 gchar *markup = g_strdup_printf("<b>%s</b>", |
1030 gtk_label_get_label(label)); | 1104 gtk_label_get_label(label)); |
1031 gtk_label_set_markup_with_mnemonic(label, markup); | 1105 gtk_label_set_markup_with_mnemonic(label, markup); |
1049 gtk_label_set_markup_with_mnemonic(label, markup); | 1123 gtk_label_set_markup_with_mnemonic(label, markup); |
1050 g_free(markup); | 1124 g_free(markup); |
1051 } | 1125 } |
1052 | 1126 |
1053 tmp = gtk_webview_get_current_fontface(GTK_WEBVIEW(toolbar->webview)); | 1127 tmp = gtk_webview_get_current_fontface(GTK_WEBVIEW(toolbar->webview)); |
1054 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->font), | 1128 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(priv->font), |
1055 (tmp != NULL), toolbar); | 1129 (tmp != NULL), toolbar); |
1056 if (tmp != NULL) { | 1130 if (tmp != NULL) { |
1057 gchar *markup = g_strdup_printf("<span font_desc=\"%s\">%s</span>", | 1131 gchar *markup = g_strdup_printf("<span font_desc=\"%s\">%s</span>", |
1058 tmp, gtk_label_get_label(label)); | 1132 tmp, gtk_label_get_label(label)); |
1059 gtk_label_set_markup_with_mnemonic(label, markup); | 1133 gtk_label_set_markup_with_mnemonic(label, markup); |
1060 g_free(markup); | 1134 g_free(markup); |
1061 } | 1135 } |
1062 | 1136 |
1063 tmp = gtk_webview_get_current_forecolor(GTK_WEBVIEW(toolbar->webview)); | 1137 tmp = gtk_webview_get_current_forecolor(GTK_WEBVIEW(toolbar->webview)); |
1064 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->fgcolor), | 1138 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(priv->fgcolor), |
1065 (tmp != NULL), toolbar); | 1139 (tmp != NULL), toolbar); |
1066 if (tmp != NULL) { | 1140 if (tmp != NULL) { |
1067 gchar *markup = g_strdup_printf("<span foreground=\"%s\">%s</span>", | 1141 gchar *markup = g_strdup_printf("<span foreground=\"%s\">%s</span>", |
1068 tmp, gtk_label_get_label(label)); | 1142 tmp, gtk_label_get_label(label)); |
1069 gtk_label_set_markup_with_mnemonic(label, markup); | 1143 gtk_label_set_markup_with_mnemonic(label, markup); |
1070 g_free(markup); | 1144 g_free(markup); |
1071 } | 1145 } |
1072 | 1146 |
1073 tmp = gtk_webview_get_current_backcolor(GTK_WEBVIEW(toolbar->webview)); | 1147 tmp = gtk_webview_get_current_backcolor(GTK_WEBVIEW(toolbar->webview)); |
1074 tmp2 = gtk_webview_get_current_background(GTK_WEBVIEW(toolbar->webview)); | 1148 tmp2 = gtk_webview_get_current_background(GTK_WEBVIEW(toolbar->webview)); |
1075 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bgcolor), | 1149 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(priv->bgcolor), |
1076 (tmp != NULL || tmp2 != NULL), toolbar); | 1150 (tmp != NULL || tmp2 != NULL), toolbar); |
1077 if (tmp != NULL) { | 1151 if (tmp != NULL) { |
1078 gchar *markup = g_strdup_printf("<span background=\"%s\">%s</span>", | 1152 gchar *markup = g_strdup_printf("<span background=\"%s\">%s</span>", |
1079 tmp, gtk_label_get_label(label)); | 1153 tmp, gtk_label_get_label(label)); |
1080 gtk_label_set_markup_with_mnemonic(label, markup); | 1154 gtk_label_set_markup_with_mnemonic(label, markup); |
1168 | 1242 |
1169 static gboolean | 1243 static gboolean |
1170 gtk_webviewtoolbar_popup_menu(GtkWidget *widget, GdkEventButton *event, | 1244 gtk_webviewtoolbar_popup_menu(GtkWidget *widget, GdkEventButton *event, |
1171 GtkWebViewToolbar *toolbar) | 1245 GtkWebViewToolbar *toolbar) |
1172 { | 1246 { |
1247 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
1173 GtkWidget *menu; | 1248 GtkWidget *menu; |
1174 GtkWidget *item; | 1249 GtkWidget *item; |
1175 gboolean wide; | 1250 gboolean wide; |
1176 | 1251 |
1177 if (event->button != 3) | 1252 if (event->button != 3) |
1178 return FALSE; | 1253 return FALSE; |
1179 | 1254 |
1180 wide = GTK_WIDGET_VISIBLE(toolbar->bold); | 1255 wide = GTK_WIDGET_VISIBLE(priv->bold); |
1181 | 1256 |
1182 menu = gtk_menu_new(); | 1257 menu = gtk_menu_new(); |
1183 item = gtk_menu_item_new_with_mnemonic(wide ? _("Group Items") : _("Ungroup Items")); | 1258 item = gtk_menu_item_new_with_mnemonic(wide ? _("Group Items") : _("Ungroup Items")); |
1184 g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(switch_toolbar_view), toolbar); | 1259 g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(switch_toolbar_view), toolbar); |
1185 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | 1260 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
1239 | 1314 |
1240 static void | 1315 static void |
1241 gtk_webviewtoolbar_finalize(GObject *object) | 1316 gtk_webviewtoolbar_finalize(GObject *object) |
1242 { | 1317 { |
1243 GtkWebViewToolbar *toolbar = GTK_WEBVIEWTOOLBAR(object); | 1318 GtkWebViewToolbar *toolbar = GTK_WEBVIEWTOOLBAR(object); |
1319 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
1244 GtkWidget *menu; | 1320 GtkWidget *menu; |
1245 | 1321 |
1246 if (toolbar->image_dialog != NULL) | 1322 if (priv->image_dialog != NULL) |
1247 { | 1323 { |
1248 gtk_widget_destroy(toolbar->image_dialog); | 1324 gtk_widget_destroy(priv->image_dialog); |
1249 toolbar->image_dialog = NULL; | 1325 priv->image_dialog = NULL; |
1250 } | 1326 } |
1251 | 1327 |
1252 destroy_toolbar_font(NULL, NULL, toolbar); | 1328 destroy_toolbar_font(NULL, NULL, toolbar); |
1253 if (toolbar->smiley_dialog != NULL) { | 1329 if (priv->smiley_dialog != NULL) { |
1254 #if 0 | 1330 #if 0 |
1255 g_signal_handlers_disconnect_by_func(G_OBJECT(toolbar->smiley_dialog), close_smiley_dialog, toolbar); | 1331 g_signal_handlers_disconnect_by_func(G_OBJECT(priv->smiley_dialog), close_smiley_dialog, toolbar); |
1256 destroy_smiley_dialog(toolbar); | 1332 destroy_smiley_dialog(toolbar); |
1257 #endif | 1333 #endif |
1258 } | 1334 } |
1259 destroy_toolbar_bgcolor(NULL, NULL, toolbar); | 1335 destroy_toolbar_bgcolor(NULL, NULL, toolbar); |
1260 destroy_toolbar_fgcolor(NULL, NULL, toolbar); | 1336 destroy_toolbar_fgcolor(NULL, NULL, toolbar); |
1268 G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, | 1344 G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, |
1269 toolbar); | 1345 toolbar); |
1270 #endif | 1346 #endif |
1271 } | 1347 } |
1272 | 1348 |
1273 g_free(toolbar->sml); | 1349 g_free(priv->sml); |
1274 gtk_object_sink(GTK_OBJECT(toolbar->tooltips)); | 1350 gtk_object_sink(GTK_OBJECT(priv->tooltips)); |
1275 | 1351 |
1276 menu = g_object_get_data(object, "font_menu"); | 1352 menu = g_object_get_data(object, "font_menu"); |
1277 if (menu) | 1353 if (menu) |
1278 gtk_widget_destroy(menu); | 1354 gtk_widget_destroy(menu); |
1279 menu = g_object_get_data(object, "insert_menu"); | 1355 menu = g_object_get_data(object, "insert_menu"); |
1291 GObjectClass *gobject_class; | 1367 GObjectClass *gobject_class; |
1292 gobject_class = (GObjectClass *)class; | 1368 gobject_class = (GObjectClass *)class; |
1293 parent_class = g_type_class_ref(GTK_TYPE_HBOX); | 1369 parent_class = g_type_class_ref(GTK_TYPE_HBOX); |
1294 gobject_class->finalize = gtk_webviewtoolbar_finalize; | 1370 gobject_class->finalize = gtk_webviewtoolbar_finalize; |
1295 | 1371 |
1372 g_type_class_add_private(class, sizeof(GtkWebViewToolbarPriv)); | |
1373 | |
1296 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations/toolbar"); | 1374 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations/toolbar"); |
1297 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide", FALSE); | 1375 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/toolbar/wide", FALSE); |
1298 } | 1376 } |
1299 | 1377 |
1300 static void | 1378 static void |
1301 gtk_webviewtoolbar_create_old_buttons(GtkWebViewToolbar *toolbar) | 1379 gtk_webviewtoolbar_create_old_buttons(GtkWebViewToolbar *toolbar) |
1302 { | 1380 { |
1381 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
1303 GtkWidget *hbox; | 1382 GtkWidget *hbox; |
1304 GtkWidget *button; | 1383 GtkWidget *button; |
1305 struct { | 1384 struct { |
1306 char *stock; | 1385 char *stock; |
1307 gpointer callback; | 1386 gpointer callback; |
1308 GtkWidget **button; | 1387 GtkWidget **button; |
1309 const char *tooltip; | 1388 const char *tooltip; |
1310 } buttons[] = { | 1389 } buttons[] = { |
1311 {GTK_STOCK_BOLD, G_CALLBACK(do_bold), &toolbar->bold, _("Bold")}, | 1390 {GTK_STOCK_BOLD, G_CALLBACK(do_bold), &priv->bold, _("Bold")}, |
1312 {GTK_STOCK_ITALIC, do_italic, &toolbar->italic, _("Italic")}, | 1391 {GTK_STOCK_ITALIC, do_italic, &priv->italic, _("Italic")}, |
1313 {GTK_STOCK_UNDERLINE, do_underline, &toolbar->underline, _("Underline")}, | 1392 {GTK_STOCK_UNDERLINE, do_underline, &priv->underline, _("Underline")}, |
1314 {GTK_STOCK_STRIKETHROUGH, do_strikethrough, &toolbar->strikethrough, _("Strikethrough")}, | 1393 {GTK_STOCK_STRIKETHROUGH, do_strikethrough, &priv->strike, _("Strikethrough")}, |
1315 {"", NULL, NULL, NULL}, | 1394 {"", NULL, NULL, NULL}, |
1316 {PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, do_big, &toolbar->larger_size, _("Increase Font Size")}, | 1395 {PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, do_big, &priv->larger_size, _("Increase Font Size")}, |
1317 {PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, do_small, &toolbar->smaller_size, _("Decrease Font Size")}, | 1396 {PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, do_small, &priv->smaller_size, _("Decrease Font Size")}, |
1318 {"", NULL, NULL, NULL}, | 1397 {"", NULL, NULL, NULL}, |
1319 {PIDGIN_STOCK_TOOLBAR_FONT_FACE, toggle_font, &toolbar->font, _("Font Face")}, | 1398 {PIDGIN_STOCK_TOOLBAR_FONT_FACE, toggle_font, &priv->font, _("Font Face")}, |
1320 {PIDGIN_STOCK_TOOLBAR_FGCOLOR, toggle_fg_color, &toolbar->fgcolor, _("Foreground Color")}, | 1399 {PIDGIN_STOCK_TOOLBAR_FGCOLOR, toggle_fg_color, &priv->fgcolor, _("Foreground Color")}, |
1321 {PIDGIN_STOCK_TOOLBAR_BGCOLOR, toggle_bg_color, &toolbar->bgcolor, _("Background Color")}, | 1400 {PIDGIN_STOCK_TOOLBAR_BGCOLOR, toggle_bg_color, &priv->bgcolor, _("Background Color")}, |
1322 {"", NULL, NULL, NULL}, | 1401 {"", NULL, NULL, NULL}, |
1323 {PIDGIN_STOCK_CLEAR, clear_formatting_cb, &toolbar->clear, _("Reset Formatting")}, | 1402 {PIDGIN_STOCK_CLEAR, clear_formatting_cb, &priv->clear, _("Reset Formatting")}, |
1324 {"", NULL, NULL, NULL}, | 1403 {"", NULL, NULL, NULL}, |
1325 {PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, insert_image_cb, &toolbar->image, _("Insert IM Image")}, | 1404 {PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, insert_image_cb, &priv->image, _("Insert IM Image")}, |
1326 {PIDGIN_STOCK_TOOLBAR_INSERT_LINK, insert_link_cb, &toolbar->link, _("Insert Link")}, | 1405 {PIDGIN_STOCK_TOOLBAR_INSERT_LINK, insert_link_cb, &priv->link, _("Insert Link")}, |
1327 {"", NULL, NULL, NULL}, | 1406 {"", NULL, NULL, NULL}, |
1328 {PIDGIN_STOCK_TOOLBAR_SMILEY, insert_smiley_cb, &toolbar->smiley, _("Insert Smiley")}, | 1407 {PIDGIN_STOCK_TOOLBAR_SMILEY, insert_smiley_cb, &priv->smiley, _("Insert Smiley")}, |
1329 {PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION, send_attention_cb, &toolbar->attention, _("Send Attention")}, | 1408 {PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION, send_attention_cb, &priv->attention, _("Send Attention")}, |
1330 {NULL, NULL, NULL, NULL} | 1409 {NULL, NULL, NULL, NULL} |
1331 }; | 1410 }; |
1332 int iter; | 1411 int iter; |
1333 | 1412 |
1334 hbox = gtk_hbox_new(FALSE, 0); | 1413 hbox = gtk_hbox_new(FALSE, 0); |
1338 button = pidgin_pixbuf_toolbar_button_from_stock(buttons[iter].stock); | 1417 button = pidgin_pixbuf_toolbar_button_from_stock(buttons[iter].stock); |
1339 g_signal_connect(G_OBJECT(button), "button-press-event", G_CALLBACK(gtk_webviewtoolbar_popup_menu), toolbar); | 1418 g_signal_connect(G_OBJECT(button), "button-press-event", G_CALLBACK(gtk_webviewtoolbar_popup_menu), toolbar); |
1340 g_signal_connect(G_OBJECT(button), "clicked", | 1419 g_signal_connect(G_OBJECT(button), "clicked", |
1341 G_CALLBACK(buttons[iter].callback), toolbar); | 1420 G_CALLBACK(buttons[iter].callback), toolbar); |
1342 *(buttons[iter].button) = button; | 1421 *(buttons[iter].button) = button; |
1343 gtk_tooltips_set_tip(toolbar->tooltips, button, buttons[iter].tooltip, NULL); | 1422 gtk_tooltips_set_tip(priv->tooltips, button, buttons[iter].tooltip, NULL); |
1344 } else | 1423 } else |
1345 button = gtk_vseparator_new(); | 1424 button = gtk_vseparator_new(); |
1346 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | 1425 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
1347 } | 1426 } |
1348 | 1427 |
1351 } | 1430 } |
1352 | 1431 |
1353 static void | 1432 static void |
1354 gtk_webviewtoolbar_init(GtkWebViewToolbar *toolbar) | 1433 gtk_webviewtoolbar_init(GtkWebViewToolbar *toolbar) |
1355 { | 1434 { |
1435 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
1356 GtkWidget *hbox = GTK_WIDGET(toolbar), *event = gtk_event_box_new(); | 1436 GtkWidget *hbox = GTK_WIDGET(toolbar), *event = gtk_event_box_new(); |
1357 GtkWidget *bbox, *box = gtk_hbox_new(FALSE, 0); | 1437 GtkWidget *bbox, *box = gtk_hbox_new(FALSE, 0); |
1358 GtkWidget *image; | 1438 GtkWidget *image; |
1359 GtkWidget *label; | 1439 GtkWidget *label; |
1360 GtkWidget *insert_button; | 1440 GtkWidget *insert_button; |
1369 struct { | 1449 struct { |
1370 const char *label; | 1450 const char *label; |
1371 GtkWidget **button; | 1451 GtkWidget **button; |
1372 gboolean check; | 1452 gboolean check; |
1373 } buttons[] = { | 1453 } buttons[] = { |
1374 {_("<b>_Bold</b>"), &toolbar->bold, TRUE}, | 1454 {_("<b>_Bold</b>"), &priv->bold, TRUE}, |
1375 {_("<i>_Italic</i>"), &toolbar->italic, TRUE}, | 1455 {_("<i>_Italic</i>"), &priv->italic, TRUE}, |
1376 {_("<u>_Underline</u>"), &toolbar->underline, TRUE}, | 1456 {_("<u>_Underline</u>"), &priv->underline, TRUE}, |
1377 {_("<span strikethrough='true'>Strikethrough</span>"), &toolbar->strikethrough, TRUE}, | 1457 {_("<span strikethrough='true'>Strikethrough</span>"), &priv->strike, TRUE}, |
1378 {_("<span size='larger'>_Larger</span>"), &toolbar->larger_size, TRUE}, | 1458 {_("<span size='larger'>_Larger</span>"), &priv->larger_size, TRUE}, |
1379 #if 0 | 1459 #if 0 |
1380 {_("_Normal"), &toolbar->normal_size, TRUE}, | 1460 {_("_Normal"), &priv->normal_size, TRUE}, |
1381 #endif | 1461 #endif |
1382 {_("<span size='smaller'>_Smaller</span>"), &toolbar->smaller_size, TRUE}, | 1462 {_("<span size='smaller'>_Smaller</span>"), &priv->smaller_size, TRUE}, |
1383 /* If we want to show the formatting for the following items, we would | 1463 /* If we want to show the formatting for the following items, we would |
1384 * need to update them when formatting changes. The above items don't need | 1464 * need to update them when formatting changes. The above items don't need |
1385 * no updating nor nothin' */ | 1465 * no updating nor nothin' */ |
1386 {_("_Font face"), &toolbar->font, TRUE}, | 1466 {_("_Font face"), &priv->font, TRUE}, |
1387 {_("Foreground _color"), &toolbar->fgcolor, TRUE}, | 1467 {_("Foreground _color"), &priv->fgcolor, TRUE}, |
1388 {_("Bac_kground color"), &toolbar->bgcolor, TRUE}, | 1468 {_("Bac_kground color"), &priv->bgcolor, TRUE}, |
1389 {_("_Reset formatting"), &toolbar->clear, FALSE}, | 1469 {_("_Reset formatting"), &priv->clear, FALSE}, |
1390 {NULL, NULL, FALSE} | 1470 {NULL, NULL, FALSE} |
1391 }; | 1471 }; |
1392 | 1472 |
1393 toolbar->webview = NULL; | 1473 toolbar->webview = NULL; |
1394 toolbar->font_dialog = NULL; | 1474 priv->font_dialog = NULL; |
1395 toolbar->fgcolor_dialog = NULL; | 1475 priv->fgcolor_dialog = NULL; |
1396 toolbar->bgcolor_dialog = NULL; | 1476 priv->bgcolor_dialog = NULL; |
1397 toolbar->link_dialog = NULL; | 1477 priv->link_dialog = NULL; |
1398 toolbar->smiley_dialog = NULL; | 1478 priv->smiley_dialog = NULL; |
1399 toolbar->image_dialog = NULL; | 1479 priv->image_dialog = NULL; |
1400 | 1480 |
1401 toolbar->tooltips = gtk_tooltips_new(); | 1481 priv->tooltips = gtk_tooltips_new(); |
1402 | 1482 |
1403 gtk_box_set_spacing(GTK_BOX(toolbar), 3); | 1483 gtk_box_set_spacing(GTK_BOX(toolbar), 3); |
1404 | 1484 |
1405 gtk_webviewtoolbar_create_old_buttons(toolbar); | 1485 gtk_webviewtoolbar_create_old_buttons(toolbar); |
1406 | 1486 |
1463 | 1543 |
1464 insert_menu = gtk_menu_new(); | 1544 insert_menu = gtk_menu_new(); |
1465 g_object_set_data(G_OBJECT(toolbar), "insert_menu", insert_menu); | 1545 g_object_set_data(G_OBJECT(toolbar), "insert_menu", insert_menu); |
1466 | 1546 |
1467 menuitem = gtk_menu_item_new_with_mnemonic(_("_Image")); | 1547 menuitem = gtk_menu_item_new_with_mnemonic(_("_Image")); |
1468 g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_button_clicked), toolbar->image); | 1548 g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_button_clicked), priv->image); |
1469 gtk_menu_shell_append(GTK_MENU_SHELL(insert_menu), menuitem); | 1549 gtk_menu_shell_append(GTK_MENU_SHELL(insert_menu), menuitem); |
1470 g_signal_connect(G_OBJECT(toolbar->image), "notify::sensitive", | 1550 g_signal_connect(G_OBJECT(priv->image), "notify::sensitive", |
1471 G_CALLBACK(button_sensitiveness_changed), menuitem); | 1551 G_CALLBACK(button_sensitiveness_changed), menuitem); |
1472 g_signal_connect(G_OBJECT(toolbar->image), "notify::visible", | 1552 g_signal_connect(G_OBJECT(priv->image), "notify::visible", |
1473 G_CALLBACK(button_visibility_changed), menuitem); | 1553 G_CALLBACK(button_visibility_changed), menuitem); |
1474 | 1554 |
1475 menuitem = gtk_menu_item_new_with_mnemonic(_("_Link")); | 1555 menuitem = gtk_menu_item_new_with_mnemonic(_("_Link")); |
1476 g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_button_clicked), toolbar->link); | 1556 g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_button_clicked), priv->link); |
1477 gtk_menu_shell_append(GTK_MENU_SHELL(insert_menu), menuitem); | 1557 gtk_menu_shell_append(GTK_MENU_SHELL(insert_menu), menuitem); |
1478 g_signal_connect(G_OBJECT(toolbar->link), "notify::sensitive", | 1558 g_signal_connect(G_OBJECT(priv->link), "notify::sensitive", |
1479 G_CALLBACK(button_sensitiveness_changed), menuitem); | 1559 G_CALLBACK(button_sensitiveness_changed), menuitem); |
1480 g_signal_connect(G_OBJECT(toolbar->link), "notify::visible", | 1560 g_signal_connect(G_OBJECT(priv->link), "notify::visible", |
1481 G_CALLBACK(button_visibility_changed), menuitem); | 1561 G_CALLBACK(button_visibility_changed), menuitem); |
1482 | 1562 |
1483 menuitem = gtk_menu_item_new_with_mnemonic(_("_Horizontal rule")); | 1563 menuitem = gtk_menu_item_new_with_mnemonic(_("_Horizontal rule")); |
1484 g_signal_connect(G_OBJECT(menuitem), "activate" , G_CALLBACK(insert_hr_cb), toolbar); | 1564 g_signal_connect(G_OBJECT(menuitem), "activate" , G_CALLBACK(insert_hr_cb), toolbar); |
1485 gtk_menu_shell_append(GTK_MENU_SHELL(insert_menu), menuitem); | 1565 gtk_menu_shell_append(GTK_MENU_SHELL(insert_menu), menuitem); |
1486 toolbar->insert_hr = menuitem; | 1566 priv->insert_hr = menuitem; |
1487 | 1567 |
1488 g_signal_connect(G_OBJECT(insert_button), "button-press-event", G_CALLBACK(button_activate_on_click), toolbar); | 1568 g_signal_connect(G_OBJECT(insert_button), "button-press-event", G_CALLBACK(button_activate_on_click), toolbar); |
1489 g_signal_connect(G_OBJECT(insert_button), "activate", G_CALLBACK(pidgin_menu_clicked), insert_menu); | 1569 g_signal_connect(G_OBJECT(insert_button), "activate", G_CALLBACK(pidgin_menu_clicked), insert_menu); |
1490 g_signal_connect(G_OBJECT(insert_menu), "deactivate", G_CALLBACK(pidgin_menu_deactivate), insert_button); | 1570 g_signal_connect(G_OBJECT(insert_menu), "deactivate", G_CALLBACK(pidgin_menu_deactivate), insert_button); |
1491 toolbar->sml = NULL; | 1571 priv->sml = NULL; |
1492 | 1572 |
1493 /* Sep */ | 1573 /* Sep */ |
1494 sep = gtk_vseparator_new(); | 1574 sep = gtk_vseparator_new(); |
1495 gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 0); | 1575 gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 0); |
1496 gtk_widget_show_all(sep); | 1576 gtk_widget_show_all(sep); |
1504 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); | 1584 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); |
1505 label = gtk_label_new_with_mnemonic(_("_Smile!")); | 1585 label = gtk_label_new_with_mnemonic(_("_Smile!")); |
1506 gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); | 1586 gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); |
1507 gtk_box_pack_start(GTK_BOX(box), smiley_button, FALSE, FALSE, 0); | 1587 gtk_box_pack_start(GTK_BOX(box), smiley_button, FALSE, FALSE, 0); |
1508 g_signal_connect(G_OBJECT(smiley_button), "button-press-event", G_CALLBACK(gtk_webviewtoolbar_popup_menu), toolbar); | 1588 g_signal_connect(G_OBJECT(smiley_button), "button-press-event", G_CALLBACK(gtk_webviewtoolbar_popup_menu), toolbar); |
1509 g_signal_connect_swapped(G_OBJECT(smiley_button), "clicked", G_CALLBACK(gtk_button_clicked), toolbar->smiley); | 1589 g_signal_connect_swapped(G_OBJECT(smiley_button), "clicked", G_CALLBACK(gtk_button_clicked), priv->smiley); |
1510 gtk_widget_show_all(smiley_button); | 1590 gtk_widget_show_all(smiley_button); |
1511 | 1591 |
1512 /* Sep */ | 1592 /* Sep */ |
1513 sep = gtk_vseparator_new(); | 1593 sep = gtk_vseparator_new(); |
1514 gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 0); | 1594 gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 0); |
1524 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); | 1604 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); |
1525 label = gtk_label_new_with_mnemonic(_("_Attention!")); | 1605 label = gtk_label_new_with_mnemonic(_("_Attention!")); |
1526 gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); | 1606 gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); |
1527 gtk_box_pack_start(GTK_BOX(box), attention_button, FALSE, FALSE, 0); | 1607 gtk_box_pack_start(GTK_BOX(box), attention_button, FALSE, FALSE, 0); |
1528 g_signal_connect_swapped(G_OBJECT(attention_button), "clicked", | 1608 g_signal_connect_swapped(G_OBJECT(attention_button), "clicked", |
1529 G_CALLBACK(gtk_button_clicked), toolbar->attention); | 1609 G_CALLBACK(gtk_button_clicked), priv->attention); |
1530 gtk_widget_show_all(attention_button); | 1610 gtk_widget_show_all(attention_button); |
1531 | 1611 |
1532 g_signal_connect(G_OBJECT(toolbar->attention), "notify::sensitive", | 1612 g_signal_connect(G_OBJECT(priv->attention), "notify::sensitive", |
1533 G_CALLBACK(button_sensitiveness_changed), attention_button); | 1613 G_CALLBACK(button_sensitiveness_changed), attention_button); |
1534 g_signal_connect(G_OBJECT(toolbar->attention), "notify::visible", | 1614 g_signal_connect(G_OBJECT(priv->attention), "notify::visible", |
1535 G_CALLBACK(button_visibility_changed), attention_button); | 1615 G_CALLBACK(button_visibility_changed), attention_button); |
1536 | 1616 |
1537 /* set attention button to be greyed out until we get a conversation */ | 1617 /* set attention button to be greyed out until we get a conversation */ |
1538 gtk_widget_set_sensitive(toolbar->attention, FALSE); | 1618 gtk_widget_set_sensitive(priv->attention, FALSE); |
1539 | 1619 |
1540 gtk_box_pack_start(GTK_BOX(hbox), box, FALSE, FALSE, 0); | 1620 gtk_box_pack_start(GTK_BOX(hbox), box, FALSE, FALSE, 0); |
1541 g_object_set_data(G_OBJECT(hbox), "lean-view", box); | 1621 g_object_set_data(G_OBJECT(hbox), "lean-view", box); |
1542 gtk_widget_show(box); | 1622 gtk_widget_show(box); |
1543 | 1623 |
1621 | 1701 |
1622 void | 1702 void |
1623 gtk_webviewtoolbar_associate_smileys(GtkWebViewToolbar *toolbar, | 1703 gtk_webviewtoolbar_associate_smileys(GtkWebViewToolbar *toolbar, |
1624 const char *proto_id) | 1704 const char *proto_id) |
1625 { | 1705 { |
1626 g_free(toolbar->sml); | 1706 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
1627 toolbar->sml = g_strdup(proto_id); | 1707 g_free(priv->sml); |
1708 priv->sml = g_strdup(proto_id); | |
1628 } | 1709 } |
1629 | 1710 |
1630 void | 1711 void |
1631 gtk_webviewtoolbar_switch_active_conversation(GtkWebViewToolbar *toolbar, | 1712 gtk_webviewtoolbar_switch_active_conversation(GtkWebViewToolbar *toolbar, |
1632 PurpleConversation *conv) | 1713 PurpleConversation *conv) |
1633 { | 1714 { |
1715 GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); | |
1634 PurpleConnection *gc = purple_conversation_get_connection(conv); | 1716 PurpleConnection *gc = purple_conversation_get_connection(conv); |
1635 PurplePlugin *prpl = purple_connection_get_prpl(gc); | 1717 PurplePlugin *prpl = purple_connection_get_prpl(gc); |
1636 | 1718 |
1637 g_object_set_data(G_OBJECT(toolbar), "active_conv", conv); | 1719 g_object_set_data(G_OBJECT(toolbar), "active_conv", conv); |
1638 | 1720 |
1639 /* gray out attention button on protocols that don't support it | 1721 /* gray out attention button on protocols that don't support it |
1640 for the time being it is always disabled for chats */ | 1722 for the time being it is always disabled for chats */ |
1641 gtk_widget_set_sensitive(toolbar->attention, | 1723 gtk_widget_set_sensitive(priv->attention, |
1642 conv && prpl && purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM && | 1724 conv && prpl && purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM && |
1643 PURPLE_PLUGIN_PROTOCOL_INFO(prpl)->send_attention != NULL); | 1725 PURPLE_PLUGIN_PROTOCOL_INFO(prpl)->send_attention != NULL); |
1644 } | 1726 } |
1645 | 1727 |