aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/xwidget.c160
1 files changed, 89 insertions, 71 deletions
diff --git a/src/xwidget.c b/src/xwidget.c
index 15e5978a2fb..94b5c8aa26b 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -164,9 +164,9 @@ gboolean webkit_osr_navigation_policy_decision_requested_callback(WebKitWebView
164 164
165GtkWidget* xwgir_create(char* class, char* namespace); 165GtkWidget* xwgir_create(char* class, char* namespace);
166static void 166static void
167send_xembed_ready_event (struct xwidget* xw, int xembedid); 167send_xembed_ready_event (struct xwidget* xw, int xembedid);
168DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 8, 0, 168DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 8, 0,
169 doc: /* Make an xwidget from BEG to END of TYPE. 169 doc: /* Make an xwidget from BEG to END of TYPE.
170 170
171If BUFFER is nil it uses the current buffer. If BUFFER is a string and 171If BUFFER is nil it uses the current buffer. If BUFFER is a string and
172no such buffer exists, it is created. 172no such buffer exists, it is created.
@@ -200,7 +200,7 @@ TYPE is a symbol which can take one of the following values:
200 else 200 else
201 buffer = Fget_buffer_create (buffer); 201 buffer = Fget_buffer_create (buffer);
202 xw->buffer = buffer; 202 xw->buffer = buffer;
203 203
204 xw->height = XFASTINT(height); 204 xw->height = XFASTINT(height);
205 xw->width = XFASTINT(width); 205 xw->width = XFASTINT(width);
206 xw->kill_without_query = 0; 206 xw->kill_without_query = 0;
@@ -225,7 +225,7 @@ TYPE is a symbol which can take one of the following values:
225 if (EQ(xw->type, Qwebkit_osr)) 225 if (EQ(xw->type, Qwebkit_osr))
226 xw->widget_osr = webkit_web_view_new(); 226 xw->widget_osr = webkit_web_view_new();
227 if(EQ(xw->type, Qsocket_osr)) 227 if(EQ(xw->type, Qsocket_osr))
228 xw->widget_osr = gtk_socket_new(); 228 xw->widget_osr = gtk_socket_new();
229 if(!NILP (Fget(xw->type, QCxwgir_class))) 229 if(!NILP (Fget(xw->type, QCxwgir_class)))
230 xw->widget_osr = xwgir_create(SDATA(Fcar(Fcdr(Fget(xw->type, QCxwgir_class)))), 230 xw->widget_osr = xwgir_create(SDATA(Fcar(Fcdr(Fget(xw->type, QCxwgir_class)))),
231 SDATA(Fcar(Fget(xw->type, QCxwgir_class)))); 231 SDATA(Fcar(Fget(xw->type, QCxwgir_class))));
@@ -245,22 +245,22 @@ TYPE is a symbol which can take one of the following values:
245 g_signal_connect (G_OBJECT (xw->widget_osr), 245 g_signal_connect (G_OBJECT (xw->widget_osr),
246 "document-load-finished", 246 "document-load-finished",
247 G_CALLBACK (webkit_osr_document_load_finished_callback), 247 G_CALLBACK (webkit_osr_document_load_finished_callback),
248 xw); 248 xw);
249 249
250 g_signal_connect (G_OBJECT (xw->widget_osr), 250 g_signal_connect (G_OBJECT (xw->widget_osr),
251 "download-requested", 251 "download-requested",
252 G_CALLBACK (webkit_osr_download_callback), 252 G_CALLBACK (webkit_osr_download_callback),
253 xw); 253 xw);
254 254
255 g_signal_connect (G_OBJECT (xw->widget_osr), 255 g_signal_connect (G_OBJECT (xw->widget_osr),
256 "mime-type-policy-decision-requested", 256 "mime-type-policy-decision-requested",
257 G_CALLBACK (webkit_osr_mime_type_policy_typedecision_requested_callback), 257 G_CALLBACK (webkit_osr_mime_type_policy_typedecision_requested_callback),
258 xw); 258 xw);
259 259
260 g_signal_connect (G_OBJECT (xw->widget_osr), 260 g_signal_connect (G_OBJECT (xw->widget_osr),
261 "new-window-policy-decision-requested", 261 "new-window-policy-decision-requested",
262 G_CALLBACK (webkit_osr_new_window_policy_decision_requested_callback), 262 G_CALLBACK (webkit_osr_new_window_policy_decision_requested_callback),
263 xw); 263 xw);
264 264
265 g_signal_connect (G_OBJECT (xw->widget_osr), 265 g_signal_connect (G_OBJECT (xw->widget_osr),
266 "navigation-policy-decision-requested", 266 "navigation-policy-decision-requested",
@@ -283,7 +283,7 @@ TYPE is a symbol which can take one of the following values:
283} 283}
284 284
285DEFUN ("get-buffer-xwidgets", Fget_buffer_xwidgets, Sget_buffer_xwidgets, 1, 1, 0, 285DEFUN ("get-buffer-xwidgets", Fget_buffer_xwidgets, Sget_buffer_xwidgets, 1, 1, 0,
286 doc: /* Return the xwidgets associated with BUFFER. 286 doc: /* Return a list of xwidgets associated with BUFFER.
287BUFFER may be a buffer or the name of one. 287BUFFER may be a buffer or the name of one.
288 */ 288 */
289 ) 289 )
@@ -319,7 +319,7 @@ buttonclick_handler (GtkWidget * widget, gpointer data)
319 Lisp_Object xwidget_view, xwidget; 319 Lisp_Object xwidget_view, xwidget;
320 XSETXWIDGET_VIEW (xwidget_view, (struct xwidget_view *) data); 320 XSETXWIDGET_VIEW (xwidget_view, (struct xwidget_view *) data);
321 xwidget = Fxwidget_view_model (xwidget_view); 321 xwidget = Fxwidget_view_model (xwidget_view);
322 322
323 struct input_event event; 323 struct input_event event;
324 Lisp_Object frame = Fwindow_frame (Fxwidget_view_window (xwidget_view)); 324 Lisp_Object frame = Fwindow_frame (Fxwidget_view_window (xwidget_view));
325 struct frame *f = XFRAME (frame); 325 struct frame *f = XFRAME (frame);
@@ -469,10 +469,10 @@ webkit_osr_document_load_finished_callback (WebKitWebView *webkitwebview,
469{ 469{
470 //TODO this event sending code should be refactored 470 //TODO this event sending code should be refactored
471 // struct xwidget *xw = (struct xwidget *) data; 471 // struct xwidget *xw = (struct xwidget *) data;
472 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webkitwebview), XG_XWIDGET); 472 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webkitwebview), XG_XWIDGET);
473 printf("webkit finished loading\n"); 473 printf("webkit finished loading\n");
474 474
475 store_xwidget_event_string(xw, 475 store_xwidget_event_string(xw,
476 "document-load-finished", ""); 476 "document-load-finished", "");
477} 477}
478 478
@@ -484,7 +484,7 @@ webkit_osr_download_callback (WebKitWebView *webkitwebview,
484 //TODO this event sending code should be refactored 484 //TODO this event sending code should be refactored
485 struct input_event event; 485 struct input_event event;
486 // struct xwidget *xw = (struct xwidget *) data; 486 // struct xwidget *xw = (struct xwidget *) data;
487 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webkitwebview), XG_XWIDGET); 487 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webkitwebview), XG_XWIDGET);
488 printf("download requested %s\n", webkit_download_get_uri (arg1)); 488 printf("download requested %s\n", webkit_download_get_uri (arg1));
489 489
490 490
@@ -523,10 +523,10 @@ webkit_osr_new_window_policy_decision_requested_callback(WebKitWebView
523 WebKitWebPolicyDecision *policy_decision, 523 WebKitWebPolicyDecision *policy_decision,
524 gpointer user_data) 524 gpointer user_data)
525{ 525{
526 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webView), XG_XWIDGET); 526 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webView), XG_XWIDGET);
527 printf("webkit_osr_new_window_policy_decision_requested_callback %s\n", 527 printf("webkit_osr_new_window_policy_decision_requested_callback %s\n",
528 webkit_web_navigation_action_get_original_uri (navigation_action)); 528 webkit_web_navigation_action_get_original_uri (navigation_action));
529 529
530 store_xwidget_event_string(xw, "new-window-policy-decision-requested", webkit_web_navigation_action_get_original_uri (navigation_action) 530 store_xwidget_event_string(xw, "new-window-policy-decision-requested", webkit_web_navigation_action_get_original_uri (navigation_action)
531 ); 531 );
532 return FALSE; 532 return FALSE;
@@ -540,7 +540,7 @@ webkit_osr_navigation_policy_decision_requested_callback(WebKitWebView
540 WebKitWebPolicyDecision *policy_decision, 540 WebKitWebPolicyDecision *policy_decision,
541 gpointer user_data) 541 gpointer user_data)
542{ 542{
543 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webView), XG_XWIDGET); 543 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webView), XG_XWIDGET);
544 printf("webkit_osr_navigation_policy_decision_requested_callback %s\n", 544 printf("webkit_osr_navigation_policy_decision_requested_callback %s\n",
545 webkit_web_navigation_action_get_original_uri (navigation_action)); 545 webkit_web_navigation_action_get_original_uri (navigation_action));
546 store_xwidget_event_string(xw, "navigation-policy-decision-requested", webkit_web_navigation_action_get_original_uri (navigation_action) 546 store_xwidget_event_string(xw, "navigation-policy-decision-requested", webkit_web_navigation_action_get_original_uri (navigation_action)
@@ -576,8 +576,8 @@ xwidget_osr_event_forward (GtkWidget *widget,
576 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); 576 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET);
577 GdkEvent* eventcopy = gdk_event_copy(event); 577 GdkEvent* eventcopy = gdk_event_copy(event);
578 //GdkEvent* eventcopy = gdk_event_new(GDK_BUTTON_PRESS); 578 //GdkEvent* eventcopy = gdk_event_new(GDK_BUTTON_PRESS);
579 579
580 580
581 //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xw->widget_osr); 581 //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xw->widget_osr);
582 //eventcopy->any.window = gtk_widget_get_window(GTK_WIDGET (xw->widgetwindow_osr)); 582 //eventcopy->any.window = gtk_widget_get_window(GTK_WIDGET (xw->widgetwindow_osr));
583 //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xwgir_create_debug); 583 //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xwgir_create_debug);
@@ -585,16 +585,16 @@ xwidget_osr_event_forward (GtkWidget *widget,
585 //eventcopy->any.window = gtk_button_get_event_window(GTK_BUTTON(xw->widget_osr));//gtk_widget_get_window(xwgir_create_debug); 585 //eventcopy->any.window = gtk_button_get_event_window(GTK_BUTTON(xw->widget_osr));//gtk_widget_get_window(xwgir_create_debug);
586 //eventcopy->button.x=200; eventcopy->button.y=200; 586 //eventcopy->button.x=200; eventcopy->button.y=200;
587 //event->button.button = GDK_BUTTON_PRIMARY; //debug 587 //event->button.button = GDK_BUTTON_PRIMARY; //debug
588 588
589 //eventcopy->any.window = xw->widgetwindow_osr;//gtk_widget_get_window(xwgir_create_debug); 589 //eventcopy->any.window = xw->widgetwindow_osr;//gtk_widget_get_window(xwgir_create_debug);
590 /* eventcopy->any.send_event = TRUE; */ 590 /* eventcopy->any.send_event = TRUE; */
591 /* eventcopy->button.time = GDK_CURRENT_TIME; */ 591 /* eventcopy->button.time = GDK_CURRENT_TIME; */
592 /* eventcopy->button.device = event->button.device; */ 592 /* eventcopy->button.device = event->button.device; */
593 593
594 594
595 printf("xwidget_osr_event_forward redirect event to window:%d\n", ((GdkEventAny*)eventcopy)->window); 595 printf("xwidget_osr_event_forward redirect event to window:%d\n", ((GdkEventAny*)eventcopy)->window);
596 printf("A type:%d x:%f y:%f \n", event->type, event->button.x, event->button.y); 596 printf("A type:%d x:%f y:%f \n", event->type, event->button.x, event->button.y);
597 printf("B type:%d x:%f y:%f \n", eventcopy->type, eventcopy->button.x, eventcopy->button.y); 597 printf("B type:%d x:%f y:%f \n", eventcopy->type, eventcopy->button.x, eventcopy->button.y);
598 //gtk_button_get_event_window(xwgir_create_debug); 598 //gtk_button_get_event_window(xwgir_create_debug);
599 gtk_main_do_event(eventcopy); //TODO this will leak events. they should be deallocated later, perhaps in xwgir_event_callback 599 gtk_main_do_event(eventcopy); //TODO this will leak events. they should be deallocated later, perhaps in xwgir_event_callback
600 //printf("gtk_widget_event:%d\n",gtk_widget_event(xw->widget_osr, eventcopy)); 600 //printf("gtk_widget_event:%d\n",gtk_widget_event(xw->widget_osr, eventcopy));
@@ -608,8 +608,9 @@ xwidget_osr_event_forward (GtkWidget *widget,
608GIRepository *girepository ; 608GIRepository *girepository ;
609 609
610DEFUN ("xwgir-require-namespace", Fxwgir_require_namespace, Sxwgir_require_namespace, 2,2,0, 610DEFUN ("xwgir-require-namespace", Fxwgir_require_namespace, Sxwgir_require_namespace, 2,2,0,
611 doc: /*require a namespace. must be done for all namespaces we want to use, before using other xwgir functions.*/) 611 doc: /* Require a GObject Introspection namespace.
612 (Lisp_Object lnamespace, Lisp_Object lnamespace_version) 612 This must be done for all namespaces we want to use, before using other xwgir functions.*/)
613 (Lisp_Object lnamespace, Lisp_Object lnamespace_version)
613{ 614{
614 char* namespace = SDATA(lnamespace); 615 char* namespace = SDATA(lnamespace);
615 char* namespace_version = SDATA(lnamespace_version); 616 char* namespace_version = SDATA(lnamespace_version);
@@ -643,7 +644,7 @@ GtkWidget* xwgir_create(char* class, char* namespace){
643 NULL); 644 NULL);
644 xwgir_create_debug = return_value.v_pointer; 645 xwgir_create_debug = return_value.v_pointer;
645 return return_value.v_pointer; 646 return return_value.v_pointer;
646 647
647} 648}
648 649
649int 650int
@@ -656,7 +657,7 @@ xwgir_convert_lisp_to_gir_arg(GIArgument* giarg,
656 gboolean is_pointer; 657 gboolean is_pointer;
657 gboolean is_enum; 658 gboolean is_enum;
658 tag = g_type_info_get_tag (g_arg_info_get_type (arginfo)); 659 tag = g_type_info_get_tag (g_arg_info_get_type (arginfo));
659 660
660 switch (tag) 661 switch (tag)
661 { 662 {
662 case GI_TYPE_TAG_BOOLEAN: 663 case GI_TYPE_TAG_BOOLEAN:
@@ -702,7 +703,7 @@ xwgir_convert_lisp_to_gir_arg(GIArgument* giarg,
702 //giarg->v_string = SDATA(lisparg); 703 //giarg->v_string = SDATA(lisparg);
703 giarg->v_pointer = SDATA(lisparg); 704 giarg->v_pointer = SDATA(lisparg);
704 break; 705 break;
705 706
706 case GI_TYPE_TAG_ARRAY: 707 case GI_TYPE_TAG_ARRAY:
707 case GI_TYPE_TAG_GLIST: 708 case GI_TYPE_TAG_GLIST:
708 case GI_TYPE_TAG_GSLIST: 709 case GI_TYPE_TAG_GSLIST:
@@ -723,7 +724,7 @@ xwgir_convert_lisp_to_gir_arg(GIArgument* giarg,
723#if 0 724#if 0
724void 725void
725refactor_attempt(){ 726refactor_attempt(){
726 //this methhod should be called from xwgir-xwidget-call-method and from xwgir xwidget construction 727 //this methhod should be called from xwgir-xwidget-call-method and from xwgir xwidget construction
727 char* class = SDATA(Fcar(Fcdr(Fget(xw->type, QCxwgir_class)))); 728 char* class = SDATA(Fcar(Fcdr(Fget(xw->type, QCxwgir_class))));
728 729
729 GIObjectInfo* obj_info = g_irepository_find_by_name(girepository, namespace, class); 730 GIObjectInfo* obj_info = g_irepository_find_by_name(girepository, namespace, class);
@@ -747,17 +748,21 @@ refactor_attempt(){
747 in_args, argscount + 1, 748 in_args, argscount + 1,
748 NULL, 0, 749 NULL, 0,
749 &return_value, 750 &return_value,
750 &error)) { 751 &error)) {
751 //g_error("ERROR: %s\n", error->message); 752 //g_error("ERROR: %s\n", error->message);
752 printf("invokation error\n"); 753 printf("invokation error\n");
753 return Qnil; 754 return Qnil;
754 } 755 }
755 return Qt; 756 return Qt;
756} 757}
757#endif /* 0 */ 758#endif /* 0 */
758 759
759DEFUN ("xwgir-xwidget-call-method", Fxwgir_xwidget_call_method, Sxwgir_xwidget_call_method, 3, 3, 0, 760DEFUN ("xwgir-xwidget-call-method", Fxwgir_xwidget_call_method, Sxwgir_xwidget_call_method, 3, 3, 0,
760 doc: /* call xwidget object method.*/) 761 doc: /* Call Xwidget object method using GObject Introspection.
762 XWIDGET is the xwidget instance to act upon.
763 METHOD is the Gobject intrsopsection method name.
764 ARGUMENTS is a list of arguments for the call. They will be converted to GObject types from Lisp types.
765 */)
761 (Lisp_Object xwidget, Lisp_Object method, Lisp_Object arguments) 766 (Lisp_Object xwidget, Lisp_Object method, Lisp_Object arguments)
762{ 767{
763 CHECK_XWIDGET (xwidget); 768 CHECK_XWIDGET (xwidget);
@@ -766,19 +771,19 @@ DEFUN ("xwgir-xwidget-call-method", Fxwgir_xwidget_call_method, Sxwgir_xwidget_
766 GIArgument in_args[20]; 771 GIArgument in_args[20];
767 772
768 773
769 struct xwidget* xw; 774 struct xwidget* xw;
770 if (NILP (xwidget)) { printf("ERROR xwidget nil\n"); return Qnil; }; 775 if (NILP (xwidget)) { printf("ERROR xwidget nil\n"); return Qnil; };
771 xw = XXWIDGET(xwidget); 776 xw = XXWIDGET(xwidget);
772 if(NULL == xw) printf("ERROR xw is 0\n"); 777 if(NULL == xw) printf("ERROR xw is 0\n");
773 char* namespace = SDATA(Fcar(Fget(xw->type, QCxwgir_class))); 778 char* namespace = SDATA(Fcar(Fget(xw->type, QCxwgir_class)));
774 //we need the concrete widget, which happens in 2 ways depending on OSR or not TODO 779 //we need the concrete widget, which happens in 2 ways depending on OSR or not TODO
775 GtkWidget* widget = NULL; 780 GtkWidget* widget = NULL;
776 if(NULL == xw->widget_osr) { 781 if(NULL == xw->widget_osr) {
777 widget = xwidget_view_lookup (xw, XWINDOW(FRAME_SELECTED_WINDOW (SELECTED_FRAME ()))) -> widget; 782 widget = xwidget_view_lookup (xw, XWINDOW(FRAME_SELECTED_WINDOW (SELECTED_FRAME ()))) -> widget;
778 } else { 783 } else {
779 widget = xw->widget_osr; 784 widget = xw->widget_osr;
780 } 785 }
781 786
782 //char* class = SDATA(SYMBOL_NAME(xw->type)); //this works but is unflexible 787 //char* class = SDATA(SYMBOL_NAME(xw->type)); //this works but is unflexible
783 //figure out the class from the widget instead 788 //figure out the class from the widget instead
784 /* printf("type class: %s %s\n", G_OBJECT_TYPE_NAME(widget), G_OBJECT_CLASS_NAME(G_OBJECT_GET_CLASS(widget))); */ 789 /* printf("type class: %s %s\n", G_OBJECT_TYPE_NAME(widget), G_OBJECT_CLASS_NAME(G_OBJECT_GET_CLASS(widget))); */
@@ -810,11 +815,11 @@ DEFUN ("xwgir-xwidget-call-method", Fxwgir_xwidget_call_method, Sxwgir_xwidget_
810 in_args, argscount + 1, 815 in_args, argscount + 1,
811 NULL, 0, 816 NULL, 0,
812 &return_value, 817 &return_value,
813 &error)) { 818 &error)) {
814 //g_error("ERROR: %s\n", error->message); 819 //g_error("ERROR: %s\n", error->message);
815 printf("invokation error\n"); 820 printf("invokation error\n");
816 return Qnil; 821 return Qnil;
817 } 822 }
818 return Qt; 823 return Qt;
819} 824}
820 825
@@ -879,7 +884,7 @@ xwidget_osr_event_set_embedder (GtkWidget *widget,
879 gtk_widget_get_window (xv->widget)); 884 gtk_widget_get_window (xv->widget));
880} 885}
881 886
882 887
883/* initializes and does initial placement of an xwidget view on screen */ 888/* initializes and does initial placement of an xwidget view on screen */
884struct xwidget_view* 889struct xwidget_view*
885xwidget_init_view (struct xwidget *xww, 890xwidget_init_view (struct xwidget *xww,
@@ -892,7 +897,7 @@ xwidget_init_view (struct xwidget *xww,
892 897
893 XSETXWIDGET_VIEW (val, xv) ; 898 XSETXWIDGET_VIEW (val, xv) ;
894 Vxwidget_view_list = Fcons (val, Vxwidget_view_list); 899 Vxwidget_view_list = Fcons (val, Vxwidget_view_list);
895 900
896 XSETWINDOW(xv->w, s->w); 901 XSETWINDOW(xv->w, s->w);
897 XSETXWIDGET(xv->model, xww); 902 XSETXWIDGET(xv->model, xww);
898 903
@@ -925,7 +930,7 @@ xwidget_init_view (struct xwidget *xww,
925 xv->widget = gtk_drawing_area_new(); 930 xv->widget = gtk_drawing_area_new();
926 g_signal_connect (G_OBJECT ( xv->widget), "draw", 931 g_signal_connect (G_OBJECT ( xv->widget), "draw",
927 G_CALLBACK (xwidget_osr_draw_callback), NULL); 932 G_CALLBACK (xwidget_osr_draw_callback), NULL);
928 933
929 } else if (EQ(xww->type, Qwebkit_osr)|| 934 } else if (EQ(xww->type, Qwebkit_osr)||
930 EQ(xww->type, Qsocket_osr)|| 935 EQ(xww->type, Qsocket_osr)||
931 (!NILP (Fget(xww->type, QCxwgir_class))))//xwgir widgets are OSR 936 (!NILP (Fget(xww->type, QCxwgir_class))))//xwgir widgets are OSR
@@ -953,12 +958,12 @@ xwidget_init_view (struct xwidget *xww,
953 g_signal_connect (G_OBJECT (xv->widget), "enter-notify-event", 958 g_signal_connect (G_OBJECT (xv->widget), "enter-notify-event",
954 G_CALLBACK (xwidget_osr_event_set_embedder), xv); 959 G_CALLBACK (xwidget_osr_event_set_embedder), xv);
955 } 960 }
956 961
957 //draw 962 //draw
958 g_signal_connect (G_OBJECT (xv->widget), "draw", 963 g_signal_connect (G_OBJECT (xv->widget), "draw",
959 G_CALLBACK (xwidget_osr_draw_callback), NULL); 964 G_CALLBACK (xwidget_osr_draw_callback), NULL);
960 965
961 } 966 }
962 //else return NULL; 967 //else return NULL;
963 968
964 //widget realization 969 //widget realization
@@ -967,7 +972,7 @@ xwidget_init_view (struct xwidget *xww,
967 //is partially obscured by other emacs windows 972 //is partially obscured by other emacs windows
968 //other containers than gtk_fixed where explored, but gtk_fixed had the most predictable behaviour so far. 973 //other containers than gtk_fixed where explored, but gtk_fixed had the most predictable behaviour so far.
969 xv->emacswindow = FRAME_GTK_WIDGET (s->f); 974 xv->emacswindow = FRAME_GTK_WIDGET (s->f);
970 xv->widgetwindow = gtk_fixed_new (); 975 xv->widgetwindow = gtk_fixed_new ();
971 gtk_widget_set_has_window(xv->widgetwindow, TRUE); 976 gtk_widget_set_has_window(xv->widgetwindow, TRUE);
972 gtk_container_add (GTK_CONTAINER (xv->widgetwindow), xv->widget); 977 gtk_container_add (GTK_CONTAINER (xv->widgetwindow), xv->widget);
973 978
@@ -986,7 +991,7 @@ xwidget_init_view (struct xwidget *xww,
986 gtk_widget_show_all (xv->widgetwindow); 991 gtk_widget_show_all (xv->widgetwindow);
987 992
988 993
989 994
990 //widgettype specific initialization only possible after realization 995 //widgettype specific initialization only possible after realization
991 if (EQ(xww->type, Qsocket)) { 996 if (EQ(xww->type, Qsocket)) {
992 printf ("xwid:%d socket id:%x %d\n", 997 printf ("xwid:%d socket id:%x %d\n",
@@ -1019,7 +1024,7 @@ xwidget_init_view (struct xwidget *xww,
1019 G_CALLBACK (offscreen_to_embedder), NULL); 1024 G_CALLBACK (offscreen_to_embedder), NULL);
1020 } 1025 }
1021 //////////////////////////////////////// 1026 ////////////////////////////////////////
1022 1027
1023 return xv; 1028 return xv;
1024} 1029}
1025 1030
@@ -1105,7 +1110,7 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
1105 1110
1106#ifdef HAVE_WEBKIT_OSR 1111#ifdef HAVE_WEBKIT_OSR
1107 1112
1108//FUGLY macro that checks WEBKIT_IS_WEB_VIEW(xw->widget_osr) first 1113//FUGLY macro that checks WEBKIT_IS_WEB_VIEW(xw->widget_osr) first
1109#define WEBKIT_FN_INIT() \ 1114#define WEBKIT_FN_INIT() \
1110 struct xwidget* xw; \ 1115 struct xwidget* xw; \
1111 CHECK_XWIDGET (xwidget); \ 1116 CHECK_XWIDGET (xwidget); \
@@ -1120,7 +1125,7 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
1120 1125
1121DEFUN ("xwidget-webkit-goto-uri", Fxwidget_webkit_goto_uri, Sxwidget_webkit_goto_uri, 1126DEFUN ("xwidget-webkit-goto-uri", Fxwidget_webkit_goto_uri, Sxwidget_webkit_goto_uri,
1122 2, 2, 0, 1127 2, 2, 0,
1123 doc: /* webkit goto uri.*/) 1128 doc: /* Make the webkit instance referenced by XWIDGET browse URI. */)
1124 (Lisp_Object xwidget, Lisp_Object uri) 1129 (Lisp_Object xwidget, Lisp_Object uri)
1125{ 1130{
1126 WEBKIT_FN_INIT(); 1131 WEBKIT_FN_INIT();
@@ -1141,7 +1146,9 @@ DEFUN ("xwidget-webkit-execute-script", Fxwidget_webkit_execute_script, Sxwidge
1141 1146
1142DEFUN ("xwidget-webkit-get-title", Fxwidget_webkit_get_title, Sxwidget_webkit_get_title, 1147DEFUN ("xwidget-webkit-get-title", Fxwidget_webkit_get_title, Sxwidget_webkit_get_title,
1143 1, 1, 0, 1148 1, 1, 0,
1144 doc: /* webkit get title. can be used to work around exec method lacks return val*/) 1149 doc: /* Get the title from the Webkit instance in XWIDGET.
1150 This can be used to work around the lack of a return value from the exec method.
1151 */)
1145 (Lisp_Object xwidget) 1152 (Lisp_Object xwidget)
1146{ 1153{
1147 //TODO support multibyte strings 1154 //TODO support multibyte strings
@@ -1202,7 +1209,7 @@ xwidget_webkit_dom_dump(WebKitDOMNode* parent)
1202 } 1209 }
1203 list = webkit_dom_node_get_child_nodes(parent); 1210 list = webkit_dom_node_get_child_nodes(parent);
1204 length = webkit_dom_node_list_get_length(list); 1211 length = webkit_dom_node_list_get_length(list);
1205 1212
1206 for (int i = 0; i < length; i++) { 1213 for (int i = 0; i < length; i++) {
1207 child = webkit_dom_node_list_item(list, i); 1214 child = webkit_dom_node_list_item(list, i);
1208 //if(webkit_dom_node_has_child_nodes(child)) 1215 //if(webkit_dom_node_has_child_nodes(child))
@@ -1213,7 +1220,7 @@ xwidget_webkit_dom_dump(WebKitDOMNode* parent)
1213 1220
1214DEFUN ("xwidget-webkit-dom-dump", Fxwidget_webkit_dom_dump, Sxwidget_webkit_dom_dump, 1221DEFUN ("xwidget-webkit-dom-dump", Fxwidget_webkit_dom_dump, Sxwidget_webkit_dom_dump,
1215 1, 1, 0, 1222 1, 1, 0,
1216 doc: /* webkit dom dump*/) 1223 doc: /*Dump the DOM contained in the webkit instance in XWIDGET.*/)
1217 (Lisp_Object xwidget) 1224 (Lisp_Object xwidget)
1218{ 1225{
1219 WEBKIT_FN_INIT(); 1226 WEBKIT_FN_INIT();
@@ -1230,7 +1237,9 @@ DEFUN ("xwidget-webkit-dom-dump", Fxwidget_webkit_dom_dump, Sxwidget_webkit_dom
1230 1237
1231 1238
1232DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc: 1239DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc:
1233 /* resize xwidgets*/) 1240 /* Resize XWIDGET.
1241 NEW_WIDTH NEW_HEIGHT defines the new size.)
1242 */)
1234 (Lisp_Object xwidget, Lisp_Object new_width, Lisp_Object new_height) 1243 (Lisp_Object xwidget, Lisp_Object new_width, Lisp_Object new_height)
1235{ 1244{
1236 CHECK_XWIDGET (xwidget); 1245 CHECK_XWIDGET (xwidget);
@@ -1260,7 +1269,7 @@ DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc:
1260 gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); 1269 gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height);
1261 //gtk_container_resize_children ( GTK_WINDOW(xw->widgetwindow_osr)); 1270 //gtk_container_resize_children ( GTK_WINDOW(xw->widgetwindow_osr));
1262 gtk_container_resize_children (GTK_CONTAINER(xw->widgetwindow_osr)); 1271 gtk_container_resize_children (GTK_CONTAINER(xw->widgetwindow_osr));
1263 1272
1264 } 1273 }
1265 1274
1266 for (Lisp_Object tail = Vxwidget_view_list; CONSP (tail); tail = XCDR (tail)) //TODO MVC refactor lazy linear search 1275 for (Lisp_Object tail = Vxwidget_view_list; CONSP (tail); tail = XCDR (tail)) //TODO MVC refactor lazy linear search
@@ -1278,7 +1287,11 @@ DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc:
1278} 1287}
1279 1288
1280DEFUN ("xwidget-size-request", Fxwidget_size_request, Sxwidget_size_request, 1, 1, 0, doc: 1289DEFUN ("xwidget-size-request", Fxwidget_size_request, Sxwidget_size_request, 1, 1, 0, doc:
1281 /* desired size (TODO crashes if arg not osr widget)*/) 1290- /* Desired size of the XWIDGET.
1291
1292 This can be used to read the xwidget desired size, and resizes the Emacs allocated area accordingly.
1293
1294(TODO crashes if arg not osr widget)*/)
1282 (Lisp_Object xwidget) 1295 (Lisp_Object xwidget)
1283{ 1296{
1284 CHECK_XWIDGET (xwidget); 1297 CHECK_XWIDGET (xwidget);
@@ -1306,7 +1319,9 @@ DEFUN ("xwidget-view-p", Fxwidget_view_p, Sxwidget_view_p, 1, 1, 0,
1306 return XWIDGET_VIEW_P (object) ? Qt : Qnil; 1319 return XWIDGET_VIEW_P (object) ? Qt : Qnil;
1307} 1320}
1308 1321
1309DEFUN ("xwidget-info", Fxwidget_info , Sxwidget_info, 1,1,0, doc: /* get xwidget props */) 1322DEFUN ("xwidget-info", Fxwidget_info , Sxwidget_info, 1,1,0,
1323 doc: /* Get XWIDGET properties.
1324 Currently type, title, width, height.*/)
1310 (Lisp_Object xwidget) 1325 (Lisp_Object xwidget)
1311{ 1326{
1312 CHECK_XWIDGET (xwidget); 1327 CHECK_XWIDGET (xwidget);
@@ -1324,7 +1339,9 @@ DEFUN ("xwidget-info", Fxwidget_info , Sxwidget_info, 1,1,0, doc: /* get xwidget
1324 return info; 1339 return info;
1325} 1340}
1326 1341
1327DEFUN ("xwidget-view-info", Fxwidget_view_info , Sxwidget_view_info, 1, 1, 0, doc: /* get xwidget view props */) 1342DEFUN ("xwidget-view-info", Fxwidget_view_info , Sxwidget_view_info, 1, 1, 0, doc:
1343 /* Get XWIDGET-VIEW properties.
1344 Currently x,y clip right, clip bottom, clip top, clip left*/)
1328 (Lisp_Object xwidget_view) 1345 (Lisp_Object xwidget_view)
1329{ 1346{
1330 CHECK_XWIDGET_VIEW (xwidget_view); 1347 CHECK_XWIDGET_VIEW (xwidget_view);
@@ -1344,7 +1361,7 @@ DEFUN ("xwidget-view-info", Fxwidget_view_info , Sxwidget_view_info, 1, 1, 0, do
1344 1361
1345DEFUN ("xwidget-view-model", Fxwidget_view_model, Sxwidget_view_model, 1362DEFUN ("xwidget-view-model", Fxwidget_view_model, Sxwidget_view_model,
1346 1, 1, 0, 1363 1, 1, 0,
1347 doc: /* get xwidget view model */) 1364 doc: /* Get XWIDGET-VIEW model. */)
1348 (Lisp_Object xwidget_view) 1365 (Lisp_Object xwidget_view)
1349{ 1366{
1350 CHECK_XWIDGET_VIEW (xwidget_view); 1367 CHECK_XWIDGET_VIEW (xwidget_view);
@@ -1353,14 +1370,15 @@ DEFUN ("xwidget-view-model", Fxwidget_view_model, Sxwidget_view_model,
1353 1370
1354DEFUN ("xwidget-view-window", Fxwidget_view_window, Sxwidget_view_window, 1371DEFUN ("xwidget-view-window", Fxwidget_view_window, Sxwidget_view_window,
1355 1, 1, 0, 1372 1, 1, 0,
1356 doc: /* get xwidget view window */) 1373 doc: /* Get XWIDGET-VIEW window. */)
1357 (Lisp_Object xwidget_view) 1374 (Lisp_Object xwidget_view)
1358{ 1375{
1359 CHECK_XWIDGET_VIEW (xwidget_view); 1376 CHECK_XWIDGET_VIEW (xwidget_view);
1360 return XXWIDGET_VIEW (xwidget_view)->w; 1377 return XXWIDGET_VIEW (xwidget_view)->w;
1361} 1378}
1362 1379
1363DEFUN ("xwidget-send-keyboard-event", Fxwidget_send_keyboard_event, Sxwidget_send_keyboard_event, 2, 2, 0, doc:/* synthesize a kbd event for a xwidget. */ 1380DEFUN ("xwidget-send-keyboard-event", Fxwidget_send_keyboard_event, Sxwidget_send_keyboard_event, 2, 2, 0,
1381 doc:/* Synthesize a kbd event for XWIDGET. TODO crashes atm.. */
1364 ) 1382 )
1365 (Lisp_Object xwidget, Lisp_Object keydescriptor) 1383 (Lisp_Object xwidget, Lisp_Object keydescriptor)
1366{ 1384{
@@ -1377,7 +1395,7 @@ DEFUN ("xwidget-send-keyboard-event", Fxwidget_send_keyboard_event, Sxwidget_sen
1377 Lisp_Object window; 1395 Lisp_Object window;
1378 //popup_activated_flag = 1; //TODO just a hack 1396 //popup_activated_flag = 1; //TODO just a hack
1379 gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), keyval, &keys, &n_keys); 1397 gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), keyval, &keys, &n_keys);
1380 1398
1381 xw = XXWIDGET(xwidget); 1399 xw = XXWIDGET(xwidget);
1382 1400
1383 ev = (GdkEventKey*)gdk_event_new(GDK_KEY_PRESS); 1401 ev = (GdkEventKey*)gdk_event_new(GDK_KEY_PRESS);
@@ -1393,14 +1411,14 @@ DEFUN ("xwidget-send-keyboard-event", Fxwidget_send_keyboard_event, Sxwidget_sen
1393 widget = xw->widget_osr; 1411 widget = xw->widget_osr;
1394 else 1412 else
1395 widget = xwidget_view_lookup(xw, XWINDOW(window))->widget; 1413 widget = xwidget_view_lookup(xw, XWINDOW(window))->widget;
1396 1414
1397 ev->window = gtk_widget_get_window(widget); 1415 ev->window = gtk_widget_get_window(widget);
1398 gtk_widget_grab_focus(widget); 1416 gtk_widget_grab_focus(widget);
1399 ev->send_event = FALSE; 1417 ev->send_event = FALSE;
1400 1418
1401 ev->hardware_keycode = keys[0].keycode; 1419 ev->hardware_keycode = keys[0].keycode;
1402 ev->group = keys[0].group; 1420 ev->group = keys[0].group;
1403 1421
1404 ev->keyval = keyval; 1422 ev->keyval = keyval;
1405 ev->time = GDK_CURRENT_TIME; 1423 ev->time = GDK_CURRENT_TIME;
1406 1424
@@ -1409,7 +1427,7 @@ DEFUN ("xwidget-send-keyboard-event", Fxwidget_send_keyboard_event, Sxwidget_sen
1409 gdk_event_set_device ((GdkEvent*)ev, gdk_device_manager_get_client_pointer(manager)); 1427 gdk_event_set_device ((GdkEvent*)ev, gdk_device_manager_get_client_pointer(manager));
1410 gdk_event_put((GdkEvent*)ev); 1428 gdk_event_put((GdkEvent*)ev);
1411 //g_signal_emit_by_name(ev->window,"key-press-event", ev); 1429 //g_signal_emit_by_name(ev->window,"key-press-event", ev);
1412 1430
1413 ev->type = GDK_KEY_RELEASE; 1431 ev->type = GDK_KEY_RELEASE;
1414 gdk_event_put((GdkEvent*)ev); 1432 gdk_event_put((GdkEvent*)ev);
1415 //g_signal_emit_by_name(ev->window,"key-release-event", ev); 1433 //g_signal_emit_by_name(ev->window,"key-release-event", ev);
@@ -1454,7 +1472,7 @@ WINDOW if specified, otherwise it uses the selected window. */)
1454 && EQ (Fxwidget_view_window (xwidget_view), window)) 1472 && EQ (Fxwidget_view_window (xwidget_view), window))
1455 return xwidget_view; 1473 return xwidget_view;
1456 } 1474 }
1457 1475
1458 return Qnil; 1476 return Qnil;
1459} 1477}
1460 1478
@@ -1562,7 +1580,7 @@ syms_of_xwidget (void)
1562 defsubr (&Sxwidget_plist); 1580 defsubr (&Sxwidget_plist);
1563 defsubr (&Sxwidget_buffer); 1581 defsubr (&Sxwidget_buffer);
1564 defsubr (&Sset_xwidget_plist); 1582 defsubr (&Sset_xwidget_plist);
1565 1583
1566 DEFSYM (Qxwidget, "xwidget"); 1584 DEFSYM (Qxwidget, "xwidget");
1567 1585
1568 DEFSYM (QCxwidget, ":xwidget"); 1586 DEFSYM (QCxwidget, ":xwidget");
@@ -1762,7 +1780,7 @@ xwidget_end_redisplay (struct window *w, struct glyph_matrix *matrix)
1762 1780
1763 //this only takes care of xwidgets in active windows. 1781 //this only takes care of xwidgets in active windows.
1764 //if a window goes away from screen xwidget views wust be deleted 1782 //if a window goes away from screen xwidget views wust be deleted
1765 1783
1766 // dump_glyph_matrix(matrix, 2); 1784 // dump_glyph_matrix(matrix, 2);
1767 for (i = 0; i < matrix->nrows; ++i) 1785 for (i = 0; i < matrix->nrows; ++i)
1768 { 1786 {