[Spice-devel] [PATCH] Handle Application::set_hotkeys failure

Hans de Goede hdegoede at redhat.com
Wed Feb 8 07:05:13 PST 2012


Ack.

On 02/08/2012 02:46 PM, Christophe Fergeau wrote:
> Application::set_hotkeys can throw an exception if it fails parsing
> the string describing the hotkeys to set. Currently this exception
> is uncaught which causes spicec to terminate when the controller
> tries to set invalid hotkeys. Fall back to using the default
> hotkeys when the controller sends an invalid hotkeys string.
> ---
>   client/application.cpp |   46 +++++++++++++++++++++++++++++-----------------
>   client/application.h   |    1 +
>   2 files changed, 30 insertions(+), 17 deletions(-)
>
> diff --git a/client/application.cpp b/client/application.cpp
> index 08fa4fc..1d4da8b 100644
> --- a/client/application.cpp
> +++ b/client/application.cpp
> @@ -393,21 +393,7 @@ Application::Application()
>       Platform::get_app_data_dir(_host_auth_opt.CA_file, app_name);
>       Platform::path_append(_host_auth_opt.CA_file, CA_FILE_NAME);
>
> -    std::auto_ptr<HotKeysParser>  parser(new HotKeysParser("toggle-fullscreen=shift+f11"
> -                                                          ",release-cursor=shift+f12"
> -#ifdef RED_DEBUG
> -                                                          ",connect=shift+f5"
> -                                                          ",disconnect=shift+f6"
> -#endif
> -#ifdef USE_GUI
> -                                                          ",show-gui=shift+f7"
> -#endif // USE_GUI
> -#ifdef USE_SMARTCARD
> -                                                          ",smartcard-insert=shift+f8"
> -                                                          ",smartcard-remove=shift+f9"
> -#endif
> -                                                          , _commands_map));
> -    _hot_keys = parser->get();
> +    this->set_default_hotkeys();
>
>       _sticky_info.trace_is_on = false;
>       _sticky_info.sticky_mode = false;
> @@ -1867,10 +1853,36 @@ void Application::hide_me()
>       hide();
>   }
>
> +void Application::set_default_hotkeys(void)
> +{
> +    const std::string default_hotkeys = "toggle-fullscreen=shift+f11"
> +                                        ",release-cursor=shift+f12"
> +#ifdef RED_DEBUG
> +                                        ",connect=shift+f5"
> +                                        ",disconnect=shift+f6"
> +#endif
> +#ifdef USE_GUI
> +                                        ",show-gui=shift+f7"
> +#endif // USE_GUI
> +#ifdef USE_SMARTCARD
> +                                        ",smartcard-insert=shift+f8"
> +                                        ",smartcard-remove=shift+f9"
> +#endif
> +                                        "";
> +
> +    this->set_hotkeys(default_hotkeys);
> +}
> +
>   void Application::set_hotkeys(const std::string&  hotkeys)
>   {
> -    std::auto_ptr<HotKeysParser>  parser(new HotKeysParser(hotkeys, _commands_map));
> -    _hot_keys = parser->get();
> +
> +    try {
> +        std::auto_ptr<HotKeysParser>  parser(new HotKeysParser(hotkeys, _commands_map));
> +        _hot_keys = parser->get();
> +    } catch (Exception&e) {
> +        LOG_WARN("%s", e.what());
> +        this->set_default_hotkeys();
> +    }
>   }
>
>   int Application::get_controller_menu_item_id(int32_t opaque_conn_ref, uint32_t msg_id)
> diff --git a/client/application.h b/client/application.h
> index ac51cd2..c513d94 100644
> --- a/client/application.h
> +++ b/client/application.h
> @@ -250,6 +250,7 @@ public:
>       void show_me(bool full_screen);
>       void hide_me();
>       void set_hotkeys(const std::string&  hotkeys);
> +    void set_default_hotkeys(void);
>       int get_controller_menu_item_id(int32_t opaque_conn_ref, uint32_t msg_id);
>       void set_menu(Menu* menu);
>       void delete_menu();


More information about the Spice-devel mailing list