diff options
| author | Joakim Verona | 2011-07-18 17:16:34 +0200 |
|---|---|---|
| committer | Joakim Verona | 2011-07-18 17:16:34 +0200 |
| commit | cd1f21dd9e794a14aa6907296c6ee95cc5f693a1 (patch) | |
| tree | caa4bd621b770f0672d919da5023f84018ea7478 | |
| parent | f7679969e190ec203eb46e0937185900b72f11c7 (diff) | |
| download | emacs-cd1f21dd9e794a14aa6907296c6ee95cc5f693a1.tar.gz emacs-cd1f21dd9e794a14aa6907296c6ee95cc5f693a1.zip | |
cleanup xv init test, and introduce PVEC_XWIDGET
| -rw-r--r-- | lisp/xwidget.el | 2 | ||||
| -rw-r--r-- | src/lisp.h | 4 | ||||
| -rw-r--r-- | src/print.c | 6 | ||||
| -rw-r--r-- | src/xwidget.c | 27 | ||||
| -rw-r--r-- | src/xwidget.h | 2 |
5 files changed, 26 insertions, 15 deletions
diff --git a/lisp/xwidget.el b/lisp/xwidget.el index 436e7b614a4..b389265692e 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el | |||
| @@ -16,7 +16,7 @@ see xwidget.c for types suitable for TYPE. | |||
| 16 | id)) | 16 | id)) |
| 17 | 17 | ||
| 18 | (defun xwidget-at (pos) | 18 | (defun xwidget-at (pos) |
| 19 | (caddr (get-text-property pos 'display) | 19 | (car (cdr (cdr (get-text-property pos 'display))) |
| 20 | )) | 20 | )) |
| 21 | 21 | ||
| 22 | (defun xwidget-socket-handler () | 22 | (defun xwidget-socket-handler () |
diff --git a/src/lisp.h b/src/lisp.h index 762d34abb9c..30afc6e484b 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -388,7 +388,9 @@ enum pvec_type | |||
| 388 | PVEC_SUB_CHAR_TABLE = 0x100000, | 388 | PVEC_SUB_CHAR_TABLE = 0x100000, |
| 389 | PVEC_FONT = 0x200000, | 389 | PVEC_FONT = 0x200000, |
| 390 | PVEC_OTHER = 0x400000, | 390 | PVEC_OTHER = 0x400000, |
| 391 | PVEC_TYPE_MASK = 0x7ffe00 | 391 | PVEC_XWIDGET = 0x800000, |
| 392 | PVEC_XWIDGET_VIEW = 0x1000000, | ||
| 393 | PVEC_TYPE_MASK = 0x3fffe00 | ||
| 392 | 394 | ||
| 393 | #if 0 /* This is used to make the value of PSEUDOVECTOR_FLAG available to | 395 | #if 0 /* This is used to make the value of PSEUDOVECTOR_FLAG available to |
| 394 | GDB. It doesn't work on OS Alpha. Moved to a variable in | 396 | GDB. It doesn't work on OS Alpha. Moved to a variable in |
diff --git a/src/print.c b/src/print.c index 14b4326bb6f..242bcb5b0d1 100644 --- a/src/print.c +++ b/src/print.c | |||
| @@ -36,6 +36,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 36 | #include "blockinput.h" | 36 | #include "blockinput.h" |
| 37 | #include "termhooks.h" /* For struct terminal. */ | 37 | #include "termhooks.h" /* For struct terminal. */ |
| 38 | #include "font.h" | 38 | #include "font.h" |
| 39 | #include "xwidget.h" | ||
| 39 | 40 | ||
| 40 | Lisp_Object Qstandard_output; | 41 | Lisp_Object Qstandard_output; |
| 41 | 42 | ||
| @@ -1755,6 +1756,11 @@ print_object (Lisp_Object obj, register Lisp_Object printcharfun, int escapeflag | |||
| 1755 | strout (XSUBR (obj)->symbol_name, -1, -1, printcharfun); | 1756 | strout (XSUBR (obj)->symbol_name, -1, -1, printcharfun); |
| 1756 | PRINTCHAR ('>'); | 1757 | PRINTCHAR ('>'); |
| 1757 | } | 1758 | } |
| 1759 | else if (XXWIDGETP (obj)) | ||
| 1760 | { | ||
| 1761 | strout ("#<xwidget ", -1, -1, printcharfun); | ||
| 1762 | PRINTCHAR ('>'); | ||
| 1763 | } | ||
| 1758 | else if (WINDOWP (obj)) | 1764 | else if (WINDOWP (obj)) |
| 1759 | { | 1765 | { |
| 1760 | strout ("#<window ", -1, -1, printcharfun); | 1766 | strout ("#<window ", -1, -1, printcharfun); |
diff --git a/src/xwidget.c b/src/xwidget.c index 6a0d3ee4340..263e8553ca9 100644 --- a/src/xwidget.c +++ b/src/xwidget.c | |||
| @@ -109,14 +109,14 @@ struct xwidget_view xwidget_views[MAX_XWIDGETS]; | |||
| 109 | struct xwidget* | 109 | struct xwidget* |
| 110 | allocate_xwidget (void) | 110 | allocate_xwidget (void) |
| 111 | { | 111 | { |
| 112 | return ALLOCATE_PSEUDOVECTOR (struct xwidget, height, PVEC_OTHER); | 112 | return ALLOCATE_PSEUDOVECTOR (struct xwidget, height, PVEC_XWIDGET); |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | //TODO xwidget_view* should be Lisp_xwidget_view* | 115 | //TODO xwidget_view* should be Lisp_xwidget_view* |
| 116 | struct xwidget_view* | 116 | struct xwidget_view* |
| 117 | allocate_xwidget_view (void) | 117 | allocate_xwidget_view (void) |
| 118 | { | 118 | { |
| 119 | return ALLOCATE_PSEUDOVECTOR (struct xwidget_view, redisplayed, PVEC_OTHER); | 119 | return ALLOCATE_PSEUDOVECTOR (struct xwidget_view, redisplayed, PVEC_XWIDGET_VIEW); |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | 122 | ||
| @@ -162,7 +162,7 @@ DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 7, 0, | |||
| 162 | XSETBUFFER(xw->buffer, Fcurrent_buffer()); // conservatively gcpro xw since we call lisp | 162 | XSETBUFFER(xw->buffer, Fcurrent_buffer()); // conservatively gcpro xw since we call lisp |
| 163 | xw->height = XFASTINT(height); | 163 | xw->height = XFASTINT(height); |
| 164 | xw->width = XFASTINT(width); | 164 | xw->width = XFASTINT(width); |
| 165 | XSETPSEUDOVECTOR (val, xw, PVEC_OTHER); //?? dunno why i need this | 165 | XSETPSEUDOVECTOR (val, xw, PVEC_XWIDGET); //?? dunno why i need this |
| 166 | Vxwidget_alist = Fcons ( val, Vxwidget_alist); | 166 | Vxwidget_alist = Fcons ( val, Vxwidget_alist); |
| 167 | xw->widgetwindow_osr = NULL; | 167 | xw->widgetwindow_osr = NULL; |
| 168 | xw->widget_osr = NULL; | 168 | xw->widget_osr = NULL; |
| @@ -323,7 +323,7 @@ void xwidget_slider_changed (GtkRange *range, | |||
| 323 | for (int i = 0; i < MAX_XWIDGETS; i++) | 323 | for (int i = 0; i < MAX_XWIDGETS; i++) |
| 324 | { | 324 | { |
| 325 | xv = &xwidget_views[i]; | 325 | xv = &xwidget_views[i]; |
| 326 | if(xvp->model == xv->model){ | 326 | if(xv->initialized && xvp->model == xv->model){ |
| 327 | g_signal_handler_block( xv->widget,xv->handler_id); | 327 | g_signal_handler_block( xv->widget,xv->handler_id); |
| 328 | } | 328 | } |
| 329 | } | 329 | } |
| @@ -331,7 +331,7 @@ void xwidget_slider_changed (GtkRange *range, | |||
| 331 | for (int i = 0; i < MAX_XWIDGETS; i++) | 331 | for (int i = 0; i < MAX_XWIDGETS; i++) |
| 332 | { | 332 | { |
| 333 | xv = &xwidget_views[i]; | 333 | xv = &xwidget_views[i]; |
| 334 | if(xvp->model == xv->model){ | 334 | if(xv->initialized && xvp->model == xv->model){ |
| 335 | gtk_range_set_value(GTK_RANGE(xv->widget), v); | 335 | gtk_range_set_value(GTK_RANGE(xv->widget), v); |
| 336 | g_signal_handler_unblock( xv->widget,xv->handler_id); | 336 | g_signal_handler_unblock( xv->widget,xv->handler_id); |
| 337 | } | 337 | } |
| @@ -352,7 +352,7 @@ gboolean webkit_osr_damage_event_callback (GtkWidget *widget, GdkEventExpose *ev | |||
| 352 | for (int i = 0; i < MAX_XWIDGETS; i++)//todo mvc refactor | 352 | for (int i = 0; i < MAX_XWIDGETS; i++)//todo mvc refactor |
| 353 | { | 353 | { |
| 354 | xv = &xwidget_views[i]; | 354 | xv = &xwidget_views[i]; |
| 355 | if(xv->model == xw){ | 355 | if(xv->initialized && xv->model == xw){ |
| 356 | gtk_widget_queue_draw (xv->widget); //redraw all views, the master has changed | 356 | gtk_widget_queue_draw (xv->widget); //redraw all views, the master has changed |
| 357 | } | 357 | } |
| 358 | } | 358 | } |
| @@ -724,7 +724,7 @@ DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc: | |||
| 724 | for (int i = 0; i < MAX_XWIDGETS; i++) //TODO MVC refactor lazy linear search | 724 | for (int i = 0; i < MAX_XWIDGETS; i++) //TODO MVC refactor lazy linear search |
| 725 | { | 725 | { |
| 726 | xv = &xwidget_views[i]; | 726 | xv = &xwidget_views[i]; |
| 727 | if(xv->model == xw){ | 727 | if(xv->initialized && xv->model == xw){ |
| 728 | gtk_layout_set_size (GTK_LAYOUT (xv->widgetwindow), xw->width, xw->height); | 728 | gtk_layout_set_size (GTK_LAYOUT (xv->widgetwindow), xw->width, xw->height); |
| 729 | gtk_widget_set_size_request (GTK_WIDGET (xv->widget), xw->width, xw->height); | 729 | gtk_widget_set_size_request (GTK_WIDGET (xv->widget), xw->width, xw->height); |
| 730 | } | 730 | } |
| @@ -923,7 +923,7 @@ void xwidget_view_delete_all_in_window( struct window *w ) | |||
| 923 | struct xwidget_view* xv = NULL; | 923 | struct xwidget_view* xv = NULL; |
| 924 | for (int i = 0; i < MAX_XWIDGETS; i++){ | 924 | for (int i = 0; i < MAX_XWIDGETS; i++){ |
| 925 | xv = &xwidget_views[i]; | 925 | xv = &xwidget_views[i]; |
| 926 | if(xv->w == w){ | 926 | if(xv->initialized && xv->w == w){ |
| 927 | gtk_widget_destroy(GTK_WIDGET(xv->widgetwindow)); | 927 | gtk_widget_destroy(GTK_WIDGET(xv->widgetwindow)); |
| 928 | xv->initialized = 0; | 928 | xv->initialized = 0; |
| 929 | } | 929 | } |
| @@ -934,14 +934,15 @@ void xwidget_view_delete_all_in_window( struct window *w ) | |||
| 934 | 934 | ||
| 935 | struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w){ | 935 | struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w){ |
| 936 | struct xwidget_view* xv = NULL; | 936 | struct xwidget_view* xv = NULL; |
| 937 | for (int i = 0; i < MAX_XWIDGETS; i++) | 937 | for (int i = 0; i < MAX_XWIDGETS; i++){ |
| 938 | if ((xwidget_views[i].model == xw) && (xwidget_views[i].w == w)) | 938 | xv = &xwidget_views[i]; |
| 939 | xv = &xwidget_views[i]; | 939 | if (xv->initialized && (xv->model == xw) && (xv->w == w)) |
| 940 | 940 | return xv; | |
| 941 | return xv; | 941 | } |
| 942 | } | 942 | } |
| 943 | 943 | ||
| 944 | //attempting a workaround for a webkit offscreen bug | 944 | //attempting a workaround for a webkit offscreen bug |
| 945 | //TODO verify its still needed | ||
| 945 | void gtk_window_get_position (GtkWindow *window, | 946 | void gtk_window_get_position (GtkWindow *window, |
| 946 | gint *root_x, | 947 | gint *root_x, |
| 947 | gint *root_y){ | 948 | gint *root_y){ |
diff --git a/src/xwidget.h b/src/xwidget.h index edd360969dc..c515980ef12 100644 --- a/src/xwidget.h +++ b/src/xwidget.h | |||
| @@ -69,6 +69,8 @@ struct xwidget_view{ | |||
| 69 | 69 | ||
| 70 | /* Test for xwidget (xwidget . spec) (car must be the symbol xwidget)*/ | 70 | /* Test for xwidget (xwidget . spec) (car must be the symbol xwidget)*/ |
| 71 | #define XWIDGETP(x) (CONSP (x) && EQ (XCAR (x), Qxwidget)) | 71 | #define XWIDGETP(x) (CONSP (x) && EQ (XCAR (x), Qxwidget)) |
| 72 | /* Test for xwidget pseudovector*/ | ||
| 73 | #define XXWIDGETP(x) PSEUDOVECTORP (x, PVEC_XWIDGET) | ||
| 72 | #define XXWIDGET(a) (eassert (XWIDGETP(a)),(struct xwidget *) XPNTR(a)) | 74 | #define XXWIDGET(a) (eassert (XWIDGETP(a)),(struct xwidget *) XPNTR(a)) |
| 73 | 75 | ||
| 74 | 76 | ||