aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Verona2011-07-03 02:01:04 +0200
committerJoakim Verona2011-07-03 02:01:04 +0200
commit83d3c036b0f9bf5aea02b7b572d645f582ff7936 (patch)
tree6a086560e5394f487b9bfff1a8bd2af822a3a519
parent6e5d831c49a0c9e113d15ecf633553e92a573bc5 (diff)
downloademacs-83d3c036b0f9bf5aea02b7b572d645f582ff7936.tar.gz
emacs-83d3c036b0f9bf5aea02b7b572d645f582ff7936.zip
damage event now actually caught and used for webkit-osr.
-rw-r--r--src/xwidget.c40
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
726DEFUN ("xwidget-webkit-goto-uri", Fxwidget_webkit_goto_uri, Sxwidget_webkit_goto_uri, 2, 2, 0, 727DEFUN ("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;