commit b1d2a1ad4a489838027e2f897f65190509a3c34f Author: Ricardo Wurmus Date: Sat Oct 29 19:08:54 2016 +0200 webkit set settings diff --git a/lisp/xwidget.el b/lisp/xwidget.el index a4214f054a..11dfc061f2 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -39,6 +39,8 @@ (declare-function xwidget-buffer "xwidget.c" (xwidget)) (declare-function xwidget-size-request "xwidget.c" (xwidget)) (declare-function xwidget-resize "xwidget.c" (xwidget new-width new-height)) +(declare-function xwidget-webkit-set-settings "xwidget.c" + (xwidget settings)) (declare-function xwidget-webkit-execute-script "xwidget.c" (xwidget script &optional callback)) (declare-function xwidget-webkit-goto-uri "xwidget.c" (xwidget uri)) diff --git a/src/xwidget.c b/src/xwidget.c index 4fa906a9f0..fd0ca3edf1 100644 --- a/src/xwidget.c +++ b/src/xwidget.c @@ -751,6 +751,84 @@ argument procedure FUN.*/) return Qnil; } +DEFUN ("xwidget-webkit-set-settings", + Fxwidget_webkit_set_settings, Sxwidget_webkit_set_settings, + 2, 2, 0, + doc: /* Set the settings of the Webkit XWIDGET view to the +values specified in ALIST.*/) + (Lisp_Object xwidget, Lisp_Object alist) +{ + WEBKIT_FN_INIT (); + CHECK_LIST (alist); + + WebKitSettings *settings = webkit_web_view_get_settings (WEBKIT_WEB_VIEW (xw->widget_osr)); + + for (int i = 0; CONSP (alist); alist = XCDR (alist)) + { + Lisp_Object elt, key, val; + + elt = XCAR (alist); + key = Fcar (elt); + CHECK_SYMBOL (key); + val = Fcdr (elt); + + // TODO: use a macro instead? + if (EQ (key, Qwebkit_allow_file_access_from_file_urls)) + webkit_settings_set_allow_file_access_from_file_urls (settings, !NILP (val)); + else if (EQ (key, Qwebkit_allow_modal_dialogs)) + webkit_settings_set_allow_modal_dialogs (settings, !NILP (val)); + else if (EQ (key, Qwebkit_allow_file_access_from_file_urls)) + webkit_settings_set_allow_file_access_from_file_urls (settings, !NILP (val)); + else if (EQ (key, Qwebkit_allow_modal_dialogs)) + webkit_settings_set_allow_modal_dialogs (settings, !NILP (val)); + else if (EQ (key, Qwebkit_allow_universal_access_from_file_urls)) + webkit_settings_set_allow_universal_access_from_file_urls (settings, !NILP (val)); + else if (EQ (key, Qwebkit_auto_load_images)) + webkit_settings_set_auto_load_images (settings, !NILP (val)); + else if (EQ (key, Qwebkit_draw_compositing_indicators)) + webkit_settings_set_draw_compositing_indicators (settings, !NILP (val)); + else if (EQ (key, Qwebkit_enable_accelerated_2d_canvas)) + webkit_settings_set_enable_accelerated_2d_canvas (settings, !NILP (val)); + else if (EQ (key, Qwebkit_enable_caret_browsing)) + webkit_settings_set_enable_caret_browsing (settings, !NILP (val)); + else if (EQ (key, Qwebkit_enable_developer_extras)) + webkit_settings_set_enable_developer_extras (settings, !NILP (val)); + else if (EQ (key, Qwebkit_enable_dns_prefetching)) + webkit_settings_set_enable_dns_prefetching (settings, !NILP (val)); + else if (EQ (key, Qwebkit_enable_frame_flattening)) + webkit_settings_set_enable_frame_flattening (settings, !NILP (val)); + else if (EQ (key, Qwebkit_enable_javascript)) + webkit_settings_set_enable_javascript (settings, !NILP (val)); + else if (EQ (key, Qwebkit_enable_private_browsing)) + webkit_settings_set_enable_private_browsing (settings, !NILP (val)); + else if (EQ (key, Qwebkit_enable_webaudio)) + webkit_settings_set_enable_webaudio (settings, !NILP (val)); + else if (EQ (key, Qwebkit_enable_webgl)) + webkit_settings_set_enable_webgl (settings, !NILP (val)); + else if (EQ (key, Qwebkit_enable_write_console_messages_to_stdout)) + webkit_settings_set_enable_write_console_messages_to_stdout (settings, !NILP (val)); + else if (EQ (key, Qwebkit_enable_xss_auditor)) + webkit_settings_set_enable_xss_auditor (settings, !NILP (val)); + else if (EQ (key, Qwebkit_javascript_can_access_clipboard)) + webkit_settings_set_javascript_can_access_clipboard (settings, !NILP (val)); + else if (EQ (key, Qwebkit_javascript_can_open_windows_automatically)) + webkit_settings_set_javascript_can_open_windows_automatically (settings, !NILP (val)); + else if (EQ (key, Qwebkit_load_icons_ignoring_image_load_setting)) + webkit_settings_set_load_icons_ignoring_image_load_setting (settings, !NILP (val)); + else if (EQ (key, Qwebkit_media_playback_requires_user_gesture)) + webkit_settings_set_media_playback_requires_user_gesture (settings, !NILP (val)); + else if (EQ (key, Qwebkit_zoom_text_only)) + webkit_settings_set_zoom_text_only (settings, !NILP (val)); + else + signal_error ("Invalid webkit setting", key); + i++; + } + + webkit_web_view_set_settings (WEBKIT_WEB_VIEW (xw->widget_osr), settings); + return Qnil; +} + + DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc: /* Resize XWIDGET. NEW_WIDTH, NEW_HEIGHT define the new size. */ ) (Lisp_Object xwidget, Lisp_Object new_width, Lisp_Object new_height) @@ -999,8 +1077,32 @@ syms_of_xwidget (void) defsubr (&Sxwidget_webkit_get_uri); defsubr (&Sxwidget_webkit_zoom); defsubr (&Sxwidget_webkit_execute_script); + defsubr (&Sxwidget_webkit_set_settings); DEFSYM (Qwebkit, "webkit"); + /* Symbols used for Webkit view settings */ + DEFSYM (Qwebkit_allow_file_access_from_file_urls, "webkit-allow-file-access-from-file-urls"); + DEFSYM (Qwebkit_allow_modal_dialogs, "webkit-allow-modal-dialogs"); + DEFSYM (Qwebkit_allow_universal_access_from_file_urls, "webkit-allow-universal-access-from-file-urls"); + DEFSYM (Qwebkit_auto_load_images, "webkit-auto-load-images"); + DEFSYM (Qwebkit_draw_compositing_indicators, "webkit-draw-compositing-indicators"); + DEFSYM (Qwebkit_enable_accelerated_2d_canvas, "webkit-enable-accelerated-2d-canvas"); + DEFSYM (Qwebkit_enable_caret_browsing, "webkit-enable-caret-browsing"); + DEFSYM (Qwebkit_enable_developer_extras, "webkit-enable-developer-extras"); + DEFSYM (Qwebkit_enable_dns_prefetching, "webkit-enable-dns-prefetching"); + DEFSYM (Qwebkit_enable_frame_flattening, "webkit-enable-frame-flattening"); + DEFSYM (Qwebkit_enable_javascript, "webkit-enable-javascript"); + DEFSYM (Qwebkit_enable_private_browsing, "webkit-enable-private-browsing"); + DEFSYM (Qwebkit_enable_webaudio, "webkit-enable-webaudio"); + DEFSYM (Qwebkit_enable_webgl, "webkit-enable-webgl"); + DEFSYM (Qwebkit_enable_write_console_messages_to_stdout, "webkit-enable-write-console-messages-to-stdout"); + DEFSYM (Qwebkit_enable_xss_auditor, "webkit-enable-xss-auditor"); + DEFSYM (Qwebkit_javascript_can_access_clipboard, "webkit-javascript-can-access-clipboard"); + DEFSYM (Qwebkit_javascript_can_open_windows_automatically, "webkit-javascript-can-open-windows-automatically"); + DEFSYM (Qwebkit_load_icons_ignoring_image_load_setting, "webkit-load-icons-ignoring-image-load-setting"); + DEFSYM (Qwebkit_media_playback_requires_user_gesture, "webkit-media-playback-requires-user-gesture"); + DEFSYM (Qwebkit_zoom_text_only, "webkit-zoom-text-only"); + defsubr (&Sxwidget_size_request); defsubr (&Sdelete_xwidget_view);