2 ;; cd /path/to/xwidgets-emacs-dir
3 ;; make all&& src/emacs -q --eval "(progn (load \"`pwd`/lisp/xwidget-test.el\") (xwidget-demo-basic))"
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
13 ;;the widgets will move when you type in the buffer. good!
15 ;;there will be redrawing issues when widgets change rows, etc. bad!
17 ;;its currently difficult to give kbd focus to the xembedded emacs,
18 ;;but try evaling the following:
20 ;; (xwidget-set-keyboard-grab 3 1)
25 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
26 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
27 ;; demo/test functions
30 (defmacro xwidget-demo
(name &rest body
)
31 `(defun ,(intern (concat "xwidget-demo-" name
)) ()
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")
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
))
42 (xwidget-demo "a-button-bidi"
43 (xwidget-insert (+ 5 (point-min)) 'Button
"button" 60 50)
44 (set (make-local-variable 'bidi-paragraph-direction
) 'right-to-left
)
45 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
48 (xwidget-demo "a-toggle-button"
49 (xwidget-insert (point-min) 'ToggleButton
"toggle" 60 50)
50 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
52 (xwidget-demo "a-big-button"
53 (xwidget-insert (point-min) 'Button
"button" 400 500)
54 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
56 (xwidget-demo "a-socket"
57 (xwidget-insert (point-min) 'socket
"socket" 500 500)
58 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
60 (xwidget-demo "a-socket-osr-broken"
61 (xwidget-insert (point-min) 'socket-osr
"socket-osr" 500 500)
62 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
65 (xwidget-demo "a-slider"
66 (xwidget-insert (point-min) 'slider
"slider" 500 100)
67 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
69 (xwidget-demo "a-canvas"
70 (xwidget-insert (point-min) 'cairo
"canvas" 1000 1000)
71 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
73 (xwidget-demo "a-webkit-broken"
74 (xwidget-insert (point-min) 'webkit
"webkit" 1000 1000)
75 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
77 (xwidget-demo "a-webkit-osr"
78 (xwidget-insert (point-min) 'webkit-osr
"webkit-osr" 1000 1000)
79 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
)
80 (xwidget-webkit-goto-uri (xwidget-at 1) "http://www.fsf.org"))
82 (xwidget-demo "a-xwgir"
83 (xwidget-insert (point-min) 'xwgir
"xwgir" 1000 1000)
84 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
86 (xwidget-demo "a-xwgir-color-button"
87 (xwgir-require-namespace "Gtk" "3.0")
88 (put 'ColorButton
:xwgir-class
'("Gtk" "ColorSelection"))
89 (xwidget-insert (point-min) 'ColorButton
"xwgir-color-button" 1000 1000)
90 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
92 (xwidget-demo "a-xwgir-button"
93 (xwgir-require-namespace "Gtk" "3.0")
94 (put 'xwgirButton
:xwgir-class
'("Gtk" "Button"))
96 (xwidget-insert (point-min) 'xwgirButton
"xwgir label didnt work..." 700 700)
97 (xwgir-xwidget-call-method (xwidget-at 1) "set_label" '( "xwgir label worked!"))
98 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
100 (xwidget-demo "a-xwgir-check-button"
101 (xwgir-require-namespace "Gtk" "3.0")
102 (put 'xwgirCheckButton
:xwgir-class
'("Gtk" "CheckButton"))
104 (xwidget-insert (point-min) 'xwgirCheckButton
"xwgir label didnt work..." 700 700)
105 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
107 (xwidget-demo "a-xwgir-hscale"
108 (xwgir-require-namespace "Gtk" "3.0")
109 (put 'xwgirHScale
:xwgir-class
'("Gtk" "HScale"))
111 (xwidget-insert (point-min) 'xwgirHScale
"xwgir label didnt work..." 700 700)
112 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
114 (xwidget-demo "a-xwgir-webkit"
115 (xwgir-require-namespace "WebKit" "3.0")
116 (put 'xwgirWebkit
:xwgir-class
'("WebKit" "WebView"))
118 (xwidget-insert (point-min) 'xwgirWebkit
"xwgir webkit..." 700 700)
119 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
))
123 ;; tentative testcase:
124 ;; (xwgir-require-namespace "WebKit" "3.0")
126 ;; (put 'webkit-osr :xwgir-class '("WebKit" "WebView"))
127 ;; (xwgir-call-method (xwidget-at 1) "set_zoom_level" '(3.0))
129 ;; (xwgir-require-namespace "Gtk" "3.0")
130 ;; (put 'color-selection :xwgir-class '("Gtk" "ColorSelection"))
133 (xwidget-demo "basic"
134 (xwidget-insert (point-min) 'button
"button" 40 50 )
135 (xwidget-insert 15 'toggle
"toggle" 60 30 )
136 (xwidget-insert 30 'socket
"emacs" 400 200 )
137 (xwidget-insert 20 'slider
"slider" 100 50 )
138 (xwidget-insert 40 'socket
"uzbl-core" 400 400 )
139 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-basic
)
143 ;it doesnt seem gtk_socket_steal works very well. its deprecated.
145 ; then (xwidget-embed-steal 3 <winid>)
146 (defun xwidget-demo-grab ()
148 (insert "0 <<< grabbed appp will appear here\n")
149 (xwidget-insert 1 1 3 "1" 1000 )
150 (define-key (current-local-map) [xwidget-event
] 'xwidget-handler-demo-grab
)
153 ;ive basically found these xembeddable things:
161 ;/usr/libexec/openvrml-xembed 0 ~/Desktop/HelloWorld.wrl
163 (defun xwidget-handler-demo-basic ()
165 (message "stuff happened to xwidget %S" last-input-event
)
167 ((xwidget-event-type (nth 1 last-input-event
))
168 (xwidget (nth 2 last-input-event
)))
169 (cond ( (eq xwidget-event-type
'xembed-ready
)
171 ((xembed-id (nth 3 last-input-event
)))
172 (message "xembed ready event: %S xw-id:%s" xembed-id xwidget
)
173 ;;will start emacs/uzbl in a xembed socket when its ready
176 (start-process "xembed" "*xembed*" "/var/lib/jenkins/jobs/emacs-xwidgets-automerge/workspace/src/emacs" "-q" "--parent-id" (number-to-string xembed-id
) ) )
177 ;; ((eq 5 xwidget-id)
178 ;; (start-process "xembed2" "*xembed2*" "uzbl-core" "-s" (number-to-string xembed-id) "http://www.fsf.org" )
186 (defun xwidget-handler-demo-grab ()
188 (message "stuff happened to xwidget %S" last-input-event
)
190 ((xwidget-event-type (nth 2 last-input-event
)))
191 (cond ( (eq xwidget-event-type
'xembed-ready
)
193 ((xembed-id (nth 3 last-input-event
)))
194 (message "xembed ready %S" xembed-id
)
197 (defun xwidget-dummy-hook ()
198 (message "xwidget dummy hook called"))
200 ; (xwidget-resize-hack 1 200 200)
202 ;(xwidget-demo-basic)
204 (provide 'xwidget-test-manual
)