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