[nemiver] Don't fall appart when gconfd is down



commit c1957771ab7264fdce24a0018a1a4fd062d503b4
Author: Dodji Seketeli <dodji redhat com>
Date:   Thu Jul 16 15:16:00 2009 +0200

    Don't fall appart when gconfd is down
    
    	* src/dbgengine/nmv-gdb-engine.cc:
    	(GDBEngine::Priv::get_debugger_full_path): Catch exceptions raised
    	when accessing the configuration bus.
    	* src/persp/dbgperspective/nmv-dbg-perspective.cc:
    	(DBGPerspective::Priv::ensure_buffer_is_in_utf8,
    	DBGPerspective::on_shutdown_signal,
    	DBGPerspective::on_file_content_changed, DBGPerspective::init_body,
    	DBGPerspective::read_default_config,
    	DBGPerspective::debugger): Likewise.
    	* src/workbench/nmv-workbench.cc:
    	(Workbench::get_configuration_manager,
    	Workbench::init_window,Workbench::save_window_geometry): Likewise.

 src/dbgengine/nmv-gdb-engine.cc                 |    6 ++-
 src/persp/dbgperspective/nmv-dbg-perspective.cc |   50 +++++++++++++++++++---
 src/workbench/nmv-workbench.cc                  |   20 ++++++++-
 3 files changed, 66 insertions(+), 10 deletions(-)
---
diff --git a/src/dbgengine/nmv-gdb-engine.cc b/src/dbgengine/nmv-gdb-engine.cc
index 821a5a7..e900a5b 100644
--- a/src/dbgengine/nmv-gdb-engine.cc
+++ b/src/dbgengine/nmv-gdb-engine.cc
@@ -286,8 +286,12 @@ public:
 
     const UString& get_debugger_full_path () const
     {
+        NEMIVER_TRY
         get_conf_mgr ()->get_key_value (CONF_KEY_GDB_BINARY,
-                             const_cast<Priv*> (this)->debugger_full_path);
+                                        const_cast<Priv*>
+                                                (this)->debugger_full_path);
+        NEMIVER_CATCH_NOX
+
         if (debugger_full_path == "" ||
             debugger_full_path == DEFAULT_GDB_BINARY) {
             const_cast<Priv*> (this)->debugger_full_path =
diff --git a/src/persp/dbgperspective/nmv-dbg-perspective.cc b/src/persp/dbgperspective/nmv-dbg-perspective.cc
index f1a7b53..a2f16b2 100644
--- a/src/persp/dbgperspective/nmv-dbg-perspective.cc
+++ b/src/persp/dbgperspective/nmv-dbg-perspective.cc
@@ -1022,9 +1022,14 @@ struct DBGPerspective::Priv {
         IConfMgrSafePtr conf_mgr = workbench->get_configuration_manager ();
         THROW_IF_FAIL (conf_mgr);
         std::list<UString> supported_encodings;
-        if (conf_mgr->get_key_value (CONF_KEY_SOURCE_FILE_ENCODING_LIST,
-                                     supported_encodings)
-            && !supported_encodings.empty ()) {
+        bool have_gconf_values = false;
+
+        NEMIVER_TRY
+        have_gconf_values =
+            conf_mgr->get_key_value (CONF_KEY_SOURCE_FILE_ENCODING_LIST,
+                                     supported_encodings);
+        NEMIVER_CATCH_NOX
+        if (have_gconf_values && !supported_encodings.empty ()) {
             LOG_DD ("trying encodings coming from gconf");
             std::list<UString>::const_iterator it;
             for (it = supported_encodings.begin ();
@@ -1908,7 +1913,10 @@ DBGPerspective::on_shutdown_signal ()
     // next time.
     IConfMgr &conf_mgr = get_conf_mgr ();
     int pane_location = m_priv->body_main_paned->get_position();
+
+    NEMIVER_TRY
     conf_mgr.set_key_value (CONF_KEY_STATUS_PANE_LOCATION, pane_location);
+    NEMIVER_CATCH
 
     if (m_priv->prog_path == "") {
         return;
@@ -2603,12 +2611,14 @@ DBGPerspective::on_file_content_changed (const UString &a_path)
                 reload_file ();
             LOG_DD ("don't ask again: " << (int) dont_ask_again);
             if (m_priv->confirm_before_reload_source == dont_ask_again) {
+                NEMIVER_TRY
                 get_conf_mgr ().set_key_value
                                 (CONF_KEY_CONFIRM_BEFORE_RELOAD_SOURCE,
                                  !dont_ask_again);
                 get_conf_mgr ().set_key_value
                                 (CONF_KEY_ALLOW_AUTO_RELOAD_SOURCE,
                                  need_to_reload_file);
+                NEMIVER_CATCH_NOX
             }
             std::list<UString>::iterator iter =
                 std::find (pending_notifications.begin (),
@@ -3436,7 +3446,10 @@ DBGPerspective::init_body ()
     IConfMgr &conf_mgr = get_conf_mgr ();
     int pane_location = -1; // don't specifically set a location
                             // if we can't read the last location from gconf
+    NEMIVER_TRY
     conf_mgr.get_key_value (CONF_KEY_STATUS_PANE_LOCATION, pane_location);
+    NEMIVER_CATCH_NOX
+
     if (pane_location > 0) {
         m_priv->body_main_paned->set_position (pane_location);
     }
@@ -3456,8 +3469,12 @@ DBGPerspective::init_body ()
         ui_utils::get_widget_from_glade<Gtk::Notebook> (m_priv->body_glade,
                                                         "statusesnotebook");
     int width=100, height=70;
+
+    NEMIVER_TRY
     conf_mgr.get_key_value (CONF_KEY_STATUS_WIDGET_MINIMUM_WIDTH, width);
     conf_mgr.get_key_value (CONF_KEY_STATUS_WIDGET_MINIMUM_HEIGHT, height);
+    NEMIVER_CATCH_NOX
+
     LOG_DD ("setting status widget min size: width: "
             << width
             << ", height: "
@@ -4143,19 +4160,28 @@ DBGPerspective::read_default_config ()
     IConfMgr &conf_mgr = get_conf_mgr ();
     if (m_priv->source_dirs.empty ()) {
         UString dirs;
+
+        NEMIVER_TRY
         conf_mgr.get_key_value (CONF_KEY_NEMIVER_SOURCE_DIRS, dirs);
+        NEMIVER_CATCH_NOX
+
         LOG_DD ("got source dirs '" << dirs << "' from conf mgr");
-        m_priv->source_dirs = dirs.split (":");
-        LOG_DD ("that makes '" <<(int)m_priv->source_dirs.size()
-                << "' dir paths");
+        if (!dirs.empty ()) {
+            m_priv->source_dirs = dirs.split (":");
+            LOG_DD ("that makes '" <<(int)m_priv->source_dirs.size()
+                    << "' dir paths");
+        }
 
+        NEMIVER_TRY
         conf_mgr.get_key_value (CONF_KEY_SHOW_DBG_ERROR_DIALOGS,
                                 m_priv->show_dbg_errors);
+        NEMIVER_CATCH_NOX
 
         conf_mgr.value_changed_signal ().connect
             (sigc::mem_fun (*this,
                             &DBGPerspective::on_conf_key_changed_signal));
     }
+    NEMIVER_TRY
     conf_mgr.get_key_value (CONF_KEY_HIGHLIGHT_SOURCE_CODE,
                             m_priv->enable_syntax_highlight);
     conf_mgr.get_key_value (CONF_KEY_SHOW_SOURCE_LINE_NUMBERS,
@@ -4168,9 +4194,15 @@ DBGPerspective::read_default_config ()
                             m_priv->custom_font_name);
     conf_mgr.get_key_value (CONF_KEY_SYSTEM_FONT_NAME,
                             m_priv->system_font_name);
+    NEMIVER_CATCH_NOX
+
 #ifdef WITH_SOURCEVIEWMM2
-    UString style_id;
+    UString style_id ("classic");
+
+    NEMIVER_TRY
     conf_mgr.get_key_value (CONF_KEY_EDITOR_STYLE_SCHEME, style_id);
+    NEMIVER_CATCH_NOX
+
     m_priv->editor_style = gtksourceview::SourceStyleSchemeManager::get_default
         ()->get_scheme (style_id);
 #endif // WITH_SOURCEVIEWMM2
@@ -6363,8 +6395,12 @@ DBGPerspective::debugger ()
         THROW_IF_FAIL (module_manager);
 
         UString debugger_dynmod_name;
+
+        NEMIVER_TRY
         get_conf_mgr ().get_key_value (CONF_KEY_DEBUGGER_ENGINE_DYNMOD_NAME,
                                        debugger_dynmod_name);
+        NEMIVER_CATCH_NOX
+
         LOG_DD ("got debugger_dynmod_name from confmgr: '"
                 << debugger_dynmod_name << "'");
         if (debugger_dynmod_name == "") {
diff --git a/src/workbench/nmv-workbench.cc b/src/workbench/nmv-workbench.cc
index 329d798..50cb411 100644
--- a/src/workbench/nmv-workbench.cc
+++ b/src/workbench/nmv-workbench.cc
@@ -513,9 +513,13 @@ Workbench::get_configuration_manager ()
 
         m_priv->conf_mgr = dynmod_manager->load_iface <IConfMgr> ("gconfmgr",
                                                                   "IConfMgr") ;
+        NEMIVER_TRY
+
         m_priv->conf_mgr->set_key_dir_to_notify ("/apps/nemiver") ;
         m_priv->conf_mgr->add_key_to_notify (
                 "/desktop/gnome/interface/monospace_font_name") ;
+
+        NEMIVER_CATCH
     }
     THROW_IF_FAIL (m_priv->conf_mgr) ;
     return m_priv->conf_mgr ;
@@ -572,15 +576,19 @@ Workbench::init_window ()
     IConfMgrSafePtr conf_mgr = get_configuration_manager () ;
     THROW_IF_FAIL (conf_mgr) ;
 
-    int width=0, height=0, pos_x=0, pos_y=0 ;
+    int width=700, height=500, pos_x=0, pos_y=0 ;
+    bool maximized=false ;
+
     LOG_DD ("getting windows geometry from confmgr ...") ;
+
+    NEMIVER_TRY
     conf_mgr->get_key_value (CONF_KEY_NEMIVER_WINDOW_WIDTH, width) ;
     conf_mgr->get_key_value (CONF_KEY_NEMIVER_WINDOW_HEIGHT, height) ;
     conf_mgr->get_key_value (CONF_KEY_NEMIVER_WINDOW_POSITION_X, pos_x) ;
     conf_mgr->get_key_value (CONF_KEY_NEMIVER_WINDOW_POSITION_Y, pos_y) ;
-    bool maximized=false ;
     conf_mgr->get_key_value (CONF_KEY_NEMIVER_WINDOW_MAXIMIZED, maximized) ;
     LOG_DD ("got windows geometry from confmgr.") ;
+    NEMIVER_CATCH
 
     if (width) {
         LOG_DD ("restoring windows geometry from confmgr ...") ;
@@ -596,12 +604,17 @@ Workbench::init_window ()
 
     //set the minimum width/height of nemiver, just in case.
     width=0, height=0 ;
+
+    NEMIVER_TRY
     conf_mgr->get_key_value (CONF_KEY_NEMIVER_WINDOW_MINIMUM_WIDTH, width) ;
     conf_mgr->get_key_value (CONF_KEY_NEMIVER_WINDOW_MINIMUM_HEIGHT, height) ;
+    NEMIVER_CATCH
+
     if (!width)
         width = 700;
     if (!height)
         height = 500;
+
     m_priv->root_window->set_size_request (width, height) ;
     LOG_DD ("set windows min size to ("
             << (int) width
@@ -805,7 +818,9 @@ Workbench::save_window_geometry ()
     bool maximized = (m_priv->root_window->get_window()->get_state()
                       & Gdk::WINDOW_STATE_MAXIMIZED);
 
+    NEMIVER_TRY
     conf_mgr->set_key_value (CONF_KEY_NEMIVER_WINDOW_MAXIMIZED, maximized) ;
+
     if (!maximized) {
         LOG_DD ("storing windows geometry to confmgr...") ;
         conf_mgr->set_key_value (CONF_KEY_NEMIVER_WINDOW_WIDTH, width) ;
@@ -816,6 +831,7 @@ Workbench::save_window_geometry ()
     } else {
         LOG_DD ("windows was maximized, didn't store its geometry") ;
     }
+    NEMIVER_CATCH_NOX
 }
 
 void



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]