diff options
| author | Jan Djärv | 2009-11-27 17:27:04 +0000 |
|---|---|---|
| committer | Jan Djärv | 2009-11-27 17:27:04 +0000 |
| commit | ece2d4ed181649ebdac464f8149527a9ce75d4ad (patch) | |
| tree | 431a9fb9ebf71d7ee10aab9ea8a801304ca2cd51 /src | |
| parent | 59ffcfc485671bea907b4b8353bd0b8f5e75dc41 (diff) | |
| download | emacs-ece2d4ed181649ebdac464f8149527a9ce75d4ad.tar.gz emacs-ece2d4ed181649ebdac464f8149527a9ce75d4ad.zip | |
Don't crash if an X terminal is deleted with force == t.
* xftfont.c (xftfont_end_for_frame): Just return if dpyinfo->display
is NULL.
* xterm.c (x_delete_terminal): Set dpyinfo->display to NULL.
* frame.c (frame_make_pointer_invisible)
(frame_make_pointer_visible): Just return if there isn't any selected
frame.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 9 | ||||
| -rw-r--r-- | src/frame.c | 6 | ||||
| -rw-r--r-- | src/xftfont.c | 7 | ||||
| -rw-r--r-- | src/xterm.c | 2 |
4 files changed, 23 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 495e712c646..5d385e6b412 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,5 +1,14 @@ | |||
| 1 | 2009-11-27 Jan Djärv <jan.h.d@swipnet.se> | 1 | 2009-11-27 Jan Djärv <jan.h.d@swipnet.se> |
| 2 | 2 | ||
| 3 | * xftfont.c (xftfont_end_for_frame): Just return if dpyinfo->display | ||
| 4 | is NULL. | ||
| 5 | |||
| 6 | * xterm.c (x_delete_terminal): Set dpyinfo->display to NULL. | ||
| 7 | |||
| 8 | * frame.c (frame_make_pointer_invisible) | ||
| 9 | (frame_make_pointer_visible): Just return if there isn't any selected | ||
| 10 | frame. | ||
| 11 | |||
| 3 | * search.c (simple_search): Remove warning by making *p const. | 12 | * search.c (simple_search): Remove warning by making *p const. |
| 4 | 13 | ||
| 5 | 2009-11-26 Dan Nicolaescu <dann@ics.uci.edu> | 14 | 2009-11-26 Dan Nicolaescu <dann@ics.uci.edu> |
diff --git a/src/frame.c b/src/frame.c index 4a9d30dd215..1475eb68fb6 100644 --- a/src/frame.c +++ b/src/frame.c | |||
| @@ -4377,6 +4377,9 @@ frame_make_pointer_invisible () | |||
| 4377 | { | 4377 | { |
| 4378 | if (! NILP (Vmake_pointer_invisible)) | 4378 | if (! NILP (Vmake_pointer_invisible)) |
| 4379 | { | 4379 | { |
| 4380 | if (!FRAMEP (selected_frame) || !FRAME_LIVE_P (XFRAME (selected_frame))) | ||
| 4381 | return; | ||
| 4382 | |||
| 4380 | struct frame *f = SELECTED_FRAME (); | 4383 | struct frame *f = SELECTED_FRAME (); |
| 4381 | if (f && !f->pointer_invisible | 4384 | if (f && !f->pointer_invisible |
| 4382 | && FRAME_TERMINAL (f)->toggle_invisible_pointer_hook) | 4385 | && FRAME_TERMINAL (f)->toggle_invisible_pointer_hook) |
| @@ -4394,6 +4397,9 @@ frame_make_pointer_visible () | |||
| 4394 | /* We don't check Vmake_pointer_invisible here in case the | 4397 | /* We don't check Vmake_pointer_invisible here in case the |
| 4395 | pointer was invisible when Vmake_pointer_invisible was set to nil. */ | 4398 | pointer was invisible when Vmake_pointer_invisible was set to nil. */ |
| 4396 | 4399 | ||
| 4400 | if (!FRAMEP (selected_frame) || !FRAME_LIVE_P (XFRAME (selected_frame))) | ||
| 4401 | return; | ||
| 4402 | |||
| 4397 | struct frame *f = SELECTED_FRAME (); | 4403 | struct frame *f = SELECTED_FRAME (); |
| 4398 | if (f && f->pointer_invisible && f->mouse_moved | 4404 | if (f && f->pointer_invisible && f->mouse_moved |
| 4399 | && FRAME_TERMINAL (f)->toggle_invisible_pointer_hook) | 4405 | && FRAME_TERMINAL (f)->toggle_invisible_pointer_hook) |
diff --git a/src/xftfont.c b/src/xftfont.c index d5ea4aa2ac3..e2819863f07 100644 --- a/src/xftfont.c +++ b/src/xftfont.c | |||
| @@ -668,7 +668,12 @@ static int | |||
| 668 | xftfont_end_for_frame (f) | 668 | xftfont_end_for_frame (f) |
| 669 | FRAME_PTR f; | 669 | FRAME_PTR f; |
| 670 | { | 670 | { |
| 671 | XftDraw *xft_draw = font_get_frame_data (f, &xftfont_driver); | 671 | XftDraw *xft_draw; |
| 672 | |||
| 673 | /* Don't do anything if display is dead */ | ||
| 674 | if (FRAME_X_DISPLAY (f) == NULL) return 0; | ||
| 675 | |||
| 676 | xft_draw = font_get_frame_data (f, &xftfont_driver); | ||
| 672 | 677 | ||
| 673 | if (xft_draw) | 678 | if (xft_draw) |
| 674 | { | 679 | { |
diff --git a/src/xterm.c b/src/xterm.c index 94093bd3848..9feb6c8966a 100644 --- a/src/xterm.c +++ b/src/xterm.c | |||
| @@ -10747,6 +10747,8 @@ x_delete_terminal (struct terminal *terminal) | |||
| 10747 | #endif /* ! USE_GTK */ | 10747 | #endif /* ! USE_GTK */ |
| 10748 | } | 10748 | } |
| 10749 | 10749 | ||
| 10750 | /* Mark as dead. */ | ||
| 10751 | dpyinfo->display = NULL; | ||
| 10750 | x_delete_display (dpyinfo); | 10752 | x_delete_display (dpyinfo); |
| 10751 | UNBLOCK_INPUT; | 10753 | UNBLOCK_INPUT; |
| 10752 | } | 10754 | } |