aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Verona2011-06-23 01:25:37 +0200
committerJoakim Verona2011-06-23 01:25:37 +0200
commit787c27e81f046cfa1c457ed405551f8ca0ddb0e8 (patch)
treee958a23e30261b1469426c2c46842dd0af55a6ed
parentbccbbe01e0d0a9fcd86e516372d13a347481808f (diff)
downloademacs-787c27e81f046cfa1c457ed405551f8ca0ddb0e8.tar.gz
emacs-787c27e81f046cfa1c457ed405551f8ca0ddb0e8.zip
socket init demo xwidget-demo-a-socket now shows embedded browser again. phew./configure multiple socket views create multiple embeddable processes though which is wrong. the 1st process plug should just be moved between sockets.
-rw-r--r--lisp/xwidget-test.el38
-rw-r--r--src/xwidget.c17
2 files changed, 29 insertions, 26 deletions
diff --git a/lisp/xwidget-test.el b/lisp/xwidget-test.el
index 301fa1af984..b9c80d081a6 100644
--- a/lisp/xwidget-test.el
+++ b/lisp/xwidget-test.el
@@ -24,18 +24,27 @@
24 24
25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
27;; demo functions 27;; demo/test functions
28(require 'xwidget) 28(require 'xwidget)
29 29
30(defun xwidget-demo-minimal () 30(defmacro xwidget-demo (name &rest body)
31 (interactive) 31 `(defun ,(intern (concat "xwidget-demo-" name)) ()
32 (insert "xwidgetdemo<<< a button. another button\n") 32 (interactive)
33 (xwidget-insert (point-min) 2 "button" 40 50 1) 33 (switch-to-buffer ,(format "*xwidget-demo-%s*" name))
34 (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic) 34 (text-mode);;otherwise no local keymap
35) 35 (insert "Some random text for xwidgets to be inserted in for demo purposes.\n")
36(defun xwidget-demo-basic () 36 ,@body))
37 (interactive) 37
38 (insert "xwidgetdemo<<< a button. another button\n") 38(xwidget-demo "a-button"
39 (xwidget-insert (point-min) 1 "button" 40 50 1)
40 (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic))
41
42(xwidget-demo "a-socket"
43 (xwidget-insert (point-min) 3 "socket" 500 500 5)
44 (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic))
45
46
47(xwidget-demo "basic"
39 (xwidget-insert (point-min) 1 "button" 40 50 1) 48 (xwidget-insert (point-min) 1 "button" 40 50 1)
40 (xwidget-insert 15 2 "toggle" 60 30 2) 49 (xwidget-insert 15 2 "toggle" 60 30 2)
41 (xwidget-insert 30 3 "emacs" 400 200 3) 50 (xwidget-insert 30 3 "emacs" 400 200 3)
@@ -45,13 +54,6 @@
45) 54)
46 55
47 56
48(defun xwidget-demo-single ()
49 (interactive)
50 (insert "xwidgetdemo<<< a button. another button\n")
51 (xwidget-insert (point-min) 1 "1" 200 300 1)
52 (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)
53)
54
55;it doesnt seem gtk_socket_steal works very well. its deprecated. 57;it doesnt seem gtk_socket_steal works very well. its deprecated.
56; xwininfo -int 58; xwininfo -int
57; then (xwidget-embed-steal 3 <winid>) 59; then (xwidget-embed-steal 3 <winid>)
@@ -82,7 +84,7 @@
82 (cond ( (eq xwidget-event-type 'xembed-ready) 84 (cond ( (eq xwidget-event-type 'xembed-ready)
83 (let* 85 (let*
84 ((xembed-id (nth 3 last-input-event))) 86 ((xembed-id (nth 3 last-input-event)))
85 (message "xembed ready %S" xembed-id) 87 (message "xembed ready event: %S xw-id:%s" xembed-id xwidget-id)
86 ;;will start emacs/uzbl in a xembed socket when its ready 88 ;;will start emacs/uzbl in a xembed socket when its ready
87 (cond 89 (cond
88 ((eq 3 xwidget-id) 90 ((eq 3 xwidget-id)
diff --git a/src/xwidget.c b/src/xwidget.c
index 389e6a655ff..5ebecd63937 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -223,8 +223,8 @@ xwidget_init_view (
223 xv->widget = gtk_socket_new (); 223 xv->widget = gtk_socket_new ();
224 //gtk_widget_set_app_paintable (xw->widget, TRUE); //workaround for composited sockets 224 //gtk_widget_set_app_paintable (xw->widget, TRUE); //workaround for composited sockets
225 225
226 gdk_color_parse("blue",&color); //the blue color never seems to show up. something else draws a grey bg 226 //gdk_color_parse("blue",&color); //the blue color never seems to show up. something else draws a grey bg
227 gtk_widget_modify_bg(xv->widget, GTK_STATE_NORMAL, &color); 227 //gtk_widget_modify_bg(xv->widget, GTK_STATE_NORMAL, &color);
228 g_signal_connect_after(xv->widget, "plug-added", G_CALLBACK(xwidget_plug_added), "plug added"); 228 g_signal_connect_after(xv->widget, "plug-added", G_CALLBACK(xwidget_plug_added), "plug added");
229 break; 229 break;
230 case 4: 230 case 4:
@@ -277,7 +277,8 @@ xwidget_init_view (
277 switch (xww->type) 277 switch (xww->type)
278 { 278 {
279 case 3: 279 case 3:
280 printf ("socket id:%x %d\n", 280 printf ("xwid:%d socket id:%x %d\n",
281 xww->id,
281 gtk_socket_get_id (GTK_SOCKET (xv->widget)), 282 gtk_socket_get_id (GTK_SOCKET (xv->widget)),
282 gtk_socket_get_id (GTK_SOCKET (xv->widget))); 283 gtk_socket_get_id (GTK_SOCKET (xv->widget)));
283 send_xembed_ready_event (xww->id, 284 send_xembed_ready_event (xww->id,
@@ -732,7 +733,7 @@ struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *
732int 733int
733lookup_xwidget (Lisp_Object spec) 734lookup_xwidget (Lisp_Object spec)
734{ 735{
735 736 /*when a xwidget lisp spec is found initialize the C struct*/
736 int found = 0, found1 = 0, found2 = 0; 737 int found = 0, found1 = 0, found2 = 0;
737 Lisp_Object value; 738 Lisp_Object value;
738 int id; 739 int id;
@@ -742,6 +743,7 @@ lookup_xwidget (Lisp_Object spec)
742 id = INTEGERP (value) ? XFASTINT (value) : 0; //id 0 by default, but id must be unique so this is dumb 743 id = INTEGERP (value) ? XFASTINT (value) : 0; //id 0 by default, but id must be unique so this is dumb
743 744
744 xw = &xwidgets[id]; 745 xw = &xwidgets[id];
746 xw->id=id;
745 value = xwidget_spec_value (spec, QCtype, &found); 747 value = xwidget_spec_value (spec, QCtype, &found);
746 xw->type = INTEGERP (value) ? XFASTINT (value) : 1; //default to button 748 xw->type = INTEGERP (value) ? XFASTINT (value) : 1; //default to button
747 value = xwidget_spec_value (spec, Qtitle, &found2); 749 value = xwidget_spec_value (spec, Qtitle, &found2);
@@ -802,8 +804,6 @@ xwidget_touched (struct xwidget_view *xw)
802void 804void
803xwidget_end_redisplay (struct glyph_matrix *matrix) 805xwidget_end_redisplay (struct glyph_matrix *matrix)
804{ 806{
805 //return; //until I convert this to MVC
806
807 807
808 int i; 808 int i;
809 struct xwidget *xw; 809 struct xwidget *xw;
@@ -863,8 +863,9 @@ xwidget_end_redisplay (struct glyph_matrix *matrix)
863 for (i = 0; i < MAX_XWIDGETS; i++) 863 for (i = 0; i < MAX_XWIDGETS; i++)
864 { 864 {
865 struct xwidget_view* xv = &xwidget_views[i]; 865 struct xwidget_view* xv = &xwidget_views[i];
866 866
867 if (xv->initialized && ( xv->w == (XWINDOW(FRAME_SELECTED_WINDOW (SELECTED_FRAME()))))) 867 //"touched" is only meaningful for the "live" window, so disregard other views
868 if (xv->initialized && ( xv->w == (XWINDOW(FRAME_SELECTED_WINDOW (SELECTED_FRAME())))))
868 { 869 {
869 if (xwidget_touched(xv)) 870 if (xwidget_touched(xv))
870 xwidget_show_view (xv); 871 xwidget_show_view (xv);