[Spice-commits] client/application.cpp client/application.h

Christophe Fergau teuf at kemper.freedesktop.org
Thu Feb 9 01:28:54 PST 2012


 client/application.cpp |   46 +++++++++++++++++++++++++++++-----------------
 client/application.h   |    1 +
 2 files changed, 30 insertions(+), 17 deletions(-)

New commits:
commit 67178944d26a97a6fb73ddf92b7fefdec6a99fd9
Author: Christophe Fergeau <cfergeau at redhat.com>
Date:   Fri Feb 3 13:11:11 2012 +0100

    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.

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-commits mailing list