diff options
Diffstat (limited to 'gdb/cli/cli-interp.c')
-rw-r--r-- | gdb/cli/cli-interp.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c index 5d67ba4..cc556a4 100644 --- a/gdb/cli/cli-interp.c +++ b/gdb/cli/cli-interp.c @@ -37,6 +37,12 @@ struct cli_interp struct ui_out *cli_uiout; }; +/* Suppress notification struct. */ +struct cli_suppress_notification cli_suppress_notification = + { + 0 /* user_selected_context_changed */ + }; + /* Returns the INTERP's data cast as cli_interp if INTERP is a CLI, and returns NULL otherwise. */ @@ -229,6 +235,36 @@ cli_on_command_error (void) display_gdb_prompt (NULL); } +/* Observer for the user_selected_context_changed notification. */ + +static void +cli_on_user_selected_context_changed (user_selected_what selection) +{ + struct switch_thru_all_uis state; + struct thread_info *tp; + + /* This event is suppressed. */ + if (cli_suppress_notification.user_selected_context) + return; + + tp = find_thread_ptid (inferior_ptid); + + SWITCH_THRU_ALL_UIS (state) + { + struct cli_interp *cli = as_cli_interp (top_level_interpreter ()); + + if (cli == NULL) + continue; + + if (selection & USER_SELECTED_INFERIOR) + print_selected_inferior (cli->cli_uiout); + + if (tp != NULL + && ((selection & (USER_SELECTED_THREAD | USER_SELECTED_FRAME)))) + print_selected_thread_frame (cli->cli_uiout, selection); + } +} + /* pre_command_loop implementation. */ void @@ -393,4 +429,6 @@ _initialize_cli_interp (void) observer_attach_no_history (cli_on_no_history); observer_attach_sync_execution_done (cli_on_sync_execution_done); observer_attach_command_error (cli_on_command_error); + observer_attach_user_selected_context_changed + (cli_on_user_selected_context_changed); } |