aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoakim Verona2011-07-04 01:44:10 +0200
committerJoakim Verona2011-07-04 01:44:10 +0200
commitd319e369a705c8a0901dbd9c6ab183ed61cf1ab7 (patch)
tree2353af70e9aa3bd95b8fc44e20c3924e0b16c608 /src
parentf929f1a90836282bfe85c81fcf8a757bf0b54b50 (diff)
downloademacs-d319e369a705c8a0901dbd9c6ab183ed61cf1ab7.tar.gz
emacs-d319e369a705c8a0901dbd9c6ab183ed61cf1ab7.zip
cleanups. webkit title function which is unexpectedly useful as a workaround for lack of webkit JS exec ret val.
Diffstat (limited to 'src')
-rw-r--r--src/xwidget.c115
1 files changed, 54 insertions, 61 deletions
diff --git a/src/xwidget.c b/src/xwidget.c
index c4e4f2c5ba2..b7aa6c9c9a4 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -131,6 +131,7 @@ extern Lisp_Object QCtype;
131extern Lisp_Object QCwidth, QCheight; 131extern Lisp_Object QCwidth, QCheight;
132 132
133struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); 133struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w);
134Lisp_Object xwidget_spec_value ( Lisp_Object spec, Lisp_Object key, int *found);
134 135
135int 136int
136xwidget_hidden(struct xwidget_view *xv) 137xwidget_hidden(struct xwidget_view *xv)
@@ -243,11 +244,13 @@ void xwidget_slider_changed (GtkRange *range,
243 // - the type of the controllers value (double, boolean etc) 244 // - the type of the controllers value (double, boolean etc)
244 // - the getter and setter (but they can be func pointers) 245 // - the getter and setter (but they can be func pointers)
245 // a behemoth macro is always an option. 246 // a behemoth macro is always an option.
246 double v; 247 double v=gtk_range_get_value(range);
247 printf("slider changed val:%f\n", v=gtk_range_get_value(range));
248
249 struct xwidget_view* xvp = g_object_get_data (G_OBJECT (range), XG_XWIDGET_VIEW); 248 struct xwidget_view* xvp = g_object_get_data (G_OBJECT (range), XG_XWIDGET_VIEW);
250 struct xwidget_view* xv; 249 struct xwidget_view* xv;
250
251 printf("slider changed val:%f\n", v);
252
253
251 //block sibling views signal handlers 254 //block sibling views signal handlers
252 for (int i = 0; i < MAX_XWIDGETS; i++) 255 for (int i = 0; i < MAX_XWIDGETS; i++)
253 { 256 {
@@ -261,7 +264,7 @@ void xwidget_slider_changed (GtkRange *range,
261 { 264 {
262 xv = &xwidget_views[i]; 265 xv = &xwidget_views[i];
263 if(xvp->model == xv->model){ 266 if(xvp->model == xv->model){
264 gtk_range_set_value(xv->widget, v); 267 gtk_range_set_value(GTK_RANGE(xv->widget), v);
265 g_signal_handler_unblock( xv->widget,xv->handler_id); 268 g_signal_handler_unblock( xv->widget,xv->handler_id);
266 } 269 }
267 } 270 }
@@ -391,7 +394,7 @@ gboolean
391xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) 394xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data)
392{ 395{
393 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); 396 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET);
394 struct xwidget_view* xv = (struct xwidget_viev*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET_VIEW); 397 struct xwidget_view* xv = (struct xwidget_view*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET_VIEW);
395 398
396 printf("xwidget_osr_draw_callback gtk3 xw.id:%d xw.type:%d window:%d vis:%d\n", 399 printf("xwidget_osr_draw_callback gtk3 xw.id:%d xw.type:%d window:%d vis:%d\n",
397 xw->id,xw->type, gtk_widget_get_window (widget), gtk_widget_get_visible (xw->widget_osr)); 400 xw->id,xw->type, gtk_widget_get_window (widget), gtk_widget_get_visible (xw->widget_osr));
@@ -435,11 +438,12 @@ xwidget_osr_button_callback ( GtkWidget *widget,
435{ 438{
436 gdouble x, y; 439 gdouble x, y;
437 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); 440 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET);
441 GdkEventButton* eventcopy = gdk_event_copy(event);
438 x = ((GdkEventButton*)event)->x; 442 x = ((GdkEventButton*)event)->x;
439 y = ((GdkEventButton*)event)->y; 443 y = ((GdkEventButton*)event)->y;
440 444
441 printf ("button callback %d %d\n",x,y); 445 printf ("button callback %d %d\n",x,y);
442 GdkEventButton* eventcopy = gdk_event_copy(event); 446
443 eventcopy->window = gtk_widget_get_window(xw->widget_osr); 447 eventcopy->window = gtk_widget_get_window(xw->widget_osr);
444 gtk_main_do_event(eventcopy); //TODO this will leak events. they should be deallocated later 448 gtk_main_do_event(eventcopy); //TODO this will leak events. they should be deallocated later
445} 449}
@@ -606,7 +610,7 @@ xwidget_init_view (
606 610
607 611
608 gtk_widget_set_size_request (GTK_WIDGET (xv->widget), xww->width, xww->height); 612 gtk_widget_set_size_request (GTK_WIDGET (xv->widget), xww->width, xww->height);
609 gtk_fixed_put (EMACS_FIXED (s->f->gwfixed), GTK_WIDGET (xv->widgetwindow), x, y); 613 gtk_fixed_put (GTK_FIXED (s->f->gwfixed), GTK_WIDGET (xv->widgetwindow), x, y);
610 xv->x = x; xv->y = y; 614 xv->x = x; xv->y = y;
611 gtk_widget_show_all (GTK_WIDGET (xv->widgetwindow)); 615 gtk_widget_show_all (GTK_WIDGET (xv->widgetwindow));
612 616
@@ -727,9 +731,9 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
727 731
728 //allocation debugging. the correct values cant be expected to show upp immediately, but eventually they should get to be ok 732 //allocation debugging. the correct values cant be expected to show upp immediately, but eventually they should get to be ok
729 // this is because we dont know when the container gets around to doing layout 733 // this is because we dont know when the container gets around to doing layout
730 GtkAllocation galloc; 734 //GtkAllocation galloc;
731 gtk_widget_get_allocation(GTK_WIDGET (xv->widgetwindow), &galloc); 735 //gtk_widget_get_allocation(GTK_WIDGET (xv->widgetwindow), &galloc);
732 printf("allocation %d %d , %d %d\n", galloc.x,galloc.y,galloc.width,galloc.height); 736 //printf("allocation %d %d , %d %d\n", galloc.x,galloc.y,galloc.width,galloc.height);
733 737
734 xv->clipx = clipx; xv->clipy = clipy; 738 xv->clipx = clipx; xv->clipy = clipy;
735 } 739 }
@@ -747,16 +751,9 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
747 } 751 }
748} 752}
749 753
750#ifdef HAVE_WEBKIT_OSR
751DEFUN ("xwidget-webkit-goto-uri", Fxwidget_webkit_goto_uri, Sxwidget_webkit_goto_uri, 2, 2, 0,
752 doc: /* webkit goto uri.*/
753 )
754 (Lisp_Object xwidget_id, Lisp_Object uri)
755{
756/* now we have the same issue as always except worse. webkit resists an MVC approach!
757 for now, the 1st webkit view will be manipulated only
758 */
759 754
755struct xwidget* xid2xw( Lisp_Object xwidget_id)
756{
760 //TODO refactor this crap to something sane 757 //TODO refactor this crap to something sane
761 struct xwidget *xw; 758 struct xwidget *xw;
762 int xid; 759 int xid;
@@ -764,10 +761,18 @@ DEFUN ("xwidget-webkit-goto-uri", Fxwidget_webkit_goto_uri, Sxwidget_webkit_got
764 CHECK_NUMBER (xwidget_id); 761 CHECK_NUMBER (xwidget_id);
765 xid = XFASTINT (xwidget_id); 762 xid = XFASTINT (xwidget_id);
766 xw = &xwidgets[xid]; 763 xw = &xwidgets[xid];
764 return xw;
765}
767 766
768 //TODO check xw actually is of the correct type before trying stuff with it 767
769 768#ifdef HAVE_WEBKIT_OSR
770 webkit_web_view_load_uri(xw->widget_osr, SDATA(uri)); 769DEFUN ("xwidget-webkit-goto-uri", Fxwidget_webkit_goto_uri, Sxwidget_webkit_goto_uri, 2, 2, 0,
770 doc: /* webkit goto uri.*/
771 )
772 (Lisp_Object xwidget_id, Lisp_Object uri)
773{
774 webkit_web_view_load_uri ( WEBKIT_WEB_VIEW(xid2xw(xwidget_id)->widget_osr), SDATA(uri));
775 return Qnil;
771} 776}
772 777
773DEFUN ("xwidget-webkit-execute-script", Fxwidget_webkit_execute_script, Sxwidget_webkit_execute_script, 2, 2, 0, 778DEFUN ("xwidget-webkit-execute-script", Fxwidget_webkit_execute_script, Sxwidget_webkit_execute_script, 2, 2, 0,
@@ -775,20 +780,20 @@ DEFUN ("xwidget-webkit-execute-script", Fxwidget_webkit_execute_script, Sxwidge
775 ) 780 )
776 (Lisp_Object xwidget_id, Lisp_Object script) 781 (Lisp_Object xwidget_id, Lisp_Object script)
777{ 782{
783 webkit_web_view_execute_script( WEBKIT_WEB_VIEW(xid2xw(xwidget_id)->widget_osr), SDATA(script));
784 return Qnil;
785}
778 786
779 //TODO refactor this crap to something sane 787DEFUN ("xwidget-webkit-get-title", Fxwidget_webkit_get_title, Sxwidget_webkit_get_title, 1, 1, 0,
780 struct xwidget *xw; 788 doc: /* webkit get title. can be used to work around exec method lacks return val*/
781 int xid; 789 )
790 (Lisp_Object xwidget_id)
791{
792 const gchar* str=webkit_web_view_get_title( WEBKIT_WEB_VIEW(xid2xw(xwidget_id)->widget_osr));
793 return make_string_from_bytes(str, strlen(str), strlen(str));
794}
782 795
783 CHECK_NUMBER (xwidget_id);
784 xid = XFASTINT (xwidget_id);
785 xw = &xwidgets[xid];
786 796
787 //TODO check xw actually is of the correct type before trying stuff with it
788
789 webkit_web_view_execute_script(xw->widget_osr, SDATA(script));
790 return Qnil;
791}
792 797
793#endif 798#endif
794 799
@@ -799,15 +804,12 @@ DEFUN ("xwidget-embed-steal-window", Fxwidget_embed_steal_window, Sxwidget_embed
799 ) 804 )
800 (Lisp_Object xwidget_id, Lisp_Object window_id) 805 (Lisp_Object xwidget_id, Lisp_Object window_id)
801{ 806{
802 struct xwidget *xw; 807 int iwindow_id;
803 int xid, iwindow_id; 808 struct xwidget* xw = xid2xw(xwidget_id);
804 809
805 CHECK_NUMBER (xwidget_id);
806 CHECK_NUMBER (window_id); 810 CHECK_NUMBER (window_id);
807 xid = XFASTINT (xwidget_id);
808 iwindow_id = XFASTINT (window_id); 811 iwindow_id = XFASTINT (window_id);
809 xw = &xwidgets[xid]; 812
810 printf (" gtk_socket_add_id: %d %d\n", xid, iwindow_id);
811 // gtk_socket_steal(GTK_SOCKET(xw->widget),iwindow_id); 813 // gtk_socket_steal(GTK_SOCKET(xw->widget),iwindow_id);
812 //try adding proper gtk plugs instead, i never once had "steal" work 814 //try adding proper gtk plugs instead, i never once had "steal" work
813 ///////// gtk_socket_add_id (GTK_SOCKET (xw->widget), iwindow_id); /////TODO MVC 815 ///////// gtk_socket_add_id (GTK_SOCKET (xw->widget), iwindow_id); /////TODO MVC
@@ -825,17 +827,15 @@ DEFUN ("xwidget-resize-internal", Fxwidget_resize_internal, Sxwidget_resize_inte
825{ 827{
826 struct xwidget *xw; 828 struct xwidget *xw;
827 struct xwidget_view *xv; 829 struct xwidget_view *xv;
828 int xid, w, h; 830 int w, h;
829 831
830 CHECK_NUMBER (xwidget_id);
831 CHECK_NUMBER (new_width); 832 CHECK_NUMBER (new_width);
832 CHECK_NUMBER (new_height); 833 CHECK_NUMBER (new_height);
833 xid = XFASTINT (xwidget_id);
834 w = XFASTINT (new_width); 834 w = XFASTINT (new_width);
835 h = XFASTINT (new_height); 835 h = XFASTINT (new_height);
836 xw = &xwidgets[xid]; 836 xw = xid2xw(xwidget_id);
837 837
838 printf("resize xwidget %d (%d,%d)->(%d,%d)",xid,xw->width,xw->height,w,h); 838 printf("resize xwidget %d (%d,%d)->(%d,%d)",xw->id,xw->width,xw->height,w,h);
839 xw->width=w; 839 xw->width=w;
840 xw->height=h; 840 xw->height=h;
841 for (int i = 0; i < MAX_XWIDGETS; i++) //TODO MVC refactor lazy linear search 841 for (int i = 0; i < MAX_XWIDGETS; i++) //TODO MVC refactor lazy linear search
@@ -855,7 +855,7 @@ DEFUN ("xwidget-resize-internal", Fxwidget_resize_internal, Sxwidget_resize_inte
855DEFUN("xwidget-info", Fxwidget_info , Sxwidget_info, 1,1,0, doc: /* get xwidget props */) 855DEFUN("xwidget-info", Fxwidget_info , Sxwidget_info, 1,1,0, doc: /* get xwidget props */)
856 (Lisp_Object xwidget_id) 856 (Lisp_Object xwidget_id)
857{ 857{
858 struct xwidget *xw = &xwidgets[XFASTINT (xwidget_id)]; 858 struct xwidget *xw = xid2xw(xwidget_id);
859 Lisp_Object info; 859 Lisp_Object info;
860 860
861 info = Fmake_vector (make_number (7), Qnil); 861 info = Fmake_vector (make_number (7), Qnil);
@@ -876,14 +876,12 @@ DEFUN ("xwidget-set-keyboard-grab", Fxwidget_set_keyboard_grab, Sxwidget_set_key
876 ) 876 )
877 (Lisp_Object xwidget_id, Lisp_Object kbd_grab) 877 (Lisp_Object xwidget_id, Lisp_Object kbd_grab)
878{ 878{
879 struct xwidget *xw; 879 struct xwidget *xw = xid2xw(xwidget_id);
880 int xid, kbd_flag; 880 int xid, kbd_flag;
881 881
882 CHECK_NUMBER (xwidget_id);
883 CHECK_NUMBER (kbd_grab); 882 CHECK_NUMBER (kbd_grab);
884 xid = XFASTINT (xwidget_id);
885 kbd_flag = XFASTINT (kbd_grab); 883 kbd_flag = XFASTINT (kbd_grab);
886 xw = &xwidgets[xid]; 884
887 885
888 886
889 printf ("kbd grab: %d %d\n", xid, kbd_flag); 887 printf ("kbd grab: %d %d\n", xid, kbd_flag);
@@ -965,15 +963,10 @@ DEFUN ("xwidget-send-keyboard-event", Fxwidget_send_keyboard_event, Sxwidget_sen
965 int keyval; 963 int keyval;
966 char *keystring = ""; 964 char *keystring = "";
967 FRAME_PTR f; 965 FRAME_PTR f;
968 struct xwidget *xw; 966 struct xwidget *xw = xid2xw(xwidget_id);
969 GdkWindow *window; 967 GdkWindow *window;
970 int xwid;
971 XID xid; 968 XID xid;
972 969
973 CHECK_NUMBER (xwidget_id);
974 xwid = XFASTINT (xwidget_id);
975 xw = &xwidgets[xwid];
976
977 /* TODO MVC 970 /* TODO MVC
978 f = (FRAME_PTR) g_object_get_data (G_OBJECT (xw->widget), XG_FRAME_DATA); 971 f = (FRAME_PTR) g_object_get_data (G_OBJECT (xw->widget), XG_FRAME_DATA);
979 972
@@ -1010,6 +1003,7 @@ syms_of_xwidget (void)
1010 1003
1011 defsubr (&Sxwidget_webkit_goto_uri); 1004 defsubr (&Sxwidget_webkit_goto_uri);
1012 defsubr (&Sxwidget_webkit_execute_script); 1005 defsubr (&Sxwidget_webkit_execute_script);
1006 defsubr (&Sxwidget_webkit_get_title);
1013 1007
1014 DEFSYM (Qxwidget ,"xwidget"); 1008 DEFSYM (Qxwidget ,"xwidget");
1015 1009
@@ -1074,9 +1068,8 @@ valid_xwidget_p (Lisp_Object object)
1074 1068
1075/* find a value associated with key in spec */ 1069/* find a value associated with key in spec */
1076Lisp_Object 1070Lisp_Object
1077xwidget_spec_value ( 1071xwidget_spec_value ( Lisp_Object spec, Lisp_Object key,
1078 Lisp_Object spec, Lisp_Object key, 1072 int *found)
1079 int *found)
1080{ 1073{
1081 Lisp_Object tail; 1074 Lisp_Object tail;
1082 1075
@@ -1163,7 +1156,7 @@ lookup_xwidget (Lisp_Object spec)
1163 value = xwidget_spec_value (spec, QCwidth, NULL); 1156 value = xwidget_spec_value (spec, QCwidth, NULL);
1164 xw->width = INTEGERP (value) ? XFASTINT (value) : 50; //ok 1157 xw->width = INTEGERP (value) ? XFASTINT (value) : 50; //ok
1165 1158
1166 value = xwidget_spec_value (spec, QCplist, Qnil); 1159 value = xwidget_spec_value (spec, QCplist, NULL);
1167 xw->plist = value; 1160 xw->plist = value;
1168 printf ("xwidget_id:%d type:%d found:%d %d %d title:%s (%d,%d)\n", id, 1161 printf ("xwidget_id:%d type:%d found:%d %d %d title:%s (%d,%d)\n", id,
1169 xw->type, found, found1, found2, xw->title, xw->height, xw->width); 1162 xw->type, found, found1, found2, xw->title, xw->height, xw->width);