diff options
| author | Joakim Verona | 2011-07-02 21:31:55 +0200 |
|---|---|---|
| committer | Joakim Verona | 2011-07-02 21:31:55 +0200 |
| commit | 6e5d831c49a0c9e113d15ecf633553e92a573bc5 (patch) | |
| tree | 56420e7dec4fee1e5ee5d69da90a135b8473b801 /src | |
| parent | b075649f92f1543f61efed28adb25df666a1a03c (diff) | |
| download | emacs-6e5d831c49a0c9e113d15ecf633553e92a573bc5.tar.gz emacs-6e5d831c49a0c9e113d15ecf633553e92a573bc5.zip | |
fixed embarrasing non-singletoness of webkit-osr.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xwidget.c | 38 |
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 |
| 389 | gboolean | 389 | gboolean |
| 390 | xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) | 390 | xwidget_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 | |||
| 1086 | lookup_xwidget (Lisp_Object spec) | 1080 | lookup_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 |