pidgin/gtkwebviewtoolbar.c

changeset 35547
561418a41b08
parent 35528
e04ba70092e9
child 35552
0497dd67473c
equal deleted inserted replaced
35546:310c7590b36f 35547:561418a41b08
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

mercurial