diff options
| author | Joakim Verona | 2011-07-03 02:01:04 +0200 |
|---|---|---|
| committer | Joakim Verona | 2011-07-03 02:01:04 +0200 |
| commit | 83d3c036b0f9bf5aea02b7b572d645f582ff7936 (patch) | |
| tree | 6a086560e5394f487b9bfff1a8bd2af822a3a519 /src | |
| parent | 6e5d831c49a0c9e113d15ecf633553e92a573bc5 (diff) | |
| download | emacs-83d3c036b0f9bf5aea02b7b572d645f582ff7936.tar.gz emacs-83d3c036b0f9bf5aea02b7b572d645f582ff7936.zip | |
damage event now actually caught and used for webkit-osr.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xwidget.c | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/src/xwidget.c b/src/xwidget.c index 3b2d1227879..ac35f0d61af 100644 --- a/src/xwidget.c +++ b/src/xwidget.c | |||
| @@ -373,6 +373,7 @@ gboolean webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *ev | |||
| 373 | struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); | 373 | struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); |
| 374 | struct xwidget_view* xv; | 374 | struct xwidget_view* xv; |
| 375 | //webkit_osr_redraw_child(xw, widget); | 375 | //webkit_osr_redraw_child(xw, widget); |
| 376 | printf ("damage\n"); | ||
| 376 | for (int i = 0; i < MAX_XWIDGETS; i++)//todo mvc refactor | 377 | for (int i = 0; i < MAX_XWIDGETS; i++)//todo mvc refactor |
| 377 | { | 378 | { |
| 378 | xv = &xwidget_views[i]; | 379 | xv = &xwidget_views[i]; |
| @@ -381,7 +382,7 @@ gboolean webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *ev | |||
| 381 | } | 382 | } |
| 382 | } | 383 | } |
| 383 | 384 | ||
| 384 | return TRUE; | 385 | return FALSE; |
| 385 | } | 386 | } |
| 386 | 387 | ||
| 387 | 388 | ||
| @@ -404,7 +405,7 @@ xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) | |||
| 404 | //(emacs:7109): GLib-GObject-WARNING **: invalid cast from `GdkOffscreenWindow' to `GdkDrawableImplX11' | 405 | //(emacs:7109): GLib-GObject-WARNING **: invalid cast from `GdkOffscreenWindow' to `GdkDrawableImplX11' |
| 405 | // seems to happen in webkit actually. see README | 406 | // seems to happen in webkit actually. see README |
| 406 | 407 | ||
| 407 | if(1){ //redraw debug hack. | 408 | if(0){ //redraw debug hack. helped a lot in fact. use the with alpha painter below also |
| 408 | cairo_set_source_rgb(cr, osr_dbg_color, 1.0, 0.2); | 409 | cairo_set_source_rgb(cr, osr_dbg_color, 1.0, 0.2); |
| 409 | cairo_rectangle(cr, 0,0, xw->width, xw->height); | 410 | cairo_rectangle(cr, 0,0, xw->width, xw->height); |
| 410 | cairo_fill(cr); | 411 | cairo_fill(cr); |
| @@ -414,12 +415,12 @@ xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) | |||
| 414 | 415 | ||
| 415 | } | 416 | } |
| 416 | 417 | ||
| 417 | gtk_widget_draw (xw->widget_osr, cr); | 418 | gtk_widget_draw (xw->widget_osr, cr); |
| 418 | 419 | ||
| 419 | //cairo_set_source_surface (cr, src_pixmap, 0,0); | 420 | //cairo_set_source_surface (cr, src_pixmap, 0,0); |
| 420 | cairo_set_operator (cr, CAIRO_OPERATOR_OVER); | 421 | //cairo_set_operator (cr, CAIRO_OPERATOR_OVER); |
| 421 | 422 | ||
| 422 | cairo_paint_with_alpha (cr, 0.7); | 423 | //cairo_paint_with_alpha (cr, 1.0); |
| 423 | //cairo_paint(cr); | 424 | //cairo_paint(cr); |
| 424 | 425 | ||
| 425 | 426 | ||
| @@ -722,7 +723,7 @@ x_draw_xwidget_glyph_string (struct glyph_string *s) | |||
| 722 | } | 723 | } |
| 723 | } | 724 | } |
| 724 | 725 | ||
| 725 | #ifdef HAVE_WEBKIT | 726 | #ifdef HAVE_WEBKIT_OSR |
| 726 | DEFUN ("xwidget-webkit-goto-uri", Fxwidget_webkit_goto_uri, Sxwidget_webkit_goto_uri, 2, 2, 0, | 727 | DEFUN ("xwidget-webkit-goto-uri", Fxwidget_webkit_goto_uri, Sxwidget_webkit_goto_uri, 2, 2, 0, |
| 727 | doc: /* webkit goto uri.*/ | 728 | doc: /* webkit goto uri.*/ |
| 728 | ) | 729 | ) |
| @@ -731,8 +732,18 @@ DEFUN ("xwidget-webkit-goto-uri", Fxwidget_webkit_goto_uri, Sxwidget_webkit_got | |||
| 731 | /* now we have the same issue as always except worse. webkit resists an MVC approach! | 732 | /* now we have the same issue as always except worse. webkit resists an MVC approach! |
| 732 | for now, the 1st webkit view will be manipulated only | 733 | for now, the 1st webkit view will be manipulated only |
| 733 | */ | 734 | */ |
| 734 | 735 | ||
| 735 | //webkit_web_view_load_uri(xv->widget, "http://www.fsf.org"); | 736 | //TODO refactor this crap to something sane |
| 737 | struct xwidget *xw; | ||
| 738 | int xid; | ||
| 739 | |||
| 740 | CHECK_NUMBER (xwidget_id); | ||
| 741 | xid = XFASTINT (xwidget_id); | ||
| 742 | xw = &xwidgets[xid]; | ||
| 743 | |||
| 744 | //TODO check xw actually is of the correct type before trying stuff with it | ||
| 745 | |||
| 746 | webkit_web_view_load_uri(xw->widget_osr, SDATA(uri)); | ||
| 736 | } | 747 | } |
| 737 | #endif | 748 | #endif |
| 738 | 749 | ||
| @@ -951,7 +962,8 @@ syms_of_xwidget (void) | |||
| 951 | defsubr (&Sxwidget_info); | 962 | defsubr (&Sxwidget_info); |
| 952 | defsubr (&Sxwidget_resize_internal); | 963 | defsubr (&Sxwidget_resize_internal); |
| 953 | defsubr (&Sxwidget_embed_steal_window); | 964 | defsubr (&Sxwidget_embed_steal_window); |
| 954 | 965 | defsubr (&Sxwidget_webkit_goto_uri); | |
| 966 | |||
| 955 | DEFSYM (Qxwidget ,"xwidget"); | 967 | DEFSYM (Qxwidget ,"xwidget"); |
| 956 | 968 | ||
| 957 | DEFSYM (Qxwidget_id ,":xwidget-id"); | 969 | DEFSYM (Qxwidget_id ,":xwidget-id"); |
| @@ -1116,9 +1128,9 @@ lookup_xwidget (Lisp_Object spec) | |||
| 1116 | //diy mvc. widget is rendered offscreen(or in an onscreen separate toplevel for testing), later blitted to the views | 1128 | //diy mvc. widget is rendered offscreen(or in an onscreen separate toplevel for testing), later blitted to the views |
| 1117 | if (EQ(xw->type, Qwebkit_osr) && !xw->widgetwindow_osr){ | 1129 | if (EQ(xw->type, Qwebkit_osr) && !xw->widgetwindow_osr){ |
| 1118 | BLOCK_INPUT; | 1130 | BLOCK_INPUT; |
| 1119 | xw->widgetwindow_osr = GTK_CONTAINER (gtk_window_new ( GTK_WINDOW_TOPLEVEL)); | 1131 | //xw->widgetwindow_osr = GTK_CONTAINER (gtk_window_new ( GTK_WINDOW_TOPLEVEL)); |
| 1120 | //xw->widgetwindow_osr = GTK_CONTAINER (gtk_dialog_new ()); | 1132 | //xw->widgetwindow_osr = GTK_CONTAINER (gtk_dialog_new ()); |
| 1121 | //xw->widgetwindow_osr = GTK_CONTAINER (gtk_offscreen_window_new ()); | 1133 | xw->widgetwindow_osr = GTK_CONTAINER (gtk_offscreen_window_new ()); |
| 1122 | gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); | 1134 | gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); |
| 1123 | //xw->widgetwindow_osr = SELECTED_FRAME()->gwfixed; | 1135 | //xw->widgetwindow_osr = SELECTED_FRAME()->gwfixed; |
| 1124 | xw->widget_osr = webkit_web_view_new(); | 1136 | xw->widget_osr = webkit_web_view_new(); |
| @@ -1138,10 +1150,8 @@ lookup_xwidget (Lisp_Object spec) | |||
| 1138 | g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw)); //the xwidget | 1150 | g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw)); //the xwidget |
| 1139 | g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); //the xwidget | 1151 | g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); //the xwidget |
| 1140 | 1152 | ||
| 1141 | g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage_event", | 1153 | g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage-event", G_CALLBACK (webkit_osr_damage_event_callback), NULL); |
| 1142 | G_CALLBACK (webkit_osr_damage_event_callback), NULL); | 1154 | //g_signal_connect (G_OBJECT ( xw->widget_osr), "draw", G_CALLBACK (webkit_osr_damage_event_callback), NULL); |
| 1143 | |||
| 1144 | |||
| 1145 | 1155 | ||
| 1146 | webkit_web_view_load_uri(WEBKIT_WEB_VIEW(xw->widget_osr), "http://www.fsf.org"); | 1156 | webkit_web_view_load_uri(WEBKIT_WEB_VIEW(xw->widget_osr), "http://www.fsf.org"); |
| 1147 | UNBLOCK_INPUT; | 1157 | UNBLOCK_INPUT; |