diff options
author | Dan Williams <dcbw@redhat.com> | 2015-02-16 18:03:40 -0600 |
---|---|---|
committer | Pavel Šimerda <psimerda@redhat.com> | 2015-02-17 19:11:51 +0100 |
commit | 2674129a32b237e6752bb0baf4dc7f3319c350f4 (patch) | |
tree | 81b90324d657756bb4e73ead603185c78dff6648 | |
parent | 55c39272f5f66c5127799833464a9f498179de22 (diff) | |
download | network-manager-applet-2674129a32b237e6752bb0baf4dc7f3319c350f4.tar.gz |
applet: simplify NMNetworkMenuItem initialization and update
Collapse some of the setters into nm_network_menu_item_new() since
these properties actually never change. Add some ATK descriptions
too.
-rw-r--r-- | po/POTFILES.in | 1 | ||||
-rw-r--r-- | src/ap-menu-item.c | 349 | ||||
-rw-r--r-- | src/ap-menu-item.h | 18 | ||||
-rw-r--r-- | src/applet-device-wifi.c | 25 | ||||
-rw-r--r-- | src/mb-menu-item.c | 41 |
5 files changed, 226 insertions, 208 deletions
diff --git a/po/POTFILES.in b/po/POTFILES.in index 768b18b4..5df683ab 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -5,6 +5,7 @@ nm-applet.desktop.in nm-connection-editor.desktop.in org.gnome.nm-applet.gschema.xml.in [type: gettext/glade]src/8021x.ui +src/ap-menu-item.c src/applet.c src/applet-device-bond.c src/applet-device-bridge.c diff --git a/src/ap-menu-item.c b/src/ap-menu-item.c index ec0f1816..d8aad760 100644 --- a/src/ap-menu-item.c +++ b/src/ap-menu-item.c @@ -40,11 +40,12 @@ G_DEFINE_TYPE (NMNetworkMenuItem, nm_network_menu_item, GTK_TYPE_IMAGE_MENU_ITEM typedef struct { GtkWidget * ssid; - char * ssid_string; GtkWidget * strength; - guint32 int_strength; GtkWidget * detail; GtkWidget * hbox; + + char * ssid_string; + guint32 int_strength; gchar * hash; GSList * dupes; gboolean has_connections; @@ -52,86 +53,7 @@ typedef struct { gboolean is_encrypted; } NMNetworkMenuItemPrivate; -static void -nm_network_menu_item_init (NMNetworkMenuItem *item) -{ - NMNetworkMenuItemPrivate *priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item); - - priv->hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - priv->ssid = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (priv->ssid), 0.0, 0.5); - - priv->detail = gtk_image_new (); - - gtk_container_add (GTK_CONTAINER (item), priv->hbox); - gtk_box_pack_start (GTK_BOX (priv->hbox), priv->ssid, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (priv->hbox), priv->detail, FALSE, FALSE, 0); - - priv->strength = gtk_image_new (); - gtk_box_pack_end (GTK_BOX (priv->hbox), priv->strength, FALSE, TRUE, 0); - gtk_widget_show (priv->strength); - - gtk_widget_show (priv->ssid); - gtk_widget_show (priv->detail); - gtk_widget_show (priv->hbox); -} - -GtkWidget* -nm_network_menu_item_new (const char *hash, gboolean has_connections) -{ - NMNetworkMenuItem *item; - - item = g_object_new (NM_TYPE_NETWORK_MENU_ITEM, NULL); - g_assert (item); - NM_NETWORK_MENU_ITEM_GET_PRIVATE (item)->has_connections = has_connections; - NM_NETWORK_MENU_ITEM_GET_PRIVATE (item)->hash = g_strdup (hash); - return GTK_WIDGET (item); -} - -static void -finalize (GObject *object) -{ - NMNetworkMenuItemPrivate *priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (object); - - g_free (priv->hash); - g_free (priv->ssid_string); - - g_slist_foreach (priv->dupes, (GFunc) g_free, NULL); - g_slist_free (priv->dupes); - - G_OBJECT_CLASS (nm_network_menu_item_parent_class)->finalize (object); -} - -static void -nm_network_menu_item_class_init (NMNetworkMenuItemClass * klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (klass, sizeof (NMNetworkMenuItemPrivate)); - - /* virtual methods */ - object_class->finalize = finalize; -} - -void -nm_network_menu_item_set_ssid (NMNetworkMenuItem *item, GByteArray *ssid) -{ - NMNetworkMenuItemPrivate *priv; - - g_return_if_fail (NM_IS_NETWORK_MENU_ITEM (item)); - g_return_if_fail (ssid != NULL); - - priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item); - - g_free (priv->ssid_string); - - priv->ssid_string = nm_utils_ssid_to_utf8 (ssid); - if (!priv->ssid_string) { - // FIXME: shouldn't happen; always coerce the SSID to _something_ - priv->ssid_string = g_strdup ("<unknown>"); - } - gtk_label_set_text (GTK_LABEL (priv->ssid), priv->ssid_string); -} +/******************************************************************/ const char * nm_network_menu_item_get_ssid (NMNetworkMenuItem *item) @@ -149,37 +71,48 @@ nm_network_menu_item_get_strength (NMNetworkMenuItem *item) return NM_NETWORK_MENU_ITEM_GET_PRIVATE (item)->int_strength; } -void -nm_network_menu_item_best_strength (NMNetworkMenuItem *item, - guint8 strength, - NMApplet *applet) +static void +update_atk_desc (NMNetworkMenuItem *item) { - NMNetworkMenuItemPrivate *priv; - GdkPixbuf *icon = NULL, *pixbuf, *top; - - g_return_if_fail (NM_IS_NETWORK_MENU_ITEM (item)); - - priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item); - - strength = MIN (strength, 100); - - /* Just do nothing if the new strength is less */ - if (strength < priv->int_strength) - return; + NMNetworkMenuItemPrivate *priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item); + GString *desc = NULL; + + desc = g_string_new (""); + g_string_append_printf (desc, "%s: ", priv->ssid_string); + + if (priv->is_adhoc) + g_string_append (desc, _("ad-hoc")); + else { + g_string_append_printf (desc, "%d%%", priv->int_strength); + if (priv->is_encrypted) { + g_string_append (desc, ", "); + g_string_append (desc, _("secure.")); + } + } - priv->int_strength = strength; + atk_object_set_name (gtk_widget_get_accessible (GTK_WIDGET (item)), desc->str); + g_string_free (desc, TRUE); +} - if (strength > 80) - icon = nma_icon_check_and_load ("nm-signal-100", applet); - else if (strength > 55) - icon = nma_icon_check_and_load ("nm-signal-75", applet); - else if (strength > 30) - icon = nma_icon_check_and_load ("nm-signal-50", applet); - else if (strength > 5) - icon = nma_icon_check_and_load ("nm-signal-25", applet); +static void +update_icon (NMNetworkMenuItem *item, NMApplet *applet) +{ + NMNetworkMenuItemPrivate *priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item); + GdkPixbuf *icon = NULL, *pixbuf, *top, *scaled; + const char *icon_name = NULL; + + if (priv->int_strength > 80) + icon_name = "nm-signal-100"; + else if (priv->int_strength > 55) + icon_name = "nm-signal-75"; + else if (priv->int_strength > 30) + icon_name = "nm-signal-50"; + else if (priv->int_strength > 5) + icon_name = "nm-signal-25"; else - icon = nma_icon_check_and_load ("nm-signal-00", applet); + icon_name = "nm-signal-00"; + icon = nma_icon_check_and_load (icon_name, applet); pixbuf = gdk_pixbuf_copy (icon); /* If the AP is "secure", composite the lock icon on top of the signal bars */ @@ -193,8 +126,6 @@ nm_network_menu_item_best_strength (NMNetworkMenuItem *item, /* Scale to menu size if larger so the menu doesn't look awful */ if (gdk_pixbuf_get_height (pixbuf) > 24 || gdk_pixbuf_get_width (pixbuf) > 24) { - GdkPixbuf *scaled; - scaled = gdk_pixbuf_scale_simple (pixbuf, 24, 24, GDK_INTERP_BILINEAR); g_object_unref (pixbuf); pixbuf = scaled; @@ -202,62 +133,42 @@ nm_network_menu_item_best_strength (NMNetworkMenuItem *item, gtk_image_set_from_pixbuf (GTK_IMAGE (priv->strength), pixbuf); g_object_unref (pixbuf); -} -const char * -nm_network_menu_item_get_hash (NMNetworkMenuItem *item) -{ - g_return_val_if_fail (NM_IS_NETWORK_MENU_ITEM (item), NULL); - - return NM_NETWORK_MENU_ITEM_GET_PRIVATE (item)->hash; + if (priv->is_adhoc && !gtk_image_get_pixbuf (GTK_IMAGE (priv->detail))) { + scaled = NULL; + pixbuf = nma_icon_check_and_load ("nm-adhoc", applet); + if (gdk_pixbuf_get_height (pixbuf) > 24 || gdk_pixbuf_get_width (pixbuf) > 24) + scaled = gdk_pixbuf_scale_simple (pixbuf, 24, 24, GDK_INTERP_BILINEAR); + gtk_image_set_from_pixbuf (GTK_IMAGE (priv->detail), scaled ? scaled : pixbuf); + g_clear_object (&scaled); + } } void -nm_network_menu_item_set_detail (NMNetworkMenuItem *item, - NMAccessPoint *ap, - GdkPixbuf *adhoc_icon, - guint32 dev_caps) +nm_network_menu_item_set_strength (NMNetworkMenuItem *item, + guint8 strength, + NMApplet *applet) { NMNetworkMenuItemPrivate *priv; - gboolean is_adhoc = FALSE; - guint32 ap_flags, ap_wpa, ap_rsn; g_return_if_fail (NM_IS_NETWORK_MENU_ITEM (item)); priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item); - ap_flags = nm_access_point_get_flags (ap); - ap_wpa = nm_access_point_get_wpa_flags (ap); - ap_rsn = nm_access_point_get_rsn_flags (ap); - - if ((ap_flags & NM_802_11_AP_FLAGS_PRIVACY) || ap_wpa || ap_rsn) - priv->is_encrypted = TRUE; - - if (nm_access_point_get_mode (ap) == NM_802_11_MODE_ADHOC) { - GdkPixbuf *scaled = NULL; - - priv->is_adhoc = is_adhoc = TRUE; - - if (gdk_pixbuf_get_height (adhoc_icon) > 24 || gdk_pixbuf_get_width (adhoc_icon) > 24) - scaled = gdk_pixbuf_scale_simple (adhoc_icon, 24, 24, GDK_INTERP_BILINEAR); - - gtk_image_set_from_pixbuf (GTK_IMAGE (priv->detail), scaled ? scaled : adhoc_icon); + strength = MIN (strength, 100); + if (strength > priv->int_strength) { + priv->int_strength = strength; + update_icon (item, applet); + update_atk_desc (item); + } +} - g_clear_object (&scaled); - } else - gtk_image_set_from_stock (GTK_IMAGE (priv->detail), NULL, GTK_ICON_SIZE_MENU); +const char * +nm_network_menu_item_get_hash (NMNetworkMenuItem *item) +{ + g_return_val_if_fail (NM_IS_NETWORK_MENU_ITEM (item), NULL); - /* Don't enable the menu item the device can't even connect to the AP */ - if ( !nm_utils_security_valid (NMU_SEC_NONE, dev_caps, TRUE, is_adhoc, ap_flags, ap_wpa, ap_rsn) - && !nm_utils_security_valid (NMU_SEC_STATIC_WEP, dev_caps, TRUE, is_adhoc, ap_flags, ap_wpa, ap_rsn) - && !nm_utils_security_valid (NMU_SEC_LEAP, dev_caps, TRUE, is_adhoc, ap_flags, ap_wpa, ap_rsn) - && !nm_utils_security_valid (NMU_SEC_DYNAMIC_WEP, dev_caps, TRUE, is_adhoc, ap_flags, ap_wpa, ap_rsn) - && !nm_utils_security_valid (NMU_SEC_WPA_PSK, dev_caps, TRUE, is_adhoc, ap_flags, ap_wpa, ap_rsn) - && !nm_utils_security_valid (NMU_SEC_WPA2_PSK, dev_caps, TRUE, is_adhoc, ap_flags, ap_wpa, ap_rsn) - && !nm_utils_security_valid (NMU_SEC_WPA_ENTERPRISE, dev_caps, TRUE, is_adhoc, ap_flags, ap_wpa, ap_rsn) - && !nm_utils_security_valid (NMU_SEC_WPA2_ENTERPRISE, dev_caps, TRUE, is_adhoc, ap_flags, ap_wpa, ap_rsn)) { - gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE); - } + return NM_NETWORK_MENU_ITEM_GET_PRIVATE (item)->hash; } gboolean @@ -280,19 +191,15 @@ nm_network_menu_item_find_dupe (NMNetworkMenuItem *item, NMAccessPoint *ap) return FALSE; } -void -nm_network_menu_item_set_active (NMNetworkMenuItem *item, gboolean active) +static void +update_label (NMNetworkMenuItem *item, gboolean use_bold) { - NMNetworkMenuItemPrivate *priv; - char *markup; - - g_return_if_fail (NM_IS_NETWORK_MENU_ITEM (item)); + NMNetworkMenuItemPrivate *priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item); - priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item); + gtk_label_set_use_markup (GTK_LABEL (priv->ssid), use_bold); + if (use_bold) { + char *markup = g_markup_printf_escaped ("<b>%s</b>", priv->ssid_string); - gtk_label_set_use_markup (GTK_LABEL (priv->ssid), active); - if (active) { - markup = g_markup_printf_escaped ("<b>%s</b>", priv->ssid_string); gtk_label_set_markup (GTK_LABEL (priv->ssid), markup); g_free (markup); } else @@ -300,6 +207,14 @@ nm_network_menu_item_set_active (NMNetworkMenuItem *item, gboolean active) } void +nm_network_menu_item_set_active (NMNetworkMenuItem *item, gboolean active) +{ + g_return_if_fail (NM_IS_NETWORK_MENU_ITEM (item)); + + update_label (item, active); +} + +void nm_network_menu_item_add_dupe (NMNetworkMenuItem *item, NMAccessPoint *ap) { NMNetworkMenuItemPrivate *priv; @@ -337,3 +252,111 @@ nm_network_menu_item_get_is_encrypted (NMNetworkMenuItem *item) return NM_NETWORK_MENU_ITEM_GET_PRIVATE (item)->is_encrypted; } +/******************************************************************/ + +GtkWidget * +nm_network_menu_item_new (NMAccessPoint *ap, + guint32 dev_caps, + const char *hash, + gboolean has_connections, + NMApplet *applet) +{ + NMNetworkMenuItem *item; + NMNetworkMenuItemPrivate *priv; + guint32 ap_flags, ap_wpa, ap_rsn; + const GByteArray *ssid; + + item = g_object_new (NM_TYPE_NETWORK_MENU_ITEM, NULL); + g_assert (item); + + priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item); + + nm_network_menu_item_add_dupe (item, ap); + + ssid = nm_access_point_get_ssid (ap); + if (ssid) + priv->ssid_string = nm_utils_ssid_to_utf8 (ssid); + if (!priv->ssid_string) + priv->ssid_string = g_strdup ("<unknown>"); + + priv->has_connections = has_connections; + priv->hash = g_strdup (hash); + priv->int_strength = nm_access_point_get_strength (ap); + + if (nm_access_point_get_mode (ap) == NM_802_11_MODE_ADHOC) + priv->is_adhoc = TRUE; + + ap_flags = nm_access_point_get_flags (ap); + ap_wpa = nm_access_point_get_wpa_flags (ap); + ap_rsn = nm_access_point_get_rsn_flags (ap); + if ((ap_flags & NM_802_11_AP_FLAGS_PRIVACY) || ap_wpa || ap_rsn) + priv->is_encrypted = TRUE; + + /* Don't enable the menu item the device can't even connect to the AP */ + if ( !nm_utils_security_valid (NMU_SEC_NONE, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn) + && !nm_utils_security_valid (NMU_SEC_STATIC_WEP, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn) + && !nm_utils_security_valid (NMU_SEC_LEAP, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn) + && !nm_utils_security_valid (NMU_SEC_DYNAMIC_WEP, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn) + && !nm_utils_security_valid (NMU_SEC_WPA_PSK, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn) + && !nm_utils_security_valid (NMU_SEC_WPA2_PSK, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn) + && !nm_utils_security_valid (NMU_SEC_WPA_ENTERPRISE, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn) + && !nm_utils_security_valid (NMU_SEC_WPA2_ENTERPRISE, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn)) { + gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE); + } + + update_label (item, FALSE); + update_icon (item, applet); + update_atk_desc (item); + + return GTK_WIDGET (item); +} + +static void +nm_network_menu_item_init (NMNetworkMenuItem *item) +{ + NMNetworkMenuItemPrivate *priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item); + + priv->hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + priv->ssid = gtk_label_new (NULL); + gtk_misc_set_alignment (GTK_MISC (priv->ssid), 0.0, 0.5); + + priv->detail = gtk_image_new (); + + gtk_container_add (GTK_CONTAINER (item), priv->hbox); + gtk_box_pack_start (GTK_BOX (priv->hbox), priv->ssid, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (priv->hbox), priv->detail, FALSE, FALSE, 0); + + priv->strength = gtk_image_new (); + gtk_box_pack_end (GTK_BOX (priv->hbox), priv->strength, FALSE, TRUE, 0); + gtk_widget_show (priv->strength); + + gtk_widget_show (priv->ssid); + gtk_widget_show (priv->detail); + gtk_widget_show (priv->hbox); +} + +static void +finalize (GObject *object) +{ + NMNetworkMenuItemPrivate *priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (object); + + g_free (priv->hash); + g_free (priv->ssid_string); + + g_slist_foreach (priv->dupes, (GFunc) g_free, NULL); + g_slist_free (priv->dupes); + + G_OBJECT_CLASS (nm_network_menu_item_parent_class)->finalize (object); +} + +static void +nm_network_menu_item_class_init (NMNetworkMenuItemClass * klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (NMNetworkMenuItemPrivate)); + + /* virtual methods */ + object_class->finalize = finalize; +} + diff --git a/src/ap-menu-item.h b/src/ap-menu-item.h index a8871d1f..c538c364 100644 --- a/src/ap-menu-item.h +++ b/src/ap-menu-item.h @@ -49,24 +49,22 @@ struct _NMNetworkMenuItemClass { GType nm_network_menu_item_get_type (void) G_GNUC_CONST; -GtkWidget* nm_network_menu_item_new (const char *hash, gboolean has_connections); +GtkWidget* nm_network_menu_item_new (NMAccessPoint *ap, + guint32 dev_caps, + const char *hash, + gboolean has_connections, + NMApplet *applet); -void nm_network_menu_item_set_ssid (NMNetworkMenuItem *item, - GByteArray *ssid); const char *nm_network_menu_item_get_ssid (NMNetworkMenuItem *item); gboolean nm_network_menu_item_get_is_adhoc (NMNetworkMenuItem *item); gboolean nm_network_menu_item_get_is_encrypted (NMNetworkMenuItem *item); guint32 nm_network_menu_item_get_strength (NMNetworkMenuItem *item); -void nm_network_menu_item_best_strength (NMNetworkMenuItem *item, - guint8 strength, - NMApplet *applet); +void nm_network_menu_item_set_strength (NMNetworkMenuItem *item, + guint8 strength, + NMApplet *applet); const char *nm_network_menu_item_get_hash (NMNetworkMenuItem * item); -void nm_network_menu_item_set_detail (NMNetworkMenuItem * item, - NMAccessPoint * ap, - GdkPixbuf * adhoc_icon, - guint32 dev_caps); gboolean nm_network_menu_item_find_dupe (NMNetworkMenuItem *item, NMAccessPoint *ap); diff --git a/src/applet-device-wifi.c b/src/applet-device-wifi.c index d5a937a0..2bcd42bb 100644 --- a/src/applet-device-wifi.c +++ b/src/applet-device-wifi.c @@ -534,29 +534,20 @@ create_new_ap_item (NMDeviceWifi *device, { WifiMenuItemInfo *info; GSList *iter; - NMNetworkMenuItem *item = NULL; + GtkWidget *item; GSList *dev_connections = NULL; GSList *ap_connections = NULL; - const GByteArray *ssid; - guint32 dev_caps; dev_connections = nm_device_filter_connections (NM_DEVICE (device), connections); ap_connections = nm_access_point_filter_connections (ap, dev_connections); g_slist_free (dev_connections); dev_connections = NULL; - item = NM_NETWORK_MENU_ITEM (nm_network_menu_item_new (dup_data->hash, - !!g_slist_length (ap_connections))); - - ssid = nm_access_point_get_ssid (ap); - nm_network_menu_item_set_ssid (item, (GByteArray *) ssid); - - dev_caps = nm_device_wifi_get_capabilities (device); - gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (item), TRUE); - nm_network_menu_item_set_detail (item, ap, nma_icon_check_and_load ("nm-adhoc", applet), dev_caps); - nm_network_menu_item_best_strength (item, nm_access_point_get_strength (ap), applet); - nm_network_menu_item_add_dupe (item, ap); - + item = nm_network_menu_item_new (ap, + nm_device_wifi_get_capabilities (device), + dup_data->hash, + !!g_slist_length (ap_connections), + applet); g_object_set_data (G_OBJECT (item), "device", NM_DEVICE (device)); /* If there's only one connection, don't show the submenu */ @@ -610,7 +601,7 @@ create_new_ap_item (NMDeviceWifi *device, } g_slist_free (ap_connections); - return item; + return NM_NETWORK_MENU_ITEM (item); } static NMNetworkMenuItem * @@ -643,7 +634,7 @@ get_menu_item_for_ap (NMDeviceWifi *device, g_slist_foreach (menu_list, find_duplicate, &dup_data); if (dup_data.found) { - nm_network_menu_item_best_strength (dup_data.found, nm_access_point_get_strength (ap), applet); + nm_network_menu_item_set_strength (dup_data.found, nm_access_point_get_strength (ap), applet); nm_network_menu_item_add_dupe (dup_data.found, ap); return NULL; } diff --git a/src/mb-menu-item.c b/src/mb-menu-item.c index 4f204f17..5b0c8fd9 100644 --- a/src/mb-menu-item.c +++ b/src/mb-menu-item.c @@ -36,12 +36,13 @@ G_DEFINE_TYPE (NMMbMenuItem, nm_mb_menu_item, GTK_TYPE_IMAGE_MENU_ITEM); #define NM_MB_MENU_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_MB_MENU_ITEM, NMMbMenuItemPrivate)) typedef struct { - GtkWidget *desc; - char *desc_string; GtkWidget *strength; - guint32 int_strength; GtkWidget *detail; GtkWidget *hbox; + GtkWidget *desc; + + char *desc_string; + guint32 int_strength; } NMMbMenuItemPrivate; static const char * @@ -78,6 +79,21 @@ get_tech_name (guint32 tech) return NULL; } +static void +update_label (NMMbMenuItem *item, gboolean use_bold) +{ + NMMbMenuItemPrivate *priv = NM_MB_MENU_ITEM_GET_PRIVATE (item); + + gtk_label_set_use_markup (GTK_LABEL (priv->desc), use_bold); + if (use_bold) { + char *markup = g_markup_printf_escaped ("<b>%s</b>", priv->desc_string); + + gtk_label_set_markup (GTK_LABEL (priv->desc), markup); + g_free (markup); + } else + gtk_label_set_text (GTK_LABEL (priv->desc), priv->desc_string); +} + GtkWidget * nm_mb_menu_item_new (const char *connection_name, guint32 strength, @@ -93,8 +109,7 @@ nm_mb_menu_item_new (const char *connection_name, const char *tech_name = NULL; item = g_object_new (NM_TYPE_MB_MENU_ITEM, NULL); - if (!item) - return NULL; + g_assert (item); priv = NM_MB_MENU_ITEM_GET_PRIVATE (item); priv->int_strength = strength; @@ -168,22 +183,12 @@ nm_mb_menu_item_new (const char *connection_name, break; } - if (enabled && connection_name && active) { - char *markup; - - gtk_label_set_use_markup (GTK_LABEL (priv->desc), TRUE); - markup = g_markup_printf_escaped ("<b>%s</b>", priv->desc_string); - gtk_label_set_markup (GTK_LABEL (priv->desc), markup); - g_free (markup); - } else { - /* Disconnected and disabled states */ - gtk_label_set_use_markup (GTK_LABEL (priv->desc), FALSE); - gtk_label_set_text (GTK_LABEL (priv->desc), priv->desc_string); - } + update_label (item, (enabled && connection_name && active)); /* And the strength icon, if we have strength information at all */ if (enabled && strength) { - GdkPixbuf *pixbuf = nma_icon_check_and_load (mobile_helper_get_quality_icon_name (strength), applet); + const char *icon_name = mobile_helper_get_quality_icon_name (strength); + GdkPixbuf *pixbuf = nma_icon_check_and_load (icon_name, applet); gtk_image_set_from_pixbuf (GTK_IMAGE (priv->strength), pixbuf); } |