| 3500 dummy(PidginWebView *webview, WebKitDOMHTMLAnchorElement *link, GtkWidget *menu) |
3500 dummy(PidginWebView *webview, WebKitDOMHTMLAnchorElement *link, GtkWidget *menu) |
| 3501 { |
3501 { |
| 3502 return TRUE; |
3502 return TRUE; |
| 3503 } |
3503 } |
| 3504 |
3504 |
| 3505 static gboolean |
|
| 3506 register_gnome_url_handlers(void) |
|
| 3507 { |
|
| 3508 char *tmp; |
|
| 3509 char *err; |
|
| 3510 char *c; |
|
| 3511 char *start; |
|
| 3512 |
|
| 3513 tmp = g_find_program_in_path("gconftool-2"); |
|
| 3514 if (tmp == NULL) |
|
| 3515 return FALSE; |
|
| 3516 |
|
| 3517 g_free(tmp); |
|
| 3518 tmp = NULL; |
|
| 3519 |
|
| 3520 if (!g_spawn_command_line_sync("gconftool-2 --all-dirs /desktop/gnome/url-handlers", |
|
| 3521 &tmp, &err, NULL, NULL)) |
|
| 3522 { |
|
| 3523 g_free(tmp); |
|
| 3524 g_free(err); |
|
| 3525 g_return_val_if_reached(FALSE); |
|
| 3526 } |
|
| 3527 g_free(err); |
|
| 3528 err = NULL; |
|
| 3529 |
|
| 3530 for (c = start = tmp ; *c ; c++) |
|
| 3531 { |
|
| 3532 /* Skip leading spaces. */ |
|
| 3533 if (c == start && *c == ' ') |
|
| 3534 start = c + 1; |
|
| 3535 else if (*c == '\n') |
|
| 3536 { |
|
| 3537 *c = '\0'; |
|
| 3538 if (g_str_has_prefix(start, "/desktop/gnome/url-handlers/")) |
|
| 3539 { |
|
| 3540 char *cmd; |
|
| 3541 char *tmp2 = NULL; |
|
| 3542 char *protocol; |
|
| 3543 |
|
| 3544 /* If there is an enabled boolean, honor it. */ |
|
| 3545 cmd = g_strdup_printf("gconftool-2 -g %s/enabled", start); |
|
| 3546 if (g_spawn_command_line_sync(cmd, &tmp2, &err, NULL, NULL)) |
|
| 3547 { |
|
| 3548 g_free(err); |
|
| 3549 err = NULL; |
|
| 3550 if (!strcmp(tmp2, "false\n")) |
|
| 3551 { |
|
| 3552 g_free(tmp2); |
|
| 3553 g_free(cmd); |
|
| 3554 start = c + 1; |
|
| 3555 continue; |
|
| 3556 } |
|
| 3557 } |
|
| 3558 g_free(cmd); |
|
| 3559 g_free(tmp2); |
|
| 3560 |
|
| 3561 start += sizeof("/desktop/gnome/url-handlers/") - 1; |
|
| 3562 |
|
| 3563 protocol = g_strdup_printf("%s:", start); |
|
| 3564 registered_url_handlers = g_slist_prepend(registered_url_handlers, protocol); |
|
| 3565 pidgin_webview_class_register_protocol(protocol, url_clicked_cb, link_context_menu); |
|
| 3566 } |
|
| 3567 start = c + 1; |
|
| 3568 } |
|
| 3569 } |
|
| 3570 g_free(tmp); |
|
| 3571 |
|
| 3572 return (registered_url_handlers != NULL); |
|
| 3573 } |
|
| 3574 |
|
| 3575 #ifdef _WIN32 |
3505 #ifdef _WIN32 |
| 3576 static void |
3506 static void |
| 3577 winpidgin_register_win32_url_handlers(void) |
3507 winpidgin_register_win32_url_handlers(void) |
| 3578 { |
3508 { |
| 3579 int idx = 0; |
3509 int idx = 0; |
| 3652 pidgin_webview_class_register_protocol("audio://", audio_clicked_cb, audio_context_menu); |
3582 pidgin_webview_class_register_protocol("audio://", audio_clicked_cb, audio_context_menu); |
| 3653 |
3583 |
| 3654 /* Example custom URL handler. */ |
3584 /* Example custom URL handler. */ |
| 3655 pidgin_webview_class_register_protocol("open://", open_dialog, dummy); |
3585 pidgin_webview_class_register_protocol("open://", open_dialog, dummy); |
| 3656 |
3586 |
| 3657 /* If we're under GNOME, try registering the system URL handlers. */ |
|
| 3658 if (purple_running_gnome()) |
|
| 3659 register_gnome_url_handlers(); |
|
| 3660 |
|
| 3661 /* Used to make small buttons */ |
3587 /* Used to make small buttons */ |
| 3662 #if !GTK_CHECK_VERSION(3,0,0) |
3588 #if !GTK_CHECK_VERSION(3,0,0) |
| 3663 gtk_rc_parse_string("style \"pidgin-small-close-button\"\n" |
3589 gtk_rc_parse_string("style \"pidgin-small-close-button\"\n" |
| 3664 "{\n" |
3590 "{\n" |
| 3665 "GtkWidget::focus-padding = 0\n" |
3591 "GtkWidget::focus-padding = 0\n" |