diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/xwidget.c | 160 |
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 | ||
| 165 | GtkWidget* xwgir_create(char* class, char* namespace); | 165 | GtkWidget* xwgir_create(char* class, char* namespace); |
| 166 | static void | 166 | static void |
| 167 | send_xembed_ready_event (struct xwidget* xw, int xembedid); | 167 | send_xembed_ready_event (struct xwidget* xw, int xembedid); |
| 168 | DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 8, 0, | 168 | DEFUN ("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 | ||
| 171 | If BUFFER is nil it uses the current buffer. If BUFFER is a string and | 171 | If BUFFER is nil it uses the current buffer. If BUFFER is a string and |
| 172 | no such buffer exists, it is created. | 172 | no 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 | ||
| 285 | DEFUN ("get-buffer-xwidgets", Fget_buffer_xwidgets, Sget_buffer_xwidgets, 1, 1, 0, | 285 | DEFUN ("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. |
| 287 | BUFFER may be a buffer or the name of one. | 287 | BUFFER 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, | |||
| 608 | GIRepository *girepository ; | 608 | GIRepository *girepository ; |
| 609 | 609 | ||
| 610 | DEFUN ("xwgir-require-namespace", Fxwgir_require_namespace, Sxwgir_require_namespace, 2,2,0, | 610 | DEFUN ("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 | ||
| 649 | int | 650 | int |
| @@ -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 |
| 724 | void | 725 | void |
| 725 | refactor_attempt(){ | 726 | refactor_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 | ||
| 759 | DEFUN ("xwgir-xwidget-call-method", Fxwgir_xwidget_call_method, Sxwgir_xwidget_call_method, 3, 3, 0, | 760 | DEFUN ("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 */ |
| 884 | struct xwidget_view* | 889 | struct xwidget_view* |
| 885 | xwidget_init_view (struct xwidget *xww, | 890 | xwidget_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 | ||
| 1121 | DEFUN ("xwidget-webkit-goto-uri", Fxwidget_webkit_goto_uri, Sxwidget_webkit_goto_uri, | 1126 | DEFUN ("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 | ||
| 1142 | DEFUN ("xwidget-webkit-get-title", Fxwidget_webkit_get_title, Sxwidget_webkit_get_title, | 1147 | DEFUN ("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 | ||
| 1214 | DEFUN ("xwidget-webkit-dom-dump", Fxwidget_webkit_dom_dump, Sxwidget_webkit_dom_dump, | 1221 | DEFUN ("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 | ||
| 1232 | DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc: | 1239 | DEFUN ("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 | ||
| 1280 | DEFUN ("xwidget-size-request", Fxwidget_size_request, Sxwidget_size_request, 1, 1, 0, doc: | 1289 | DEFUN ("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 | ||
| 1309 | DEFUN ("xwidget-info", Fxwidget_info , Sxwidget_info, 1,1,0, doc: /* get xwidget props */) | 1322 | DEFUN ("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 | ||
| 1327 | DEFUN ("xwidget-view-info", Fxwidget_view_info , Sxwidget_view_info, 1, 1, 0, doc: /* get xwidget view props */) | 1342 | DEFUN ("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 | ||
| 1345 | DEFUN ("xwidget-view-model", Fxwidget_view_model, Sxwidget_view_model, | 1362 | DEFUN ("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 | ||
| 1354 | DEFUN ("xwidget-view-window", Fxwidget_view_window, Sxwidget_view_window, | 1371 | DEFUN ("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 | ||
| 1363 | DEFUN ("xwidget-send-keyboard-event", Fxwidget_send_keyboard_event, Sxwidget_send_keyboard_event, 2, 2, 0, doc:/* synthesize a kbd event for a xwidget. */ | 1380 | DEFUN ("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 | { |