dia r4025 - in trunk: . app
- From: hans svn gnome org
- To: svn-commits-list gnome org
- Subject: dia r4025 - in trunk: . app
- Date: Mon, 12 May 2008 18:15:18 +0100 (BST)
Author: hans
Date: Mon May 12 17:15:18 2008
New Revision: 4025
URL: http://svn.gnome.org/viewvc/dia?rev=4025&view=rev
Log:
2008-05-12 Hans Breuer <hans breuer org>
* app/sheets.c : attempt to add some robustness
* app/sheets_dialog_callbacks.c : g_new0() to catch mis-initialization
(on_sheet_new_dialog_button_ok_clicked) : a newly created sheet was
not selected after creation
(on_sheets_dialog_button_move_clicked) : a move was not considered a
modification of the source sheet
(on_sheets_dialog_button_apply_clicked) : when finally registering the
a new sheet the struct was not properly passed, same for new object
Together this should fix bug #393526
Modified:
trunk/ChangeLog
trunk/app/sheets.c
trunk/app/sheets_dialog_callbacks.c
Modified: trunk/app/sheets.c
==============================================================================
--- trunk/app/sheets.c (original)
+++ trunk/app/sheets.c Mon May 12 17:15:18 2008
@@ -216,8 +216,8 @@
if (sheets_mods_list)
{
- /* FIXME: not sure if I understood the data structure
- but simply leaking isn't acceptable ... --hb
+ /* not sure if I understood the data structure
+ * but simply leaking isn't acceptable ... --hb
*/
g_slist_foreach(sheets_mods_list, (GFunc)g_free, NULL);
g_slist_free(sheets_mods_list);
Modified: trunk/app/sheets_dialog_callbacks.c
==============================================================================
--- trunk/app/sheets_dialog_callbacks.c (original)
+++ trunk/app/sheets_dialog_callbacks.c Mon May 12 17:15:18 2008
@@ -850,7 +850,7 @@
object_register_type(ot);
entry = lookup_widget(sheets_new_dialog, "entry_svg_description");
- sheet_obj = g_new(SheetObject, 1);
+ sheet_obj = g_new0(SheetObject, 1);
sheet_obj->object_type = g_strdup(ot->name);
{
sheet_obj->description =
@@ -919,7 +919,7 @@
entry = lookup_widget(sheets_new_dialog, "entry_sheet_description");
sheet_descrip = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
- sheet = g_new(Sheet, 1);
+ sheet = g_new0(Sheet, 1);
sheet->name = sheet_name;
sheet->filename = "";
sheet->description = sheet_descrip;
@@ -934,7 +934,7 @@
optionmenu = gtk_object_get_data(GTK_OBJECT(table_sheets),
"active_optionmenu");
g_assert(optionmenu);
- sheets_optionmenu_create(optionmenu, wrapbox, NULL);
+ sheets_optionmenu_create(optionmenu, wrapbox, sheet_name);
}
break;
@@ -1475,7 +1475,7 @@
if (!som)
return;
- so = g_new(SheetObject, 1);
+ so = g_new0(SheetObject, 1);
so->object_type = g_strdup(som->sheet_object.object_type);
so->description = g_strdup(som->sheet_object.description);
so->pixmap = som->sheet_object.pixmap;
@@ -1485,7 +1485,7 @@
so->pixmap_file = g_strdup(som->sheet_object.pixmap_file);
so->has_icon_on_sheet = som->sheet_object.has_icon_on_sheet;
- som_new = g_new(SheetObjectMod, 1);
+ som_new = g_new0(SheetObjectMod, 1);
som_new->sheet_object = *so;
som_new->type = som->type;
som_new->mod = SHEET_OBJECT_MOD_NONE;
@@ -1554,8 +1554,14 @@
sheets_dialog_copy_object(active_button, target_wrapbox);
som = gtk_object_get_data(GTK_OBJECT(active_button), "sheet_object_mod");
- if (som)
+ if (som) {
+ SheetMod *sm;
+
som->mod = SHEET_OBJECT_MOD_DELETED;
+ /* also mark the source sheet as changed */
+ sm = gtk_object_get_data(GTK_OBJECT(active_button), "sheet_mod");
+ sm->mod = SHEETMOD_MOD_CHANGED;
+ }
new_active_button = sheets_dialog_set_new_active_button();
@@ -1824,25 +1830,32 @@
{
GSList *sheet_object_mods_list;
GSList *list;
+ Sheet *new_sheet = NULL;
case SHEETMOD_MOD_NEW:
write_user_sheet(&sm->sheet);
sheet_object_mods_list = sm->sheet.objects;
sm->sheet.objects = NULL;
- register_sheet(&sm->sheet);
+ /* we have to transfer 'permanent' memory */
+ new_sheet = g_new0 (Sheet, 1);
+ *new_sheet = sm->sheet;
+ register_sheet(new_sheet);
for (list = sheet_object_mods_list; list; list = g_slist_next(list))
{
SheetObjectMod *som;
+ SheetObject *new_object;
som = list->data;
if (som->mod == SHEET_OBJECT_MOD_DELETED)
continue;
- sheet_append_sheet_obj(&sm->sheet, &som->sheet_object);
+ new_object = g_new0(SheetObject, 1);
+ *new_object = som->sheet_object;
+ sheet_append_sheet_obj(new_sheet, new_object);
}
-
+
dia_sort_sheets();
fill_sheet_menu();
break;
@@ -1861,12 +1874,15 @@
for (list = sheet_object_mods_list; list; list = g_slist_next(list))
{
SheetObjectMod *som;
+ SheetObject *new_object;
som = list->data;
if (som->mod == SHEET_OBJECT_MOD_DELETED)
continue;
- sheet_append_sheet_obj(sheets_list->data, &som->sheet_object);
+ new_object = g_new0(SheetObject, 1);
+ *new_object = som->sheet_object;
+ sheet_append_sheet_obj(sheets_list->data, new_object);
}
fill_sheet_menu();
break;
@@ -1881,7 +1897,9 @@
find_list = g_slist_find_custom(sheets_list, &sm->sheet,
sheets_find_sheet);
g_assert(sheets_list);
- g_slist_remove_link(sheets_list, find_list);
+ if (!g_slist_remove_link(sheets_list, find_list))
+ g_warning ("No sheets left?");
+
dia_sort_sheets();
fill_sheet_menu();
break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]