diff options
| author | Joakim Verona | 2011-07-31 23:55:11 +0200 |
|---|---|---|
| committer | Joakim Verona | 2011-07-31 23:55:11 +0200 |
| commit | fceaa88120e9f907c279baecd2e755b16e667059 (patch) | |
| tree | 00cdaf6a0fd7a5e752cd31162dcd87f6430027cb | |
| parent | 6752d22f823d01391254b4f10e854f6456d26ed2 (diff) | |
| download | emacs-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.el | 19 | ||||
| -rw-r--r-- | src/xwidget.c | 34 |
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; | |||
| 142 | struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); | 142 | struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); |
| 143 | Lisp_Object xwidget_spec_value ( Lisp_Object spec, Lisp_Object key, int *found); | 143 | Lisp_Object xwidget_spec_value ( Lisp_Object spec, Lisp_Object key, int *found); |
| 144 | gboolean webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) ; | 144 | gboolean webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) ; |
| 145 | void webkit_osr_document_load_finished_callback (WebKitWebView *webkitwebview, | ||
| 146 | WebKitWebFrame *arg1, | ||
| 147 | gpointer user_data); | ||
| 145 | 148 | ||
| 146 | DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 7, 0, | 149 | DEFUN ("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 | ||
| 390 | void 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 |
| 383 | gboolean | 415 | gboolean |
| 384 | xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) | 416 | xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) |