static void wired_private_init (CEPageWired *self) { CEPageWiredPrivate *priv = CE_PAGE_WIRED_GET_PRIVATE (self); GtkBuilder *builder; GtkWidget *align; GtkLabel *label; builder = CE_PAGE (self)->builder; #if GTK_CHECK_VERSION(2,24,0) priv->device_mac = GTK_COMBO_BOX_TEXT (gtk_combo_box_text_new_with_entry ()); gtk_combo_box_set_entry_text_column (GTK_COMBO_BOX (priv->device_mac), 0); #else priv->device_mac = GTK_COMBO_BOX_ENTRY (gtk_combo_box_entry_new_text ()); gtk_combo_box_entry_set_text_column (GTK_COMBO_BOX_ENTRY (priv->device_mac), 0); #endif gtk_widget_set_tooltip_text (GTK_WIDGET (priv->device_mac), _("This option locks this connection to the network device specified by its permanent MAC address entered here. Example: 00:11:22:33:44:55")); align = GTK_WIDGET (gtk_builder_get_object (builder, "wired_device_mac_alignment")); gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (priv->device_mac)); gtk_widget_show_all (GTK_WIDGET (priv->device_mac)); /* Set mnemonic widget for device MAC label */ label = GTK_LABEL (GTK_WIDGET (gtk_builder_get_object (builder, "wired_device_mac_label"))); gtk_label_set_mnemonic_widget (label, GTK_WIDGET (priv->device_mac)); priv->cloned_mac = GTK_ENTRY (GTK_WIDGET (gtk_builder_get_object (builder, "wired_cloned_mac"))); priv->port = GTK_COMBO_BOX (GTK_WIDGET (gtk_builder_get_object (builder, "wired_port"))); priv->speed = GTK_COMBO_BOX (GTK_WIDGET (gtk_builder_get_object (builder, "wired_speed"))); priv->duplex = GTK_TOGGLE_BUTTON (GTK_WIDGET (gtk_builder_get_object (builder, "wired_duplex"))); priv->autonegotiate = GTK_TOGGLE_BUTTON (GTK_WIDGET (gtk_builder_get_object (builder, "wired_autonegotiate"))); priv->mtu = GTK_SPIN_BUTTON (GTK_WIDGET (gtk_builder_get_object (builder, "wired_mtu"))); }
CEPage * ce_page_wired_new (NMConnection *connection, GtkWindow *parent_window, NMClient *client, const char **out_secrets_setting_name, GError **error) { CEPageWired *self; CEPageWiredPrivate *priv; self = CE_PAGE_WIRED (ce_page_new (CE_TYPE_PAGE_WIRED, connection, parent_window, client, UIDIR "/ce-page-wired.ui", "WiredPage", _("Wired"))); if (!self) { g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("Could not load wired user interface.")); return NULL; } wired_private_init (self); priv = CE_PAGE_WIRED_GET_PRIVATE (self); priv->setting = nm_connection_get_setting_wired (connection); if (!priv->setting) { priv->setting = NM_SETTING_WIRED (nm_setting_wired_new ()); nm_connection_add_setting (connection, NM_SETTING (priv->setting)); } g_signal_connect (self, "initialized", G_CALLBACK (finish_setup), NULL); return CE_PAGE (self); }
static gboolean validate (CEPage *page, NMConnection *connection, GError **error) { CEPageWired *self = CE_PAGE_WIRED (page); CEPageWiredPrivate *priv = CE_PAGE_WIRED_GET_PRIVATE (self); gboolean invalid = FALSE; GByteArray *ignore; GtkWidget *entry; entry = gtk_bin_get_child (GTK_BIN (priv->device_mac)); if (entry) { ignore = ce_page_entry_to_mac (GTK_ENTRY (entry), &invalid); if (invalid) return FALSE; if (ignore) g_byte_array_free (ignore, TRUE); } ignore = ce_page_entry_to_mac (priv->cloned_mac, &invalid); if (invalid) return FALSE; if (ignore) g_byte_array_free (ignore, TRUE); ui_to_setting (self); return nm_setting_verify (NM_SETTING (priv->setting), NULL, error); }
static void ui_to_setting (CEPageWired *self) { CEPageWiredPrivate *priv = CE_PAGE_WIRED_GET_PRIVATE (self); const char *port; guint32 speed; GByteArray *mac = NULL; /* Port */ switch (gtk_combo_box_get_active (priv->port)) { case PORT_TP: port = "tp"; break; case PORT_AUI: port = "aui"; break; case PORT_BNC: port = "bnc"; break; case PORT_MII: port = "mii"; break; default: port = NULL; break; } /* Speed */ switch (gtk_combo_box_get_active (priv->speed)) { case SPEED_10: speed = 10; break; case SPEED_100: speed = 100; break; case SPEED_1000: speed = 1000; break; case SPEED_10000: speed = 10000; break; default: speed = 0; break; } mac = ce_page_entry_to_mac (priv->mac, NULL); g_object_set (priv->setting, NM_SETTING_WIRED_MAC_ADDRESS, mac, NM_SETTING_WIRED_PORT, port, NM_SETTING_WIRED_SPEED, speed, NM_SETTING_WIRED_DUPLEX, gtk_toggle_button_get_active (priv->duplex) ? "full" : "half", NM_SETTING_WIRED_AUTO_NEGOTIATE, gtk_toggle_button_get_active (priv->autonegotiate), NM_SETTING_WIRED_MTU, (guint32) gtk_spin_button_get_value_as_int (priv->mtu), NULL); if (mac) g_byte_array_free (mac, TRUE); }
static void finish_setup (CEPageWired *self, gpointer unused, GError *error, gpointer user_data) { CEPage *parent = CE_PAGE (self); CEPageWiredPrivate *priv = CE_PAGE_WIRED_GET_PRIVATE (self); GtkWidget *widget; if (error) return; populate_ui (self); g_signal_connect (priv->port, "changed", G_CALLBACK (stuff_changed), self); g_signal_connect (priv->speed, "changed", G_CALLBACK (stuff_changed), self); g_signal_connect (priv->duplex, "toggled", G_CALLBACK (stuff_changed), self); g_signal_connect (priv->autonegotiate, "toggled", G_CALLBACK (stuff_changed), self); g_signal_connect (priv->mtu, "value-changed", G_CALLBACK (stuff_changed), self); /* Hide widgets we don't yet support */ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wired_port_label")); gtk_widget_hide (widget); widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wired_port")); gtk_widget_hide (widget); widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wired_speed_label")); gtk_widget_hide (widget); widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wired_speed")); gtk_widget_hide (widget); widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wired_duplex")); gtk_widget_hide (widget); widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wired_autonegotiate")); gtk_widget_hide (widget); }
static void wired_private_init (CEPageWired *self) { CEPageWiredPrivate *priv = CE_PAGE_WIRED_GET_PRIVATE (self); GladeXML *xml; xml = CE_PAGE (self)->xml; priv->mac = GTK_ENTRY (glade_xml_get_widget (xml, "wired_mac")); priv->port = GTK_COMBO_BOX (glade_xml_get_widget (xml, "wired_port")); priv->speed = GTK_COMBO_BOX (glade_xml_get_widget (xml, "wired_speed")); priv->duplex = GTK_TOGGLE_BUTTON (glade_xml_get_widget (xml, "wired_duplex")); priv->autonegotiate = GTK_TOGGLE_BUTTON (glade_xml_get_widget (xml, "wired_autonegotiate")); priv->mtu = GTK_SPIN_BUTTON (glade_xml_get_widget (xml, "wired_mtu")); }
static gboolean validate (CEPage *page, NMConnection *connection, GError **error) { CEPageWired *self = CE_PAGE_WIRED (page); CEPageWiredPrivate *priv = CE_PAGE_WIRED_GET_PRIVATE (self); gboolean invalid = FALSE; GByteArray *ignore; ignore = ce_page_entry_to_mac (priv->mac, &invalid); if (invalid) return FALSE; ui_to_setting (self); return nm_setting_verify (NM_SETTING (priv->setting), NULL, error); }
CEPage * ce_page_wired_new (NMConnection *connection, GtkWindow *parent_window, const char **out_secrets_setting_name, GError **error) { CEPageWired *self; CEPageWiredPrivate *priv; CEPage *parent; self = CE_PAGE_WIRED (g_object_new (CE_TYPE_PAGE_WIRED, CE_PAGE_CONNECTION, connection, CE_PAGE_PARENT_WINDOW, parent_window, NULL)); parent = CE_PAGE (self); parent->xml = glade_xml_new (GLADEDIR "/ce-page-wired.glade", "WiredPage", NULL); if (!parent->xml) { g_set_error (error, 0, 0, "%s", _("Could not load wired user interface.")); g_object_unref (self); return NULL; } parent->page = glade_xml_get_widget (parent->xml, "WiredPage"); if (!parent->page) { g_set_error (error, 0, 0, "%s", _("Could not load wired user interface.")); g_object_unref (self); return NULL; } g_object_ref_sink (parent->page); parent->title = g_strdup (_("Wired")); wired_private_init (self); priv = CE_PAGE_WIRED_GET_PRIVATE (self); priv->setting = (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED); if (!priv->setting) { priv->setting = NM_SETTING_WIRED (nm_setting_wired_new ()); nm_connection_add_setting (connection, NM_SETTING (priv->setting)); } g_signal_connect (self, "initialized", G_CALLBACK (finish_setup), NULL); return CE_PAGE (self); }
static void populate_ui (CEPageWired *self) { CEPageWiredPrivate *priv = CE_PAGE_WIRED_GET_PRIVATE (self); NMSettingWired *setting = priv->setting; const char *port; const char *duplex; int port_idx = PORT_DEFAULT; int speed_idx; int mtu_def; char **mac_list, **iter; const GByteArray *s_mac; char *s_mac_str; char *active_mac = NULL; GtkWidget *entry; /* Port */ port = nm_setting_wired_get_port (setting); if (port) { if (!strcmp (port, "tp")) port_idx = PORT_TP; else if (!strcmp (port, "aui")) port_idx = PORT_AUI; else if (!strcmp (port, "bnc")) port_idx = PORT_BNC; else if (!strcmp (port, "mii")) port_idx = PORT_MII; } gtk_combo_box_set_active (priv->port, port_idx); /* Speed */ switch (nm_setting_wired_get_speed (setting)) { case 10: speed_idx = SPEED_10; break; case 100: speed_idx = SPEED_100; break; case 1000: speed_idx = SPEED_1000; break; case 10000: speed_idx = SPEED_10000; break; default: speed_idx = SPEED_DEFAULT; break; } gtk_combo_box_set_active (priv->speed, speed_idx); /* Duplex */ duplex = nm_setting_wired_get_duplex (setting); if (duplex && !strcmp (duplex, "half")) gtk_toggle_button_set_active (priv->duplex, FALSE); else gtk_toggle_button_set_active (priv->duplex, TRUE); /* Autonegotiate */ gtk_toggle_button_set_active (priv->autonegotiate, nm_setting_wired_get_auto_negotiate (setting)); /* Device MAC address */ mac_list = ce_page_get_mac_list (CE_PAGE (self)); s_mac = nm_setting_wired_get_mac_address (setting); s_mac_str = s_mac ? g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X", s_mac->data[0], s_mac->data[1], s_mac->data[2], s_mac->data[3], s_mac->data[4], s_mac->data[5]): NULL; for (iter = mac_list; iter && *iter; iter++) { #if GTK_CHECK_VERSION (2,24,0) gtk_combo_box_text_append_text (priv->device_mac, *iter); #else gtk_combo_box_append_text (GTK_COMBO_BOX (priv->device_mac), *iter); #endif if (s_mac_str && g_ascii_strncasecmp (*iter, s_mac_str, 17) == 0) active_mac = *iter; } if (s_mac_str) { if (!active_mac) { #if GTK_CHECK_VERSION (2,24,0) gtk_combo_box_text_prepend_text (priv->device_mac, s_mac_str); #else gtk_combo_box_prepend_text (GTK_COMBO_BOX (priv->device_mac), s_mac_str); #endif } entry = gtk_bin_get_child (GTK_BIN (priv->device_mac)); if (entry) gtk_entry_set_text (GTK_ENTRY (entry), active_mac ? active_mac : s_mac_str); } g_strfreev (mac_list); g_signal_connect (priv->device_mac, "changed", G_CALLBACK (stuff_changed), self); /* Cloned MAC address */ ce_page_mac_to_entry (nm_setting_wired_get_cloned_mac_address (setting), priv->cloned_mac); g_signal_connect (priv->cloned_mac, "changed", G_CALLBACK (stuff_changed), self); /* MTU */ mtu_def = ce_get_property_default (NM_SETTING (setting), NM_SETTING_WIRED_MTU); g_signal_connect (priv->mtu, "output", G_CALLBACK (ce_spin_output_with_default), GINT_TO_POINTER (mtu_def)); gtk_spin_button_set_value (priv->mtu, (gdouble) nm_setting_wired_get_mtu (setting)); }
static void populate_ui (CEPageWired *self) { CEPageWiredPrivate *priv = CE_PAGE_WIRED_GET_PRIVATE (self); NMSettingWired *setting = priv->setting; const char *port; const char *duplex; int port_idx = PORT_DEFAULT; int speed_idx; int mtu_def; /* Port */ port = nm_setting_wired_get_port (setting); if (port) { if (!strcmp (port, "tp")) port_idx = PORT_TP; else if (!strcmp (port, "aui")) port_idx = PORT_AUI; else if (!strcmp (port, "bnc")) port_idx = PORT_BNC; else if (!strcmp (port, "mii")) port_idx = PORT_MII; } gtk_combo_box_set_active (priv->port, port_idx); /* Speed */ switch (nm_setting_wired_get_speed (setting)) { case 10: speed_idx = SPEED_10; break; case 100: speed_idx = SPEED_100; break; case 1000: speed_idx = SPEED_1000; break; case 10000: speed_idx = SPEED_10000; break; default: speed_idx = SPEED_DEFAULT; break; } gtk_combo_box_set_active (priv->speed, speed_idx); /* Duplex */ duplex = nm_setting_wired_get_duplex (setting); if (duplex && !strcmp (duplex, "half")) gtk_toggle_button_set_active (priv->duplex, FALSE); else gtk_toggle_button_set_active (priv->duplex, TRUE); /* Autonegotiate */ gtk_toggle_button_set_active (priv->autonegotiate, nm_setting_wired_get_auto_negotiate (setting)); /* MAC address */ ce_page_mac_to_entry (nm_setting_wired_get_mac_address (setting), priv->mac); g_signal_connect (priv->mac, "changed", G_CALLBACK (stuff_changed), self); /* MTU */ mtu_def = ce_get_property_default (NM_SETTING (setting), NM_SETTING_WIRED_MTU); g_signal_connect (priv->mtu, "output", G_CALLBACK (ce_spin_output_with_default), GINT_TO_POINTER (mtu_def)); gtk_spin_button_set_value (priv->mtu, (gdouble) nm_setting_wired_get_mtu (setting)); }