[glom] Dialog_Properties: Allow more null pointer checks.



commit 94d8acc35dbfeeafb4ad2fbdcd84e6066f0ccd39
Author: Murray Cumming <murrayc murrayc com>
Date:   Sat Nov 16 11:46:25 2013 +0100

    Dialog_Properties: Allow more null pointer checks.

 .../mode_design/fields/dialog_defaultformatting.cc |    2 +-
 glom/mode_design/fields/dialog_fieldcalculation.cc |    2 +-
 glom/mode_design/fields/dialog_fielddefinition.cc  |    8 +++---
 .../layout_item_dialogs/dialog_buttonscript.cc     |    2 +-
 .../layout_item_dialogs/dialog_imageobject.cc      |    2 +-
 .../layout/layout_item_dialogs/dialog_line.cc      |    2 +-
 .../layout_item_dialogs/dialog_textobject.cc       |    2 +-
 .../script_library/dialog_script_library.cc        |    2 +-
 glom/utility_widgets/dialog_properties.cc          |   29 ++++++++++++++-----
 glom/utility_widgets/dialog_properties.h           |    8 ++++-
 10 files changed, 38 insertions(+), 21 deletions(-)
---
diff --git a/glom/mode_design/fields/dialog_defaultformatting.cc 
b/glom/mode_design/fields/dialog_defaultformatting.cc
index ecb17a0..7e667a2 100644
--- a/glom/mode_design/fields/dialog_defaultformatting.cc
+++ b/glom/mode_design/fields/dialog_defaultformatting.cc
@@ -51,7 +51,7 @@ Dialog_DefaultFormatting::Dialog_DefaultFormatting(BaseObjectType* cobject, cons
 
   if(m_box_formatting)
   {
-    on_foreach_connect(*m_box_formatting);
+    on_foreach_connect(m_box_formatting);
 
     //Plus an extra signal for the related extra show-also fields:
     m_box_formatting->signal_modified().connect(
diff --git a/glom/mode_design/fields/dialog_fieldcalculation.cc 
b/glom/mode_design/fields/dialog_fieldcalculation.cc
index dba8411..d103882 100644
--- a/glom/mode_design/fields/dialog_fieldcalculation.cc
+++ b/glom/mode_design/fields/dialog_fieldcalculation.cc
@@ -45,7 +45,7 @@ Dialog_FieldCalculation::Dialog_FieldCalculation(BaseObjectType* cobject, const
   builder->get_widget("label_triggered_by", m_label_triggered_by);
 
   m_button_test->signal_clicked().connect( sigc::mem_fun(*this, &Dialog_FieldCalculation::on_button_test) );
-  //on_foreach_connect(*this);
+  //on_foreach_connect(this);
 
   if(m_text_view)
   {
diff --git a/glom/mode_design/fields/dialog_fielddefinition.cc 
b/glom/mode_design/fields/dialog_fielddefinition.cc
index 8e1edd6..edc5a4c 100644
--- a/glom/mode_design/fields/dialog_fielddefinition.cc
+++ b/glom/mode_design/fields/dialog_fielddefinition.cc
@@ -93,9 +93,9 @@ Dialog_FieldDefinition::Dialog_FieldDefinition(BaseObjectType* cobject, const Gl
   on_combo_type_changed();
 
 
-  on_foreach_connect(*this);
-  on_foreach_connect(*m_pBox_DefaultValueSimple);
-  on_foreach_connect(*m_pBox_ValueTab);
+  on_foreach_connect(this);
+  on_foreach_connect(m_pBox_DefaultValueSimple);
+  on_foreach_connect(m_pBox_ValueTab);
 
   Dialog_Properties::set_modified(false);
 
@@ -150,7 +150,7 @@ void Dialog_FieldDefinition::set_field(const sharedptr<const Field>& field, cons
   if(!m_pDataWidget_DefaultValueSimple->get_data_child_widget())
     std::cerr << G_STRFUNC << ": The DataWidget did not create a child widget." << std::endl;
 
-  on_foreach_connect(*m_pDataWidget_DefaultValueSimple);
+  on_foreach_connect(m_pDataWidget_DefaultValueSimple);
 
   Gtk::Label* pLabel = m_pDataWidget_DefaultValueSimple->get_label();
   if(!pLabel->get_text().empty())
diff --git a/glom/mode_design/layout/layout_item_dialogs/dialog_buttonscript.cc 
b/glom/mode_design/layout/layout_item_dialogs/dialog_buttonscript.cc
index 7c929e0..3ff5637 100644
--- a/glom/mode_design/layout/layout_item_dialogs/dialog_buttonscript.cc
+++ b/glom/mode_design/layout/layout_item_dialogs/dialog_buttonscript.cc
@@ -47,7 +47,7 @@ Dialog_ButtonScript::Dialog_ButtonScript(BaseObjectType* cobject, const Glib::Re
 
   // Set a monospace font
   m_text_view_script->override_font(Pango::FontDescription("Monospace"));
-  //on_foreach_connect(*this);
+  //on_foreach_connect(this);
 
   //Dialog_Properties::set_modified(false);
 
diff --git a/glom/mode_design/layout/layout_item_dialogs/dialog_imageobject.cc 
b/glom/mode_design/layout/layout_item_dialogs/dialog_imageobject.cc
index a6296a6..656c593 100644
--- a/glom/mode_design/layout/layout_item_dialogs/dialog_imageobject.cc
+++ b/glom/mode_design/layout/layout_item_dialogs/dialog_imageobject.cc
@@ -46,7 +46,7 @@ Dialog_ImageObject::Dialog_ImageObject(BaseObjectType* cobject, const Glib::RefP
   builder->get_widget("button_choose_image", m_button_choose_image);
   m_button_choose_image->signal_clicked().connect(sigc::mem_fun(*this, 
&Dialog_ImageObject::on_button_choose));
 
-  //on_foreach_connect(*this);
+  //on_foreach_connect(this);
 
   //Dialog_Properties::set_modified(false);
 
diff --git a/glom/mode_design/layout/layout_item_dialogs/dialog_line.cc 
b/glom/mode_design/layout/layout_item_dialogs/dialog_line.cc
index 30880b7..7a096b6 100644
--- a/glom/mode_design/layout/layout_item_dialogs/dialog_line.cc
+++ b/glom/mode_design/layout/layout_item_dialogs/dialog_line.cc
@@ -40,7 +40,7 @@ Dialog_Line::Dialog_Line(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builde
   builder->get_widget("spinbutton_line_width",  m_spinbutton_line_width);
   builder->get_widget("colorbutton",  m_colorbutton);
 
-  //on_foreach_connect(*this);
+  //on_foreach_connect(this);
 
   //Dialog_Properties::set_modified(false);
 
diff --git a/glom/mode_design/layout/layout_item_dialogs/dialog_textobject.cc 
b/glom/mode_design/layout/layout_item_dialogs/dialog_textobject.cc
index e70d77a..157b48c 100644
--- a/glom/mode_design/layout/layout_item_dialogs/dialog_textobject.cc
+++ b/glom/mode_design/layout/layout_item_dialogs/dialog_textobject.cc
@@ -42,7 +42,7 @@ Dialog_TextObject::Dialog_TextObject(BaseObjectType* cobject, const Glib::RefPtr
   builder->get_widget("entry_title",  m_entry_title);
   builder->get_widget("textview_text",  m_text_view);
 
-  //on_foreach_connect(*this);
+  //on_foreach_connect(this);
 
   //Dialog_Properties::set_modified(false);
 
diff --git a/glom/mode_design/script_library/dialog_script_library.cc 
b/glom/mode_design/script_library/dialog_script_library.cc
index bcda2b4..179985e 100644
--- a/glom/mode_design/script_library/dialog_script_library.cc
+++ b/glom/mode_design/script_library/dialog_script_library.cc
@@ -53,7 +53,7 @@ Dialog_ScriptLibrary::Dialog_ScriptLibrary(BaseObjectType* cobject, const Glib::
   m_button_add->signal_clicked().connect( sigc::mem_fun(*this, &Dialog_ScriptLibrary::on_button_add) );
   m_button_remove->signal_clicked().connect( sigc::mem_fun(*this, &Dialog_ScriptLibrary::on_button_remove) );
   m_combobox_name->signal_changed().connect( sigc::mem_fun(*this, 
&Dialog_ScriptLibrary::on_combo_name_changed) );
-  //on_foreach_connect(*this);
+  //on_foreach_connect(this);
 
   //Dialog_Properties::set_modified(false);
 
diff --git a/glom/utility_widgets/dialog_properties.cc b/glom/utility_widgets/dialog_properties.cc
index 7c05afc..c43b0a1 100644
--- a/glom/utility_widgets/dialog_properties.cc
+++ b/glom/utility_widgets/dialog_properties.cc
@@ -22,6 +22,7 @@
 #include "dialog_properties.h"
 #include <gtkmm/togglebutton.h>
 #include <gtkmm/textview.h>
+#include <iostream>
 
 namespace Glom
 {
@@ -71,37 +72,43 @@ void Dialog_Properties::add(Gtk::Widget& /*widget */)
   //on_foreach_connect(widget);
 }
 
-void Dialog_Properties::widget_connect_changed_signal(Gtk::Widget& widget)
+void Dialog_Properties::widget_connect_changed_signal(Gtk::Widget* widget)
 {
-  Gtk::ComboBox* pCombo = dynamic_cast<Gtk::ComboBox*>(&widget);
+  if(!widget)
+  {
+    std::cerr << G_STRFUNC << ": widget is null." << std::endl;
+    return;
+  }
+
+  Gtk::ComboBox* pCombo = dynamic_cast<Gtk::ComboBox*>(widget);
   if(pCombo) //If it is actually a Combo:
   {
     pCombo->signal_changed().connect(sigc::mem_fun(*this, &Dialog_Properties::on_anything_changed));
   }
   else
   {
-    Gtk::Entry* pEntry = dynamic_cast<Gtk::Entry*>(&widget);
+    Gtk::Entry* pEntry = dynamic_cast<Gtk::Entry*>(widget);
     if(pEntry) //If it is actually an Entry:
     {
       pEntry->signal_changed().connect(sigc::mem_fun(*this, &Dialog_Properties::on_anything_changed));
     }
     else
     {
-      Gtk::ToggleButton* pToggleButton = dynamic_cast<Gtk::ToggleButton*>(&widget);
+      Gtk::ToggleButton* pToggleButton = dynamic_cast<Gtk::ToggleButton*>(widget);
       if(pToggleButton)
       {
         pToggleButton->signal_toggled().connect( sigc::mem_fun(*this, 
&Dialog_Properties::on_anything_changed) );
       }
       else
       {
-        Gtk::TextView* pTextView = dynamic_cast<Gtk::TextView*>(&widget);
+        Gtk::TextView* pTextView = dynamic_cast<Gtk::TextView*>(widget);
         if(pTextView)
         {
           pTextView->get_buffer()->signal_changed().connect( sigc::mem_fun(*this, 
&Dialog_Properties::on_anything_changed) );
         }
         else
         {
-          AddDel* pAddDel = dynamic_cast<AddDel*>(&widget);
+          AddDel* pAddDel = dynamic_cast<AddDel*>(widget);
           if(pAddDel)
           {
             pAddDel->signal_user_changed().connect( sigc::mem_fun(*this, 
&Dialog_Properties::on_adddel_user_changed) );
@@ -129,12 +136,18 @@ void Dialog_Properties::on_anything_changed()
   }
 }
 
-void Dialog_Properties::on_foreach_connect(Gtk::Widget& widget)
+void Dialog_Properties::on_foreach_connect(Gtk::Widget* widget)
 {
+  if(!widget)
+  {
+    std::cerr << G_STRFUNC << ": widget is null." << std::endl;
+    return;
+  }
+
   widget_connect_changed_signal(widget); //Connect the appropriate signal
 
   //Recurse through children:
-  Gtk::Container* pContainer = dynamic_cast<Gtk::Container*>(&widget);
+  Gtk::Container* pContainer = dynamic_cast<Gtk::Container*>(widget);
   if(pContainer)
   {
     pContainer->foreach( sigc::mem_fun(*this, &Dialog_Properties::on_foreach_connect)); //recursive
diff --git a/glom/utility_widgets/dialog_properties.h b/glom/utility_widgets/dialog_properties.h
index e9ffadf..b2112c5 100644
--- a/glom/utility_widgets/dialog_properties.h
+++ b/glom/utility_widgets/dialog_properties.h
@@ -56,8 +56,12 @@ protected:
   /// Disable/enable other controls when a control is selected.
   virtual void enforce_constraints();
 
-  void on_foreach_connect(Gtk::Widget& widget);
-  void widget_connect_changed_signal(Gtk::Widget& widget);
+  void on_foreach_connect(Gtk::Widget* widget);
+
+private:
+  void widget_connect_changed_signal(Gtk::Widget* widget);
+
+protected:
   void set_blocked(bool val = true);
 
   type_signal_apply m_signal_apply;


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