dee

Merge lp:~ken-vandine/dee/model_cleared_signal into lp:dee

Proposed by Ken VanDine
Status: Rejected
Rejected by: Michal Hruby
Proposed branch: lp:~ken-vandine/dee/model_cleared_signal
Merge into: lp:dee
Diff against target: 188 lines (+70/-0)
6 files modified
src/dee-model.c (+16/-0)
src/dee-model.h (+2/-0)
src/dee-proxy-model.c (+15/-0)
src/dee-serializable-model.c (+3/-0)
tests/test-model-signals.c (+33/-0)
vapi/dee-1.0.vapi (+1/-0)
To merge this branch: bzr merge lp:~ken-vandine/dee/model_cleared_signal
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Needs Fixing
Francis Ginther Abstain
Mikkel Kamstrup Erlandsen (community) Needs Fixing
Review via email: mp+91122@code.launchpad.net

Description of the change

Adds a DeeModel::cleared signal which is emitted when a model is cleared, before the rows are removed.

To post a comment you must log in.
Revision history for this message
Mikkel Kamstrup Erlandsen (kamstrup) wrote :

Can you attach a bug report describing the problem?

Test wise you can get into some more corner cases easily, namely clearing an empty model, and doing two successive clears. Ala:

160 +test_signal_cleared (SignalsFixture *fix, gconstpointer data)
161 +{
162 + gint i;
163 +
164 + g_signal_connect (fix->model, "cleared",
165 + G_CALLBACK (test_signal_cleared_callback), NULL);
166 +
++ /* clearing an empty model should work */
++ dee_model_clear (...)
++ g_assert_cmpint (..., 1);
++
167 + for (i = 0; i < 10000; i++)
168 + {
169 + dee_model_append (fix->model, i, "Test");
170 + }
171 +
172 + n_cleared_signals = 0;
173 + dee_model_clear (fix->model);
174 + g_assert_cmpint (n_cleared_signals, ==, 2);
++
++ /* two successive clears */
++ dee_model_clear (...)
++ g_assert_cmpint (..., 3);
175 +}
176 +

review: Needs Fixing
Revision history for this message
Francis Ginther (fginther) wrote :

Review was claimed by accident, please ignore.

review: Abstain
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Michal Hruby (mhr3) wrote :

With the changeset support in dee 1.2.6, I don't think we need this anymore.

Unmerged revisions

342. By Ken VanDine

Adds a DeeModel::cleared signal which is emitted when a model is cleared, before the rows are removed.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/dee-model.c'
2--- src/dee-model.c 2012-01-26 18:30:57 +0000
3+++ src/dee-model.c 2012-02-01 16:27:18 +0000
4@@ -98,6 +98,7 @@
5 DEE_MODEL_SIGNAL_ROW_ADDED,
6 DEE_MODEL_SIGNAL_ROW_REMOVED,
7 DEE_MODEL_SIGNAL_ROW_CHANGED,
8+ DEE_MODEL_SIGNAL_CLEARED,
9
10 DEE_MODEL_LAST_SIGNAL
11 };
12@@ -225,6 +226,21 @@
13 g_cclosure_marshal_VOID__BOXED,
14 G_TYPE_NONE, 1,
15 DEE_TYPE_MODEL_ITER);
16+
17+ /**
18+ * DeeModel::cleared:
19+ * @self: the #DeeModel on which the signal is emitted
20+ *
21+ * Connect to this signal to be notified when the model has been cleared.
22+ **/
23+ dee_model_signals[DEE_MODEL_SIGNAL_CLEARED] =
24+ g_signal_new ("cleared",
25+ DEE_TYPE_MODEL,
26+ G_SIGNAL_RUN_LAST,
27+ G_STRUCT_OFFSET (DeeModelIface,cleared),
28+ NULL, NULL, NULL,
29+ G_TYPE_NONE, 0);
30+
31 }
32
33 /**
34
35=== modified file 'src/dee-model.h'
36--- src/dee-model.h 2012-01-26 18:30:57 +0000
37+++ src/dee-model.h 2012-02-01 16:27:18 +0000
38@@ -92,6 +92,8 @@
39 void (*row_changed) (DeeModel *self,
40 DeeModelIter *iter);
41
42+ void (*cleared) (DeeModel *self);
43+
44 /*< public >*/
45 void (*set_schema_full) (DeeModel *self,
46 const char* const *column_schemas,
47
48=== modified file 'src/dee-proxy-model.c'
49--- src/dee-proxy-model.c 2011-10-24 19:52:06 +0000
50+++ src/dee-proxy-model.c 2012-02-01 16:27:18 +0000
51@@ -80,6 +80,7 @@
52 gulong row_added_handler;
53 gulong row_removed_handler;
54 gulong row_changed_handler;
55+ gulong cleared_handler;
56 };
57
58 #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
59@@ -212,6 +213,8 @@
60 static void on_back_end_row_changed (DeeProxyModel *self,
61 DeeModelIter *iter);
62
63+static void on_back_end_cleared (DeeProxyModel *self);
64+
65 /*
66 * Overrides for DeeSerializableModel
67 */
68@@ -237,6 +240,8 @@
69 g_signal_handler_disconnect (priv->back_end, priv->row_removed_handler);
70 if (priv->row_changed_handler != 0)
71 g_signal_handler_disconnect (priv->back_end, priv->row_changed_handler);
72+ if (priv->cleared_handler != 0)
73+ g_signal_handler_disconnect (priv->back_end, priv->cleared_handler);
74
75 g_object_unref (priv->back_end);
76 }
77@@ -269,6 +274,9 @@
78 priv->row_changed_handler =
79 g_signal_connect_swapped (priv->back_end, "row-changed",
80 G_CALLBACK (on_back_end_row_changed), object);
81+ priv->cleared_handler =
82+ g_signal_connect_swapped (priv->back_end, "cleared",
83+ G_CALLBACK (on_back_end_cleared), object);
84 }
85
86 /* GObjectClass has NULL 'constructed' member, but we add this check for
87@@ -415,6 +423,7 @@
88 priv->row_added_handler = 0;
89 priv->row_removed_handler = 0;
90 priv->row_changed_handler = 0;
91+ priv->cleared_handler = 0;
92 }
93
94 /*
95@@ -759,6 +768,12 @@
96 g_signal_emit_by_name (self, "row-changed", iter);
97 }
98
99+static void
100+on_back_end_cleared (DeeProxyModel *self)
101+{
102+ g_signal_emit_by_name (self, "cleared", NULL);
103+}
104+
105 /*
106 * Overrides for DeeSerializableModel
107 */
108
109=== modified file 'src/dee-serializable-model.c'
110--- src/dee-serializable-model.c 2012-01-09 11:17:10 +0000
111+++ src/dee-serializable-model.c 2012-02-01 16:27:18 +0000
112@@ -462,6 +462,9 @@
113
114 iter = dee_model_get_first_iter (self);
115
116+ /* emit the cleared signal before removing rows */
117+ g_signal_emit_by_name (self, "cleared", NULL);
118+
119 while (!dee_model_is_last (self, iter))
120 {
121 dee_model_remove (self, iter);
122
123=== modified file 'tests/test-model-signals.c'
124--- tests/test-model-signals.c 2011-03-01 10:45:22 +0000
125+++ tests/test-model-signals.c 2012-02-01 16:27:18 +0000
126@@ -37,6 +37,7 @@
127 static void test_signal_add (SignalsFixture *fix, gconstpointer data);
128 static void test_signal_remove (SignalsFixture *fix, gconstpointer data);
129 static void test_signal_changed (SignalsFixture *fix, gconstpointer data);
130+static void test_signal_cleared (SignalsFixture *fix, gconstpointer data);
131
132 void
133 test_model_signals_create_suite (void)
134@@ -58,6 +59,11 @@
135 rows_setup, test_signal_changed, rows_teardown);
136 g_test_add (PROXY_DOMAIN"/Changed", SignalsFixture, 0,
137 proxy_rows_setup, test_signal_changed, proxy_rows_teardown);
138+
139+ g_test_add (SEQ_DOMAIN"/Cleared", SignalsFixture, 0,
140+ rows_setup, test_signal_cleared, rows_teardown);
141+ g_test_add (PROXY_DOMAIN"/Cleared", SignalsFixture, 0,
142+ proxy_rows_setup, test_signal_cleared, proxy_rows_teardown);
143 }
144
145 static void
146@@ -185,3 +191,30 @@
147 }
148 g_assert_cmpint (n_changed_signals, ==, 10000);
149 }
150+
151+static guint n_cleared_signals = 0;
152+
153+static void
154+test_signal_cleared_callback (DeeModel *model)
155+{
156+ n_cleared_signals++;
157+}
158+
159+static void
160+test_signal_cleared (SignalsFixture *fix, gconstpointer data)
161+{
162+ gint i;
163+
164+ g_signal_connect (fix->model, "cleared",
165+ G_CALLBACK (test_signal_cleared_callback), NULL);
166+
167+ for (i = 0; i < 10000; i++)
168+ {
169+ dee_model_append (fix->model, i, "Test");
170+ }
171+
172+ n_cleared_signals = 0;
173+ dee_model_clear (fix->model);
174+ g_assert_cmpint (n_cleared_signals, ==, 1);
175+}
176+
177
178=== modified file 'vapi/dee-1.0.vapi'
179--- vapi/dee-1.0.vapi 2012-01-30 08:39:53 +0000
180+++ vapi/dee-1.0.vapi 2012-02-01 16:27:18 +0000
181@@ -238,6 +238,7 @@
182 public void set_schema (...);
183 public abstract void set_schema_full ([CCode (array_length_cname = "num_columns", array_length_pos = 1.1, array_length_type = "guint", array_null_terminated = true)] string[] column_schemas);
184 public abstract void set_value (Dee.ModelIter iter, uint column, GLib.Variant value);
185+ public virtual signal void cleared ();
186 public virtual signal void row_added (Dee.ModelIter iter);
187 public virtual signal void row_changed (Dee.ModelIter iter);
188 public virtual signal void row_removed (Dee.ModelIter iter);

Subscribers

People subscribed via source and target branches

to all changes: