[gnome-builder] signal-group: Fix connecting to a detailed signal
- From: Garrett Regier <gregier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] signal-group: Fix connecting to a detailed signal
- Date: Tue, 2 Jun 2015 23:22:24 +0000 (UTC)
commit cfc179b06ca86661ee355329602024e48bb28a33
Author: Garrett Regier <garrett regier riftio com>
Date: Tue Jun 2 05:40:46 2015 -0700
signal-group: Fix connecting to a detailed signal
If a GQuark had not been created for the
detail before connecting than we would
connect to the non-detailed signal.
contrib/egg/egg-signal-group.c | 2 +-
tests/test-egg-signal-group.c | 29 +++++++++++++++++++++++++----
2 files changed, 26 insertions(+), 5 deletions(-)
---
diff --git a/contrib/egg/egg-signal-group.c b/contrib/egg/egg-signal-group.c
index 2e76185..5367a62 100644
--- a/contrib/egg/egg-signal-group.c
+++ b/contrib/egg/egg-signal-group.c
@@ -609,7 +609,7 @@ egg_signal_group_connect_full (EggSignalGroup *self,
g_return_if_fail (EGG_IS_SIGNAL_GROUP (self));
g_return_if_fail (detailed_signal != NULL);
g_return_if_fail (g_signal_parse_name (detailed_signal, self->target_type,
- &signal_id, &signal_detail, FALSE) != 0);
+ &signal_id, &signal_detail, TRUE) != 0);
g_return_if_fail (callback != NULL);
if ((flags & G_CONNECT_SWAPPED) != 0)
diff --git a/tests/test-egg-signal-group.c b/tests/test-egg-signal-group.c
index 45dd84c..08f7c83 100644
--- a/tests/test-egg-signal-group.c
+++ b/tests/test-egg-signal-group.c
@@ -11,6 +11,9 @@ typedef struct _SignalTarget
G_DECLARE_FINAL_TYPE (SignalTarget, signal_target, TEST, SIGNAL_TARGET, GObject)
G_DEFINE_TYPE (SignalTarget, signal_target, G_TYPE_OBJECT)
+static
+G_DEFINE_QUARK (detail, signal_detail)
+
enum {
THE_SIGNAL,
NEVER_EMITTED,
@@ -25,7 +28,7 @@ signal_target_class_init (SignalTargetClass *klass)
gSignals [THE_SIGNAL] =
g_signal_new ("the-signal",
G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
0,
NULL, NULL, NULL,
G_TYPE_NONE,
@@ -76,7 +79,7 @@ connect_after_cb (SignalTarget *target,
g_assert (signal_calls != NULL);
g_assert (signal_calls == &global_signal_calls);
- g_assert_cmpint (*signal_calls, ==, 3);
+ g_assert_cmpint (*signal_calls, ==, 4);
*signal_calls += 1;
}
@@ -114,6 +117,14 @@ connect_object_cb (SignalTarget *target,
}
static void
+connect_bad_detail_cb (SignalTarget *target,
+ EggSignalGroup *group,
+ GObject *object)
+{
+ g_error ("This detailed signal is never emitted!");
+}
+
+static void
connect_never_emitted_cb (SignalTarget *target,
gboolean *weak_notify_called)
{
@@ -176,6 +187,15 @@ connect_all_signals (EggSignalGroup *group)
(GWeakNotify)g_object_unref,
object);
+ /* Check that a detailed signal is handled correctly */
+ egg_signal_group_connect (group,
+ "the-signal::detail",
+ G_CALLBACK (connect_before_cb),
+ &global_signal_calls);
+ egg_signal_group_connect (group,
+ "the-signal::bad-detail",
+ G_CALLBACK (connect_bad_detail_cb),
+ NULL);
/* Check that the notify is called correctly */
global_weak_notify_called = FALSE;
@@ -199,8 +219,9 @@ assert_signals (SignalTarget *target,
g_assert (group == NULL || EGG_IS_SIGNAL_GROUP (group));
global_signal_calls = 0;
- g_signal_emit (target, gSignals [THE_SIGNAL], 0, group);
- g_assert_cmpint (global_signal_calls, ==, success ? 4 : 0);
+ g_signal_emit (target, gSignals [THE_SIGNAL],
+ signal_detail_quark (), group);
+ g_assert_cmpint (global_signal_calls, ==, success ? 5 : 0);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]