| 258 gtk_widget_grab_focus(toolbar->webview); |
258 gtk_widget_grab_focus(toolbar->webview); |
| 259 } |
259 } |
| 260 |
260 |
| 261 static gboolean |
261 static gboolean |
| 262 destroy_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event, |
262 destroy_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event, |
| 263 PidginWebViewToolbar *toolbar) |
263 PidginWebViewToolbar *toolbar) |
| 264 { |
264 { |
| 265 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
265 PidginWebViewToolbarPriv *priv = |
| 266 |
266 PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
| 267 if (widget != NULL) |
267 |
| 268 pidgin_webview_toggle_forecolor(PIDGIN_WEBVIEW(toolbar->webview), ""); |
268 if (widget != NULL) { |
| 269 |
269 pidgin_webview_toggle_forecolor( |
| 270 if (priv->fgcolor_dialog != NULL) |
270 PIDGIN_WEBVIEW(toolbar->webview), ""); |
| 271 { |
271 } |
| |
272 |
| |
273 if (priv->fgcolor_dialog != NULL) { |
| 272 gtk_widget_destroy(priv->fgcolor_dialog); |
274 gtk_widget_destroy(priv->fgcolor_dialog); |
| 273 priv->fgcolor_dialog = NULL; |
275 priv->fgcolor_dialog = NULL; |
| 274 } |
276 } |
| 275 |
277 |
| 276 return FALSE; |
278 return FALSE; |
| 277 } |
279 } |
| 278 |
280 |
| 279 static void |
281 static void |
| 280 cancel_toolbar_fgcolor(GtkWidget *widget, PidginWebViewToolbar *toolbar) |
282 do_fgcolor(GtkDialog *dialog, gint response, gpointer _toolbar) |
| 281 { |
283 { |
| 282 destroy_toolbar_fgcolor(widget, NULL, toolbar); |
284 PidginWebViewToolbar *toolbar = _toolbar; |
| 283 } |
|
| 284 |
|
| 285 static void |
|
| 286 do_fgcolor(GtkWidget *widget, PidginWebViewToolbar *toolbar) |
|
| 287 { |
|
| 288 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
|
| 289 GtkColorSelectionDialog *dialog; |
|
| 290 GtkColorSelection *colorsel; |
|
| 291 GdkColor text_color; |
285 GdkColor text_color; |
| 292 char *open_tag; |
286 gchar *open_tag; |
| 293 |
287 |
| 294 dialog = GTK_COLOR_SELECTION_DIALOG(priv->fgcolor_dialog); |
288 pidgin_color_chooser_get_rgb(GTK_COLOR_CHOOSER(dialog), &text_color); |
| 295 colorsel = GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(dialog)); |
289 open_tag = g_strdup_printf("#%02X%02X%02X", text_color.red / 256, |
| 296 |
290 text_color.green / 256, text_color.blue / 256); |
| 297 open_tag = g_malloc(30); |
291 pidgin_webview_toggle_forecolor(PIDGIN_WEBVIEW(toolbar->webview), |
| 298 gtk_color_selection_get_current_color(colorsel, &text_color); |
292 open_tag); |
| 299 g_snprintf(open_tag, 23, "#%02X%02X%02X", |
|
| 300 text_color.red / 256, |
|
| 301 text_color.green / 256, |
|
| 302 text_color.blue / 256); |
|
| 303 pidgin_webview_toggle_forecolor(PIDGIN_WEBVIEW(toolbar->webview), open_tag); |
|
| 304 g_free(open_tag); |
293 g_free(open_tag); |
| 305 |
294 |
| 306 cancel_toolbar_fgcolor(NULL, toolbar); |
295 destroy_toolbar_fgcolor(NULL, NULL, toolbar); |
| 307 } |
296 } |
| 308 |
297 |
| 309 static void |
298 static void |
| 310 toggle_fg_color(GtkAction *color, PidginWebViewToolbar *toolbar) |
299 toggle_fg_color(GtkAction *color, PidginWebViewToolbar *toolbar) |
| 311 { |
300 { |
| 312 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
301 PidginWebViewToolbarPriv *priv = |
| |
302 PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
| 313 |
303 |
| 314 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(color))) { |
304 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(color))) { |
| 315 GtkWidget *colorsel; |
|
| 316 GdkColor fgcolor; |
305 GdkColor fgcolor; |
| 317 char *color = pidgin_webview_get_current_forecolor(PIDGIN_WEBVIEW(toolbar->webview)); |
306 gchar *color = pidgin_webview_get_current_forecolor( |
| |
307 PIDGIN_WEBVIEW(toolbar->webview)); |
| 318 |
308 |
| 319 if (!priv->fgcolor_dialog) { |
309 if (!priv->fgcolor_dialog) { |
| 320 GtkWidget *ok_button; |
310 priv->fgcolor_dialog = gtk_color_chooser_dialog_new( |
| 321 GtkWidget *cancel_button; |
311 _("Select Text Color"), GTK_WINDOW( |
| 322 |
312 gtk_widget_get_ancestor(toolbar->webview, |
| 323 priv->fgcolor_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); |
313 GTK_TYPE_WINDOW))); |
| 324 colorsel = |
314 gtk_color_chooser_set_use_alpha( |
| 325 gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(priv->fgcolor_dialog)); |
315 GTK_COLOR_CHOOSER(priv->fgcolor_dialog), FALSE); |
| |
316 |
| 326 if (color) { |
317 if (color) { |
| 327 gdk_color_parse(color, &fgcolor); |
318 gdk_color_parse(color, &fgcolor); |
| 328 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); |
319 pidgin_color_chooser_set_rgb( |
| |
320 GTK_COLOR_CHOOSER(priv->fgcolor_dialog), |
| |
321 &fgcolor); |
| 329 } |
322 } |
| 330 |
323 |
| 331 g_object_get(G_OBJECT(priv->fgcolor_dialog), "ok-button", &ok_button, NULL); |
324 g_signal_connect(G_OBJECT(priv->fgcolor_dialog), |
| 332 g_object_get(G_OBJECT(priv->fgcolor_dialog), "cancel-button", &cancel_button, NULL); |
325 "delete_event", |
| 333 g_signal_connect(G_OBJECT(priv->fgcolor_dialog), "delete_event", |
326 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); |
| 334 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); |
327 |
| 335 g_signal_connect(G_OBJECT(ok_button), "clicked", |
328 g_signal_connect(G_OBJECT(priv->fgcolor_dialog), |
| 336 G_CALLBACK(do_fgcolor), toolbar); |
329 "response", G_CALLBACK(do_fgcolor), toolbar); |
| 337 g_signal_connect(G_OBJECT(cancel_button), "clicked", |
|
| 338 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); |
|
| 339 } |
330 } |
| 340 |
331 |
| |
332 g_free(color); |
| |
333 |
| 341 gtk_window_present(GTK_WINDOW(priv->fgcolor_dialog)); |
334 gtk_window_present(GTK_WINDOW(priv->fgcolor_dialog)); |
| 342 |
|
| 343 g_free(color); |
|
| 344 } else { |
335 } else { |
| 345 cancel_toolbar_fgcolor(GTK_WIDGET(toolbar), toolbar); |
336 destroy_toolbar_fgcolor(GTK_WIDGET(toolbar), NULL, toolbar); |
| 346 } |
337 } |
| 347 |
338 |
| 348 gtk_widget_grab_focus(toolbar->webview); |
339 gtk_widget_grab_focus(toolbar->webview); |
| 349 } |
340 } |
| 350 |
341 |
| 351 static gboolean |
342 static gboolean |
| 352 destroy_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event, |
343 destroy_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event, |
| 353 PidginWebViewToolbar *toolbar) |
344 PidginWebViewToolbar *toolbar) |
| 354 { |
345 { |
| 355 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
346 PidginWebViewToolbarPriv *priv = |
| |
347 PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
| 356 if (widget != NULL) { |
348 if (widget != NULL) { |
| 357 pidgin_webview_toggle_backcolor(PIDGIN_WEBVIEW(toolbar->webview), ""); |
349 pidgin_webview_toggle_backcolor( |
| 358 } |
350 PIDGIN_WEBVIEW(toolbar->webview), ""); |
| 359 |
351 } |
| 360 if (priv->bgcolor_dialog != NULL) |
352 |
| 361 { |
353 if (priv->bgcolor_dialog != NULL) { |
| 362 gtk_widget_destroy(priv->bgcolor_dialog); |
354 gtk_widget_destroy(priv->bgcolor_dialog); |
| 363 priv->bgcolor_dialog = NULL; |
355 priv->bgcolor_dialog = NULL; |
| 364 } |
356 } |
| 365 |
357 |
| 366 return FALSE; |
358 return FALSE; |
| 367 } |
359 } |
| 368 |
360 |
| 369 static void |
361 static void |
| 370 cancel_toolbar_bgcolor(GtkWidget *widget, PidginWebViewToolbar *toolbar) |
362 do_bgcolor(GtkDialog *dialog, gint response, gpointer _toolbar) |
| 371 { |
363 { |
| 372 destroy_toolbar_bgcolor(widget, NULL, toolbar); |
364 PidginWebViewToolbar *toolbar = _toolbar; |
| 373 } |
|
| 374 |
|
| 375 static void |
|
| 376 do_bgcolor(GtkWidget *widget, PidginWebViewToolbar *toolbar) |
|
| 377 { |
|
| 378 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
|
| 379 GtkColorSelectionDialog *dialog; |
|
| 380 GtkColorSelection *colorsel; |
|
| 381 GdkColor text_color; |
365 GdkColor text_color; |
| 382 char *open_tag; |
366 gchar *open_tag; |
| 383 |
367 |
| 384 dialog = GTK_COLOR_SELECTION_DIALOG(priv->bgcolor_dialog); |
368 pidgin_color_chooser_get_rgb(GTK_COLOR_CHOOSER(dialog), &text_color); |
| 385 colorsel = GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(dialog)); |
369 open_tag = g_strdup_printf("#%02X%02X%02X", text_color.red / 256, |
| 386 |
370 text_color.green / 256, text_color.blue / 256); |
| 387 open_tag = g_malloc(30); |
371 pidgin_webview_toggle_backcolor(PIDGIN_WEBVIEW(toolbar->webview), |
| 388 gtk_color_selection_get_current_color(colorsel, &text_color); |
372 open_tag); |
| 389 g_snprintf(open_tag, 23, "#%02X%02X%02X", |
|
| 390 text_color.red / 256, |
|
| 391 text_color.green / 256, |
|
| 392 text_color.blue / 256); |
|
| 393 pidgin_webview_toggle_backcolor(PIDGIN_WEBVIEW(toolbar->webview), open_tag); |
|
| 394 g_free(open_tag); |
373 g_free(open_tag); |
| 395 |
374 |
| 396 cancel_toolbar_bgcolor(NULL, toolbar); |
375 destroy_toolbar_bgcolor(NULL, NULL, toolbar); |
| 397 } |
376 } |
| 398 |
377 |
| 399 static void |
378 static void |
| 400 toggle_bg_color(GtkAction *color, PidginWebViewToolbar *toolbar) |
379 toggle_bg_color(GtkAction *color, PidginWebViewToolbar *toolbar) |
| 401 { |
380 { |
| 402 PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
381 PidginWebViewToolbarPriv *priv = |
| |
382 PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); |
| 403 |
383 |
| 404 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(color))) { |
384 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(color))) { |
| 405 GtkWidget *colorsel; |
|
| 406 GdkColor bgcolor; |
385 GdkColor bgcolor; |
| 407 char *color = pidgin_webview_get_current_backcolor(PIDGIN_WEBVIEW(toolbar->webview)); |
386 gchar *color = pidgin_webview_get_current_backcolor( |
| |
387 PIDGIN_WEBVIEW(toolbar->webview)); |
| 408 |
388 |
| 409 if (!priv->bgcolor_dialog) { |
389 if (!priv->bgcolor_dialog) { |
| 410 GtkWidget *ok_button; |
390 priv->bgcolor_dialog = gtk_color_chooser_dialog_new( |
| 411 GtkWidget *cancel_button; |
391 _("Select Background Color"), GTK_WINDOW( |
| 412 |
392 gtk_widget_get_ancestor(toolbar->webview, |
| 413 priv->bgcolor_dialog = gtk_color_selection_dialog_new(_("Select Background Color")); |
393 GTK_TYPE_WINDOW))); |
| 414 colorsel = |
394 gtk_color_chooser_set_use_alpha( |
| 415 gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(priv->bgcolor_dialog)); |
395 GTK_COLOR_CHOOSER(priv->bgcolor_dialog), FALSE); |
| 416 |
396 |
| 417 if (color) { |
397 if (color) { |
| 418 gdk_color_parse(color, &bgcolor); |
398 gdk_color_parse(color, &bgcolor); |
| 419 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); |
399 pidgin_color_chooser_set_rgb( |
| |
400 GTK_COLOR_CHOOSER(priv->bgcolor_dialog), |
| |
401 &bgcolor); |
| 420 } |
402 } |
| 421 |
403 |
| 422 g_object_get(G_OBJECT(priv->bgcolor_dialog), "ok-button", &ok_button, NULL); |
404 g_signal_connect(G_OBJECT(priv->bgcolor_dialog), |
| 423 g_object_get(G_OBJECT(priv->bgcolor_dialog), "cancel-button", |
405 "delete_event", |
| 424 &cancel_button, NULL); |
406 G_CALLBACK(destroy_toolbar_bgcolor), toolbar); |
| 425 g_signal_connect(G_OBJECT(priv->bgcolor_dialog), "delete_event", |
407 g_signal_connect(G_OBJECT(priv->bgcolor_dialog), |
| 426 G_CALLBACK(destroy_toolbar_bgcolor), toolbar); |
408 "response", G_CALLBACK(do_bgcolor), toolbar); |
| 427 g_signal_connect(G_OBJECT(ok_button), "clicked", |
|
| 428 G_CALLBACK(do_bgcolor), toolbar); |
|
| 429 g_signal_connect(G_OBJECT(cancel_button), "clicked", |
|
| 430 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); |
|
| 431 } |
409 } |
| |
410 g_free(color); |
| 432 |
411 |
| 433 gtk_window_present(GTK_WINDOW(priv->bgcolor_dialog)); |
412 gtk_window_present(GTK_WINDOW(priv->bgcolor_dialog)); |
| 434 |
|
| 435 g_free(color); |
|
| 436 } else { |
413 } else { |
| 437 cancel_toolbar_bgcolor(GTK_WIDGET(toolbar), toolbar); |
414 destroy_toolbar_bgcolor(GTK_WIDGET(toolbar), NULL, toolbar); |
| 438 } |
415 } |
| 439 |
416 |
| 440 gtk_widget_grab_focus(toolbar->webview); |
417 gtk_widget_grab_focus(toolbar->webview); |
| 441 } |
418 } |
| 442 |
419 |