glom r1820 - in trunk: . glom glom/libglom/data_structure/layout glom/reports



Author: murrayc
Date: Sun Dec 21 16:13:15 2008
New Revision: 1820
URL: http://svn.gnome.org/viewvc/glom?rev=1820&view=rev

Log:
2008-12-21  Murray Cumming  <murrayc murrayc com>

* glom/libglom/data_structure/layout/layoutitem_text.cc: 
Copy constructor and operator=: Copy the underlying text, not just 
the smartpointer to it. This stops us from accidentally changing the 
empty available template parts in reports.
Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/309417
(elmergato) 

Modified:
   trunk/ChangeLog
   trunk/glom/frame_glom.cc
   trunk/glom/libglom/data_structure/layout/layoutitem_text.cc
   trunk/glom/reports/dialog_layout_report.cc

Modified: trunk/glom/frame_glom.cc
==============================================================================
--- trunk/glom/frame_glom.cc	(original)
+++ trunk/glom/frame_glom.cc	Sun Dec 21 16:13:15 2008
@@ -1444,9 +1444,11 @@
   {
     Utils::get_glade_developer_widget_derived_with_warning("box_reports", m_pBox_Reports);
     m_pDialog_Reports = new Dialog_Glom(m_pBox_Reports);
+    m_pDialog_Reports->set_transient_for(*(get_app_window()));
 
     Utils::get_glade_developer_widget_derived_with_warning("window_report_layout", m_pDialogLayoutReport);
     add_view(m_pDialogLayoutReport);
+    m_pDialogLayoutReport->set_transient_for(*(get_app_window()));
     m_pDialogLayoutReport->signal_hide().connect( sigc::mem_fun(*this, &Frame_Glom::on_dialog_layout_report_hide) );
 
     m_pDialog_Reports->get_vbox()->pack_start(*m_pBox_Reports);

Modified: trunk/glom/libglom/data_structure/layout/layoutitem_text.cc
==============================================================================
--- trunk/glom/libglom/data_structure/layout/layoutitem_text.cc	(original)
+++ trunk/glom/libglom/data_structure/layout/layoutitem_text.cc	Sun Dec 21 16:13:15 2008
@@ -27,14 +27,16 @@
 LayoutItem_Text::LayoutItem_Text()
 {
   m_translatable_item_type = TRANSLATABLE_TYPE_TEXTOBJECT;
-  m_text = sharedptr<TranslatableItem>::create();
+  m_text = sharedptr<TranslatableItem>::create(); //TODO: Why use a smartpointer?
 }
 
 LayoutItem_Text::LayoutItem_Text(const LayoutItem_Text& src)
 : LayoutItem(src),
-  m_text(src.m_text),
   m_formatting(src.m_formatting)
 {
+  //Copy the underlying TranslatableItem, not the shardptr to it:
+  const TranslatableItem& src_item = *(src.m_text);
+  m_text = sharedptr<TranslatableItem>(new TranslatableItem(src_item));
 }
 
 LayoutItem_Text::~LayoutItem_Text()
@@ -49,7 +51,7 @@
 bool LayoutItem_Text::operator==(const LayoutItem_Text& src) const
 {
   bool result = LayoutItem::operator==(src) && 
-                (*m_text == *(src.m_text)) &&
+                (*m_text == *(src.m_text)) &&  //TODO: Compare the underlying item, not the smartpointer?
                 (m_formatting == src.m_formatting);
 
   return result;
@@ -60,7 +62,10 @@
 {
   LayoutItem::operator=(src);
 
-  m_text = src.m_text;
+  //Copy the underlying TranslatableItem, not the shardptr to it:
+  const TranslatableItem& src_item = *(src.m_text);
+  m_text = sharedptr<TranslatableItem>(new TranslatableItem(src_item));
+
   m_formatting = src.m_formatting;
 
   return *this;

Modified: trunk/glom/reports/dialog_layout_report.cc
==============================================================================
--- trunk/glom/reports/dialog_layout_report.cc	(original)
+++ trunk/glom/reports/dialog_layout_report.cc	Sun Dec 21 16:13:15 2008
@@ -631,14 +631,20 @@
   Glib::RefPtr<type_model> model_available = Glib::RefPtr<type_model>::cast_dynamic(m_treeview_available_parts->get_model());
 
   Gtk::TreeModel::iterator parent = get_selected_group_parent();
-  sharedptr<LayoutItem> pParentPart;
+  sharedptr<const LayoutItem> pParentPart;
   if(parent)
-    pParentPart = (*parent)[m_model_available_parts_main->m_columns.m_col_item];
+  {
+    sharedptr<LayoutItem> temp = (*parent)[m_model_available_parts_main->m_columns.m_col_item];
+    parent = temp;
+  }
 
   Gtk::TreeModel::iterator available = get_selected_available();
-  sharedptr<LayoutItem> pAvailablePart;
+  sharedptr<const LayoutItem> pAvailablePart;
   if(available)
-    pAvailablePart = (*available)[model_available->m_columns.m_col_item];
+  {
+    sharedptr<LayoutItem> temp = (*available)[model_available->m_columns.m_col_item];
+    pAvailablePart = temp;
+  }
 
 
   //Check whether the available part may be a child of the selected parent:



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