• R/O
  • HTTP
  • SSH
  • HTTPS

提交

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

作図ソフト dia の改良版


Commit MetaInfo

修訂aa744f4d2e12e6e48dab7b7b78517bbb8637e7ae (tree)
時間2004-05-06 00:29:25
作者Lars Clausen <lclausen@src....>
CommiterLars Clausen

Log Message

DiagramData now GObject, stable pagesetup

Change Summary

差異

--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
11 2004-05-05 Lars Clausen <lars@raeder.dk>
22
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+
310 * app/dia-props.c (diagram_properties_respond):
411 * app/diagram.c (diagram_set_modified):
512 * app/undo.c:
--- a/app/diagram.c
+++ b/app/diagram.c
@@ -84,7 +84,8 @@ diagram_finalize(GObject *object)
8484
8585 assert(dia->displays==NULL);
8686
87- diagram_data_destroy(dia->data);
87+ g_object_unref(dia->data);
88+ dia->data = NULL;
8889
8990 g_free(dia->filename);
9091
@@ -112,6 +113,7 @@ diagram_class_init (DiagramClass *klass)
112113 Diagram *
113114 diagram_new() {
114115 Diagram *dia = g_object_new(DIA_TYPE_DIAGRAM, NULL);
116+ g_object_ref(dia);
115117 return dia;
116118 }
117119
--- a/app/display.c
+++ b/app/display.c
@@ -961,6 +961,7 @@ ddisp_destroy(DDisplay *ddisp)
961961
962962 ddisplay_im_context_preedit_reset(ddisp, active_focus());
963963
964+ /* This calls ddisplay_really_destroy */
964965 gtk_widget_destroy (ddisp->shell);
965966 }
966967
--- a/app/filedlg.c
+++ b/app/filedlg.c
@@ -47,7 +47,7 @@ static int
4747 file_dialog_hide (GtkWidget *filesel)
4848 {
4949 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)));
5151 gtk_object_set_user_data(GTK_OBJECT(filesel), NULL);
5252
5353 #if 0
@@ -333,7 +333,7 @@ file_save_as_callback(gpointer data, guint action, GtkWidget *widget)
333333 dia->filename ? dia->filename
334334 : "." G_DIR_SEPARATOR_S);
335335 gtk_object_set_user_data(GTK_OBJECT(savedlg), dia);
336- g_object_ref(dia);
336+ g_object_ref(dia);
337337 gtk_widget_show(savedlg);
338338 }
339339
@@ -449,11 +449,12 @@ file_export_ok_callback(GtkWidget *w, GtkFileSelection *fs)
449449 ->menu_item));
450450 if (!ef)
451451 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);
457458
458459 file_dialog_hide(exportdlg);
459460 }
@@ -515,7 +516,7 @@ file_export_callback(gpointer data, guint action, GtkWidget *widget)
515516 }
516517
517518 gtk_object_set_user_data(GTK_OBJECT(exportdlg), dia);
518- g_object_ref(dia);
519+ g_object_ref(dia);
519520 gtk_widget_set_sensitive(exportdlg, TRUE);
520521 if (GTK_WIDGET_VISIBLE(exportdlg))
521522 return;
--- a/app/pagesetup.c
+++ b/app/pagesetup.c
@@ -57,7 +57,6 @@ pagesetup_respond(GtkWidget *widget,
5757
5858 if (response_id != GTK_RESPONSE_APPLY) {
5959 g_object_unref(ps->dia);
60- g_free(ps);
6160 gtk_widget_destroy(ps->window);
6261 }
6362
--- a/lib/diagramdata.c
+++ b/lib/diagramdata.c
@@ -29,53 +29,43 @@
2929 static const Rectangle invalid_extents = { -1.0,-1.0,-1.0,-1.0 };
3030 static void set_parent_layer(gpointer layer, gpointer object);
3131
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+ }
7060
71- data->is_compressed = prefs->compress_save; // Overridden by doc
72-
73- return data;
61+ return object_type;
7462 }
7563
76-void
77-diagram_data_destroy(DiagramData *data)
64+static void
65+diagram_data_finalize(GObject *object)
7866 {
67+ DiagramData *data = DIA_DIAGRAM_DATA(object);
68+
7969 int i;
8070
8171 g_free(data->paper.name);
@@ -89,7 +79,65 @@ diagram_data_destroy(DiagramData *data)
8979 g_list_free(data->selected);
9080 data->selected = NULL; /* for safety */
9181 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);
93141 }
94142
95143 Layer *
--- a/lib/diagramdata.h
+++ b/lib/diagramdata.h
@@ -38,6 +38,16 @@ struct _NewDiagramData {
3838 int compress_save;
3939 };
4040
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+
4151 struct _DiagramData {
4252 GObject parent_instance;
4353
@@ -87,6 +97,10 @@ struct _DiagramData {
8797 GList *text_edits;
8898 };
8999
100+typedef struct _DiagramDataClass {
101+ GObjectClass parent_class;
102+} DiagramDataClass;
103+
90104 struct _Layer {
91105 char *name;
92106 Rectangle extents; /* The extents of the layer */