aboutsummaryrefslogtreecommitdiffstats
path: root/src/xwidget.c
diff options
context:
space:
mode:
authorJoakim Verona2011-07-02 21:31:55 +0200
committerJoakim Verona2011-07-02 21:31:55 +0200
commit6e5d831c49a0c9e113d15ecf633553e92a573bc5 (patch)
tree56420e7dec4fee1e5ee5d69da90a135b8473b801 /src/xwidget.c
parentb075649f92f1543f61efed28adb25df666a1a03c (diff)
downloademacs-6e5d831c49a0c9e113d15ecf633553e92a573bc5.tar.gz
emacs-6e5d831c49a0c9e113d15ecf633553e92a573bc5.zip
fixed embarrasing non-singletoness of webkit-osr.
Diffstat (limited to 'src/xwidget.c')
-rw-r--r--src/xwidget.c38
1 files changed, 20 insertions, 18 deletions
diff --git a/src/xwidget.c b/src/xwidget.c
index 841e3ee2144..3b2d1227879 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -385,20 +385,15 @@ gboolean webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *ev
385 } 385 }
386 386
387 387
388//for gtk3 388//for gtk3 webkit_osr
389gboolean 389gboolean
390xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) 390xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data)
391{ 391{
392 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); 392 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET);
393 struct xwidget_view* xv = (struct xwidget_viev*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET_VIEW); 393 struct xwidget_view* xv = (struct xwidget_viev*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET_VIEW);
394 cairo_surface_t* src_pixmap;
395 //src_pixmap = gtk_offscreen_window_get_surface (xw->widgetwindow_osr);
396
397 394
398 printf("xwidget_osr_draw_callback gtk3 xw.id:%d xw.type:%d window:%d srcpix:%d vis:%d\n", 395 printf("xwidget_osr_draw_callback gtk3 xw.id:%d xw.type:%d window:%d vis:%d\n",
399 xw->id,xw->type, gtk_widget_get_window (widget), src_pixmap, gtk_widget_get_visible (xw->widget_osr)); 396 xw->id,xw->type, gtk_widget_get_window (widget), gtk_widget_get_visible (xw->widget_osr));
400
401 // cr = gdk_cairo_create (gtk_widget_get_window (widget));
402 397
403 cairo_rectangle(cr, 0,0, xv->clipx, xv->clipy);//xw->width, xw->height); 398 cairo_rectangle(cr, 0,0, xv->clipx, xv->clipy);//xw->width, xw->height);
404 cairo_clip(cr); 399 cairo_clip(cr);
@@ -419,7 +414,6 @@ xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data)
419 414
420 } 415 }
421 416
422 //maybe use below instead?
423 gtk_widget_draw (xw->widget_osr, cr); 417 gtk_widget_draw (xw->widget_osr, cr);
424 418
425 //cairo_set_source_surface (cr, src_pixmap, 0,0); 419 //cairo_set_source_surface (cr, src_pixmap, 0,0);
@@ -1086,6 +1080,8 @@ int
1086lookup_xwidget (Lisp_Object spec) 1080lookup_xwidget (Lisp_Object spec)
1087{ 1081{
1088 /*when a xwidget lisp spec is found initialize the C struct that is used in the C code. 1082 /*when a xwidget lisp spec is found initialize the C struct that is used in the C code.
1083 this is done by redisplay so values change if the spec changes.
1084 so, take special care of one-shot events
1089 xwidget_init 1085 xwidget_init
1090 */ 1086 */
1091 int found = 0, found1 = 0, found2 = 0; 1087 int found = 0, found1 = 0, found2 = 0;
@@ -1117,20 +1113,25 @@ lookup_xwidget (Lisp_Object spec)
1117 assert_valid_xwidget_id (id, "lookup_xwidget"); 1113 assert_valid_xwidget_id (id, "lookup_xwidget");
1118 1114
1119#ifdef HAVE_WEBKIT_OSR 1115#ifdef HAVE_WEBKIT_OSR
1120 //diy mvc. widget is rendered offscreen, later blitted onscreen 1116 //diy mvc. widget is rendered offscreen(or in an onscreen separate toplevel for testing), later blitted to the views
1121 if (EQ(xw->type, Qwebkit_osr)){ 1117 if (EQ(xw->type, Qwebkit_osr) && !xw->widgetwindow_osr){
1122 xw->widgetwindow_osr = GTK_CONTAINER (gtk_offscreen_window_new ()); 1118 BLOCK_INPUT;
1119 xw->widgetwindow_osr = GTK_CONTAINER (gtk_window_new ( GTK_WINDOW_TOPLEVEL));
1120 //xw->widgetwindow_osr = GTK_CONTAINER (gtk_dialog_new ());
1121 //xw->widgetwindow_osr = GTK_CONTAINER (gtk_offscreen_window_new ());
1123 gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); 1122 gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height);
1123 //xw->widgetwindow_osr = SELECTED_FRAME()->gwfixed;
1124 xw->widget_osr = webkit_web_view_new(); 1124 xw->widget_osr = webkit_web_view_new();
1125 //xw->widget_osr = gtk_button_new();
1125 1126
1126 //random debug hack 1127 //random debug hack
1127 gtk_widget_set_double_buffered (xw->widget_osr,FALSE); 1128 //gtk_widget_set_double_buffered (xw->widget_osr,FALSE);
1128 gtk_widget_set_double_buffered (xw->widgetwindow_osr,FALSE); 1129 //gtk_widget_set_double_buffered (xw->widgetwindow_osr,FALSE);
1129 1130
1130
1131 //xw->widget_osr ///XXX
1132 gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); 1131 gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height);
1133 gtk_container_add (xw->widgetwindow_osr, xw->widget_osr); 1132 gtk_container_add (xw->widgetwindow_osr, xw->widget_osr);
1133 //gtk_fixed_put(GTK_FIXED(xw->widgetwindow_osr), xw->widget_osr, 0, 200);
1134
1134 gtk_widget_show_all (GTK_WIDGET (xw->widgetwindow_osr)); 1135 gtk_widget_show_all (GTK_WIDGET (xw->widgetwindow_osr));
1135 1136
1136 //store some xwidget data in the gtk widgets 1137 //store some xwidget data in the gtk widgets
@@ -1138,11 +1139,12 @@ lookup_xwidget (Lisp_Object spec)
1138 g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); //the xwidget 1139 g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); //the xwidget
1139 1140
1140 g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage_event", 1141 g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage_event",
1141 G_CALLBACK (webkit_osr_damage_event_callback), NULL); 1142 G_CALLBACK (webkit_osr_damage_event_callback), NULL);
1142 1143
1143 1144
1144 1145
1145 webkit_web_view_load_uri(xw->widget_osr, "http://www.fsf.org"); 1146 webkit_web_view_load_uri(WEBKIT_WEB_VIEW(xw->widget_osr), "http://www.fsf.org");
1147 UNBLOCK_INPUT;
1146 1148
1147 } 1149 }
1148#endif 1150#endif