File nm-fallback.patch of Package NetworkManager

Index: NetworkManager-0.7.0/libnm-util/libnm-util.ver
===================================================================
--- NetworkManager-0.7.0.orig/libnm-util/libnm-util.ver
+++ NetworkManager-0.7.0/libnm-util/libnm-util.ver
@@ -221,6 +221,7 @@ global:
 	nm_setting_wireless_add_seen_bssid;
 	nm_setting_wireless_get_num_seen_bssids;
 	nm_setting_wireless_get_seen_bssid;
+	nm_setting_wireless_get_fallback;
 	nm_setting_wireless_security_add_proto;
 	nm_setting_wireless_security_add_pairwise;
 	nm_setting_wireless_security_add_group;
Index: NetworkManager-0.7.0/libnm-util/nm-setting-wireless.c
===================================================================
--- NetworkManager-0.7.0.orig/libnm-util/nm-setting-wireless.c
+++ NetworkManager-0.7.0/libnm-util/nm-setting-wireless.c
@@ -90,6 +90,7 @@ typedef struct {
 	guint32 mtu;
 	GSList *seen_bssids;
 	char *security;
+	gboolean fallback;
 } NMSettingWirelessPrivate;
 
 enum {
@@ -105,6 +106,7 @@ enum {
 	PROP_MTU,
 	PROP_SEEN_BSSIDS,
 	PROP_SEC,
+	PROP_FALLBACK,
 
 	LAST_PROP
 };
@@ -376,6 +378,14 @@ nm_setting_wireless_get_security (NMSett
 }
 
 gboolean
+nm_setting_wireless_get_fallback (NMSettingWireless *setting)
+{
+	g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), FALSE);
+
+	return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->fallback;
+}
+
+gboolean
 nm_setting_wireless_add_seen_bssid (NMSettingWireless *setting,
 									const char *bssid)
 {
@@ -629,6 +639,9 @@ set_property (GObject *object, guint pro
 		g_free (priv->security);
 		priv->security = g_value_dup_string (value);
 		break;
+	case PROP_FALLBACK:
+		priv->fallback = g_value_get_boolean (value);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -675,6 +688,9 @@ get_property (GObject *object, guint pro
 	case PROP_SEC:
 		g_value_set_string (value, nm_setting_wireless_get_security (setting));
 		break;
+	case PROP_FALLBACK:
+		g_value_set_boolean (value, nm_setting_wireless_get_fallback (setting));
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -783,4 +799,12 @@ nm_setting_wireless_class_init (NMSettin
 						  "Security",
 						  NULL,
 						  G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+
+	g_object_class_install_property
+		(object_class, PROP_FALLBACK,
+		 g_param_spec_boolean (NM_SETTING_WIRELESS_FALLBACK,
+							   "Fallback",
+							   "Fallback",
+							   FALSE,
+							   G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
 }
Index: NetworkManager-0.7.0/libnm-util/nm-setting-wireless.h
===================================================================
--- NetworkManager-0.7.0.orig/libnm-util/nm-setting-wireless.h
+++ NetworkManager-0.7.0/libnm-util/nm-setting-wireless.h
@@ -66,6 +66,7 @@ GQuark nm_setting_wireless_error_quark (
 #define NM_SETTING_WIRELESS_MTU         "mtu"
 #define NM_SETTING_WIRELESS_SEEN_BSSIDS "seen-bssids"
 #define NM_SETTING_WIRELESS_SEC         "security"
+#define NM_SETTING_WIRELESS_FALLBACK    "fallback"
 
 typedef struct {
 	NMSetting parent;
@@ -89,6 +90,7 @@ guint32           nm_setting_wireless_ge
 const GByteArray *nm_setting_wireless_get_mac_address        (NMSettingWireless *setting);
 guint32           nm_setting_wireless_get_mtu                (NMSettingWireless *setting);
 const char       *nm_setting_wireless_get_security           (NMSettingWireless *setting);
+gboolean          nm_setting_wireless_get_fallback           (NMSettingWireless *setting);
 
 gboolean          nm_setting_wireless_add_seen_bssid         (NMSettingWireless *setting,
 															  const char *bssid);
Index: NetworkManager-0.7.0/src/nm-device-wifi.c
===================================================================
--- NetworkManager-0.7.0.orig/src/nm-device-wifi.c
+++ NetworkManager-0.7.0/src/nm-device-wifi.c
@@ -1047,6 +1047,7 @@ real_get_best_auto_connection (NMDevice
 	NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
 	NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
 	GSList *iter, *ap_iter;
+	NMConnection *fallback = NULL;
 
 	for (iter = connections; iter; iter = g_slist_next (iter)) {
 		NMConnection *connection = NM_CONNECTION (iter->data);
@@ -1089,8 +1090,12 @@ real_get_best_auto_connection (NMDevice
 				return connection;
 			}
 		}
+
+		if (!fallback && nm_setting_wireless_get_fallback (s_wireless))
+			fallback = connection;
 	}
-	return NULL;
+
+	return fallback;
 }
 
 /*
openSUSE Build Service is sponsored by