diff options
| author | Joakim Verona | 2011-07-05 11:27:32 +0200 |
|---|---|---|
| committer | Joakim Verona | 2011-07-05 11:27:32 +0200 |
| commit | d812bba65d7f22a624c8cc19e9ec21ffe3720228 (patch) | |
| tree | a217ce72e72646458352eeec8e48c9b2766e7709 | |
| parent | f53a15f2c3b8eec90e76c95058842d76e60d29cd (diff) | |
| download | emacs-d812bba65d7f22a624c8cc19e9ec21ffe3720228.tar.gz emacs-d812bba65d7f22a624c8cc19e9ec21ffe3720228.zip | |
tweak to improve deletion of xwviews when emacs windows are closed
| -rw-r--r-- | README.xwidget | 10 | ||||
| -rw-r--r-- | src/window.c | 1 | ||||
| -rw-r--r-- | src/xwidget.c | 13 | ||||
| -rw-r--r-- | src/xwidget.h | 1 |
4 files changed, 25 insertions, 0 deletions
diff --git a/README.xwidget b/README.xwidget index b709fcd7d9e..8c4998cc960 100644 --- a/README.xwidget +++ b/README.xwidget | |||
| @@ -588,6 +588,16 @@ maybe control be used in place of my own copy hacks? | |||
| 588 | 588 | ||
| 589 | 589 | ||
| 590 | 590 | ||
| 591 | ** TODO remove xwidget_views when emacs window is deleted | ||
| 592 | removing xwidget views when an Emacs window closes is not reliable. | ||
| 593 | |||
| 594 | - switching buffers in a window seems to hide the corresponding | ||
| 595 | xwidget-views properly, but they might as well be deleted. | ||
| 596 | |||
| 597 | - patching delete-window-internal could be used to delete the xwidget-views | ||
| 598 | |||
| 599 | |||
| 600 | |||
| 591 | ** notes from x_draw_xwidget_glyph_string | 601 | ** notes from x_draw_xwidget_glyph_string |
| 592 | 602 | ||
| 593 | BUG it seems this method for some reason is called with bad s->x and s->y sometimes. | 603 | BUG it seems this method for some reason is called with bad s->x and s->y sometimes. |
diff --git a/src/window.c b/src/window.c index 93f763ec9af..3c867145620 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -3953,6 +3953,7 @@ when WINDOW is the only window on its frame. */) | |||
| 3953 | { | 3953 | { |
| 3954 | /* Block input. */ | 3954 | /* Block input. */ |
| 3955 | BLOCK_INPUT; | 3955 | BLOCK_INPUT; |
| 3956 | xwidget_view_delete_all_in_window(w); | ||
| 3956 | window_resize_apply (p, horflag); | 3957 | window_resize_apply (p, horflag); |
| 3957 | 3958 | ||
| 3958 | windows_or_buffers_changed++; | 3959 | windows_or_buffers_changed++; |
diff --git a/src/xwidget.c b/src/xwidget.c index 6b4cc2d459f..57243832ce3 100644 --- a/src/xwidget.c +++ b/src/xwidget.c | |||
| @@ -1048,6 +1048,19 @@ xwidget_from_id (int id) | |||
| 1048 | return &xwidgets[id]; | 1048 | return &xwidgets[id]; |
| 1049 | } | 1049 | } |
| 1050 | 1050 | ||
| 1051 | void xwidget_view_delete_all_in_window( struct window *w ) | ||
| 1052 | { | ||
| 1053 | //xxx | ||
| 1054 | struct xwidget_view* xv = NULL; | ||
| 1055 | for (int i = 0; i < MAX_XWIDGETS; i++){ | ||
| 1056 | xv = &xwidget_views[i]; | ||
| 1057 | if(xv->w == w){ | ||
| 1058 | gtk_widget_destroy(xv->widgetwindow); | ||
| 1059 | } | ||
| 1060 | } | ||
| 1061 | } | ||
| 1062 | |||
| 1063 | |||
| 1051 | struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w){ | 1064 | struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w){ |
| 1052 | struct xwidget_view* xv = NULL; | 1065 | struct xwidget_view* xv = NULL; |
| 1053 | for (int i = 0; i < MAX_XWIDGETS; i++) | 1066 | for (int i = 0; i < MAX_XWIDGETS; i++) |
diff --git a/src/xwidget.h b/src/xwidget.h index d5077bb0623..732dac5e7c2 100644 --- a/src/xwidget.h +++ b/src/xwidget.h | |||
| @@ -85,3 +85,4 @@ void assert_valid_xwidget_id(int id,char *str); | |||
| 85 | int lookup_xwidget (Lisp_Object spec); | 85 | int lookup_xwidget (Lisp_Object spec); |
| 86 | #define XG_XWIDGET "emacs_xwidget" | 86 | #define XG_XWIDGET "emacs_xwidget" |
| 87 | #define XG_XWIDGET_VIEW "emacs_xwidget_view" | 87 | #define XG_XWIDGET_VIEW "emacs_xwidget_view" |
| 88 | void xwidget_view_delete_all_in_window( struct window *w ); | ||