aboutsummaryrefslogtreecommitdiffstats
path: root/src/xwidget.c
diff options
context:
space:
mode:
authorGrégoire Jadi2013-07-25 15:33:11 +0200
committerGrégoire Jadi2013-07-25 15:33:11 +0200
commit51c4de37c4ecca7886ef3b434bcc4b6e7a749fb5 (patch)
treebefa447cfb6f1070ee4cebe5b0c83c994db8f304 /src/xwidget.c
parentede647400e3248fc19e6450644d016a845c9af85 (diff)
downloademacs-51c4de37c4ecca7886ef3b434bcc4b6e7a749fb5.tar.gz
emacs-51c4de37c4ecca7886ef3b434bcc4b6e7a749fb5.zip
* src/xwidget.c: Implement events forwarding with the set_embedder strategy.
Diffstat (limited to 'src/xwidget.c')
-rw-r--r--src/xwidget.c94
1 files changed, 47 insertions, 47 deletions
diff --git a/src/xwidget.c b/src/xwidget.c
index 08f49ac82d7..b28893d895b 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -890,50 +890,53 @@ offscreen_window_from_parent (GdkWindow *window,
890 to_child (bin, parent_x, parent_y, offscreen_x, offscreen_y); 890 to_child (bin, parent_x, parent_y, offscreen_x, offscreen_y);
891} 891}
892 892
893 GdkWindow * 893GdkWindow *
894pick_offscreen_child (GdkWindow *offscreen_window, 894offscreen_pick_embedded_child (GdkWindow *window,
895 double widget_x, 895 double x,
896 double widget_y, 896 double y,
897 GdkWindow *bin) 897 gpointer *data)
898{ 898{
899 //in this simple case we assume the window contains a single widget. easy. 899 //in this simple case we assume the window contains a single widget. easy.
900 //but then we get the problem that the widget cant be embedded in several windows 900 //but then we get the problem that the widget cant be embedded in several windows
901 printf("pick_offscreen_child %d %f %f %d\n", 901 return gtk_widget_get_window (GTK_WIDGET (data));
902offscreen_window,
903 widget_x,
904 widget_y,
905 bin );
906 return bin;
907} 902}
908 903
909
910void 904void
911xwidget_set_embedder_view(struct xwidget* xww, 905offscreen_to_embedder (GdkWindow *window,
912 struct xwidget_view* xv){ 906 gdouble offscreen_x,
913 printf("gdk_offscreen_window_set_embedder %d %d\n", 907 gdouble offscreen_y,
914 GDK_IS_WINDOW(gtk_widget_get_window (xww->widget_osr)), 908 gpointer embedder_x,
915 GDK_IS_WINDOW(gtk_widget_get_window (GTK_WIDGET (xv->widget)))); 909 gpointer embedder_y,
916 //set_embedder needs to be called after xv->widget realization 910 gpointer data)
917 gdk_offscreen_window_set_embedder ( gtk_widget_get_window (xww->widget_osr), 911{
918 gtk_widget_get_window (GTK_WIDGET (xv->widget)) 912 * (gdouble *) embedder_x = offscreen_x;
919 913 * (gdouble *) embedder_y = offscreen_y;
914}
920 915
921 ); 916void
922 //this signal doesnt seem completely necessary 917offscreen_from_embedder (GdkWindow *window,
923 /* g_signal_connect (gtk_widget_get_window (xww->widget_osr), "from-embedder", */ 918 gdouble embedder_x,
924 /* G_CALLBACK (offscreen_window_from_parent), gtk_widget_get_window (GTK_WIDGET (xv->widget))); */ 919 gdouble embedder_y,
925 //but this one is 920 gpointer offscreen_x,
926 g_signal_connect (gtk_widget_get_window (xv->widget), "pick-embedded-child", 921 gpointer offscreen_y,
927 G_CALLBACK (pick_offscreen_child), gtk_widget_get_window (xww->widget_osr)); 922 gpointer user_data)
923{
924 * (gdouble *) offscreen_x = embedder_x;
925 * (gdouble *) offscreen_y = embedder_y;
928} 926}
929 927
930gboolean 928gboolean
931xwidget_osr_event_set_embedder (GtkWidget *widget, 929xwidget_osr_event_set_embedder (GtkWidget *widget,
932 GdkEvent *event, 930 GdkEvent *event,
933 gpointer xv) 931 gpointer data)
934{ 932{
935 xwidget_set_embedder_view(XXWIDGET (((struct xwidget_view*) xv)->model), 933 struct xwidget_view *xv = (struct xwidget_view *) data;
936 (struct xwidget_view*) xv); 934 struct xwidget *xww = XXWIDGET (xv->model);
935 printf("gdk_offscreen_window_set_embedder %d %d\n",
936 GDK_IS_WINDOW(gtk_widget_get_window (xww->widget_osr)),
937 GDK_IS_WINDOW(gtk_widget_get_window (GTK_WIDGET (xv->widget))));
938 gdk_offscreen_window_set_embedder (gtk_widget_get_window (xww->widgetwindow_osr),
939 gtk_widget_get_window (xv->widget));
937} 940}
938 941
939 942
@@ -1011,7 +1014,7 @@ xwidget_init_view (struct xwidget *xww,
1011 G_CALLBACK (xwidget_osr_event_forward), NULL); 1014 G_CALLBACK (xwidget_osr_event_forward), NULL);
1012 }else{ 1015 }else{
1013 //xwgir debug , orthogonal to forwarding 1016 //xwgir debug , orthogonal to forwarding
1014 g_signal_connect (G_OBJECT ( xv->widget), "motion-notify-event", 1017 g_signal_connect (G_OBJECT (xv->widget), "motion-notify-event",
1015 G_CALLBACK (xwidget_osr_event_set_embedder), xv); 1018 G_CALLBACK (xwidget_osr_event_set_embedder), xv);
1016 } 1019 }
1017 1020
@@ -1019,11 +1022,8 @@ xwidget_init_view (struct xwidget *xww,
1019 g_signal_connect (G_OBJECT ( xv->widget), "draw", 1022 g_signal_connect (G_OBJECT ( xv->widget), "draw",
1020 G_CALLBACK (xwidget_osr_draw_callback), NULL); 1023 G_CALLBACK (xwidget_osr_draw_callback), NULL);
1021 1024
1022
1023
1024
1025 } 1025 }
1026 //else return NULL; 1026 //else return NULL;
1027 1027
1028 //widget realization 1028 //widget realization
1029 //make container widget 1st, and put the actual widget inside the container 1029 //make container widget 1st, and put the actual widget inside the container
@@ -1063,24 +1063,24 @@ xwidget_init_view (struct xwidget *xww,
1063 } 1063 }
1064 1064
1065 ////////////////////////////////////////////////////////////// 1065 //////////////////////////////////////////////////////////////
1066 //xwgir debug 1066 // xwgir debug
1067 if (//EQ(xww->type, Qwebkit_osr)|| //TODO should be able to choose compile time which method to use with webkit 1067 if (//EQ(xww->type, Qwebkit_osr)|| //TODO should be able to choose compile time which method to use with webkit
1068 EQ(xww->type, Qsocket_osr)|| 1068 EQ(xww->type, Qsocket_osr)||
1069 (!NILP (Fget(xww->type, QCxwgir_class))))//xwgir widgets are OSR 1069 (!NILP (Fget(xww->type, QCxwgir_class))))//xwgir widgets are OSR
1070 { 1070 {
1071 //xwidget_set_embedder_view(xww,xv);
1072 printf("gdk_offscreen_window_set_embedder %d %d\n", 1071 printf("gdk_offscreen_window_set_embedder %d %d\n",
1073 GDK_IS_WINDOW(gtk_widget_get_window (xww->widget_osr)), 1072 GDK_IS_WINDOW(gtk_widget_get_window (xww->widget_osr)),
1074 GDK_IS_WINDOW(gtk_widget_get_window (GTK_WIDGET (xv->widget)))); 1073 GDK_IS_WINDOW(gtk_widget_get_window (GTK_WIDGET (xv->widget))));
1075 //set_embedder needs to be called after xv->widget realization 1074 // set_embedder needs to be called after xv->widget realization
1076 gdk_offscreen_window_set_embedder ( gtk_widget_get_window (xww->widget_osr), 1075 gdk_offscreen_window_set_embedder (gtk_widget_get_window (xww->widgetwindow_osr),
1077 gtk_widget_get_window (GTK_WIDGET (xv->widget)) 1076 gtk_widget_get_window (xv->widget));
1078
1079 );
1080 /* g_signal_connect (gtk_widget_get_window (xww->widget_osr), "from-embedder", */
1081 /* G_CALLBACK (offscreen_window_from_parent), gtk_widget_get_window (GTK_WIDGET (xv->widget))); */
1082 g_signal_connect (gtk_widget_get_window (xv->widget), "pick-embedded-child", 1077 g_signal_connect (gtk_widget_get_window (xv->widget), "pick-embedded-child",
1083 G_CALLBACK (pick_offscreen_child), gtk_widget_get_window (xww->widget_osr)); 1078 G_CALLBACK (offscreen_pick_embedded_child), xww->widgetwindow_osr);
1079
1080 g_signal_connect (gtk_widget_get_window (xww->widgetwindow_osr), "from-embedder",
1081 G_CALLBACK (offscreen_from_embedder), NULL);
1082 g_signal_connect (gtk_widget_get_window (xww->widgetwindow_osr), "to-embedder",
1083 G_CALLBACK (offscreen_to_embedder), NULL);
1084 } 1084 }
1085 //////////////////////////////////////// 1085 ////////////////////////////////////////
1086 1086