[folks] Add DisconnectionQueue, which disconnects signals semi-automatically
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [folks] Add DisconnectionQueue, which disconnects signals semi-automatically
- Date: Tue, 19 Nov 2013 00:47:08 +0000 (UTC)
commit 956c1d2aea563e6ef8cacafbb1edebb8b8ec7d7f
Author: Simon McVittie <simon mcvittie collabora co uk>
Date: Tue Mar 19 17:59:14 2013 +0000
Add DisconnectionQueue, which disconnects signals semi-automatically
tests/lib/Makefile.am | 1 +
tests/lib/disconnection-queue.vala | 70 ++++++++++++++++++++++++++++++++++++
2 files changed, 71 insertions(+), 0 deletions(-)
---
diff --git a/tests/lib/Makefile.am b/tests/lib/Makefile.am
index e080949..23b2707 100644
--- a/tests/lib/Makefile.am
+++ b/tests/lib/Makefile.am
@@ -37,6 +37,7 @@ DIST_SUBDIRS = \
noinst_LTLIBRARIES = libfolks-test.la
libfolks_test_la_SOURCES = \
+ disconnection-queue.vala \
haze-remove-directory.c \
test-case.vala \
test-case-helper.c \
diff --git a/tests/lib/disconnection-queue.vala b/tests/lib/disconnection-queue.vala
new file mode 100644
index 0000000..9ecafc5
--- /dev/null
+++ b/tests/lib/disconnection-queue.vala
@@ -0,0 +1,70 @@
+/* disconnection-queue.vala - disconnect signals automagically
+ *
+ * Copyright © 2013 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Simon McVittie <simon mcvittie collabora co uk>
+ */
+
+public class Folks.DisconnectionQueue : Object
+{
+ [Compact]
+ private class _Connection
+ {
+ internal weak Object obj;
+ internal ulong id;
+
+ internal _Connection (Object obj, ulong id)
+ {
+ this.obj = obj;
+ this.id = id;
+ }
+ }
+
+ private GenericArray<_Connection> _conns;
+
+ public DisconnectionQueue ()
+ {
+ this._conns = new GenericArray<_Connection> ();
+ }
+
+ public void push (Object obj, ulong id)
+ {
+ return_if_fail (id != 0);
+
+ this._conns.add (new _Connection (obj, id));
+ }
+
+ public void drain ()
+ {
+ var conns = this._conns;
+ this._conns = new GenericArray<_Connection> ();
+
+ for (uint i = 1; i <= conns.length; i++)
+ {
+ unowned _Connection conn = conns[conns.length - i];
+
+ if (conn.obj != null && conn.id != 0)
+ ((!) conn.obj).disconnect (conn.id);
+ }
+ }
+
+ ~DisconnectionQueue ()
+ {
+ this.drain ();
+ }
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]