diff options
| author | Grégoire Jadi | 2013-07-25 15:33:11 +0200 |
|---|---|---|
| committer | Grégoire Jadi | 2013-07-25 15:33:11 +0200 |
| commit | 51c4de37c4ecca7886ef3b434bcc4b6e7a749fb5 (patch) | |
| tree | befa447cfb6f1070ee4cebe5b0c83c994db8f304 /src/xwidget.c | |
| parent | ede647400e3248fc19e6450644d016a845c9af85 (diff) | |
| download | emacs-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.c | 94 |
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 * | 893 | GdkWindow * |
| 894 | pick_offscreen_child (GdkWindow *offscreen_window, | 894 | offscreen_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)); |
| 902 | offscreen_window, | ||
| 903 | widget_x, | ||
| 904 | widget_y, | ||
| 905 | bin ); | ||
| 906 | return bin; | ||
| 907 | } | 902 | } |
| 908 | 903 | ||
| 909 | |||
| 910 | void | 904 | void |
| 911 | xwidget_set_embedder_view(struct xwidget* xww, | 905 | offscreen_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 | ); | 916 | void |
| 922 | //this signal doesnt seem completely necessary | 917 | offscreen_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 | ||
| 930 | gboolean | 928 | gboolean |
| 931 | xwidget_osr_event_set_embedder (GtkWidget *widget, | 929 | xwidget_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 | ||