1b5975d6bSopenharmony_ciFrom 7045260c226e409530e4f961f613f8c7d6f6725a Mon Sep 17 00:00:00 2001
2b5975d6bSopenharmony_ciFrom: Simon McVittie <smcv@collabora.com>
3b5975d6bSopenharmony_ciDate: Thu, 23 Jun 2022 09:41:21 +0100
4b5975d6bSopenharmony_ciSubject: [PATCH] gsignal: Add G_CONNECT_DEFAULT
5b5975d6bSopenharmony_ci
6b5975d6bSopenharmony_ciThis makes calls to g_signal_connect_data() and g_signal_connect_object()
7b5975d6bSopenharmony_ciwith default flags more self-documenting.
8b5975d6bSopenharmony_ci
9b5975d6bSopenharmony_ciSigned-off-by: Simon McVittie <smcv@collabora.com>
10b5975d6bSopenharmony_ci
11b5975d6bSopenharmony_ciConflict:NA
12b5975d6bSopenharmony_ciReference:https://gitlab.gnome.org/GNOME/glib/-/commit/7045260c226e409530e4f961f613f8c7d6f6725a
13b5975d6bSopenharmony_ci
14b5975d6bSopenharmony_ci---
15b5975d6bSopenharmony_ci gio/gcancellable.c             |  2 +-
16b5975d6bSopenharmony_ci gio/gdbusobjectmanagerclient.c |  4 ++--
17b5975d6bSopenharmony_ci gio/gdbusserver.c              |  2 +-
18b5975d6bSopenharmony_ci gio/glocalfilemonitor.c        |  5 +++--
19b5975d6bSopenharmony_ci gio/gsubprocess.c              |  4 +++-
20b5975d6bSopenharmony_ci gio/gtask.c                    |  3 ++-
21b5975d6bSopenharmony_ci gobject/gobject.c              |  8 ++++----
22b5975d6bSopenharmony_ci gobject/gsignal.h              | 11 ++++++++---
23b5975d6bSopenharmony_ci gobject/tests/signals.c        |  6 ++++--
24b5975d6bSopenharmony_ci 9 files changed, 28 insertions(+), 17 deletions(-)
25b5975d6bSopenharmony_ci
26b5975d6bSopenharmony_cidiff --git a/gio/gcancellable.c b/gio/gcancellable.c
27b5975d6bSopenharmony_ciindex 64755206be..fe3cbeb7f7 100644
28b5975d6bSopenharmony_ci--- a/gio/gcancellable.c
29b5975d6bSopenharmony_ci+++ b/gio/gcancellable.c
30b5975d6bSopenharmony_ci@@ -589,7 +589,7 @@ g_cancellable_connect (GCancellable   *cancellable,
31b5975d6bSopenharmony_ci       id = g_signal_connect_data (cancellable, "cancelled",
32b5975d6bSopenharmony_ci                                   callback, data,
33b5975d6bSopenharmony_ci                                   (GClosureNotify) data_destroy_func,
34b5975d6bSopenharmony_ci-                                  0);
35b5975d6bSopenharmony_ci+                                  G_CONNECT_DEFAULT);
36b5975d6bSopenharmony_ci 
37b5975d6bSopenharmony_ci       g_mutex_unlock (&cancellable_mutex);
38b5975d6bSopenharmony_ci     }
39b5975d6bSopenharmony_cidiff --git a/gio/gdbusobjectmanagerclient.c b/gio/gdbusobjectmanagerclient.c
40b5975d6bSopenharmony_ciindex bfb73b5308..fa5e73041e 100644
41b5975d6bSopenharmony_ci--- a/gio/gdbusobjectmanagerclient.c
42b5975d6bSopenharmony_ci+++ b/gio/gdbusobjectmanagerclient.c
43b5975d6bSopenharmony_ci@@ -1456,7 +1456,7 @@ initable_init (GInitable     *initable,
44b5975d6bSopenharmony_ci                             G_CALLBACK (on_notify_g_name_owner),
45b5975d6bSopenharmony_ci                             weak_ref_new (G_OBJECT (manager)),
46b5975d6bSopenharmony_ci                             (GClosureNotify) weak_ref_free,
47b5975d6bSopenharmony_ci-                            0  /* flags */);
48b5975d6bSopenharmony_ci+                            G_CONNECT_DEFAULT);
49b5975d6bSopenharmony_ci 
50b5975d6bSopenharmony_ci   manager->priv->signal_signal_id =
51b5975d6bSopenharmony_ci       g_signal_connect_data (manager->priv->control_proxy,
52b5975d6bSopenharmony_ci@@ -1464,7 +1464,7 @@ initable_init (GInitable     *initable,
53b5975d6bSopenharmony_ci                             G_CALLBACK (on_control_proxy_g_signal),
54b5975d6bSopenharmony_ci                             weak_ref_new (G_OBJECT (manager)),
55b5975d6bSopenharmony_ci                             (GClosureNotify) weak_ref_free,
56b5975d6bSopenharmony_ci-                            0  /* flags */);
57b5975d6bSopenharmony_ci+                            G_CONNECT_DEFAULT);
58b5975d6bSopenharmony_ci 
59b5975d6bSopenharmony_ci   manager->priv->name_owner = g_dbus_proxy_get_name_owner (manager->priv->control_proxy);
60b5975d6bSopenharmony_ci   if (manager->priv->name_owner == NULL && manager->priv->name != NULL)
61b5975d6bSopenharmony_cidiff --git a/gio/gdbusserver.c b/gio/gdbusserver.c
62b5975d6bSopenharmony_ciindex fe5b23ed4d..f144d129ae 100644
63b5975d6bSopenharmony_ci--- a/gio/gdbusserver.c
64b5975d6bSopenharmony_ci+++ b/gio/gdbusserver.c
65b5975d6bSopenharmony_ci@@ -630,7 +630,7 @@ g_dbus_server_start (GDBusServer *server)
66b5975d6bSopenharmony_ci                                                          G_CALLBACK (on_run),
67b5975d6bSopenharmony_ci                                                          g_object_ref (server),
68b5975d6bSopenharmony_ci                                                          (GClosureNotify) g_object_unref,
69b5975d6bSopenharmony_ci-                                                         0  /* flags */);
70b5975d6bSopenharmony_ci+                                                         G_CONNECT_DEFAULT);
71b5975d6bSopenharmony_ci   g_socket_service_start (G_SOCKET_SERVICE (server->listener));
72b5975d6bSopenharmony_ci   server->active = TRUE;
73b5975d6bSopenharmony_ci   g_object_notify (G_OBJECT (server), "active");
74b5975d6bSopenharmony_cidiff --git a/gio/glocalfilemonitor.c b/gio/glocalfilemonitor.c
75b5975d6bSopenharmony_ciindex fde52193a9..8de4079394 100644
76b5975d6bSopenharmony_ci--- a/gio/glocalfilemonitor.c
77b5975d6bSopenharmony_ci+++ b/gio/glocalfilemonitor.c
78b5975d6bSopenharmony_ci@@ -809,7 +809,8 @@ g_local_file_monitor_start (GLocalFileMonitor *local_monitor,
79b5975d6bSopenharmony_ci 
80b5975d6bSopenharmony_ci       local_monitor->mount_monitor = g_unix_mount_monitor_get ();
81b5975d6bSopenharmony_ci       g_signal_connect_object (local_monitor->mount_monitor, "mounts-changed",
82b5975d6bSopenharmony_ci-                               G_CALLBACK (g_local_file_monitor_mounts_changed), local_monitor, 0);
83b5975d6bSopenharmony_ci+                               G_CALLBACK (g_local_file_monitor_mounts_changed), local_monitor,
84b5975d6bSopenharmony_ci+                               G_CONNECT_DEFAULT);
85b5975d6bSopenharmony_ci #endif
86b5975d6bSopenharmony_ci     }
87b5975d6bSopenharmony_ci 
88b5975d6bSopenharmony_ci@@ -924,7 +925,7 @@ g_local_file_monitor_new_in_worker (const gchar           *pathname,
89b5975d6bSopenharmony_ci     {
90b5975d6bSopenharmony_ci       if (callback)
91b5975d6bSopenharmony_ci         g_signal_connect_data (monitor, "changed", G_CALLBACK (callback),
92b5975d6bSopenharmony_ci-                               user_data, destroy_user_data, 0  /* flags */);
93b5975d6bSopenharmony_ci+                               user_data, destroy_user_data, G_CONNECT_DEFAULT);
94b5975d6bSopenharmony_ci 
95b5975d6bSopenharmony_ci       g_local_file_monitor_start (monitor, pathname, is_directory, flags, GLIB_PRIVATE_CALL(g_get_worker_context) ());
96b5975d6bSopenharmony_ci     }
97b5975d6bSopenharmony_cidiff --git a/gio/gsubprocess.c b/gio/gsubprocess.c
98b5975d6bSopenharmony_ciindex bb157197fc..c4747a1481 100644
99b5975d6bSopenharmony_ci--- a/gio/gsubprocess.c
100b5975d6bSopenharmony_ci+++ b/gio/gsubprocess.c
101b5975d6bSopenharmony_ci@@ -756,7 +756,9 @@ g_subprocess_wait_async (GSubprocess         *subprocess,
102b5975d6bSopenharmony_ci        * see the cancellation in the _finish().
103b5975d6bSopenharmony_ci        */
104b5975d6bSopenharmony_ci       if (cancellable)
105b5975d6bSopenharmony_ci-        g_signal_connect_object (cancellable, "cancelled", G_CALLBACK (g_subprocess_wait_cancelled), task, 0);
106b5975d6bSopenharmony_ci+        g_signal_connect_object (cancellable, "cancelled",
107b5975d6bSopenharmony_ci+                                 G_CALLBACK (g_subprocess_wait_cancelled),
108b5975d6bSopenharmony_ci+                                 task, G_CONNECT_DEFAULT);
109b5975d6bSopenharmony_ci 
110b5975d6bSopenharmony_ci       subprocess->pending_waits = g_slist_prepend (subprocess->pending_waits, task);
111b5975d6bSopenharmony_ci       task = NULL;
112b5975d6bSopenharmony_cidiff --git a/gio/gtask.c b/gio/gtask.c
113b5975d6bSopenharmony_ciindex d0f8b4e33a..774cba793a 100644
114b5975d6bSopenharmony_ci--- a/gio/gtask.c
115b5975d6bSopenharmony_ci+++ b/gio/gtask.c
116b5975d6bSopenharmony_ci@@ -1530,7 +1530,8 @@ g_task_start_task_thread (GTask           *task,
117b5975d6bSopenharmony_ci       g_signal_connect_data (task->cancellable, "cancelled",
118b5975d6bSopenharmony_ci                              G_CALLBACK (task_thread_cancelled),
119b5975d6bSopenharmony_ci                              g_object_ref (task),
120b5975d6bSopenharmony_ci-                             task_thread_cancelled_disconnect_notify, 0);
121b5975d6bSopenharmony_ci+                             task_thread_cancelled_disconnect_notify,
122b5975d6bSopenharmony_ci+                             G_CONNECT_DEFAULT);
123b5975d6bSopenharmony_ci     }
124b5975d6bSopenharmony_ci 
125b5975d6bSopenharmony_ci   if (g_private_get (&task_private))
126b5975d6bSopenharmony_cidiff --git a/gobject/gobject.c b/gobject/gobject.c
127b5975d6bSopenharmony_ciindex df908984b7..5ba8fd017b 100644
128b5975d6bSopenharmony_ci--- a/gobject/gobject.c
129b5975d6bSopenharmony_ci+++ b/gobject/gobject.c
130b5975d6bSopenharmony_ci@@ -3093,8 +3093,8 @@ g_object_get_property (GObject	   *object,
131b5975d6bSopenharmony_ci  *
132b5975d6bSopenharmony_ci  * The signal specs expected by this function have the form
133b5975d6bSopenharmony_ci  * "modifier::signal_name", where modifier can be one of the following:
134b5975d6bSopenharmony_ci- * - signal: equivalent to g_signal_connect_data (..., NULL, 0)
135b5975d6bSopenharmony_ci- * - object-signal, object_signal: equivalent to g_signal_connect_object (..., 0)
136b5975d6bSopenharmony_ci+ * - signal: equivalent to g_signal_connect_data (..., NULL, G_CONNECT_DEFAULT)
137b5975d6bSopenharmony_ci+ * - object-signal, object_signal: equivalent to g_signal_connect_object (..., G_CONNECT_DEFAULT)
138b5975d6bSopenharmony_ci  * - swapped-signal, swapped_signal: equivalent to g_signal_connect_data (..., NULL, G_CONNECT_SWAPPED)
139b5975d6bSopenharmony_ci  * - swapped_object_signal, swapped-object-signal: equivalent to g_signal_connect_object (..., G_CONNECT_SWAPPED)
140b5975d6bSopenharmony_ci  * - signal_after, signal-after: equivalent to g_signal_connect_data (..., NULL, G_CONNECT_AFTER)
141b5975d6bSopenharmony_ci@@ -3135,12 +3135,12 @@ g_object_connect (gpointer     _object,
142b5975d6bSopenharmony_ci       if (strncmp (signal_spec, "signal::", 8) == 0)
143b5975d6bSopenharmony_ci 	g_signal_connect_data (object, signal_spec + 8,
144b5975d6bSopenharmony_ci 			       callback, data, NULL,
145b5975d6bSopenharmony_ci-			       0);
146b5975d6bSopenharmony_ci+			       G_CONNECT_DEFAULT);
147b5975d6bSopenharmony_ci       else if (strncmp (signal_spec, "object_signal::", 15) == 0 ||
148b5975d6bSopenharmony_ci                strncmp (signal_spec, "object-signal::", 15) == 0)
149b5975d6bSopenharmony_ci 	g_signal_connect_object (object, signal_spec + 15,
150b5975d6bSopenharmony_ci 				 callback, data,
151b5975d6bSopenharmony_ci-				 0);
152b5975d6bSopenharmony_ci+				 G_CONNECT_DEFAULT);
153b5975d6bSopenharmony_ci       else if (strncmp (signal_spec, "swapped_signal::", 16) == 0 ||
154b5975d6bSopenharmony_ci                strncmp (signal_spec, "swapped-signal::", 16) == 0)
155b5975d6bSopenharmony_ci 	g_signal_connect_data (object, signal_spec + 16,
156b5975d6bSopenharmony_cidiff --git a/gobject/gsignal.h b/gobject/gsignal.h
157b5975d6bSopenharmony_ciindex 7b3974a8c4..53da2a6eab 100644
158b5975d6bSopenharmony_ci--- a/gobject/gsignal.h
159b5975d6bSopenharmony_ci+++ b/gobject/gsignal.h
160b5975d6bSopenharmony_ci@@ -155,9 +155,11 @@ typedef enum
161b5975d6bSopenharmony_ci #define G_SIGNAL_FLAGS_MASK  0x1ff
162b5975d6bSopenharmony_ci /**
163b5975d6bSopenharmony_ci  * GConnectFlags:
164b5975d6bSopenharmony_ci- * @G_CONNECT_AFTER: whether the handler should be called before or after the
165b5975d6bSopenharmony_ci- *  default handler of the signal.
166b5975d6bSopenharmony_ci- * @G_CONNECT_SWAPPED: whether the instance and data should be swapped when
167b5975d6bSopenharmony_ci+ * @G_CONNECT_DEFAULT: Default behaviour (no special flags). Since: 2.74
168b5975d6bSopenharmony_ci+ * @G_CONNECT_AFTER: If set, the handler should be called after the
169b5975d6bSopenharmony_ci+ *  default handler of the signal. Normally, the handler is called before
170b5975d6bSopenharmony_ci+ *  the default handler.
171b5975d6bSopenharmony_ci+ * @G_CONNECT_SWAPPED: If set, the instance and data should be swapped when
172b5975d6bSopenharmony_ci  *  calling the handler; see g_signal_connect_swapped() for an example.
173b5975d6bSopenharmony_ci  * 
174b5975d6bSopenharmony_ci  * The connection flags are used to specify the behaviour of a signal's 
175b5975d6bSopenharmony_ci@@ -165,6 +167,7 @@ typedef enum
176b5975d6bSopenharmony_ci  */
177b5975d6bSopenharmony_ci typedef enum
178b5975d6bSopenharmony_ci {
179b5975d6bSopenharmony_ci+  G_CONNECT_DEFAULT GLIB_AVAILABLE_ENUMERATOR_IN_2_74 = 0,
180b5975d6bSopenharmony_ci   G_CONNECT_AFTER	= 1 << 0,
181b5975d6bSopenharmony_ci   G_CONNECT_SWAPPED	= 1 << 1
182b5975d6bSopenharmony_ci } GConnectFlags;
183b5975d6bSopenharmony_ci@@ -504,6 +507,8 @@ void   g_signal_chain_from_overridden_handler (gpointer           instance,
184b5975d6bSopenharmony_ci  * 
185b5975d6bSopenharmony_ci  * Returns: the handler ID, of type #gulong (always greater than 0 for successful connections)
186b5975d6bSopenharmony_ci  */
187b5975d6bSopenharmony_ci+/* Intentionally not using G_CONNECT_DEFAULT here to avoid deprecation
188b5975d6bSopenharmony_ci+ * warnings with older GLIB_VERSION_MAX_ALLOWED */
189b5975d6bSopenharmony_ci #define g_signal_connect(instance, detailed_signal, c_handler, data) \
190b5975d6bSopenharmony_ci     g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
191b5975d6bSopenharmony_ci /**
192b5975d6bSopenharmony_cidiff --git a/gobject/tests/signals.c b/gobject/tests/signals.c
193b5975d6bSopenharmony_ciindex ea9a778bf8..e4be41575f 100644
194b5975d6bSopenharmony_ci--- a/gobject/tests/signals.c
195b5975d6bSopenharmony_ci+++ b/gobject/tests/signals.c
196b5975d6bSopenharmony_ci@@ -1109,8 +1109,10 @@ test_destroy_target_object (void)
197b5975d6bSopenharmony_ci   sender = g_object_new (test_get_type (), NULL);
198b5975d6bSopenharmony_ci   target1 = g_object_new (test_get_type (), NULL);
199b5975d6bSopenharmony_ci   target2 = g_object_new (test_get_type (), NULL);
200b5975d6bSopenharmony_ci-  g_signal_connect_object (sender, "simple", G_CALLBACK (simple_handler1), target1, 0);
201b5975d6bSopenharmony_ci-  g_signal_connect_object (sender, "simple", G_CALLBACK (simple_handler2), target2, 0);
202b5975d6bSopenharmony_ci+  g_signal_connect_object (sender, "simple", G_CALLBACK (simple_handler1),
203b5975d6bSopenharmony_ci+                           target1, G_CONNECT_DEFAULT);
204b5975d6bSopenharmony_ci+  g_signal_connect_object (sender, "simple", G_CALLBACK (simple_handler2),
205b5975d6bSopenharmony_ci+                           target2, G_CONNECT_DEFAULT);
206b5975d6bSopenharmony_ci   g_signal_emit_by_name (sender, "simple");
207b5975d6bSopenharmony_ci   g_object_unref (sender);
208b5975d6bSopenharmony_ci }
209b5975d6bSopenharmony_ci-- 
210b5975d6bSopenharmony_ciGitLab
211b5975d6bSopenharmony_ci
212