pidgin/gtkutils.c

changeset 37200
49968a83afbc
parent 37160
8300c06145d8
child 37406
98ec68212b1f
equal deleted inserted replaced
37199:dd1760ed79e9 37200:49968a83afbc
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"

mercurial