aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoakim Verona2011-07-16 01:29:35 +0200
committerJoakim Verona2011-07-16 01:29:35 +0200
commitb9cc0253ffe73b2c5c2cf4dddd65786a2d03d8c2 (patch)
treefe46c5982812a79e39371976d7592e44af464750 /src
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)
Diffstat (limited to 'src')
-rw-r--r--src/xwidget.c47
1 files changed, 36 insertions, 11 deletions
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}