Commit 65c55e2a authored by Thomas Haller's avatar Thomas Haller

settings: combine "updated" and "updated-by-user" signal in NMSettingsConnection

Instead of connecting to two similar signals, combine them into one
and pass "by_user" argument.

We still need to keep the original NM_SETTINGS_CONNECTION_UPDATED signal,
because it is exposed on D-Bus.
parent a4f1a179
......@@ -81,7 +81,7 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMSettingsConnection,
enum {
UPDATED,
REMOVED,
UPDATED_BY_USER,
UPDATED_INTERNAL,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
......@@ -130,6 +130,15 @@ typedef struct {
/*******************************************************************/
static void
_emit_updated (NMSettingsConnection *self, gboolean by_user)
{
g_signal_emit (self, signals[UPDATED], 0);
g_signal_emit (self, signals[UPDATED_INTERNAL], 0, by_user);
}
/*******************************************************************/
gboolean
nm_settings_connection_has_unmodified_applied_connection (NMSettingsConnection *self,
NMConnection *applied_connection,
......@@ -483,7 +492,7 @@ static void
connection_changed_cb (NMSettingsConnection *self, gpointer unused)
{
set_unsaved (self, TRUE);
g_signal_emit (self, signals[UPDATED], 0);
_emit_updated (self, FALSE);
}
/* Update the settings of this connection to match that of 'new_connection',
......@@ -566,12 +575,10 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self,
if (update_unsaved)
set_unsaved (self, TRUE);
g_signal_emit (self, signals[UPDATED], 0);
g_signal_emit (self, signals[UPDATED_BY_USER], 0);
g_signal_handlers_unblock_by_func (self, G_CALLBACK (connection_changed_cb), NULL);
_emit_updated (self, TRUE);
return success;
}
......@@ -2739,7 +2746,6 @@ nm_settings_connection_class_init (NMSettingsConnectionClass *class)
/* Signals */
/* Emitted when the connection is changed for any reason */
signals[UPDATED] =
g_signal_new (NM_SETTINGS_CONNECTION_UPDATED,
G_TYPE_FROM_CLASS (class),
......@@ -2749,14 +2755,14 @@ nm_settings_connection_class_init (NMSettingsConnectionClass *class)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
/* Emitted when connection is changed from D-Bus */
signals[UPDATED_BY_USER] =
g_signal_new (NM_SETTINGS_CONNECTION_UPDATED_BY_USER,
/* internal signal, with an argument (gboolean by_user). */
signals[UPDATED_INTERNAL] =
g_signal_new (NM_SETTINGS_CONNECTION_UPDATED_INTERNAL,
G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
g_cclosure_marshal_VOID__BOOLEAN,
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
signals[REMOVED] =
g_signal_new (NM_SETTINGS_CONNECTION_REMOVED,
......
......@@ -43,8 +43,8 @@ G_BEGIN_DECLS
#define NM_SETTINGS_CONNECTION_GET_SECRETS "get-secrets"
#define NM_SETTINGS_CONNECTION_CANCEL_SECRETS "cancel-secrets"
/* Emitted when connection is changed by a user action */
#define NM_SETTINGS_CONNECTION_UPDATED_BY_USER "updated-by-user"
/* Internal signals */
#define NM_SETTINGS_CONNECTION_UPDATED_INTERNAL "updated-internal"
/* Properties */
#define NM_SETTINGS_CONNECTION_VISIBLE "visible"
......
......@@ -842,9 +842,15 @@ next:
}
static void
connection_updated (NMSettingsConnection *connection, gpointer user_data)
connection_updated (NMSettingsConnection *connection, gboolean by_user, gpointer user_data)
{
/* Re-emit for listeners like NMPolicy */
if (by_user) {
g_signal_emit (NM_SETTINGS (user_data),
signals[CONNECTION_UPDATED_BY_USER],
0,
connection);
}
g_signal_emit (NM_SETTINGS (user_data),
signals[CONNECTION_UPDATED],
0,
......@@ -852,16 +858,6 @@ connection_updated (NMSettingsConnection *connection, gpointer user_data)
g_signal_emit_by_name (NM_SETTINGS (user_data), NM_CP_SIGNAL_CONNECTION_UPDATED, connection);
}
static void
connection_updated_by_user (NMSettingsConnection *connection, gpointer user_data)
{
/* Re-emit for listeners like NMPolicy */
g_signal_emit (NM_SETTINGS (user_data),
signals[CONNECTION_UPDATED_BY_USER],
0,
connection);
}
static void
connection_visibility_changed (NMSettingsConnection *connection,
GParamSpec *pspec,
......@@ -892,7 +888,6 @@ connection_removed (NMSettingsConnection *connection, gpointer user_data)
g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_removed), self);
g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_updated), self);
g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_updated_by_user), self);
g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_visibility_changed), self);
g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_ready_changed), self);
g_object_unref (self);
......@@ -1024,10 +1019,8 @@ claim_connection (NMSettings *self, NMSettingsConnection *connection)
g_object_ref (self);
g_signal_connect (connection, NM_SETTINGS_CONNECTION_REMOVED,
G_CALLBACK (connection_removed), self);
g_signal_connect (connection, NM_SETTINGS_CONNECTION_UPDATED,
g_signal_connect (connection, NM_SETTINGS_CONNECTION_UPDATED_INTERNAL,
G_CALLBACK (connection_updated), self);
g_signal_connect (connection, NM_SETTINGS_CONNECTION_UPDATED_BY_USER,
G_CALLBACK (connection_updated_by_user), self);
g_signal_connect (connection, "notify::" NM_SETTINGS_CONNECTION_VISIBLE,
G_CALLBACK (connection_visibility_changed),
self);
......@@ -1891,10 +1884,13 @@ default_wired_connection_removed_cb (NMSettingsConnection *connection, NMSetting
}
static void
default_wired_connection_updated_by_user_cb (NMSettingsConnection *connection, NMSettings *self)
default_wired_connection_updated_by_user_cb (NMSettingsConnection *connection, gboolean by_user, NMSettings *self)
{
NMDevice *device;
if (!by_user)
return;
/* The connection has been changed by the user, it should no longer be
* considered a default wired connection, and should no longer affect
* the no-auto-default configuration option.
......@@ -1967,7 +1963,7 @@ device_realized (NMDevice *device, GParamSpec *pspec, NMSettings *self)
g_object_set_data (G_OBJECT (added), DEFAULT_WIRED_DEVICE_TAG, device);
g_object_set_data (G_OBJECT (device), DEFAULT_WIRED_CONNECTION_TAG, added);
g_signal_connect (added, NM_SETTINGS_CONNECTION_UPDATED_BY_USER,
g_signal_connect (added, NM_SETTINGS_CONNECTION_UPDATED_INTERNAL,
G_CALLBACK (default_wired_connection_updated_by_user_cb), self);
g_signal_connect (added, NM_SETTINGS_CONNECTION_REMOVED,
G_CALLBACK (default_wired_connection_removed_cb), self);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment