aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoakim Verona2011-06-30 09:52:04 +0200
committerJoakim Verona2011-06-30 09:52:04 +0200
commite5e23bc6296e31933d838f1f7f4b3cc20dc7d34b (patch)
treecb5db8c1d46e7d3fed02eb1c23174209c700a37f /src
parent0349bc31b8abcd5c1a49c3f800e052b8581ef1d0 (diff)
downloademacs-e5e23bc6296e31933d838f1f7f4b3cc20dc7d34b.tar.gz
emacs-e5e23bc6296e31933d838f1f7f4b3cc20dc7d34b.zip
damage event handler + queue redraw when emacs moves widgets
Diffstat (limited to 'src')
-rw-r--r--src/xwidget.c44
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. 255void webkit_osr_redraw_child ( struct xwidget* xw, GtkWidget *widget)
256 it copies the bitmap from the off-screen webkit instance */ 256{
257webkit_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 */
286gboolean 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 */
295gboolean 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 }