|
Packit Service |
639700 |
// SPDX-License-Identifier: GPL-2.0+
|
|
Packit |
fabffb |
/* ap-menu-item.c - Class to represent a Wifi access point
|
|
Packit |
fabffb |
*
|
|
Packit |
fabffb |
* Jonathan Blandford <jrb@redhat.com>
|
|
Packit |
fabffb |
* Dan Williams <dcbw@redhat.com>
|
|
Packit |
fabffb |
*
|
|
Packit |
fabffb |
* Copyright 2005 - 2014 Red Hat, Inc.
|
|
Packit |
fabffb |
*/
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
#include "nm-default.h"
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
#include <stdio.h>
|
|
Packit |
fabffb |
#include <string.h>
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
#include <NetworkManager.h>
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
#include "ap-menu-item.h"
|
|
Packit |
fabffb |
#include "nm-access-point.h"
|
|
Packit |
fabffb |
#include "mobile-helpers.h"
|
|
Packit |
fabffb |
|
|
Packit Service |
639700 |
/* Only to get the NMU_SEC_SAE compat constant. */
|
|
Packit Service |
639700 |
#include "wireless-security.h"
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
G_DEFINE_TYPE (NMNetworkMenuItem, nm_network_menu_item, GTK_TYPE_MENU_ITEM);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
#define NM_NETWORK_MENU_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_NETWORK_MENU_ITEM, NMNetworkMenuItemPrivate))
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
typedef struct {
|
|
Packit |
fabffb |
GtkWidget * ssid;
|
|
Packit |
fabffb |
GtkWidget * strength;
|
|
Packit |
fabffb |
GtkWidget * hbox;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
char * ssid_string;
|
|
Packit |
fabffb |
guint32 int_strength;
|
|
Packit |
fabffb |
gchar * hash;
|
|
Packit |
fabffb |
GSList * dupes;
|
|
Packit |
fabffb |
gboolean has_connections;
|
|
Packit |
fabffb |
gboolean is_adhoc;
|
|
Packit |
fabffb |
gboolean is_encrypted;
|
|
Packit |
fabffb |
} NMNetworkMenuItemPrivate;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/******************************************************************/
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
const char *
|
|
Packit |
fabffb |
nm_network_menu_item_get_ssid (NMNetworkMenuItem *item)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
g_return_val_if_fail (NM_IS_NETWORK_MENU_ITEM (item), NULL);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
return NM_NETWORK_MENU_ITEM_GET_PRIVATE (item)->ssid_string;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
guint32
|
|
Packit |
fabffb |
nm_network_menu_item_get_strength (NMNetworkMenuItem *item)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
g_return_val_if_fail (NM_IS_NETWORK_MENU_ITEM (item), 0);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
return NM_NETWORK_MENU_ITEM_GET_PRIVATE (item)->int_strength;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
static void
|
|
Packit |
fabffb |
update_atk_desc (NMNetworkMenuItem *item)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
NMNetworkMenuItemPrivate *priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item);
|
|
Packit |
fabffb |
GString *desc = NULL;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
desc = g_string_new ("");
|
|
Packit |
fabffb |
g_string_append_printf (desc, "%s: ", priv->ssid_string);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
if (priv->is_adhoc)
|
|
Packit |
fabffb |
g_string_append (desc, _("ad-hoc"));
|
|
Packit |
fabffb |
else {
|
|
Packit |
fabffb |
g_string_append_printf (desc, "%d%%", priv->int_strength);
|
|
Packit |
fabffb |
if (priv->is_encrypted) {
|
|
Packit |
fabffb |
g_string_append (desc, ", ");
|
|
Packit |
fabffb |
g_string_append (desc, _("secure."));
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
atk_object_set_name (gtk_widget_get_accessible (GTK_WIDGET (item)), desc->str);
|
|
Packit |
fabffb |
g_string_free (desc, TRUE);
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
static void
|
|
Packit |
fabffb |
update_icon (NMNetworkMenuItem *item, NMApplet *applet)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
NMNetworkMenuItemPrivate *priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item);
|
|
Packit |
fabffb |
gs_unref_object GdkPixbuf *icon_free = NULL, *icon_free2 = NULL;
|
|
Packit |
fabffb |
GdkPixbuf *icon;
|
|
Packit Service |
639700 |
int icon_size, scale;
|
|
Packit |
fabffb |
const char *icon_name = NULL;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
if (priv->is_adhoc)
|
|
Packit |
fabffb |
icon_name = "nm-adhoc";
|
|
Packit |
fabffb |
else
|
|
Packit |
fabffb |
icon_name = mobile_helper_get_quality_icon_name (priv->int_strength);
|
|
Packit |
fabffb |
|
|
Packit Service |
639700 |
scale = gtk_widget_get_scale_factor (GTK_WIDGET (item));
|
|
Packit Service |
639700 |
icon_size = 24;
|
|
Packit Service |
639700 |
if (INDICATOR_ENABLED (applet)) {
|
|
Packit Service |
639700 |
/* Since app_indicator relies on GdkPixbuf, we should not scale it */
|
|
Packit Service |
639700 |
} else
|
|
Packit Service |
639700 |
icon_size *= scale;
|
|
Packit Service |
639700 |
|
|
Packit |
fabffb |
icon = nma_icon_check_and_load (icon_name, applet);
|
|
Packit |
fabffb |
if (icon) {
|
|
Packit |
fabffb |
if (priv->is_encrypted) {
|
|
Packit |
fabffb |
GdkPixbuf *encrypted = nma_icon_check_and_load ("nm-secure-lock", applet);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
if (encrypted) {
|
|
Packit |
fabffb |
icon = icon_free = gdk_pixbuf_copy (icon);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
gdk_pixbuf_composite (encrypted, icon, 0, 0,
|
|
Packit |
fabffb |
gdk_pixbuf_get_width (encrypted),
|
|
Packit |
fabffb |
gdk_pixbuf_get_height (encrypted),
|
|
Packit |
fabffb |
0, 0, 1.0, 1.0,
|
|
Packit |
fabffb |
GDK_INTERP_NEAREST, 255);
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* Scale to menu size if larger so the menu doesn't look awful */
|
|
Packit Service |
639700 |
if (gdk_pixbuf_get_height (icon) > icon_size || gdk_pixbuf_get_width (icon) > icon_size)
|
|
Packit Service |
639700 |
icon = icon_free2 = gdk_pixbuf_scale_simple (icon, icon_size, icon_size, GDK_INTERP_BILINEAR);
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit Service |
639700 |
if (INDICATOR_ENABLED (applet)) {
|
|
Packit Service |
639700 |
/* app_indicator only uses GdkPixbuf */
|
|
Packit Service |
639700 |
gtk_image_set_from_pixbuf (GTK_IMAGE (priv->strength), icon);
|
|
Packit Service |
639700 |
} else {
|
|
Packit Service |
639700 |
cairo_surface_t *surface;
|
|
Packit Service |
639700 |
|
|
Packit Service |
639700 |
surface = gdk_cairo_surface_create_from_pixbuf (icon, scale, NULL);
|
|
Packit Service |
639700 |
gtk_image_set_from_surface (GTK_IMAGE (priv->strength), surface);
|
|
Packit Service |
639700 |
cairo_surface_destroy (surface);
|
|
Packit Service |
639700 |
}
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
void
|
|
Packit |
fabffb |
nm_network_menu_item_set_strength (NMNetworkMenuItem *item,
|
|
Packit |
fabffb |
guint8 strength,
|
|
Packit |
fabffb |
NMApplet *applet)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
NMNetworkMenuItemPrivate *priv;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
g_return_if_fail (NM_IS_NETWORK_MENU_ITEM (item));
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
strength = MIN (strength, 100);
|
|
Packit |
fabffb |
if (strength > priv->int_strength) {
|
|
Packit |
fabffb |
priv->int_strength = strength;
|
|
Packit |
fabffb |
update_icon (item, applet);
|
|
Packit |
fabffb |
update_atk_desc (item);
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
const char *
|
|
Packit |
fabffb |
nm_network_menu_item_get_hash (NMNetworkMenuItem *item)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
g_return_val_if_fail (NM_IS_NETWORK_MENU_ITEM (item), NULL);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
return NM_NETWORK_MENU_ITEM_GET_PRIVATE (item)->hash;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
gboolean
|
|
Packit |
fabffb |
nm_network_menu_item_find_dupe (NMNetworkMenuItem *item, NMAccessPoint *ap)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
NMNetworkMenuItemPrivate *priv;
|
|
Packit |
fabffb |
const char *path;
|
|
Packit |
fabffb |
GSList *iter;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
g_return_val_if_fail (NM_IS_NETWORK_MENU_ITEM (item), FALSE);
|
|
Packit |
fabffb |
g_return_val_if_fail (NM_IS_ACCESS_POINT (ap), FALSE);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
path = nm_object_get_path (NM_OBJECT (ap));
|
|
Packit |
fabffb |
for (iter = priv->dupes; iter; iter = g_slist_next (iter)) {
|
|
Packit |
fabffb |
if (!strcmp (path, iter->data))
|
|
Packit |
fabffb |
return TRUE;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
return FALSE;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
static void
|
|
Packit |
fabffb |
update_label (NMNetworkMenuItem *item, gboolean use_bold)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
NMNetworkMenuItemPrivate *priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
if (use_bold) {
|
|
Packit |
fabffb |
char *markup = g_markup_printf_escaped ("%s", priv->ssid_string);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
gtk_label_set_markup (GTK_LABEL (priv->ssid), markup);
|
|
Packit |
fabffb |
g_free (markup);
|
|
Packit Service |
639700 |
} else {
|
|
Packit Service |
639700 |
gtk_label_set_use_markup (GTK_LABEL (priv->ssid), FALSE);
|
|
Packit |
fabffb |
gtk_label_set_text (GTK_LABEL (priv->ssid), priv->ssid_string);
|
|
Packit Service |
639700 |
}
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
void
|
|
Packit |
fabffb |
nm_network_menu_item_set_active (NMNetworkMenuItem *item, gboolean active)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
g_return_if_fail (NM_IS_NETWORK_MENU_ITEM (item));
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
update_label (item, active);
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
void
|
|
Packit |
fabffb |
nm_network_menu_item_add_dupe (NMNetworkMenuItem *item, NMAccessPoint *ap)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
NMNetworkMenuItemPrivate *priv;
|
|
Packit |
fabffb |
const char *path;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
g_return_if_fail (NM_IS_NETWORK_MENU_ITEM (item));
|
|
Packit |
fabffb |
g_return_if_fail (NM_IS_ACCESS_POINT (ap));
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item);
|
|
Packit |
fabffb |
path = nm_object_get_path (NM_OBJECT (ap));
|
|
Packit |
fabffb |
priv->dupes = g_slist_prepend (priv->dupes, g_strdup (path));
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
gboolean
|
|
Packit |
fabffb |
nm_network_menu_item_get_has_connections (NMNetworkMenuItem *item)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
g_return_val_if_fail (NM_IS_NETWORK_MENU_ITEM (item), FALSE);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
return NM_NETWORK_MENU_ITEM_GET_PRIVATE (item)->has_connections;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
gboolean
|
|
Packit |
fabffb |
nm_network_menu_item_get_is_adhoc (NMNetworkMenuItem *item)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
g_return_val_if_fail (NM_IS_NETWORK_MENU_ITEM (item), FALSE);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
return NM_NETWORK_MENU_ITEM_GET_PRIVATE (item)->is_adhoc;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
gboolean
|
|
Packit |
fabffb |
nm_network_menu_item_get_is_encrypted (NMNetworkMenuItem *item)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
g_return_val_if_fail (NM_IS_NETWORK_MENU_ITEM (item), FALSE);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
return NM_NETWORK_MENU_ITEM_GET_PRIVATE (item)->is_encrypted;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/******************************************************************/
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
GtkWidget *
|
|
Packit |
fabffb |
nm_network_menu_item_new (NMAccessPoint *ap,
|
|
Packit |
fabffb |
guint32 dev_caps,
|
|
Packit |
fabffb |
const char *hash,
|
|
Packit |
fabffb |
gboolean has_connections,
|
|
Packit |
fabffb |
NMApplet *applet)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
NMNetworkMenuItem *item;
|
|
Packit |
fabffb |
NMNetworkMenuItemPrivate *priv;
|
|
Packit |
fabffb |
guint32 ap_flags, ap_wpa, ap_rsn;
|
|
Packit |
fabffb |
GBytes *ssid;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
item = g_object_new (NM_TYPE_NETWORK_MENU_ITEM, NULL);
|
|
Packit |
fabffb |
g_assert (item);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
nm_network_menu_item_add_dupe (item, ap);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
ssid = nm_access_point_get_ssid (ap);
|
|
Packit |
fabffb |
if (ssid) {
|
|
Packit |
fabffb |
priv->ssid_string = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid, NULL),
|
|
Packit |
fabffb |
g_bytes_get_size (ssid));
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
if (!priv->ssid_string)
|
|
Packit |
fabffb |
priv->ssid_string = g_strdup ("<unknown>");
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
priv->has_connections = has_connections;
|
|
Packit |
fabffb |
priv->hash = g_strdup (hash);
|
|
Packit |
fabffb |
priv->int_strength = nm_access_point_get_strength (ap);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
if (nm_access_point_get_mode (ap) == NM_802_11_MODE_ADHOC)
|
|
Packit |
fabffb |
priv->is_adhoc = TRUE;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
ap_flags = nm_access_point_get_flags (ap);
|
|
Packit |
fabffb |
ap_wpa = nm_access_point_get_wpa_flags (ap);
|
|
Packit |
fabffb |
ap_rsn = nm_access_point_get_rsn_flags (ap);
|
|
Packit |
fabffb |
if ((ap_flags & NM_802_11_AP_FLAGS_PRIVACY) || ap_wpa || ap_rsn)
|
|
Packit |
fabffb |
priv->is_encrypted = TRUE;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* Don't enable the menu item the device can't even connect to the AP */
|
|
Packit |
fabffb |
if ( !nm_utils_security_valid (NMU_SEC_NONE, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn)
|
|
Packit Service |
639700 |
&& !nm_utils_security_valid (NMU_SEC_STATIC_WEP, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn)
|
|
Packit |
fabffb |
&& !nm_utils_security_valid (NMU_SEC_LEAP, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn)
|
|
Packit |
fabffb |
&& !nm_utils_security_valid (NMU_SEC_DYNAMIC_WEP, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn)
|
|
Packit |
fabffb |
&& !nm_utils_security_valid (NMU_SEC_WPA_PSK, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn)
|
|
Packit |
fabffb |
&& !nm_utils_security_valid (NMU_SEC_WPA2_PSK, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn)
|
|
Packit |
fabffb |
&& !nm_utils_security_valid (NMU_SEC_WPA_ENTERPRISE, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn)
|
|
Packit Service |
639700 |
&& !nm_utils_security_valid (NMU_SEC_WPA2_ENTERPRISE, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn)
|
|
Packit Service |
639700 |
#if NM_CHECK_VERSION(1,24,0)
|
|
Packit Service |
639700 |
&& !nm_utils_security_valid (NMU_SEC_OWE, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn)
|
|
Packit Service |
639700 |
#endif
|
|
Packit Service |
639700 |
&& !nm_utils_security_valid (NMU_SEC_SAE, dev_caps, TRUE, priv->is_adhoc, ap_flags, ap_wpa, ap_rsn)) {
|
|
Packit |
fabffb |
gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE);
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
update_label (item, FALSE);
|
|
Packit |
fabffb |
update_icon (item, applet);
|
|
Packit |
fabffb |
update_atk_desc (item);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
return GTK_WIDGET (item);
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
static void
|
|
Packit |
fabffb |
nm_network_menu_item_init (NMNetworkMenuItem *item)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
NMNetworkMenuItemPrivate *priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (item);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
priv->hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
|
|
Packit |
fabffb |
priv->ssid = gtk_label_new (NULL);
|
|
Packit |
fabffb |
gtk_misc_set_alignment (GTK_MISC (priv->ssid), 0.0, 0.5);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
gtk_container_add (GTK_CONTAINER (item), priv->hbox);
|
|
Packit |
fabffb |
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->ssid, TRUE, TRUE, 0);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
priv->strength = gtk_image_new ();
|
|
Packit |
fabffb |
gtk_box_pack_end (GTK_BOX (priv->hbox), priv->strength, FALSE, TRUE, 0);
|
|
Packit |
fabffb |
gtk_widget_show (priv->strength);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
gtk_widget_show (priv->ssid);
|
|
Packit |
fabffb |
gtk_widget_show (priv->hbox);
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
static void
|
|
Packit |
fabffb |
finalize (GObject *object)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
NMNetworkMenuItemPrivate *priv = NM_NETWORK_MENU_ITEM_GET_PRIVATE (object);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
g_free (priv->hash);
|
|
Packit |
fabffb |
g_free (priv->ssid_string);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
g_slist_free_full (priv->dupes, g_free);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
G_OBJECT_CLASS (nm_network_menu_item_parent_class)->finalize (object);
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
static void
|
|
Packit |
fabffb |
nm_network_menu_item_class_init (NMNetworkMenuItemClass * klass)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
g_type_class_add_private (klass, sizeof (NMNetworkMenuItemPrivate));
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* virtual methods */
|
|
Packit |
fabffb |
object_class->finalize = finalize;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|