diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/xwidget.c | 267 |
1 files changed, 162 insertions, 105 deletions
diff --git a/src/xwidget.c b/src/xwidget.c index b432823fbca..f3394cd7f11 100644 --- a/src/xwidget.c +++ b/src/xwidget.c | |||
| @@ -149,7 +149,7 @@ extern Lisp_Object QCwidth, QCheight; | |||
| 149 | 149 | ||
| 150 | struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); | 150 | struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); |
| 151 | Lisp_Object xwidget_spec_value ( Lisp_Object spec, Lisp_Object key, int *found); | 151 | Lisp_Object xwidget_spec_value ( Lisp_Object spec, Lisp_Object key, int *found); |
| 152 | gboolean webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) ; | 152 | gboolean xwidget_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) ; |
| 153 | gboolean webkit_osr_key_event_callback (GtkWidget *widget, GdkEventKey *event, gpointer data) ; | 153 | gboolean webkit_osr_key_event_callback (GtkWidget *widget, GdkEventKey *event, gpointer data) ; |
| 154 | void webkit_osr_document_load_finished_callback (WebKitWebView *webkitwebview, | 154 | void webkit_osr_document_load_finished_callback (WebKitWebView *webkitwebview, |
| 155 | WebKitWebFrame *arg1, | 155 | WebKitWebFrame *arg1, |
| @@ -179,6 +179,12 @@ gboolean webkit_osr_navigation_policy_decision_requested_callback(WebKitWebView | |||
| 179 | WebKitWebNavigationAction *navigation_action, | 179 | WebKitWebNavigationAction *navigation_action, |
| 180 | WebKitWebPolicyDecision *policy_decision, | 180 | WebKitWebPolicyDecision *policy_decision, |
| 181 | gpointer user_data); | 181 | gpointer user_data); |
| 182 | |||
| 183 | gboolean | ||
| 184 | xwgir_event_callback (GtkWidget *widget, | ||
| 185 | GdkEvent *event, | ||
| 186 | gpointer user_data); | ||
| 187 | |||
| 182 | GtkWidget* xwgir_create(char* class, char* namespace); | 188 | GtkWidget* xwgir_create(char* class, char* namespace); |
| 183 | 189 | ||
| 184 | DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 7, 0, | 190 | DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 7, 0, |
| @@ -215,13 +221,23 @@ DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 7, 0, | |||
| 215 | /* DIY mvc. widget is rendered offscreen, | 221 | /* DIY mvc. widget is rendered offscreen, |
| 216 | later bitmap copied to the views. | 222 | later bitmap copied to the views. |
| 217 | */ | 223 | */ |
| 218 | if (EQ(xw->type, Qwebkit_osr)){ | 224 | if (EQ(xw->type, Qwebkit_osr)|| |
| 219 | printf("init webkit osr\n"); | 225 | EQ(xw->type, Qsocket_osr)|| |
| 226 | (Fget(xw->type, Qcxwgir_class) != Qnil)){ | ||
| 227 | printf("init osr widget\n"); | ||
| 220 | block_input(); | 228 | block_input(); |
| 221 | xw->widgetwindow_osr = GTK_CONTAINER (gtk_offscreen_window_new ()); | 229 | xw->widgetwindow_osr = GTK_CONTAINER (gtk_offscreen_window_new ()); |
| 222 | gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); | 230 | gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); |
| 223 | xw->widget_osr = webkit_web_view_new(); | ||
| 224 | 231 | ||
| 232 | if (EQ(xw->type, Qwebkit_osr)) | ||
| 233 | xw->widget_osr = webkit_web_view_new(); | ||
| 234 | if(EQ(xw->type, Qsocket_osr)) | ||
| 235 | xw->widget_osr = gtk_socket_new(); | ||
| 236 | if(Fget(xw->type, Qcxwgir_class) != Qnil) | ||
| 237 | xw->widget_osr = xwgir_create( SDATA(Fcar(Fcdr(Fget(xw->type, Qcxwgir_class)))), | ||
| 238 | SDATA(Fcar(Fget(xw->type, Qcxwgir_class)))); | ||
| 239 | |||
| 240 | |||
| 225 | gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); | 241 | gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); |
| 226 | gtk_container_add (xw->widgetwindow_osr, xw->widget_osr); | 242 | gtk_container_add (xw->widgetwindow_osr, xw->widget_osr); |
| 227 | 243 | ||
| @@ -231,110 +247,122 @@ DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 7, 0, | |||
| 231 | g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw)); | 247 | g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw)); |
| 232 | g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); | 248 | g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); |
| 233 | /* signals */ | 249 | /* signals */ |
| 234 | g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage-event", G_CALLBACK (webkit_osr_damage_event_callback), NULL); | 250 | g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage-event", G_CALLBACK (xwidget_osr_damage_event_callback), NULL); |
| 235 | 251 | ||
| 236 | //TODO these were just a test hack | 252 | //TODO these were just a test hack |
| 237 | /* g_signal_connect (G_OBJECT ( xw->widget_osr), "key-press-event", G_CALLBACK (webkit_osr_key_event_callback), NULL); */ | 253 | /* g_signal_connect (G_OBJECT ( xw->widget_osr), "key-press-event", G_CALLBACK (webkit_osr_key_event_callback), NULL); */ |
| 238 | /* g_signal_connect (G_OBJECT ( xw->widget_osr), "key-release-event", G_CALLBACK (webkit_osr_key_event_callback), NULL); */ | 254 | /* g_signal_connect (G_OBJECT ( xw->widget_osr), "key-release-event", G_CALLBACK (webkit_osr_key_event_callback), NULL); */ |
| 239 | 255 | ||
| 240 | g_signal_connect (G_OBJECT ( xw->widget_osr), | 256 | if (EQ(xw->type, Qwebkit_osr)){ |
| 241 | "document-load-finished", | 257 | g_signal_connect (G_OBJECT ( xw->widget_osr), |
| 242 | G_CALLBACK (webkit_osr_document_load_finished_callback), | 258 | "document-load-finished", |
| 243 | xw); | 259 | G_CALLBACK (webkit_osr_document_load_finished_callback), |
| 244 | 260 | xw); | |
| 245 | g_signal_connect (G_OBJECT ( xw->widget_osr), | 261 | |
| 246 | "download-requested", | 262 | g_signal_connect (G_OBJECT ( xw->widget_osr), |
| 247 | G_CALLBACK (webkit_osr_download_callback), | 263 | "download-requested", |
| 248 | xw); | 264 | G_CALLBACK (webkit_osr_download_callback), |
| 249 | 265 | xw); | |
| 250 | g_signal_connect (G_OBJECT ( xw->widget_osr), | 266 | |
| 251 | "mime-type-policy-decision-requested", | 267 | g_signal_connect (G_OBJECT ( xw->widget_osr), |
| 252 | G_CALLBACK (webkit_osr_mime_type_policy_typedecision_requested_callback), | 268 | "mime-type-policy-decision-requested", |
| 253 | xw); | 269 | G_CALLBACK (webkit_osr_mime_type_policy_typedecision_requested_callback), |
| 254 | 270 | xw); | |
| 255 | g_signal_connect (G_OBJECT ( xw->widget_osr), | 271 | |
| 256 | "new-window-policy-decision-requested", | 272 | g_signal_connect (G_OBJECT ( xw->widget_osr), |
| 257 | G_CALLBACK (webkit_osr_new_window_policy_decision_requested_callback), | 273 | "new-window-policy-decision-requested", |
| 258 | xw); | 274 | G_CALLBACK (webkit_osr_new_window_policy_decision_requested_callback), |
| 275 | xw); | ||
| 276 | |||
| 277 | g_signal_connect (G_OBJECT ( xw->widget_osr), | ||
| 278 | "navigation-policy-decision-requested", | ||
| 279 | G_CALLBACK (webkit_osr_navigation_policy_decision_requested_callback), | ||
| 280 | xw); | ||
| 281 | //webkit_web_view_load_uri(WEBKIT_WEB_VIEW(xw->widget_osr), "http://www.fsf.org"); | ||
| 259 | 282 | ||
| 260 | g_signal_connect (G_OBJECT ( xw->widget_osr), | 283 | } |
| 261 | "navigation-policy-decision-requested", | ||
| 262 | G_CALLBACK (webkit_osr_navigation_policy_decision_requested_callback), | ||
| 263 | xw); | ||
| 264 | 284 | ||
| 265 | 285 | ||
| 266 | webkit_web_view_load_uri(WEBKIT_WEB_VIEW(xw->widget_osr), "http://www.fsf.org"); | ||
| 267 | unblock_input(); | 286 | unblock_input(); |
| 268 | 287 | ||
| 269 | } | 288 | } |
| 270 | #endif | 289 | #endif |
| 271 | 290 | ||
| 272 | if (EQ(xw->type, Qsocket_osr)){ | 291 | /* if (EQ(xw->type, Qsocket_osr)){ */ |
| 273 | printf("init socket osr\n"); | 292 | /* printf("init socket osr\n"); */ |
| 274 | block_input(); | 293 | /* block_input(); */ |
| 275 | xw->widgetwindow_osr = GTK_CONTAINER (gtk_offscreen_window_new ()); | 294 | /* xw->widgetwindow_osr = GTK_CONTAINER (gtk_offscreen_window_new ()); */ |
| 276 | gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); | 295 | /* gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); */ |
| 277 | 296 | ||
| 278 | //////////////////// | 297 | /* //////////////////// */ |
| 279 | //xw->widget_osr = webkit_web_view_new(); | 298 | /* //xw->widget_osr = webkit_web_view_new(); */ |
| 280 | xw->widget_osr = gtk_socket_new(); | 299 | /* xw->widget_osr = gtk_socket_new(); */ |
| 281 | //g_signal_connect_after(xv->widget, "plug-added", G_CALLBACK(xwidget_plug_added), "plug added"); | 300 | /* //g_signal_connect_after(xv->widget, "plug-added", G_CALLBACK(xwidget_plug_added), "plug added"); */ |
| 282 | //g_signal_connect_after(xv->widget, "plug-removed", G_CALLBACK(xwidget_plug_removed), "plug removed"); | 301 | /* //g_signal_connect_after(xv->widget, "plug-removed", G_CALLBACK(xwidget_plug_removed), "plug removed"); */ |
| 283 | /////////////////// | 302 | /* /////////////////// */ |
| 284 | |||
| 285 | gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); | ||
| 286 | gtk_container_add (xw->widgetwindow_osr, xw->widget_osr); | ||
| 287 | |||
| 288 | gtk_widget_show_all (GTK_WIDGET (xw->widgetwindow_osr)); | ||
| 289 | |||
| 290 | /* store some xwidget data in the gtk widgets for convenient retrieval in the event handlers. */ | ||
| 291 | g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw)); | ||
| 292 | g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); | ||
| 293 | g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage-event", G_CALLBACK (webkit_osr_damage_event_callback), NULL); | ||
| 294 | |||
| 295 | //webkit_web_view_load_uri(WEBKIT_WEB_VIEW(xw->widget_osr), "http://www.fsf.org"); | ||
| 296 | unblock_input(); | ||
| 297 | |||
| 298 | } | ||
| 299 | |||
| 300 | |||
| 301 | //////////////////////////////////////////////////////// | ||
| 302 | if(Fget(xw->type, Qcxwgir_class) != Qnil){ | ||
| 303 | //here we have run out of hard coded symbols, we will now attempt to create | ||
| 304 | //a widget dynamically | ||
| 305 | //TODO | ||
| 306 | // - support OSR | ||
| 307 | // - support constructor args | ||
| 308 | // - support signals | ||
| 309 | // - check that the argument widget type actually exists | ||
| 310 | printf("init xwgir osr\n"); | ||
| 311 | block_input(); | ||
| 312 | xw->widgetwindow_osr = GTK_CONTAINER (gtk_offscreen_window_new ()); | ||
| 313 | gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); | ||
| 314 | 303 | ||
| 315 | printf("xwgir symbol %s %s %s:\n", | 304 | /* gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); */ |
| 316 | SDATA(SYMBOL_NAME(xw->type)), | 305 | /* gtk_container_add (xw->widgetwindow_osr, xw->widget_osr); */ |
| 317 | SDATA(Fcar(Fcdr(Fget(xw->type, Qcxwgir_class)))), | 306 | |
| 318 | SDATA(Fcar(Fget(xw->type, Qcxwgir_class)))); | 307 | /* gtk_widget_show_all (GTK_WIDGET (xw->widgetwindow_osr)); */ |
| 319 | //xv->widget = xwgir_create ("Button"); | 308 | |
| 320 | Fcar(Fget(xw->type, Qcxwgir_class)); | 309 | /* /\* store some xwidget data in the gtk widgets for convenient retrieval in the event handlers. *\/ */ |
| 321 | xw->widget_osr = xwgir_create( SDATA(Fcar(Fcdr(Fget(xw->type, Qcxwgir_class)))), | 310 | /* g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw)); */ |
| 322 | SDATA(Fcar(Fget(xw->type, Qcxwgir_class)))); | 311 | /* g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); */ |
| 312 | /* g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage-event", G_CALLBACK (xwidget_osr_damage_event_callback), NULL); */ | ||
| 313 | |||
| 314 | /* //webkit_web_view_load_uri(WEBKIT_WEB_VIEW(xw->widget_osr), "http://www.fsf.org"); */ | ||
| 315 | /* unblock_input(); */ | ||
| 316 | |||
| 317 | /* } */ | ||
| 318 | |||
| 319 | |||
| 320 | /* //////////////////////////////////////////////////////// */ | ||
| 321 | /* if(Fget(xw->type, Qcxwgir_class) != Qnil){ */ | ||
| 322 | /* //here we have run out of hard coded symbols, we will now attempt to create */ | ||
| 323 | /* //a widget dynamically */ | ||
| 324 | /* //TODO */ | ||
| 325 | /* // - support OSR */ | ||
| 326 | /* // - support constructor args */ | ||
| 327 | /* // - support signals */ | ||
| 328 | /* // - check that the argument widget type actually exists */ | ||
| 329 | |||
| 330 | /* //mostly the same as for webkit, so TODO refactor */ | ||
| 331 | /* printf("init xwgir osr\n"); */ | ||
| 332 | /* block_input(); */ | ||
| 333 | /* xw->widgetwindow_osr = GTK_CONTAINER (gtk_offscreen_window_new ()); */ | ||
| 334 | /* gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); */ | ||
| 335 | /* ////////////////////////////// */ | ||
| 336 | /* //create the xwgir widget */ | ||
| 337 | /* printf("xwgir symbol %s %s %s:\n", */ | ||
| 338 | /* SDATA(SYMBOL_NAME(xw->type)), */ | ||
| 339 | /* SDATA(Fcar(Fcdr(Fget(xw->type, Qcxwgir_class)))), */ | ||
| 340 | /* SDATA(Fcar(Fget(xw->type, Qcxwgir_class)))); */ | ||
| 341 | /* //xv->widget = xwgir_create ("Button"); */ | ||
| 342 | /* Fcar(Fget(xw->type, Qcxwgir_class)); */ | ||
| 343 | /* xw->widget_osr = xwgir_create( SDATA(Fcar(Fcdr(Fget(xw->type, Qcxwgir_class)))), */ | ||
| 344 | /* SDATA(Fcar(Fget(xw->type, Qcxwgir_class)))); */ | ||
| 345 | /* gtk_widget_add_events(xw->widget_osr, */ | ||
| 346 | /* GDK_BUTTON_PRESS_MASK */ | ||
| 347 | /* | GDK_BUTTON_RELEASE_MASK */ | ||
| 348 | /* | GDK_POINTER_MOTION_MASK); */ | ||
| 349 | |||
| 350 | /* ////////////////////////////// */ | ||
| 351 | /* gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); */ | ||
| 352 | /* gtk_container_add (xw->widgetwindow_osr, xw->widget_osr); */ | ||
| 323 | 353 | ||
| 324 | gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); | 354 | /* gtk_widget_show_all (GTK_WIDGET (xw->widgetwindow_osr)); */ |
| 325 | gtk_container_add (xw->widgetwindow_osr, xw->widget_osr); | ||
| 326 | 355 | ||
| 327 | gtk_widget_show_all (GTK_WIDGET (xw->widgetwindow_osr)); | 356 | /* /\* store some xwidget data in the gtk widgets for convenient retrieval in the event handlers. *\/ */ |
| 328 | 357 | /* g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw)); */ | |
| 329 | /* store some xwidget data in the gtk widgets for convenient retrieval in the event handlers. */ | 358 | /* g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); */ |
| 330 | g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw)); | 359 | /* /\* signals *\/ */ |
| 331 | g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); | 360 | /* g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage-event", G_CALLBACK (xwidget_osr_damage_event_callback), NULL); */ |
| 332 | /* signals */ | 361 | /* g_signal_connect (G_OBJECT ( xw->widget_osr), "button-press-event", G_CALLBACK (xwgir_event_callback), xw); */ |
| 333 | g_signal_connect (G_OBJECT ( xw->widgetwindow_osr), "damage-event", G_CALLBACK (webkit_osr_damage_event_callback), NULL); | ||
| 334 | 362 | ||
| 335 | 363 | ||
| 336 | unblock_input(); | 364 | /* unblock_input(); */ |
| 337 | } | 365 | /* } */ |
| 338 | 366 | ||
| 339 | //////////////////////////////////////////////////////// | 367 | //////////////////////////////////////////////////////// |
| 340 | 368 | ||
| @@ -478,9 +506,9 @@ xwidget_slider_changed (GtkRange *range, | |||
| 478 | /* when the off-screen webkit master view changes this signal is called. | 506 | /* when the off-screen webkit master view changes this signal is called. |
| 479 | it copies the bitmap from the off-screen webkit instance */ | 507 | it copies the bitmap from the off-screen webkit instance */ |
| 480 | gboolean | 508 | gboolean |
| 481 | webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) | 509 | xwidget_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) |
| 482 | { | 510 | { |
| 483 | //TODO this is wrong! should just oueu a redraw of onscreen widget | 511 | //TODO this is wrong! should just queu a redraw of onscreen widget |
| 484 | struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); | 512 | struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); |
| 485 | struct xwidget_view* xv; | 513 | struct xwidget_view* xv; |
| 486 | //webkit_osr_redraw_child(xw, widget); | 514 | //webkit_osr_redraw_child(xw, widget); |
| @@ -621,8 +649,8 @@ xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) | |||
| 621 | struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); | 649 | struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); |
| 622 | struct xwidget_view* xv = (struct xwidget_view*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET_VIEW); | 650 | struct xwidget_view* xv = (struct xwidget_view*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET_VIEW); |
| 623 | 651 | ||
| 624 | // printf("xwidget_osr_draw_callback gtk3 xw.id:%d xw.type:%d window:%d vis:%d\n", | 652 | printf("xwidget_osr_draw_callback gtk3 xw.id:%d xw.type:%d window:%d vis:%d\n", |
| 625 | // xw,xw->type, gtk_widget_get_window (widget), gtk_widget_get_visible (xw->widget_osr)); | 653 | xw,xw->type, gtk_widget_get_window (widget), gtk_widget_get_visible (xw->widget_osr)); |
| 626 | 654 | ||
| 627 | cairo_rectangle(cr, 0,0, xv->clip_right, xv->clip_bottom);//xw->width, xw->height); | 655 | cairo_rectangle(cr, 0,0, xv->clip_right, xv->clip_bottom);//xw->width, xw->height); |
| 628 | cairo_clip(cr); | 656 | cairo_clip(cr); |
| @@ -633,21 +661,49 @@ xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) | |||
| 633 | return FALSE; | 661 | return FALSE; |
| 634 | } | 662 | } |
| 635 | 663 | ||
| 664 | GtkWidget* xwgir_create_debug; | ||
| 636 | 665 | ||
| 637 | gboolean | 666 | gboolean |
| 638 | xwidget_osr_button_callback (GtkWidget *widget, | 667 | xwidget_osr_event_forward (GtkWidget *widget, |
| 639 | GdkEvent *event, | 668 | GdkEvent *event, |
| 640 | gpointer user_data) | 669 | gpointer user_data) |
| 641 | { | 670 | { |
| 671 | /* copy events that arrive at the outer widget to the offscreen widget */ | ||
| 642 | struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); | 672 | struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); |
| 643 | GdkEvent* eventcopy = gdk_event_copy(event); | 673 | GdkEvent* eventcopy = gdk_event_copy(event); |
| 644 | 674 | ||
| 645 | ((GdkEventButton*)eventcopy)->window = gtk_widget_get_window(xw->widget_osr); | 675 | //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xw->widget_osr); |
| 646 | gtk_main_do_event(eventcopy); //TODO this will leak events. they should be deallocated later | 676 | //((GdkEventAny*)eventcopy)->window = xw->widgetwindow_osr; |
| 677 | //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xwgir_create_debug); | ||
| 678 | eventcopy->any.window = gtk_widget_get_window(xw->widget_osr);//gtk_widget_get_window(xwgir_create_debug); | ||
| 679 | //eventcopy->send_event = TRUE; | ||
| 680 | printf("xwidget_osr_event_forward redirect event to window:%d\n", ((GdkEventAny*)eventcopy)->window); | ||
| 681 | printf("A type:%d x:%d y:%d \n", event->type, event->button.x, event->button.y); | ||
| 682 | printf("B type:%d x:%d y:%d \n", eventcopy->type, eventcopy->button.x, eventcopy->button.y); | ||
| 683 | //gtk_button_get_event_window(xwgir_create_debug); | ||
| 684 | gtk_main_do_event(eventcopy); //TODO this will leak events. they should be deallocated later, perhaps in xwgir_event_callback | ||
| 685 | //gdk_event_put(eventcopy); | ||
| 686 | //gdk_event_queue_append(eventcopy); | ||
| 687 | //gdk_event_free(eventcopy); | ||
| 647 | return TRUE; //dont propagate this event furter | 688 | return TRUE; //dont propagate this event furter |
| 689 | //return FALSE; //dont propagate this event furter | ||
| 690 | } | ||
| 691 | |||
| 692 | |||
| 693 | gboolean | ||
| 694 | xwgir_event_callback (GtkWidget *widget, | ||
| 695 | GdkEvent *event, | ||
| 696 | gpointer user_data) | ||
| 697 | { | ||
| 698 | //debugging | ||
| 699 | //perhaps delete copied events here | ||
| 700 | struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); | ||
| 701 | printf("xwgir_event_callback\n"); | ||
| 702 | return FALSE; | ||
| 648 | } | 703 | } |
| 649 | 704 | ||
| 650 | 705 | ||
| 706 | |||
| 651 | GIRepository *girepository ; | 707 | GIRepository *girepository ; |
| 652 | DEFUN( "xwgir-require-namespace",Fxwgir_require_namespace, Sxwgir_require_namespace, 2,2,0, | 708 | DEFUN( "xwgir-require-namespace",Fxwgir_require_namespace, Sxwgir_require_namespace, 2,2,0, |
| 653 | doc: /*require a namespace. must be done for all namespaces we want to use, before using other xwgir functions.*/) | 709 | doc: /*require a namespace. must be done for all namespaces we want to use, before using other xwgir functions.*/) |
| @@ -683,6 +739,7 @@ GtkWidget* xwgir_create(char* class, char* namespace){ | |||
| 683 | NULL, 0, | 739 | NULL, 0, |
| 684 | &return_value, | 740 | &return_value, |
| 685 | NULL); | 741 | NULL); |
| 742 | xwgir_create_debug = return_value.v_pointer; | ||
| 686 | return return_value.v_pointer; | 743 | return return_value.v_pointer; |
| 687 | 744 | ||
| 688 | } | 745 | } |
| @@ -935,15 +992,15 @@ xwidget_init_view (struct xwidget *xww, | |||
| 935 | g_signal_connect (G_OBJECT ( xv->widget), "draw", | 992 | g_signal_connect (G_OBJECT ( xv->widget), "draw", |
| 936 | G_CALLBACK (xwidget_osr_draw_callback), NULL); | 993 | G_CALLBACK (xwidget_osr_draw_callback), NULL); |
| 937 | g_signal_connect (G_OBJECT ( xv->widget), "button-press-event", | 994 | g_signal_connect (G_OBJECT ( xv->widget), "button-press-event", |
| 938 | G_CALLBACK (xwidget_osr_button_callback), NULL); | 995 | G_CALLBACK (xwidget_osr_event_forward), NULL); |
| 939 | g_signal_connect (G_OBJECT ( xv->widget), "button-release-event", | 996 | g_signal_connect (G_OBJECT ( xv->widget), "button-release-event", |
| 940 | G_CALLBACK (xwidget_osr_button_callback), NULL); | 997 | G_CALLBACK (xwidget_osr_event_forward), NULL); |
| 941 | g_signal_connect (G_OBJECT ( xv->widget), "motion-notify-event", | 998 | g_signal_connect (G_OBJECT ( xv->widget), "motion-notify-event", |
| 942 | G_CALLBACK (xwidget_osr_button_callback), NULL); | 999 | G_CALLBACK (xwidget_osr_event_forward), NULL); |
| 943 | /* g_signal_connect (G_OBJECT ( xv->widget), "key-press-event", */ | 1000 | /* g_signal_connect (G_OBJECT ( xv->widget), "key-press-event", */ |
| 944 | /* G_CALLBACK (xwidget_osr_button_callback), NULL); */ | 1001 | /* G_CALLBACK (xwidget_osr_event_forward), NULL); */ |
| 945 | /* g_signal_connect (G_OBJECT ( xv->widget), "key-release-event", */ | 1002 | /* g_signal_connect (G_OBJECT ( xv->widget), "key-release-event", */ |
| 946 | /* G_CALLBACK (xwidget_osr_button_callback), NULL); */ | 1003 | /* G_CALLBACK (xwidget_osr_event_forward), NULL); */ |
| 947 | 1004 | ||
| 948 | #endif | 1005 | #endif |
| 949 | 1006 | ||