aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Verona2011-07-16 01:29:35 +0200
committerJoakim Verona2011-07-16 01:29:35 +0200
commitb9cc0253ffe73b2c5c2cf4dddd65786a2d03d8c2 (patch)
treefe46c5982812a79e39371976d7592e44af464750
parent4726dd742c03f9aad16321ccc6c76581c2f5c94f (diff)
downloademacs-b9cc0253ffe73b2c5c2cf4dddd65786a2d03d8c2.tar.gz
emacs-b9cc0253ffe73b2c5c2cf4dddd65786a2d03d8c2.zip
better resize that supports webkit-osr. also size-requisition that returns desired size rather than allocated size(webkit-osr only atm)
-rw-r--r--lisp/xwidget.el14
-rw-r--r--src/xwidget.c47
2 files changed, 36 insertions, 25 deletions
diff --git a/lisp/xwidget.el b/lisp/xwidget.el
index 9c9f9c49b00..4c94b7e291c 100644
--- a/lisp/xwidget.el
+++ b/lisp/xwidget.el
@@ -16,20 +16,6 @@ see xwidget.c for types suitable for TYPE.
16 id)) 16 id))
17 17
18 18
19(defun xwidget-resize-at (pos width height)
20 "Resize xwidget at postion POS to WIDTH and HEIGHT."
21 (let*
22 ((xwidget-prop (cdr (get-text-property pos 'display)))
23 (id (plist-get xwidget-prop ':xwidget-id)))
24 (setq xwidget-prop (plist-put xwidget-prop ':width width))
25 (setq xwidget-prop (plist-put xwidget-prop ':height height))
26
27 (put-text-property pos (+ 1 pos) 'display (cons 'xwidget xwidget-prop))
28 (message "prop %s" xwidget-prop)
29 (message "id %d w %d h %d" id width height)
30 (xwidget-resize-internal id width height)
31 ))
32
33 19
34(defun xwidget-socket-handler () 20(defun xwidget-socket-handler ()
35 "creates plug for socket. TODO" 21 "creates plug for socket. TODO"
diff --git a/src/xwidget.c b/src/xwidget.c
index a455b8cc887..2ea88a22279 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -126,7 +126,7 @@ Lisp_Object Qtitle;
126Lisp_Object Qxwidget_set_keyboard_grab; 126Lisp_Object Qxwidget_set_keyboard_grab;
127Lisp_Object Qxwidget_embed_steal_window; 127Lisp_Object Qxwidget_embed_steal_window;
128Lisp_Object Qxwidget_info; 128Lisp_Object Qxwidget_info;
129Lisp_Object Qxwidget_resize_internal; 129Lisp_Object Qxwidget_resize;
130Lisp_Object Qxwidget_send_keyboard_event; 130Lisp_Object Qxwidget_send_keyboard_event;
131 131
132Lisp_Object Qbutton, Qtoggle, Qslider, Qsocket, Qcairo, 132Lisp_Object Qbutton, Qtoggle, Qslider, Qsocket, Qcairo,
@@ -164,6 +164,8 @@ DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 7, 0,
164 xw->width = XFASTINT(width); 164 xw->width = XFASTINT(width);
165 XSETPSEUDOVECTOR (val, xw, PVEC_OTHER); //?? dunno why i need this 165 XSETPSEUDOVECTOR (val, xw, PVEC_OTHER); //?? dunno why i need this
166 Vxwidget_alist = Fcons ( val, Vxwidget_alist); 166 Vxwidget_alist = Fcons ( val, Vxwidget_alist);
167 xw->widgetwindow_osr = NULL;
168 xw->widget_osr = NULL;
167 169
168 170
169 171
@@ -401,13 +403,17 @@ xwidget_init_view (
401 int x, int y) 403 int x, int y)
402{ 404{
403 //TODO temp code replace with lisp list 405 //TODO temp code replace with lisp list
404 if(xwidget_view_index < MAX_XWIDGETS) 406 struct xwidget_view *xv;
405 xwidget_view_index++;
406 else
407 xwidget_view_index=0;
408
409 struct xwidget_view *xv = &xwidget_views[xwidget_view_index];
410 GdkColor color; 407 GdkColor color;
408
409 do{
410 if(xwidget_view_index < MAX_XWIDGETS)
411 xwidget_view_index++;
412 else
413 xwidget_view_index=0;
414
415 xv = &xwidget_views[xwidget_view_index];
416 }while( xv->initialized == 1); //TODO yeah this can infloop if there are MAX_WIDGETS on-screen
411 417
412 xv->initialized = 1; 418 xv->initialized = 1;
413 xv->w = s->w; 419 xv->w = s->w;
@@ -692,8 +698,8 @@ DEFUN ("xwidget-webkit-get-title", Fxwidget_webkit_get_title, Sxwidget_webkit_g
692 698
693 699
694 700
695DEFUN ("xwidget-resize-internal", Fxwidget_resize_internal, Sxwidget_resize_internal, 3, 3, 0, doc: 701DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc:
696 /* resize xwidgets internal use only, because the lisp specs need to be updated also*/) 702 /* resize xwidgets*/)
697 (Lisp_Object xwidget, Lisp_Object new_width, Lisp_Object new_height) 703 (Lisp_Object xwidget, Lisp_Object new_width, Lisp_Object new_height)
698{ 704{
699 struct xwidget* xw = XXWIDGET(xwidget); 705 struct xwidget* xw = XXWIDGET(xwidget);
@@ -709,6 +715,12 @@ DEFUN ("xwidget-resize-internal", Fxwidget_resize_internal, Sxwidget_resize_inte
709 printf("resize xwidget %d (%d,%d)->(%d,%d)",xw, xw->width,xw->height,w,h); 715 printf("resize xwidget %d (%d,%d)->(%d,%d)",xw, xw->width,xw->height,w,h);
710 xw->width=w; 716 xw->width=w;
711 xw->height=h; 717 xw->height=h;
718 //if theres a osr resize it 1st
719 if(xw->widget_osr){
720 gtk_layout_set_size (GTK_LAYOUT (xw->widgetwindow_osr), xw->width, xw->height);
721 gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height);
722 }
723
712 for (int i = 0; i < MAX_XWIDGETS; i++) //TODO MVC refactor lazy linear search 724 for (int i = 0; i < MAX_XWIDGETS; i++) //TODO MVC refactor lazy linear search
713 { 725 {
714 xv = &xwidget_views[i]; 726 xv = &xwidget_views[i];
@@ -721,8 +733,19 @@ DEFUN ("xwidget-resize-internal", Fxwidget_resize_internal, Sxwidget_resize_inte
721 return Qnil; 733 return Qnil;
722} 734}
723 735
736DEFUN ("xwidget-size-request", Fxwidget_size_request, Sxwidget_size_request, 1, 1, 0, doc:
737 /* desired size (TODO crashes if arg not osr widget)*/)
738 (Lisp_Object xwidget)
739{
740 GtkRequisition requisition;
741 Lisp_Object rv;
742 gtk_widget_size_request(XXWIDGET(xwidget)->widget_osr, &requisition);
743 rv = Qnil;
744 rv = Fcons (make_number(requisition.height), rv);
745 rv = Fcons (make_number(requisition.width), rv);
746 return rv;
724 747
725 748}
726 749
727DEFUN("xwidget-info", Fxwidget_info , Sxwidget_info, 1,1,0, doc: /* get xwidget props */) 750DEFUN("xwidget-info", Fxwidget_info , Sxwidget_info, 1,1,0, doc: /* get xwidget props */)
728 (Lisp_Object xwidget) 751 (Lisp_Object xwidget)
@@ -769,12 +792,13 @@ syms_of_xwidget (void)
769 792
770 defsubr (&Sxwidget_info); 793 defsubr (&Sxwidget_info);
771 defsubr (&Sxwidget_view_info); 794 defsubr (&Sxwidget_view_info);
772 defsubr (&Sxwidget_resize_internal); 795 defsubr (&Sxwidget_resize);
773 796
774 797
775 defsubr (&Sxwidget_webkit_goto_uri); 798 defsubr (&Sxwidget_webkit_goto_uri);
776 defsubr (&Sxwidget_webkit_execute_script); 799 defsubr (&Sxwidget_webkit_execute_script);
777 defsubr (&Sxwidget_webkit_get_title); 800 defsubr (&Sxwidget_webkit_get_title);
801 defsubr (&Sxwidget_size_request );
778 802
779 DEFSYM (Qxwidget ,"xwidget"); 803 DEFSYM (Qxwidget ,"xwidget");
780 804
@@ -874,6 +898,7 @@ void xwidget_view_delete_all_in_window( struct window *w )
874 xv = &xwidget_views[i]; 898 xv = &xwidget_views[i];
875 if(xv->w == w){ 899 if(xv->w == w){
876 gtk_widget_destroy(GTK_WIDGET(xv->widgetwindow)); 900 gtk_widget_destroy(GTK_WIDGET(xv->widgetwindow));
901 xv->initialized = 0;
877 } 902 }
878 } 903 }
879} 904}