diff options
| -rw-r--r-- | lisp/xwidget-test.el | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/lisp/xwidget-test.el b/lisp/xwidget-test.el new file mode 100644 index 00000000000..85093316676 --- /dev/null +++ b/lisp/xwidget-test.el | |||
| @@ -0,0 +1,147 @@ | |||
| 1 | ;;test like: | ||
| 2 | ;; cd /path/to/xwidgets-emacs-dir | ||
| 3 | ;; make all&& src/emacs -q --eval "(progn (load \"`pwd`/lisp/xwidget-test.el\") (xwidget-demo-basic))" | ||
| 4 | |||
| 5 | |||
| 6 | ;; you should see: | ||
| 7 | ;; - a gtk button | ||
| 8 | ;; - a gtk toggle button | ||
| 9 | ;; - a gtk slider button | ||
| 10 | ;; - an xembed window(using gtk_socket) showing another emacs instance | ||
| 11 | ;; - an xembed window(using gtk_socket) showing an uzbl web browser if its installed | ||
| 12 | |||
| 13 | ;;the widgets will move when you type in the buffer. good! | ||
| 14 | |||
| 15 | ;;there will be redrawing issues when widgets change rows, etc. bad! | ||
| 16 | |||
| 17 | ;;its currently difficult to give kbd focus to the xembedded emacs, | ||
| 18 | ;;but try evaling the following: | ||
| 19 | |||
| 20 | ;; (xwidget-set-keyboard-grab 3 1) | ||
| 21 | |||
| 22 | |||
| 23 | |||
| 24 | |||
| 25 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| 26 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| 27 | ;; demo/test functions | ||
| 28 | (require 'xwidget) | ||
| 29 | |||
| 30 | (defmacro xwidget-demo (name &rest body) | ||
| 31 | `(defun ,(intern (concat "xwidget-demo-" name)) () | ||
| 32 | (interactive) | ||
| 33 | (switch-to-buffer ,(format "*xwidget-demo-%s*" name)) | ||
| 34 | (text-mode);;otherwise no local keymap | ||
| 35 | (insert "Some random text for xwidgets to be inserted in for demo purposes.\n") | ||
| 36 | ,@body)) | ||
| 37 | |||
| 38 | (xwidget-demo "a-button" | ||
| 39 | (xwidget-insert (point-min) 'button "button" 60 50) | ||
| 40 | (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) | ||
| 41 | |||
| 42 | (xwidget-demo "a-toggle-button" | ||
| 43 | (xwidget-insert (point-min) 'toggle "teggle" 60 50) | ||
| 44 | (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) | ||
| 45 | |||
| 46 | (xwidget-demo "a-big-button" | ||
| 47 | (xwidget-insert (point-min) 'button "button" 400 500) | ||
| 48 | (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) | ||
| 49 | |||
| 50 | (xwidget-demo "a-socket" | ||
| 51 | (xwidget-insert (point-min) 'socket "socket" 500 500) | ||
| 52 | (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) | ||
| 53 | |||
| 54 | (xwidget-demo "a-socket-osr" | ||
| 55 | (xwidget-insert (point-min) 'socket-osr "socket-osr" 500 500) | ||
| 56 | (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) | ||
| 57 | |||
| 58 | |||
| 59 | (xwidget-demo "a-slider" | ||
| 60 | (xwidget-insert (point-min) 'slider "slider" 500 100) | ||
| 61 | (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) | ||
| 62 | |||
| 63 | (xwidget-demo "a-canvas" | ||
| 64 | (xwidget-insert (point-min) 'cairo "canvas" 1000 1000) | ||
| 65 | (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) | ||
| 66 | |||
| 67 | (xwidget-demo "a-webkit" | ||
| 68 | (xwidget-insert (point-min) 'webkit "webkit" 1000 1000) | ||
| 69 | (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) | ||
| 70 | |||
| 71 | (xwidget-demo "a-webkit-osr" | ||
| 72 | (xwidget-insert (point-min) 'webkit-osr "webkit-osr" 1000 1000) | ||
| 73 | (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) | ||
| 74 | |||
| 75 | |||
| 76 | |||
| 77 | (xwidget-demo "basic" | ||
| 78 | (xwidget-insert (point-min) 'button "button" 40 50 ) | ||
| 79 | (xwidget-insert 15 'toggle "toggle" 60 30 ) | ||
| 80 | (xwidget-insert 30 'socket "emacs" 400 200 ) | ||
| 81 | (xwidget-insert 20 'slider "slider" 100 50 ) | ||
| 82 | (xwidget-insert 40 'socket "uzbl-core" 400 400 ) | ||
| 83 | (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic) | ||
| 84 | ) | ||
| 85 | |||
| 86 | |||
| 87 | ;it doesnt seem gtk_socket_steal works very well. its deprecated. | ||
| 88 | ; xwininfo -int | ||
| 89 | ; then (xwidget-embed-steal 3 <winid>) | ||
| 90 | (defun xwidget-demo-grab () | ||
| 91 | (interactive) | ||
| 92 | (insert "0 <<< grabbed appp will appear here\n") | ||
| 93 | (xwidget-insert 1 1 3 "1" 1000 ) | ||
| 94 | (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-grab) | ||
| 95 | ) | ||
| 96 | |||
| 97 | ;ive basically found these xembeddable things: | ||
| 98 | ;openvrml | ||
| 99 | ;emacs | ||
| 100 | ;mplayer | ||
| 101 | ;surf | ||
| 102 | ;uzbl | ||
| 103 | |||
| 104 | ;try the openvrml: | ||
| 105 | ;/usr/libexec/openvrml-xembed 0 ~/Desktop/HelloWorld.wrl | ||
| 106 | |||
| 107 | |||
| 108 | (defun xwidget-handler-demo-basic () | ||
| 109 | (interactive) | ||
| 110 | (message "stuff happened to xwidget %S" last-input-event) | ||
| 111 | (let* | ||
| 112 | ((xwidget-event-type (nth 2 last-input-event)) | ||
| 113 | (xwidget (nth 1 last-input-event))) | ||
| 114 | (cond ( (eq xwidget-event-type 'xembed-ready) | ||
| 115 | (let* | ||
| 116 | ((xembed-id (nth 3 last-input-event))) | ||
| 117 | (message "xembed ready event: %S xw-id:%s" xembed-id xwidget) | ||
| 118 | ;;will start emacs/uzbl in a xembed socket when its ready | ||
| 119 | (cond | ||
| 120 | (t;;(eq 3 xwidget) | ||
| 121 | (start-process "xembed" "*xembed*" (format "%s/src/emacs" default-directory) "-q" "--parent-id" (number-to-string xembed-id) ) ) | ||
| 122 | ;; ((eq 5 xwidget-id) | ||
| 123 | ;; (start-process "xembed2" "*xembed2*" "uzbl-core" "-s" (number-to-string xembed-id) "http://www.fsf.org" ) | ||
| 124 | ) | ||
| 125 | |||
| 126 | ) | ||
| 127 | )))) | ||
| 128 | |||
| 129 | |||
| 130 | |||
| 131 | (defun xwidget-handler-demo-grab () | ||
| 132 | (interactive) | ||
| 133 | (message "stuff happened to xwidget %S" last-input-event) | ||
| 134 | (let* | ||
| 135 | ((xwidget-event-type (nth 2 last-input-event))) | ||
| 136 | (cond ( (eq xwidget-event-type 'xembed-ready) | ||
| 137 | (let* | ||
| 138 | ((xembed-id (nth 3 last-input-event))) | ||
| 139 | (message "xembed ready %S" xembed-id) | ||
| 140 | ) | ||
| 141 | )))) | ||
| 142 | (defun xwidget-dummy-hook () | ||
| 143 | (message "xwidget dummy hook called")) | ||
| 144 | |||
| 145 | ; (xwidget-resize-hack 1 200 200) | ||
| 146 | |||
| 147 | ;(xwidget-demo-basic) | ||