diff options
| author | Karoly Lorentey | 2006-01-02 07:54:50 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2006-01-02 07:54:50 +0000 |
| commit | 24f9525b78906b2eff3635f34627216d8a8aa104 (patch) | |
| tree | ec6f524794d8bbf60edfb44e9163824fd9866092 /src | |
| parent | 160f08170a853b41e974b9645f8dc670c58284ee (diff) | |
| download | emacs-24f9525b78906b2eff3635f34627216d8a8aa104.tar.gz emacs-24f9525b78906b2eff3635f34627216d8a8aa104.zip | |
Experimental change: don't restore kboard after temporary changes if Emacs wasn't in single kboard state.
* src/keyboard.c (pop_kboard): Help debugging by not changing
current_kboard unnecessarily.
(temporarily_switch_to_single_kboard, record_single_kboard_state):
Don't push_kboard if we weren't in single kboard state.
Don't pop_kboard if we popped into any kboard state.
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-485
Diffstat (limited to 'src')
| -rw-r--r-- | src/keyboard.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/keyboard.c b/src/keyboard.c index 8cfa4b34371..6646ea62e66 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -1139,16 +1139,17 @@ pop_kboard () | |||
| 1139 | #ifdef MULTI_KBOARD | 1139 | #ifdef MULTI_KBOARD |
| 1140 | struct terminal *t; | 1140 | struct terminal *t; |
| 1141 | struct kboard_stack *p = kboard_stack; | 1141 | struct kboard_stack *p = kboard_stack; |
| 1142 | current_kboard = NULL; | 1142 | int found = 0; |
| 1143 | for (t = terminal_list; t; t = t->next_terminal) | 1143 | for (t = terminal_list; t; t = t->next_terminal) |
| 1144 | { | 1144 | { |
| 1145 | if (t->kboard == p->kboard) | 1145 | if (t->kboard == p->kboard) |
| 1146 | { | 1146 | { |
| 1147 | current_kboard = p->kboard; | 1147 | current_kboard = p->kboard; |
| 1148 | found = 1; | ||
| 1148 | break; | 1149 | break; |
| 1149 | } | 1150 | } |
| 1150 | } | 1151 | } |
| 1151 | if (current_kboard == NULL) | 1152 | if (!found) |
| 1152 | { | 1153 | { |
| 1153 | /* The terminal we remembered has been deleted. */ | 1154 | /* The terminal we remembered has been deleted. */ |
| 1154 | current_kboard = FRAME_KBOARD (SELECTED_FRAME ()); | 1155 | current_kboard = FRAME_KBOARD (SELECTED_FRAME ()); |
| @@ -1168,10 +1169,15 @@ temporarily_switch_to_single_kboard (k) | |||
| 1168 | { | 1169 | { |
| 1169 | #ifdef MULTI_KBOARD | 1170 | #ifdef MULTI_KBOARD |
| 1170 | int was_locked = single_kboard; | 1171 | int was_locked = single_kboard; |
| 1171 | if (k != NULL) | 1172 | if (was_locked) |
| 1172 | push_kboard (k); | 1173 | { |
| 1173 | else | 1174 | if (k != NULL) |
| 1174 | push_kboard (current_kboard); | 1175 | push_kboard (k); |
| 1176 | else | ||
| 1177 | push_kboard (current_kboard); | ||
| 1178 | } | ||
| 1179 | else if (k != NULL) | ||
| 1180 | current_kboard = k; | ||
| 1175 | single_kboard_state (); | 1181 | single_kboard_state (); |
| 1176 | record_unwind_protect (restore_kboard_configuration, | 1182 | record_unwind_protect (restore_kboard_configuration, |
| 1177 | (was_locked ? Qt : Qnil)); | 1183 | (was_locked ? Qt : Qnil)); |
| @@ -1181,7 +1187,8 @@ temporarily_switch_to_single_kboard (k) | |||
| 1181 | void | 1187 | void |
| 1182 | record_single_kboard_state () | 1188 | record_single_kboard_state () |
| 1183 | { | 1189 | { |
| 1184 | push_kboard (current_kboard); | 1190 | if (single_kboard) |
| 1191 | push_kboard (current_kboard); | ||
| 1185 | record_unwind_protect (restore_kboard_configuration, | 1192 | record_unwind_protect (restore_kboard_configuration, |
| 1186 | (single_kboard ? Qt : Qnil)); | 1193 | (single_kboard ? Qt : Qnil)); |
| 1187 | } | 1194 | } |
| @@ -1193,8 +1200,10 @@ restore_kboard_configuration (was_locked) | |||
| 1193 | if (NILP (was_locked)) | 1200 | if (NILP (was_locked)) |
| 1194 | any_kboard_state (); | 1201 | any_kboard_state (); |
| 1195 | else | 1202 | else |
| 1196 | single_kboard_state (); | 1203 | { |
| 1197 | pop_kboard (); | 1204 | single_kboard_state (); |
| 1205 | pop_kboard (); | ||
| 1206 | } | ||
| 1198 | return Qnil; | 1207 | return Qnil; |
| 1199 | } | 1208 | } |
| 1200 | 1209 | ||