aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoakim Verona2013-04-02 08:22:38 +0200
committerJoakim Verona2013-04-02 08:22:38 +0200
commit86dc02fe08b1a2d26d380ba67d6a165ead70bc79 (patch)
treedb3ea8c2bbc727417b1fca6cfb24bd7119f48b23 /src
parentdea4006fb3bbaa32c68e17e3a7385d1063d6fabc (diff)
downloademacs-86dc02fe08b1a2d26d380ba67d6a165ead70bc79.tar.gz
emacs-86dc02fe08b1a2d26d380ba67d6a165ead70bc79.zip
some improvements to the xwgir system. you can now create webkit with xwgir. OTOH, event propagation still only works for webkit, not for simpler things like buttons
Diffstat (limited to 'src')
-rw-r--r--src/xwidget.c267
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
150struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); 150struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w);
151Lisp_Object xwidget_spec_value ( Lisp_Object spec, Lisp_Object key, int *found); 151Lisp_Object xwidget_spec_value ( Lisp_Object spec, Lisp_Object key, int *found);
152gboolean webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) ; 152gboolean xwidget_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) ;
153gboolean webkit_osr_key_event_callback (GtkWidget *widget, GdkEventKey *event, gpointer data) ; 153gboolean webkit_osr_key_event_callback (GtkWidget *widget, GdkEventKey *event, gpointer data) ;
154void webkit_osr_document_load_finished_callback (WebKitWebView *webkitwebview, 154void 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
183gboolean
184xwgir_event_callback (GtkWidget *widget,
185 GdkEvent *event,
186 gpointer user_data);
187
182GtkWidget* xwgir_create(char* class, char* namespace); 188GtkWidget* xwgir_create(char* class, char* namespace);
183 189
184DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 7, 0, 190DEFUN ("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 */
480gboolean 508gboolean
481webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) 509xwidget_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
664GtkWidget* xwgir_create_debug;
636 665
637gboolean 666gboolean
638xwidget_osr_button_callback (GtkWidget *widget, 667xwidget_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
693gboolean
694xwgir_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
651GIRepository *girepository ; 707GIRepository *girepository ;
652DEFUN( "xwgir-require-namespace",Fxwgir_require_namespace, Sxwgir_require_namespace, 2,2,0, 708DEFUN( "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