aboutsummaryrefslogtreecommitdiffstats
path: root/src/xwidget.c
diff options
context:
space:
mode:
authorJoakim Verona2011-07-10 23:47:48 +0200
committerJoakim Verona2011-07-10 23:47:48 +0200
commite098c552ccd4be2c05898bb69df97ce35efa90b7 (patch)
tree11758196be04a6ec414100fd73419ffb582bde60 /src/xwidget.c
parentd812bba65d7f22a624c8cc19e9ec21ffe3720228 (diff)
downloademacs-e098c552ccd4be2c05898bb69df97ce35efa90b7.tar.gz
emacs-e098c552ccd4be2c05898bb69df97ce35efa90b7.zip
minor cleanups and doc
Diffstat (limited to 'src/xwidget.c')
-rw-r--r--src/xwidget.c57
1 files changed, 37 insertions, 20 deletions
diff --git a/src/xwidget.c b/src/xwidget.c
index 57243832ce3..6c712d1d707 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -90,8 +90,11 @@
90#endif 90#endif
91 91
92 92
93#include <wchar.h>
94
93#ifdef HAVE_WEBKIT 95#ifdef HAVE_WEBKIT
94#include <webkitgtk.h> 96#include <webkitgtk.h>
97
95#endif 98#endif
96 99
97 100
@@ -412,15 +415,10 @@ xwidget_osr_button_callback ( GtkWidget *widget,
412 GdkEvent *event, 415 GdkEvent *event,
413 gpointer user_data) 416 gpointer user_data)
414{ 417{
415 gdouble x, y;
416 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); 418 struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET);
417 GdkEventButton* eventcopy = gdk_event_copy(event); 419 GdkEvent* eventcopy = gdk_event_copy(event);
418 x = ((GdkEventButton*)event)->x;
419 y = ((GdkEventButton*)event)->y;
420
421 printf ("button callback %d %d\n",x,y);
422 420
423 eventcopy->window = gtk_widget_get_window(xw->widget_osr); 421 ((GdkEventButton*)eventcopy)->window = gtk_widget_get_window(xw->widget_osr);
424 gtk_main_do_event(eventcopy); //TODO this will leak events. they should be deallocated later 422 gtk_main_do_event(eventcopy); //TODO this will leak events. they should be deallocated later
425} 423}
426 424
@@ -620,7 +618,7 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
620{ 618{
621 /* 619 /*
622 this method is called by the redisplay engine and places the xwidget on screen. 620 this method is called by the redisplay engine and places the xwidget on screen.
623 moving and clpping 621 moving and clipping is done here. also view init.
624 622
625 */ 623 */
626 int box_line_hwidth = eabs (s->face->box_line_width); 624 int box_line_hwidth = eabs (s->face->box_line_width);
@@ -676,7 +674,7 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
676 || (xv->clip_top != clip_top) 674 || (xv->clip_top != clip_top)
677 || (xv->clip_left != clip_left)){ 675 || (xv->clip_left != clip_left)){
678 gtk_widget_set_size_request (GTK_WIDGET (xv->widgetwindow), clip_right + clip_left, clip_bottom + clip_top); 676 gtk_widget_set_size_request (GTK_WIDGET (xv->widgetwindow), clip_right + clip_left, clip_bottom + clip_top);
679 gtk_fixed_put(GTK_FIXED(xv->widgetwindow), xv->widget, -clip_left, -clip_top); 677 gtk_fixed_move(GTK_FIXED(xv->widgetwindow), xv->widget, -clip_left, -clip_top);
680 printf("reclip %d %d -> %d %d clip_top:%d clip_left:%d\n",xv->clip_right, xv->clip_bottom, clip_right, clip_bottom, clip_top , clip_left); 678 printf("reclip %d %d -> %d %d clip_top:%d clip_left:%d\n",xv->clip_right, xv->clip_bottom, clip_right, clip_bottom, clip_top , clip_left);
681 679
682 680
@@ -684,7 +682,7 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
684 } 682 }
685 //if emacs wants to repaint the area where the widget lives, queue a redraw 683 //if emacs wants to repaint the area where the widget lives, queue a redraw
686 if (!xwidget_hidden(xv)){ 684 if (!xwidget_hidden(xv)){
687 gtk_widget_queue_draw (xv->widgetwindow); 685 gtk_widget_queue_draw (GTK_WIDGET(xv->widgetwindow));
688 gtk_widget_queue_draw (xv->widget); 686 gtk_widget_queue_draw (xv->widget);
689 } 687 }
690} 688}
@@ -730,7 +728,7 @@ DEFUN ("xwidget-webkit-get-title", Fxwidget_webkit_get_title, Sxwidget_webkit_g
730{ 728{
731 //TODO support multibyte strings 729 //TODO support multibyte strings
732 const gchar* str=webkit_web_view_get_title( WEBKIT_WEB_VIEW(xid2xw(xwidget_id)->widget_osr)); 730 const gchar* str=webkit_web_view_get_title( WEBKIT_WEB_VIEW(xid2xw(xwidget_id)->widget_osr));
733 return make_string_from_bytes(str, wcslen(str), strlen(str)); 731 return make_string_from_bytes(str, wcslen((const wchar_t *)str), strlen(str));
734} 732}
735 733
736 734
@@ -798,18 +796,37 @@ DEFUN("xwidget-info", Fxwidget_info , Sxwidget_info, 1,1,0, doc: /* get xwidget
798 struct xwidget *xw = xid2xw(xwidget_id); 796 struct xwidget *xw = xid2xw(xwidget_id);
799 Lisp_Object info; 797 Lisp_Object info;
800 798
801 info = Fmake_vector (make_number (7), Qnil); 799 info = Fmake_vector (make_number (4), Qnil);
802 XVECTOR (info)->contents[0] = make_number(xw->id); 800 XVECTOR (info)->contents[0] = make_number(xw->id);
803 XVECTOR (info)->contents[1] = make_number(xw->type); 801 XVECTOR (info)->contents[1] = xw->type;
804 XVECTOR (info)->contents[2] = Qnil; //make_number(xw->x); 802 XVECTOR (info)->contents[2] = make_number(xw->width);
805 XVECTOR (info)->contents[3] = Qnil;//make_number(xw->y); 803 XVECTOR (info)->contents[3] = make_number(xw->height);
806 XVECTOR (info)->contents[4] = make_number(xw->width); 804
807 XVECTOR (info)->contents[5] = make_number(xw->height); 805
808 XVECTOR (info)->contents[6] = Qnil;//make_number(xw->hidden); 806 return info;
807}
808
809DEFUN("xwidget-view-info", Fxwidget_view_info , Sxwidget_view_info, 2,2,0, doc: /* get xwidget view props */)
810 (Lisp_Object xwidget_id, Lisp_Object window)
811{
812 struct xwidget *xw = xid2xw(xwidget_id);
813 struct xwidget_view* xv = xwidget_view_lookup(xw, XWINDOW(window));
814
815 Lisp_Object info;
816
817 info = Fmake_vector (make_number (6), Qnil);
818 XVECTOR (info)->contents[0] = make_number(xv->x);
819 XVECTOR (info)->contents[1] = make_number(xv->y);
820 XVECTOR (info)->contents[2] = make_number(xv->clip_right);
821 XVECTOR (info)->contents[3] = make_number(xv->clip_bottom);
822 XVECTOR (info)->contents[4] = make_number(xv->clip_top);
823 XVECTOR (info)->contents[5] = make_number(xv->clip_left);
809 824
810 return info; 825 return info;
811} 826}
812 827
828
829
813//xterm.c listens to xwidget_owns_kbd and tries to not eat events when its set 830//xterm.c listens to xwidget_owns_kbd and tries to not eat events when its set
814int xwidget_owns_kbd = 0; 831int xwidget_owns_kbd = 0;
815DEFUN ("xwidget-set-keyboard-grab", Fxwidget_set_keyboard_grab, Sxwidget_set_keyboard_grab, 2, 2, 0, doc: /* set unset kbd grab for xwidget. */ 832DEFUN ("xwidget-set-keyboard-grab", Fxwidget_set_keyboard_grab, Sxwidget_set_keyboard_grab, 2, 2, 0, doc: /* set unset kbd grab for xwidget. */
@@ -938,6 +955,7 @@ syms_of_xwidget (void)
938 defsubr (&Sxwidget_send_keyboard_event); 955 defsubr (&Sxwidget_send_keyboard_event);
939 defsubr (&Sxwidget_embed_steal_window); 956 defsubr (&Sxwidget_embed_steal_window);
940 defsubr (&Sxwidget_info); 957 defsubr (&Sxwidget_info);
958 defsubr (&Sxwidget_view_info);
941 defsubr (&Sxwidget_resize_internal); 959 defsubr (&Sxwidget_resize_internal);
942 defsubr (&Sxwidget_embed_steal_window); 960 defsubr (&Sxwidget_embed_steal_window);
943 961
@@ -1050,12 +1068,11 @@ xwidget_from_id (int id)
1050 1068
1051void xwidget_view_delete_all_in_window( struct window *w ) 1069void xwidget_view_delete_all_in_window( struct window *w )
1052{ 1070{
1053 //xxx
1054 struct xwidget_view* xv = NULL; 1071 struct xwidget_view* xv = NULL;
1055 for (int i = 0; i < MAX_XWIDGETS; i++){ 1072 for (int i = 0; i < MAX_XWIDGETS; i++){
1056 xv = &xwidget_views[i]; 1073 xv = &xwidget_views[i];
1057 if(xv->w == w){ 1074 if(xv->w == w){
1058 gtk_widget_destroy(xv->widgetwindow); 1075 gtk_widget_destroy(GTK_WIDGET(xv->widgetwindow));
1059 } 1076 }
1060 } 1077 }
1061} 1078}