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
=== modified file 'src/dee-model.c'
--- src/dee-model.c 2012-01-26 18:30:57 +0000
+++ src/dee-model.c 2012-02-01 16:27:18 +0000
@@ -98,6 +98,7 @@
98 DEE_MODEL_SIGNAL_ROW_ADDED,98 DEE_MODEL_SIGNAL_ROW_ADDED,
99 DEE_MODEL_SIGNAL_ROW_REMOVED,99 DEE_MODEL_SIGNAL_ROW_REMOVED,
100 DEE_MODEL_SIGNAL_ROW_CHANGED,100 DEE_MODEL_SIGNAL_ROW_CHANGED,
101 DEE_MODEL_SIGNAL_CLEARED,
101102
102 DEE_MODEL_LAST_SIGNAL103 DEE_MODEL_LAST_SIGNAL
103};104};
@@ -225,6 +226,21 @@
225 g_cclosure_marshal_VOID__BOXED,226 g_cclosure_marshal_VOID__BOXED,
226 G_TYPE_NONE, 1,227 G_TYPE_NONE, 1,
227 DEE_TYPE_MODEL_ITER);228 DEE_TYPE_MODEL_ITER);
229
230 /**
231 * DeeModel::cleared:
232 * @self: the #DeeModel on which the signal is emitted
233 *
234 * Connect to this signal to be notified when the model has been cleared.
235 **/
236 dee_model_signals[DEE_MODEL_SIGNAL_CLEARED] =
237 g_signal_new ("cleared",
238 DEE_TYPE_MODEL,
239 G_SIGNAL_RUN_LAST,
240 G_STRUCT_OFFSET (DeeModelIface,cleared),
241 NULL, NULL, NULL,
242 G_TYPE_NONE, 0);
243
228}244}
229245
230/**246/**
231247
=== modified file 'src/dee-model.h'
--- src/dee-model.h 2012-01-26 18:30:57 +0000
+++ src/dee-model.h 2012-02-01 16:27:18 +0000
@@ -92,6 +92,8 @@
92 void (*row_changed) (DeeModel *self,92 void (*row_changed) (DeeModel *self,
93 DeeModelIter *iter);93 DeeModelIter *iter);
9494
95 void (*cleared) (DeeModel *self);
96
95 /*< public >*/97 /*< public >*/
96 void (*set_schema_full) (DeeModel *self,98 void (*set_schema_full) (DeeModel *self,
97 const char* const *column_schemas,99 const char* const *column_schemas,
98100
=== modified file 'src/dee-proxy-model.c'
--- src/dee-proxy-model.c 2011-10-24 19:52:06 +0000
+++ src/dee-proxy-model.c 2012-02-01 16:27:18 +0000
@@ -80,6 +80,7 @@
80 gulong row_added_handler;80 gulong row_added_handler;
81 gulong row_removed_handler;81 gulong row_removed_handler;
82 gulong row_changed_handler;82 gulong row_changed_handler;
83 gulong cleared_handler;
83};84};
8485
85#define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)86#define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
@@ -212,6 +213,8 @@
212static void on_back_end_row_changed (DeeProxyModel *self,213static void on_back_end_row_changed (DeeProxyModel *self,
213 DeeModelIter *iter);214 DeeModelIter *iter);
214215
216static void on_back_end_cleared (DeeProxyModel *self);
217
215/*218/*
216 * Overrides for DeeSerializableModel219 * Overrides for DeeSerializableModel
217 */220 */
@@ -237,6 +240,8 @@
237 g_signal_handler_disconnect (priv->back_end, priv->row_removed_handler);240 g_signal_handler_disconnect (priv->back_end, priv->row_removed_handler);
238 if (priv->row_changed_handler != 0)241 if (priv->row_changed_handler != 0)
239 g_signal_handler_disconnect (priv->back_end, priv->row_changed_handler);242 g_signal_handler_disconnect (priv->back_end, priv->row_changed_handler);
243 if (priv->cleared_handler != 0)
244 g_signal_handler_disconnect (priv->back_end, priv->cleared_handler);
240245
241 g_object_unref (priv->back_end);246 g_object_unref (priv->back_end);
242 }247 }
@@ -269,6 +274,9 @@
269 priv->row_changed_handler =274 priv->row_changed_handler =
270 g_signal_connect_swapped (priv->back_end, "row-changed",275 g_signal_connect_swapped (priv->back_end, "row-changed",
271 G_CALLBACK (on_back_end_row_changed), object);276 G_CALLBACK (on_back_end_row_changed), object);
277 priv->cleared_handler =
278 g_signal_connect_swapped (priv->back_end, "cleared",
279 G_CALLBACK (on_back_end_cleared), object);
272 }280 }
273 281
274 /* GObjectClass has NULL 'constructed' member, but we add this check for282 /* GObjectClass has NULL 'constructed' member, but we add this check for
@@ -415,6 +423,7 @@
415 priv->row_added_handler = 0;423 priv->row_added_handler = 0;
416 priv->row_removed_handler = 0;424 priv->row_removed_handler = 0;
417 priv->row_changed_handler = 0;425 priv->row_changed_handler = 0;
426 priv->cleared_handler = 0;
418}427}
419428
420/*429/*
@@ -759,6 +768,12 @@
759 g_signal_emit_by_name (self, "row-changed", iter);768 g_signal_emit_by_name (self, "row-changed", iter);
760}769}
761770
771static void
772on_back_end_cleared (DeeProxyModel *self)
773{
774 g_signal_emit_by_name (self, "cleared", NULL);
775}
776
762/*777/*
763 * Overrides for DeeSerializableModel778 * Overrides for DeeSerializableModel
764 */779 */
765780
=== modified file 'src/dee-serializable-model.c'
--- src/dee-serializable-model.c 2012-01-09 11:17:10 +0000
+++ src/dee-serializable-model.c 2012-02-01 16:27:18 +0000
@@ -462,6 +462,9 @@
462462
463 iter = dee_model_get_first_iter (self);463 iter = dee_model_get_first_iter (self);
464464
465 /* emit the cleared signal before removing rows */
466 g_signal_emit_by_name (self, "cleared", NULL);
467
465 while (!dee_model_is_last (self, iter))468 while (!dee_model_is_last (self, iter))
466 {469 {
467 dee_model_remove (self, iter);470 dee_model_remove (self, iter);
468471
=== modified file 'tests/test-model-signals.c'
--- tests/test-model-signals.c 2011-03-01 10:45:22 +0000
+++ tests/test-model-signals.c 2012-02-01 16:27:18 +0000
@@ -37,6 +37,7 @@
37static void test_signal_add (SignalsFixture *fix, gconstpointer data);37static void test_signal_add (SignalsFixture *fix, gconstpointer data);
38static void test_signal_remove (SignalsFixture *fix, gconstpointer data);38static void test_signal_remove (SignalsFixture *fix, gconstpointer data);
39static void test_signal_changed (SignalsFixture *fix, gconstpointer data);39static void test_signal_changed (SignalsFixture *fix, gconstpointer data);
40static void test_signal_cleared (SignalsFixture *fix, gconstpointer data);
4041
41void42void
42test_model_signals_create_suite (void)43test_model_signals_create_suite (void)
@@ -58,6 +59,11 @@
58 rows_setup, test_signal_changed, rows_teardown);59 rows_setup, test_signal_changed, rows_teardown);
59 g_test_add (PROXY_DOMAIN"/Changed", SignalsFixture, 0,60 g_test_add (PROXY_DOMAIN"/Changed", SignalsFixture, 0,
60 proxy_rows_setup, test_signal_changed, proxy_rows_teardown);61 proxy_rows_setup, test_signal_changed, proxy_rows_teardown);
62
63 g_test_add (SEQ_DOMAIN"/Cleared", SignalsFixture, 0,
64 rows_setup, test_signal_cleared, rows_teardown);
65 g_test_add (PROXY_DOMAIN"/Cleared", SignalsFixture, 0,
66 proxy_rows_setup, test_signal_cleared, proxy_rows_teardown);
61}67}
6268
63static void69static void
@@ -185,3 +191,30 @@
185 }191 }
186 g_assert_cmpint (n_changed_signals, ==, 10000);192 g_assert_cmpint (n_changed_signals, ==, 10000);
187}193}
194
195static guint n_cleared_signals = 0;
196
197static void
198test_signal_cleared_callback (DeeModel *model)
199{
200 n_cleared_signals++;
201}
202
203static void
204test_signal_cleared (SignalsFixture *fix, gconstpointer data)
205{
206 gint i;
207
208 g_signal_connect (fix->model, "cleared",
209 G_CALLBACK (test_signal_cleared_callback), NULL);
210
211 for (i = 0; i < 10000; i++)
212 {
213 dee_model_append (fix->model, i, "Test");
214 }
215
216 n_cleared_signals = 0;
217 dee_model_clear (fix->model);
218 g_assert_cmpint (n_cleared_signals, ==, 1);
219}
220
188221
=== modified file 'vapi/dee-1.0.vapi'
--- vapi/dee-1.0.vapi 2012-01-30 08:39:53 +0000
+++ vapi/dee-1.0.vapi 2012-02-01 16:27:18 +0000
@@ -238,6 +238,7 @@
238 public void set_schema (...);238 public void set_schema (...);
239 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);239 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);
240 public abstract void set_value (Dee.ModelIter iter, uint column, GLib.Variant value);240 public abstract void set_value (Dee.ModelIter iter, uint column, GLib.Variant value);
241 public virtual signal void cleared ();
241 public virtual signal void row_added (Dee.ModelIter iter);242 public virtual signal void row_added (Dee.ModelIter iter);
242 public virtual signal void row_changed (Dee.ModelIter iter);243 public virtual signal void row_changed (Dee.ModelIter iter);
243 public virtual signal void row_removed (Dee.ModelIter iter);244 public virtual signal void row_removed (Dee.ModelIter iter);

Subscribers

People subscribed via source and target branches

to all changes: