summaryrefslogtreecommitdiffstats
path: root/client/application.cpp
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@redhat.com>2012-02-03 13:11:11 +0100
committerChristophe Fergeau <cfergeau@redhat.com>2012-02-03 13:11:11 +0100
commit67178944d26a97a6fb73ddf92b7fefdec6a99fd9 (patch)
treeab9f1b9401c6315f1af0355de31f4ac952edfa1a /client/application.cpp
parente3fb720cd11cf5485f30664b3fd0526249081ed2 (diff)
downloadspice-67178944d26a97a6fb73ddf92b7fefdec6a99fd9.tar.gz
spice-67178944d26a97a6fb73ddf92b7fefdec6a99fd9.tar.xz
spice-67178944d26a97a6fb73ddf92b7fefdec6a99fd9.zip
Handle Application::set_hotkeys failure
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.
Diffstat (limited to 'client/application.cpp')
-rw-r--r--client/application.cpp46
1 files changed, 29 insertions, 17 deletions
diff --git a/client/application.cpp b/client/application.cpp
index 08fa4fcb..1d4da8b7 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)