aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Verona2011-07-31 23:55:11 +0200
committerJoakim Verona2011-07-31 23:55:11 +0200
commitfceaa88120e9f907c279baecd2e755b16e667059 (patch)
tree00cdaf6a0fd7a5e752cd31162dcd87f6430027cb
parent6752d22f823d01391254b4f10e854f6456d26ed2 (diff)
downloademacs-fceaa88120e9f907c279baecd2e755b16e667059.tar.gz
emacs-fceaa88120e9f907c279baecd2e755b16e667059.zip
example webkit signal handler for document-loaded. upstream has changed display code so there are some visual glitches. i dont think xwidget code is to blame.
-rw-r--r--lisp/xwidget.el19
-rw-r--r--src/xwidget.c34
2 files changed, 47 insertions, 6 deletions
diff --git a/lisp/xwidget.el b/lisp/xwidget.el
index be251fa3401..3a9a58a5173 100644
--- a/lisp/xwidget.el
+++ b/lisp/xwidget.el
@@ -74,15 +74,24 @@ defaults to the string looking like a url around the cursor position."
74 (define-key map "b" 'xwidget-webkit-back ) 74 (define-key map "b" 'xwidget-webkit-back )
75 (define-key map "r" 'xwidget-webkit-reload ) 75 (define-key map "r" 'xwidget-webkit-reload )
76 (define-key map "\C-m" 'xwidget-webkit-insert-string) 76 (define-key map "\C-m" 'xwidget-webkit-insert-string)
77 (define-key map [xwidget-event] 'xwidget-webkit-event-handler)
77 map) 78 map)
78 79
79 "Keymap for `xwidget-webkit-mode'.") 80 "Keymap for `xwidget-webkit-mode'.")
80 81
82(defun xwidget-webkit-event-handler ()
83 (interactive)
84 (message "stuff happened to webkit xwidget %S" last-input-event)
85 (let*
86 ((xwidget-event-type (nth 2 last-input-event))
87 (xwidget (nth 1 last-input-event)))
88 (cond ( (eq xwidget-event-type 'document-load-finished)
89 (message "webkit loaded %s" xwidget))
90 )))
81 91
82 92 (define-derived-mode xwidget-webkit-mode
83(define-derived-mode xwidget-webkit-mode 93 special-mode "xwidget-webkit" "xwidget webkit view mode"
84 special-mode "xwidget-webkit" "xwidget webkit view mode" 94 (setq buffer-read-only t))))
85 (setq buffer-read-only t))
86 95
87(defvar xwidget-webkit-last-session-buffer nil) 96(defvar xwidget-webkit-last-session-buffer nil)
88 97
@@ -174,7 +183,7 @@ defaults to the string looking like a url around the cursor position."
174;;this is a workaround because I cant find the right place to put it in C 183;;this is a workaround because I cant find the right place to put it in C
175(add-hook 'window-configuration-change-hook 'xwidget-cleanup) 184(add-hook 'window-configuration-change-hook 'xwidget-cleanup)
176 185
177(defvar xwidget-webkit-kill-flash-oneshot nil) 186(defvar xwidget-webkit-kill-flash-oneshot t)
178(defun xwidget-webkit-kill-flash () 187(defun xwidget-webkit-kill-flash ()
179 ;;you can only call this once or webkit crashes and takes emacs with it. odd. 188 ;;you can only call this once or webkit crashes and takes emacs with it. odd.
180 (unless xwidget-webkit-kill-flash-oneshot 189 (unless xwidget-webkit-kill-flash-oneshot
diff --git a/src/xwidget.c b/src/xwidget.c
index c8e025db579..c2dc1ac8cf8 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -142,6 +142,9 @@ extern Lisp_Object QCwidth, QCheight;
142struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); 142struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w);
143Lisp_Object xwidget_spec_value ( Lisp_Object spec, Lisp_Object key, int *found); 143Lisp_Object xwidget_spec_value ( Lisp_Object spec, Lisp_Object key, int *found);
144gboolean webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) ; 144gboolean webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) ;
145void webkit_osr_document_load_finished_callback (WebKitWebView *webkitwebview,
146 WebKitWebFrame *arg1,
147 gpointer user_data);
145 148
146DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 7, 0, 149DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 7, 0,
147 doc: /* xw */ 150 doc: /* xw */
@@ -191,7 +194,12 @@ DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 7, 0,
191 /* store some xwidget data in the gtk widgets for convenient retrieval in the event handlers. */ 194 /* store some xwidget data in the gtk widgets for convenient retrieval in the event handlers. */
192 g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw)); 195 g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw));
193 g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); 196 g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw));
194 g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage-event", G_CALLBACK (webkit_osr_damage_event_callback), NULL); 197 /* signals */
198 g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage-event", G_CALLBACK (webkit_osr_damage_event_callback), NULL);
199 g_signal_connect (G_OBJECT ( xw->widget_osr),
200 "document-load-finished",
201 G_CALLBACK (webkit_osr_document_load_finished_callback),
202 xw);
195 203
196 webkit_web_view_load_uri(WEBKIT_WEB_VIEW(xw->widget_osr), "http://www.fsf.org"); 204 webkit_web_view_load_uri(WEBKIT_WEB_VIEW(xw->widget_osr), "http://www.fsf.org");
197 UNBLOCK_INPUT; 205 UNBLOCK_INPUT;
@@ -379,6 +387,30 @@ gboolean webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *ev
379} 387}
380 388
381 389
390void webkit_osr_document_load_finished_callback (WebKitWebView *webkitwebview,
391 WebKitWebFrame *arg1,
392 gpointer data)
393{
394 //TODO this event sending code should be refactored
395 struct input_event event;
396 // struct xwidget *xw = (struct xwidget *) data;
397 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webkitwebview), XG_XWIDGET);
398 printf("webkit finished loading\n");
399
400 EVENT_INIT (event);
401 event.kind = XWIDGET_EVENT;
402 event.frame_or_window = Qnil; //frame; //how to get the frame here? //TODO i store it in the xwidget now
403
404 event.arg = Qnil;
405 //event.arg = Fcons (make_number (xembedid), event.arg);
406 event.arg = Fcons (xw, event.arg); //TODO
407 event.arg = Fcons (intern ("document-load-finished"), event.arg);
408
409
410 kbd_buffer_store_event (&event);
411
412}
413
382//for gtk3 webkit_osr 414//for gtk3 webkit_osr
383gboolean 415gboolean
384xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) 416xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data)