作図ソフト dia の改良版
修訂 | aa744f4d2e12e6e48dab7b7b78517bbb8637e7ae (tree) |
---|---|
時間 | 2004-05-06 00:29:25 |
作者 | Lars Clausen <lclausen@src....> |
Commiter | Lars Clausen |
DiagramData now GObject, stable pagesetup
@@ -1,5 +1,12 @@ | ||
1 | 1 | 2004-05-05 Lars Clausen <lars@raeder.dk> |
2 | 2 | |
3 | + * app/pagesetup.c (pagesetup_respond): Do not free ps twice. | |
4 | + Notify takes care. Should maybe use that more. | |
5 | + | |
6 | + * lib/diagramdata.[ch]: | |
7 | + * app/filedlg.c (file_export_ok_callback): | |
8 | + * app/diagram.c (diagram_finalize): DiagramData now a GObject. | |
9 | + | |
3 | 10 | * app/dia-props.c (diagram_properties_respond): |
4 | 11 | * app/diagram.c (diagram_set_modified): |
5 | 12 | * app/undo.c: |
@@ -84,7 +84,8 @@ diagram_finalize(GObject *object) | ||
84 | 84 | |
85 | 85 | assert(dia->displays==NULL); |
86 | 86 | |
87 | - diagram_data_destroy(dia->data); | |
87 | + g_object_unref(dia->data); | |
88 | + dia->data = NULL; | |
88 | 89 | |
89 | 90 | g_free(dia->filename); |
90 | 91 |
@@ -112,6 +113,7 @@ diagram_class_init (DiagramClass *klass) | ||
112 | 113 | Diagram * |
113 | 114 | diagram_new() { |
114 | 115 | Diagram *dia = g_object_new(DIA_TYPE_DIAGRAM, NULL); |
116 | + g_object_ref(dia); | |
115 | 117 | return dia; |
116 | 118 | } |
117 | 119 |
@@ -961,6 +961,7 @@ ddisp_destroy(DDisplay *ddisp) | ||
961 | 961 | |
962 | 962 | ddisplay_im_context_preedit_reset(ddisp, active_focus()); |
963 | 963 | |
964 | + /* This calls ddisplay_really_destroy */ | |
964 | 965 | gtk_widget_destroy (ddisp->shell); |
965 | 966 | } |
966 | 967 |
@@ -47,7 +47,7 @@ static int | ||
47 | 47 | file_dialog_hide (GtkWidget *filesel) |
48 | 48 | { |
49 | 49 | gtk_widget_hide (filesel); |
50 | - g_object_unref(gtk_object_get_user_data(GTK_OBJECT(filesel))); | |
50 | + g_object_unref(gtk_object_get_user_data(GTK_OBJECT(filesel))); | |
51 | 51 | gtk_object_set_user_data(GTK_OBJECT(filesel), NULL); |
52 | 52 | |
53 | 53 | #if 0 |
@@ -333,7 +333,7 @@ file_save_as_callback(gpointer data, guint action, GtkWidget *widget) | ||
333 | 333 | dia->filename ? dia->filename |
334 | 334 | : "." G_DIR_SEPARATOR_S); |
335 | 335 | gtk_object_set_user_data(GTK_OBJECT(savedlg), dia); |
336 | - g_object_ref(dia); | |
336 | + g_object_ref(dia); | |
337 | 337 | gtk_widget_show(savedlg); |
338 | 338 | } |
339 | 339 |
@@ -449,11 +449,12 @@ file_export_ok_callback(GtkWidget *w, GtkFileSelection *fs) | ||
449 | 449 | ->menu_item)); |
450 | 450 | if (!ef) |
451 | 451 | ef = filter_guess_export_filter(filename); |
452 | - if (ef) | |
453 | - ef->export(dia->data, filename, dia->filename, ef->user_data); | |
454 | - else | |
455 | - message_error(_("Could not determine which export filter\n" | |
456 | - "to use to save '%s'"), filename); | |
452 | + if (ef) { | |
453 | + g_object_ref(dia->data); | |
454 | + ef->export(dia->data, filename, dia->filename, ef->user_data); | |
455 | + } else | |
456 | + message_error(_("Could not determine which export filter\n" | |
457 | + "to use to save '%s'"), filename); | |
457 | 458 | |
458 | 459 | file_dialog_hide(exportdlg); |
459 | 460 | } |
@@ -515,7 +516,7 @@ file_export_callback(gpointer data, guint action, GtkWidget *widget) | ||
515 | 516 | } |
516 | 517 | |
517 | 518 | gtk_object_set_user_data(GTK_OBJECT(exportdlg), dia); |
518 | - g_object_ref(dia); | |
519 | + g_object_ref(dia); | |
519 | 520 | gtk_widget_set_sensitive(exportdlg, TRUE); |
520 | 521 | if (GTK_WIDGET_VISIBLE(exportdlg)) |
521 | 522 | return; |
@@ -57,7 +57,6 @@ pagesetup_respond(GtkWidget *widget, | ||
57 | 57 | |
58 | 58 | if (response_id != GTK_RESPONSE_APPLY) { |
59 | 59 | g_object_unref(ps->dia); |
60 | - g_free(ps); | |
61 | 60 | gtk_widget_destroy(ps->window); |
62 | 61 | } |
63 | 62 |
@@ -29,53 +29,43 @@ | ||
29 | 29 | static const Rectangle invalid_extents = { -1.0,-1.0,-1.0,-1.0 }; |
30 | 30 | static void set_parent_layer(gpointer layer, gpointer object); |
31 | 31 | |
32 | -DiagramData * | |
33 | -new_diagram_data (NewDiagramData *prefs) | |
34 | -{ | |
35 | - DiagramData *data; | |
36 | - Layer *first_layer; | |
37 | - | |
38 | - data = g_new (DiagramData, 1); | |
39 | - | |
40 | - data->extents.left = 0.0; | |
41 | - data->extents.right = 10.0; | |
42 | - data->extents.top = 0.0; | |
43 | - data->extents.bottom = 10.0; | |
44 | - | |
45 | - data->bg_color = prefs->bg_color; | |
46 | - data->pagebreak_color = prefs->pagebreak_color; | |
47 | - | |
48 | - get_paper_info (&data->paper, -1, prefs); | |
49 | - | |
50 | - data->grid.dynamic = TRUE; | |
51 | - data->grid.width_x = 1.0; | |
52 | - data->grid.width_y = 1.0; | |
53 | - data->grid.visible_x = 1; | |
54 | - data->grid.visible_y = 1; | |
55 | - data->grid.colour = prefs->grid_color; | |
56 | - | |
57 | - data->guides.nhguides = 0; | |
58 | - data->guides.hguides = NULL; | |
59 | - data->guides.nvguides = 0; | |
60 | - data->guides.vguides = NULL; | |
61 | - | |
62 | - first_layer = new_layer(g_strdup(_("Background")),data); | |
63 | - | |
64 | - data->layers = g_ptr_array_new (); | |
65 | - g_ptr_array_add (data->layers, first_layer); | |
66 | - data->active_layer = first_layer; | |
67 | - | |
68 | - data->selected_count = 0; | |
69 | - data->selected = NULL; | |
32 | +static void diagram_data_class_init (DiagramDataClass *klass); | |
33 | + | |
34 | +static gpointer parent_class = NULL; | |
35 | + | |
36 | +GType | |
37 | +diagram_data_get_type (void) | |
38 | +{ | |
39 | + static GType object_type = 0; | |
40 | + | |
41 | + if (!object_type) | |
42 | + { | |
43 | + static const GTypeInfo object_info = | |
44 | + { | |
45 | + sizeof (DiagramDataClass), | |
46 | + (GBaseInitFunc) NULL, | |
47 | + (GBaseFinalizeFunc) NULL, | |
48 | + (GClassInitFunc) diagram_data_class_init, | |
49 | + NULL, /* class_finalize */ | |
50 | + NULL, /* class_data */ | |
51 | + sizeof (DiagramData), | |
52 | + 0, /* n_preallocs */ | |
53 | + NULL /* init */ | |
54 | + }; | |
55 | + | |
56 | + object_type = g_type_register_static (G_TYPE_OBJECT, | |
57 | + "DiagramData", | |
58 | + &object_info, 0); | |
59 | + } | |
70 | 60 | |
71 | - data->is_compressed = prefs->compress_save; // Overridden by doc | |
72 | - | |
73 | - return data; | |
61 | + return object_type; | |
74 | 62 | } |
75 | 63 | |
76 | -void | |
77 | -diagram_data_destroy(DiagramData *data) | |
64 | +static void | |
65 | +diagram_data_finalize(GObject *object) | |
78 | 66 | { |
67 | + DiagramData *data = DIA_DIAGRAM_DATA(object); | |
68 | + | |
79 | 69 | int i; |
80 | 70 | |
81 | 71 | g_free(data->paper.name); |
@@ -89,7 +79,65 @@ diagram_data_destroy(DiagramData *data) | ||
89 | 79 | g_list_free(data->selected); |
90 | 80 | data->selected = NULL; /* for safety */ |
91 | 81 | data->selected_count = 0; |
92 | - g_free(data); | |
82 | +} | |
83 | + | |
84 | +static void | |
85 | +diagram_data_class_init (DiagramDataClass *klass) | |
86 | +{ | |
87 | + GObjectClass *object_class = G_OBJECT_CLASS (klass); | |
88 | + | |
89 | + parent_class = g_type_class_peek_parent (klass); | |
90 | + | |
91 | + object_class->finalize = diagram_data_finalize; | |
92 | +} | |
93 | + | |
94 | +DiagramData * | |
95 | +new_diagram_data (NewDiagramData *prefs) | |
96 | +{ | |
97 | + DiagramData *data; | |
98 | + Layer *first_layer; | |
99 | + | |
100 | + data = g_object_new (DIA_TYPE_DIAGRAM_DATA, NULL); | |
101 | + | |
102 | + data->extents.left = 0.0; | |
103 | + data->extents.right = 10.0; | |
104 | + data->extents.top = 0.0; | |
105 | + data->extents.bottom = 10.0; | |
106 | + | |
107 | + data->bg_color = prefs->bg_color; | |
108 | + data->pagebreak_color = prefs->pagebreak_color; | |
109 | + | |
110 | + get_paper_info (&data->paper, -1, prefs); | |
111 | + | |
112 | + data->grid.dynamic = TRUE; | |
113 | + data->grid.width_x = 1.0; | |
114 | + data->grid.width_y = 1.0; | |
115 | + data->grid.visible_x = 1; | |
116 | + data->grid.visible_y = 1; | |
117 | + data->grid.colour = prefs->grid_color; | |
118 | + | |
119 | + data->guides.nhguides = 0; | |
120 | + data->guides.hguides = NULL; | |
121 | + data->guides.nvguides = 0; | |
122 | + data->guides.vguides = NULL; | |
123 | + | |
124 | + first_layer = new_layer(g_strdup(_("Background")),data); | |
125 | + | |
126 | + data->layers = g_ptr_array_new (); | |
127 | + g_ptr_array_add (data->layers, first_layer); | |
128 | + data->active_layer = first_layer; | |
129 | + | |
130 | + data->selected_count = 0; | |
131 | + data->selected = NULL; | |
132 | + | |
133 | + data->is_compressed = prefs->compress_save; // Overridden by doc | |
134 | + | |
135 | + return data; | |
136 | +} | |
137 | + | |
138 | +void | |
139 | +diagram_data_destroy(DiagramData *data) { | |
140 | + g_object_unref(data); | |
93 | 141 | } |
94 | 142 | |
95 | 143 | Layer * |
@@ -38,6 +38,16 @@ struct _NewDiagramData { | ||
38 | 38 | int compress_save; |
39 | 39 | }; |
40 | 40 | |
41 | +GType diagram_data_get_type (void) G_GNUC_CONST; | |
42 | + | |
43 | +#define DIA_TYPE_DIAGRAM_DATA (diagram_data_get_type ()) | |
44 | +#define DIA_DIAGRAM_DATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DIA_TYPE_DIAGRAM_DATA, DiagramData)) | |
45 | +#define DIA_DIAGRAM_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DIA_TYPE_DIAGRAM_DATA, DiagramDataClass)) | |
46 | +#define DIA_IS_DIAGRAM_DATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DIA_TYPE_DIAGRAM_DATA)) | |
47 | +#define DIA_DIAGRAM_DATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DIA_TYPE_DIAGRAM_DATA, DiagramDataClass)) | |
48 | + | |
49 | + | |
50 | + | |
41 | 51 | struct _DiagramData { |
42 | 52 | GObject parent_instance; |
43 | 53 |
@@ -87,6 +97,10 @@ struct _DiagramData { | ||
87 | 97 | GList *text_edits; |
88 | 98 | }; |
89 | 99 | |
100 | +typedef struct _DiagramDataClass { | |
101 | + GObjectClass parent_class; | |
102 | +} DiagramDataClass; | |
103 | + | |
90 | 104 | struct _Layer { |
91 | 105 | char *name; |
92 | 106 | Rectangle extents; /* The extents of the layer */ |