forked from pool/emacs
Accepting request 500808 from home:Zaitor:branches:editors
- Add conditional emacs-25.2-xwidget.patch, and pkgconfig(webkit2gtk-4.0) BuildRequires; depend on latest webkitgtk for Tumbleweed. OBS-URL: https://build.opensuse.org/request/show/500808 OBS-URL: https://build.opensuse.org/package/show/editors/emacs?expand=0&rev=232
This commit is contained in:
parent
4c30c8b5b1
commit
5089d0cd1f
303
emacs-25.2-xwidget.patch
Normal file
303
emacs-25.2-xwidget.patch
Normal file
@ -0,0 +1,303 @@
|
||||
commit d781662873f228b110a128f7a2b6583a4d5e0a3a
|
||||
Author: Ricardo Wurmus <rekado@elephly.net>
|
||||
Date: Tue Oct 25 23:00:35 2016 -0700
|
||||
|
||||
xwidget: Use WebKit2 API
|
||||
|
||||
* configure.ac: Check for webkit2gtk-4.0.
|
||||
* src/xwidget.c: Adjust to use WebKit2 API.
|
||||
* lisp/xwidget.el (xwidget-webkit-callback): Adjust matches for
|
||||
`xwidget-event-type'.
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 998ff52..46fd434 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -2630,8 +2630,8 @@ if test "$with_xwidgets" != "no"; then
|
||||
test "$USE_GTK_TOOLKIT" = "GTK3" && test "$window_system" != "none" ||
|
||||
AC_MSG_ERROR([xwidgets requested but gtk3 not used.])
|
||||
|
||||
- WEBKIT_REQUIRED=1.4.0
|
||||
- WEBKIT_MODULES="webkitgtk-3.0 >= $WEBKIT_REQUIRED"
|
||||
+ WEBKIT_REQUIRED=2.12
|
||||
+ WEBKIT_MODULES="webkit2gtk-4.0 >= $WEBKIT_REQUIRED"
|
||||
EMACS_CHECK_MODULES([WEBKIT], [$WEBKIT_MODULES])
|
||||
HAVE_XWIDGETS=$HAVE_WEBKIT
|
||||
test $HAVE_XWIDGETS = yes ||
|
||||
diff --git a/lisp/xwidget.el b/lisp/xwidget.el
|
||||
index 7a0ca8b..1bae6bb 100644
|
||||
--- a/lisp/xwidget.el
|
||||
+++ b/lisp/xwidget.el
|
||||
@@ -187,7 +187,7 @@ XWIDGET instance, XWIDGET-EVENT-TYPE depends on the originating xwidget."
|
||||
"error: callback called for xwidget with dead buffer")
|
||||
(with-current-buffer (xwidget-buffer xwidget)
|
||||
(let* ((strarg (nth 3 last-input-event)))
|
||||
- (cond ((eq xwidget-event-type 'document-load-finished)
|
||||
+ (cond ((eq xwidget-event-type 'load-changed)
|
||||
(xwidget-log "webkit finished loading: '%s'"
|
||||
(xwidget-webkit-get-title xwidget))
|
||||
;;TODO - check the native/internal scroll
|
||||
@@ -196,8 +196,7 @@ XWIDGET instance, XWIDGET-EVENT-TYPE depends on the originating xwidget."
|
||||
(rename-buffer (format "*xwidget webkit: %s *"
|
||||
(xwidget-webkit-get-title xwidget)))
|
||||
(pop-to-buffer (current-buffer)))
|
||||
- ((eq xwidget-event-type
|
||||
- 'navigation-policy-decision-requested)
|
||||
+ ((eq xwidget-event-type 'decide-policy)
|
||||
(if (string-match ".*#\\(.*\\)" strarg)
|
||||
(xwidget-webkit-show-id-or-named-element
|
||||
xwidget
|
||||
diff --git a/src/xwidget.c b/src/xwidget.c
|
||||
index f5f4da0..78349a8 100644
|
||||
--- a/src/xwidget.c
|
||||
+++ b/src/xwidget.c
|
||||
@@ -98,13 +98,7 @@ along with GNU Emacs. If not, see <http
|
||||
|
||||
#include <wchar.h>
|
||||
|
||||
-#include <webkit/webkitwebview.h>
|
||||
-#include <webkit/webkitwebplugindatabase.h>
|
||||
-#include <webkit/webkitwebplugin.h>
|
||||
-#include <webkit/webkitglobals.h>
|
||||
-#include <webkit/webkitwebnavigationaction.h>
|
||||
-#include <webkit/webkitdownload.h>
|
||||
-#include <webkit/webkitwebpolicydecision.h>
|
||||
+#include <webkit2/webkit2.h>
|
||||
|
||||
static struct xwidget *
|
||||
allocate_xwidget (void)
|
||||
@@ -50,34 +47,16 @@ allocate_xwidget_view (void)
|
||||
|
||||
static struct xwidget_view *xwidget_view_lookup (struct xwidget *,
|
||||
struct window *);
|
||||
-static void webkit_document_load_finished_cb (WebKitWebView *, WebKitWebFrame *,
|
||||
- gpointer);
|
||||
-static gboolean webkit_download_cb (WebKitWebView *, WebKitDownload *, gpointer);
|
||||
+static void webkit_view_load_changed_cb (WebKitWebView *,
|
||||
+ WebKitLoadEvent,
|
||||
+ gpointer);
|
||||
+static gboolean webkit_download_cb (WebKitWebContext *, WebKitDownload *, gpointer);
|
||||
|
||||
static gboolean
|
||||
-webkit_mime_type_policy_typedecision_requested_cb (WebKitWebView *,
|
||||
- WebKitWebFrame *,
|
||||
- WebKitNetworkRequest *,
|
||||
- gchar *,
|
||||
- WebKitWebPolicyDecision *,
|
||||
- gpointer);
|
||||
-
|
||||
-static gboolean
|
||||
-webkit_new_window_policy_decision_requested_cb (WebKitWebView *,
|
||||
- WebKitWebFrame *,
|
||||
- WebKitNetworkRequest *,
|
||||
- WebKitWebNavigationAction *,
|
||||
- WebKitWebPolicyDecision *,
|
||||
- gpointer);
|
||||
-
|
||||
-static gboolean
|
||||
-webkit_navigation_policy_decision_requested_cb (WebKitWebView *,
|
||||
- WebKitWebFrame *,
|
||||
- WebKitNetworkRequest *,
|
||||
- WebKitWebNavigationAction *,
|
||||
- WebKitWebPolicyDecision *,
|
||||
- gpointer);
|
||||
-
|
||||
+webkit_decide_policy_cb (WebKitWebView *,
|
||||
+ WebKitPolicyDecision *,
|
||||
+ WebKitPolicyDecisionType,
|
||||
+ gpointer);
|
||||
|
||||
|
||||
DEFUN ("make-xwidget",
|
||||
@@ -168,29 +147,17 @@ Returns the newly constructed xwidget, or nil if construction fails. */)
|
||||
if (EQ (xw->type, Qwebkit))
|
||||
{
|
||||
g_signal_connect (G_OBJECT (xw->widget_osr),
|
||||
- "document-load-finished",
|
||||
- G_CALLBACK (webkit_document_load_finished_cb), xw);
|
||||
+ "load-changed",
|
||||
+ G_CALLBACK (webkit_view_load_changed_cb), xw);
|
||||
|
||||
- g_signal_connect (G_OBJECT (xw->widget_osr),
|
||||
- "download-requested",
|
||||
+ g_signal_connect (G_OBJECT (webkit_web_context_get_default ()),
|
||||
+ "download-started",
|
||||
G_CALLBACK (webkit_download_cb), xw);
|
||||
|
||||
g_signal_connect (G_OBJECT (xw->widget_osr),
|
||||
- "mime-type-policy-decision-requested",
|
||||
- G_CALLBACK
|
||||
- (webkit_mime_type_policy_typedecision_requested_cb),
|
||||
- xw);
|
||||
-
|
||||
- g_signal_connect (G_OBJECT (xw->widget_osr),
|
||||
- "new-window-policy-decision-requested",
|
||||
- G_CALLBACK
|
||||
- (webkit_new_window_policy_decision_requested_cb),
|
||||
- xw);
|
||||
-
|
||||
- g_signal_connect (G_OBJECT (xw->widget_osr),
|
||||
- "navigation-policy-decision-requested",
|
||||
+ "decide-policy",
|
||||
G_CALLBACK
|
||||
- (webkit_navigation_policy_decision_requested_cb),
|
||||
+ (webkit_decide_policy_cb),
|
||||
xw);
|
||||
}
|
||||
|
||||
@@ -284,81 +251,83 @@ store_xwidget_event_string (struct xwidget *xw, const char *eventname,
|
||||
kbd_buffer_store_event (&event);
|
||||
}
|
||||
|
||||
-/* TODO deprecated, use load-status. */
|
||||
void
|
||||
-webkit_document_load_finished_cb (WebKitWebView *webkitwebview,
|
||||
- WebKitWebFrame *arg1,
|
||||
- gpointer data)
|
||||
+webkit_view_load_changed_cb (WebKitWebView *webkitwebview,
|
||||
+ WebKitLoadEvent load_event,
|
||||
+ gpointer data)
|
||||
{
|
||||
- struct xwidget *xw = g_object_get_data (G_OBJECT (webkitwebview),
|
||||
- XG_XWIDGET);
|
||||
-
|
||||
- store_xwidget_event_string (xw, "document-load-finished", "");
|
||||
+ switch (load_event) {
|
||||
+ case WEBKIT_LOAD_FINISHED:
|
||||
+ {
|
||||
+ struct xwidget *xw = g_object_get_data (G_OBJECT (webkitwebview),
|
||||
+ XG_XWIDGET);
|
||||
+ store_xwidget_event_string (xw, "load-changed", "");
|
||||
+ break;
|
||||
+ }
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
gboolean
|
||||
-webkit_download_cb (WebKitWebView *webkitwebview,
|
||||
+webkit_download_cb (WebKitWebContext *webkitwebcontext,
|
||||
WebKitDownload *arg1,
|
||||
gpointer data)
|
||||
{
|
||||
- struct xwidget *xw = g_object_get_data (G_OBJECT (webkitwebview),
|
||||
+ WebKitWebView *view = webkit_download_get_web_view(arg1);
|
||||
+ WebKitURIRequest *request = webkit_download_get_request(arg1);
|
||||
+ struct xwidget *xw = g_object_get_data (G_OBJECT (view),
|
||||
XG_XWIDGET);
|
||||
- store_xwidget_event_string (xw, "download-requested",
|
||||
- webkit_download_get_uri (arg1));
|
||||
+
|
||||
+ store_xwidget_event_string (xw, "download-started",
|
||||
+ webkit_uri_request_get_uri(request));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
-webkit_mime_type_policy_typedecision_requested_cb (WebKitWebView *webView,
|
||||
- WebKitWebFrame *frame,
|
||||
- WebKitNetworkRequest *request,
|
||||
- gchar *mimetype,
|
||||
- WebKitWebPolicyDecision *policy_decision,
|
||||
- gpointer user_data)
|
||||
+webkit_decide_policy_cb (WebKitWebView *webView,
|
||||
+ WebKitPolicyDecision *decision,
|
||||
+ WebKitPolicyDecisionType type,
|
||||
+ gpointer user_data)
|
||||
{
|
||||
- /* This function makes webkit send a download signal for all unknown
|
||||
- mime types. TODO: Defer the decision to Lisp, so that it's
|
||||
- possible to make Emacs handle mime text for instance. */
|
||||
- if (!webkit_web_view_can_show_mime_type (webView, mimetype))
|
||||
+ switch (type) {
|
||||
+ case WEBKIT_POLICY_DECISION_TYPE_RESPONSE:
|
||||
+ /* This function makes webkit send a download signal for all unknown
|
||||
+ mime types. TODO: Defer the decision to Lisp, so that it's
|
||||
+ possible to make Emacs handle mime text for instance. */
|
||||
{
|
||||
- webkit_web_policy_decision_download (policy_decision);
|
||||
- return TRUE;
|
||||
+ WebKitResponsePolicyDecision *response =
|
||||
+ WEBKIT_RESPONSE_POLICY_DECISION (decision);
|
||||
+ if (!webkit_response_policy_decision_is_mime_type_supported (response))
|
||||
+ {
|
||||
+ webkit_policy_decision_download (decision);
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+ else
|
||||
+ return FALSE;
|
||||
+ break;
|
||||
}
|
||||
- else
|
||||
+ case WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION:
|
||||
+ case WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION:
|
||||
+ {
|
||||
+ WebKitNavigationPolicyDecision *navigation_decision =
|
||||
+ WEBKIT_NAVIGATION_POLICY_DECISION (decision);
|
||||
+ WebKitNavigationAction *navigation_action =
|
||||
+ webkit_navigation_policy_decision_get_navigation_action (navigation_decision);
|
||||
+ WebKitURIRequest *request =
|
||||
+ webkit_navigation_action_get_request (navigation_action);
|
||||
+
|
||||
+ struct xwidget *xw = g_object_get_data (G_OBJECT (webView), XG_XWIDGET);
|
||||
+ store_xwidget_event_string (xw, "decide-policy",
|
||||
+ webkit_uri_request_get_uri (request));
|
||||
+ return FALSE;
|
||||
+ break;
|
||||
+ }
|
||||
+ default:
|
||||
return FALSE;
|
||||
+ }
|
||||
}
|
||||
|
||||
-static gboolean
|
||||
-webkit_new_window_policy_decision_requested_cb (WebKitWebView *webView,
|
||||
- WebKitWebFrame *frame,
|
||||
- WebKitNetworkRequest *request,
|
||||
- WebKitWebNavigationAction *navigation_action,
|
||||
- WebKitWebPolicyDecision *policy_decision,
|
||||
- gpointer user_data)
|
||||
-{
|
||||
- struct xwidget *xw = g_object_get_data (G_OBJECT (webView), XG_XWIDGET);
|
||||
- webkit_web_navigation_action_get_original_uri (navigation_action);
|
||||
-
|
||||
- store_xwidget_event_string (xw, "new-window-policy-decision-requested",
|
||||
- webkit_web_navigation_action_get_original_uri
|
||||
- (navigation_action));
|
||||
- return FALSE;
|
||||
-}
|
||||
-
|
||||
-static gboolean
|
||||
-webkit_navigation_policy_decision_requested_cb (WebKitWebView *webView,
|
||||
- WebKitWebFrame *frame,
|
||||
- WebKitNetworkRequest *request,
|
||||
- WebKitWebNavigationAction *navigation_action,
|
||||
- WebKitWebPolicyDecision *policy_decision,
|
||||
- gpointer user_data)
|
||||
-{
|
||||
- struct xwidget *xw = g_object_get_data (G_OBJECT (webView), XG_XWIDGET);
|
||||
- store_xwidget_event_string (xw, "navigation-policy-decision-requested",
|
||||
- webkit_web_navigation_action_get_original_uri
|
||||
- (navigation_action));
|
||||
- return FALSE;
|
||||
-}
|
||||
|
||||
/* For gtk3 offscreen rendered widgets. */
|
||||
static gboolean
|
||||
@@ -599,8 +568,13 @@ DEFUN ("xwidget-webkit-execute-script",
|
||||
{
|
||||
WEBKIT_FN_INIT ();
|
||||
CHECK_STRING (script);
|
||||
- webkit_web_view_execute_script (WEBKIT_WEB_VIEW (xw->widget_osr),
|
||||
- SSDATA (script));
|
||||
+ // TODO: provide callback function to do something with the return
|
||||
+ // value! This allows us to get rid of the title hack.
|
||||
+ webkit_web_view_run_javascript (WEBKIT_WEB_VIEW (xw->widget_osr),
|
||||
+ SSDATA (script),
|
||||
+ NULL, /*cancellable*/
|
||||
+ NULL, /*callback*/
|
||||
+ NULL /*user data*/);
|
||||
return Qnil;
|
||||
}
|
||||
|
@ -1,3 +1,10 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Jun 2 21:42:04 UTC 2017 - zaitor@opensuse.org
|
||||
|
||||
- Add conditional emacs-25.2-xwidget.patch, and
|
||||
pkgconfig(webkit2gtk-4.0) BuildRequires; depend on latest
|
||||
webkitgtk for Tumbleweed.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue May 2 11:02:57 UTC 2017 - werner@suse.de
|
||||
|
||||
|
@ -68,7 +68,9 @@ BuildRequires: libtiff-devel
|
||||
%if 0%{?suse_version} > 1140
|
||||
BuildRequires: libudev-devel
|
||||
%endif
|
||||
%if 0%{?suse_version} > 1130
|
||||
%if 0%{?suse_version} > 1320
|
||||
BuildRequires: pkgconfig(webkit2gtk-4.0) >= 2.12
|
||||
%else
|
||||
BuildRequires: libwebkitgtk3-devel
|
||||
%endif
|
||||
BuildRequires: libxml2-devel
|
||||
@ -129,6 +131,8 @@ Patch23: emacs-25.1-custom-fonts.patch
|
||||
Patch24: emacs-25.2-ImageMagick7.patch
|
||||
# PATCH-FIX-UPSTREAM-GNULIB CVE-2017-7476
|
||||
Patch25: gnulib.git-94e01571.patch
|
||||
# http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=d781662873f228b110a128f7a2b6583a4d5e0a3a
|
||||
Patch26: emacs-25.2-xwidget.patch
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
%{expand: %%global include_info %(test -s /usr/share/info/info.info* && echo 0 || echo 1)}
|
||||
@ -244,6 +248,9 @@ and most assembler-like syntaxes.
|
||||
%patch23 -p0 -b .custfnt
|
||||
%patch24 -p1
|
||||
%patch25 -p0
|
||||
%if 0%{?suse_version} > 1320
|
||||
%patch26 -p1
|
||||
%endif
|
||||
%patch -p0 -b .0
|
||||
|
||||
%if %{without autoconf}
|
||||
|
Loading…
Reference in New Issue
Block a user