diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/xwidget.c | 44 |
1 files changed, 35 insertions, 9 deletions
diff --git a/src/xwidget.c b/src/xwidget.c index 627bd70e150..ad10567f91b 100644 --- a/src/xwidget.c +++ b/src/xwidget.c | |||
| @@ -252,15 +252,14 @@ void xwidget_slider_changed (GtkRange *range, | |||
| 252 | 252 | ||
| 253 | } | 253 | } |
| 254 | 254 | ||
| 255 | /* when the on-screen webkit peer view gets exposed this signal is called. | 255 | void webkit_osr_redraw_child ( struct xwidget* xw, GtkWidget *widget) |
| 256 | it copies the bitmap from the off-screen webkit instance */ | 256 | { |
| 257 | webkit_osr_expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) | 257 | |
| 258 | { | 258 | |
| 259 | struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); | ||
| 260 | cairo_t *cr; | 259 | cairo_t *cr; |
| 261 | GdkPixmap *src_pixmap; | 260 | GdkPixmap *src_pixmap; |
| 262 | src_pixmap = xw->widget_osr->window; | 261 | src_pixmap = xw->widget_osr->window; |
| 263 | printf("xwidget_composite_draw_widgetwindow xw.id:%d xw.type:%d window:%d\n", xw->id,xw->type, gtk_widget_get_window (widget)); | 262 | printf("webkit_osr_redraw_child xw.id:%d xw.type:%d window:%d\n", xw->id,xw->type, gtk_widget_get_window (widget)); |
| 264 | 263 | ||
| 265 | cr = gdk_cairo_create (gtk_widget_get_window (widget)); | 264 | cr = gdk_cairo_create (gtk_widget_get_window (widget)); |
| 266 | 265 | ||
| @@ -280,7 +279,23 @@ webkit_osr_expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpoi | |||
| 280 | //cairo_paint_with_alpha (cr, 0.9); | 279 | //cairo_paint_with_alpha (cr, 0.9); |
| 281 | cairo_paint(cr); | 280 | cairo_paint(cr); |
| 282 | cairo_destroy (cr); | 281 | cairo_destroy (cr); |
| 283 | 282 | } | |
| 283 | |||
| 284 | /* when the on-screen webkit peer view gets exposed this signal is called. | ||
| 285 | it copies the bitmap from the off-screen webkit instance */ | ||
| 286 | gboolean webkit_osr_expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) | ||
| 287 | { | ||
| 288 | struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); | ||
| 289 | webkit_osr_redraw_child(xw, widget); | ||
| 290 | return FALSE; | ||
| 291 | } | ||
| 292 | |||
| 293 | /* when the off-screen webkit master view changes this signal is called. | ||
| 294 | it copies the bitmap from the off-screen webkit instance */ | ||
| 295 | gboolean webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) | ||
| 296 | { | ||
| 297 | struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); | ||
| 298 | webkit_osr_redraw_child(xw, widget); | ||
| 284 | return FALSE; | 299 | return FALSE; |
| 285 | } | 300 | } |
| 286 | 301 | ||
| @@ -532,8 +547,8 @@ x_draw_xwidget_glyph_string (struct glyph_string *s) | |||
| 532 | //a live xwidget paints itself. when using composition, that | 547 | //a live xwidget paints itself. when using composition, that |
| 533 | //happens through the expose handler for the xwidget | 548 | //happens through the expose handler for the xwidget |
| 534 | //if emacs wants to repaint the area where the widget lives, queue a redraw | 549 | //if emacs wants to repaint the area where the widget lives, queue a redraw |
| 535 | //if (!xwidget_hidden(xv)) | 550 | if (!xwidget_hidden(xv)) |
| 536 | //gtk_widget_queue_draw (xv->widget); | 551 | gtk_widget_queue_draw (xv->widget); |
| 537 | } | 552 | } |
| 538 | else | 553 | else |
| 539 | { | 554 | { |
| @@ -927,6 +942,17 @@ lookup_xwidget (Lisp_Object spec) | |||
| 927 | xw->widget_osr = webkit_web_view_new(); | 942 | xw->widget_osr = webkit_web_view_new(); |
| 928 | gtk_container_add (xw->widgetwindow_osr, xw->widget_osr); | 943 | gtk_container_add (xw->widgetwindow_osr, xw->widget_osr); |
| 929 | gtk_widget_show_all (GTK_WIDGET (xw->widgetwindow_osr)); | 944 | gtk_widget_show_all (GTK_WIDGET (xw->widgetwindow_osr)); |
| 945 | |||
| 946 | //store some xwidget data in the gtk widgets | ||
| 947 | g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw)); //the xwidget | ||
| 948 | g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); //the xwidget | ||
| 949 | |||
| 950 | |||
| 951 | g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage_event", | ||
| 952 | G_CALLBACK (webkit_osr_damage_event_callback), NULL); | ||
| 953 | |||
| 954 | |||
| 955 | |||
| 930 | webkit_web_view_load_uri(xw->widget_osr, "http://www.fsf.org"); | 956 | webkit_web_view_load_uri(xw->widget_osr, "http://www.fsf.org"); |
| 931 | 957 | ||
| 932 | } | 958 | } |