diff options
| author | Joakim Verona | 2011-07-04 01:44:10 +0200 |
|---|---|---|
| committer | Joakim Verona | 2011-07-04 01:44:10 +0200 |
| commit | d319e369a705c8a0901dbd9c6ab183ed61cf1ab7 (patch) | |
| tree | 2353af70e9aa3bd95b8fc44e20c3924e0b16c608 /src | |
| parent | f929f1a90836282bfe85c81fcf8a757bf0b54b50 (diff) | |
| download | emacs-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.c | 115 |
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; | |||
| 131 | extern Lisp_Object QCwidth, QCheight; | 131 | extern Lisp_Object QCwidth, QCheight; |
| 132 | 132 | ||
| 133 | struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); | 133 | struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); |
| 134 | Lisp_Object xwidget_spec_value ( Lisp_Object spec, Lisp_Object key, int *found); | ||
| 134 | 135 | ||
| 135 | int | 136 | int |
| 136 | xwidget_hidden(struct xwidget_view *xv) | 137 | xwidget_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 | |||
| 391 | xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) | 394 | xwidget_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 | ||
| 751 | DEFUN ("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 | ||
| 755 | struct 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)); | 769 | DEFUN ("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 | ||
| 773 | DEFUN ("xwidget-webkit-execute-script", Fxwidget_webkit_execute_script, Sxwidget_webkit_execute_script, 2, 2, 0, | 778 | DEFUN ("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 | 787 | DEFUN ("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 | |||
| 855 | DEFUN("xwidget-info", Fxwidget_info , Sxwidget_info, 1,1,0, doc: /* get xwidget props */) | 855 | DEFUN("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 */ |
| 1076 | Lisp_Object | 1070 | Lisp_Object |
| 1077 | xwidget_spec_value ( | 1071 | xwidget_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); |