void mobile_helper_get_icon (NMDevice *device, NMDeviceState state, NMConnection *connection, GdkPixbuf **out_pixbuf, char **out_indicator_icon, char **tip, NMApplet *applet, guint32 mb_state, guint32 mb_tech, guint32 quality, gboolean quality_valid) { NMSettingConnection *s_con; const char *id; id = nm_device_get_iface (NM_DEVICE (device)); if (connection) { s_con = nm_connection_get_setting_connection (connection); id = nm_setting_connection_get_id (s_con); } switch (state) { case NM_DEVICE_STATE_PREPARE: *tip = g_strdup_printf (_("Preparing mobile broadband connection '%s'..."), id); break; case NM_DEVICE_STATE_CONFIG: *tip = g_strdup_printf (_("Configuring mobile broadband connection '%s'..."), id); break; case NM_DEVICE_STATE_NEED_AUTH: *tip = g_strdup_printf (_("User authentication required for mobile broadband connection '%s'..."), id); break; case NM_DEVICE_STATE_IP_CONFIG: *tip = g_strdup_printf (_("Requesting a network address for '%s'..."), id); break; case NM_DEVICE_STATE_ACTIVATED: *out_pixbuf = mobile_helper_get_status_pixbuf (quality, quality_valid, mb_state, mb_tech, applet); *out_indicator_icon = mobile_helper_get_quality_icon (quality_valid ? quality : 0, applet); if ((mb_state != MB_STATE_UNKNOWN) && quality_valid) { gboolean roaming = (mb_state == MB_STATE_ROAMING); *tip = g_strdup_printf (_("Mobile broadband connection '%s' active: (%d%%%s%s)"), id, quality, roaming ? ", " : "", roaming ? _("roaming") : ""); } else *tip = g_strdup_printf (_("Mobile broadband connection '%s' active"), id); break; default: break; } }
static GtkWidget * new_nsp_menu_item (NMDeviceWimax *device, NMConnection *connection, gboolean active, NMWimaxNsp *nsp, NMApplet *applet) { GtkWidget *item; WimaxMenuItemInfo *info; #ifdef ENABLE_INDICATOR char *text = NULL; GtkWidget *signal_icon = NULL; #endif g_return_val_if_fail (nsp != NULL, NULL); #ifndef ENABLE_INDICATOR item = nm_mb_menu_item_new (nm_wimax_nsp_get_name (nsp), nm_wimax_nsp_get_signal_quality (nsp), NULL, active, MB_TECH_WIMAX, nsp_type_to_mb_state (nm_wimax_nsp_get_network_type (nsp)), TRUE, applet); #else text = g_strdup (nm_wimax_nsp_get_name (nsp)); item = gtk_image_menu_item_new_with_label (text); g_free (text); text = mobile_helper_get_quality_icon (nm_wimax_nsp_get_signal_quality (nsp), applet); signal_icon = gtk_image_new_from_icon_name (text, GTK_ICON_SIZE_LARGE_TOOLBAR); g_free (text); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), signal_icon); gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (item), TRUE); #endif /* ENABLE_INDICATOR */ gtk_widget_set_sensitive (GTK_WIDGET (item), TRUE); info = g_slice_new0 (WimaxMenuItemInfo); info->applet = applet; info->device = g_object_ref (G_OBJECT (device)); info->connection = connection ? g_object_ref (connection) : NULL; info->nsp = g_object_ref (nsp); g_signal_connect_data (item, "activate", G_CALLBACK (wimax_menu_item_activate), info, (GClosureNotify) wimax_menu_item_info_destroy, 0); return item; }
GtkWidget * nm_mb_menu_item_new (const char *connection_name, guint32 strength, const char *provider, guint32 technology, guint32 state, gboolean enabled, NMApplet *applet) { NMMbMenuItem *item; NMMbMenuItemPrivate *priv; const char *tech_name; item = g_object_new (NM_TYPE_MB_MENU_ITEM, NULL); if (!item) return NULL; priv = NM_MB_MENU_ITEM_GET_PRIVATE (item); priv->int_strength = strength; /* Construct the description string */ tech_name = get_tech_name (technology); switch (state) { default: case MB_STATE_UNKNOWN: priv->desc_string = g_strdup (_("not enabled")); break; case MB_STATE_IDLE: if (connection_name) priv->desc_string = g_strdup (connection_name); else priv->desc_string = g_strdup (_("not registered")); break; case MB_STATE_HOME: if (connection_name) { if (provider && tech_name) priv->desc_string = g_strdup_printf ("%s (%s %s)", connection_name, provider, tech_name); else if (provider || tech_name) priv->desc_string = g_strdup_printf ("%s (%s)", connection_name, provider ? provider : tech_name); else priv->desc_string = g_strdup_printf ("%s", connection_name); } else { if (provider) { if (tech_name) priv->desc_string = g_strdup_printf ("%s %s", provider, tech_name); else priv->desc_string = g_strdup_printf ("%s", provider); } else { if (tech_name) priv->desc_string = g_strdup_printf (_("Home network (%s)"), tech_name); else priv->desc_string = g_strdup_printf (_("Home network")); } } break; case MB_STATE_SEARCHING: if (connection_name) priv->desc_string = g_strdup (connection_name); else priv->desc_string = g_strdup (_("searching")); break; case MB_STATE_DENIED: priv->desc_string = g_strdup (_("registration denied")); break; case MB_STATE_ROAMING: if (connection_name) { if (tech_name) priv->desc_string = g_strdup_printf (_("%s (%s roaming)"), connection_name, tech_name); else priv->desc_string = g_strdup_printf (_("%s (roaming)"), connection_name); } else { if (provider) { if (tech_name) priv->desc_string = g_strdup_printf (_("%s (%s roaming)"), provider, tech_name); else priv->desc_string = g_strdup_printf (_("%s (roaming)"), provider); } else { if (tech_name) priv->desc_string = g_strdup_printf (_("Roaming network (%s)"), tech_name); else priv->desc_string = g_strdup_printf (_("Roaming network")); } } break; } /* Assume a connection name means the label should be active */ if (enabled && connection_name) { 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); gtk_widget_set_sensitive (GTK_WIDGET (item), TRUE); } 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); gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE); } /* And the strength icon, if we have strength information at all */ if (enabled && strength) { gtk_image_set_from_pixbuf (GTK_IMAGE (priv->strength), mobile_helper_get_quality_icon (strength, applet)); } return GTK_WIDGET (item); }
GdkPixbuf * mobile_helper_get_status_pixbuf (guint32 quality, gboolean quality_valid, guint32 state, guint32 access_tech, NMApplet *applet) { GdkPixbuf *pixbuf, *qual_pixbuf, *wwan_pixbuf, *tmp; wwan_pixbuf = nma_icon_check_and_load ("nm-wwan-tower", &applet->wwan_tower_icon, applet); if (!quality_valid) quality = 0; #ifndef ENABLE_INDICATOR qual_pixbuf = mobile_helper_get_quality_icon (quality, applet); #else qual_pixbuf = wwan_pixbuf; #endif pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, gdk_pixbuf_get_bits_per_sample (qual_pixbuf), gdk_pixbuf_get_width (qual_pixbuf), gdk_pixbuf_get_height (qual_pixbuf)); gdk_pixbuf_fill (pixbuf, 0xFFFFFF00); /* Composite the tower icon into the final icon at the bottom layer */ gdk_pixbuf_composite (wwan_pixbuf, pixbuf, 0, 0, gdk_pixbuf_get_width (wwan_pixbuf), gdk_pixbuf_get_height (wwan_pixbuf), 0, 0, 1.0, 1.0, GDK_INTERP_BILINEAR, 255); /* Composite the signal quality onto the icon on top of the WWAN tower */ gdk_pixbuf_composite (qual_pixbuf, pixbuf, 0, 0, gdk_pixbuf_get_width (qual_pixbuf), gdk_pixbuf_get_height (qual_pixbuf), 0, 0, 1.0, 1.0, GDK_INTERP_BILINEAR, 255); /* And finally the roaming or technology icon */ if (state == MB_STATE_ROAMING) { tmp = nma_icon_check_and_load ("nm-mb-roam", &applet->mb_roaming_icon, applet); gdk_pixbuf_composite (tmp, pixbuf, 0, 0, gdk_pixbuf_get_width (tmp), gdk_pixbuf_get_height (tmp), 0, 0, 1.0, 1.0, GDK_INTERP_BILINEAR, 255); } else { tmp = mobile_helper_get_tech_icon (access_tech, applet); if (tmp) { gdk_pixbuf_composite (tmp, pixbuf, 0, 0, gdk_pixbuf_get_width (tmp), gdk_pixbuf_get_height (tmp), 0, 0, 1.0, 1.0, GDK_INTERP_BILINEAR, 255); } } /* 'pixbuf' will be freed by the caller */ return pixbuf; }