diff --git a/panel-applet/NMWirelessApplet.c b/panel-applet/NMWirelessApplet.c index de4115aa29..d80aba1930 100644 --- a/panel-applet/NMWirelessApplet.c +++ b/panel-applet/NMWirelessApplet.c @@ -273,12 +273,15 @@ nmwa_update_state (NMWirelessApplet *applet) strength = applet->active_device->strength; } +#if 0 + /* Only show icon if there's more than one device and at least one is wireless */ if (g_slist_length (applet->device_list) == 1 && applet->applet_state != APPLET_STATE_NO_NM) { if (((NetworkDevice *)applet->device_list->data)->type == DEVICE_TYPE_WIRED_ETHERNET) show_applet = FALSE; } +#endif nmwa_update_network_state (applet); @@ -302,17 +305,25 @@ nmwa_update_state (NMWirelessApplet *applet) case (APPLET_STATE_WIRELESS): if (applet->active_device) { - if (strength > 75) - pixbuf = applet->wireless_100_icon; - else if (strength > 50) - pixbuf = applet->wireless_75_icon; - else if (strength > 25) - pixbuf = applet->wireless_50_icon; - else if (strength > 0) - pixbuf = applet->wireless_25_icon; + if (applet->is_adhoc) + { + pixbuf = applet->adhoc_icon; + tip = g_strdup_printf (_("Connected to an Ad-Hoc wireless network")); + } else - pixbuf = applet->wireless_00_icon; - tip = g_strdup_printf (_("Wireless network connection (%d%%)"), strength); + { + if (strength > 75) + pixbuf = applet->wireless_100_icon; + else if (strength > 50) + pixbuf = applet->wireless_75_icon; + else if (strength > 25) + pixbuf = applet->wireless_50_icon; + else if (strength > 0) + pixbuf = applet->wireless_25_icon; + else + pixbuf = applet->wireless_00_icon; + tip = g_strdup_printf (_("Wireless network connection (%d%%)"), strength); + } } else tip = g_strdup (_("Wireless network connection")); @@ -324,6 +335,7 @@ nmwa_update_state (NMWirelessApplet *applet) tip = g_strdup (_("Connecting to a wireless network...")); break; case (APPLET_STATE_NO_NM): + show_applet = FALSE; tip = g_strdup (_("NetworkManager is not running")); case (APPLET_STATE_WIRELESS_SCANNING): applet->animation_step = CLAMP (applet->animation_step, 0, NUM_WIRELESS_SCANNING_FRAMES - 1); @@ -341,9 +353,9 @@ nmwa_update_state (NMWirelessApplet *applet) gtk_tooltips_set_tip (applet->tooltips, applet->event_box, tip, NULL); g_free (tip); - /*determine if we should hide the notification icon*/ gtk_image_set_from_pixbuf (GTK_IMAGE (applet->pixmap), pixbuf); + /*determine if we should hide the notification icon*/ if (show_applet) gtk_widget_show (GTK_WIDGET (applet)); else @@ -1052,6 +1064,7 @@ nmwa_icons_free (NMWirelessApplet *applet) g_object_unref (applet->no_nm_icon); g_object_unref (applet->wired_icon); + g_object_unref (applet->adhoc_icon); for (i = 0; i < NUM_WIRED_CONNECTING_FRAMES; i++) g_object_unref (applet->wired_connecting_icons[i]); g_object_unref (applet->wireless_00_icon); @@ -1074,21 +1087,22 @@ nmwa_icons_load_from_disk (NMWirelessApplet *applet, /* Assume icon is square */ icon_size = 22; - applet->no_nm_icon = gtk_icon_theme_load_icon (icon_theme, "nm-device-broken", icon_size, 0, NULL); - applet->wired_icon = gtk_icon_theme_load_icon (icon_theme, "nm-device-wired", icon_size, 0, NULL); - applet->wired_connecting_icons[0] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting00", icon_size, 0, NULL); - applet->wired_connecting_icons[1] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting01", icon_size, 0, NULL); - applet->wired_connecting_icons[2] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting02", icon_size, 0, NULL); - applet->wired_connecting_icons[3] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting03", icon_size, 0, NULL); - applet->wireless_00_icon = gtk_icon_theme_load_icon (icon_theme, "nm-signal-00", icon_size, 0, NULL); - applet->wireless_25_icon = gtk_icon_theme_load_icon (icon_theme, "nm-signal-25", icon_size, 0, NULL); - applet->wireless_50_icon = gtk_icon_theme_load_icon (icon_theme, "nm-signal-50", icon_size, 0, NULL); - applet->wireless_75_icon = gtk_icon_theme_load_icon (icon_theme, "nm-signal-75", icon_size, 0, NULL); - applet->wireless_100_icon = gtk_icon_theme_load_icon (icon_theme, "nm-signal-100", icon_size, 0, NULL); - applet->wireless_connecting_icons[0] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting00", icon_size, 0, NULL); - applet->wireless_connecting_icons[1] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting01", icon_size, 0, NULL); - applet->wireless_connecting_icons[2] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting02", icon_size, 0, NULL); - applet->wireless_connecting_icons[3] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting03", icon_size, 0, NULL); + applet->no_nm_icon = gtk_icon_theme_load_icon (icon_theme, "nm-device-broken", icon_size, 0, NULL); + applet->wired_icon = gtk_icon_theme_load_icon (icon_theme, "nm-device-wired", icon_size, 0, NULL); + applet->adhoc_icon = gtk_icon_theme_load_icon (icon_theme, "nm-adhoc", icon_size, 0, NULL); + applet->wired_connecting_icons[0] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting00", icon_size, 0, NULL); + applet->wired_connecting_icons[1] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting01", icon_size, 0, NULL); + applet->wired_connecting_icons[2] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting02", icon_size, 0, NULL); + applet->wired_connecting_icons[3] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting03", icon_size, 0, NULL); + applet->wireless_00_icon = gtk_icon_theme_load_icon (icon_theme, "nm-signal-00", icon_size, 0, NULL); + applet->wireless_25_icon = gtk_icon_theme_load_icon (icon_theme, "nm-signal-25", icon_size, 0, NULL); + applet->wireless_50_icon = gtk_icon_theme_load_icon (icon_theme, "nm-signal-50", icon_size, 0, NULL); + applet->wireless_75_icon = gtk_icon_theme_load_icon (icon_theme, "nm-signal-75", icon_size, 0, NULL); + applet->wireless_100_icon = gtk_icon_theme_load_icon (icon_theme, "nm-signal-100", icon_size, 0, NULL); + applet->wireless_connecting_icons[0] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting00", icon_size, 0, NULL); + applet->wireless_connecting_icons[1] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting01", icon_size, 0, NULL); + applet->wireless_connecting_icons[2] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting02", icon_size, 0, NULL); + applet->wireless_connecting_icons[3] = gtk_icon_theme_load_icon (icon_theme, "nm-connecting03", icon_size, 0, NULL); applet->wireless_scanning_icons[0] = gtk_icon_theme_load_icon (icon_theme, "nm-detect00", icon_size, 0, NULL); applet->wireless_scanning_icons[1] = gtk_icon_theme_load_icon (icon_theme, "nm-detect01", icon_size, 0, NULL); applet->wireless_scanning_icons[2] = gtk_icon_theme_load_icon (icon_theme, "nm-detect02", icon_size, 0, NULL); diff --git a/panel-applet/NMWirelessApplet.h b/panel-applet/NMWirelessApplet.h index 44ddfe63df..a3cdb31a02 100644 --- a/panel-applet/NMWirelessApplet.h +++ b/panel-applet/NMWirelessApplet.h @@ -113,6 +113,7 @@ typedef struct GMutex *data_mutex; AppletState applet_state; gboolean forcing_device; + gboolean is_adhoc; GSList *device_list; NetworkDevice *active_device; char *nm_status; @@ -120,6 +121,7 @@ typedef struct GdkPixbuf *no_nm_icon; GdkPixbuf *wired_icon; + GdkPixbuf *adhoc_icon; #define NUM_WIRED_CONNECTING_FRAMES 4 GdkPixbuf *wired_connecting_icons[NUM_WIRED_CONNECTING_FRAMES]; GdkPixbuf *wireless_00_icon; diff --git a/panel-applet/NMWirelessAppletDbus.c b/panel-applet/NMWirelessAppletDbus.c index 8e37a7c0e5..c40e3d7caa 100644 --- a/panel-applet/NMWirelessAppletDbus.c +++ b/panel-applet/NMWirelessAppletDbus.c @@ -324,6 +324,30 @@ static char * nmwa_dbus_get_object_name (NMWirelessApplet *applet, char *path) } +/* + * nmwa_dbus_get_object_mode + * + * Returns the mode (ie Ad-Hoc, Infrastructure) of a specified object (wireless network, device, etc) + * + */ +static NMNetworkMode nmwa_dbus_get_object_mode (NMWirelessApplet *applet, char *path) +{ + NMNetworkMode mode = NETWORK_MODE_INFRA; + + switch (nmwa_dbus_call_nm_method (applet->connection, path, "getMode", DBUS_TYPE_INT32, (void **)(&mode), NULL)) + { + case (RETURN_NO_NM): + applet->applet_state = APPLET_STATE_NO_NM; + break; + + default: + break; + } + + return (mode); +} + + /* * nmwa_dbus_get_device_udi * @@ -901,6 +925,7 @@ static void nmwa_dbus_update_devices (NMWirelessApplet *applet) GSList *device_list = NULL; NetworkDevice *active_device = NULL; char *nm_status = NULL; + gboolean adhoc = FALSE; g_return_if_fail (applet->data_mutex != NULL); @@ -954,7 +979,11 @@ static void nmwa_dbus_update_devices (NMWirelessApplet *applet) network_device_ref (dev); applet->dbus_active_device = dev; network_device_ref (dev); - nmwa_dbus_update_device_wireless_networks (dev, TRUE, applet); + if (dev->type == DEVICE_TYPE_WIRELESS_ETHERNET) + { + adhoc = nmwa_dbus_get_object_mode (applet, nm_act_dev); + nmwa_dbus_update_device_wireless_networks (dev, TRUE, applet); + } } else nmwa_dbus_update_device_wireless_networks (dev, FALSE, applet); @@ -981,6 +1010,7 @@ static void nmwa_dbus_update_devices (NMWirelessApplet *applet) applet->device_list = device_list; applet->active_device = active_device; applet->nm_status = nm_status; + applet->is_adhoc = adhoc; g_mutex_unlock (applet->data_mutex); } diff --git a/panel-applet/icons/Makefile.am b/panel-applet/icons/Makefile.am index 38ca664e9e..421918a863 100644 --- a/panel-applet/icons/Makefile.am +++ b/panel-applet/icons/Makefile.am @@ -8,6 +8,7 @@ largeicon_DATA=\ smallicondir=${datadir}/icons/hicolor/22x22/apps smallicon_DATA=\ nm-device-wired.png \ + nm-adhoc.png \ nm-connecting00.png \ nm-connecting01.png \ nm-connecting02.png \ diff --git a/panel-applet/icons/nm-adhoc.png b/panel-applet/icons/nm-adhoc.png new file mode 100644 index 0000000000..a1000ed34d Binary files /dev/null and b/panel-applet/icons/nm-adhoc.png differ diff --git a/src/NetworkManagerDbus.c b/src/NetworkManagerDbus.c index 3042d9c806..b62129df8b 100644 --- a/src/NetworkManagerDbus.c +++ b/src/NetworkManagerDbus.c @@ -1347,6 +1347,8 @@ static DBusMessage *nm_dbus_devices_handle_networks_request (DBusConnection *con dbus_message_append_args (reply_message, DBUS_TYPE_INT32, nm_ap_get_rate (ap), DBUS_TYPE_INVALID); else if (strcmp ("getEncrypted", request) == 0) dbus_message_append_args (reply_message, DBUS_TYPE_BOOLEAN, nm_ap_get_encrypted (ap), DBUS_TYPE_INVALID); + else if (strcmp ("getMode", request) == 0) + dbus_message_append_args (reply_message, DBUS_TYPE_INT32, nm_ap_get_mode (ap), DBUS_TYPE_INVALID); else { /* Must destroy the allocated message */ @@ -1407,6 +1409,8 @@ static DBusMessage *nm_dbus_devices_handle_request (DBusConnection *connection, dbus_message_append_args (reply_message, DBUS_TYPE_STRING, nm_device_get_udi (dev), DBUS_TYPE_INVALID); else if (strcmp ("getIP4Address", request) == 0) dbus_message_append_args (reply_message, DBUS_TYPE_UINT32, nm_device_get_ip4_address (dev), DBUS_TYPE_INVALID); + else if (strcmp ("getMode", request) == 0) + dbus_message_append_args (reply_message, DBUS_TYPE_UINT32, nm_device_get_mode (dev), DBUS_TYPE_INVALID); else if (strcmp ("getStrength", request) == 0) { /* Only wireless devices have signal strength */ diff --git a/src/NetworkManagerDevice.h b/src/NetworkManagerDevice.h index c46eaf3f43..4a52263176 100644 --- a/src/NetworkManagerDevice.h +++ b/src/NetworkManagerDevice.h @@ -66,6 +66,8 @@ void nm_device_set_essid (NMDevice *dev, const char *essid); void nm_device_get_ap_address (NMDevice *dev, struct ether_addr *addr); +NMNetworkMode nm_device_get_mode (NMDevice *dev); + guint32 nm_device_get_ip4_address (NMDevice *dev); void nm_device_update_ip4_address (NMDevice *dev);