summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2019-11-04 13:45:21 +0100
committerLubomir Rintel <lkundrak@v3.sk>2019-11-04 13:45:21 +0100
commit3899bdcc238915cc548827d7a31c87d24440796c (patch)
treed101b3eee6f6999ec3ca6da797eb8149dbac86fa
parentbd9a1f24aee4b20193bcb9b89d7acb6fa391839f (diff)
parent4ab5039342249e04554c26da7d7ae935b5eff8f8 (diff)
downloadnetwork-manager-applet-3899bdcc238915cc548827d7a31c87d24440796c.tar.gz
merge: branch 'lr/libnmicide'
https://gitlab.gnome.org/GNOME/network-manager-applet/merge_requests/70
-rw-r--r--.gitlab-ci.yml159
-rw-r--r--Makefile.am806
-rw-r--r--NEWS8
-rwxr-xr-xautogen.sh1
-rw-r--r--configure.ac186
-rw-r--r--m4/introspection.m493
-rw-r--r--meson.build216
-rw-r--r--meson_options.txt7
-rw-r--r--po/POTFILES.in24
-rwxr-xr-xsrc/libnm-gtk/check-exports.sh130
-rw-r--r--src/libnm-gtk/examples/mobile-providers.js23
-rw-r--r--src/libnm-gtk/init.c23
-rw-r--r--src/libnm-gtk/libnm-gtk.pc.in12
-rw-r--r--src/libnm-gtk/libnm-gtk.ver45
-rw-r--r--src/libnm-gtk/meson.build147
-rw-r--r--src/libnm-gtk/nm-cert-chooser.h203
-rw-r--r--src/libnm-gtk/nm-mobile-providers.c1553
-rw-r--r--src/libnm-gtk/nm-mobile-providers.h125
-rw-r--r--src/libnm-gtk/nm-mobile-wizard.c1657
-rw-r--r--src/libnm-gtk/nm-mobile-wizard.h44
-rw-r--r--src/libnm-gtk/nm-ui-utils.c967
-rw-r--r--src/libnm-gtk/nm-ui-utils.h39
-rw-r--r--src/libnm-gtk/nm-vpn-password-dialog.c522
-rw-r--r--src/libnm-gtk/nm-vpn-password-dialog.h85
-rw-r--r--src/libnm-gtk/nm-wifi-dialog.c1429
-rw-r--r--src/libnm-gtk/nm-wifi-dialog.h70
-rw-r--r--src/libnm-gtk/nm-wireless-dialog.c52
-rw-r--r--src/libnm-gtk/nm-wireless-dialog.h62
-rw-r--r--src/libnm-gtk/nm.gresource.xml6
-rw-r--r--src/libnm-gtk/tests/iso3166-test.xml69
-rw-r--r--src/libnm-gtk/tests/serviceproviders-test.xml52
-rw-r--r--src/libnm-gtk/tests/test-mobile-providers.c517
-rw-r--r--src/libnm-gtk/wifi.ui222
-rw-r--r--src/libnma/init.c23
-rw-r--r--src/libnma/libnma-gtk4.pc.in11
-rw-r--r--src/libnma/libnma.pc.in11
-rw-r--r--src/libnma/libnma.ver114
-rw-r--r--src/libnma/meson.build186
-rw-r--r--src/libnma/nma-bar-code-widget.c462
-rw-r--r--src/libnma/nma-bar-code-widget.h43
-rw-r--r--src/libnma/nma-bar-code-widget.ui45
-rw-r--r--src/libnma/nma-bar-code.c222
-rw-r--r--src/libnma/nma-bar-code.h54
-rw-r--r--src/libnma/nma-cert-chooser-button.c469
-rw-r--r--src/libnma/nma-cert-chooser-button.h59
-rw-r--r--src/libnma/nma-cert-chooser-private.h143
-rw-r--r--src/libnma/nma-cert-chooser.c788
-rw-r--r--src/libnma/nma-cert-chooser.h151
-rw-r--r--src/libnma/nma-file-cert-chooser.c399
-rw-r--r--src/libnma/nma-mobile-providers.c1600
-rw-r--r--src/libnma/nma-mobile-providers.h131
-rw-r--r--src/libnma/nma-mobile-wizard.c1560
-rw-r--r--src/libnma/nma-mobile-wizard.h65
-rw-r--r--src/libnma/nma-mobile-wizard.ui604
-rw-r--r--src/libnma/nma-pkcs11-cert-chooser-dialog.c643
-rw-r--r--src/libnma/nma-pkcs11-cert-chooser-dialog.h49
-rw-r--r--src/libnma/nma-pkcs11-cert-chooser-dialog.ui153
-rw-r--r--src/libnma/nma-pkcs11-cert-chooser.c559
-rw-r--r--src/libnma/nma-pkcs11-token-login-dialog.c236
-rw-r--r--src/libnma/nma-pkcs11-token-login-dialog.h43
-rw-r--r--src/libnma/nma-pkcs11-token-login-dialog.ui111
-rw-r--r--src/libnma/nma-private.h21
-rw-r--r--src/libnma/nma-ui-utils.c432
-rw-r--r--src/libnma/nma-ui-utils.h26
-rw-r--r--src/libnma/nma-version.h.in119
-rw-r--r--src/libnma/nma-vpn-password-dialog.c351
-rw-r--r--src/libnma/nma-vpn-password-dialog.h85
-rw-r--r--src/libnma/nma-vpn-password-dialog.ui222
-rw-r--r--src/libnma/nma-wifi-dialog.c1559
-rw-r--r--src/libnma/nma-wifi-dialog.h69
-rw-r--r--src/libnma/nma.gresource.xml11
-rw-r--r--src/libnma/qrcodegen.c1009
-rw-r--r--src/libnma/qrcodegen.h311
-rw-r--r--src/libnma/tests/bar-code.c178
-rw-r--r--src/libnma/tests/cert-chooser.c104
-rw-r--r--src/libnma/tests/meson.build31
-rw-r--r--src/libnma/tests/mobile-wizard.c33
-rw-r--r--src/libnma/tests/run-vpn.c87
-rw-r--r--src/libnma/tests/vpn-password-dialog.c36
-rw-r--r--src/libnma/tests/wifi-dialog-secrets.c100
-rw-r--r--src/libnma/tests/wifi-dialog.c60
-rw-r--r--src/libnma/wifi.ui215
-rw-r--r--src/meson.build20
-rw-r--r--src/mobile-helpers.c4
-rw-r--r--src/utils/meson.build24
-rw-r--r--src/wireless-security/eap-method-fast.c5
-rw-r--r--src/wireless-security/eap-method-leap.c37
-rw-r--r--src/wireless-security/eap-method-peap.c9
-rw-r--r--src/wireless-security/eap-method-simple.c44
-rw-r--r--src/wireless-security/eap-method-tls.c13
-rw-r--r--src/wireless-security/eap-method-ttls.c9
-rw-r--r--src/wireless-security/helpers.c4
-rw-r--r--src/wireless-security/meson.build40
-rw-r--r--src/wireless-security/ws-leap.c11
-rw-r--r--src/wireless-security/ws-sae.c7
-rw-r--r--src/wireless-security/ws-wep-key.c17
-rw-r--r--src/wireless-security/ws-wpa-psk.c7
97 files changed, 150 insertions, 23648 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8f541658..ecbda96e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -10,6 +10,7 @@
file
findutils
gcc
+ libtool
desktop-file-utils
gettext-devel
glib2-devel
@@ -20,6 +21,9 @@
NetworkManager-libnm-devel
pkgconfig
/usr/bin/autopoint
+ fedora-repos-rawhide
+ - dnf -y install --nogpgcheck --enablerepo=rawhide
+ libnma-devel
.fedora_full: &fedora_full
before_script:
@@ -27,6 +31,7 @@
file
findutils
gcc
+ libtool
desktop-file-utils
gettext-devel
glib2-devel
@@ -37,18 +42,17 @@
NetworkManager-libnm-devel
pkgconfig
/usr/bin/autopoint
- gcr-devel
- gobject-introspection-devel redhat-rpm-config
- gtk-doc
- iso-codes-devel
- mobile-broadband-provider-info-devel
+ redhat-rpm-config
jansson-devel
ModemManager-glib-devel
libselinux-devel
+ fedora-repos-rawhide
+ - dnf -y install --nogpgcheck --enablerepo=rawhide
+ libnma-devel
.dist: &dist
dependencies:
- - fedora28_dist
+ - fedora30_dist
variables:
GIT_STRATEGY: none
@@ -59,16 +63,10 @@
- tar xJf network-manager-applet-*.tar.xz
- dnf -y install meson
- meson
- -Dlibnm_gtk=false
-Dwwan=false
-Dselinux=false
-Dteam=false
- -Dgcr=false
- -Diso_codes=false
- -Dmobile_broadband_provider_info=false
-Dld_gc=false
- -Dgtk_doc=false
- -Dintrospection=false
-Dappindicator=no
-Dmore_asserts=no
network-manager-applet-*/ build
@@ -84,16 +82,10 @@
- dnf -y install meson
- tar xJf network-manager-applet-*.tar.xz
- meson
- -Dlibnm_gtk=false
-Dwwan=true
-Dselinux=true
-Dteam=true
- -Dgcr=true
- -Diso_codes=true
- -Dmobile_broadband_provider_info=true
-Dld_gc=true
- -Dgtk_doc=true
- -Dintrospection=true
-Dappindicator=no
-Dmore_asserts=yes
network-manager-applet-*/ build
@@ -113,17 +105,12 @@
--disable-silent-rules
--with-more-asserts=no
--disable-nls
- --disable-iso-codes
- --disable-mobile-broadband-provider-info
- --disable-gtk-doc
- --disable-introspection
--disable-schemas-compile
--disable-more-warnings
--without-appindicator
--without-wwan
--without-selinux
--without-team
- --without-gcr
- make -j$(nproc)
- make -j$(nproc) check
- make -j$(nproc) install
@@ -140,30 +127,23 @@
--disable-silent-rules
--with-more-asserts=yes
--enable-nls
- --enable-iso-codes
- --enable-mobile-broadband-provider-info
- --enable-gtk-doc
- --enable-introspection
--enable-schemas-compile
--enable-more-warnings
--with-wwan
--with-selinux
--with-team
- --with-gcr
- make -j$(nproc)
- make -j$(nproc) check
- make -j$(nproc) install
- make -j$(nproc) uninstall
-fedora28_dist:
+fedora30_dist:
<<: *fedora_full
- image: fedora:28
+ image: fedora:30
stage: build
script:
- dnf -y install
autoconf automake make
- NetworkManager-devel
- NetworkManager-glib-devel
- sh autogen.sh
- make -j$(nproc) distcheck
artifacts:
@@ -190,76 +170,45 @@ fedora_autotools_full:
image: fedora:latest
stage: test
-centos7:
- <<: *dist
- before_script:
- - yum -y install
- file
- findutils
- gcc
- desktop-file-utils
- gettext-devel
- glib2-devel
- gtk3-devel
- intltool
- libgudev1-devel
- libnotify-devel
- libsecret-devel
- NetworkManager-libnm-devel
- pkgconfig
- /usr/bin/autopoint
- gcr-devel
- gobject-introspection-devel redhat-rpm-config
- gtk-doc
- iso-codes-devel
- mobile-broadband-provider-info-devel
- jansson-devel
- ModemManager-glib-devel
- libselinux-devel
- make
- script:
- - tar xJf network-manager-applet-*.tar.xz
- - cd network-manager-applet-*/
- - ./configure
- --disable-silent-rules
- --with-more-asserts=yes
- --enable-nls
- --enable-iso-codes
- --enable-mobile-broadband-provider-info
- --enable-gtk-doc
- --enable-introspection
- --enable-schemas-compile
- --enable-more-warnings
- --with-wwan
- --with-selinux
- --with-team
- --with-gcr
- - make -j$(nproc)
- - make -j$(nproc) check
- - make -j$(nproc) install
- - make -j$(nproc) uninstall
- image: centos:7
- stage: test
-
-# https://network-manager-applet.pages.gitlab.gnome.org/libnma/
-pages:
- <<: *fedora_full
- <<: *dist
- image: fedora:latest
- stage: deploy
- script:
- - dnf -y install make
- - tar xJf network-manager-applet-*.tar.xz
- - cd network-manager-applet-*/
- - ./configure
- --disable-silent-rules
- --enable-gtk-doc
- - make -j$(nproc)
- - cd ..
- - mkdir -p public
- - mv network-manager-applet-*/html public/libnma
- artifacts:
- paths:
- - public
- only:
- - master
+#centos7:
+# <<: *dist
+# before_script:
+# - yum -y install
+# file
+# findutils
+# gcc
+# libtool
+# desktop-file-utils
+# gettext-devel
+# glib2-devel
+# gtk3-devel
+# intltool
+# libgudev1-devel
+# libnotify-devel
+# libsecret-devel
+# NetworkManager-libnm-devel
+# pkgconfig
+# /usr/bin/autopoint
+# redhat-rpm-config
+# jansson-devel
+# ModemManager-glib-devel
+# libselinux-devel
+# make
+# script:
+# - tar xJf network-manager-applet-*.tar.xz
+# - cd network-manager-applet-*/
+# - ./configure
+# --disable-silent-rules
+# --with-more-asserts=yes
+# --enable-nls
+# --enable-schemas-compile
+# --enable-more-warnings
+# --with-wwan
+# --with-selinux
+# --with-team
+# - make -j$(nproc)
+# - make -j$(nproc) check
+# - make -j$(nproc) install
+# - make -j$(nproc) uninstall
+# image: centos:7
+# stage: test
diff --git a/Makefile.am b/Makefile.am
index b863a683..8da267b7 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,4 @@
include $(GLIB_MAKEFILE)
--include $(INTROSPECTION_MAKEFILE)
-include $(top_srcdir)/gtk-doc.make
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
@@ -26,38 +24,25 @@ check_local =
TESTS =
+EXTRA_DIST =
+
+CLEANFILES =
+
DISTCLEANFILES =
DISTCHECK_CONFIGURE_FLAGS = \
--disable-dependency-tracking \
- --enable-gtk-doc \
- --enable-introspection \
--enable-more-warnings=error \
--with-wwan \
- --with-team \
- --with-gcr
+ --with-team
-if WITH_LIBNM_GTK
-DISTCHECK_CONFIGURE_FLAGS += --with-libnm-gtk
-endif
-
man_MANS =
pkgconfig_DATA =
pkgconfigdir = $(libdir)/pkgconfig
-girdir = $(datadir)/gir-1.0
-gir_DATA = $(INTROSPECTION_GIRS)
-BUILT_SOURCES += $(gir_DATA)
-
-typelibdir = $(libdir)/girepository-1.0
-typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
-BUILT_SOURCES += $(typelib_DATA)
-
-INTROSPECTION_GIRS =
-
SUBDIRS = \
. \
po
@@ -194,48 +179,6 @@ src_utils_libutils_libnm_la_LIBADD = \
$(GTK3_LIBS) \
$(LIBNM_LIBS)
-if WITH_LIBNM_GTK
-
-noinst_LTLIBRARIES += src/utils/libutils-libnm-glib.la
-
-src_utils_libutils_libnm_glib_la_CPPFLAGS = \
- $(dflt_cppflags) \
- -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB_LEGACY \
- "-I$(srcdir)/shared" \
- $(GTK3_CFLAGS) \
- $(LIBNM_GLIB_CFLAGS)
-
-src_utils_libutils_libnm_glib_la_SOURCES = \
- $(shared_files) \
- src/utils/utils.c \
- src/utils/utils.h
-
-src_utils_libutils_libnm_glib_la_LIBADD = \
- $(GTK3_LIBS) \
- $(LIBNM_GLIB_LIBS)
-
-endif
-
-if WITH_LIBNMA_GTK4
-
-noinst_LTLIBRARIES += src/utils/libutils-libnm-gtk4.la
-
-src_utils_libutils_libnm_gtk4_la_CPPFLAGS = \
- "-I$(srcdir)/shared" \
- $(GTK4_CFLAGS) \
- $(LIBNM_CFLAGS)
-
-src_utils_libutils_libnm_gtk4_la_SOURCES = \
- $(shared_files) \
- src/utils/utils.c \
- src/utils/utils.h
-
-src_utils_libutils_libnm_gtk4_la_LIBADD = \
- $(GTK4_LIBS) \
- $(LIBNM_LIBS)
-
-endif
-
check_programs += src/utils/tests/test-utils
src_utils_tests_test_utils_SOURCES = src/utils/tests/test-utils.c
@@ -317,9 +260,8 @@ src_wireless_security_libwireless_security_libnm_la_CPPFLAGS = \
$(dflt_cppflags) \
"-I$(srcdir)/shared" \
"-I$(srcdir)/src/utils" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma \
$(GTK3_CFLAGS) \
+ $(LIBNMA_CFLAGS) \
$(LIBNM_CFLAGS)
src_wireless_security_libwireless_security_libnm_la_LIBADD = \
@@ -329,62 +271,6 @@ src_wireless_security_libwireless_security_libnm_la_LIBADD = \
$(src_wireless_security_libwireless_security_libnm_la_OBJECTS): $(wireless_security_h_gen)
-if WITH_LIBNM_GTK
-
-noinst_LTLIBRARIES += src/wireless-security/libwireless-security-libnm-glib.la
-
-src_wireless_security_libwireless_security_libnm_glib_la_SOURCES = \
- $(wireless_security_c_real)
-
-nodist_src_wireless_security_libwireless_security_libnm_glib_la_SOURCES = \
- $(wireless_security_c_gen)
-
-src_wireless_security_libwireless_security_libnm_glib_la_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GTK3_CFLAGS) \
- -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB_LEGACY \
- "-I$(srcdir)/shared" \
- "-I$(srcdir)/src/utils" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma \
- $(LIBNM_GLIB_CFLAGS)
-
-src_wireless_security_libwireless_security_libnm_glib_la_LIBADD = \
- src/utils/libutils-libnm-glib.la \
- $(GTK3_LIBS) \
- $(LIBNM_GLIB_LIBS)
-
-$(src_wireless_security_libwireless_security_libnm_glib_la_OBJECTS): $(wireless_security_h_gen)
-
-endif
-
-if WITH_LIBNMA_GTK4
-
-noinst_LTLIBRARIES += src/wireless-security/libwireless-security-libnm-gtk4.la
-
-src_wireless_security_libwireless_security_libnm_gtk4_la_SOURCES = \
- $(wireless_security_c_real)
-
-nodist_src_wireless_security_libwireless_security_libnm_gtk4_la_SOURCES = \
- $(wireless_security_c_gen)
-
-src_wireless_security_libwireless_security_libnm_gtk4_la_CPPFLAGS = \
- "-I$(srcdir)/shared" \
- "-I$(srcdir)/src/utils" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma \
- $(GTK4_CFLAGS) \
- $(LIBNM_CFLAGS)
-
-src_wireless_security_libwireless_security_libnm_gtk4_la_LIBADD = \
- src/utils/libutils-libnm-gtk4.la \
- $(GTK4_LIBS) \
- $(LIBNM_LIBS)
-
-$(src_wireless_security_libwireless_security_libnm_gtk4_la_OBJECTS): $(wireless_security_h_gen)
-
-endif
-
EXTRA_DIST += \
src/wireless-security/eap-method-fast.ui \
src/wireless-security/eap-method-leap.ui \
@@ -403,638 +289,6 @@ EXTRA_DIST += \
###############################################################################
-if WITH_LIBNM_GTK
-
-src/libnm-gtk/nm-resources.h: src/libnm-gtk/nm.gresource.xml
- $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $< --target=$@ --sourcedir=$(srcdir)/src/libnm-gtk --generate-header --internal
-
-src/libnm-gtk/nm-resources.c: src/libnm-gtk/nm.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir)/src/libnm-gtk --generate-dependencies $(srcdir)/src/libnm-gtk/nm.gresource.xml)
- $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $< --target=$@ --sourcedir=$(srcdir)/src/libnm-gtk --generate-source --internal
-
-CLEANFILES += \
- $(libnm_gtk_h_priv_gen) \
- $(libnm_gtk_c_gen)
-
-libnm_gtk_h_priv_gen = \
- src/libnm-gtk/nm-resources.h
-
-libnm_gtk_c_gen = \
- src/libnm-gtk/nm-resources.c
-
-libnm_gtk_h_pub = \
- src/libnm-gtk/nm-wifi-dialog.h \
- src/libnm-gtk/nm-wireless-dialog.h \
- src/libnm-gtk/nm-mobile-wizard.h \
- src/libnm-gtk/nm-ui-utils.h \
- src/libnm-gtk/nm-mobile-providers.h \
- src/libnm-gtk/nm-vpn-password-dialog.h \
- src/libnm-gtk/nm-cert-chooser.h
-
-libnm_gtk_c_real = \
- src/libnm-gtk/nm-wifi-dialog.c \
- src/libnm-gtk/nm-wireless-dialog.c \
- src/libnm-gtk/nm-mobile-wizard.c \
- src/libnm-gtk/nm-ui-utils.c \
- src/libnm-gtk/nm-mobile-providers.c \
- src/libnm-gtk/nm-vpn-password-dialog.c \
- src/libnma/nma-cert-chooser.c \
- src/libnma/nma-file-cert-chooser.c \
- src/libnm-gtk/init.c
-
-src_libnm_gtk_libnmgtkdir = $(includedir)/libnm-gtk
-
-src_libnm_gtk_libnmgtk_HEADERS = \
- $(libnm_gtk_h_pub)
-
-lib_LTLIBRARIES += src/libnm-gtk/libnm-gtk.la
-
-src_libnm_gtk_libnm_gtk_la_SOURCES = \
- $(libnm_gtk_c_real)
-
-nodist_src_libnm_gtk_libnm_gtk_la_SOURCES = \
- $(libnm_gtk_c_gen)
-
-src_libnm_gtk_libnm_gtk_la_CFLAGS = \
- $(dflt_cppflags) \
- -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB_LEGACY \
- -DICONDIR=\""$(datadir)/icons"\" \
- -DBINDIR=\""$(bindir)"\" \
- -DSYSCONFDIR=\""$(sysconfdir)"\" \
- -DLIBEXECDIR=\""$(libexecdir)"\" \
- -DDATADIR=\""$(datadir)"\" \
- -DAUTOSTARTDIR=\""$(sysconfdir)/xdg/autostart"\" \
- -DNMALOCALEDIR=\"$(datadir)/locale\" \
- "-I$(srcdir)/shared" \
- "-I$(srcdir)/src/utils" \
- "-I$(srcdir)/src/wireless-security" \
- "-I$(srcdir)/src/libnm-gtk" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma \
- $(GTK3_CFLAGS) \
- $(LIBNM_GLIB_CFLAGS) \
- $(GUDEV_CFLAGS)
-
-src_libnm_gtk_libnm_gtk_la_LIBADD = \
- src/wireless-security/libwireless-security-libnm-glib.la \
- $(GTK3_LIBS) \
- $(LIBNM_GLIB_LIBS) \
- $(GUDEV_LIBS)
-
-EXTRA_src_libnm_gtk_libnm_gtk_la_DEPENDENCIES = src/libnm-gtk/libnm-gtk.ver
-
-src_libnm_gtk_libnm_gtk_la_LDFLAGS = \
- -Wl,-no-undefined \
- -Wl,--version-script=$(srcdir)/src/libnm-gtk/libnm-gtk.ver
-
-$(src_libnm_gtk_libnm_gtk_la_OBJECTS): $(libnm_gtk_h_priv_gen)
-
-check-local-exports-libnm-gtk:
- $(srcdir)/src/libnm-gtk/check-exports.sh $(builddir)/src/libnm-gtk/.libs/libnm-gtk.so $(srcdir)/src/libnm-gtk/libnm-gtk.ver
-
-check_local += check-local-exports-libnm-gtk
-
-
-pkgconfig_DATA += src/libnm-gtk/libnm-gtk.pc
-
-if HAVE_INTROSPECTION
-src/libnm-gtk/NMGtk-1.0.gir: src/libnm-gtk/libnm-gtk.la
-src_libnm_gtk_NMGtk_1_0_gir_INCLUDES = NMClient-1.0 NetworkManager-1.0 Gtk-3.0
-src_libnm_gtk_NMGtk_1_0_gir_EXPORT_PACKAGES = libnm-gtk
-src_libnm_gtk_NMGtk_1_0_gir_CFLAGS = $(src_libnm_gtk_libnm_gtk_la_CFLAGS)
-src_libnm_gtk_NMGtk_1_0_gir_LIBS = src/libnm-gtk/libnm-gtk.la
-src_libnm_gtk_NMGtk_1_0_gir_FILES = \
- $(filter-out src/libnm-gtk/nm-wireless-dialog.h, $(libnm_gtk_h_pub)) \
- $(filter-out src/libnm-gtk/nm-wireless-dialog.c, $(libnm_gtk_c_real))
-src_libnm_gtk_NMGtk_1_0_gir_SCANNERFLAGS = --warn-all --identifier-prefix=NMA --symbol-prefix=nma
-INTROSPECTION_GIRS += src/libnm-gtk/NMGtk-1.0.gir
-endif
-
-
-check_programs += src/libnm-gtk/tests/test-mobile-providers
-
-src_libnm_gtk_tests_test_mobile_providers_CPPFLAGS = \
- $(dflt_cppflags) \
- -DTEST_DATA_DIR=\""$(abs_srcdir)/src/libnm-gtk/tests"\" \
- "-I$(srcdir)/shared" \
- "-I$(srcdir)/src/libnm-gtk" \
- $(GTK3_CFLAGS) \
- $(LIBNM_GLIB_CFLAGS)
-
-src_libnm_gtk_tests_test_mobile_providers_LDADD = \
- src/libnm-gtk/libnm-gtk.la \
- $(LIBNM_GLIB_LIBS)
-
-endif
-
-EXTRA_DIST += \
- src/libnm-gtk/libnm-gtk.pc.in \
- src/libnm-gtk/libnm-gtk.ver \
- src/libnm-gtk/check-exports.sh \
- src/libnm-gtk/wifi.ui \
- src/libnm-gtk/nm.gresource.xml \
- src/libnm-gtk/meson.build \
- \
- src/libnm-gtk/tests/iso3166-test.xml \
- src/libnm-gtk/tests/serviceproviders-test.xml \
- \
- src/libnm-gtk/examples/mobile-providers.js \
- $(NULL)
-
-###############################################################################
-
-src/libnma/nma-resources.h: src/libnma/nma.gresource.xml
- $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $< --target=$@ --sourcedir=$(srcdir)/src/libnma --generate-header --internal
-
-src/libnma/nma-resources.c: src/libnma/nma.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir)/src/libnma --generate-dependencies $(srcdir)/src/libnma/nma.gresource.xml)
- $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $< --target=$@ --sourcedir=$(srcdir)/src/libnma --generate-source --internal
-
-src/libnma-gtk4/nma-resources.c: src/libnma/nma.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --generate-dependencies $(srcdir)/src/libnma/nma.gresource.xml |sed "s,^,$(builddir)/src/libnma-gtk4/,")
- @mkdir -p $(builddir)/src/libnma-gtk4
- $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $< --target=$@ --sourcedir=$(builddir)/src/libnma-gtk4 --generate-source --internal
-
-
-src/libnma-gtk4/%.ui: src/libnma/%.ui
- @mkdir -p $(builddir)/src/libnma-gtk4
- gtk4-builder-tool simplify --3to4 $< >$@
-
-CLEANFILES += \
- $(libnma_h_priv_gen) \
- $(libnma_c_gen) \
- $(libnma_gtk4_c_gen)
-
-libnma_h_priv_gen = \
- src/libnma/nma-resources.h
-
-libnma_c_gen = \
- src/libnma/nma-resources.c
-
-libnma_gtk4_c_gen = \
- src/libnma-gtk4/nma-resources.c
-
-libnma_h_pub = \
- src/libnma/nma-version.h \
- src/libnma/nma-wifi-dialog.h \
- src/libnma/nma-mobile-wizard.h \
- src/libnma/nma-mobile-providers.h \
- src/libnma/nma-vpn-password-dialog.h \
- src/libnma/nma-ui-utils.h \
- src/libnma/nma-cert-chooser.h \
- src/libnma/nma-bar-code-widget.h \
- src/libnma/nma-bar-code.h
-
-libnma_c_real = \
- src/libnma/nma-wifi-dialog.c \
- src/libnma/nma-mobile-wizard.c \
- src/libnma/nma-mobile-providers.c \
- src/libnma/nma-vpn-password-dialog.c \
- src/libnma/nma-ui-utils.c \
- src/libnma/init.c \
- src/libnma/nma-cert-chooser.c \
- src/libnma/nma-file-cert-chooser.c \
- src/libnma/nma-bar-code-widget.c \
- src/libnma/nma-bar-code.c
-
-EXTRA_DIST += \
- src/libnma/qrcodegen.c \
- src/libnma/qrcodegen.h
-
-libnma_h_priv_real = \
- src/libnma/nma-cert-chooser-private.h \
- src/libnma/nma-private.h
-
-libnma_h_priv_gcr = \
- src/libnma/nma-pkcs11-token-login-dialog.h \
- src/libnma/nma-pkcs11-cert-chooser-dialog.h \
- src/libnma/nma-cert-chooser-button.h
-
-libnma_c_gcr = \
- src/libnma/nma-pkcs11-token-login-dialog.c \
- src/libnma/nma-pkcs11-cert-chooser-dialog.c \
- src/libnma/nma-cert-chooser-button.c \
- src/libnma/nma-pkcs11-cert-chooser.c
-
-src_libnma_libnmadir = $(includedir)/libnma
-
-src_libnma_libnma_HEADERS = \
- $(libnma_h_pub)
-
-lib_LTLIBRARIES += src/libnma/libnma.la
-
-src_libnma_libnma_la_SOURCES = \
- $(libnma_h_priv_real) \
- $(libnma_c_real)
-
-if WITH_GCR
-src_libnma_libnma_la_SOURCES += \
- $(libnma_h_priv_gcr) \
- $(libnma_c_gcr)
-endif
-
-nodist_src_libnma_libnma_la_SOURCES = \
- $(libnma_h_priv_gen) \
- $(libnma_c_gen)
-
-src_libnma_libnma_la_CFLAGS = \
- $(dflt_cppflags) \
- -DICONDIR=\""$(datadir)/icons"\" \
- -DBINDIR=\""$(bindir)"\" \
- -DSYSCONFDIR=\""$(sysconfdir)"\" \
- -DLIBEXECDIR=\""$(libexecdir)"\" \
- -DDATADIR=\""$(datadir)"\" \
- -DAUTOSTARTDIR=\""$(sysconfdir)/xdg/autostart"\" \
- -DNMALOCALEDIR=\"$(datadir)/locale\" \
- -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB \
- "-I$(srcdir)/shared" \
- "-I$(srcdir)/src/utils" \
- "-I$(srcdir)/src/wireless-security" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma \
- $(GTK3_CFLAGS) \
- $(LIBNM_CFLAGS) \
- $(GUDEV_CFLAGS) \
- $(GCR_CFLAGS)
-
-src_libnma_libnma_la_LIBADD = \
- src/wireless-security/libwireless-security-libnm.la \
- $(GTK3_LIBS) \
- $(LIBNM_LIBS) \
- $(GUDEV_LIBS) \
- $(GCR_LIBS)
-
-EXTRA_src_libnma_libnma_la_DEPENDENCIES = src/libnma/libnma.ver
-
-src_libnma_libnma_la_LDFLAGS = \
- -Wl,-no-undefined \
- -Wl,--version-script=$(srcdir)/src/libnma/libnma.ver
-
-
-pkgconfig_DATA += src/libnma/libnma.pc
-
-if HAVE_INTROSPECTION
-src/libnma/NMA-1.0.gir: src/libnma/libnma.la
-src_libnma_NMA_1_0_gir_INCLUDES = NM-1.0 Gtk-3.0
-src_libnma_NMA_1_0_gir_EXPORT_PACKAGES = libnma
-src_libnma_NMA_1_0_gir_CFLAGS = $(src_libnma_libnma_la_CFLAGS)
-src_libnma_NMA_1_0_gir_LIBS = src/libnma/libnma.la
-src_libnma_NMA_1_0_gir_FILES = \
- $(libnma_h_pub) \
- $(libnma_c_real)
-if WITH_GCR
-src_libnma_NMA_1_0_gir_FILES += \
- $(libnma_c_gcr)
-endif
-src_libnma_NMA_1_0_gir_SCANNERFLAGS = --warn-all --identifier-prefix=NMA --symbol-prefix=nma
-INTROSPECTION_GIRS += src/libnma/NMA-1.0.gir
-endif
-
-check_PROGRAMS_norun += src/libnma/tests/mobile-wizard
-
-src_libnma_tests_mobile_wizard_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK3_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_mobile_wizard_LDADD = \
- $(GLIB_LIBS) \
- $(GTK3_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma.la
-
-check_PROGRAMS_norun += src/libnma/tests/vpn-password-dialog
-
-src_libnma_tests_vpn_password_dialog_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK3_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_vpn_password_dialog_LDADD = \
- $(GLIB_LIBS) \
- $(GTK3_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma.la
-
-check_PROGRAMS_norun += src/libnma/tests/wifi-dialog
-
-src_libnma_tests_wifi_dialog_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK3_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_wifi_dialog_LDADD = \
- $(GLIB_LIBS) \
- $(GTK3_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma.la
-
-check_PROGRAMS_norun += src/libnma/tests/wifi-dialog-secrets
-
-src_libnma_tests_wifi_dialog_secrets_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK3_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_wifi_dialog_secrets_LDADD = \
- $(GLIB_LIBS) \
- $(GTK3_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma.la
-
-check_PROGRAMS_norun += src/libnma/tests/run-vpn
-
-src_libnma_tests_run_vpn_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK3_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_run_vpn_LDADD = \
- $(GLIB_LIBS) \
- $(GTK3_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma.la
-
-check_PROGRAMS_norun += src/libnma/tests/cert-chooser
-
-src_libnma_tests_cert_chooser_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK3_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_cert_chooser_LDADD = \
- $(GLIB_LIBS) \
- $(GTK3_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma.la
-
-check_PROGRAMS_norun += src/libnma/tests/bar-code
-
-src_libnma_tests_bar_code_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK3_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_bar_code_LDADD = \
- $(GLIB_LIBS) \
- $(GTK3_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma.la
-
-if WITH_LIBNMA_GTK4
-
-lib_LTLIBRARIES += src/libnma/libnma-gtk4.la
-
-src_libnma_libnma_gtk4_la_SOURCES = \
- $(libnma_h_priv_real) \
- $(libnma_c_real)
-
-if WITH_GCR_GTK4
-src_libnma_libnma_gtk4_la_SOURCES += \
- $(libnma_h_priv_gcr) \
- $(libnma_c_gcr)
-endif
-
-nodist_src_libnma_libnma_gtk4_la_SOURCES = \
- $(libnma_h_priv_gen) \
- $(libnma_gtk4_c_gen)
-
-src_libnma_libnma_gtk4_la_CFLAGS = \
- -DICONDIR=\""$(datadir)/icons"\" \
- -DBINDIR=\""$(bindir)"\" \
- -DSYSCONFDIR=\""$(sysconfdir)"\" \
- -DLIBEXECDIR=\""$(libexecdir)"\" \
- -DDATADIR=\""$(datadir)"\" \
- -DAUTOSTARTDIR=\""$(sysconfdir)/xdg/autostart"\" \
- -DNMALOCALEDIR=\"$(datadir)/locale\" \
- -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB \
- "-I$(srcdir)/shared" \
- "-I$(srcdir)/src/utils" \
- "-I$(srcdir)/src/wireless-security" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma \
- $(GTK4_CFLAGS) \
- $(LIBNM_CFLAGS) \
- $(GUDEV_CFLAGS) \
- $(GCR_GCR4_CFLAGS)
-
-src_libnma_libnma_gtk4_la_LIBADD = \
- src/wireless-security/libwireless-security-libnm-gtk4.la \
- $(GTK4_LIBS) \
- $(LIBNM_LIBS) \
- $(GUDEV_LIBS) \
- $(GCR_GCR4_LIBS)
-
-EXTRA_src_libnma_libnma_gtk4_la_DEPENDENCIES = src/libnma/libnma.ver
-
-src_libnma_libnma_gtk4_la_LDFLAGS = \
- -Wl,-no-undefined \
- -Wl,--version-script=$(srcdir)/src/libnma/libnma.ver
-
-
-pkgconfig_DATA += src/libnma/libnma-gtk4.pc
-
-if HAVE_INTROSPECTION
-src/libnma/NMA4-1.0.gir: src/libnma/libnma-gtk4.la
-src_libnma_NMA4_1_0_gir_INCLUDES = NM-1.0 Gtk-4.0
-src_libnma_NMA4_1_0_gir_EXPORT_PACKAGES = libnma-gtk4
-src_libnma_NMA4_1_0_gir_CFLAGS = $(src_libnma_libnma_gtk4_la_CFLAGS)
-src_libnma_NMA4_1_0_gir_LIBS = src/libnma/libnma-gtk4.la
-src_libnma_NMA4_1_0_gir_FILES = \
- $(libnma_h_pub) \
- $(libnma_c_real)
-if WITH_GCR_GTK4
-src_libnma_NMA4_1_0_gir_FILES += \
- $(libnma_c_gcr)
-endif
-src_libnma_NMA4_1_0_gir_SCANNERFLAGS = --warn-all --identifier-prefix=NMA --symbol-prefix=nma
-INTROSPECTION_GIRS += src/libnma/NMA4-1.0.gir
-endif
-
-check_PROGRAMS_norun += src/libnma/tests/mobile-wizard-gtk4
-
-src_libnma_tests_mobile_wizard_gtk4_SOURCES = \
- src/libnma/tests/mobile-wizard.c
-
-src_libnma_tests_mobile_wizard_gtk4_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK4_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_mobile_wizard_gtk4_LDADD = \
- $(GLIB_LIBS) \
- $(GTK4_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma-gtk4.la
-
-check_PROGRAMS_norun += src/libnma/tests/vpn-password-dialog-gtk4
-
-src_libnma_tests_vpn_password_dialog_gtk4_SOURCES = \
- src/libnma/tests/vpn-password-dialog.c
-
-src_libnma_tests_vpn_password_dialog_gtk4_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK4_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_vpn_password_dialog_gtk4_LDADD = \
- $(GLIB_LIBS) \
- $(GTK4_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma-gtk4.la
-
-check_PROGRAMS_norun += src/libnma/tests/wifi-dialog-gtk4
-
-src_libnma_tests_wifi_dialog_gtk4_SOURCES = \
- src/libnma/tests/wifi-dialog.c
-
-src_libnma_tests_wifi_dialog_gtk4_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK4_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_wifi_dialog_gtk4_LDADD = \
- $(GLIB_LIBS) \
- $(GTK4_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma-gtk4.la
-
-check_PROGRAMS_norun += src/libnma/tests/wifi-dialog-secrets-gtk4
-
-src_libnma_tests_wifi_dialog_secrets_gtk4_SOURCES = \
- src/libnma/tests/wifi-dialog-secrets.c
-
-src_libnma_tests_wifi_dialog_secrets_gtk4_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK4_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_wifi_dialog_secrets_gtk4_LDADD = \
- $(GLIB_LIBS) \
- $(GTK4_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma-gtk4.la
-
-check_PROGRAMS_norun += src/libnma/tests/run-vpn-gtk4
-
-src_libnma_tests_run_vpn_gtk4_SOURCES = \
- src/libnma/tests/run-vpn.c
-
-src_libnma_tests_run_vpn_gtk4_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK4_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_run_vpn_gtk4_LDADD = \
- $(GLIB_LIBS) \
- $(GTK4_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma-gtk4.la
-
-check_PROGRAMS_norun += src/libnma/tests/cert-chooser-gtk4
-
-src_libnma_tests_cert_chooser_gtk4_SOURCES = \
- src/libnma/tests/cert-chooser.c
-
-src_libnma_tests_cert_chooser_gtk4_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK4_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_cert_chooser_gtk4_LDADD = \
- $(GLIB_LIBS) \
- $(GTK4_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma-gtk4.la
-
-check_PROGRAMS_norun += src/libnma/tests/bar-code-gtk4
-
-src_libnma_tests_bar_code_gtk4_SOURCES = \
- src/libnma/tests/bar-code.c
-
-src_libnma_tests_bar_code_gtk4_CPPFLAGS = \
- $(dflt_cppflags) \
- $(GLIB_CFLAGS) \
- $(GTK4_CFLAGS) \
- $(LIBNM_CFLAGS) \
- "-I$(srcdir)/shared/" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma
-
-src_libnma_tests_bar_code_gtk4_LDADD = \
- $(GLIB_LIBS) \
- $(GTK4_LIBS) \
- $(LIBNM_LIBS) \
- src/libnma/libnma-gtk4.la
-
-endif
-
-EXTRA_DIST += \
- src/libnma/nma-version.h.in \
- src/libnma/libnma.pc.in \
- src/libnma/libnma-gtk4.pc.in \
- src/libnma/libnma.ver \
- src/libnma/wifi.ui \
- src/libnma/nma-mobile-wizard.ui \
- src/libnma/nma-bar-code-widget.ui \
- src/libnma/nma-pkcs11-token-login-dialog.ui \
- src/libnma/nma-pkcs11-cert-chooser-dialog.ui \
- src/libnma/nma-vpn-password-dialog.ui \
- src/libnma/nma.gresource.xml \
- src/libnma/meson.build \
- src/libnma/tests/meson.build
-
-###############################################################################
-
src/connection-editor/ce-resources.h: src/connection-editor/ce.gresource.xml
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $< --target=$@ --sourcedir=$(srcdir)/src/connection-editor --generate-header --internal
@@ -1143,18 +397,17 @@ src_connection_editor_nm_connection_editor_CPPFLAGS = \
"-I$(srcdir)/shared" \
"-I$(srcdir)/src/utils" \
"-I$(srcdir)/src/wireless-security" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma \
$(GTK3_CFLAGS) \
+ $(LIBNMA_CFLAGS) \
$(LIBNM_CFLAGS) \
$(JANSSON_CFLAGS) \
$(SELINUX_CFLAGS)
src_connection_editor_nm_connection_editor_LDADD = \
src/wireless-security/libwireless-security-libnm.la \
- src/libnma/libnma.la \
$(GTK3_LIBS) \
$(LIBNM_LIBS) \
+ $(LIBNMA_LIBS) \
$(JANSSON_LIBS) \
$(SELINUX_LIBS) \
-lm
@@ -1270,9 +523,8 @@ src_nm_applet_CPPFLAGS = \
"-I$(srcdir)/shared" \
"-I$(srcdir)/src/utils" \
"-I$(srcdir)/src/wireless-security" \
- "-I$(srcdir)/src/libnma" \
- -Isrc/libnma \
$(GTK3_CFLAGS) \
+ $(LIBNMA_CFLAGS) \
$(LIBNM_CFLAGS) \
$(LIBSECRET_CFLAGS) \
$(NOTIFY_CFLAGS) \
@@ -1281,9 +533,9 @@ src_nm_applet_CPPFLAGS = \
src_nm_applet_LDADD = \
src/wireless-security/libwireless-security-libnm.la \
- src/libnma/libnma.la \
$(GTK3_LIBS) \
$(LIBNM_LIBS) \
+ $(LIBNMA_LIBS) \
$(LIBSECRET_LIBS) \
$(NOTIFY_LIBS) \
$(MM_GLIB_LIBS) \
@@ -1332,43 +584,6 @@ EXTRA_DIST += man/meson.build
###############################################################################
-DOC_MODULE = libnma
-
-DOC_SOURCE_DIR = $(top_srcdir)/src/libnma
-
-SCAN_OPTIONS=--rebuild-types --rebuild-sections
-
-DOC_MAIN_SGML_FILE = libnma-docs.xml
-
-GTKDOC_LIBS = src/libnma/libnma.la
-
-scan-build.stamp: $(GTKDOC_LIBS)
-
-HFILE_GLOB = $(top_srcdir)/src/libnma/*.h
-
-CFILE_GLOB = $(top_srcdir)/src/libnma/*.c
-
-IGNORE_HFILES = \
- nma-resources.h \
- nma-version.h \
- nma-cert-chooser-private.h \
- nma-private.h \
- nma-pkcs11-token-login-dialog.h \
- nma-pkcs11-cert-chooser-dialog.h \
- nma-cert-chooser-button.h
-
-mkdb_ignore_c_files = \
- nma-resources.c \
- nma-file-cert-chooser.c \
- nma-pkcs11-token-login-dialog.c \
- nma-pkcs11-cert-chooser-dialog.c \
- nma-cert-chooser-button.c \
- nma-pkcs11-cert-chooser.c
-
-MKDB_OPTIONS = --ignore-files "$(IGNORE_HFILES) $(mkdb_ignore_c_files)"
-
-###############################################################################
-
check_PROGRAMS += $(check_programs)
check-local: $(check_local)
@@ -1426,7 +641,6 @@ EXTRA_DIST += \
$(desktop_in_files)
CLEANFILES += \
- $(INTROSPECTION_GIRS) \
$(typelib_DATA) \
\
$(autostart_DATA) \
diff --git a/NEWS b/NEWS
index c35aa23d..52a888d8 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,12 @@
=======================================================
+network-manager-applet-1.8.25
+Overview of changes since network-manager-applet-1.8.24
+=======================================================
+
+* The libnm-gtk, the deprecated libnm-glib compatibility library was
+ removed. Everybody should be using libnma by now.
+
+=======================================================
network-manager-applet-1.8.24
Overview of changes since network-manager-applet-1.8.22
=======================================================
diff --git a/autogen.sh b/autogen.sh
index cbdc5c44..37363e75 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -14,7 +14,6 @@ PKG_NAME=nm-applet
}
(cd $srcdir;
- gtkdocize &&
autoreconf --force --install --symlink
)
diff --git a/configure.ac b/configure.ac
index 378f670f..5a46cde3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -68,91 +68,14 @@ GETTEXT_PACKAGE=nm-applet
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext package])
-# Check for iso-codes for country names translation
-AC_MSG_CHECKING([whether to disable iso-codes at build-time])
-AC_ARG_ENABLE([iso-codes],
- AS_HELP_STRING([--disable-iso-codes],[do not check for iso-codes at build-time]),
- [],[disable_iso_codes_check=no])
-if test x$disable_iso_codes_check = xno ; then
- AC_MSG_RESULT([no])
-else
- AC_MSG_RESULT([yes])
-fi
-
-if test x$disable_iso_codes_check = "xno" ; then
- AC_MSG_CHECKING([whether iso-codes has iso_3166 domain])
- if $PKG_CONFIG --variable=domains iso-codes | grep iso_3166 >/dev/null ; then
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- fi
- AC_DEFINE_UNQUOTED([ISO_CODES_PREFIX],["`$PKG_CONFIG --variable=prefix iso-codes`"],[ISO codes prefix])
- PKG_CHECK_MODULES(ISO_CODES, [iso-codes],
- [],
- [echo -e "\n$ISO_CODES_PKG_ERRORS.\n"
- echo "Consider installing the package or adjusting the PKG_CONFIG_PATH environment variable."
- echo "You can also disable build-time check for 'iso-codes' via --disable-iso-codes";
- exit 1;])
-else
- AC_DEFINE_UNQUOTED([ISO_CODES_PREFIX],["$prefix"],[ISO codes prefix])
-fi
-
-# Check for mobile-broadband-provider-info for Mobile Broadband wizard
-AC_MSG_CHECKING([whether to disable mobile-broadband-provider-info at build-time])
-AC_ARG_ENABLE([mobile-broadband-provider-info],
- AS_HELP_STRING([--disable-mobile-broadband-provider-info],[do not check for mobile-broadband-provider-info at build-time]),
- [],[disable_mobile_broadband_provider_info_check=no])
-if test x$disable_mobile_broadband_provider_info_check = xno ; then
- AC_MSG_RESULT([no])
-else
- AC_MSG_RESULT([yes])
-fi
-
-if test x$disable_mobile_broadband_provider_info_check = "xno" ; then
- AC_DEFINE_UNQUOTED([MOBILE_BROADBAND_PROVIDER_INFO_DATABASE],["`$PKG_CONFIG --variable=database mobile-broadband-provider-info`"],[Mobile Broadband Service Provider Information Database location])
- PKG_CHECK_MODULES(MOBILE_BROADBAND_PROVIDER_INFO, [mobile-broadband-provider-info],
- [],
- [echo -e "\n$MOBILE_BROADBAND_PROVIDER_INFO_PKG_ERRORS.\n"
- echo "Consider installing the package or adjusting the PKG_CONFIG_PATH environment variable."
- echo "You can also disable build-time check for 'mobile-broadband-provider-info' via --disable-mobile-broadband-provider-info";
- exit 1;])
-else
- AC_DEFINE_UNQUOTED([MOBILE_BROADBAND_PROVIDER_INFO_DATABASE],["$prefix/share/mobile-broadband-provider-info/serviceproviders.xml"],[Mobile Broadband Service Provider Information Database location])
-fi
-
-dnl
-dnl API documentation
-dnl
-GTK_DOC_CHECK(1.0)
-
-AC_ARG_WITH(libnm-gtk, AS_HELP_STRING([--with-libnm-gtk], [build legacy library libnm-gtk which depends on libnm-glib/libnm-util/dbus-glib (deprecated)]))
-if test "$with_libnm_gtk" == yes; then
- PKG_CHECK_MODULES(LIBNM_GLIB,
- [gio-2.0 >= 2.38
- NetworkManager >= 1.7
- libnm-glib >= 1.7
- libnm-util >= 1.7
- libnm-glib-vpn >= 1.7
- gmodule-export-2.0],
- :,
- [AC_MSG_FAILURE([$LIBNM_GLIB_PKG_ERRORS
-
-Configure without --with-libnm-gtk if you do not need the legacy library])])
- LIBNM_GLIB_CFLAGS="$LIBNM_GLIB_CFLAGS -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_38"
- LIBNM_GLIB_CFLAGS="$LIBNM_GLIB_CFLAGS -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_38"
- LIBNM_GLIB_CFLAGS="$LIBNM_GLIB_CFLAGS -DNM_VERSION_MIN_REQUIRED=NM_VERSION_1_4"
- LIBNM_GLIB_CFLAGS="$LIBNM_GLIB_CFLAGS -DNM_VERSION_MAX_ALLOWED=NM_VERSION_1_4"
-else
- with_libnm_gtk=no
-fi
-AM_CONDITIONAL(WITH_LIBNM_GTK, test "$with_libnm_gtk" == "yes")
-
PKG_CHECK_MODULES(LIBNM, [libnm >= 1.7 gio-2.0 >= 2.38 gmodule-export-2.0])
LIBNM_CFLAGS="$LIBNM_CFLAGS -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_38"
LIBNM_CFLAGS="$LIBNM_CFLAGS -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_38"
LIBNM_CFLAGS="$LIBNM_CFLAGS -DNM_VERSION_MIN_REQUIRED=NM_VERSION_1_8"
LIBNM_CFLAGS="$LIBNM_CFLAGS -DNM_VERSION_MAX_ALLOWED=NM_VERSION_1_8"
+PKG_CHECK_MODULES(LIBNMA, libnma)
+
PKG_CHECK_MODULES(LIBSECRET, [libsecret-1 >= 0.18])
# Check for libnotify >= 0.7
@@ -165,20 +88,6 @@ PKG_CHECK_MODULES(NOTIFY, [libnotify >= 0.4.3])
PKG_CHECK_MODULES(GTK3, gtk+-3.0 >= 3.10)
GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_10 -DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_10"
-AC_ARG_WITH(libnma-gtk4, AS_HELP_STRING([--with-libnma-gtk4], [build EXPERIMENTAL libnma-gtk4 library for use with GTK4]))
-if test "$with_libnma_gtk4" == yes; then
- PKG_CHECK_MODULES(GTK4, gtk4 >= 3.94)
- GTK4_CFLAGS="$GTK4_CFLAGS -DGTK_VERSION_MIN_REQUIRED=GTK_VERSION_3_96 -DGTK_VERSION_MAX_ALLOWED=GTK_VERSION_3_96"
-else
- with_libnma_gtk4=no
-fi
-AM_CONDITIONAL(WITH_LIBNMA_GTK4, test "$with_libnma_gtk4" != "no")
-
-# No such thing yet, just same lame duck placeholders.
-# it may actually end up being called differently.
-AC_DEFINE(WITH_GCR_GTK4, 0, [Define if GTK4 Gcr is available])
-AM_CONDITIONAL(WITH_GCR_GTK4, false)
-
AC_ARG_WITH([appindicator],
AS_HELP_STRING([--with-appindicator=no|yes|auto|ayatana|ubuntu], [Build with lib(ayatana-)appindicator support in addition to xembed systray support.]),
[], [with_appindicator=no])
@@ -210,8 +119,6 @@ if test "$with_appindicator" != "no"; then
fi
fi
-AM_CONDITIONAL(HAVE_GBT, test x"$have_gbt" = "xyes")
-
dnl ModemManager1 with libmm-glib for WWAN support
AC_ARG_WITH(wwan, AS_HELP_STRING([--with-wwan], [Enable WWAN support (default: yes)]))
if (test "${with_wwan}" == "no"); then
@@ -251,79 +158,6 @@ else
fi
AM_CONDITIONAL(WITH_JANSSON, test "${with_team}" != "no")
-dnl GCR for PKCS#11 enabled certificate chooser
-AC_ARG_WITH(gcr, AS_HELP_STRING([--with-gcr], [Enable advanced certificate chooser (default: auto)]))
-if (test "${with_gcr}" == "no"); then
- have_gcr=no
-else
- PKG_CHECK_MODULES(GCR,
- [gcr-3 >= 3.14, gck-1 >= 3.14],
- dnl GCR API is declared subject to change, do an extensive check of the prototypes
- GCR_CFLAGS="$GCR_CFLAGS -DGCR_API_SUBJECT_TO_CHANGE -DGCK_API_SUBJECT_TO_CHANGE"
- CFLAGS_SAVED="$CFLAGS"
- CFLAGS="$CFLAGS $GCR_CFLAGS"
- AC_MSG_CHECKING([for GCR usefulness])
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([
- #include <gcr/gcr.h>
- #include <gck/gck.h>
-
- const GckAttribute *gck_attributes_find (GckAttributes *attrs, gulong attr_type);
- gboolean gck_attributes_find_string (GckAttributes *attrs, gulong attr_type, gchar **value);
- gboolean gck_attributes_find_ulong (GckAttributes *attrs, gulong attr_type, gulong *value);
- GckAttributes *gck_attributes_new_empty (gulong first_type, ...);
- void gck_attributes_unref (gpointer attrs);
- void gck_builder_add_all (GckBuilder *builder, GckAttributes *attrs);
- void gck_builder_add_only (GckBuilder *builder, GckAttributes *attrs, gulong only_type, ...);
- GckAttributes *gck_builder_end (GckBuilder *builder);
- GckBuilder *gck_builder_new (GckBuilderFlags flags);
- void gck_enumerator_next_async (GckEnumerator *self, gint max_objects, GCancellable *cancellable,
- GAsyncReadyCallback callback, gpointer user_data);
- GList *gck_enumerator_next_finish (GckEnumerator *self, GAsyncResult *result, GError **error);
- void gck_list_unref_free (GList *reflist);
- GList *gck_modules_get_slots (GList *modules, gboolean token_present);
- void gck_modules_initialize_registered_async (GCancellable *cancellable, GAsyncReadyCallback callback,
- gpointer user_data);
- GList *gck_modules_initialize_registered_finish (GAsyncResult *result, GError **error);
- void gck_object_get_async (GckObject *self, const gulong *attr_types, guint n_attr_types,
- GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data);
- GckAttributes *gck_object_get_finish (GckObject *self, GAsyncResult *result, GError **error);
- void gck_session_login_async (GckSession *self, gulong user_type, const guchar *pin,
- gsize n_pin, GCancellable *cancellable,
- GAsyncReadyCallback callback, gpointer user_data);
- gboolean gck_session_login_finish (GckSession *self, GAsyncResult *result, GError **error);
- GckSlotInfo *gck_slot_get_info (GckSlot *self);
- GckTokenInfo *gck_slot_get_token_info (GckSlot *self);
- void gck_slot_open_session_async (GckSlot *self, GckSessionOptions options, GCancellable *cancellable,
- GAsyncReadyCallback callback, gpointer user_data);
- GckSession *gck_slot_open_session_finish (GckSlot *self, GAsyncResult *result, GError **error);
- void gck_token_info_free (GckTokenInfo *token_info);
- gchar *gck_uri_build (GckUriData *uri_data, GckUriFlags flags);
- void gck_uri_data_free (GckUriData *uri_data);
- GckUriData *gck_uri_parse (const gchar *string, GckUriFlags flags, GError **error);
- gchar *gcr_certificate_get_issuer_name (GcrCertificate *self);
- gchar *gcr_certificate_get_subject_name (GcrCertificate *self);
- GcrCertificate *gcr_simple_certificate_new (const guchar *data, gsize n_data);
- ])],
- have_gcr=yes,
- have_gcr=no)
- AC_MSG_RESULT(${have_gcr})
- CFLAGS="$CFLAGS_SAVED",
- have_gcr=no);
-fi
-
-if (test "${have_gcr}" == "yes"); then
- AC_DEFINE(WITH_GCR, 1, [Define if Gcr is available])
-else
- if (test "${with_gcr}" == "yes"); then
- AC_MSG_ERROR([gcr support was requested, but the gcr library is not available.])
- fi
- AC_DEFINE(WITH_GCR, 0, [Define if Gcr is available])
-fi
-AM_CONDITIONAL(WITH_GCR, test "${have_gcr}" == "yes")
-
-dnl Check for gobject introspection
-GOBJECT_INTROSPECTION_CHECK([0.9.6])
-
GLIB_CONFIG_NMA
GLIB_GSETTINGS
AC_PATH_PROG(GLIB_COMPILE_RESOURCES, glib-compile-resources)
@@ -332,15 +166,6 @@ NM_COMPILER_WARNINGS(CFLAGS, [yes])
NM_LTO
NM_LD_GC
-# Disable extra compiler warning until GTK4 doesn't trigger it via graphene
-# https://github.com/ebassi/graphene/issues/134
-if test "$with_libnma_gtk4" == yes; then
- _CFLAGS_SAVED="$CFLAGS"
- CFLAGS="$CFLAGS $GTK4_CFLAGS"
- NM_COMPILER_WARNING([_CFLAGS], [float-equal], [#include <gtk/gtk.h>])
- CFLAGS="$_CFLAGS_SAVED $_CFLAGS"
-fi
-
AC_ARG_WITH(more-asserts,
AS_HELP_STRING([--with-more-asserts=level], [Enable more assertions for debugging (default: 0)]),
[more_asserts=${with_more_asserts}],
@@ -357,21 +182,14 @@ AC_DEFINE_UNQUOTED(NM_MORE_ASSERTS, $more_asserts, [Define if more asserts are e
AC_CONFIG_FILES([
Makefile
-src/libnm-gtk/libnm-gtk.pc
-src/libnma/libnma.pc
-src/libnma/libnma-gtk4.pc
po/Makefile.in
man/nm-applet.1
man/nm-connection-editor.1
org.gnome.nm-applet.gschema.xml
-src/libnma/nma-version.h
])
AC_OUTPUT
echo ""
-echo " Build legacy library libnm-gtk: --with-libnm-gtk=${with_libnm_gtk}"
-echo " Build EXPERIMENTAL libnma-gtk4 library for use with GTK4: --with-libnma-gtk4=${with_libnma_gtk4}"
-echo " GCR: --with-gcr=$have_gcr"
echo " LTO: --enable-lto=$enable_lto"
echo " Linker garbage collection: --enable-ld-gc=$enable_ld_gc"
echo " appindicator: $with_appindicator"
diff --git a/m4/introspection.m4 b/m4/introspection.m4
deleted file mode 100644
index f3bda0e7..00000000
--- a/m4/introspection.m4
+++ /dev/null
@@ -1,93 +0,0 @@
-dnl -*- mode: autoconf -*-
-dnl Copyright 2009 Johan Dahlin
-dnl
-dnl This file is free software; the author(s) gives unlimited
-dnl permission to copy and/or distribute it, with or without
-dnl modifications, as long as this notice is preserved.
-dnl
-
-# serial 1
-
-m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL],
-[
- AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
- AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
- AC_BEFORE([LT_INIT],[$0])dnl setup libtool first
-
- dnl enable/disable introspection
- m4_if([$2], [require],
- [dnl
- enable_introspection=yes
- ],[dnl
- AC_ARG_ENABLE(introspection,
- AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]],
- [Enable introspection for this build]),,
- [enable_introspection=auto])
- ])dnl
-
- INTROSPECTION_SCANNER=
- INTROSPECTION_COMPILER=
- INTROSPECTION_GENERATE=
- INTROSPECTION_GIRDIR=
- INTROSPECTION_TYPELIBDIR=
-
- if test "x$enable_introspection" == "xno"; then
- found_introspection="no"
- else
- PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], [
- INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
- INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
- INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
- INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
- INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
- INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
- INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
- INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
-
- AC_MSG_CHECKING([if $INTROSPECTION_SCANNER works])
- if CFLAGS="${CFLAGS} -Wno-error" "$INTROSPECTION_SCANNER" --namespace=test --library=c /dev/null --output /dev/null >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
- found_introspection=yes
- else
- found_introspection="no (compiler failure -- check config.log)"
- fi
- AC_MSG_RESULT([$found_introspection])
- ], [found_introspection="no (not installed)"])
-
- if test "x$enable_introspection" == "xyes"; then
- if test "x$found_introspection" != "xyes"; then
- AC_MSG_ERROR([introspection enabled but can't be used])
- fi
- elif test "x$enable_introspection" != "xauto"; then
- AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@])
- fi
- fi
-
- AC_SUBST(INTROSPECTION_SCANNER, 'CFLAGS="${CFLAGS} -Wno-error" '"$INTROSPECTION_SCANNER")
- AC_SUBST(INTROSPECTION_COMPILER)
- AC_SUBST(INTROSPECTION_GENERATE)
- AC_SUBST(INTROSPECTION_GIRDIR)
- AC_SUBST(INTROSPECTION_TYPELIBDIR)
- AC_SUBST(INTROSPECTION_CFLAGS)
- AC_SUBST(INTROSPECTION_LIBS)
- AC_SUBST(INTROSPECTION_MAKEFILE)
-
- AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes")
-])
-
-
-dnl Usage:
-dnl GOBJECT_INTROSPECTION_CHECK([minimum-g-i-version])
-
-AC_DEFUN([GOBJECT_INTROSPECTION_CHECK],
-[
- _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1])
-])
-
-dnl Usage:
-dnl GOBJECT_INTROSPECTION_REQUIRE([minimum-g-i-version])
-
-
-AC_DEFUN([GOBJECT_INTROSPECTION_REQUIRE],
-[
- _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require])
-])
diff --git a/meson.build b/meson.build
index e15cdbc5..fc3eacdc 100644
--- a/meson.build
+++ b/meson.build
@@ -20,8 +20,6 @@ nma_micro_version = version_array[2].to_int()
nma_gir_version = '1.0'
nma_gir_prefix = 'NMA'
-nma_gtk_gir_ns = 'NMGtk'
-
nma_prefix = get_option('prefix')
nma_bindir = join_paths(nma_prefix, get_option('bindir'))
nma_datadir = join_paths(nma_prefix, get_option('datadir'))
@@ -76,18 +74,6 @@ if enable_ld_gc
common_ldflags += test_ldflags
endif
-enable_libnma_gtk4 = get_option('libnma_gtk4')
-if enable_libnma_gtk4
- gtk4_ext_dep = dependency('gtk4', version: '>= 3.96')
- gtk4_dep = declare_dependency(
- dependencies: gtk4_ext_dep,
- compile_args: [
- '-DGTK_VERSION_MIN_REQUIRED=GTK_VERSION_3_96',
- '-DGTK_VERSION_MAX_ALLOWED=GTK_VERSION_3_96'
- ]
- )
-endif
-
if nma_debug
test_cflags = [
'-Wdeclaration-after-statement',
@@ -110,12 +96,6 @@ if nma_debug
'-Wvla',
]
- # Disable extra compiler warning until GTK4 doesn't trigger it via graphene
- # https://github.com/ebassi/graphene/issues/134
- if not enable_libnma_gtk4 or cc.compiles('#include <gtk/gtk.h>', dependencies: gtk4_ext_dep, args: ['-Werror=float-equal'])
- test_cflags += '-Wfloat-equal'
- endif
-
common_flags += cc.get_supported_arguments(test_cflags)
endif
@@ -124,37 +104,10 @@ add_project_link_arguments(common_ldflags, language: 'c')
linker_script_ver = join_paths(meson.source_root(), 'linker-script-binary.ver')
-# Check for iso-codes for country names translation
-enable_iso_codes = get_option('iso_codes')
-message('whether to disable iso-codes at build-time: ' + enable_iso_codes.to_string())
-if enable_iso_codes
- iso_codes_dep = dependency('iso-codes')
-
- str = 'Consider installing the package or adjusting the PKG_CONFIG_PATH environment variable.\n'
- str += 'You can also disable build-time check for \'iso-codes\' via -Diso_codes=false'
- assert(iso_codes_dep.found(), str)
-
- iso_3166 = iso_codes_dep.get_pkgconfig_variable('domains').contains('iso_3166')
- message('whether iso-codes has iso_3166 domain: ' + iso_3166.to_string())
-
- config_h.set_quoted('ISO_CODES_PREFIX', iso_codes_dep.get_pkgconfig_variable('prefix'))
-else
- config_h.set_quoted('ISO_CODES_PREFIX', nma_prefix)
-endif
-
-# Check for mobile-broadband-provider-info for Mobile Broadband wizard
-enable_mobile_broadband_provider_info = get_option('mobile_broadband_provider_info')
-message('whether to enable mobile-broadband-provider-info at build-time: ' + enable_mobile_broadband_provider_info.to_string())
-if enable_mobile_broadband_provider_info
- mobile_broadband_provider_info_dep = dependency('mobile-broadband-provider-info')
- config_h.set_quoted('MOBILE_BROADBAND_PROVIDER_INFO_DATABASE', mobile_broadband_provider_info_dep.get_pkgconfig_variable('database'))
-else
- config_h.set_quoted('MOBILE_BROADBAND_PROVIDER_INFO_DATABASE', join_paths(nma_datadir, 'mobile-broadband-provider-info', 'serviceproviders.xml'))
-endif
-
gio_dep = dependency('gio-2.0', version: '>= 2.38')
gmodule_export_dep = dependency('gmodule-export-2.0')
libsecret_dep = dependency('libsecret-1', version: '>= 0.18')
+libnma_dep = dependency('libnma')
m_dep = cc.find_library('m')
@@ -198,30 +151,6 @@ libnm_dep = declare_dependency(
compile_args: cflags
)
-enable_libnm_gtk = get_option('libnm_gtk')
-if enable_libnm_gtk
- deps = [
- gio_dep,
- gmodule_export_dep,
- dependency('libnm-glib', version: nm_req_version),
- dependency('libnm-glib-vpn', version: nm_req_version),
- dependency('libnm-util', version: nm_req_version),
- dependency('NetworkManager', version: nm_req_version)
- ]
-
- cflags = [
- '-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_38',
- '-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_38',
- '-DNM_VERSION_MIN_REQUIRED=NM_VERSION_1_4',
- '-DNM_VERSION_MAX_ALLOWED=NM_VERSION_1_4'
- ]
-
- libnm_glib_dep = declare_dependency(
- dependencies: deps,
- compile_args: cflags
- )
-endif
-
# No such thing yet, just same lame duck placeholders.
# it may actually end up being called differently.
config_h.set10('WITH_GCR_GTK4', false)
@@ -284,85 +213,6 @@ if enable_team
endif
config_h.set10('WITH_JANSSON', enable_team)
-# GCR for PKCS#11 enabled certificate chooser
-enable_gcr = get_option('gcr')
-if enable_gcr
- deps = [
- dependency('gcr-3', version: '>= 3.14'),
- dependency('gck-1', version: '>= 3.14')
- ]
-
- cflags = [
- '-DGCR_API_SUBJECT_TO_CHANGE',
- '-DGCK_API_SUBJECT_TO_CHANGE'
- ]
-
- # GCR API is declared subject to change, do an extensive check of the prototypes
- gcr_src = '''
- #ifndef GCR_API_SUBJECT_TO_CHANGE
- # define GCR_API_SUBJECT_TO_CHANGE
- #endif
- #ifndef GCK_API_SUBJECT_TO_CHANGE
- # define GCK_API_SUBJECT_TO_CHANGE
- #endif
-
- #include <gcr/gcr.h>
- #include <gck/gck.h>
-
- const GckAttribute *gck_attributes_find (GckAttributes *attrs, gulong attr_type);
- gboolean gck_attributes_find_string (GckAttributes *attrs, gulong attr_type, gchar **value);
- gboolean gck_attributes_find_ulong (GckAttributes *attrs, gulong attr_type, gulong *value);
- GckAttributes *gck_attributes_new_empty (gulong first_type, ...);
- void gck_attributes_unref (gpointer attrs);
- void gck_builder_add_all (GckBuilder *builder, GckAttributes *attrs);
- void gck_builder_add_only (GckBuilder *builder, GckAttributes *attrs, gulong only_type, ...);
- GckAttributes *gck_builder_end (GckBuilder *builder);
- GckBuilder *gck_builder_new (GckBuilderFlags flags);
- void gck_enumerator_next_async (GckEnumerator *self, gint max_objects, GCancellable *cancellable,
- GAsyncReadyCallback callback, gpointer user_data);
- GList *gck_enumerator_next_finish (GckEnumerator *self, GAsyncResult *result, GError **error);
- void gck_list_unref_free (GList *reflist);
- GList *gck_modules_get_slots (GList *modules, gboolean token_present);
- void gck_modules_initialize_registered_async (GCancellable *cancellable, GAsyncReadyCallback callback,
- gpointer user_data);
- GList *gck_modules_initialize_registered_finish (GAsyncResult *result, GError **error);
- void gck_object_get_async (GckObject *self, const gulong *attr_types, guint n_attr_types,
- GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data);
- GckAttributes *gck_object_get_finish (GckObject *self, GAsyncResult *result, GError **error);
- void gck_session_login_async (GckSession *self, gulong user_type, const guchar *pin,
- gsize n_pin, GCancellable *cancellable,
- GAsyncReadyCallback callback, gpointer user_data);
- gboolean gck_session_login_finish (GckSession *self, GAsyncResult *result, GError **error);
- GckSlotInfo *gck_slot_get_info (GckSlot *self);
- GckTokenInfo *gck_slot_get_token_info (GckSlot *self);
- void gck_slot_open_session_async (GckSlot *self, GckSessionOptions options, GCancellable *cancellable,
- GAsyncReadyCallback callback, gpointer user_data);
- GckSession *gck_slot_open_session_finish (GckSlot *self, GAsyncResult *result, GError **error);
- void gck_token_info_free (GckTokenInfo *token_info);
- gchar *gck_uri_build (GckUriData *uri_data, GckUriFlags flags);
- void gck_uri_data_free (GckUriData *uri_data);
- GckUriData *gck_uri_parse (const gchar *string, GckUriFlags flags, GError **error);
- gchar *gcr_certificate_get_issuer_name (GcrCertificate *self);
- gchar *gcr_certificate_get_subject_name (GcrCertificate *self);
- GcrCertificate *gcr_simple_certificate_new (const guchar *data, gsize n_data);
- '''
-
- assert(cc.compiles(gcr_src, dependencies: deps), 'gcr support was requested, but the gcr library is not available. Use -Dgcr=false to build without it.')
-
- gcr_dep = declare_dependency(
- dependencies: deps,
- compile_args: cflags
- )
-endif
-config_h.set10('WITH_GCR', enable_gcr)
-
-# introspection support
-enable_introspection = get_option('introspection')
-if enable_introspection
- gir_dep = dependency('gobject-introspection-1.0', version: '>= 0.9.6', required: false)
- assert(gir_dep.found(), 'introspection support was requested, but the gobject-introspection library is not available. Use -Dintrospection=false to build without it.')
-endif
-
more_asserts = get_option('more_asserts')
if more_asserts == 'no'
more_asserts = 0
@@ -456,66 +306,6 @@ install_data(
install_dir: join_paths(nma_datadir, 'GConf', 'gsettings')
)
-# documentation
-enable_gtk_doc = get_option('gtk_doc')
-if enable_gtk_doc
- mod_name = 'libnma'
-
- private_headers = [
- 'nma-cert-chooser-button.h',
- 'nma-cert-chooser-private.h',
- 'nma-pkcs11-cert-chooser-dialog.h',
- 'nma-pkcs11-token-login-dialog.h',
- 'nma-resources.h',
- 'nma-private.h',
- 'nma-version.h',
- ]
-
- private_sources = [
- 'nma-cert-chooser-button.c',
- 'nma-file-cert-chooser.c',
- 'nma-pkcs11-cert-chooser-dialog.c',
- 'nma-pkcs11-cert-chooser.c',
- 'nma-pkcs11-token-login-dialog.c',
- 'nma-resources.c'
- ]
-
- ent_conf = configuration_data()
- ent_conf.set_quoted('PACKAGE', meson.project_name())
- ent_conf.set_quoted('PACKAGE_BUGREPORT', 'https://gitlab.gnome.org/GNOME/network-manager-applet/issues')
- ent_conf.set_quoted('PACKAGE_NAME', nma_name)
- ent_conf.set_quoted('PACKAGE_STRING', '@0@ @1@'.format(nma_name, nma_version))
- ent_conf.set_quoted('PACKAGE_TARNAME', meson.project_name())
- ent_conf.set_quoted('PACKAGE_URL', '')
- ent_conf.set_quoted('PACKAGE_VERSION', nma_version)
-
- ent = 'gtkdocentities.ent'
-
- configure_file(
- input: ent + '.in',
- output: ent,
- configuration: ent_conf
- )
-
- doc_path = join_paths(nma_datadir, 'gtk-doc', 'html', mod_name)
-
- gnome.gtkdoc(
- mod_name,
- main_xml: mod_name + '-docs.xml',
- src_dir: libnma_inc,
- dependencies: libnma_dep,
- scan_args: [
- '--rebuild-types',
- '--rebuild-sections',
- '--ignore-headers=' + ' '.join(private_headers)
- ],
- mkdb_args: '--ignore-files=' + ' '.join(private_headers + private_sources),
- gobject_typesfile: mod_name + '.types',
- install: true,
- install_dir: doc_path
- )
-endif
-
config = 'config.h'
configure_file(
@@ -530,9 +320,7 @@ meson.add_install_script(
nma_sysconfdir
)
-output = '\n Build legacy library libnm-gtk: ' + enable_libnm_gtk.to_string() + '\n'
-output += ' Build EXPERIMENTAL library libnm-gtk4 for use with GTK4: ' + enable_libnma_gtk4.to_string() + '\n'
-output += ' GCR: ' + enable_gcr.to_string() + '\n'
+output = '\n'
output += ' LTO: ' + get_option('b_lto').to_string() + '\n'
output += ' Linker garbage collection: ' + enable_ld_gc.to_string() + '\n'
output += ' libappindicator: ' + enable_appindicator
diff --git a/meson_options.txt b/meson_options.txt
index eadec332..15f96450 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,13 +1,6 @@
-option('libnm_gtk', type: 'boolean', value: false, description: 'build legacy library libnm-gtk which depends on libnm-glib/libnm-util/dbus-glib')
-option('libnma_gtk4', type: 'boolean', value: false, description: 'build EXPERIMENTAL library libnma-gtk4 for use with GTK4')
option('appindicator', type: 'string', value: 'no', description: 'Build with lib(ayatana-)appindicator support in addition to xembed systray support (no|yes|auto|ayatana|ubuntu). Default is "no", "yes" is an alias for "auto".')
option('wwan', type: 'boolean', value: true, description: 'Enable WWAN support.')
option('selinux', type: 'boolean', value: true, description: 'Enable support for adjusting SELinux labels in configuration editor.')
option('team', type: 'boolean', value: true, description: 'Enable team configuration editor.')
-option('gcr', type: 'boolean', value: true, description: 'Enable advanced certificate chooser.')
option('more_asserts', type: 'string', value: '0', description: 'Enable more assertions for debugging.')
-option('iso_codes', type: 'boolean', value: true, description: 'check for iso-codes at build-time')
-option('mobile_broadband_provider_info', type: 'boolean', value: true, description: 'check for mobile-broadband-provider-info at build-time')
option('ld_gc', type: 'boolean', value: true, description: 'Enable garbage collection of unused symbols on linking')
-option('gtk_doc', type: 'boolean', value: true, description: 'use gtk-doc to build documentation')
-option('introspection', type: 'boolean', value: true, description: 'Enable introspection for this build')
diff --git a/po/POTFILES.in b/po/POTFILES.in
index c08b9128..3803b199 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -80,30 +80,6 @@ src/connection-editor/vpn-helpers.c
src/ethernet-dialog.c
src/gsm-unlock.ui
src/info.ui
-src/libnma/nma-bar-code-widget.c
-src/libnma/nma-bar-code-widget.ui
-src/libnma/nma-file-cert-chooser.c
-src/libnma/nma-mobile-providers.c
-src/libnma/nma-mobile-wizard.c
-src/libnma/nma-mobile-wizard.ui
-src/libnma/nma-cert-chooser-button.c
-src/libnma/nma-pkcs11-cert-chooser.c
-src/libnma/nma-pkcs11-cert-chooser-dialog.c
-src/libnma/nma-pkcs11-cert-chooser-dialog.ui
-src/libnma/nma-pkcs11-token-login-dialog.c
-src/libnma/nma-pkcs11-token-login-dialog.ui
-src/libnma/nma-ui-utils.c
-src/libnma/nma-vpn-password-dialog.c
-src/libnma/nma-vpn-password-dialog.ui
-src/libnma/nma-wifi-dialog.c
-src/libnma/wifi.ui
-src/libnm-gtk/nm-mobile-providers.c
-src/libnm-gtk/nm-mobile-wizard.c
-src/libnm-gtk/nm-ui-utils.c
-src/libnm-gtk/nm-vpn-password-dialog.c
-src/libnm-gtk/nm-wifi-dialog.c
-src/libnm-gtk/tests/test-mobile-providers.c
-src/libnm-gtk/wifi.ui
src/main.c
src/mb-menu-item.c
src/mobile-helpers.c
diff --git a/src/libnm-gtk/check-exports.sh b/src/libnm-gtk/check-exports.sh
deleted file mode 100755
index 70b14a73..00000000
--- a/src/libnm-gtk/check-exports.sh
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/bin/sh
-
-LC_ALL=C
-export LC_ALL
-
-stat=0
-so="$1"
-def="$2"
-PATTERN="_ANCHOR_"
-
-TMPFILE="$(mktemp .nm-check-exports.XXXXXX)"
-
-
-get_syms() {
- ${NM:-nm} "$1" |
- sed -n 's/^[[:xdigit:]]\+ [DT] //p' |
- sort
-}
-
-get_1_0_0_syms() {
- cat <<SYMBOLS
-nma_country_info_get_country_code
-nma_country_info_get_country_name
-nma_country_info_get_providers
-nma_country_info_get_type
-nma_country_info_ref
-nma_country_info_unref
-nma_mobile_access_method_get_3gpp_apn
-nma_mobile_access_method_get_dns
-nma_mobile_access_method_get_family
-nma_mobile_access_method_get_gateway
-nma_mobile_access_method_get_name
-nma_mobile_access_method_get_password
-nma_mobile_access_method_get_type
-nma_mobile_access_method_get_username
-nma_mobile_access_method_ref
-nma_mobile_access_method_unref
-nma_mobile_provider_get_3gpp_mcc_mnc
-nma_mobile_provider_get_cdma_sid
-nma_mobile_provider_get_methods
-nma_mobile_provider_get_name
-nma_mobile_provider_get_type
-nma_mobile_provider_ref
-nma_mobile_providers_database_dump
-nma_mobile_providers_database_get_countries
-nma_mobile_providers_database_get_type
-nma_mobile_providers_database_lookup_3gpp_mcc_mnc
-nma_mobile_providers_database_lookup_cdma_sid
-nma_mobile_providers_database_lookup_country
-nma_mobile_providers_database_new
-nma_mobile_providers_database_new_finish
-nma_mobile_providers_database_new_sync
-nma_mobile_providers_split_3gpp_mcc_mnc
-nma_mobile_provider_unref
-nma_mobile_wizard_destroy
-nma_mobile_wizard_new
-nma_mobile_wizard_present
-nma_utils_disambiguate_device_names
-nma_utils_get_connection_device_name
-nma_utils_get_device_description
-nma_utils_get_device_generic_type_name
-nma_utils_get_device_product
-nma_utils_get_device_type_name
-nma_utils_get_device_vendor
-nma_vpn_password_dialog_focus_password
-nma_vpn_password_dialog_focus_password_secondary
-nma_vpn_password_dialog_get_password
-nma_vpn_password_dialog_get_password_secondary
-nma_vpn_password_dialog_get_type
-nma_vpn_password_dialog_new
-nma_vpn_password_dialog_run_and_block
-nma_vpn_password_dialog_set_password
-nma_vpn_password_dialog_set_password_label
-nma_vpn_password_dialog_set_password_secondary
-nma_vpn_password_dialog_set_password_secondary_label
-nma_vpn_password_dialog_set_show_password
-nma_vpn_password_dialog_set_show_password_secondary
-nma_wifi_dialog_get_connection
-nma_wifi_dialog_get_nag_ignored
-nma_wifi_dialog_get_type
-nma_wifi_dialog_nag_user
-nma_wifi_dialog_new
-nma_wifi_dialog_new_for_create
-nma_wifi_dialog_new_for_hidden
-nma_wifi_dialog_new_for_other
-nma_wifi_dialog_set_nag_ignored
-nma_wireless_dialog_get_connection
-nma_wireless_dialog_get_type
-nma_wireless_dialog_new
-nma_wireless_dialog_new_for_create
-nma_wireless_dialog_new_for_other
-SYMBOLS
- }
-
-get_syms_from_def() {
- (sed -n 's/^\t\(\([_a-zA-Z0-9]\+\)\|#\s*\([_a-zA-Z0-9]\+@@\?[_a-zA-Z0-9]\+\)\);$/\2\3/p' "$1";
- get_1_0_0_syms) |
- sort
-}
-
-anchor() {
- sed "s/.*/$PATTERN\0$PATTERN/"
-}
-
-unanchor() {
- sed "s/^$PATTERN\(.*\)$PATTERN\$/\1/"
-}
-
-
-get_syms "$so" | anchor > "$TMPFILE"
-WRONG="$(get_syms_from_def "$def" | anchor | grep -F -f - "$TMPFILE" -v)"
-RESULT=$?
-if [ $RESULT -eq 0 ]; then
- stat=1
- echo ">>library \"$so\" exports symbols that are not in linker script \"$def\":"
- echo "$WRONG" | unanchor | nl
-fi
-
-get_syms_from_def "$def" | anchor > "$TMPFILE"
-WRONG="$(get_syms "$so" | anchor | grep -F -f - "$TMPFILE" -v)"
-RESULT=$?
-if [ $RESULT -eq 0 ]; then
- stat=1
- echo ">>linker script \"$def\" contains symbols that are not exported by library \"$so\":"
- echo "$WRONG" | unanchor | nl
-fi
-
-rm -rf "$TMPFILE"
-exit $stat
-
diff --git a/src/libnm-gtk/examples/mobile-providers.js b/src/libnm-gtk/examples/mobile-providers.js
deleted file mode 100644
index 0cf6fc8b..00000000
--- a/src/libnm-gtk/examples/mobile-providers.js
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/gjs
-
-//
-// This example shows how to use the mobile providers database code from
-// within Javascript through gobject-introspection.
-//
-
-const NMGtk = imports.gi.NMGtk;
-
-var mpd = new NMGtk.MobileProvidersDatabase();
-try {
- mpd.init(null);
-
- let provider = mpd.lookup_3gpp_mcc_mnc('21403');
- if (provider)
- log ('Provider: ' + provider.get_name());
- else
- log ('Unknown provider');
-} catch (e) {
- logError (e, 'Error while reading database');
-}
-
-
diff --git a/src/libnm-gtk/init.c b/src/libnm-gtk/init.c
deleted file mode 100644
index 2a267f99..00000000
--- a/src/libnm-gtk/init.c
+++ /dev/null
@@ -1,23 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-
-/*
- * Copyright 2014 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <libintl.h>
-
-static void __attribute__((constructor))
-_libnm_gtk_init (void)
-{
- static gboolean initialized = FALSE;
-
- if (initialized)
- return;
- initialized = TRUE;
-
- bindtextdomain (GETTEXT_PACKAGE, NMALOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-}
-
diff --git a/src/libnm-gtk/libnm-gtk.pc.in b/src/libnm-gtk/libnm-gtk.pc.in
deleted file mode 100644
index cd2abda3..00000000
--- a/src/libnm-gtk/libnm-gtk.pc.in
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-includedir=@includedir@
-libdir=@libdir@
-nmversion=0.9.10
-
-Name: libnm-gtk
-Description: NetworkManager UI utilities (libnm-glib version)
-Version: @PACKAGE_VERSION@
-Requires: NetworkManager >= ${nmversion} libnm-util >= ${nmversion} libnm-glib >= ${nmversion} gtk+-3.0 >= 3.4
-Cflags: -I${includedir}/libnm-gtk
-Libs: -L${libdir} -lnm-gtk
diff --git a/src/libnm-gtk/libnm-gtk.ver b/src/libnm-gtk/libnm-gtk.ver
deleted file mode 100644
index 8cae91d0..00000000
--- a/src/libnm-gtk/libnm-gtk.ver
+++ /dev/null
@@ -1,45 +0,0 @@
-libnm_gtk_1_0_6 {
-global:
- nma_utils_menu_to_secret_flags;
- nma_utils_setup_password_storage;
- nma_utils_update_password_storage;
- nma_vpn_password_dialog_focus_password_ternary;
- nma_vpn_password_dialog_get_password_ternary;
- nma_vpn_password_dialog_set_password_ternary;
- nma_vpn_password_dialog_set_password_ternary_label;
- nma_vpn_password_dialog_set_show_password_ternary;
-local:
- [^n]*;
- n[^m]*;
- nm[^a]*;
- nma[^_]*;
-};
-
-libnm_gtk_1_8_0 {
-global:
- nma_cert_chooser_add_to_size_group;
- nma_cert_chooser_get_cert;
- nma_cert_chooser_get_cert_password;
- nma_cert_chooser_get_cert_password_flags;
- nma_cert_chooser_get_cert_uri;
- nma_cert_chooser_get_key;
- nma_cert_chooser_get_key_password;
- nma_cert_chooser_get_key_password_flags;
- nma_cert_chooser_get_key_uri;
- nma_cert_chooser_get_type;
- nma_cert_chooser_new;
- nma_cert_chooser_set_cert;
- nma_cert_chooser_set_cert_password;
- nma_cert_chooser_set_cert_uri;
- nma_cert_chooser_set_key;
- nma_cert_chooser_set_key_password;
- nma_cert_chooser_set_key_uri;
- nma_cert_chooser_setup_cert_password_storage;
- nma_cert_chooser_setup_key_password_storage;
- nma_cert_chooser_update_cert_password_storage;
- nma_cert_chooser_update_key_password_storage;
- nma_cert_chooser_validate;
-local:
- nma_file_cert_chooser_*;
- nma_cert_chooser_vtable_*;
-} libnm_gtk_1_0_6;
diff --git a/src/libnm-gtk/meson.build b/src/libnm-gtk/meson.build
deleted file mode 100644
index 96c3c8bd..00000000
--- a/src/libnm-gtk/meson.build
+++ /dev/null
@@ -1,147 +0,0 @@
-lib_name = 'libnm-gtk'
-
-gir_headers = files(
- 'nm-cert-chooser.h',
- 'nm-mobile-providers.h',
- 'nm-mobile-wizard.h',
- 'nm-ui-utils.h',
- 'nm-vpn-password-dialog.h',
- 'nm-wifi-dialog.h'
-)
-
-headers = gir_headers + files('nm-wireless-dialog.h')
-
-install_headers(
- headers,
- subdir: lib_name
-)
-
-gir_sources = cert_chooser_sources + files(
- 'init.c',
- 'nm-mobile-providers.c',
- 'nm-mobile-wizard.c',
- 'nm-ui-utils.c',
- 'nm-vpn-password-dialog.c',
- 'nm-wifi-dialog.c'
-)
-
-sources = [version_header] + gir_sources + files('nm-wireless-dialog.c')
-
-resource_data = files('wifi.ui')
-
-sources += gnome.compile_resources(
- 'nm-resources',
- 'nm.gresource.xml',
- dependencies: resource_data
-)
-
-incs = [
- top_inc,
- shared_inc,
- src_inc,
- libnma_inc,
- wireless_security_inc
-]
-
-deps = [
- gtk_dep,
- gudev_dep,
- libnm_glib_dep,
- libutils_libnm_glib_dep,
-]
-
-cflags = [
- '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB_LEGACY',
- '-DBINDIR="@0@"'.format(nma_bindir),
- '-DDATADIR="@0@"'.format(nma_datadir),
- '-DLIBEXECDIR="@0@"'.format(nma_libexecdir),
- '-DNMALOCALEDIR="@0@"'.format(nma_localedir),
- '-DSYSCONFDIR="@0@"'.format(nma_sysconfdir),
- '-DAUTOSTARTDIR="@0@"'.format(nma_autostartdir),
- '-DICONDIR="@0@"'.format(nma_icondir)
-]
-
-symbol_map = join_paths(meson.current_source_dir(), 'libnm-gtk.ver')
-
-libnm_gtk = shared_library(
- 'nm-gtk',
- sources: sources,
- version: libversion,
- include_directories: incs,
- dependencies: deps,
- c_args: cflags,
- link_args: '-Wl,--version-script,' + symbol_map,
- link_depends: symbol_map,
- link_whole: libwireless_security_libnm_glib,
- install: true,
- install_dir: nma_libdir
-)
-
-pkg.generate(
- libraries: libnm_gtk,
- version: nma_version,
- name: lib_name,
- description: 'NetworkManager UI utilities (libnm-glib version)',
- filebase: lib_name,
- subdirs: lib_name,
- requires: [
- 'NetworkManager ' + nm_req_version,
- 'libnm-util ' + nm_req_version,
- 'libnm-glib ' + nm_req_version,
- 'gtk+-3.0 ' + gtk_req_version
- ],
- variables: 'exec_prefix=' + nma_prefix,
- install_dir: join_paths(nma_libdir, 'pkgconfig')
-)
-
-if enable_introspection
- gir_incs = [
- 'Gtk-3.0',
- 'NetworkManager-1.0',
- 'NMClient-1.0'
- ]
-
- gir_dir = join_paths(nma_datadir, 'gir-' + nma_gir_version)
- typelib_dir = join_paths(nma_libdir, 'girepository-' + nma_gir_version)
-
- # FIXME: the generated gir file is slightly different
- gnome.generate_gir(
- libnm_gtk,
- sources: gir_sources + gir_headers,
- nsversion: nma_gir_version,
- namespace: nma_gtk_gir_ns,
- includes: gir_incs,
- identifier_prefix: nma_gir_prefix,
- symbol_prefix: nma_gir_prefix.to_lower(),
- export_packages: lib_name,
- install: true,
- install_dir_gir: gir_dir,
- install_dir_typelib: typelib_dir
- )
-endif
-
-test_unit = 'test-mobile-providers'
-
-deps = [
- gtk_dep,
- libnm_glib_dep
-]
-
-cflags = '-DTEST_DATA_DIR="@0@"'.format(join_paths(meson.current_source_dir(), 'tests'))
-
-exe = executable(
- test_unit,
- 'tests/' + test_unit + '.c',
- include_directories: incs,
- dependencies: deps,
- c_args: cflags,
- link_with: libnm_gtk
-)
-
-test(test_unit, exe)
-
-run_target(
- 'check-local-exports-libnm-gtk',
- command: [find_program('check-exports.sh'), libnm_gtk.full_path(), symbol_map],
- depends: libnm_gtk
-)
diff --git a/src/libnm-gtk/nm-cert-chooser.h b/src/libnm-gtk/nm-cert-chooser.h
deleted file mode 100644
index d94c724b..00000000
--- a/src/libnm-gtk/nm-cert-chooser.h
+++ /dev/null
@@ -1,203 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2015,2017 Red Hat, Inc.
- */
-
-#ifndef NMA_CERT_CHOOSER_H
-#define NMA_CERT_CHOOSER_H
-
-#include <gtk/gtk.h>
-#include <NetworkManager.h>
-#include <nm-connection.h>
-
-G_BEGIN_DECLS
-
-#define NMA_TYPE_CERT_CHOOSER (nma_cert_chooser_get_type ())
-#define NMA_CERT_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_CERT_CHOOSER, NMACertChooser))
-#define NMA_IS_CERT_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_CERT_CHOOSER))
-#define NMA_CERT_CHOOSER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NMA_TYPE_CERT_CHOOSER, NMACertChooserInterface))
-
-typedef struct _NMACertChooser NMACertChooser;
-
-/**
- * NMACertChooserInterface:
- * @parent_iface: The parent interface.
- * @set_cert: Set the certificate location for the chooser button.
- * @get_cert: Get the real certificate location from the chooser button along
- * with the scheme.
- * @set_cert_password: Set the password or a PIN that might be required to
- * access the certificate.
- * @get_cert_password: Obtain the password or a PIN that was be required to
- * access the certificate.
- * @set_key: Set the key location for the chooser button.
- * @get_key: Get the real key location from the chooser button along with the
- * scheme.
- * @set_key_password: Set the password or a PIN that might be required to
- * access the key.
- * @get_key_password: Obtain the password or a PIN that was be required to
- * access the key.
- * @add_to_size_group: Add the labels to the specified size group so that they
- * are aligned.
- * @validate: Validate whether the chosen values make sense.
- * @setup_cert_password_storage: Set up certificate password storage.
- * @update_cert_password_storage: Update certificate password storage.
- * @get_cert_password_flags: Return secret flags corresponding to the
- * certificate password if one is present.
- * @setup_key_password_storage: Set up key password storage.
- * @update_key_password_storage: Update key password storage.
- * @get_key_password_flags: Returns secret flags corresponding to the key
- * password if one is present.
- * @cert_validate: Emitted when the certificate needs validation.
- * @cert_password_validate: Emitted when the certificate password needs
- * validation.
- * @key_validate: Emitted when the key needs validation.
- * @key_password_validate: Emitted when the key password needs validation.
- * @changed: Emitted when anything changes in the certificate chooser.
- *
- * Since: 1.8.0
- */
-typedef struct {
- GTypeInterface parent_iface;
-
- /* virtual methods */
- void (*set_cert) (NMACertChooser *cert_chooser,
- const gchar *value,
- NMSetting8021xCKScheme scheme);
- gchar *(*get_cert) (NMACertChooser *cert_chooser,
- NMSetting8021xCKScheme *scheme);
- void (*set_cert_password) (NMACertChooser *cert_chooser,
- const gchar *password);
- const gchar *(*get_cert_password) (NMACertChooser *cert_chooser);
- void (*set_key) (NMACertChooser *cert_chooser,
- const gchar *value,
- NMSetting8021xCKScheme scheme);
- gchar *(*get_key) (NMACertChooser *cert_chooser,
- NMSetting8021xCKScheme *scheme);
- void (*set_key_password) (NMACertChooser *cert_chooser,
- const gchar *password);
- const gchar *(*get_key_password) (NMACertChooser *cert_chooser);
-
- void (*add_to_size_group) (NMACertChooser *cert_chooser,
- GtkSizeGroup *group);
- gboolean (*validate) (NMACertChooser *cert_chooser,
- GError **error);
-
- void (*setup_cert_password_storage) (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode);
- void (*update_cert_password_storage) (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name);
- NMSettingSecretFlags (*get_cert_password_flags) (NMACertChooser *cert_chooser);
- void (*setup_key_password_storage) (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode);
- void (*update_key_password_storage) (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name);
- NMSettingSecretFlags (*get_key_password_flags) (NMACertChooser *cert_chooser);
-
- /* signals */
- GError *(*cert_validate) (NMACertChooser *cert_chooser);
- GError *(*cert_password_validate) (NMACertChooser *cert_chooser);
- GError *(*key_validate) (NMACertChooser *cert_chooser);
- GError *(*key_password_validate) (NMACertChooser *cert_chooser);
- void (*changed) (NMACertChooser *cert_chooser);
-} NMACertChooserInterface;
-
-/**
- * NMACertChooserFlags:
- * @NMA_CERT_CHOOSER_FLAG_CERT: Only pick a certificate, not a key
- * @NMA_CERT_CHOOSER_FLAG_PASSWORDS: Hide all controls but the secrets entries
- * @NMA_CERT_CHOOSER_FLAG_PEM: Ensure the chooser only selects regular PEM files
- *
- * Flags that controls what is the certificate chooser button able to pick.
- * Currently only local files are supported, but might be extended to use URIs,
- * such as PKCS\#11 certificate URIs in future as well.
- *
- * Since: 1.8.0
- */
-typedef enum {
- NMA_CERT_CHOOSER_FLAG_CERT = 0x1,
- NMA_CERT_CHOOSER_FLAG_PASSWORDS = 0x2,
- NMA_CERT_CHOOSER_FLAG_PEM = 0x4,
-} NMACertChooserFlags;
-
-GType nma_cert_chooser_get_type (void);
-
-void nma_cert_chooser_set_cert (NMACertChooser *cert_chooser,
- const gchar *value,
- NMSetting8021xCKScheme scheme);
-
-gchar *nma_cert_chooser_get_cert (NMACertChooser *cert_chooser,
- NMSetting8021xCKScheme *scheme);
-
-void nma_cert_chooser_set_cert_password (NMACertChooser *cert_chooser,
- const gchar *password);
-
-const gchar *nma_cert_chooser_get_cert_password (NMACertChooser *cert_chooser);
-
-void nma_cert_chooser_set_key (NMACertChooser *cert_chooser,
- const gchar *value,
- NMSetting8021xCKScheme scheme);
-
-gchar *nma_cert_chooser_get_key (NMACertChooser *cert_chooser,
- NMSetting8021xCKScheme *scheme);
-
-void nma_cert_chooser_set_key_password (NMACertChooser *cert_chooser,
- const gchar *password);
-
-const gchar *nma_cert_chooser_get_key_password (NMACertChooser *cert_chooser);
-
-GtkWidget *nma_cert_chooser_new (const gchar *title,
- NMACertChooserFlags flags);
-
-
-void nma_cert_chooser_add_to_size_group (NMACertChooser *cert_chooser,
- GtkSizeGroup *group);
-
-gboolean nma_cert_chooser_validate (NMACertChooser *cert_chooser,
- GError **error);
-
-void nma_cert_chooser_setup_cert_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode);
-
-void nma_cert_chooser_update_cert_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name);
-
-NMSettingSecretFlags nma_cert_chooser_get_cert_password_flags (NMACertChooser *cert_chooser);
-
-void nma_cert_chooser_setup_key_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode);
-
-void nma_cert_chooser_update_key_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name);
-
-NMSettingSecretFlags nma_cert_chooser_get_key_password_flags (NMACertChooser *cert_chooser);
-
-G_END_DECLS
-
-#endif /* NMA_CERT_CHOOSER_H */
diff --git a/src/libnm-gtk/nm-mobile-providers.c b/src/libnm-gtk/nm-mobile-providers.c
deleted file mode 100644
index 2034d3bc..00000000
--- a/src/libnm-gtk/nm-mobile-providers.c
+++ /dev/null
@@ -1,1553 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/*
- * Copyright (C) 2009 Novell, Inc.
- * Author: Tambet Ingo (tambet@gmail.com).
- *
- * Copyright (C) 2009 - 2012 Red Hat, Inc.
- * Copyright (C) 2012 Lanedo GmbH
- */
-
-#include "nm-default.h"
-
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-#include "nm-mobile-providers.h"
-
-#define ISO_3166_COUNTRY_CODES ISO_CODES_PREFIX"/share/xml/iso-codes/iso_3166.xml"
-#define ISO_CODES_LOCALESDIR ISO_CODES_PREFIX"/share/locale"
-
-/******************************************************************************/
-/* Access method type */
-
-G_DEFINE_BOXED_TYPE (NMAMobileAccessMethod,
- nma_mobile_access_method,
- nma_mobile_access_method_ref,
- nma_mobile_access_method_unref)
-
-struct _NMAMobileAccessMethod {
- volatile gint refs;
-
- char *name;
- /* maps lang (char *) -> name (char *) */
- GHashTable *lcl_names;
-
- char *username;
- char *password;
- char *gateway;
- GPtrArray *dns; /* GPtrArray of 'char *' */
-
- /* Only used with 3GPP family type providers */
- char *apn;
-
- NMAMobileFamily family;
-};
-
-static NMAMobileAccessMethod *
-access_method_new (void)
-{
- NMAMobileAccessMethod *method;
-
- method = g_slice_new0 (NMAMobileAccessMethod);
- method->refs = 1;
- method->lcl_names = g_hash_table_new_full (g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- (GDestroyNotify) g_free);
-
- return method;
-}
-
-NMAMobileAccessMethod *
-nma_mobile_access_method_ref (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
- g_return_val_if_fail (method->refs > 0, NULL);
-
- g_atomic_int_inc (&method->refs);
-
- return method;
-}
-
-void
-nma_mobile_access_method_unref (NMAMobileAccessMethod *method)
-{
- g_return_if_fail (method != NULL);
- g_return_if_fail (method->refs > 0);
-
- if (g_atomic_int_dec_and_test (&method->refs)) {
- g_free (method->name);
- g_hash_table_destroy (method->lcl_names);
- g_free (method->username);
- g_free (method->password);
- g_free (method->gateway);
- g_free (method->apn);
-
- if (method->dns)
- g_ptr_array_unref (method->dns);
-
- g_slice_free (NMAMobileAccessMethod, method);
- }
-}
-
-/**
- * nma_mobile_access_method_get_name:
- *
- * Returns: (transfer none): the name of the method.
- */
-const gchar *
-nma_mobile_access_method_get_name (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
-
- return method->name;
-}
-
-/**
- * nma_mobile_access_method_get_username:
- *
- * Returns: (transfer none): the username.
- */
-const gchar *
-nma_mobile_access_method_get_username (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
-
- return method->username;
-}
-
-/**
- * nma_mobile_access_method_get_password:
- *
- * Returns: (transfer none): the password.
- */
-const gchar *
-nma_mobile_access_method_get_password (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
-
- return method->password;
-}
-
-/**
- * nma_mobile_access_method_get_gateway:
- *
- * Returns: (transfer none): the gateway.
- */
-const gchar *
-nma_mobile_access_method_get_gateway (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
-
- return method->gateway;
-}
-
-/**
- * nma_mobile_access_method_get_dns:
- *
- * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): the list of DNS.
- */
-const gchar **
-nma_mobile_access_method_get_dns (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
-
- return method->dns ? (const gchar **)method->dns->pdata : NULL;
-}
-
-/**
- * nma_mobile_access_method_get_3gpp_apn:
- *
- * Returns: (transfer none): the 3GPP APN.
- */
-const gchar *
-nma_mobile_access_method_get_3gpp_apn (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
-
- return method->apn;
-}
-
-/**
- * nma_mobile_access_method_get_family:
- *
- * Returns: a #NMAMobileFamily.
- */
-NMAMobileFamily
-nma_mobile_access_method_get_family (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NMA_MOBILE_FAMILY_UNKNOWN);
-
- return method->family;
-}
-
-/******************************************************************************/
-/* Mobile provider type */
-
-G_DEFINE_BOXED_TYPE (NMAMobileProvider,
- nma_mobile_provider,
- nma_mobile_provider_ref,
- nma_mobile_provider_unref)
-
-struct _NMAMobileProvider {
- volatile gint refs;
-
- char *name;
- /* maps lang (char *) -> name (char *) */
- GHashTable *lcl_names;
-
- GSList *methods; /* GSList of NmaMobileAccessMethod */
-
- GPtrArray *mcc_mnc; /* GPtrArray of strings */
- GArray *cdma_sid; /* GArray of guint32 */
-};
-
-static NMAMobileProvider *
-provider_new (void)
-{
- NMAMobileProvider *provider;
-
- provider = g_slice_new0 (NMAMobileProvider);
- provider->refs = 1;
- provider->lcl_names = g_hash_table_new_full (g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- (GDestroyNotify) g_free);
-
- return provider;
-}
-
-NMAMobileProvider *
-nma_mobile_provider_ref (NMAMobileProvider *provider)
-{
- g_return_val_if_fail (provider != NULL, NULL);
- g_return_val_if_fail (provider->refs > 0, NULL);
-
- g_atomic_int_inc (&provider->refs);
-
- return provider;
-}
-
-void
-nma_mobile_provider_unref (NMAMobileProvider *provider)
-{
- if (g_atomic_int_dec_and_test (&provider->refs)) {
- g_free (provider->name);
- g_hash_table_destroy (provider->lcl_names);
-
- g_slist_free_full (provider->methods, (GDestroyNotify) nma_mobile_access_method_unref);
-
- if (provider->mcc_mnc)
- g_ptr_array_unref (provider->mcc_mnc);
-
- if (provider->cdma_sid)
- g_array_unref (provider->cdma_sid);
-
- g_slice_free (NMAMobileProvider, provider);
- }
-}
-
-/**
- * nma_mobile_provider_get_name:
- *
- * Returns: (transfer none): the name of the provider.
- */
-const gchar *
-nma_mobile_provider_get_name (NMAMobileProvider *provider)
-{
- g_return_val_if_fail (provider != NULL, NULL);
-
- return provider->name;
-}
-
-/**
- * nma_mobile_provider_get_methods:
- * @provider: a #NMAMobileProvider
- *
- * Returns: (element-type NMGtk.MobileAccessMethod) (transfer none): the
- * list of #NMAMobileAccessMethod this provider exposes.
- */
-GSList *
-nma_mobile_provider_get_methods (NMAMobileProvider *provider)
-{
- g_return_val_if_fail (provider != NULL, NULL);
-
- return provider->methods;
-}
-
-/**
- * nma_mobile_provider_get_3gpp_mcc_mnc:
- * @provider: a #NMAMobileProvider
- *
- * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): a
- * list of strings with the MCC and MNC codes this provider exposes.
- */
-const gchar **
-nma_mobile_provider_get_3gpp_mcc_mnc (NMAMobileProvider *provider)
-{
- g_return_val_if_fail (provider != NULL, NULL);
-
- return provider->mcc_mnc ? (const gchar **)provider->mcc_mnc->pdata : NULL;
-}
-
-/**
- * nma_mobile_provider_get_cdma_sid:
- * @provider: a #NMAMobileProvider
- *
- * Returns: (transfer none) (array zero-terminated=1) (element-type guint32): the
- * list of CDMA SIDs this provider exposes
- */
-const guint32 *
-nma_mobile_provider_get_cdma_sid (NMAMobileProvider *provider)
-{
- g_return_val_if_fail (provider != NULL, NULL);
-
- return provider->cdma_sid ? (const guint32 *)provider->cdma_sid->data : NULL;
-}
-
-/******************************************************************************/
-/* Country Info type */
-
-G_DEFINE_BOXED_TYPE (NMACountryInfo,
- nma_country_info,
- nma_country_info_ref,
- nma_country_info_unref)
-
-struct _NMACountryInfo {
- volatile gint refs;
-
- char *country_code;
- char *country_name;
- GSList *providers;
-};
-
-static NMACountryInfo *
-country_info_new (const char *country_code,
- const gchar *country_name)
-{
- NMACountryInfo *country_info;
-
- country_info = g_slice_new0 (NMACountryInfo);
- country_info->refs = 1;
- country_info->country_code = g_strdup (country_code);
- country_info->country_name = g_strdup (country_name);
- return country_info;
-}
-
-NMACountryInfo *
-nma_country_info_ref (NMACountryInfo *country_info)
-{
- g_return_val_if_fail (country_info != NULL, NULL);
- g_return_val_if_fail (country_info->refs > 0, NULL);
-
- g_atomic_int_inc (&country_info->refs);
-
- return country_info;
-}
-
-void
-nma_country_info_unref (NMACountryInfo *country_info)
-{
- if (g_atomic_int_dec_and_test (&country_info->refs)) {
- g_free (country_info->country_code);
- g_free (country_info->country_name);
- g_slist_free_full (country_info->providers,
- (GDestroyNotify) nma_mobile_provider_unref);
- g_slice_free (NMACountryInfo, country_info);
- }
-}
-
-/**
- * nma_country_info_get_country_code:
- *
- * Returns: (transfer none): the code of the country.
- */
-const gchar *
-nma_country_info_get_country_code (NMACountryInfo *country_info)
-{
- g_return_val_if_fail (country_info != NULL, NULL);
-
- return country_info->country_code;
-}
-
-/**
- * nma_country_info_get_country_name:
- *
- * Returns: (transfer none): the name of the country.
- */
-const gchar *
-nma_country_info_get_country_name (NMACountryInfo *country_info)
-{
- g_return_val_if_fail (country_info != NULL, NULL);
-
- return country_info->country_name;
-}
-
-/**
- * nma_country_info_get_providers:
- *
- * Returns: (element-type NMGtk.MobileProvider) (transfer none): the
- * list of #NMAMobileProvider this country exposes.
- */
-GSList *
-nma_country_info_get_providers (NMACountryInfo *country_info)
-{
- g_return_val_if_fail (country_info != NULL, NULL);
-
- return country_info->providers;
-}
-
-/******************************************************************************/
-/* XML Parser for iso_3166.xml */
-
-static void
-iso_3166_parser_start_element (GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer data,
- GError **error)
-{
- int i;
- const char *country_code = NULL;
- const char *common_name = NULL;
- const char *name = NULL;
- GHashTable *table = (GHashTable *) data;
-
- if (!strcmp (element_name, "iso_3166_entry")) {
- NMACountryInfo *country_info;
-
- for (i = 0; attribute_names && attribute_names[i]; i++) {
- if (!strcmp (attribute_names[i], "alpha_2_code"))
- country_code = attribute_values[i];
- else if (!strcmp (attribute_names[i], "common_name"))
- common_name = attribute_values[i];
- else if (!strcmp (attribute_names[i], "name"))
- name = attribute_values[i];
- }
- if (!country_code) {
- g_warning ("%s: missing mandatory 'alpha_2_code' atribute in '%s'"
- " element.", __func__, element_name);
- return;
- }
- if (!name) {
- g_warning ("%s: missing mandatory 'name' atribute in '%s'"
- " element.", __func__, element_name);
- return;
- }
-
- country_info = country_info_new (country_code,
- dgettext ("iso_3166", common_name ? common_name : name));
-
- g_hash_table_insert (table, g_strdup (country_code), country_info);
- }
-}
-
-static const GMarkupParser iso_3166_parser = {
- iso_3166_parser_start_element,
- NULL, /* end element */
- NULL, /* text */
- NULL, /* passthrough */
- NULL /* error */
-};
-
-static GHashTable *
-read_country_codes (const gchar *country_codes_file,
- GCancellable *cancellable,
- GError **error)
-{
- GHashTable *table = NULL;
- GMarkupParseContext *ctx;
- char *buf;
- gsize buf_len;
-
- /* Set domain to iso_3166 for country name translation */
- bindtextdomain ("iso_3166", ISO_CODES_LOCALESDIR);
- bind_textdomain_codeset ("iso_3166", "UTF-8");
-
- if (!g_file_get_contents (country_codes_file, &buf, &buf_len, error)) {
- g_prefix_error (error,
- "Failed to load '%s' from 'iso-codes': ",
- country_codes_file);
- return NULL;
- }
-
- table = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- (GDestroyNotify)nma_country_info_unref);
-
- ctx = g_markup_parse_context_new (&iso_3166_parser, 0, table, NULL);
- if (!g_markup_parse_context_parse (ctx, buf, buf_len, error)) {
- g_prefix_error (error,
- "Failed to parse '%s' from 'iso-codes': ",
- country_codes_file);
- g_hash_table_destroy (table);
- return NULL;
- }
-
- g_markup_parse_context_free (ctx);
- g_free (buf);
- return table;
-}
-
-/******************************************************************************/
-/* XML Parser for serviceproviders.xml */
-
-typedef enum {
- PARSER_TOPLEVEL = 0,
- PARSER_COUNTRY,
- PARSER_PROVIDER,
- PARSER_METHOD_GSM,
- PARSER_METHOD_GSM_APN,
- PARSER_METHOD_CDMA,
- PARSER_ERROR
-} MobileContextState;
-
-typedef struct {
- GHashTable *table;
-
- char *current_country;
- GSList *current_providers;
- NMAMobileProvider *current_provider;
- NMAMobileAccessMethod *current_method;
-
- char *text_buffer;
- MobileContextState state;
-} MobileParser;
-
-static void
-provider_list_free (gpointer data)
-{
- GSList *list = (GSList *) data;
-
- while (list) {
- nma_mobile_provider_unref ((NMAMobileProvider *) list->data);
- list = g_slist_delete_link (list, list);
- }
-}
-
-static void
-parser_toplevel_start (MobileParser *parser,
- const char *name,
- const char **attribute_names,
- const char **attribute_values)
-{
- int i;
-
- if (!strcmp (name, "serviceproviders")) {
- for (i = 0; attribute_names && attribute_names[i]; i++) {
- if (!strcmp (attribute_names[i], "format")) {
- if (strcmp (attribute_values[i], "2.0")) {
- g_warning ("%s: mobile broadband provider database format '%s'"
- " not supported.", __func__, attribute_values[i]);
- parser->state = PARSER_ERROR;
- break;
- }
- }
- }
- } else if (!strcmp (name, "country")) {
- for (i = 0; attribute_names && attribute_names[i]; i++) {
- if (!strcmp (attribute_names[i], "code")) {
- char *country_code;
- NMACountryInfo *country_info;
-
- country_code = g_ascii_strup (attribute_values[i], -1);
- country_info = g_hash_table_lookup (parser->table, country_code);
- /* Ensure we have a country provider for this country code */
- if (!country_info) {
- g_warning ("%s: adding providers for unknown country '%s'", __func__, country_code);
- country_info = country_info_new (country_code, NULL);
- g_hash_table_insert (parser->table, country_code, country_info);
- }
- parser->current_country = country_code;
-
- parser->state = PARSER_COUNTRY;
- break;
- }
- }
- }
-}
-
-static void
-parser_country_start (MobileParser *parser,
- const char *name,
- const char **attribute_names,
- const char **attribute_values)
-{
- if (!strcmp (name, "provider")) {
- parser->state = PARSER_PROVIDER;
- parser->current_provider = provider_new ();
- }
-}
-
-static void
-parser_provider_start (MobileParser *parser,
- const char *name,
- const char **attribute_names,
- const char **attribute_values)
-{
- if (!strcmp (name, "gsm"))
- parser->state = PARSER_METHOD_GSM;
- else if (!strcmp (name, "cdma")) {
- parser->state = PARSER_METHOD_CDMA;
- parser->current_method = access_method_new ();
- }
-}
-
-static void
-parser_gsm_start (MobileParser *parser,
- const char *name,
- const char **attribute_names,
- const char **attribute_values)
-{
- if (!strcmp (name, "network-id")) {
- const char *mcc = NULL, *mnc = NULL;
- int i;
-
- for (i = 0; attribute_names && attribute_names[i]; i++) {
- if (!strcmp (attribute_names[i], "mcc"))
- mcc = attribute_values[i];
- else if (!strcmp (attribute_names[i], "mnc"))
- mnc = attribute_values[i];
-
- if (mcc && strlen (mcc) && mnc && strlen (mnc)) {
- gchar *mccmnc;
-
- if (!parser->current_provider->mcc_mnc)
- parser->current_provider->mcc_mnc = g_ptr_array_new_full (2, g_free);
-
- mccmnc = g_strdup_printf ("%s%s", mcc, mnc);
- g_ptr_array_add (parser->current_provider->mcc_mnc, mccmnc);
- break;
- }
- }
- } else if (!strcmp (name, "apn")) {
- int i;
-
- for (i = 0; attribute_names && attribute_names[i]; i++) {
- if (!strcmp (attribute_names[i], "value")) {
-
- parser->state = PARSER_METHOD_GSM_APN;
- parser->current_method = access_method_new ();
- parser->current_method->apn = g_strstrip (g_strdup (attribute_values[i]));
- break;
- }
- }
- }
-}
-
-static void
-parser_cdma_start (MobileParser *parser,
- const char *name,
- const char **attribute_names,
- const char **attribute_values)
-{
- if (!strcmp (name, "sid")) {
- int i;
-
- for (i = 0; attribute_names && attribute_names[i]; i++) {
- if (!strcmp (attribute_names[i], "value")) {
- guint32 tmp;
-
- errno = 0;
- tmp = (guint32) strtoul (attribute_values[i], NULL, 10);
- if (errno == 0 && tmp > 0) {
- if (!parser->current_provider->cdma_sid)
- parser->current_provider->cdma_sid = g_array_sized_new (TRUE, FALSE, sizeof (guint32), 2);
- g_array_append_val (parser->current_provider->cdma_sid, tmp);
- }
- break;
- }
- }
- }
-}
-
-static void
-mobile_parser_start_element (GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer data,
- GError **error)
-{
- MobileParser *parser = (MobileParser *) data;
-
- if (parser->text_buffer) {
- g_free (parser->text_buffer);
- parser->text_buffer = NULL;
- }
-
- switch (parser->state) {
- case PARSER_TOPLEVEL:
- parser_toplevel_start (parser, element_name, attribute_names, attribute_values);
- break;
- case PARSER_COUNTRY:
- parser_country_start (parser, element_name, attribute_names, attribute_values);
- break;
- case PARSER_PROVIDER:
- parser_provider_start (parser, element_name, attribute_names, attribute_values);
- break;
- case PARSER_METHOD_GSM:
- parser_gsm_start (parser, element_name, attribute_names, attribute_values);
- break;
- case PARSER_METHOD_CDMA:
- parser_cdma_start (parser, element_name, attribute_names, attribute_values);
- break;
- default:
- break;
- }
-}
-
-static void
-parser_country_end (MobileParser *parser,
- const char *name)
-{
- if (!strcmp (name, "country")) {
- NMACountryInfo *country_info;
-
- country_info = g_hash_table_lookup (parser->table, parser->current_country);
- g_assert (country_info);
-
- /* Store providers for this country */
- country_info->providers = parser->current_providers;
-
- g_free (parser->current_country);
- parser->current_country = NULL;
- parser->current_providers = NULL;
- g_free (parser->text_buffer);
- parser->text_buffer = NULL;
- parser->state = PARSER_TOPLEVEL;
- }
-}
-
-static void
-parser_provider_end (MobileParser *parser,
- const char *name)
-{
- if (!strcmp (name, "name")) {
- if (!parser->current_provider->name) {
- /* Use the first one. */
- parser->current_provider->name = parser->text_buffer;
- parser->text_buffer = NULL;
- }
- } else if (!strcmp (name, "provider")) {
- if (parser->current_provider->mcc_mnc)
- g_ptr_array_add (parser->current_provider->mcc_mnc, NULL);
-
- parser->current_provider->methods = g_slist_reverse (parser->current_provider->methods);
-
- parser->current_providers = g_slist_prepend (parser->current_providers, parser->current_provider);
- parser->current_provider = NULL;
- g_free (parser->text_buffer);
- parser->text_buffer = NULL;
- parser->state = PARSER_COUNTRY;
- }
-}
-
-static void
-parser_gsm_end (MobileParser *parser,
- const char *name)
-{
- if (!strcmp (name, "gsm")) {
- g_free (parser->text_buffer);
- parser->text_buffer = NULL;
- parser->state = PARSER_PROVIDER;
- }
-}
-
-static void
-parser_gsm_apn_end (MobileParser *parser,
- const char *name)
-{
- if (!strcmp (name, "name")) {
- if (!parser->current_method->name) {
- /* Use the first one. */
- parser->current_method->name = parser->text_buffer;
- parser->text_buffer = NULL;
- }
- } else if (!strcmp (name, "username")) {
- parser->current_method->username = parser->text_buffer;
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "password")) {
- parser->current_method->password = parser->text_buffer;
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "dns")) {
- if (!parser->current_method->dns)
- parser->current_method->dns = g_ptr_array_new_full (2, g_free);
- g_ptr_array_add (parser->current_method->dns, parser->text_buffer);
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "gateway")) {
- parser->current_method->gateway = parser->text_buffer;
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "apn")) {
- parser->current_method->family = NMA_MOBILE_FAMILY_3GPP;
-
- if (!parser->current_method->name)
- parser->current_method->name = g_strdup (_("Default"));
-
- if (parser->current_method->dns)
- g_ptr_array_add (parser->current_method->dns, NULL);
-
- parser->current_provider->methods = g_slist_prepend (parser->current_provider->methods,
- parser->current_method);
- parser->current_method = NULL;
- g_free (parser->text_buffer);
- parser->text_buffer = NULL;
- parser->state = PARSER_METHOD_GSM;
- }
-}
-
-static void
-parser_cdma_end (MobileParser *parser,
- const char *name)
-{
- if (!strcmp (name, "username")) {
- parser->current_method->username = parser->text_buffer;
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "password")) {
- parser->current_method->password = parser->text_buffer;
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "dns")) {
- if (!parser->current_method->dns)
- parser->current_method->dns = g_ptr_array_new_full (2, g_free);
- g_ptr_array_add (parser->current_method->dns, parser->text_buffer);
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "gateway")) {
- parser->current_method->gateway = parser->text_buffer;
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "cdma")) {
- parser->current_method->family = NMA_MOBILE_FAMILY_CDMA;
-
- if (!parser->current_method->name)
- parser->current_method->name = g_strdup (parser->current_provider->name);
-
- if (parser->current_method->dns)
- g_ptr_array_add (parser->current_method->dns, NULL);
-
- parser->current_provider->methods = g_slist_prepend (parser->current_provider->methods,
- parser->current_method);
- parser->current_method = NULL;
- g_free (parser->text_buffer);
- parser->text_buffer = NULL;
- parser->state = PARSER_PROVIDER;
- }
-}
-
-static void
-mobile_parser_end_element (GMarkupParseContext *context,
- const gchar *element_name,
- gpointer data,
- GError **error)
-{
- MobileParser *parser = (MobileParser *) data;
-
- switch (parser->state) {
- case PARSER_COUNTRY:
- parser_country_end (parser, element_name);
- break;
- case PARSER_PROVIDER:
- parser_provider_end (parser, element_name);
- break;
- case PARSER_METHOD_GSM:
- parser_gsm_end (parser, element_name);
- break;
- case PARSER_METHOD_GSM_APN:
- parser_gsm_apn_end (parser, element_name);
- break;
- case PARSER_METHOD_CDMA:
- parser_cdma_end (parser, element_name);
- break;
- default:
- break;
- }
-}
-
-static void
-mobile_parser_characters (GMarkupParseContext *context,
- const gchar *text,
- gsize text_len,
- gpointer data,
- GError **error)
-{
- MobileParser *parser = (MobileParser *) data;
-
- g_free (parser->text_buffer);
- parser->text_buffer = g_strdup (text);
-}
-
-static const GMarkupParser mobile_parser = {
- mobile_parser_start_element,
- mobile_parser_end_element,
- mobile_parser_characters,
- NULL, /* passthrough */
- NULL /* error */
-};
-
-static gboolean
-read_service_providers (GHashTable *countries,
- const gchar *service_providers,
- GCancellable *cancellable,
- GError **error)
-{
- GMarkupParseContext *ctx;
- GIOChannel *channel;
- MobileParser parser;
- char buffer[4096];
- GIOStatus status;
- gsize len = 0;
-
- memset (&parser, 0, sizeof (MobileParser));
- parser.table = countries;
-
- channel = g_io_channel_new_file (service_providers, "r", error);
- if (!channel) {
- g_prefix_error (error,
- "Could not read '%s': ",
- service_providers);
- return FALSE;
- }
-
- parser.state = PARSER_TOPLEVEL;
-
- ctx = g_markup_parse_context_new (&mobile_parser, 0, &parser, NULL);
-
- status = G_IO_STATUS_NORMAL;
- while (status == G_IO_STATUS_NORMAL) {
- status = g_io_channel_read_chars (channel, buffer, sizeof (buffer), &len, error);
-
- switch (status) {
- case G_IO_STATUS_NORMAL:
- if (!g_markup_parse_context_parse (ctx, buffer, len, error)) {
- status = G_IO_STATUS_ERROR;
- g_prefix_error (error,
- "Error while parsing XML at '%s': ",
- service_providers);
- }
- break;
- case G_IO_STATUS_EOF:
- break;
- case G_IO_STATUS_ERROR:
- g_prefix_error (error,
- "Error while reading '%s': ",
- service_providers);
- break;
- case G_IO_STATUS_AGAIN:
- /* FIXME: Try again a few times, but really, it never happens, right? */
- break;
- }
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- status = G_IO_STATUS_ERROR;
- }
-
- g_io_channel_unref (channel);
- g_markup_parse_context_free (ctx);
-
- if (parser.current_provider) {
- g_warning ("pending current provider");
- nma_mobile_provider_unref (parser.current_provider);
- }
-
- if (parser.current_providers) {
- g_warning ("pending current providers");
- provider_list_free (parser.current_providers);
- }
-
- g_free (parser.current_country);
- g_free (parser.text_buffer);
-
- return (status == G_IO_STATUS_EOF);
-}
-
-static GHashTable *
-mobile_providers_parse_sync (const gchar *country_codes,
- const gchar *service_providers,
- GCancellable *cancellable,
- GError **error)
-{
- GHashTable *countries;
-
- /* Use default paths if none given */
- if (!country_codes)
- country_codes = ISO_3166_COUNTRY_CODES;
- if (!service_providers)
- service_providers = MOBILE_BROADBAND_PROVIDER_INFO_DATABASE;
-
- countries = read_country_codes (country_codes,
- cancellable,
- error);
- if (!countries)
- return NULL;
-
- if (!read_service_providers (countries,
- service_providers,
- cancellable,
- error)) {
- g_hash_table_unref (countries);
- return NULL;
- }
-
- return countries;
-}
-
-/******************************************************************************/
-/* Dump to stdout contents */
-
-static void
-dump_generic (NMAMobileAccessMethod *method)
-{
- g_print (" username: %s\n", method->username ? method->username : "");
- g_print (" password: %s\n", method->password ? method->password : "");
-
- if (method->dns) {
- guint i;
- const gchar **dns;
- GString *dns_str;
-
- dns = nma_mobile_access_method_get_dns (method);
- dns_str = g_string_new (NULL);
- for (i = 0; dns[i]; i++)
- g_string_append_printf (dns_str, "%s%s", i == 0 ? "" : ", ", dns[i]);
- g_print (" dns : %s\n", dns_str->str);
- g_string_free (dns_str, TRUE);
- }
-
- g_print (" gateway : %s\n", method->gateway ? method->gateway : "");
-}
-
-static void
-dump_cdma (NMAMobileAccessMethod *method)
-{
- g_print (" CDMA: %s\n", method->name);
-
- dump_generic (method);
-}
-
-static void
-dump_3gpp (NMAMobileAccessMethod *method)
-{
- g_print (" APN: %s (%s)\n", method->name, method->apn);
-
- dump_generic (method);
-}
-
-static void
-dump_country (gpointer key, gpointer value, gpointer user_data)
-{
- GSList *miter, *citer;
- NMACountryInfo *country_info = value;
-
- g_print ("Country: %s (%s)\n",
- country_info->country_code,
- country_info->country_name);
-
- for (citer = country_info->providers; citer; citer = g_slist_next (citer)) {
- NMAMobileProvider *provider = citer->data;
- const gchar **mcc_mnc;
- const guint *sid;
- guint n;
-
- g_print (" Provider: %s (%s)\n", provider->name, (const char *) key);
-
- mcc_mnc = nma_mobile_provider_get_3gpp_mcc_mnc (provider);
- if (mcc_mnc) {
- for (n = 0; mcc_mnc[n]; n++)
- g_print (" MCC/MNC: %s\n", mcc_mnc[n]);
- }
-
- sid = nma_mobile_provider_get_cdma_sid (provider);
- if (sid) {
- for (n = 0; sid[n]; n++)
- g_print (" SID: %u\n", sid[n]);
- }
-
- for (miter = provider->methods; miter; miter = g_slist_next (miter)) {
- NMAMobileAccessMethod *method = miter->data;
-
- switch (method->family) {
- case NMA_MOBILE_FAMILY_CDMA:
- dump_cdma (method);
- break;
- case NMA_MOBILE_FAMILY_3GPP:
- dump_3gpp (method);
- break;
- default:
- break;
- }
- g_print ("\n");
- }
- }
-}
-
-/******************************************************************************/
-/* Mobile providers database type */
-
-static void initable_iface_init (GInitableIface *iface);
-static void async_initable_iface_init (GAsyncInitableIface *iface);
-
-G_DEFINE_TYPE_EXTENDED (NMAMobileProvidersDatabase, nma_mobile_providers_database, G_TYPE_OBJECT, 0,
- G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init)
- G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, async_initable_iface_init))
-
-enum {
- PROP_0,
- PROP_COUNTRY_CODES_PATH,
- PROP_SERVICE_PROVIDERS_PATH,
- PROP_LAST
-};
-
-static GParamSpec *properties[PROP_LAST];
-
-struct _NMAMobileProvidersDatabasePrivate {
- /* Paths to input files */
- gchar *country_codes_path;
- gchar *service_providers_path;
-
- /* The HT with country code as key and NMACountryInfo as value. */
- GHashTable *countries;
-};
-
-/**********************************/
-
-/**
- * nma_mobile_providers_database_get_countries:
- * @self: a #NMAMobileProvidersDatabase.
- *
- * Returns: (element-type utf8 NMGtk.CountryInfo) (transfer none): a
- * hash table where keys are country names #gchar and values are #NMACountryInfo.
- */
-GHashTable *
-nma_mobile_providers_database_get_countries (NMAMobileProvidersDatabase *self)
-{
- g_return_val_if_fail (NMA_IS_MOBILE_PROVIDERS_DATABASE (self), NULL);
-
- /* Warn if the object hasn't been initialized */
- g_return_val_if_fail (self->priv->countries != NULL, NULL);
-
- return self->priv->countries;
-}
-
-/**
- * nma_mobile_providers_database_dump:
- * @self: a #NMAMobileProvidersDatabase.
- *
- */
-void
-nma_mobile_providers_database_dump (NMAMobileProvidersDatabase *self)
-{
- g_return_if_fail (NMA_IS_MOBILE_PROVIDERS_DATABASE (self));
-
- /* Warn if the object hasn't been initialized */
- g_return_if_fail (self->priv->countries != NULL);
-
- g_hash_table_foreach (self->priv->countries, dump_country, NULL);
-}
-
-/**
- * nma_mobile_providers_database_lookup_country:
- * @self: a #NMAMobileProvidersDatabase.
- * @country_code: the country code string to look for.
- *
- * Returns: (transfer none): a #NMACountryInfo or %NULL if not found.
- */
-NMACountryInfo *
-nma_mobile_providers_database_lookup_country (NMAMobileProvidersDatabase *self,
- const gchar *country_code)
-{
- g_return_val_if_fail (NMA_IS_MOBILE_PROVIDERS_DATABASE (self), NULL);
-
- /* Warn if the object hasn't been initialized */
- g_return_val_if_fail (self->priv->countries != NULL, NULL);
-
- return (NMACountryInfo *) g_hash_table_lookup (self->priv->countries, country_code);
-}
-
-/**
- * nma_mobile_providers_database_lookup_3gpp_mcc_mnc:
- * @self: a #NMAMobileProvidersDatabase.
- * @mccmnc: the MCC/MNC string to look for.
- *
- * Returns: (transfer none): a #NMAMobileProvider or %NULL if not found.
- */
-NMAMobileProvider *
-nma_mobile_providers_database_lookup_3gpp_mcc_mnc (NMAMobileProvidersDatabase *self,
- const gchar *mccmnc)
-{
- GHashTableIter iter;
- gpointer value;
- GSList *piter;
- NMAMobileProvider *provider_match_2mnc = NULL;
- guint mccmnc_len;
-
- g_return_val_if_fail (NMA_IS_MOBILE_PROVIDERS_DATABASE (self), NULL);
- g_return_val_if_fail (mccmnc != NULL, NULL);
- /* Warn if the object hasn't been initialized */
- g_return_val_if_fail (self->priv->countries != NULL, NULL);
-
- /* Expect only 5 or 6 digit MCCMNC strings */
- mccmnc_len = strlen (mccmnc);
- if (mccmnc_len != 5 && mccmnc_len != 6)
- return NULL;
-
- g_hash_table_iter_init (&iter, self->priv->countries);
- /* Search through each country */
- while (g_hash_table_iter_next (&iter, NULL, &value)) {
- NMACountryInfo *country_info = value;
-
- /* Search through each country's providers */
- for (piter = nma_country_info_get_providers (country_info);
- piter;
- piter = g_slist_next (piter)) {
- NMAMobileProvider *provider = piter->data;
- const gchar **mccmnc_list;
- guint i;
-
- /* Search through MCC/MNC list */
- mccmnc_list = nma_mobile_provider_get_3gpp_mcc_mnc (provider);
- if (!mccmnc_list)
- continue;
-
- for (i = 0; mccmnc_list[i]; i++) {
- const gchar *mccmnc_iter;
- guint mccmnc_iter_len;
-
- mccmnc_iter = mccmnc_list[i];
- mccmnc_iter_len = strlen (mccmnc_iter);
-
- /* Match both 2-digit and 3-digit MNC; prefer a
- * 3-digit match if found, otherwise a 2-digit one.
- */
-
- if (strncmp (mccmnc_iter, mccmnc, 3))
- /* MCC was wrong */
- continue;
-
- /* Now we have the following match cases, examples given:
- * a) input: 123/456 --> iter: 123/456 (3-digit match)
- * b) input: 123/45 --> iter: 123/045 (3-digit match)
- * c) input: 123/045 --> iter: 123/45 (2-digit match)
- * d) input: 123/45 --> iter: 123/45 (2-digit match)
- */
-
- if (mccmnc_iter_len == 6) {
- /* Covers cases a) and b) */
- if ( (mccmnc_len == 6 && !strncmp (mccmnc + 3, mccmnc_iter + 3, 3))
- || (mccmnc_len == 5 && mccmnc_iter[3] == '0' && !strncmp (mccmnc + 3, mccmnc_iter + 4, 2)))
- /* 3-digit MNC match! */
- return provider;
-
- /* MNC was wrong */
- continue;
- }
-
- if ( !provider_match_2mnc
- && mccmnc_iter_len == 5) {
- if ( (mccmnc_len == 5 && !strncmp (mccmnc + 3, mccmnc_iter + 3, 2))
- || (mccmnc_len == 6 && mccmnc[3] == '0' && !strncmp (mccmnc + 4, mccmnc_iter + 3, 2))) {
- /* Store the 2-digit MNC match, but keep looking,
- * we may have a 3-digit MNC match */
- provider_match_2mnc = provider;
- continue;
- }
-
- /* MNC was wrong */
- continue;
- }
- }
- }
- }
-
- return provider_match_2mnc;
-}
-
-/**
- * nma_mobile_providers_database_lookup_cdma_sid:
- * @self: a #NMAMobileProvidersDatabase.
- * @sid: the SID to look for.
- *
- * Returns: (transfer none): a #NMAMobileProvider, or %NULL if not found.
- */
-NMAMobileProvider *
-nma_mobile_providers_database_lookup_cdma_sid (NMAMobileProvidersDatabase *self,
- guint32 sid)
-{
- GHashTableIter iter;
- gpointer value;
- GSList *piter;
-
- g_return_val_if_fail (NMA_IS_MOBILE_PROVIDERS_DATABASE (self), NULL);
- g_return_val_if_fail (sid > 0, NULL);
- /* Warn if the object hasn't been initialized */
- g_return_val_if_fail (self->priv->countries != NULL, NULL);
-
- g_hash_table_iter_init (&iter, self->priv->countries);
- /* Search through each country */
- while (g_hash_table_iter_next (&iter, NULL, &value)) {
- NMACountryInfo *country_info = value;
-
- /* Search through each country's providers */
- for (piter = nma_country_info_get_providers (country_info);
- piter;
- piter = g_slist_next (piter)) {
- NMAMobileProvider *provider = piter->data;
- const guint32 *sid_list;
- guint i;
-
- /* Search through CDMA SID list */
- sid_list = nma_mobile_provider_get_cdma_sid (provider);
- if (!sid_list)
- continue;
-
- for (i = 0; sid_list[i]; i++) {
- if (sid == sid_list[i])
- return provider;
- }
- }
- }
-
- return NULL;
-}
-
-/**********************************/
-
-static gboolean
-initable_init_sync (GInitable *initable,
- GCancellable *cancellable,
- GError **error)
-{
- NMAMobileProvidersDatabase *self = NMA_MOBILE_PROVIDERS_DATABASE (initable);
-
- /* Parse the files */
- self->priv->countries = mobile_providers_parse_sync (self->priv->country_codes_path,
- self->priv->service_providers_path,
- cancellable,
- error);
- if (!self->priv->countries)
- return FALSE;
-
- /* All good */
- return TRUE;
-}
-
-/**********************************/
-
-/**
- * nma_mobile_providers_database_new:
- * @country_codes: (allow-none): Path to the country codes file.
- * @service_providers: (allow-none): Path to the service providers file.
- * @cancellable: (allow-none): A #GCancellable or %NULL.
- * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
- * @user_data: User data to pass to @callback.
- *
- */
-void
-nma_mobile_providers_database_new (const gchar *country_codes,
- const gchar *service_providers,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- g_async_initable_new_async (NMA_TYPE_MOBILE_PROVIDERS_DATABASE,
- G_PRIORITY_DEFAULT,
- cancellable,
- callback,
- user_data,
- "country-codes", country_codes,
- "service-providers", service_providers,
- NULL);
-}
-
-/**
- * nma_mobile_providers_database_new_finish:
- * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to nma_mobile_providers_database_new().
- * @error: Return location for error or %NULL.
- *
- * Returns: (transfer full) (type NMAMobileProvidersDatabase): The constructed object or %NULL if @error is set.
- */
-NMAMobileProvidersDatabase *
-nma_mobile_providers_database_new_finish (GAsyncResult *res,
- GError **error)
-{
- GObject *initable;
- GObject *out;
-
- initable = g_async_result_get_source_object (res);
- out = g_async_initable_new_finish (G_ASYNC_INITABLE (initable), res, error);
- g_object_unref (initable);
-
- return out ? NMA_MOBILE_PROVIDERS_DATABASE (out) : NULL;
-}
-
-/**
- * nma_mobile_providers_database_new_sync:
- * @country_codes: (allow-none): Path to the country codes file.
- * @service_providers: (allow-none): Path to the service providers file.
- * @cancellable: (allow-none): A #GCancellable or %NULL.
- * @error: Return location for error or %NULL.
- *
- * Returns: (transfer full) (type NMAMobileProvidersDatabase): The constructed object or %NULL if @error is set.
- */
-NMAMobileProvidersDatabase *
-nma_mobile_providers_database_new_sync (const gchar *country_codes,
- const gchar *service_providers,
- GCancellable *cancellable,
- GError **error)
-{
- GObject *out;
-
- out = g_initable_new (NMA_TYPE_MOBILE_PROVIDERS_DATABASE,
- cancellable,
- error,
- "country-codes", country_codes,
- "service-providers", service_providers,
- NULL);
-
- return out ? NMA_MOBILE_PROVIDERS_DATABASE (out) : NULL;
-}
-
-/**********************************/
-
-static void
-set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- NMAMobileProvidersDatabase *self = NMA_MOBILE_PROVIDERS_DATABASE (object);
-
- switch (prop_id) {
- case PROP_COUNTRY_CODES_PATH:
- self->priv->country_codes_path = g_value_dup_string (value);
- break;
- case PROP_SERVICE_PROVIDERS_PATH:
- self->priv->service_providers_path = g_value_dup_string (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- NMAMobileProvidersDatabase *self = NMA_MOBILE_PROVIDERS_DATABASE (object);
-
- switch (prop_id) {
- case PROP_COUNTRY_CODES_PATH:
- g_value_set_string (value, self->priv->country_codes_path);
- break;
- case PROP_SERVICE_PROVIDERS_PATH:
- g_value_set_string (value, self->priv->service_providers_path);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-nma_mobile_providers_database_init (NMAMobileProvidersDatabase *self)
-{
- /* Setup private data */
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- NMA_TYPE_MOBILE_PROVIDERS_DATABASE,
- NMAMobileProvidersDatabasePrivate);
-}
-
-static void
-finalize (GObject *object)
-{
- NMAMobileProvidersDatabase *self = NMA_MOBILE_PROVIDERS_DATABASE (object);
-
- g_free (self->priv->country_codes_path);
- g_free (self->priv->service_providers_path);
-
- if (self->priv->countries)
- g_hash_table_unref (self->priv->countries);
-
- G_OBJECT_CLASS (nma_mobile_providers_database_parent_class)->finalize (object);
-}
-
-static void
-initable_iface_init (GInitableIface *iface)
-{
- iface->init = initable_init_sync;
-}
-
-static void
-async_initable_iface_init (GAsyncInitableIface *iface)
-{
- /* Just use defaults (run sync init() in a thread) */
-}
-
-static void
-nma_mobile_providers_database_class_init (NMAMobileProvidersDatabaseClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMAMobileProvidersDatabasePrivate));
-
- /* Virtual methods */
- object_class->get_property = get_property;
- object_class->set_property = set_property;
- object_class->finalize = finalize;
-
- properties[PROP_COUNTRY_CODES_PATH] =
- g_param_spec_string ("country-codes",
- "Country Codes",
- "Path to the country codes file",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_COUNTRY_CODES_PATH, properties[PROP_COUNTRY_CODES_PATH]);
-
- properties[PROP_SERVICE_PROVIDERS_PATH] =
- g_param_spec_string ("service-providers",
- "Service Providers",
- "Path to the service providers file",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_SERVICE_PROVIDERS_PATH, properties[PROP_SERVICE_PROVIDERS_PATH]);
-}
-
-/******************************************************************************/
-/* Utils */
-
-/**
- * nma_mobile_providers_split_3gpp_mcc_mnc:
- * @mccmnc: input MCCMNC string.
- * @mcc: (out) (transfer full): the MCC.
- * @mnc: (out) (transfer full): the MNC.
- *
- * Splits the input MCCMNC string into separate MCC and MNC strings.
- *
- * Returns: %TRUE if correctly split and @mcc and @mnc are set; %FALSE otherwise.
- */
-gboolean
-nma_mobile_providers_split_3gpp_mcc_mnc (const gchar *mccmnc,
- gchar **mcc,
- gchar **mnc)
-{
- gint len;
-
- g_return_val_if_fail (mccmnc != NULL, FALSE);
- g_return_val_if_fail (mcc != NULL, FALSE);
- g_return_val_if_fail (mnc != NULL, FALSE);
-
- len = strlen (mccmnc);
- if (len != 5 && len != 6)
- return FALSE;
-
- /* MCCMNC is all digits */
- while (len > 0) {
- if (!g_ascii_isdigit (mccmnc[--len]))
- return FALSE;
- }
-
- *mcc = g_strndup (mccmnc, 3);
- *mnc = g_strdup (mccmnc + 3);
- return TRUE;
-}
diff --git a/src/libnm-gtk/nm-mobile-providers.h b/src/libnm-gtk/nm-mobile-providers.h
deleted file mode 100644
index 4792b119..00000000
--- a/src/libnm-gtk/nm-mobile-providers.h
+++ /dev/null
@@ -1,125 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/*
- * Copyright (C) 2009 Novell, Inc.
- * Author: Tambet Ingo (tambet@gmail.com).
- *
- * Copyright (C) 2009 - 2012 Red Hat, Inc.
- * Copyright (C) 2012 Lanedo GmbH.
- */
-
-#ifndef NM_MOBILE_PROVIDERS_H
-#define NM_MOBILE_PROVIDERS_H
-
-#include <glib.h>
-#include <glib-object.h>
-#include <gio/gio.h>
-
-/******************************************************************************/
-/* Access method type */
-
-typedef enum {
- NMA_MOBILE_FAMILY_UNKNOWN = 0,
- NMA_MOBILE_FAMILY_3GPP,
- NMA_MOBILE_FAMILY_CDMA
-} NMAMobileFamily;
-
-#define NMA_TYPE_MOBILE_ACCESS_METHOD (nma_mobile_access_method_get_type ())
-
-typedef struct _NMAMobileAccessMethod NMAMobileAccessMethod;
-
-GType nma_mobile_access_method_get_type (void);
-NMAMobileAccessMethod *nma_mobile_access_method_ref (NMAMobileAccessMethod *method);
-void nma_mobile_access_method_unref (NMAMobileAccessMethod *method);
-const gchar *nma_mobile_access_method_get_name (NMAMobileAccessMethod *method);
-const gchar *nma_mobile_access_method_get_username (NMAMobileAccessMethod *method);
-const gchar *nma_mobile_access_method_get_password (NMAMobileAccessMethod *method);
-const gchar *nma_mobile_access_method_get_gateway (NMAMobileAccessMethod *method);
-const gchar **nma_mobile_access_method_get_dns (NMAMobileAccessMethod *method);
-const gchar *nma_mobile_access_method_get_3gpp_apn (NMAMobileAccessMethod *method);
-NMAMobileFamily nma_mobile_access_method_get_family (NMAMobileAccessMethod *method);
-
-/******************************************************************************/
-/* Mobile provider type */
-
-#define NMA_TYPE_MOBILE_PROVIDER (nma_mobile_provider_get_type ())
-
-typedef struct _NMAMobileProvider NMAMobileProvider;
-
-GType nma_mobile_provider_get_type (void);
-NMAMobileProvider *nma_mobile_provider_ref (NMAMobileProvider *provider);
-void nma_mobile_provider_unref (NMAMobileProvider *provider);
-const gchar *nma_mobile_provider_get_name (NMAMobileProvider *provider);
-GSList *nma_mobile_provider_get_methods (NMAMobileProvider *provider);
-const gchar **nma_mobile_provider_get_3gpp_mcc_mnc (NMAMobileProvider *provider);
-const guint32 *nma_mobile_provider_get_cdma_sid (NMAMobileProvider *provider);
-
-/******************************************************************************/
-/* Country Info type */
-
-#define NMA_TYPE_COUNTRY_INFO (nma_country_info_get_type ())
-
-typedef struct _NMACountryInfo NMACountryInfo;
-
-GType nma_country_info_get_type (void);
-NMACountryInfo *nma_country_info_ref (NMACountryInfo *country_info);
-void nma_country_info_unref (NMACountryInfo *country_info);
-const gchar *nma_country_info_get_country_code (NMACountryInfo *country_info);
-const gchar *nma_country_info_get_country_name (NMACountryInfo *country_info);
-GSList *nma_country_info_get_providers (NMACountryInfo *country_info);
-
-/******************************************************************************/
-/* Mobile providers database type */
-
-#define NMA_TYPE_MOBILE_PROVIDERS_DATABASE (nma_mobile_providers_database_get_type ())
-#define NMA_MOBILE_PROVIDERS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_MOBILE_PROVIDERS_DATABASE, NMAMobileProvidersDatabase))
-#define NMA_MOBILE_PROVIDERS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_MOBILE_PROVIDERS_DATABASE, NMAMobileProvidersDatabaseClass))
-#define NMA_IS_MOBILE_PROVIDERS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_MOBILE_PROVIDERS_DATABASE))
-#define NMA_IS_MOBILE_PROVIDERS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_MOBILE_PROVIDERS_DATABASE))
-#define NMA_MOBILE_PROVIDERS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_MOBILE_PROVIDERS_DATABASE, NMAMobileProvidersDatabaseClass))
-
-typedef struct _NMAMobileProvidersDatabase NMAMobileProvidersDatabase;
-typedef struct _NMAMobileProvidersDatabaseClass NMAMobileProvidersDatabaseClass;
-typedef struct _NMAMobileProvidersDatabasePrivate NMAMobileProvidersDatabasePrivate;
-
-struct _NMAMobileProvidersDatabase {
- GObject parent;
- NMAMobileProvidersDatabasePrivate *priv;
-};
-
-struct _NMAMobileProvidersDatabaseClass {
- GObjectClass parent;
-};
-
-GType nma_mobile_providers_database_get_type (void);
-
-void nma_mobile_providers_database_new (const gchar *country_codes,
- const gchar *service_providers,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-NMAMobileProvidersDatabase *nma_mobile_providers_database_new_finish (GAsyncResult *res,
- GError **error);
-NMAMobileProvidersDatabase *nma_mobile_providers_database_new_sync (const gchar *country_codes,
- const gchar *service_providers,
- GCancellable *cancellable,
- GError **error);
-
-GHashTable *nma_mobile_providers_database_get_countries (NMAMobileProvidersDatabase *self);
-
-void nma_mobile_providers_database_dump (NMAMobileProvidersDatabase *self);
-
-NMACountryInfo *nma_mobile_providers_database_lookup_country (NMAMobileProvidersDatabase *self,
- const gchar *country_code);
-NMAMobileProvider *nma_mobile_providers_database_lookup_3gpp_mcc_mnc (NMAMobileProvidersDatabase *self,
- const gchar *mccmnc);
-NMAMobileProvider *nma_mobile_providers_database_lookup_cdma_sid (NMAMobileProvidersDatabase *self,
- guint32 sid);
-
-/******************************************************************************/
-/* Utils */
-
-gboolean nma_mobile_providers_split_3gpp_mcc_mnc (const gchar *mccmnc,
- gchar **mcc,
- gchar **mnc);
-
-#endif /* NM_MOBILE_PROVIDERS_H */
diff --git a/src/libnm-gtk/nm-mobile-wizard.c b/src/libnm-gtk/nm-mobile-wizard.c
deleted file mode 100644
index 4005d36e..00000000
--- a/src/libnm-gtk/nm-mobile-wizard.c
+++ /dev/null
@@ -1,1657 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Connection editor -- Connection editor for NetworkManager
- *
- * Dan Williams <dcbw@redhat.com>
- *
- * (C) Copyright 2008 - 2017 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <stdlib.h>
-
-#include <NetworkManager.h>
-#include <nm-setting-gsm.h>
-#include <nm-setting-cdma.h>
-#include <nm-client.h>
-#include <nm-device-modem.h>
-
-#include "nm-mobile-wizard.h"
-#include "nm-mobile-providers.h"
-#include "nm-ui-utils.h"
-#include "utils.h"
-
-#define DEVICE_TAG "device"
-#define TYPE_TAG "setting-type"
-
-static NMACountryInfo *get_selected_country (NMAMobileWizard *self);
-static NMAMobileProvider *get_selected_provider (NMAMobileWizard *self);
-static NMAMobileFamily get_provider_unlisted_type (NMAMobileWizard *self);
-static NMAMobileAccessMethod *get_selected_method (NMAMobileWizard *self, gboolean *manual);
-
-struct NMAMobileWizard {
- GtkWidget *assistant;
- NMAMobileWizardCallback callback;
- gpointer user_data;
- NMAMobileProvidersDatabase *mobile_providers_database;
- NMAMobileFamily family;
- gboolean initial_family;
- gboolean will_connect_after;
-
- /* Intro page */
- GtkWidget *dev_combo;
- GtkTreeStore *dev_store;
- char *dev_desc;
- NMClient *client;
-
- /* Country page */
- guint32 country_idx;
- NMACountryInfo *country;
- GtkWidget *country_page;
- GtkWidget *country_view;
- GtkTreeStore *country_store;
- GtkTreeModelSort *country_sort;
- guint32 country_focus_id;
-
- /* Providers page */
- guint32 providers_idx;
- GtkWidget *providers_page;
- GtkWidget *providers_view;
- GtkTreeStore *providers_store;
- GtkTreeModelSort *providers_sort;
- guint32 providers_focus_id;
- GtkWidget *providers_view_radio;
-
- GtkWidget *provider_unlisted_radio;
- GtkWidget *provider_unlisted_entry;
- GtkWidget *provider_unlisted_type_combo;
-
- gboolean provider_only_cdma;
-
- /* Plan page */
- guint32 plan_idx;
- GtkWidget *plan_page;
- GtkWidget *plan_combo;
- GtkTreeStore *plan_store;
- guint32 plan_focus_id;
-
- GtkWidget *plan_unlisted_entry;
-
- /* Confirm page */
- GtkWidget *confirm_page;
- GtkWidget *confirm_provider;
- GtkWidget *confirm_plan;
- GtkWidget *confirm_apn;
- GtkWidget *confirm_plan_label;
- GtkWidget *confirm_device;
- GtkWidget *confirm_device_label;
- guint32 confirm_idx;
-};
-
-static void
-assistant_closed (GtkButton *button, gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
- NMAMobileProvider *provider;
- NMAMobileAccessMethod *method;
- NMAMobileWizardAccessMethod *wiz_method;
- NMAMobileFamily family = self->family;
-
- wiz_method = g_malloc0 (sizeof (NMAMobileWizardAccessMethod));
-
- provider = get_selected_provider (self);
- if (!provider) {
- if (family == NMA_MOBILE_FAMILY_UNKNOWN)
- family = get_provider_unlisted_type (self);
-
- wiz_method->provider_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (self->provider_unlisted_entry)));
- if (family == NMA_MOBILE_FAMILY_3GPP)
- wiz_method->gsm_apn = g_strdup (gtk_entry_get_text (GTK_ENTRY (self->plan_unlisted_entry)));
- } else {
- gboolean manual = FALSE;
-
- wiz_method->provider_name = g_strdup (nma_mobile_provider_get_name (provider));
- method = get_selected_method (self, &manual);
- if (method) {
- family = nma_mobile_access_method_get_family (method);
- wiz_method->plan_name = g_strdup (nma_mobile_access_method_get_name (method));
- wiz_method->username = g_strdup (nma_mobile_access_method_get_username (method));
- wiz_method->password = g_strdup (nma_mobile_access_method_get_password (method));
- if (family == NMA_MOBILE_FAMILY_3GPP)
- wiz_method->gsm_apn = g_strdup (nma_mobile_access_method_get_3gpp_apn (method));
- } else {
- if (self->provider_only_cdma) {
- GSList *methods;
-
- family = NMA_MOBILE_FAMILY_CDMA;
-
- methods = nma_mobile_provider_get_methods (provider);
- /* Take username and password from the first (only) method for CDMA only provider */
- if (methods) {
- method = methods->data;
- wiz_method->username = g_strdup (nma_mobile_access_method_get_username (method));
- wiz_method->password = g_strdup (nma_mobile_access_method_get_password (method));
- }
- } else {
- family = NMA_MOBILE_FAMILY_3GPP;
- wiz_method->gsm_apn = g_strdup (gtk_entry_get_text (GTK_ENTRY (self->plan_unlisted_entry)));
- }
- }
- }
-
- switch (family) {
- case NMA_MOBILE_FAMILY_3GPP:
- wiz_method->devtype = NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS;
- break;
- case NMA_MOBILE_FAMILY_CDMA:
- wiz_method->devtype = NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO;
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-
- (*(self->callback)) (self, FALSE, wiz_method, self->user_data);
-
- if (provider)
- nma_mobile_provider_unref (provider);
- g_free (wiz_method->provider_name);
- g_free (wiz_method->plan_name);
- g_free (wiz_method->username);
- g_free (wiz_method->password);
- g_free (wiz_method->gsm_apn);
- g_free (wiz_method);
-}
-
-static void
-assistant_cancel (GtkButton *button, gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
-
- (*(self->callback)) (self, TRUE, NULL, self->user_data);
-}
-
-/**********************************************************/
-/* Confirm page */
-/**********************************************************/
-
-static void
-confirm_setup (NMAMobileWizard *self)
-{
- GtkWidget *vbox, *label, *alignment, *pbox;
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
- label = gtk_label_new (_("Your mobile broadband connection is configured with the following settings:"));
- gtk_widget_set_size_request (label, 500, -1);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 6);
-
- /* Device */
- self->confirm_device_label = gtk_label_new (_("Your Device:"));
- gtk_misc_set_alignment (GTK_MISC (self->confirm_device_label), 0, 0.5);
- gtk_box_pack_start (GTK_BOX (vbox), self->confirm_device_label, FALSE, FALSE, 0);
-
- alignment = gtk_alignment_new (0, 0.5, 0, 0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 12, 25, 0);
- self->confirm_device = gtk_label_new (NULL);
- gtk_container_add (GTK_CONTAINER (alignment), self->confirm_device);
- gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 0);
-
- /* Provider */
- label = gtk_label_new (_("Your Provider:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
-
- alignment = gtk_alignment_new (0, 0.5, 0, 0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 12, 25, 0);
- self->confirm_provider = gtk_label_new (NULL);
- gtk_container_add (GTK_CONTAINER (alignment), self->confirm_provider);
- gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 0);
-
- /* Plan and APN */
- self->confirm_plan_label = gtk_label_new (_("Your Plan:"));
- gtk_misc_set_alignment (GTK_MISC (self->confirm_plan_label), 0, 0.5);
- gtk_box_pack_start (GTK_BOX (vbox), self->confirm_plan_label, FALSE, FALSE, 0);
-
- alignment = gtk_alignment_new (0, 0.5, 0, 0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 25, 0);
- pbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- gtk_container_add (GTK_CONTAINER (alignment), pbox);
- gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 0);
-
- self->confirm_plan = gtk_label_new (NULL);
- gtk_misc_set_alignment (GTK_MISC (self->confirm_plan), 0, 0.5);
- gtk_box_pack_start (GTK_BOX (pbox), self->confirm_plan, FALSE, FALSE, 0);
-
- self->confirm_apn = gtk_label_new (NULL);
- gtk_misc_set_alignment (GTK_MISC (self->confirm_apn), 0, 0.5);
- gtk_misc_set_padding (GTK_MISC (self->confirm_apn), 0, 6);
- gtk_box_pack_start (GTK_BOX (pbox), self->confirm_apn, FALSE, FALSE, 0);
-
- if (self->will_connect_after) {
- alignment = gtk_alignment_new (0, 0.5, 1, 0);
- label = gtk_label_new (_("A connection will now be made to your mobile broadband provider using the settings you selected. If the connection fails or you cannot access network resources, double-check your settings. To modify your mobile broadband connection settings, choose “Network Connections” from the System → Preferences menu."));
- gtk_widget_set_size_request (label, 500, -1);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_misc_set_padding (GTK_MISC (label), 0, 6);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_label_set_max_width_chars (GTK_LABEL (label), 60);
- gtk_container_add (GTK_CONTAINER (alignment), label);
- gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 6);
- }
-
- gtk_widget_show_all (vbox);
- self->confirm_idx = gtk_assistant_append_page (GTK_ASSISTANT (self->assistant), vbox);
- gtk_assistant_set_page_title (GTK_ASSISTANT (self->assistant),
- vbox, _("Confirm Mobile Broadband Settings"));
-
- gtk_assistant_set_page_complete (GTK_ASSISTANT (self->assistant), vbox, TRUE);
- gtk_assistant_set_page_type (GTK_ASSISTANT (self->assistant), vbox, GTK_ASSISTANT_PAGE_CONFIRM);
-
- self->confirm_page = vbox;
-}
-
-static void
-confirm_prepare (NMAMobileWizard *self)
-{
- NMAMobileProvider *provider = NULL;
- NMAMobileAccessMethod *method = NULL;
- NMACountryInfo *country_info;
- gboolean manual = FALSE;
- GString *str;
-
- country_info = get_selected_country (self);
- provider = get_selected_provider (self);
- if (provider)
- method = get_selected_method (self, &manual);
-
- /* Provider */
- str = g_string_new (NULL);
- if (provider) {
- g_string_append (str, nma_mobile_provider_get_name (provider));
- nma_mobile_provider_unref (provider);
- } else {
- const char *unlisted_provider;
-
- unlisted_provider = gtk_entry_get_text (GTK_ENTRY (self->provider_unlisted_entry));
- g_string_append (str, unlisted_provider);
- }
-
- if (country_info) {
- g_string_append_printf (str, ", %s", nma_country_info_get_country_name (country_info));
- nma_country_info_unref (country_info);
- }
- gtk_label_set_text (GTK_LABEL (self->confirm_provider), str->str);
- g_string_free (str, TRUE);
-
- if (self->dev_desc)
- gtk_label_set_text (GTK_LABEL (self->confirm_device), self->dev_desc);
- else {
- gtk_widget_hide (self->confirm_device_label);
- gtk_widget_hide (self->confirm_device);
- }
-
- if (self->provider_only_cdma) {
- gtk_widget_hide (self->confirm_plan_label);
- gtk_widget_hide (self->confirm_plan);
- gtk_widget_hide (self->confirm_apn);
- } else {
- const char *apn = NULL;
-
- /* Plan */
- gtk_widget_show (self->confirm_plan_label);
- gtk_widget_show (self->confirm_plan);
- gtk_widget_show (self->confirm_apn);
-
- if (method) {
- gtk_label_set_text (GTK_LABEL (self->confirm_plan), nma_mobile_access_method_get_name (method));
- apn = nma_mobile_access_method_get_3gpp_apn (method);
- } else {
- gtk_label_set_text (GTK_LABEL (self->confirm_plan), _("Unlisted"));
- apn = gtk_entry_get_text (GTK_ENTRY (self->plan_unlisted_entry));
- }
-
- str = g_string_new (NULL);
- g_string_append_printf (str, "<span color=\"#999999\">APN: %s</span>", apn);
- gtk_label_set_markup (GTK_LABEL (self->confirm_apn), str->str);
- g_string_free (str, TRUE);
- }
-}
-
-/**********************************************************/
-/* Plan page */
-/**********************************************************/
-
-#define PLAN_COL_NAME 0
-#define PLAN_COL_METHOD 1
-#define PLAN_COL_MANUAL 2
-
-static NMAMobileAccessMethod *
-get_selected_method (NMAMobileWizard *self, gboolean *manual)
-{
- GtkTreeModel *model;
- NMAMobileAccessMethod *method = NULL;
- GtkTreeIter iter;
- gboolean is_manual = FALSE;
-
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self->plan_combo), &iter))
- return NULL;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (self->plan_combo));
- if (!model)
- return NULL;
-
- gtk_tree_model_get (model, &iter,
- PLAN_COL_METHOD, &method,
- PLAN_COL_MANUAL, &is_manual,
- -1);
- if (is_manual) {
- if (manual)
- *manual = is_manual;
- if (method)
- nma_mobile_access_method_unref (method);
- method = NULL;
- }
-
- return method;
-}
-
-static void
-plan_update_complete (NMAMobileWizard *self)
-{
- GtkAssistant *assistant = GTK_ASSISTANT (self->assistant);
- gboolean is_manual = FALSE;
- NMAMobileAccessMethod *method;
-
- method = get_selected_method (self, &is_manual);
- if (method) {
- gtk_assistant_set_page_complete (assistant, self->plan_page, TRUE);
- nma_mobile_access_method_unref (method);
- } else {
- const char *manual_apn;
-
- manual_apn = gtk_entry_get_text (GTK_ENTRY (self->plan_unlisted_entry));
- gtk_assistant_set_page_complete (assistant, self->plan_page,
- (manual_apn && strlen (manual_apn)));
- }
-}
-
-static void
-plan_combo_changed (NMAMobileWizard *self)
-{
- NMAMobileAccessMethod *method = NULL;
- gboolean is_manual = FALSE;
-
- method = get_selected_method (self, &is_manual);
- if (method) {
- gtk_entry_set_text (GTK_ENTRY (self->plan_unlisted_entry), nma_mobile_access_method_get_3gpp_apn (method));
- gtk_widget_set_sensitive (self->plan_unlisted_entry, FALSE);
- } else {
- gtk_entry_set_text (GTK_ENTRY (self->plan_unlisted_entry), "");
- gtk_widget_set_sensitive (self->plan_unlisted_entry, TRUE);
- gtk_widget_grab_focus (self->plan_unlisted_entry);
- }
-
- if (method)
- nma_mobile_access_method_unref (method);
-
- plan_update_complete (self);
-}
-
-static gboolean
-plan_row_separator_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
-{
- NMAMobileAccessMethod *method = NULL;
- gboolean is_manual = FALSE;
- gboolean draw_separator = FALSE;
-
- gtk_tree_model_get (model, iter,
- PLAN_COL_METHOD, &method,
- PLAN_COL_MANUAL, &is_manual,
- -1);
- if (!method && !is_manual)
- draw_separator = TRUE;
- if (method)
- nma_mobile_access_method_unref (method);
- return draw_separator;
-}
-
-static void
-apn_filter_cb (GtkEditable *editable,
- gchar *text,
- gint length,
- gint *position,
- gpointer user_data)
-{
- utils_filter_editable_on_insert_text (editable,
- text, length, position, user_data,
- utils_char_is_ascii_apn,
- apn_filter_cb);
-}
-
-static void
-plan_setup (NMAMobileWizard *self)
-{
- GtkWidget *vbox, *label, *alignment, *hbox, *image;
- GtkCellRenderer *renderer;
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
-
- label = gtk_label_new_with_mnemonic (_("_Select your plan:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
-
- self->plan_store = gtk_tree_store_new (3, G_TYPE_STRING, NMA_TYPE_MOBILE_ACCESS_METHOD, G_TYPE_BOOLEAN);
-
- self->plan_combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (self->plan_store));
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), self->plan_combo);
- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (self->plan_combo),
- plan_row_separator_func,
- NULL,
- NULL);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (self->plan_combo), renderer, TRUE);
- gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (self->plan_combo), renderer, "text", PLAN_COL_NAME);
-
- g_signal_connect_swapped (self->plan_combo, "changed", G_CALLBACK (plan_combo_changed), self);
-
- alignment = gtk_alignment_new (0, 0.5, 0.5, 0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 12, 0, 0);
- gtk_container_add (GTK_CONTAINER (alignment), self->plan_combo);
- gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 0);
-
- label = gtk_label_new_with_mnemonic (_("Selected plan _APN (Access Point Name):"));
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
-
- self->plan_unlisted_entry = gtk_entry_new ();
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), self->plan_unlisted_entry);
- gtk_entry_set_max_length (GTK_ENTRY (self->plan_unlisted_entry), 64);
- g_signal_connect (self->plan_unlisted_entry, "insert-text", G_CALLBACK (apn_filter_cb), self);
- g_signal_connect_swapped (self->plan_unlisted_entry, "changed", G_CALLBACK (plan_update_complete), self);
-
- alignment = gtk_alignment_new (0, 0.5, 0.5, 0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 24, 0, 0);
- gtk_container_add (GTK_CONTAINER (alignment), self->plan_unlisted_entry);
- gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 0);
-
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- image = gtk_image_new_from_icon_name ("dialog-warning", GTK_ICON_SIZE_DIALOG);
- gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.0);
- gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
-
- label = gtk_label_new (_("Warning: Selecting an incorrect plan may result in billing issues for your broadband account or may prevent connectivity.\n\nIf you are unsure of your plan please ask your provider for your plan’s APN."));
- gtk_widget_set_size_request (label, 500, -1);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_label_set_max_width_chars (GTK_LABEL (label), 60);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- self->plan_idx = gtk_assistant_append_page (GTK_ASSISTANT (self->assistant), vbox);
- gtk_assistant_set_page_title (GTK_ASSISTANT (self->assistant), vbox, _("Choose your Billing Plan"));
- gtk_assistant_set_page_type (GTK_ASSISTANT (self->assistant), vbox, GTK_ASSISTANT_PAGE_CONTENT);
- gtk_widget_show_all (vbox);
-
- self->plan_page = vbox;
-}
-
-static void
-plan_prepare (NMAMobileWizard *self)
-{
- NMAMobileProvider *provider;
- GtkTreeIter method_iter;
-
- gtk_tree_store_clear (self->plan_store);
-
- provider = get_selected_provider (self);
- if (provider) {
- GSList *iter;
- guint32 count = 0;
-
- for (iter = nma_mobile_provider_get_methods (provider); iter; iter = g_slist_next (iter)) {
- NMAMobileAccessMethod *method = iter->data;
-
- if ( (self->family != NMA_MOBILE_FAMILY_UNKNOWN)
- && (nma_mobile_access_method_get_family (method) != self->family))
- continue;
-
- gtk_tree_store_append (GTK_TREE_STORE (self->plan_store), &method_iter, NULL);
- gtk_tree_store_set (GTK_TREE_STORE (self->plan_store),
- &method_iter,
- PLAN_COL_NAME,
- nma_mobile_access_method_get_name (method),
- PLAN_COL_METHOD,
- method,
- -1);
- count++;
- }
- nma_mobile_provider_unref (provider);
-
- /* Draw the separator */
- if (count)
- gtk_tree_store_append (GTK_TREE_STORE (self->plan_store), &method_iter, NULL);
- }
-
- /* Add the "My plan is not listed..." item */
- gtk_tree_store_append (GTK_TREE_STORE (self->plan_store), &method_iter, NULL);
- gtk_tree_store_set (GTK_TREE_STORE (self->plan_store),
- &method_iter,
- PLAN_COL_NAME,
- _("My plan is not listed…"),
- PLAN_COL_MANUAL,
- TRUE,
- -1);
-
- /* Select the first item by default if nothing is yet selected */
- if (gtk_combo_box_get_active (GTK_COMBO_BOX (self->plan_combo)) < 0)
- gtk_combo_box_set_active (GTK_COMBO_BOX (self->plan_combo), 0);
-
- plan_combo_changed (self);
-}
-
-/**********************************************************/
-/* Providers page */
-/**********************************************************/
-
-#define PROVIDER_COL_NAME 0
-#define PROVIDER_COL_PROVIDER 1
-
-static gboolean
-providers_search_func (GtkTreeModel *model,
- gint column,
- const char *key,
- GtkTreeIter *iter,
- gpointer search_data)
-{
- gboolean unmatched = TRUE;
- char *provider = NULL;
-
- if (!key)
- return TRUE;
-
- gtk_tree_model_get (model, iter, column, &provider, -1);
- if (!provider)
- return TRUE;
-
- unmatched = !!g_ascii_strncasecmp (provider, key, strlen (key));
- g_free (provider);
- return unmatched;
-}
-
-static NMAMobileProvider *
-get_selected_provider (NMAMobileWizard *self)
-{
- GtkTreeSelection *selection;
- GtkTreeModel *model = NULL;
- GtkTreeIter iter;
- NMAMobileProvider *provider = NULL;
-
- if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->providers_view_radio)))
- return NULL;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->providers_view));
- g_assert (selection);
-
- if (!gtk_tree_selection_get_selected (GTK_TREE_SELECTION (selection), &model, &iter))
- return NULL;
-
- gtk_tree_model_get (model, &iter, PROVIDER_COL_PROVIDER, &provider, -1);
- return provider;
-}
-
-static void
-providers_update_complete (NMAMobileWizard *self)
-{
- GtkAssistant *assistant = GTK_ASSISTANT (self->assistant);
- gboolean use_view;
-
- use_view = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->providers_view_radio));
- if (use_view) {
- NMAMobileProvider *provider;
-
- provider = get_selected_provider (self);
- gtk_assistant_set_page_complete (assistant, self->providers_page, !!provider);
- if (provider)
- nma_mobile_provider_unref (provider);
- } else {
- const char *manual_provider;
-
- manual_provider = gtk_entry_get_text (GTK_ENTRY (self->provider_unlisted_entry));
- gtk_assistant_set_page_complete (assistant, self->providers_page,
- (manual_provider && strlen (manual_provider)));
- }
-}
-
-static gboolean
-focus_providers_view (gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
-
- self->providers_focus_id = 0;
- gtk_widget_grab_focus (self->providers_view);
- return FALSE;
-}
-
-static gboolean
-focus_provider_unlisted_entry (gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
-
- self->providers_focus_id = 0;
- gtk_widget_grab_focus (self->provider_unlisted_entry);
- return FALSE;
-}
-
-static void
-providers_radio_toggled (GtkToggleButton *button, gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
- gboolean use_view;
-
- use_view = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->providers_view_radio));
- if (use_view) {
- if (!self->providers_focus_id)
- self->providers_focus_id = g_idle_add (focus_providers_view, self);
- gtk_widget_set_sensitive (self->providers_view, TRUE);
- gtk_widget_set_sensitive (self->provider_unlisted_entry, FALSE);
- gtk_widget_set_sensitive (self->provider_unlisted_type_combo, FALSE);
- } else {
- if (!self->providers_focus_id)
- self->providers_focus_id = g_idle_add (focus_provider_unlisted_entry, self);
- gtk_widget_set_sensitive (self->providers_view, FALSE);
- gtk_widget_set_sensitive (self->provider_unlisted_entry, TRUE);
- gtk_widget_set_sensitive (self->provider_unlisted_type_combo, TRUE);
- }
-
- providers_update_complete (self);
-}
-
-static NMAMobileFamily
-get_provider_unlisted_type (NMAMobileWizard *self)
-{
- switch (gtk_combo_box_get_active (GTK_COMBO_BOX (self->provider_unlisted_type_combo))) {
- case 0:
- return NMA_MOBILE_FAMILY_3GPP;
- case 1:
- return NMA_MOBILE_FAMILY_CDMA;
- default:
- return NMA_MOBILE_FAMILY_UNKNOWN;
- }
-}
-
-static void
-providers_setup (NMAMobileWizard *self)
-{
- GtkWidget *vbox, *scroll, *alignment, *unlisted_grid, *label;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- GtkTreeSelection *selection;
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
-
- self->providers_view_radio = gtk_radio_button_new_with_mnemonic (NULL, _("Select your provider from a _list:"));
- g_signal_connect (self->providers_view_radio, "toggled", G_CALLBACK (providers_radio_toggled), self);
- gtk_box_pack_start (GTK_BOX (vbox), self->providers_view_radio, FALSE, TRUE, 0);
-
- self->providers_store = gtk_tree_store_new (2, G_TYPE_STRING, NMA_TYPE_MOBILE_PROVIDER);
-
- self->providers_sort = GTK_TREE_MODEL_SORT (gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (self->providers_store)));
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (self->providers_sort),
- PROVIDER_COL_NAME, GTK_SORT_ASCENDING);
-
- self->providers_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (self->providers_sort));
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("Provider"),
- renderer,
- "text", PROVIDER_COL_NAME,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (self->providers_view), column);
- gtk_tree_view_column_set_clickable (column, TRUE);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->providers_view));
- g_assert (selection);
- g_signal_connect_swapped (selection, "changed", G_CALLBACK (providers_update_complete), self);
-
- scroll = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
- GTK_POLICY_NEVER,
- GTK_POLICY_AUTOMATIC);
- gtk_widget_set_size_request (scroll, -1, 140);
- gtk_container_add (GTK_CONTAINER (scroll), self->providers_view);
-
- alignment = gtk_alignment_new (0, 0, 1, 1);
- gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 12, 25, 0);
- gtk_container_add (GTK_CONTAINER (alignment), scroll);
- gtk_box_pack_start (GTK_BOX (vbox), alignment, TRUE, TRUE, 0);
-
- self->provider_unlisted_radio = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (self->providers_view_radio),
- _("I can’t find my provider and I wish to enter it _manually:"));
- g_signal_connect (self->providers_view_radio, "toggled", G_CALLBACK (providers_radio_toggled), self);
- gtk_box_pack_start (GTK_BOX (vbox), self->provider_unlisted_radio, FALSE, TRUE, 0);
-
- alignment = gtk_alignment_new (0, 0, 0, 0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 15, 0);
- gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 0);
-
- unlisted_grid = gtk_grid_new ();
- gtk_grid_set_row_spacing (GTK_GRID (unlisted_grid), 12);
- gtk_grid_set_column_spacing (GTK_GRID (unlisted_grid), 12);
- gtk_container_add (GTK_CONTAINER (alignment), unlisted_grid);
-
- label = gtk_label_new (_("Provider:"));
- gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
- gtk_grid_attach (GTK_GRID (unlisted_grid), label, 0, 0, 1, 1);
-
- self->provider_unlisted_entry = gtk_entry_new ();
- gtk_entry_set_width_chars (GTK_ENTRY (self->provider_unlisted_entry), 40);
- g_signal_connect_swapped (self->provider_unlisted_entry, "changed", G_CALLBACK (providers_update_complete), self);
-
- alignment = gtk_alignment_new (0, 0.5, 0.66, 0);
- gtk_widget_set_hexpand (alignment, TRUE);
- gtk_container_add (GTK_CONTAINER (alignment), self->provider_unlisted_entry);
- gtk_grid_attach (GTK_GRID (unlisted_grid), alignment,
- 1, 0, 1, 1);
-
- self->provider_unlisted_type_combo = gtk_combo_box_text_new ();
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), self->provider_unlisted_type_combo);
- gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (self->provider_unlisted_type_combo),
- _("My provider uses GSM technology (GPRS, EDGE, UMTS, HSPA)"));
- gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (self->provider_unlisted_type_combo),
- _("My provider uses CDMA technology (1xRTT, EVDO)"));
- gtk_combo_box_set_active (GTK_COMBO_BOX (self->provider_unlisted_type_combo), 0);
-
- gtk_grid_attach (GTK_GRID (unlisted_grid), self->provider_unlisted_type_combo,
- 1, 1, 1, 1);
-
- /* Only show the CDMA/GSM combo if we don't know the device type */
- if (self->family != NMA_MOBILE_FAMILY_UNKNOWN)
- gtk_widget_hide (self->provider_unlisted_type_combo);
-
- self->providers_idx = gtk_assistant_append_page (GTK_ASSISTANT (self->assistant), vbox);
- gtk_assistant_set_page_title (GTK_ASSISTANT (self->assistant), vbox, _("Choose your Provider"));
- gtk_assistant_set_page_type (GTK_ASSISTANT (self->assistant), vbox, GTK_ASSISTANT_PAGE_CONTENT);
- gtk_widget_show_all (vbox);
-
- self->providers_page = vbox;
-}
-
-static void
-providers_prepare (NMAMobileWizard *self)
-{
- GtkTreeSelection *selection;
- NMACountryInfo *country_info;
- GSList *piter;
-
- gtk_tree_store_clear (self->providers_store);
-
- country_info = get_selected_country (self);
- if (!country_info) {
- /* Unlisted country */
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->provider_unlisted_radio), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (self->providers_view_radio), FALSE);
- goto done;
- }
- gtk_widget_set_sensitive (GTK_WIDGET (self->providers_view_radio), TRUE);
-
- for (piter = nma_country_info_get_providers (country_info);
- piter;
- piter = g_slist_next (piter)) {
- NMAMobileProvider *provider = piter->data;
- GtkTreeIter provider_iter;
-
- /* Ignore providers that don't match the current device type */
- if (self->family != NMA_MOBILE_FAMILY_UNKNOWN) {
- GSList *miter;
- guint32 count = 0;
-
- for (miter = nma_mobile_provider_get_methods (provider); miter; miter = g_slist_next (miter)) {
- NMAMobileAccessMethod *method = miter->data;
-
- if (self->family == nma_mobile_access_method_get_family (method))
- count++;
- }
-
- if (!count)
- continue;
- }
-
- gtk_tree_store_append (GTK_TREE_STORE (self->providers_store), &provider_iter, NULL);
- gtk_tree_store_set (GTK_TREE_STORE (self->providers_store),
- &provider_iter,
- PROVIDER_COL_NAME,
- nma_mobile_provider_get_name (provider),
- PROVIDER_COL_PROVIDER,
- provider,
- -1);
- }
-
- nma_country_info_unref (country_info);
-
- g_object_set (G_OBJECT (self->providers_view), "enable-search", TRUE, NULL);
-
- gtk_tree_view_set_search_column (GTK_TREE_VIEW (self->providers_view), PROVIDER_COL_NAME);
- gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (self->providers_view),
- providers_search_func, self, NULL);
-
- /* If no row has focus yet, focus the first row so that the user can start
- * incremental search without clicking.
- */
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->providers_view));
- g_assert (selection);
- if (!gtk_tree_selection_count_selected_rows (selection)) {
- GtkTreeIter first_iter;
- GtkTreePath *first_path;
-
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->providers_sort), &first_iter)) {
- first_path = gtk_tree_model_get_path (GTK_TREE_MODEL (self->providers_sort), &first_iter);
- if (first_path) {
- gtk_tree_selection_select_path (selection, first_path);
- gtk_tree_path_free (first_path);
- }
- }
- }
-
-done:
- providers_radio_toggled (NULL, self);
-
- /* Initial completeness state */
- providers_update_complete (self);
-
- /* If there's already a selected device, hide the GSM/CDMA radios */
- if (self->family != NMA_MOBILE_FAMILY_UNKNOWN)
- gtk_widget_hide (self->provider_unlisted_type_combo);
- else
- gtk_widget_show (self->provider_unlisted_type_combo);
-}
-
-/**********************************************************/
-/* Country page */
-/**********************************************************/
-
-#define COUNTRIES_COL_NAME 0
-#define COUNTRIES_COL_INFO 1
-
-static gboolean
-country_search_func (GtkTreeModel *model,
- gint column,
- const char *key,
- GtkTreeIter *iter,
- gpointer search_data)
-{
- gboolean unmatched = TRUE;
- char *country = NULL;
-
- if (!key)
- return TRUE;
-
- gtk_tree_model_get (model, iter, column, &country, -1);
- if (!country)
- return TRUE;
-
- unmatched = !!g_ascii_strncasecmp (country, key, strlen (key));
- g_free (country);
- return unmatched;
-}
-
-static void
-add_one_country (gpointer key, gpointer value, gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
- NMACountryInfo *country_info = value;
- GtkTreeIter country_iter;
- GtkTreePath *country_path, *country_view_path;
-
- g_assert (key);
-
- gtk_tree_store_append (GTK_TREE_STORE (self->country_store), &country_iter, NULL);
- gtk_tree_store_set (GTK_TREE_STORE (self->country_store),
- &country_iter,
- COUNTRIES_COL_NAME,
- nma_country_info_get_country_name (country_info),
- COUNTRIES_COL_INFO,
- country_info,
- -1);
-
- /* If this country is the same country as the user's current locale,
- * select it by default.
- */
- if (self->country != country_info)
- return;
-
- country_path = gtk_tree_model_get_path (GTK_TREE_MODEL (self->country_store), &country_iter);
- if (!country_path)
- return;
-
- country_view_path = gtk_tree_model_sort_convert_child_path_to_path (self->country_sort, country_path);
- if (country_view_path) {
- GtkTreeSelection *selection;
-
- gtk_tree_view_expand_row (GTK_TREE_VIEW (self->country_view), country_view_path, TRUE);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->country_view));
- g_assert (selection);
- gtk_tree_selection_select_path (selection, country_view_path);
- gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (self->country_view),
- country_view_path, NULL, TRUE, 0, 0);
- gtk_tree_path_free (country_view_path);
- }
- gtk_tree_path_free (country_path);
-}
-
-NMACountryInfo *
-get_selected_country (NMAMobileWizard *self)
-{
- GtkTreeSelection *selection;
- GtkTreeModel *model = NULL;
- GtkTreeIter iter;
- NMACountryInfo *country_info = NULL;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->country_view));
- g_assert (selection);
-
- if (!gtk_tree_selection_get_selected (GTK_TREE_SELECTION (selection), &model, &iter))
- return NULL;
-
- gtk_tree_model_get (model, &iter, COUNTRIES_COL_INFO, &country_info, -1);
- return country_info;
-}
-
-static void
-country_update_complete (NMAMobileWizard *self)
-{
- NMACountryInfo *country_info;
-
- country_info = get_selected_country (self);
- gtk_assistant_set_page_complete (GTK_ASSISTANT (self->assistant),
- self->country_page,
- (!!country_info));
- if (country_info)
- nma_country_info_unref (country_info);
-}
-
-static void
-country_update_continue (NMAMobileWizard *self)
-{
- gtk_assistant_set_page_complete (GTK_ASSISTANT (self->assistant),
- self->country_page,
- TRUE);
-
- gtk_assistant_next_page (GTK_ASSISTANT (self->assistant));
-}
-
-static gint
-country_sort_func (GtkTreeModel *model,
- GtkTreeIter *a,
- GtkTreeIter *b,
- gpointer user_data)
-{
- char *a_str = NULL, *b_str = NULL;
- NMACountryInfo *a_country_info = NULL, *b_country_info = NULL;
- gint ret = 0;
-
- gtk_tree_model_get (model, a, COUNTRIES_COL_NAME, &a_str, COUNTRIES_COL_INFO, &a_country_info, -1);
- gtk_tree_model_get (model, b, COUNTRIES_COL_NAME, &b_str, COUNTRIES_COL_INFO, &b_country_info, -1);
-
- if (!a_country_info) {
- ret = -1;
- goto out;
- } else if (!b_country_info) {
- ret = 1;
- goto out;
- }
-
- if (a_str && !b_str)
- ret = -1;
- else if (!a_str && b_str)
- ret = 1;
- else if (!a_str && !b_str)
- ret = 0;
- else
- ret = g_utf8_collate (a_str, b_str);
-
-out:
- if (a_country_info)
- nma_country_info_unref (a_country_info);
- if (b_country_info)
- nma_country_info_unref (b_country_info);
- g_free (a_str);
- g_free (b_str);
- return ret;
-}
-
-static void
-country_setup (NMAMobileWizard *self)
-{
- GtkWidget *vbox, *label, *scroll, *alignment;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- GtkTreeSelection *selection;
- GtkTreeIter unlisted_iter;
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
- label = gtk_label_new (_("Country or Region List:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0);
-
- self->country_store = gtk_tree_store_new (2, G_TYPE_STRING, NMA_TYPE_COUNTRY_INFO);
-
- self->country_sort = GTK_TREE_MODEL_SORT (gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (self->country_store)));
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (self->country_sort),
- COUNTRIES_COL_NAME, GTK_SORT_ASCENDING);
-
- self->country_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (self->country_sort));
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("Country or region"),
- renderer,
- "text", COUNTRIES_COL_NAME,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (self->country_view), column);
- gtk_tree_view_column_set_clickable (column, TRUE);
-
- /* My country is not listed... */
- gtk_tree_store_append (GTK_TREE_STORE (self->country_store), &unlisted_iter, NULL);
- gtk_tree_store_set (GTK_TREE_STORE (self->country_store), &unlisted_iter,
- PROVIDER_COL_NAME, _("My country is not listed"),
- PROVIDER_COL_PROVIDER, NULL,
- -1);
- gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (self->country_sort),
- COUNTRIES_COL_NAME,
- country_sort_func,
- NULL,
- NULL);
-
- /* Add the rest of the providers */
- if (self->mobile_providers_database) {
- GHashTable *countries;
-
- countries = nma_mobile_providers_database_get_countries (self->mobile_providers_database);
- g_hash_table_foreach (countries, add_one_country, self);
- }
- g_object_set (G_OBJECT (self->country_view), "enable-search", TRUE, NULL);
-
- /* If no row has focus yet, focus the first row so that the user can start
- * incremental search without clicking.
- */
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->country_view));
- g_assert (selection);
- if (!gtk_tree_selection_count_selected_rows (selection)) {
- GtkTreeIter first_iter;
- GtkTreePath *first_path;
-
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->country_sort), &first_iter)) {
- first_path = gtk_tree_model_get_path (GTK_TREE_MODEL (self->country_sort), &first_iter);
- if (first_path) {
- gtk_tree_selection_select_path (selection, first_path);
- gtk_tree_path_free (first_path);
- }
- }
- }
-
- g_signal_connect_swapped (selection, "changed", G_CALLBACK (country_update_complete), self);
-
- scroll = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
- GTK_POLICY_NEVER,
- GTK_POLICY_AUTOMATIC);
- gtk_container_add (GTK_CONTAINER (scroll), self->country_view);
-
- alignment = gtk_alignment_new (0, 0, 1, 1);
- gtk_container_add (GTK_CONTAINER (alignment), scroll);
- gtk_box_pack_start (GTK_BOX (vbox), alignment, TRUE, TRUE, 6);
-
- self->country_idx = gtk_assistant_append_page (GTK_ASSISTANT (self->assistant), vbox);
- gtk_assistant_set_page_title (GTK_ASSISTANT (self->assistant), vbox, _("Choose your Provider’s Country or Region"));
- gtk_assistant_set_page_type (GTK_ASSISTANT (self->assistant), vbox, GTK_ASSISTANT_PAGE_CONTENT);
- gtk_assistant_set_page_complete (GTK_ASSISTANT (self->assistant), vbox, TRUE);
- gtk_widget_show_all (vbox);
-
- self->country_page = vbox;
-
- /* If the user presses the ENTER key after selecting the country, continue to the next page */
- g_signal_connect_swapped (self->country_view, "row-activated", G_CALLBACK (country_update_continue), self);
-
- /* Initial completeness state */
- country_update_complete (self);
-}
-
-static gboolean
-focus_country_view (gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
-
- self->country_focus_id = 0;
- gtk_widget_grab_focus (self->country_view);
- return FALSE;
-}
-
-static void
-country_prepare (NMAMobileWizard *self)
-{
- gtk_tree_view_set_search_column (GTK_TREE_VIEW (self->country_view), COUNTRIES_COL_NAME);
- gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (self->country_view), country_search_func, self, NULL);
-
- if (!self->country_focus_id)
- self->country_focus_id = g_idle_add (focus_country_view, self);
-
- country_update_complete (self);
-}
-
-/**********************************************************/
-/* Intro page */
-/**********************************************************/
-
-#define INTRO_COL_NAME 0
-#define INTRO_COL_DEVICE 1
-#define INTRO_COL_SEPARATOR 2
-
-static gboolean
-__intro_device_added (NMAMobileWizard *self, NMDevice *device, gboolean select_it)
-{
- GtkTreeIter iter;
- const char *desc = nma_utils_get_device_description (device);
- NMDeviceModemCapabilities caps;
-
- if (!NM_IS_DEVICE_MODEM (device))
- return FALSE;
-
- caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
- if (caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS) {
- if (!desc)
- desc = _("Installed GSM device");
- } else if (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO) {
- if (!desc)
- desc = _("Installed CDMA device");
- } else
- return FALSE;
-
- gtk_tree_store_append (GTK_TREE_STORE (self->dev_store), &iter, NULL);
- gtk_tree_store_set (GTK_TREE_STORE (self->dev_store),
- &iter,
- INTRO_COL_NAME, desc,
- INTRO_COL_DEVICE, device,
- -1);
-
- /* Select the device just added */
- if (select_it)
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self->dev_combo), &iter);
-
- gtk_widget_set_sensitive (self->dev_combo, TRUE);
- return TRUE;
-}
-
-static void
-intro_device_added_cb (NMClient *client, NMDevice *device, NMAMobileWizard *self)
-{
- __intro_device_added (self, device, TRUE);
-}
-
-static void
-intro_device_removed_cb (NMClient *client, NMDevice *device, NMAMobileWizard *self)
-{
- GtkTreeIter iter;
- gboolean have_device = FALSE, removed = FALSE;
-
- if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->dev_store), &iter))
- return;
-
- do {
- NMDevice *candidate = NULL;
-
- gtk_tree_model_get (GTK_TREE_MODEL (self->dev_store), &iter,
- INTRO_COL_DEVICE, &candidate, -1);
- if (candidate) {
- if (candidate == device) {
- gtk_tree_store_remove (GTK_TREE_STORE (self->dev_store), &iter);
- removed = TRUE;
- }
- g_object_unref (candidate);
- }
- } while (!removed && gtk_tree_model_iter_next (GTK_TREE_MODEL (self->dev_store), &iter));
-
- /* There's already a selected device item; nothing more to do */
- if (gtk_combo_box_get_active (GTK_COMBO_BOX (self->dev_combo)) > 1)
- return;
-
- /* If there are no more devices, select the "Any" item and disable the
- * combo box. If there is no selected item and there is at least one device
- * item, select the first one.
- */
- if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->dev_store), &iter))
- return;
-
- do {
- NMDevice *candidate = NULL;
-
- gtk_tree_model_get (GTK_TREE_MODEL (self->dev_store), &iter,
- INTRO_COL_DEVICE, &candidate, -1);
- if (candidate) {
- have_device = TRUE;
- g_object_unref (candidate);
- }
- } while (!have_device && gtk_tree_model_iter_next (GTK_TREE_MODEL (self->dev_store), &iter));
-
- if (have_device) {
- /* Iter should point to the last device item in the combo */
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self->dev_combo), &iter);
- } else {
- gtk_combo_box_set_active (GTK_COMBO_BOX (self->dev_combo), 0);
- gtk_widget_set_sensitive (self->dev_combo, FALSE);
- }
-}
-
-static void
-intro_add_initial_devices (NMAMobileWizard *self)
-{
- const GPtrArray *devices;
- gboolean selected_first = FALSE;
- int i;
-
- devices = self->client ? nm_client_get_devices (self->client) : NULL;
- for (i = 0; devices && (i < devices->len); i++) {
- if (__intro_device_added (self, g_ptr_array_index (devices, i), !selected_first)) {
- if (selected_first == FALSE)
- selected_first = TRUE;
- }
- }
-
- /* Otherwise the "Any device" item */
- if (!selected_first) {
- /* Select the first device item by default */
- gtk_combo_box_set_active (GTK_COMBO_BOX (self->dev_combo), 0);
- gtk_widget_set_sensitive (self->dev_combo, FALSE);
- }
-}
-
-static void
-intro_remove_all_devices (NMAMobileWizard *self)
-{
- gtk_tree_store_clear (self->dev_store);
-
- /* Select the "Any device" item */
- gtk_combo_box_set_active (GTK_COMBO_BOX (self->dev_combo), 0);
- gtk_widget_set_sensitive (self->dev_combo, FALSE);
-}
-
-static void
-intro_manager_running_cb (NMClient *client, GParamSpec *pspec, NMAMobileWizard *self)
-{
- if (nm_client_get_manager_running (client))
- intro_add_initial_devices (self);
- else
- intro_remove_all_devices (self);
-}
-
-static gboolean
-intro_row_separator_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
-{
- gboolean separator = FALSE;
- gtk_tree_model_get (model, iter, INTRO_COL_SEPARATOR, &separator, -1);
- return separator;
-}
-
-static void
-intro_combo_changed (NMAMobileWizard *self)
-{
- GtkTreeIter iter;
- NMDevice *selected = NULL;
- NMDeviceModemCapabilities caps;
-
- g_free (self->dev_desc);
- self->dev_desc = NULL;
-
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self->dev_combo), &iter))
- return;
-
- gtk_tree_model_get (GTK_TREE_MODEL (self->dev_store), &iter,
- INTRO_COL_DEVICE, &selected, -1);
- if (selected) {
- self->dev_desc = g_strdup (nma_utils_get_device_description (selected));
- caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (selected));
- if (caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS)
- self->family = NMA_MOBILE_FAMILY_3GPP;
- else if (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
- self->family = NMA_MOBILE_FAMILY_CDMA;
- else
- g_warning ("%s: unknown modem capabilities 0x%X", __func__, caps);
-
- g_object_unref (selected);
- }
-}
-
-static void
-intro_setup (NMAMobileWizard *self)
-{
- GtkWidget *vbox, *label, *alignment, *info_vbox;
- GtkCellRenderer *renderer;
- char *s;
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
-
- label = gtk_label_new (_("This assistant helps you easily set up a mobile broadband connection to a cellular (3G) network."));
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_label_set_max_width_chars (GTK_LABEL (label), 60);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 6);
-
- label = gtk_label_new (_("You will need the following information:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 6);
-
- alignment = gtk_alignment_new (0, 0, 1, 0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 25, 25, 0);
- info_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_add (GTK_CONTAINER (alignment), info_vbox);
- gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 6);
-
- s = g_strdup_printf ("• %s", _("Your broadband provider’s name"));
- label = gtk_label_new (s);
- g_free (s);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_box_pack_start (GTK_BOX (info_vbox), label, FALSE, TRUE, 0);
-
- s = g_strdup_printf ("• %s", _("Your broadband billing plan name"));
- label = gtk_label_new (s);
- g_free (s);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_box_pack_start (GTK_BOX (info_vbox), label, FALSE, TRUE, 0);
-
- s = g_strdup_printf ("• %s", _("(in some cases) Your broadband billing plan APN (Access Point Name)"));
- label = gtk_label_new (s);
- g_free (s);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_box_pack_start (GTK_BOX (info_vbox), label, FALSE, TRUE, 0);
-
- /* Device combo; only built if the wizard's caller didn't pass one in */
- if (!self->initial_family) {
- GtkTreeIter iter;
-
- self->client = nm_client_new ();
- if (self->client) {
- g_signal_connect (self->client, "device-added",
- G_CALLBACK (intro_device_added_cb), self);
- g_signal_connect (self->client, "device-removed",
- G_CALLBACK (intro_device_removed_cb), self);
- g_signal_connect (self->client, "notify::manager-running",
- G_CALLBACK (intro_manager_running_cb), self);
- }
-
- self->dev_store = gtk_tree_store_new (3, G_TYPE_STRING, NM_TYPE_DEVICE, G_TYPE_BOOLEAN);
- self->dev_combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (self->dev_store));
- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (self->dev_combo),
- intro_row_separator_func, NULL, NULL);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (self->dev_combo), renderer, TRUE);
- gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (self->dev_combo), renderer, "text", INTRO_COL_NAME);
-
- label = gtk_label_new_with_mnemonic (_("Create a connection for _this mobile broadband device:"));
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), self->dev_combo);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 1);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
-
- alignment = gtk_alignment_new (0, 0, 0.5, 0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 25, 0);
- gtk_container_add (GTK_CONTAINER (alignment), self->dev_combo);
- gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 0);
-
- g_signal_connect_swapped (self->dev_combo, "changed", G_CALLBACK (intro_combo_changed), self);
-
- /* Any device */
- gtk_tree_store_append (GTK_TREE_STORE (self->dev_store), &iter, NULL);
- gtk_tree_store_set (GTK_TREE_STORE (self->dev_store), &iter,
- INTRO_COL_NAME, _("Any device"), -1);
-
- /* Separator */
- gtk_tree_store_append (GTK_TREE_STORE (self->dev_store), &iter, NULL);
- gtk_tree_store_set (GTK_TREE_STORE (self->dev_store), &iter,
- INTRO_COL_SEPARATOR, TRUE, -1);
-
- intro_add_initial_devices (self);
- }
-
- gtk_widget_show_all (vbox);
- gtk_assistant_append_page (GTK_ASSISTANT (self->assistant), vbox);
- gtk_assistant_set_page_title (GTK_ASSISTANT (self->assistant),
- vbox, _("Set up a Mobile Broadband Connection"));
-
- gtk_assistant_set_page_complete (GTK_ASSISTANT (self->assistant), vbox, TRUE);
- gtk_assistant_set_page_type (GTK_ASSISTANT (self->assistant), vbox, GTK_ASSISTANT_PAGE_INTRO);
-}
-
-/**********************************************************/
-/* General assistant stuff */
-/**********************************************************/
-
-static void
-remove_provider_focus_idle (NMAMobileWizard *self)
-{
- if (self->providers_focus_id) {
- g_source_remove (self->providers_focus_id);
- self->providers_focus_id = 0;
- }
-}
-
-static void
-remove_country_focus_idle (NMAMobileWizard *self)
-{
- if (self->country_focus_id) {
- g_source_remove (self->country_focus_id);
- self->country_focus_id = 0;
- }
-}
-
-static void
-assistant_prepare (GtkAssistant *assistant, GtkWidget *page, gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
-
- if (page != self->providers_page)
- remove_provider_focus_idle (self);
- if (page != self->country_page)
- remove_country_focus_idle (self);
-
- if (page == self->country_page)
- country_prepare (self);
- else if (page == self->providers_page)
- providers_prepare (self);
- else if (page == self->plan_page)
- plan_prepare (self);
- else if (page == self->confirm_page)
- confirm_prepare (self);
-}
-
-static gint
-forward_func (gint current_page, gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
-
- if (current_page == self->providers_idx) {
- NMAMobileFamily family = self->family;
-
- /* If the provider is unlisted, we can skip ahead of the user's
- * access technology is CDMA.
- */
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->provider_unlisted_radio))) {
- if (family == NMA_MOBILE_FAMILY_UNKNOWN)
- family = get_provider_unlisted_type (self);
- } else {
- /* Or, if the provider is only CDMA, then we can also skip ahead */
- NMAMobileProvider *provider;
- GSList *iter;
- gboolean gsm = FALSE, cdma = FALSE;
-
- provider = get_selected_provider (self);
- if (provider) {
- for (iter = nma_mobile_provider_get_methods (provider); iter; iter = g_slist_next (iter)) {
- NMAMobileAccessMethod *method = iter->data;
-
- if (nma_mobile_access_method_get_family (method) == NMA_MOBILE_FAMILY_CDMA)
- cdma = TRUE;
- else if (nma_mobile_access_method_get_family (method) == NMA_MOBILE_FAMILY_3GPP)
- gsm = TRUE;
- }
- nma_mobile_provider_unref (provider);
-
- if (cdma && !gsm)
- family = NMA_MOBILE_FAMILY_CDMA;
- }
- }
-
- /* Skip to the confirm page if we know its CDMA */
- if (family == NMA_MOBILE_FAMILY_CDMA) {
- self->provider_only_cdma = TRUE;
- return self->confirm_idx;
- } else
- self->provider_only_cdma = FALSE;
- }
-
- return current_page + 1;
-}
-
-static char *
-get_country_from_locale (void)
-{
- char *p, *m, *cc, *lang;
-
- lang = getenv ("LC_ALL");
- if (!lang)
- lang = getenv ("LANG");
- if (!lang)
- return NULL;
-
- p = strchr (lang, '_');
- if (!p || !strlen (p)) {
- g_free (p);
- return NULL;
- }
-
- p = cc = g_strdup (++p);
- m = strchr (cc, '.');
- if (m)
- *m = '\0';
-
- while (*p) {
- *p = g_ascii_toupper (*p);
- p++;
- }
-
- return cc;
-}
-
-/**
- * nma_mobile_wizard_new: (skip)
- * @cb: (scope async):
- */
-NMAMobileWizard *
-nma_mobile_wizard_new (GtkWindow *parent,
- GtkWindowGroup *window_group,
- NMDeviceModemCapabilities modem_caps,
- gboolean will_connect_after,
- NMAMobileWizardCallback cb,
- gpointer user_data)
-{
- NMAMobileWizard *self;
- char *cc;
- GError *error = NULL;
-
- self = g_malloc0 (sizeof (NMAMobileWizard));
- g_return_val_if_fail (self != NULL, NULL);
-
- self->mobile_providers_database = nma_mobile_providers_database_new_sync (NULL, NULL, NULL, &error);
- if (!self->mobile_providers_database) {
- g_warning ("Cannot create mobile providers database: %s",
- error->message);
- g_error_free (error);
- nma_mobile_wizard_destroy (self);
- return NULL;
- }
-
- cc = get_country_from_locale ();
- if (cc) {
- self->country = nma_mobile_providers_database_lookup_country (self->mobile_providers_database, cc);
- g_free (cc);
- }
-
- self->will_connect_after = will_connect_after;
- self->callback = cb;
- self->user_data = user_data;
- if (modem_caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS)
- self->family = NMA_MOBILE_FAMILY_3GPP;
- else if (modem_caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
- self->family = NMA_MOBILE_FAMILY_CDMA;
- if (self->family)
- self->initial_family = TRUE; /* Skip device selection */
-
- self->assistant = gtk_assistant_new ();
- gtk_assistant_set_forward_page_func (GTK_ASSISTANT (self->assistant),
- forward_func, self, NULL);
- gtk_window_set_title (GTK_WINDOW (self->assistant), _("New Mobile Broadband Connection"));
- gtk_window_set_position (GTK_WINDOW (self->assistant), GTK_WIN_POS_CENTER_ALWAYS);
-
- intro_setup (self);
- country_setup (self);
- providers_setup (self);
- plan_setup (self);
- confirm_setup (self);
-
- g_signal_connect (self->assistant, "close", G_CALLBACK (assistant_closed), self);
- g_signal_connect (self->assistant, "cancel", G_CALLBACK (assistant_cancel), self);
- g_signal_connect (self->assistant, "prepare", G_CALLBACK (assistant_prepare), self);
-
- /* Run the wizard */
- if (parent)
- gtk_window_set_transient_for (GTK_WINDOW (self->assistant), parent);
- gtk_window_set_modal (GTK_WINDOW (self->assistant), TRUE);
- gtk_window_set_skip_taskbar_hint (GTK_WINDOW (self->assistant), TRUE);
- gtk_window_set_type_hint (GTK_WINDOW (self->assistant), GDK_WINDOW_TYPE_HINT_DIALOG);
-
- if (window_group)
- gtk_window_group_add_window (window_group, GTK_WINDOW (self->assistant));
-
- return self;
-}
-
-void
-nma_mobile_wizard_present (NMAMobileWizard *self)
-{
- g_return_if_fail (self != NULL);
-
- gtk_window_present (GTK_WINDOW (self->assistant));
- gtk_widget_show_all (self->assistant);
-}
-
-void
-nma_mobile_wizard_destroy (NMAMobileWizard *self)
-{
- g_return_if_fail (self != NULL);
-
- g_free (self->dev_desc);
-
- if (self->assistant) {
- gtk_widget_hide (self->assistant);
- gtk_widget_destroy (self->assistant);
- }
-
- if (self->client)
- g_object_unref (self->client);
-
- remove_provider_focus_idle (self);
- remove_country_focus_idle (self);
-
- if (self->mobile_providers_database)
- g_object_unref (self->mobile_providers_database);
-
- g_free (self);
-}
diff --git a/src/libnm-gtk/nm-mobile-wizard.h b/src/libnm-gtk/nm-mobile-wizard.h
deleted file mode 100644
index e26c1e1d..00000000
--- a/src/libnm-gtk/nm-mobile-wizard.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Connection editor -- Connection editor for NetworkManager
- *
- * Dan Williams <dcbw@redhat.com>
- *
- * (C) Copyright 2008 - 2011 Red Hat, Inc.
- */
-
-#ifndef MOBILE_WIZARD_H
-#define MOBILE_WIZARD_H
-
-#include <glib.h>
-#include <NetworkManager.h>
-#include <nm-device.h>
-
-typedef struct NMAMobileWizard NMAMobileWizard;
-
-typedef struct {
- char *provider_name;
- char *plan_name;
- NMDeviceModemCapabilities devtype;
- char *username;
- char *password;
- char *gsm_apn;
-} NMAMobileWizardAccessMethod;
-
-typedef void (*NMAMobileWizardCallback) (NMAMobileWizard *self,
- gboolean canceled,
- NMAMobileWizardAccessMethod *method,
- gpointer user_data);
-
-NMAMobileWizard *nma_mobile_wizard_new (GtkWindow *parent,
- GtkWindowGroup *window_group,
- NMDeviceModemCapabilities modem_caps,
- gboolean will_connect_after,
- NMAMobileWizardCallback cb,
- gpointer user_data);
-
-void nma_mobile_wizard_present (NMAMobileWizard *wizard);
-
-void nma_mobile_wizard_destroy (NMAMobileWizard *self);
-
-#endif /* MOBILE_WIZARD_H */
-
diff --git a/src/libnm-gtk/nm-ui-utils.c b/src/libnm-gtk/nm-ui-utils.c
deleted file mode 100644
index 900c741f..00000000
--- a/src/libnm-gtk/nm-ui-utils.c
+++ /dev/null
@@ -1,967 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Copyright 2007 - 2015 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <string.h>
-
-#include <gudev/gudev.h>
-
-#include <nm-device.h>
-#include <nm-device-bt.h>
-
-#include "nm-ui-utils.h"
-
-static char *ignored_words[] = {
- "Semiconductor",
- "Components",
- "Corporation",
- "Communications",
- "Company",
- "Corp.",
- "Corp",
- "Co.",
- "Inc.",
- "Inc",
- "Incorporated",
- "Ltd.",
- "Limited.",
- "Intel?",
- "chipset",
- "adapter",
- "[hex]",
- "NDIS",
- "Module",
- NULL
-};
-
-static char *ignored_phrases[] = {
- "Multiprotocol MAC/baseband processor",
- "Wireless LAN Controller",
- "Wireless LAN Adapter",
- "Wireless Adapter",
- "Network Connection",
- "Wireless Cardbus Adapter",
- "Wireless CardBus Adapter",
- "54 Mbps Wireless PC Card",
- "Wireless PC Card",
- "Wireless PC",
- "PC Card with XJACK(r) Antenna",
- "Wireless cardbus",
- "Wireless LAN PC Card",
- "Technology Group Ltd.",
- "Communication S.p.A.",
- "Business Mobile Networks BV",
- "Mobile Broadband Minicard Composite Device",
- "Mobile Communications AB",
- "(PC-Suite Mode)",
- NULL
-};
-
-static char *
-fixup_desc_string (const char *desc)
-{
- char *p, *temp;
- char **words, **item;
- GString *str;
-
- p = temp = g_strdup (desc);
- while (*p) {
- if (*p == '_' || *p == ',')
- *p = ' ';
- p++;
- }
-
- /* Attempt to shorten ID by ignoring certain phrases */
- for (item = ignored_phrases; *item; item++) {
- guint32 ignored_len = strlen (*item);
-
- p = strstr (temp, *item);
- if (p)
- memmove (p, p + ignored_len, strlen (p + ignored_len) + 1); /* +1 for the \0 */
- }
-
- /* Attmept to shorten ID by ignoring certain individual words */
- words = g_strsplit (temp, " ", 0);
- str = g_string_new_len (NULL, strlen (temp));
- g_free (temp);
-
- for (item = words; *item; item++) {
- int i = 0;
- gboolean ignore = FALSE;
-
- if (g_ascii_isspace (**item) || (**item == '\0'))
- continue;
-
- while (ignored_words[i] && !ignore) {
- if (!strcmp (*item, ignored_words[i]))
- ignore = TRUE;
- i++;
- }
-
- if (!ignore) {
- if (str->len)
- g_string_append_c (str, ' ');
- g_string_append (str, *item);
- }
- }
- g_strfreev (words);
-
- temp = str->str;
- g_string_free (str, FALSE);
-
- return temp;
-}
-
-#define VENDOR_TAG "nma_utils_get_device_vendor"
-#define PRODUCT_TAG "nma_utils_get_device_product"
-#define DESCRIPTION_TAG "nma_utils_get_device_description"
-
-static void
-get_description (NMDevice *device)
-{
- char *description = NULL;
- const char *dev_product;
- const char *dev_vendor;
- char *product = NULL;
- char *vendor = NULL;
- GString *str;
-
- dev_product = nm_device_get_product (device);
- dev_vendor = nm_device_get_vendor (device);
- if (!dev_product || !dev_vendor) {
- g_object_set_data (G_OBJECT (device),
- DESCRIPTION_TAG,
- (char *) nm_device_get_iface (device));
- return;
- }
-
- product = fixup_desc_string (dev_product);
- vendor = fixup_desc_string (dev_vendor);
-
- str = g_string_new_len (NULL, strlen (vendor) + strlen (product) + 1);
-
- /* Another quick hack; if all of the fixed up vendor string
- * is found in product, ignore the vendor.
- */
- if (!strcasestr (product, vendor)) {
- g_string_append (str, vendor);
- g_string_append_c (str, ' ');
- }
-
- g_string_append (str, product);
-
- description = g_string_free (str, FALSE);
-
- g_object_set_data_full (G_OBJECT (device),
- VENDOR_TAG, vendor,
- (GDestroyNotify) g_free);
- g_object_set_data_full (G_OBJECT (device),
- PRODUCT_TAG, product,
- (GDestroyNotify) g_free);
- g_object_set_data_full (G_OBJECT (device),
- DESCRIPTION_TAG, description,
- (GDestroyNotify) g_free);
-}
-
-/**
- * nma_utils_get_device_vendor:
- * @device: an #NMDevice
- *
- * Gets a cleaned-up version of #NMDevice:vendor for @device. This
- * removes strings like "Inc." that would just take up unnecessary
- * space in the UI.
- *
- * Returns: a cleaned-up vendor string, or %NULL if the vendor is
- * not known
- */
-const char *
-nma_utils_get_device_vendor (NMDevice *device)
-{
- const char *vendor;
-
- g_return_val_if_fail (device != NULL, NULL);
-
- vendor = g_object_get_data (G_OBJECT (device), VENDOR_TAG);
- if (!vendor) {
- get_description (device);
- vendor = g_object_get_data (G_OBJECT (device), VENDOR_TAG);
- }
-
- return vendor;
-}
-
-/**
- * nma_utils_get_device_product:
- * @device: an #NMDevice
- *
- * Gets a cleaned-up version of #NMDevice:product for @device. This
- * removes strings like "Wireless LAN Adapter" that would just take up
- * unnecessary space in the UI.
- *
- * Returns: a cleaned-up product string, or %NULL if the product name
- * is not known
- */
-const char *
-nma_utils_get_device_product (NMDevice *device)
-{
- const char *product;
-
- g_return_val_if_fail (device != NULL, NULL);
-
- product = g_object_get_data (G_OBJECT (device), PRODUCT_TAG);
- if (!product) {
- get_description (device);
- product = g_object_get_data (G_OBJECT (device), PRODUCT_TAG);
- }
-
- return product;
-}
-
-/**
- * nma_utils_get_device_description:
- * @device: an #NMDevice
- *
- * Gets a description of @device, incorporating the results of
- * nma_utils_get_device_vendor() and
- * nma_utils_get_device_product().
- *
- * Returns: a description of @device. If either the vendor or the
- * product name is unknown, this returns the interface name.
- */
-const char *
-nma_utils_get_device_description (NMDevice *device)
-{
- const char *description;
-
- g_return_val_if_fail (device != NULL, NULL);
-
- description = g_object_get_data (G_OBJECT (device), DESCRIPTION_TAG);
- if (!description) {
- get_description (device);
- description = g_object_get_data (G_OBJECT (device), DESCRIPTION_TAG);
- }
-
- return description;
-}
-
-static gboolean
-find_duplicates (char **names,
- gboolean *duplicates,
- int num_devices)
-{
- int i, j;
- gboolean found_any = FALSE;
-
- memset (duplicates, 0, num_devices * sizeof (gboolean));
- for (i = 0; i < num_devices; i++) {
- if (duplicates[i])
- continue;
- for (j = i + 1; j < num_devices; j++) {
- if (duplicates[j])
- continue;
- if (!strcmp (names[i], names[j]))
- duplicates[i] = duplicates[j] = found_any = TRUE;
- }
- }
-
- return found_any;
-}
-
-/**
- * nma_utils_get_device_generic_type_name:
- * @device: an #NMDevice
- *
- * Gets a "generic" name for the type of @device.
- *
- * Returns: @device's generic type name
- */
-const char *
-nma_utils_get_device_generic_type_name (NMDevice *device)
-{
- switch (nm_device_get_device_type (device)) {
- case NM_DEVICE_TYPE_ETHERNET:
- case NM_DEVICE_TYPE_INFINIBAND:
- return _("Wired");
- default:
- return nma_utils_get_device_type_name (device);
- }
-}
-
-/**
- * nma_utils_get_device_type_name:
- * @device: an #NMDevice
- *
- * Gets a specific name for the type of @device.
- *
- * Returns: @device's generic type name
- */
-const char *
-nma_utils_get_device_type_name (NMDevice *device)
-{
- switch (nm_device_get_device_type (device)) {
- case NM_DEVICE_TYPE_ETHERNET:
- return _("Ethernet");
- case NM_DEVICE_TYPE_WIFI:
- return _("Wi-Fi");
- case NM_DEVICE_TYPE_BT:
- return _("Bluetooth");
- case NM_DEVICE_TYPE_OLPC_MESH:
- return _("OLPC Mesh");
- case NM_DEVICE_TYPE_MODEM:
- return _("Mobile Broadband");
- case NM_DEVICE_TYPE_INFINIBAND:
- return _("InfiniBand");
- case NM_DEVICE_TYPE_BOND:
- return _("Bond");
- case NM_DEVICE_TYPE_TEAM:
- return _("Team");
- case NM_DEVICE_TYPE_BRIDGE:
- return _("Bridge");
- case NM_DEVICE_TYPE_VLAN:
- return _("VLAN");
- case NM_DEVICE_TYPE_ADSL:
- return _("ADSL");
- default:
- return _("Unknown");
- }
-}
-
-static char *
-get_device_type_name_with_iface (NMDevice *device)
-{
- const char *type_name = nma_utils_get_device_type_name (device);
-
- switch (nm_device_get_device_type (device)) {
- case NM_DEVICE_TYPE_BOND:
- case NM_DEVICE_TYPE_TEAM:
- case NM_DEVICE_TYPE_BRIDGE:
- case NM_DEVICE_TYPE_VLAN:
- return g_strdup_printf ("%s (%s)", type_name, nm_device_get_iface (device));
- default:
- return g_strdup (type_name);
- }
-}
-
-static char *
-get_device_generic_type_name_with_iface (NMDevice *device)
-{
- switch (nm_device_get_device_type (device)) {
- case NM_DEVICE_TYPE_ETHERNET:
- case NM_DEVICE_TYPE_INFINIBAND:
- return g_strdup (_("Wired"));
- default:
- return get_device_type_name_with_iface (device);
- }
-}
-
-#define BUS_TAG "nm-ui-utils.c:get_bus_name"
-
-static const char *
-get_bus_name (GUdevClient *uclient, NMDevice *device)
-{
- GUdevDevice *udevice;
- const char *ifname, *bus;
- char *display_bus;
-
- bus = g_object_get_data (G_OBJECT (device), BUS_TAG);
- if (bus) {
- if (*bus)
- return bus;
- else
- return NULL;
- }
-
- ifname = nm_device_get_iface (device);
- if (!ifname)
- return NULL;
-
- udevice = g_udev_client_query_by_subsystem_and_name (uclient, "net", ifname);
- if (!udevice)
- udevice = g_udev_client_query_by_subsystem_and_name (uclient, "tty", ifname);
- if (!udevice)
- return NULL;
-
- bus = g_udev_device_get_property (udevice, "ID_BUS");
- if (!g_strcmp0 (bus, "pci"))
- display_bus = g_strdup (_("PCI"));
- else if (!g_strcmp0 (bus, "usb"))
- display_bus = g_strdup (_("USB"));
- else {
- /* Use "" instead of NULL so we can tell later that we've
- * already tried.
- */
- display_bus = g_strdup ("");
- }
-
- g_object_set_data_full (G_OBJECT (device),
- BUS_TAG, display_bus,
- (GDestroyNotify) g_free);
- if (*display_bus)
- return display_bus;
- else
- return NULL;
-}
-
-/**
- * nma_utils_disambiguate_device_names:
- * @devices: (array length=num_devices): a set of #NMDevice
- * @num_devices: length of @devices
- *
- * Generates a list of short-ish unique presentation names for the
- * devices in @devices.
- *
- * Returns: (transfer full) (array zero-terminated=1): the device names
- */
-char **
-nma_utils_disambiguate_device_names (NMDevice **devices,
- int num_devices)
-{
- static const char *subsys[3] = { "net", "tty", NULL };
- GUdevClient *uclient;
- char **names;
- gboolean *duplicates;
- int i;
-
- names = g_new (char *, num_devices + 1);
- duplicates = g_new (gboolean, num_devices);
-
- /* Generic device name */
- for (i = 0; i < num_devices; i++)
- names[i] = get_device_generic_type_name_with_iface (devices[i]);
- if (!find_duplicates (names, duplicates, num_devices))
- goto done;
-
- /* Try specific names (eg, "Ethernet" and "InfiniBand" rather
- * than "Wired")
- */
- for (i = 0; i < num_devices; i++) {
- if (duplicates[i]) {
- g_free (names[i]);
- names[i] = get_device_type_name_with_iface (devices[i]);
- }
- }
- if (!find_duplicates (names, duplicates, num_devices))
- goto done;
-
- /* Try prefixing bus name (eg, "PCI Ethernet" vs "USB Ethernet") */
- uclient = g_udev_client_new (subsys);
- for (i = 0; i < num_devices; i++) {
- if (duplicates[i]) {
- const char *bus = get_bus_name (uclient, devices[i]);
- char *name;
-
- if (!bus)
- continue;
-
- g_free (names[i]);
- name = get_device_type_name_with_iface (devices[i]);
- /* Translators: the first %s is a bus name (eg, "USB") or
- * product name, the second is a device type (eg,
- * "Ethernet"). You can change this to something like
- * "%2$s (%1$s)" if there's no grammatical way to combine
- * the strings otherwise.
- */
- names[i] = g_strdup_printf (C_("long device name", "%s %s"),
- bus, name);
- g_free (name);
- }
- }
- g_object_unref (uclient);
- if (!find_duplicates (names, duplicates, num_devices))
- goto done;
-
- /* Try prefixing vendor name */
- for (i = 0; i < num_devices; i++) {
- if (duplicates[i]) {
- const char *vendor = nma_utils_get_device_vendor (devices[i]);
- char *name;
-
- if (!vendor)
- continue;
-
- g_free (names[i]);
- name = get_device_type_name_with_iface (devices[i]);
- names[i] = g_strdup_printf (C_("long device name", "%s %s"),
- vendor,
- nma_utils_get_device_type_name (devices[i]));
- g_free (name);
- }
- }
- if (!find_duplicates (names, duplicates, num_devices))
- goto done;
-
- /* If dealing with Bluetooth devices, try to distinguish them by
- * device name.
- */
- for (i = 0; i < num_devices; i++) {
- if (duplicates[i] && NM_IS_DEVICE_BT (devices[i])) {
- const char *devname = nm_device_bt_get_name (NM_DEVICE_BT (devices[i]));
-
- if (!devname)
- continue;
-
- g_free (names[i]);
- names[i] = g_strdup_printf ("%s (%s)",
- nma_utils_get_device_type_name (devices[i]),
- devname);
- }
- }
- if (!find_duplicates (names, duplicates, num_devices))
- goto done;
-
- /* We have multiple identical network cards, so we have to differentiate
- * them by interface name.
- */
- for (i = 0; i < num_devices; i++) {
- if (duplicates[i]) {
- const char *interface = nm_device_get_iface (devices[i]);
-
- if (!interface)
- continue;
-
- g_free (names[i]);
- names[i] = g_strdup_printf ("%s (%s)",
- nma_utils_get_device_type_name (devices[i]),
- interface);
- }
- }
-
- done:
- g_free (duplicates);
- names[num_devices] = NULL;
- return names;
-}
-
-/**
- * nma_utils_get_connection_device_name:
- * @connection: an #NMConnection for a virtual device type
- *
- * Returns the name that nma_utils_disambiguate_device_names() would
- * return for the virtual device that would be created for @connection.
- * Eg, "VLAN (eth1.1)".
- *
- * Returns: (transfer full): the name of @connection's device
- */
-char *
-nma_utils_get_connection_device_name (NMConnection *connection)
-{
- const char *iface, *type, *display_type;
- NMSettingConnection *s_con;
-
- iface = nm_connection_get_virtual_iface_name (connection);
- g_return_val_if_fail (iface != NULL, NULL);
-
- s_con = nm_connection_get_setting_connection (connection);
- g_return_val_if_fail (s_con != NULL, NULL);
- type = nm_setting_connection_get_connection_type (s_con);
-
- if (!strcmp (type, NM_SETTING_BOND_SETTING_NAME))
- display_type = _("Bond");
- else if (!strcmp (type, NM_SETTING_TEAM_SETTING_NAME))
- display_type = _("Team");
- else if (!strcmp (type, NM_SETTING_BRIDGE_SETTING_NAME))
- display_type = _("Bridge");
- else if (!strcmp (type, NM_SETTING_VLAN_SETTING_NAME))
- display_type = _("VLAN");
- else {
- g_warning ("Unrecognized virtual device type '%s'", type);
- display_type = type;
- }
-
- return g_strdup_printf ("%s (%s)", display_type, iface);
-}
-
-/*---------------------------------------------------------------------------*/
-/* Password storage icon */
-
-#define PASSWORD_STORAGE_MENU_TAG "password-storage-menu"
-#define MENU_WITH_NOT_REQUIRED_TAG "menu-with-not-required"
-#define ASK_MODE_TAG "ask-mode"
-
-typedef enum {
- ITEM_STORAGE_USER = 0,
- ITEM_STORAGE_SYSTEM = 1,
- ITEM_STORAGE_ASK = 2,
- ITEM_STORAGE_UNUSED = 3,
- __ITEM_STORAGE_MAX,
- ITEM_STORAGE_MAX = __ITEM_STORAGE_MAX - 1,
-} MenuItem;
-
-static const char *icon_name_table[ITEM_STORAGE_MAX + 1] = {
- [ITEM_STORAGE_USER] = "user-info-symbolic",
- [ITEM_STORAGE_SYSTEM] = "system-users-symbolic",
- [ITEM_STORAGE_ASK] = "dialog-question-symbolic",
- [ITEM_STORAGE_UNUSED] = "edit-clear-all-symbolic",
-};
-static const char *icon_desc_table[ITEM_STORAGE_MAX + 1] = {
- [ITEM_STORAGE_USER] = N_("Store the password only for this user"),
- [ITEM_STORAGE_SYSTEM] = N_("Store the password for all users"),
- [ITEM_STORAGE_ASK] = N_("Ask for this password every time"),
- [ITEM_STORAGE_UNUSED] = N_("The password is not required"),
-};
-
-static void
-g_free_str0 (gpointer mem)
-{
- /* g_free a char pointer and set it to 0 before (for passwords). */
- if (mem) {
- char *p = mem;
- memset (p, 0, strlen (p));
- g_free (p);
- }
-}
-
-static void
-change_password_storage_icon (GtkWidget *passwd_entry, MenuItem item)
-{
- const char *old_pwd;
- gboolean ask_mode;
-
- g_return_if_fail (item >= 0 && item <= ITEM_STORAGE_MAX);
-
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (passwd_entry),
- GTK_ENTRY_ICON_SECONDARY,
- icon_name_table[item]);
- gtk_entry_set_icon_tooltip_text (GTK_ENTRY (passwd_entry),
- GTK_ENTRY_ICON_SECONDARY,
- _(icon_desc_table[item]));
-
- /* We want to make entry insensitive when ITEM_STORAGE_ASK is selected
- * Unfortunately, making GtkEntry insensitive will also make the icon
- * insensitive, which prevents user from reverting the action.
- * Let's workaround that by disabling focus for entry instead of
- * sensitivity change.
- */
- ask_mode = !!g_object_get_data (G_OBJECT (passwd_entry), ASK_MODE_TAG);
- if ( (item == ITEM_STORAGE_ASK && !ask_mode)
- || item == ITEM_STORAGE_UNUSED) {
- /* Store the old password */
- old_pwd = gtk_entry_get_text (GTK_ENTRY (passwd_entry));
- if (old_pwd && *old_pwd)
- g_object_set_data_full (G_OBJECT (passwd_entry), "password-old",
- g_strdup (old_pwd), g_free_str0);
- gtk_entry_set_text (GTK_ENTRY (passwd_entry), "");
-
- if (gtk_widget_is_focus (passwd_entry))
- gtk_widget_child_focus ((gtk_widget_get_toplevel (passwd_entry)), GTK_DIR_TAB_BACKWARD);
- gtk_widget_set_can_focus (passwd_entry, FALSE);
- } else {
- /* Set the old password to the entry */
- old_pwd = g_object_get_data (G_OBJECT (passwd_entry), "password-old");
- if (old_pwd && *old_pwd)
- gtk_entry_set_text (GTK_ENTRY (passwd_entry), old_pwd);
- g_object_set_data (G_OBJECT (passwd_entry), "password-old", NULL);
-
- if (!gtk_widget_get_can_focus (passwd_entry)) {
- gtk_widget_set_can_focus (passwd_entry, TRUE);
- gtk_widget_grab_focus (passwd_entry);
- }
- }
-}
-
-static MenuItem
-secret_flags_to_menu_item (NMSettingSecretFlags flags, gboolean with_not_required)
-{
- MenuItem idx;
-
- if (flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)
- idx = ITEM_STORAGE_ASK;
- else if (with_not_required && (flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED))
- idx = ITEM_STORAGE_UNUSED;
- else if (flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED)
- idx = ITEM_STORAGE_USER;
- else
- idx = ITEM_STORAGE_SYSTEM;
-
- return idx;
-}
-
-static NMSettingSecretFlags
-menu_item_to_secret_flags (MenuItem item)
-{
- NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
-
- switch (item) {
- case ITEM_STORAGE_USER:
- flags |= NM_SETTING_SECRET_FLAG_AGENT_OWNED;
- break;
- case ITEM_STORAGE_ASK:
- flags |= NM_SETTING_SECRET_FLAG_NOT_SAVED;
- break;
- case ITEM_STORAGE_UNUSED:
- flags |= NM_SETTING_SECRET_FLAG_NOT_REQUIRED;
- break;
- case ITEM_STORAGE_SYSTEM:
- default:
- break;
- }
- return flags;
-}
-
-typedef struct {
- NMSetting *setting;
- char *password_flags_name;
- MenuItem item_number;
- GtkWidget *passwd_entry;
-} PopupMenuItemInfo;
-
-static void
-popup_menu_item_info_destroy (gpointer data, GClosure *closure)
-{
- PopupMenuItemInfo *info = (PopupMenuItemInfo *) data;
-
- if (info->setting)
- g_object_unref (info->setting);
- g_clear_pointer (&info->password_flags_name, g_free);
- if (info->passwd_entry)
- g_object_remove_weak_pointer (G_OBJECT (info->passwd_entry), (gpointer *) &info->passwd_entry);
- g_slice_free (PopupMenuItemInfo, info);
-}
-
-static void
-activate_menu_item_cb (GtkMenuItem *menuitem, gpointer user_data)
-{
- PopupMenuItemInfo *info = (PopupMenuItemInfo *) user_data;
- NMSettingSecretFlags flags;
-
- /* Update password flags according to the password-storage popup menu */
- if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem))) {
- flags = menu_item_to_secret_flags (info->item_number);
-
- /* Update the secret flags in the setting */
- if (info->setting)
- nm_setting_set_secret_flags (info->setting, info->password_flags_name,
- flags, NULL);
-
- /* Change icon */
- if (info->passwd_entry) {
- change_password_storage_icon (info->passwd_entry, info->item_number);
-
- /* Emit "changed" signal on the entry */
- g_signal_emit_by_name (G_OBJECT (info->passwd_entry), "changed");
- }
- }
-}
-
-static void
-popup_menu_item_info_register (GtkWidget *item,
- NMSetting *setting,
- const char *password_flags_name,
- MenuItem item_number,
- GtkWidget *passwd_entry)
-{
- PopupMenuItemInfo *info;
-
- info = g_slice_new0 (PopupMenuItemInfo);
- info->setting = setting ? g_object_ref (setting) : NULL;
- info->password_flags_name = g_strdup (password_flags_name);
- info->item_number = item_number;
- info->passwd_entry = passwd_entry;
-
- if (info->passwd_entry)
- g_object_add_weak_pointer (G_OBJECT (info->passwd_entry), (gpointer *) &info->passwd_entry);
-
- g_signal_connect_data (item, "activate",
- G_CALLBACK (activate_menu_item_cb),
- info,
- (GClosureNotify) popup_menu_item_info_destroy, 0);
-}
-
-static void
-icon_release_cb (GtkEntry *entry,
- GtkEntryIconPosition position,
- GdkEventButton *event,
- gpointer data)
-{
- GtkMenu *menu = GTK_MENU (data);
- if (position == GTK_ENTRY_ICON_SECONDARY) {
- gtk_widget_show_all (GTK_WIDGET (data));
- gtk_menu_popup (menu, NULL, NULL, NULL, NULL,
- event->button, event->time);
- }
-}
-
-/**
- * nma_utils_setup_password_storage:
- * @passwd_entry: password #GtkEntry which the icon is attached to
- * @initial_flags: initial secret flags to setup password menu from
- * @setting: #NMSetting containing the password, or NULL
- * @password_flags_name: name of the secret flags (like psk-flags), or NULL
- * @with_not_required: whether to include "Not required" menu item
- * @ask_mode: %TRUE if the entrie is shown in ASK mode. That means,
- * while prompting for a password, contrary to being inside the
- * editor mode.
- * If %TRUE, the entry should be sensivive on selected "always-ask"
- * icon (this is e.f. for nm-applet asking for password), otherwise
- * not.
- * If %TRUE, it shall not be possible to select a different storage,
- * because we only prompt for a password, we cannot change the password
- * location.
- *
- * Adds a secondary icon and creates a popup menu for password entry.
- * The active menu item is set up according to initial_flags, or
- * from @setting/@password_flags_name (if they are not NULL).
- * If the @setting/@password_flags_name are not NULL, secret flags will
- * be automatically updated in the setting when menu is changed.
- */
-void
-nma_utils_setup_password_storage (GtkWidget *passwd_entry,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode)
-{
- GtkWidget *popup_menu;
- GtkWidget *item[4];
- GSList *group;
- MenuItem idx;
- NMSettingSecretFlags secret_flags;
-
- /* Whether entry should be sensitive if "always-ask" is active " */
- g_object_set_data (G_OBJECT (passwd_entry), ASK_MODE_TAG, GUINT_TO_POINTER (ask_mode));
-
- popup_menu = gtk_menu_new ();
- g_object_set_data (G_OBJECT (popup_menu), PASSWORD_STORAGE_MENU_TAG, GUINT_TO_POINTER (TRUE));
- g_object_set_data (G_OBJECT (popup_menu), MENU_WITH_NOT_REQUIRED_TAG, GUINT_TO_POINTER (with_not_required));
- group = NULL;
- item[0] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[0]));
- group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (item[0]));
- item[1] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[1]));
- item[2] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[2]));
- if (with_not_required)
- item[3] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[3]));
-
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item[0]);
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item[1]);
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item[2]);
- if (with_not_required)
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item[3]);
-
- popup_menu_item_info_register (item[0], setting, password_flags_name, ITEM_STORAGE_USER, passwd_entry);
- popup_menu_item_info_register (item[1], setting, password_flags_name, ITEM_STORAGE_SYSTEM, passwd_entry);
- popup_menu_item_info_register (item[2], setting, password_flags_name, ITEM_STORAGE_ASK, passwd_entry);
- if (with_not_required)
- popup_menu_item_info_register (item[3], setting, password_flags_name, ITEM_STORAGE_UNUSED, passwd_entry);
-
- g_signal_connect (passwd_entry, "icon-release", G_CALLBACK (icon_release_cb), popup_menu);
- gtk_entry_set_icon_activatable (GTK_ENTRY (passwd_entry), GTK_ENTRY_ICON_SECONDARY,
- !ask_mode);
- gtk_menu_attach_to_widget (GTK_MENU (popup_menu), passwd_entry, NULL);
-
- /* Initialize active item for password-storage popup menu */
- if (setting && password_flags_name)
- nm_setting_get_secret_flags (setting, password_flags_name, &secret_flags, NULL);
- else
- secret_flags = initial_flags;
-
- idx = secret_flags_to_menu_item (secret_flags, with_not_required);
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item[idx]), TRUE);
- change_password_storage_icon (passwd_entry, idx);
-}
-
-/**
- * nma_utils_menu_to_secret_flags:
- * @passwd_entry: password #GtkEntry which the password icon/menu is attached to
- *
- * Returns secret flags corresponding to the selected password storage menu
- * in the attached icon
- *
- * Returns: secret flags corresponding to the active item in password menu
- */
-NMSettingSecretFlags
-nma_utils_menu_to_secret_flags (GtkWidget *passwd_entry)
-{
- GList *menu_list, *iter;
- GtkWidget *menu = NULL;
- NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
-
- menu_list = gtk_menu_get_for_attach_widget (passwd_entry);
- for (iter = menu_list; iter; iter = g_list_next (iter)) {
- if (g_object_get_data (G_OBJECT (iter->data), PASSWORD_STORAGE_MENU_TAG)) {
- menu = iter->data;
- break;
- }
- }
-
- /* Translate password popup menu to secret flags */
- if (menu) {
- MenuItem idx = 0;
- GList *list;
- int i, length;
-
- list = gtk_container_get_children (GTK_CONTAINER (menu));
- length = g_list_length (list);
- for (i = 0; i < length; i++) {
- if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (list->data))) {
- idx = (MenuItem) i;
- break;
- }
- list = g_list_next (list);
- }
-
- flags = menu_item_to_secret_flags (idx);
- }
- return flags;
-}
-
-/**
- * nma_utils_update_password_storage:
- * @passwd_entry: #GtkEntry with the password
- * @secret_flags: secret flags to set
- * @setting: #NMSetting containing the password, or NULL
- * @password_flags_name: name of the secret flags (like psk-flags), or NULL
- *
- * Updates secret flags in the password storage popup menu and also
- * in the @setting (if @setting and @password_flags_name are not NULL).
- *
- */
-void
-nma_utils_update_password_storage (GtkWidget *passwd_entry,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name)
-{
- GList *menu_list, *iter;
- GtkWidget *menu = NULL;
-
- /* Update secret flags (WEP_KEY_FLAGS, PSK_FLAGS, ...) in the security setting */
- if (setting && password_flags_name)
- nm_setting_set_secret_flags (setting, password_flags_name, secret_flags, NULL);
-
- /* Update password-storage popup menu to reflect secret flags */
- menu_list = gtk_menu_get_for_attach_widget (passwd_entry);
- for (iter = menu_list; iter; iter = g_list_next (iter)) {
- if (g_object_get_data (G_OBJECT (iter->data), PASSWORD_STORAGE_MENU_TAG)) {
- menu = iter->data;
- break;
- }
- }
-
- if (menu) {
- GtkRadioMenuItem *item;
- MenuItem idx;
- GSList *group;
- gboolean with_not_required;
- int i, last;
-
- /* radio menu group list contains the menu items in reverse order */
- item = (GtkRadioMenuItem *) gtk_menu_get_active (GTK_MENU (menu));
- group = gtk_radio_menu_item_get_group (item);
- with_not_required = !!g_object_get_data (G_OBJECT (menu), MENU_WITH_NOT_REQUIRED_TAG);
-
- idx = secret_flags_to_menu_item (secret_flags, with_not_required);
- last = g_slist_length (group) - idx - 1;
- for (i = 0; i < last; i++)
- group = g_slist_next (group);
-
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (group->data), TRUE);
- change_password_storage_icon (passwd_entry, idx);
- }
-}
-/*---------------------------------------------------------------------------*/
-
diff --git a/src/libnm-gtk/nm-ui-utils.h b/src/libnm-gtk/nm-ui-utils.h
deleted file mode 100644
index 17d1452c..00000000
--- a/src/libnm-gtk/nm-ui-utils.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Wireless Applet -- Display wireless access points and allow user control
- *
- * (C) Copyright 2007 - 2015 Red Hat, Inc.
- */
-
-#ifndef NMA_UI_UTILS_H
-#define NMA_UI_UTILS_H
-
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <nm-device.h>
-#include <nm-setting.h>
-#include <nm-connection.h>
-
-const char *nma_utils_get_device_vendor (NMDevice *device);
-const char *nma_utils_get_device_product (NMDevice *device);
-const char *nma_utils_get_device_description (NMDevice *device);
-const char *nma_utils_get_device_generic_type_name (NMDevice *device);
-const char *nma_utils_get_device_type_name (NMDevice *device);
-
-char **nma_utils_disambiguate_device_names (NMDevice **devices,
- int num_devices);
-char *nma_utils_get_connection_device_name (NMConnection *connection);
-
-void nma_utils_setup_password_storage (GtkWidget *passwd_entry,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode);
-NMSettingSecretFlags nma_utils_menu_to_secret_flags (GtkWidget *passwd_entry);
-void nma_utils_update_password_storage (GtkWidget *passwd_entry,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name);
-
-#endif /* NMA_UI_UTILS_H */
-
diff --git a/src/libnm-gtk/nm-vpn-password-dialog.c b/src/libnm-gtk/nm-vpn-password-dialog.c
deleted file mode 100644
index 18a77804..00000000
--- a/src/libnm-gtk/nm-vpn-password-dialog.c
+++ /dev/null
@@ -1,522 +0,0 @@
-/* nma-vpn-password-dialog.c - A password prompting dialog widget.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public License as
- * published by the ree Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * Copyright (C) 1999, 2000 Eazel, Inc.
- * Copyright (C) 2011, 2017 Red Hat, Inc.
- *
- * Authors: Ramiro Estrugo <ramiro@eazel.com>
- * Dan Williams <dcbw@redhat.com>
- */
-
-#include "nm-default.h"
-
-#include "nm-vpn-password-dialog.h"
-
-G_DEFINE_TYPE (NMAVpnPasswordDialog, nma_vpn_password_dialog, GTK_TYPE_DIALOG)
-
-#define NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- NMA_VPN_TYPE_PASSWORD_DIALOG, \
- NMAVpnPasswordDialogPrivate))
-
-typedef struct {
- /* Attributes */
- gboolean show_password;
- gboolean show_password_secondary;
- gboolean show_password_ternary;
-
- /* Internal widgetry and flags */
- GtkWidget *password_entry;
- GtkWidget *password_entry_secondary;
- GtkWidget *password_entry_ternary;
- GtkWidget *show_passwords_checkbox;
-
- GtkWidget *grid_alignment;
- GtkWidget *grid;
- GtkSizeGroup *group;
-
- char *primary_password_label;
- char *secondary_password_label;
- char *ternary_password_label;
-} NMAVpnPasswordDialogPrivate;
-
-/* NMAVpnPasswordDialogClass methods */
-static void nma_vpn_password_dialog_class_init (NMAVpnPasswordDialogClass *password_dialog_class);
-static void nma_vpn_password_dialog_init (NMAVpnPasswordDialog *password_dialog);
-
-/* GtkDialog callbacks */
-static void dialog_show_callback (GtkWidget *widget, gpointer callback_data);
-static void dialog_close_callback (GtkWidget *widget, gpointer callback_data);
-
-static void
-finalize (GObject *object)
-{
- NMAVpnPasswordDialogPrivate *priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (object);
-
- g_object_unref (priv->password_entry);
- g_object_unref (priv->password_entry_secondary);
- g_object_unref (priv->password_entry_ternary);
- g_object_unref (priv->group);
-
- g_free (priv->primary_password_label);
- g_free (priv->secondary_password_label);
- g_free (priv->ternary_password_label);
-
- G_OBJECT_CLASS (nma_vpn_password_dialog_parent_class)->finalize (object);
-}
-
-static void
-nma_vpn_password_dialog_class_init (NMAVpnPasswordDialogClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMAVpnPasswordDialogPrivate));
-
- object_class->finalize = finalize;
-}
-
-static void
-nma_vpn_password_dialog_init (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- priv->show_password = TRUE;
- priv->primary_password_label = g_strdup ( _("_Password:") );
- priv->show_password_secondary = TRUE;
- priv->secondary_password_label = g_strdup ( _("_Secondary Password:") );
- /* Make ternary password entry hidden by default */
- priv->show_password_ternary = FALSE;
- priv->ternary_password_label = g_strdup ( _("_Tertiary Password:") );
-}
-
-/* GtkDialog callbacks */
-static void
-dialog_show_callback (GtkWidget *widget, gpointer callback_data)
-{
- NMAVpnPasswordDialog *dialog = NMA_VPN_PASSWORD_DIALOG (callback_data);
- NMAVpnPasswordDialogPrivate *priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- if (gtk_widget_get_visible (priv->password_entry))
- gtk_widget_grab_focus (priv->password_entry);
- else if (gtk_widget_get_visible (priv->password_entry_secondary))
- gtk_widget_grab_focus (priv->password_entry_secondary);
- else if (gtk_widget_get_visible (priv->password_entry_ternary))
- gtk_widget_grab_focus (priv->password_entry_ternary);
-}
-
-static void
-dialog_close_callback (GtkWidget *widget, gpointer callback_data)
-{
- gtk_widget_hide (widget);
-}
-
-static void
-add_row (GtkWidget *grid, int row, const char *label_text, GtkWidget *entry)
-{
- GtkWidget *label;
-
- label = gtk_label_new_with_mnemonic (label_text);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-
- gtk_grid_attach (GTK_GRID (grid), label, 0, row, 1, 1);
- gtk_grid_attach (GTK_GRID (grid), entry, 1, row, 1, 1);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
-}
-
-static void
-remove_child (GtkWidget *child, GtkWidget *grid)
-{
- gtk_container_remove (GTK_CONTAINER (grid), child);
-}
-
-static void
-add_grid_rows (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- int row;
- int offset = 0;
-
- gtk_alignment_set_padding (GTK_ALIGNMENT (priv->grid_alignment), 0, 0, offset, 0);
-
- /* This will not kill the entries, since they are ref:ed */
- gtk_container_foreach (GTK_CONTAINER (priv->grid), (GtkCallback) remove_child, priv->grid);
-
- row = 0;
- if (priv->show_password)
- add_row (priv->grid, row++, priv->primary_password_label, priv->password_entry);
- if (priv->show_password_secondary)
- add_row (priv->grid, row++, priv->secondary_password_label, priv->password_entry_secondary);
- if (priv->show_password_ternary)
- add_row (priv->grid, row++, priv->ternary_password_label, priv->password_entry_ternary);
-
- gtk_grid_attach (GTK_GRID (priv->grid), priv->show_passwords_checkbox, 1, row, 1, 1);
-
- gtk_widget_show_all (priv->grid);
-}
-
-static void
-show_passwords_toggled_cb (GtkWidget *widget, gpointer user_data)
-{
- NMAVpnPasswordDialog *dialog = NMA_VPN_PASSWORD_DIALOG (user_data);
- NMAVpnPasswordDialogPrivate *priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- gboolean visible;
-
- visible = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
-
- gtk_entry_set_visibility (GTK_ENTRY (priv->password_entry), visible);
- gtk_entry_set_visibility (GTK_ENTRY (priv->password_entry_secondary), visible);
- gtk_entry_set_visibility (GTK_ENTRY (priv->password_entry_ternary), visible);
-}
-
-/* Public NMAVpnPasswordDialog methods */
-GtkWidget *
-nma_vpn_password_dialog_new (const char *title,
- const char *message,
- const char *password)
-{
- GtkWidget *dialog;
- NMAVpnPasswordDialogPrivate *priv;
- GtkLabel *message_label;
- GtkWidget *hbox;
- GtkWidget *vbox;
- GtkWidget *main_vbox;
- GtkWidget *dialog_icon;
- GtkBox *content;
-
- dialog = gtk_widget_new (NMA_VPN_TYPE_PASSWORD_DIALOG, NULL);
- if (!dialog)
- return NULL;
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- gtk_window_set_title (GTK_WINDOW (dialog), title);
- gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- _("_Cancel"), GTK_RESPONSE_CANCEL,
- _("_OK"), GTK_RESPONSE_OK,
- NULL);
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
-
- gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-
- g_signal_connect (dialog, "show",
- G_CALLBACK (dialog_show_callback),
- dialog);
- g_signal_connect (dialog, "close",
- G_CALLBACK (dialog_close_callback),
- dialog);
-
- /* The grid that holds the captions */
- priv->grid_alignment = gtk_alignment_new (0.0, 0.0, 0.0, 0.0);
-
- priv->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-
- priv->grid = gtk_grid_new ();
- gtk_grid_set_column_spacing (GTK_GRID (priv->grid), 12);
- gtk_grid_set_row_spacing (GTK_GRID (priv->grid), 6);
- gtk_container_add (GTK_CONTAINER (priv->grid_alignment), priv->grid);
-
- priv->password_entry = gtk_entry_new ();
- priv->password_entry_secondary = gtk_entry_new ();
- priv->password_entry_ternary = gtk_entry_new ();
-
- priv->show_passwords_checkbox = gtk_check_button_new_with_mnemonic (_("Sh_ow passwords"));
-
- /* We want to hold on to these during the grid rearrangement */
- g_object_ref_sink (priv->password_entry);
- g_object_ref_sink (priv->password_entry_secondary);
- g_object_ref_sink (priv->password_entry_ternary);
- g_object_ref_sink (priv->show_passwords_checkbox);
-
- gtk_entry_set_visibility (GTK_ENTRY (priv->password_entry), FALSE);
- gtk_entry_set_visibility (GTK_ENTRY (priv->password_entry_secondary), FALSE);
- gtk_entry_set_visibility (GTK_ENTRY (priv->password_entry_ternary), FALSE);
-
- g_signal_connect_swapped (priv->password_entry, "activate",
- G_CALLBACK (gtk_window_activate_default),
- dialog);
- g_signal_connect_swapped (priv->password_entry_secondary, "activate",
- G_CALLBACK (gtk_window_activate_default),
- dialog);
- g_signal_connect_swapped (priv->password_entry_ternary, "activate",
- G_CALLBACK (gtk_window_activate_default),
- dialog);
-
- g_signal_connect (priv->show_passwords_checkbox, "toggled",
- G_CALLBACK (show_passwords_toggled_cb),
- dialog);
-
- add_grid_rows (NMA_VPN_PASSWORD_DIALOG (dialog));
-
- /* Adds some eye-candy to the dialog */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
- gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
- dialog_icon = gtk_image_new_from_icon_name ("dialog-password", GTK_ICON_SIZE_DIALOG);
- gtk_misc_set_alignment (GTK_MISC (dialog_icon), 0.5, 0.0);
- gtk_box_pack_start (GTK_BOX (hbox), dialog_icon, FALSE, FALSE, 0);
-
- /* Fills the vbox */
- main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 18);
-
- if (message) {
- message_label = GTK_LABEL (gtk_label_new (message));
- gtk_label_set_justify (message_label, GTK_JUSTIFY_LEFT);
- gtk_label_set_line_wrap (message_label, TRUE);
- gtk_label_set_max_width_chars (message_label, 35);
- gtk_size_group_add_widget (priv->group, GTK_WIDGET (message_label));
- gtk_box_pack_start (GTK_BOX (main_vbox), GTK_WIDGET (message_label), FALSE, FALSE, 0);
- gtk_size_group_add_widget (priv->group, priv->grid_alignment);
- }
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_box_pack_start (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), priv->grid_alignment, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), main_vbox, FALSE, FALSE, 0);
-
- content = GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog)));
- gtk_box_pack_start (content, hbox, FALSE, FALSE, 0);
- gtk_widget_show_all (GTK_WIDGET (content));
-
- nma_vpn_password_dialog_set_password (NMA_VPN_PASSWORD_DIALOG (dialog), password);
-
- return GTK_WIDGET (dialog);
-}
-
-gboolean
-nma_vpn_password_dialog_run_and_block (NMAVpnPasswordDialog *dialog)
-{
- gint button_clicked;
-
- g_return_val_if_fail (dialog != NULL, FALSE);
- g_return_val_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog), FALSE);
-
- button_clicked = gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_hide (GTK_WIDGET (dialog));
-
- return button_clicked == GTK_RESPONSE_OK;
-}
-
-void
-nma_vpn_password_dialog_set_password (NMAVpnPasswordDialog *dialog,
- const char *password)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- gtk_entry_set_text (GTK_ENTRY (priv->password_entry), password ? password : "");
-}
-
-void
-nma_vpn_password_dialog_set_password_secondary (NMAVpnPasswordDialog *dialog,
- const char *password_secondary)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- gtk_entry_set_text (GTK_ENTRY (priv->password_entry_secondary),
- password_secondary ? password_secondary : "");
-}
-
-void
-nma_vpn_password_dialog_set_password_ternary (NMAVpnPasswordDialog *dialog,
- const char *password_ternary)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- gtk_entry_set_text (GTK_ENTRY (priv->password_entry_ternary),
- password_ternary ? password_ternary : "");
-}
-
-void
-nma_vpn_password_dialog_set_show_password (NMAVpnPasswordDialog *dialog, gboolean show)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- show = !!show;
- if (priv->show_password != show) {
- priv->show_password = show;
- add_grid_rows (dialog);
- }
-}
-
-void
-nma_vpn_password_dialog_set_show_password_secondary (NMAVpnPasswordDialog *dialog,
- gboolean show)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- show = !!show;
- if (priv->show_password_secondary != show) {
- priv->show_password_secondary = show;
- add_grid_rows (dialog);
- }
-}
-
-void
-nma_vpn_password_dialog_set_show_password_ternary (NMAVpnPasswordDialog *dialog,
- gboolean show)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- show = !!show;
- if (priv->show_password_ternary != show) {
- priv->show_password_ternary = show;
- add_grid_rows (dialog);
- }
-}
-
-void
-nma_vpn_password_dialog_focus_password (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- if (priv->show_password)
- gtk_widget_grab_focus (priv->password_entry);
-}
-
-void
-nma_vpn_password_dialog_focus_password_secondary (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- if (priv->show_password_secondary)
- gtk_widget_grab_focus (priv->password_entry_secondary);
-}
-
-void
-nma_vpn_password_dialog_focus_password_ternary (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- if (priv->show_password_ternary)
- gtk_widget_grab_focus (priv->password_entry_ternary);
-}
-
-const char *
-nma_vpn_password_dialog_get_password (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_val_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog), NULL);
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- return gtk_entry_get_text (GTK_ENTRY (priv->password_entry));
-}
-
-const char *
-nma_vpn_password_dialog_get_password_secondary (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_val_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog), NULL);
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- return gtk_entry_get_text (GTK_ENTRY (priv->password_entry_secondary));
-}
-
-const char *
-nma_vpn_password_dialog_get_password_ternary (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_val_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog), NULL);
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- return gtk_entry_get_text (GTK_ENTRY (priv->password_entry_ternary));
-}
-
-void nma_vpn_password_dialog_set_password_label (NMAVpnPasswordDialog *dialog,
- const char *label)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- g_free (priv->primary_password_label);
- priv->primary_password_label = g_strdup (label);
-
- if (priv->show_password)
- add_grid_rows (dialog);
-}
-
-void nma_vpn_password_dialog_set_password_secondary_label (NMAVpnPasswordDialog *dialog,
- const char *label)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- g_free (priv->secondary_password_label);
- priv->secondary_password_label = g_strdup (label);
-
- if (priv->show_password_secondary)
- add_grid_rows (dialog);
-}
-
-void nma_vpn_password_dialog_set_password_ternary_label (NMAVpnPasswordDialog *dialog,
- const char *label)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- g_free (priv->ternary_password_label);
- priv->ternary_password_label = g_strdup (label);
-
- if (priv->show_password_ternary)
- add_grid_rows (dialog);
-}
-
diff --git a/src/libnm-gtk/nm-vpn-password-dialog.h b/src/libnm-gtk/nm-vpn-password-dialog.h
deleted file mode 100644
index 5e274222..00000000
--- a/src/libnm-gtk/nm-vpn-password-dialog.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* vpn-password-dialog.c - A use password prompting dialog widget.
- *
- * The Gnome Library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public License as
- * published by the ree Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * The Gnome Library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * Copyright (C) 1999, 2000 Eazel, Inc.
- * Copyright (C) 2011, 2013 Red Hat, Inc.
- *
- * Authors: Ramiro Estrugo <ramiro@eazel.com>
- * Dan Williams <dcbw@redhat.com>
- */
-
-#ifndef NMA_VPN_PASSWORD_DIALOG_H
-#define NMA_VPN_PASSWORD_DIALOG_H
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define NMA_VPN_TYPE_PASSWORD_DIALOG (nma_vpn_password_dialog_get_type ())
-#define NMA_VPN_PASSWORD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_VPN_TYPE_PASSWORD_DIALOG, NMAVpnPasswordDialog))
-#define NMA_VPN_PASSWORD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_VPN_TYPE_PASSWORD_DIALOG, NMAVpnPasswordDialogClass))
-#define NMA_VPN_IS_PASSWORD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_VPN_TYPE_PASSWORD_DIALOG))
-#define NMA_VPN_IS_PASSWORD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_VPN_TYPE_PASSWORD_DIALOG))
-
-typedef struct NMAVpnPasswordDialog NMAVpnPasswordDialog;
-typedef struct NMAVpnPasswordDialogClass NMAVpnPasswordDialogClass;
-
-struct NMAVpnPasswordDialog {
- GtkDialog parent;
-};
-
-struct NMAVpnPasswordDialogClass {
- GtkDialogClass parent_class;
-};
-
-GType nma_vpn_password_dialog_get_type (void);
-GtkWidget* nma_vpn_password_dialog_new (const char *title,
- const char *message,
- const char *password);
-
-gboolean nma_vpn_password_dialog_run_and_block (NMAVpnPasswordDialog *dialog);
-
-/* Attribute mutators */
-void nma_vpn_password_dialog_set_show_password (NMAVpnPasswordDialog *dialog,
- gboolean show);
-void nma_vpn_password_dialog_focus_password (NMAVpnPasswordDialog *dialog);
-void nma_vpn_password_dialog_set_password (NMAVpnPasswordDialog *dialog,
- const char *password);
-void nma_vpn_password_dialog_set_password_label (NMAVpnPasswordDialog *dialog,
- const char *label);
-
-void nma_vpn_password_dialog_set_show_password_secondary (NMAVpnPasswordDialog *dialog,
- gboolean show);
-void nma_vpn_password_dialog_focus_password_secondary (NMAVpnPasswordDialog *dialog);
-void nma_vpn_password_dialog_set_password_secondary (NMAVpnPasswordDialog *dialog,
- const char *password_secondary);
-void nma_vpn_password_dialog_set_password_secondary_label (NMAVpnPasswordDialog *dialog,
- const char *label);
-
-void nma_vpn_password_dialog_set_show_password_ternary (NMAVpnPasswordDialog *dialog,
- gboolean show);
-void nma_vpn_password_dialog_focus_password_ternary (NMAVpnPasswordDialog *dialog);
-void nma_vpn_password_dialog_set_password_ternary (NMAVpnPasswordDialog *dialog,
- const char *password_ternary);
-void nma_vpn_password_dialog_set_password_ternary_label (NMAVpnPasswordDialog *dialog,
- const char *label);
-
-/* Attribute accessors */
-const char *nma_vpn_password_dialog_get_password (NMAVpnPasswordDialog *dialog);
-
-const char *nma_vpn_password_dialog_get_password_secondary (NMAVpnPasswordDialog *dialog);
-
-const char *nma_vpn_password_dialog_get_password_ternary (NMAVpnPasswordDialog *dialog);
-
-G_END_DECLS
-
-#endif /* NMA_VPN_PASSWORD_DIALOG_H */
diff --git a/src/libnm-gtk/nm-wifi-dialog.c b/src/libnm-gtk/nm-wifi-dialog.c
deleted file mode 100644
index 145742fb..00000000
--- a/src/libnm-gtk/nm-wifi-dialog.c
+++ /dev/null
@@ -1,1429 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Dan Williams <dcbw@redhat.com>
- *
- * (C) Copyright 2007 - 2017 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <string.h>
-#include <netinet/ether.h>
-
-#include <nm-client.h>
-#include <nm-utils.h>
-#include <nm-device-wifi.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-wireless.h>
-#include <nm-setting-ip4-config.h>
-
-#include "nm-wifi-dialog.h"
-#include "wireless-security.h"
-#include "nm-ui-utils.h"
-#include "eap-method.h"
-
-G_DEFINE_TYPE (NMAWifiDialog, nma_wifi_dialog, GTK_TYPE_DIALOG)
-
-#define NMA_WIFI_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- NMA_TYPE_WIFI_DIALOG, \
- NMAWifiDialogPrivate))
-
-typedef struct {
- NMAWifiDialog *self;
- NMConnection *connection;
- gboolean canceled;
-} GetSecretsInfo;
-
-typedef struct {
- NMClient *client;
- NMRemoteSettings *settings;
-
- GtkBuilder *builder;
-
- NMConnection *connection;
- NMDevice *device;
- NMAccessPoint *ap;
- guint operation;
-
- GtkTreeModel *device_model;
- GtkTreeModel *connection_model;
- GtkSizeGroup *group;
- GtkWidget *sec_combo;
- GtkWidget *ok_response_button;
-
- gboolean network_name_focus;
-
- gboolean secrets_only;
-
- guint revalidate_id;
-
- GetSecretsInfo *secrets_info;
-
- gboolean disposed;
-} NMAWifiDialogPrivate;
-
-enum {
- OP_NONE = 0,
- OP_CREATE_ADHOC,
- OP_CONNECT_HIDDEN,
-};
-
-#define D_NAME_COLUMN 0
-#define D_DEV_COLUMN 1
-
-#define S_NAME_COLUMN 0
-#define S_SEC_COLUMN 1
-
-#define C_NAME_COLUMN 0
-#define C_CON_COLUMN 1
-#define C_SEP_COLUMN 2
-#define C_NEW_COLUMN 3
-
-static gboolean security_combo_init (NMAWifiDialog *self, gboolean secrets_only);
-static void ssid_entry_changed (GtkWidget *entry, gpointer user_data);
-
-void
-nma_wifi_dialog_set_nag_ignored (NMAWifiDialog *self, gboolean ignored)
-{
-}
-
-gboolean
-nma_wifi_dialog_get_nag_ignored (NMAWifiDialog *self)
-{
- return TRUE;
-}
-
-static void
-size_group_clear (GtkSizeGroup *group)
-{
- GSList *iter;
-
- g_return_if_fail (group != NULL);
-
- iter = gtk_size_group_get_widgets (group);
- while (iter) {
- gtk_size_group_remove_widget (group, GTK_WIDGET (iter->data));
- iter = gtk_size_group_get_widgets (group);
- }
-}
-
-static void
-_set_response_sensitive (NMAWifiDialog *self,
- int response_id,
- gboolean is_sensitive)
-{
- switch (response_id) {
- case GTK_RESPONSE_CANCEL:
- case GTK_RESPONSE_OK:
- gtk_dialog_set_response_sensitive (GTK_DIALOG (self), response_id, is_sensitive);
-
- if (response_id == GTK_RESPONSE_OK) {
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
-
- if (priv->ok_response_button) {
- gtk_widget_set_tooltip_text (priv->ok_response_button,
- is_sensitive
- ? _("Click to connect")
- : _("Either a password is missing or the connection is invalid. In the latter case, you have to edit the connection with nm-connection-editor first"));
- }
- }
- break;
- default:
- g_return_if_reached ();
- }
-}
-
-static void
-size_group_add_permanent (GtkSizeGroup *group,
- GtkBuilder *builder)
-{
- GtkWidget *widget;
-
- g_return_if_fail (group != NULL);
- g_return_if_fail (builder != NULL);
-
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "network_name_label"));
- gtk_size_group_add_widget (group, widget);
-
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "security_combo_label"));
- gtk_size_group_add_widget (group, widget);
-
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "device_label"));
- gtk_size_group_add_widget (group, widget);
-}
-
-static void
-security_combo_changed (GtkWidget *combo,
- gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkWidget *vbox, *sec_widget, *def_widget;
- GList *elt, *children;
- GtkTreeIter iter;
- GtkTreeModel *model;
- WirelessSecurity *sec = NULL;
-
- vbox = GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_vbox"));
- g_assert (vbox);
-
- size_group_clear (priv->group);
-
- /* Remove any previous wireless security widgets */
- children = gtk_container_get_children (GTK_CONTAINER (vbox));
- for (elt = children; elt; elt = g_list_next (elt))
- gtk_container_remove (GTK_CONTAINER (vbox), GTK_WIDGET (elt->data));
- g_list_free (children);
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) {
- g_warning ("%s: no active security combo box item.", __func__);
- return;
- }
-
- gtk_tree_model_get (model, &iter, S_SEC_COLUMN, &sec, -1);
- if (!sec) {
- /* Revalidate dialog if the user picked "None" so the OK button
- * gets enabled if there's already a valid SSID.
- */
- ssid_entry_changed (NULL, self);
- return;
- }
-
- sec_widget = wireless_security_get_widget (sec);
- g_assert (sec_widget);
- gtk_widget_unparent (sec_widget);
-
- size_group_add_permanent (priv->group, priv->builder);
- wireless_security_add_to_size_group (sec, priv->group);
-
- gtk_container_add (GTK_CONTAINER (vbox), sec_widget);
-
- /* Re-validate */
- wireless_security_changed_cb (NULL, sec);
-
- /* Set focus to the security method's default widget, but only if the
- * network name entry should not be focused.
- */
- if (!priv->network_name_focus && sec->default_field) {
- def_widget = GTK_WIDGET (gtk_builder_get_object (sec->builder, sec->default_field));
- if (def_widget)
- gtk_widget_grab_focus (def_widget);
- }
-
- wireless_security_unref (sec);
-}
-
-static void
-security_combo_changed_manually (GtkWidget *combo,
- gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
-
- /* Flag that the combo was changed manually to allow focus to move
- * to the security method's default widget instead of the network name.
- */
- priv->network_name_focus = FALSE;
- security_combo_changed (combo, user_data);
-}
-
-static GByteArray *
-validate_dialog_ssid (NMAWifiDialog *self)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkWidget *widget;
- const char *ssid;
- guint32 ssid_len;
- GByteArray *ssid_ba;
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_entry"));
-
- ssid = gtk_entry_get_text (GTK_ENTRY (widget));
-
- if (!ssid || strlen (ssid) == 0 || strlen (ssid) > 32)
- return NULL;
-
- ssid_len = strlen (ssid);
- ssid_ba = g_byte_array_sized_new (ssid_len);
- g_byte_array_append (ssid_ba, (unsigned char *) ssid, ssid_len);
- return ssid_ba;
-}
-
-static void
-stuff_changed_cb (WirelessSecurity *sec, gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GByteArray *ssid = NULL;
- gboolean free_ssid = TRUE;
- gboolean valid = FALSE;
-
- if (priv->connection) {
- NMSettingWireless *s_wireless;
- s_wireless = nm_connection_get_setting_wireless (priv->connection);
- g_assert (s_wireless);
- ssid = (GByteArray *) nm_setting_wireless_get_ssid (s_wireless);
- free_ssid = FALSE;
- } else {
- ssid = validate_dialog_ssid (self);
- }
-
- if (ssid) {
- valid = wireless_security_validate (sec, NULL);
- if (free_ssid)
- g_byte_array_free (ssid, TRUE);
- }
-
- /* But if there's an in-progress secrets call (which might require authorization)
- * then we don't want to enable the OK button because we don't have all the
- * connection details yet.
- */
- if (priv->secrets_info)
- valid = FALSE;
-
- _set_response_sensitive (self, GTK_RESPONSE_OK, valid);
-}
-
-static void
-ssid_entry_changed (GtkWidget *entry, gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkTreeIter iter;
- WirelessSecurity *sec = NULL;
- GtkTreeModel *model;
- gboolean valid = FALSE;
- GByteArray *ssid;
-
- /* If the network name entry was touched at all, allow focus to go to
- * the default widget of the security method now.
- */
- priv->network_name_focus = FALSE;
-
- ssid = validate_dialog_ssid (self);
- if (!ssid)
- goto out;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->sec_combo));
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->sec_combo), &iter))
- gtk_tree_model_get (model, &iter, S_SEC_COLUMN, &sec, -1);
-
- if (sec) {
- valid = wireless_security_validate (sec, NULL);
- wireless_security_unref (sec);
- } else {
- valid = TRUE;
- }
-
-out:
- /* But if there's an in-progress secrets call (which might require authorization)
- * then we don't want to enable the OK button because we don't have all the
- * connection details yet.
- */
- if (priv->secrets_info)
- valid = FALSE;
-
- _set_response_sensitive (self, GTK_RESPONSE_OK, valid);
-}
-
-static void
-connection_combo_changed (GtkWidget *combo,
- gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkTreeIter iter;
- GtkTreeModel *model;
- gboolean is_new = FALSE;
- NMSettingWireless *s_wireless;
- char *utf8_ssid;
- GtkWidget *widget;
-
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) {
- g_warning ("%s: no active connection combo box item.", __func__);
- return;
- }
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
-
- if (priv->connection)
- g_object_unref (priv->connection);
-
- gtk_tree_model_get (model, &iter,
- C_CON_COLUMN, &priv->connection,
- C_NEW_COLUMN, &is_new, -1);
-
- if (priv->connection)
- eap_method_ca_cert_ignore_load (priv->connection);
-
- if (!security_combo_init (self, priv->secrets_only)) {
- g_warning ("Couldn't change Wi-Fi security combo box.");
- return;
- }
- security_combo_changed (priv->sec_combo, self);
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_entry"));
- if (priv->connection) {
- const GByteArray *ssid;
-
- s_wireless = nm_connection_get_setting_wireless (priv->connection);
- ssid = nm_setting_wireless_get_ssid (s_wireless);
- utf8_ssid = nm_utils_ssid_to_utf8 (ssid);
- gtk_entry_set_text (GTK_ENTRY (widget), utf8_ssid);
- g_free (utf8_ssid);
- } else {
- gtk_entry_set_text (GTK_ENTRY (widget), "");
- }
-
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_entry")), is_new);
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_label")), is_new);
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_combo")), is_new);
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_combo_label")), is_new);
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_vbox")), is_new);
-}
-
-static gboolean
-connection_combo_separator_cb (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
-{
- gboolean is_separator = FALSE;
-
- gtk_tree_model_get (model, iter, C_SEP_COLUMN, &is_separator, -1);
- return is_separator;
-}
-
-static gint
-alphabetize_connections (NMConnection *a, NMConnection *b)
-{
- NMSettingConnection *asc, *bsc;
-
- asc = nm_connection_get_setting_connection (a);
- bsc = nm_connection_get_setting_connection (b);
-
- return strcmp (nm_setting_connection_get_id (asc),
- nm_setting_connection_get_id (bsc));
-}
-
-static gboolean
-connection_combo_init (NMAWifiDialog *self, NMConnection *connection)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkListStore *store;
- int num_added = 0;
- GtkTreeIter tree_iter;
- GtkWidget *widget;
- NMSettingConnection *s_con;
- GtkCellRenderer *renderer;
- const char *id;
-
- g_return_val_if_fail (priv->connection == NULL, FALSE);
-
- /* Clear any old model */
- if (priv->connection_model)
- g_object_unref (priv->connection_model);
-
- /* New model */
- store = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_OBJECT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
- priv->connection_model = GTK_TREE_MODEL (store);
-
- if (connection) {
- s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con);
- id = nm_setting_connection_get_id (s_con);
- if (id == NULL) {
- /* New connections which will be completed by NM won't have an ID
- * yet, but that doesn't matter because we don't show the connection
- * combo anyway when there's a predefined connection.
- */
- id = "blahblah";
- }
-
- gtk_list_store_append (store, &tree_iter);
- gtk_list_store_set (store, &tree_iter,
- C_NAME_COLUMN, id,
- C_CON_COLUMN, connection, -1);
- } else {
- GSList *connections, *iter, *to_add = NULL;
-
- gtk_list_store_append (store, &tree_iter);
- gtk_list_store_set (store, &tree_iter,
- C_NAME_COLUMN, _("New…"),
- C_NEW_COLUMN, TRUE, -1);
-
- gtk_list_store_append (store, &tree_iter);
- gtk_list_store_set (store, &tree_iter, C_SEP_COLUMN, TRUE, -1);
-
- connections = nm_remote_settings_list_connections (priv->settings);
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMConnection *candidate = NM_CONNECTION (iter->data);
- NMSettingWireless *s_wireless;
- const char *connection_type;
- const char *mode;
- const GByteArray *setting_mac;
-
- s_con = nm_connection_get_setting_connection (candidate);
- connection_type = s_con ? nm_setting_connection_get_connection_type (s_con) : NULL;
- if (!connection_type)
- continue;
-
- if (strcmp (connection_type, NM_SETTING_WIRELESS_SETTING_NAME))
- continue;
-
- s_wireless = nm_connection_get_setting_wireless (candidate);
- if (!s_wireless)
- continue;
-
- /* If creating a new Ad-Hoc network, only show shared network connections */
- if (priv->operation == OP_CREATE_ADHOC) {
- NMSettingIP4Config *s_ip4;
- const char *method = NULL;
-
- s_ip4 = nm_connection_get_setting_ip4_config (candidate);
- if (s_ip4)
- method = nm_setting_ip4_config_get_method (s_ip4);
-
- if (!s_ip4 || strcmp (method, "shared"))
- continue;
-
- /* Ignore non-Ad-Hoc connections too */
- mode = nm_setting_wireless_get_mode (s_wireless);
- if (!mode || (strcmp (mode, "adhoc") && strcmp (mode, "ap")))
- continue;
- }
-
- /* Ignore connections that don't apply to the selected device */
- setting_mac = nm_setting_wireless_get_mac_address (s_wireless);
- if (setting_mac) {
- const char *hw_addr;
-
- hw_addr = nm_device_wifi_get_hw_address (NM_DEVICE_WIFI (priv->device));
- if (hw_addr) {
- struct ether_addr *ether;
-
- ether = ether_aton (hw_addr);
- if (ether && memcmp (setting_mac->data, ether->ether_addr_octet, ETH_ALEN))
- continue;
- }
- }
-
- to_add = g_slist_append (to_add, candidate);
- }
- g_slist_free (connections);
-
- /* Alphabetize the list then add the connections */
- to_add = g_slist_sort (to_add, (GCompareFunc) alphabetize_connections);
- for (iter = to_add; iter; iter = g_slist_next (iter)) {
- NMConnection *candidate = NM_CONNECTION (iter->data);
-
- s_con = nm_connection_get_setting_connection (candidate);
- gtk_list_store_append (store, &tree_iter);
- gtk_list_store_set (store, &tree_iter,
- C_NAME_COLUMN, nm_setting_connection_get_id (s_con),
- C_CON_COLUMN, candidate, -1);
- num_added++;
- }
- g_slist_free (to_add);
- }
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "connection_combo"));
-
- gtk_cell_layout_clear (GTK_CELL_LAYOUT (widget));
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
- gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (widget), renderer,
- "text", C_NAME_COLUMN);
- gtk_combo_box_set_wrap_width (GTK_COMBO_BOX (widget), 1);
-
- gtk_combo_box_set_model (GTK_COMBO_BOX (widget), priv->connection_model);
-
- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (widget),
- connection_combo_separator_cb,
- NULL,
- NULL);
-
- gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
- g_signal_connect (G_OBJECT (widget), "changed",
- G_CALLBACK (connection_combo_changed), self);
- if (connection || !num_added) {
- gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (priv->builder, "connection_label")));
- gtk_widget_hide (widget);
- }
- if (gtk_tree_model_get_iter_first (priv->connection_model, &tree_iter))
- gtk_tree_model_get (priv->connection_model, &tree_iter, C_CON_COLUMN, &priv->connection, -1);
-
- return TRUE;
-}
-
-static void
-device_combo_changed (GtkWidget *combo,
- gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkTreeIter iter;
- GtkTreeModel *model;
-
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) {
- g_warning ("%s: no active device combo box item.", __func__);
- return;
- }
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
-
- g_object_unref (priv->device);
- gtk_tree_model_get (model, &iter, D_DEV_COLUMN, &priv->device, -1);
-
- if (!connection_combo_init (self, NULL)) {
- g_warning ("Couldn't change connection combo box.");
- return;
- }
-
- if (!security_combo_init (self, priv->secrets_only)) {
- g_warning ("Couldn't change Wi-Fi security combo box.");
- return;
- }
-
- security_combo_changed (priv->sec_combo, self);
-}
-
-static void
-add_device_to_model (GtkListStore *model, NMDevice *device)
-{
- GtkTreeIter iter;
- const char *desc;
-
- desc = nma_utils_get_device_description (device);
- gtk_list_store_append (model, &iter);
- gtk_list_store_set (model, &iter, D_NAME_COLUMN, desc, D_DEV_COLUMN, device, -1);
-}
-
-static gboolean
-can_use_device (NMDevice *device)
-{
- /* Ignore unsupported devices */
- if (!(nm_device_get_capabilities (device) & NM_DEVICE_CAP_NM_SUPPORTED))
- return FALSE;
-
- if (!NM_IS_DEVICE_WIFI (device))
- return FALSE;
-
- if (nm_device_get_state (device) < NM_DEVICE_STATE_DISCONNECTED)
- return FALSE;
-
- return TRUE;
-}
-
-static gboolean
-device_combo_init (NMAWifiDialog *self, NMDevice *device)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- const GPtrArray *devices;
- GtkListStore *store;
- int i, num_added = 0;
-
- g_return_val_if_fail (priv->device == NULL, FALSE);
-
- store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_OBJECT);
- priv->device_model = GTK_TREE_MODEL (store);
-
- if (device) {
- if (!can_use_device (device))
- return FALSE;
- add_device_to_model (store, device);
- num_added++;
- } else {
- devices = nm_client_get_devices (priv->client);
- if (!devices)
- return FALSE;
-
- for (i = 0; devices && (i < devices->len); i++) {
- device = NM_DEVICE (g_ptr_array_index (devices, i));
- if (can_use_device (device)) {
- add_device_to_model (store, device);
- num_added++;
- }
- }
- }
-
- if (num_added > 0) {
- GtkWidget *widget;
- GtkTreeIter iter;
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "device_combo"));
- gtk_combo_box_set_model (GTK_COMBO_BOX (widget), priv->device_model);
- gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
- g_signal_connect (G_OBJECT (widget), "changed",
- G_CALLBACK (device_combo_changed), self);
- if (num_added == 1) {
- gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (priv->builder, "device_label")));
- gtk_widget_hide (widget);
- }
- if (gtk_tree_model_get_iter_first (priv->device_model, &iter))
- gtk_tree_model_get (priv->device_model, &iter, D_DEV_COLUMN, &priv->device, -1);
- }
-
- return num_added > 0 ? TRUE : FALSE;
-}
-
-static gboolean
-find_proto (NMSettingWirelessSecurity *sec, const char *item)
-{
- guint32 i;
-
- for (i = 0; i < nm_setting_wireless_security_get_num_protos (sec); i++) {
- if (!strcmp (item, nm_setting_wireless_security_get_proto (sec, i)))
- return TRUE;
- }
- return FALSE;
-}
-
-static NMUtilsSecurityType
-get_default_type_for_security (NMSettingWirelessSecurity *sec,
- gboolean have_ap,
- guint32 ap_flags,
- guint32 dev_caps)
-{
- const char *key_mgmt, *auth_alg;
-
- g_return_val_if_fail (sec != NULL, NMU_SEC_NONE);
-
- key_mgmt = nm_setting_wireless_security_get_key_mgmt (sec);
- auth_alg = nm_setting_wireless_security_get_auth_alg (sec);
-
- /* No IEEE 802.1x */
- if (!strcmp (key_mgmt, "none"))
- return NMU_SEC_STATIC_WEP;
-
- if ( !strcmp (key_mgmt, "ieee8021x")
- && (!have_ap || (ap_flags & NM_802_11_AP_FLAGS_PRIVACY))) {
- if (auth_alg && !strcmp (auth_alg, "leap"))
- return NMU_SEC_LEAP;
- return NMU_SEC_DYNAMIC_WEP;
- }
-
- if ( !strcmp (key_mgmt, "wpa-none")
- || !strcmp (key_mgmt, "wpa-psk")) {
- if (!have_ap || (ap_flags & NM_802_11_AP_FLAGS_PRIVACY)) {
- if (find_proto (sec, "rsn"))
- return NMU_SEC_WPA2_PSK;
- else if (find_proto (sec, "wpa"))
- return NMU_SEC_WPA_PSK;
- else
- return NMU_SEC_WPA_PSK;
- }
- }
-
- if ( !strcmp (key_mgmt, "wpa-eap")
- && (!have_ap || (ap_flags & NM_802_11_AP_FLAGS_PRIVACY))) {
- if (find_proto (sec, "rsn"))
- return NMU_SEC_WPA2_ENTERPRISE;
- else if (find_proto (sec, "wpa"))
- return NMU_SEC_WPA_ENTERPRISE;
- else
- return NMU_SEC_WPA_ENTERPRISE;
- }
-
- return NMU_SEC_INVALID;
-}
-
-static void
-add_security_item (NMAWifiDialog *self,
- WirelessSecurity *sec,
- GtkListStore *model,
- GtkTreeIter *iter,
- const char *text)
-{
- wireless_security_set_changed_notify (sec, stuff_changed_cb, self);
- gtk_list_store_append (model, iter);
- gtk_list_store_set (model, iter, S_NAME_COLUMN, text, S_SEC_COLUMN, sec, -1);
- wireless_security_unref (sec);
-}
-
-static void
-get_secrets_cb (NMRemoteConnection *connection,
- GHashTable *secrets,
- GError *error,
- gpointer user_data)
-{
- GetSecretsInfo *info = user_data;
- NMAWifiDialogPrivate *priv;
- GHashTableIter hash_iter;
- gpointer key, value;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- if (info->canceled)
- goto out;
-
- priv = NMA_WIFI_DIALOG_GET_PRIVATE (info->self);
- if (priv->secrets_info == info) {
- priv->secrets_info = NULL;
-
- /* Buttons should only be re-enabled if this secrets response is the
- * in-progress one.
- */
- _set_response_sensitive (info->self, GTK_RESPONSE_CANCEL, TRUE);
- _set_response_sensitive (info->self, GTK_RESPONSE_OK, TRUE);
- }
-
- if (error) {
- g_warning ("%s: error getting connection secrets: (%d) %s",
- __func__,
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- goto out;
- }
-
- /* User might have changed the connection while the secrets call was in
- * progress, so don't try to update the wrong connection with the secrets
- * we just received.
- */
- if ( (priv->connection != info->connection)
- || !secrets
- || !g_hash_table_size (secrets))
- goto out;
-
- /* Try to update the connection's secrets; log errors but we don't care */
- g_hash_table_iter_init (&hash_iter, secrets);
- while (g_hash_table_iter_next (&hash_iter, &key, &value)) {
- GError *update_error = NULL;
- const char *setting_name = key;
- GHashTable *setting_hash = value;
-
- if (!nm_connection_update_secrets (priv->connection,
- setting_name,
- setting_hash,
- &update_error)) {
- g_warning ("%s: error updating connection secrets: (%d) %s",
- __func__,
- update_error ? update_error->code : -1,
- update_error && update_error->message ? update_error->message : "(unknown)");
- g_clear_error (&update_error);
- }
- }
-
- /* Update each security method's UI elements with the new secrets */
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->sec_combo));
- if (gtk_tree_model_get_iter_first (model, &iter)) {
- do {
- WirelessSecurity *sec = NULL;
-
- gtk_tree_model_get (model, &iter, S_SEC_COLUMN, &sec, -1);
- if (sec) {
- wireless_security_update_secrets (sec, priv->connection);
- wireless_security_unref (sec);
- }
- } while (gtk_tree_model_iter_next (model, &iter));
- }
-
-out:
- g_object_unref (info->connection);
- g_free (info);
-}
-
-static gboolean
-security_combo_init (NMAWifiDialog *self, gboolean secrets_only)
-{
- NMAWifiDialogPrivate *priv;
- GtkListStore *sec_model;
- GtkTreeIter iter;
- guint32 ap_flags = 0;
- guint32 ap_wpa = 0;
- guint32 ap_rsn = 0;
- guint32 dev_caps;
- NMSettingWirelessSecurity *wsec = NULL;
- NMUtilsSecurityType default_type = NMU_SEC_NONE;
- NMWepKeyType wep_type = NM_WEP_KEY_TYPE_KEY;
- int active = -1;
- int item = 0;
- NMSettingWireless *s_wireless = NULL;
- gboolean is_adhoc;
- const char *setting_name;
-
- g_return_val_if_fail (self != NULL, FALSE);
-
- priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- g_return_val_if_fail (priv->device != NULL, FALSE);
- g_return_val_if_fail (priv->sec_combo != NULL, FALSE);
-
- is_adhoc = (priv->operation == OP_CREATE_ADHOC);
-
- /* The security options displayed are filtered based on device
- * capabilities, and if provided, additionally by access point capabilities.
- * If a connection is given, that connection's options should be selected
- * by default.
- */
- dev_caps = nm_device_wifi_get_capabilities (NM_DEVICE_WIFI (priv->device));
- if (priv->ap != NULL) {
- ap_flags = nm_access_point_get_flags (priv->ap);
- ap_wpa = nm_access_point_get_wpa_flags (priv->ap);
- ap_rsn = nm_access_point_get_rsn_flags (priv->ap);
- }
-
- if (priv->connection) {
- const char *mode;
-
- s_wireless = nm_connection_get_setting_wireless (priv->connection);
-
- mode = nm_setting_wireless_get_mode (s_wireless);
- if (mode && (!strcmp (mode, "adhoc") || !strcmp (mode, "ap")))
- is_adhoc = TRUE;
-
- wsec = nm_connection_get_setting_wireless_security (priv->connection);
-
- if (wsec) {
- default_type = get_default_type_for_security (wsec, !!priv->ap, ap_flags, dev_caps);
- if (default_type == NMU_SEC_STATIC_WEP)
- wep_type = nm_setting_wireless_security_get_wep_key_type (wsec);
- if (wep_type == NM_WEP_KEY_TYPE_UNKNOWN)
- wep_type = NM_WEP_KEY_TYPE_KEY;
- }
- } else if (is_adhoc) {
- default_type = NMU_SEC_STATIC_WEP;
- wep_type = NM_WEP_KEY_TYPE_PASSPHRASE;
- }
-
- sec_model = gtk_list_store_new (2, G_TYPE_STRING, WIRELESS_TYPE_SECURITY);
-
- if (nm_utils_security_valid (NMU_SEC_NONE, dev_caps, !!priv->ap, is_adhoc, ap_flags, ap_wpa, ap_rsn)) {
- gtk_list_store_append (sec_model, &iter);
- gtk_list_store_set (sec_model, &iter,
- S_NAME_COLUMN, C_("Wifi/wired security", "None"),
- -1);
- if (default_type == NMU_SEC_NONE)
- active = item;
- item++;
- }
-
- /* Don't show Static WEP if both the AP and the device are capable of WPA,
- * even though technically it's possible to have this configuration.
- */
- if ( nm_utils_security_valid (NMU_SEC_STATIC_WEP, dev_caps, !!priv->ap, is_adhoc, ap_flags, ap_wpa, ap_rsn)
- && ((!ap_wpa && !ap_rsn) || !(dev_caps & (NM_WIFI_DEVICE_CAP_WPA | NM_WIFI_DEVICE_CAP_RSN)))) {
- WirelessSecurityWEPKey *ws_wep;
-
- ws_wep = ws_wep_key_new (priv->connection, NM_WEP_KEY_TYPE_KEY, is_adhoc, secrets_only);
- if (ws_wep) {
- add_security_item (self, WIRELESS_SECURITY (ws_wep), sec_model,
- &iter, _("WEP 40/128-bit Key (Hex or ASCII)"));
- if ((active < 0) && (default_type == NMU_SEC_STATIC_WEP) && (wep_type == NM_WEP_KEY_TYPE_KEY))
- active = item;
- item++;
- }
-
- ws_wep = ws_wep_key_new (priv->connection, NM_WEP_KEY_TYPE_PASSPHRASE, is_adhoc, secrets_only);
- if (ws_wep) {
- add_security_item (self, WIRELESS_SECURITY (ws_wep), sec_model,
- &iter, _("WEP 128-bit Passphrase"));
- if ((active < 0) && (default_type == NMU_SEC_STATIC_WEP) && (wep_type == NM_WEP_KEY_TYPE_PASSPHRASE))
- active = item;
- item++;
- }
- }
-
- /* Don't show LEAP if both the AP and the device are capable of WPA,
- * even though technically it's possible to have this configuration.
- */
- if ( nm_utils_security_valid (NMU_SEC_LEAP, dev_caps, !!priv->ap, is_adhoc, ap_flags, ap_wpa, ap_rsn)
- && ((!ap_wpa && !ap_rsn) || !(dev_caps & (NM_WIFI_DEVICE_CAP_WPA | NM_WIFI_DEVICE_CAP_RSN)))) {
- WirelessSecurityLEAP *ws_leap;
-
- ws_leap = ws_leap_new (priv->connection, secrets_only);
- if (ws_leap) {
- add_security_item (self, WIRELESS_SECURITY (ws_leap), sec_model,
- &iter, _("LEAP"));
- if ((active < 0) && (default_type == NMU_SEC_LEAP))
- active = item;
- item++;
- }
- }
-
- if (nm_utils_security_valid (NMU_SEC_DYNAMIC_WEP, dev_caps, !!priv->ap, is_adhoc, ap_flags, ap_wpa, ap_rsn)) {
- WirelessSecurityDynamicWEP *ws_dynamic_wep;
-
- ws_dynamic_wep = ws_dynamic_wep_new (priv->connection, FALSE, secrets_only);
- if (ws_dynamic_wep) {
- add_security_item (self, WIRELESS_SECURITY (ws_dynamic_wep), sec_model,
- &iter, _("Dynamic WEP (802.1x)"));
- if ((active < 0) && (default_type == NMU_SEC_DYNAMIC_WEP))
- active = item;
- item++;
- }
- }
-
- if ( nm_utils_security_valid (NMU_SEC_WPA_PSK, dev_caps, !!priv->ap, is_adhoc, ap_flags, ap_wpa, ap_rsn)
- || nm_utils_security_valid (NMU_SEC_WPA2_PSK, dev_caps, !!priv->ap, is_adhoc, ap_flags, ap_wpa, ap_rsn)) {
- WirelessSecurityWPAPSK *ws_wpa_psk;
-
- ws_wpa_psk = ws_wpa_psk_new (priv->connection, secrets_only);
- if (ws_wpa_psk) {
- add_security_item (self, WIRELESS_SECURITY (ws_wpa_psk), sec_model,
- &iter, _("WPA & WPA2 Personal"));
- if ((active < 0) && ((default_type == NMU_SEC_WPA_PSK) || (default_type == NMU_SEC_WPA2_PSK)))
- active = item;
- item++;
- }
- }
-
- if ( nm_utils_security_valid (NMU_SEC_WPA_ENTERPRISE, dev_caps, !!priv->ap, is_adhoc, ap_flags, ap_wpa, ap_rsn)
- || nm_utils_security_valid (NMU_SEC_WPA2_ENTERPRISE, dev_caps, !!priv->ap, is_adhoc, ap_flags, ap_wpa, ap_rsn)) {
- WirelessSecurityWPAEAP *ws_wpa_eap;
-
- ws_wpa_eap = ws_wpa_eap_new (priv->connection, FALSE, secrets_only, NULL);
- if (ws_wpa_eap) {
- add_security_item (self, WIRELESS_SECURITY (ws_wpa_eap), sec_model,
- &iter, _("WPA & WPA2 Enterprise"));
- if ((active < 0) && ((default_type == NMU_SEC_WPA_ENTERPRISE) || (default_type == NMU_SEC_WPA2_ENTERPRISE)))
- active = item;
- item++;
- }
- }
-
- gtk_combo_box_set_model (GTK_COMBO_BOX (priv->sec_combo), GTK_TREE_MODEL (sec_model));
- gtk_combo_box_set_active (GTK_COMBO_BOX (priv->sec_combo), active < 0 ? 0 : (guint32) active);
- g_object_unref (G_OBJECT (sec_model));
-
- /* If the dialog was given a connection when it was created, that connection
- * will already be populated with secrets. If no connection was given,
- * then we need to get any existing secrets to populate the dialog with.
- */
- setting_name = priv->connection ? nm_connection_need_secrets (priv->connection, NULL) : NULL;
- if (setting_name && NM_IS_REMOTE_CONNECTION (priv->connection)) {
- GetSecretsInfo *info;
-
- /* Desensitize the dialog's buttons while we wait for the secrets
- * operation to complete.
- */
- _set_response_sensitive (self, GTK_RESPONSE_OK, FALSE);
- _set_response_sensitive (self, GTK_RESPONSE_CANCEL, FALSE);
-
- info = g_malloc0 (sizeof (GetSecretsInfo));
- info->self = self;
- info->connection = g_object_ref (priv->connection);
- priv->secrets_info = info;
-
- nm_remote_connection_get_secrets (NM_REMOTE_CONNECTION (priv->connection),
- setting_name,
- get_secrets_cb,
- info);
- }
-
- return TRUE;
-}
-
-static gboolean
-revalidate (gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
-
- priv->revalidate_id = 0;
- security_combo_changed (priv->sec_combo, self);
- return FALSE;
-}
-
-static gboolean
-internal_init (NMAWifiDialog *self,
- NMConnection *specific_connection,
- NMDevice *specific_device,
- gboolean secrets_only)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkWidget *widget;
- char *label, *icon_name = "network-wireless";
- gboolean security_combo_focus = FALSE;
-
- gtk_window_set_position (GTK_WINDOW (self), GTK_WIN_POS_CENTER_ALWAYS);
- gtk_container_set_border_width (GTK_CONTAINER (self), 6);
- gtk_window_set_default_size (GTK_WINDOW (self), 488, -1);
- gtk_window_set_resizable (GTK_WINDOW (self), FALSE);
-
- priv->secrets_only = secrets_only;
- if (secrets_only)
- icon_name = "dialog-password";
- else
- icon_name = "network-wireless";
-
- gtk_window_set_icon_name (GTK_WINDOW (self), icon_name);
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "image1"));
- gtk_image_set_from_icon_name (GTK_IMAGE (widget), icon_name, GTK_ICON_SIZE_DIALOG);
-
- gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (self))), 2);
-
- widget = gtk_dialog_add_button (GTK_DIALOG (self), _("_Cancel"), GTK_RESPONSE_CANCEL);
-
- /* Connect/Create button */
- if (priv->operation == OP_CREATE_ADHOC) {
- widget = gtk_dialog_add_button (GTK_DIALOG (self), _("C_reate"), GTK_RESPONSE_OK);
- } else {
- widget = gtk_dialog_add_button (GTK_DIALOG (self), _("C_onnect"), GTK_RESPONSE_OK);
- priv->ok_response_button = widget;
- }
-
- g_object_set (G_OBJECT (widget), "can-default", TRUE, NULL);
- gtk_widget_grab_default (widget);
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "hbox1"));
- if (!widget) {
- g_warning ("Couldn't find Wi-Fi_dialog widget.");
- return FALSE;
- }
- gtk_widget_unparent (widget);
-
- gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (self))), widget);
-
- /* If given a valid connection, hide the SSID bits and connection combo */
- if (specific_connection) {
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_label"));
- gtk_widget_hide (widget);
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_entry"));
- gtk_widget_hide (widget);
-
- security_combo_focus = TRUE;
- priv->network_name_focus = FALSE;
- } else {
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_entry"));
- g_signal_connect (G_OBJECT (widget), "changed", (GCallback) ssid_entry_changed, self);
- priv->network_name_focus = TRUE;
- }
-
- _set_response_sensitive (self, GTK_RESPONSE_OK, FALSE);
-
- if (!device_combo_init (self, specific_device)) {
- g_warning ("No Wi-Fi devices available.");
- return FALSE;
- }
-
- if (!connection_combo_init (self, specific_connection)) {
- g_warning ("Couldn't set up connection combo box.");
- return FALSE;
- }
-
- if (!security_combo_init (self, priv->secrets_only)) {
- g_warning ("Couldn't set up Wi-Fi security combo box.");
- return FALSE;
- }
-
- security_combo_changed (priv->sec_combo, self);
- g_signal_connect (G_OBJECT (priv->sec_combo), "changed",
- G_CALLBACK (security_combo_changed_manually), self);
-
- if (secrets_only) {
- gtk_widget_hide (priv->sec_combo);
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_combo_label"));
- gtk_widget_hide (widget);
- }
-
- if (security_combo_focus)
- gtk_widget_grab_focus (priv->sec_combo);
- else if (priv->network_name_focus) {
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_entry"));
- gtk_widget_grab_focus (widget);
- }
-
- if (priv->connection) {
- char *tmp;
- char *esc_ssid = NULL;
- NMSettingWireless *s_wireless;
- const GByteArray *ssid;
-
- s_wireless = nm_connection_get_setting_wireless (priv->connection);
- ssid = s_wireless ? nm_setting_wireless_get_ssid (s_wireless) : NULL;
- if (ssid)
- esc_ssid = nm_utils_ssid_to_utf8 (ssid);
-
- tmp = g_strdup_printf (_("Passwords or encryption keys are required to access the Wi-Fi network “%s”."),
- esc_ssid ? esc_ssid : "<unknown>");
- gtk_window_set_title (GTK_WINDOW (self), _("Wi-Fi Network Authentication Required"));
- label = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>\n\n%s",
- _("Authentication required by Wi-Fi network"),
- tmp);
- g_free (esc_ssid);
- g_free (tmp);
- } else if (priv->operation == OP_CREATE_ADHOC) {
- gtk_window_set_title (GTK_WINDOW (self), _("Create New Wi-Fi Network"));
- label = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>\n\n%s",
- _("New Wi-Fi network"),
- _("Enter a name for the Wi-Fi network you wish to create."));
- } else if (priv->operation == OP_CONNECT_HIDDEN) {
- gtk_window_set_title (GTK_WINDOW (self), _("Connect to Hidden Wi-Fi Network"));
- label = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>\n\n%s",
- _("Hidden Wi-Fi network"),
- _("Enter the name and security details of the hidden Wi-Fi network you wish to connect to."));
- } else
- g_assert_not_reached ();
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "caption_label"));
- gtk_label_set_markup (GTK_LABEL (widget), label);
- g_free (label);
-
- /* Re-validate from an idle handler so that widgets like file choosers
- * have had time to find their files.
- */
- priv->revalidate_id = g_idle_add (revalidate, self);
-
- return TRUE;
-}
-
-/**
- * nma_wifi_dialog_get_connection:
- * @self: an #NMAWifiDialog
- * @device: (out):
- * @ap: (out):
- *
- * Returns: (transfer full):
- */
-NMConnection *
-nma_wifi_dialog_get_connection (NMAWifiDialog *self,
- NMDevice **device,
- NMAccessPoint **ap)
-{
- NMAWifiDialogPrivate *priv;
- GtkWidget *combo;
- GtkTreeModel *model;
- WirelessSecurity *sec = NULL;
- GtkTreeIter iter;
- NMConnection *connection;
- NMSettingWireless *s_wireless;
-
- g_return_val_if_fail (self != NULL, NULL);
-
- priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
-
- if (!priv->connection) {
- NMSettingConnection *s_con;
- char *uuid;
-
- connection = nm_connection_new ();
-
- s_con = (NMSettingConnection *) nm_setting_connection_new ();
- uuid = nm_utils_uuid_generate ();
- g_object_set (s_con,
- NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_CONNECTION_UUID, uuid,
- NULL);
- g_free (uuid);
- nm_connection_add_setting (connection, (NMSetting *) s_con);
-
- s_wireless = (NMSettingWireless *) nm_setting_wireless_new ();
- g_object_set (s_wireless, NM_SETTING_WIRELESS_SSID, validate_dialog_ssid (self), NULL);
-
- if (priv->operation == OP_CREATE_ADHOC) {
- NMSettingIP4Config *s_ip4;
-
- g_object_set (s_wireless, NM_SETTING_WIRELESS_MODE, "adhoc", NULL);
-
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_SHARED, NULL);
- nm_connection_add_setting (connection, (NMSetting *) s_ip4);
- } else if (priv->operation == OP_CONNECT_HIDDEN) {
- /* Mark as a hidden SSID network */
- g_object_set (s_wireless, NM_SETTING_WIRELESS_HIDDEN, TRUE, NULL);
- } else
- g_assert_not_reached ();
-
- nm_connection_add_setting (connection, (NMSetting *) s_wireless);
- } else
- connection = g_object_ref (priv->connection);
-
- /* Fill security */
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->sec_combo));
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->sec_combo), &iter))
- gtk_tree_model_get (model, &iter, S_SEC_COLUMN, &sec, -1);
- if (sec) {
- wireless_security_fill_connection (sec, connection);
- wireless_security_unref (sec);
- }
-
- /* Save new CA cert ignore values to GSettings */
- eap_method_ca_cert_ignore_save (connection);
-
- /* Fill device */
- if (device) {
- combo = GTK_WIDGET (gtk_builder_get_object (priv->builder, "device_combo"));
- gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter);
- gtk_tree_model_get (priv->device_model, &iter, D_DEV_COLUMN, device, -1);
- g_object_unref (*device);
- }
-
- if (ap)
- *ap = priv->ap;
-
- return connection;
-}
-
-GtkWidget *
-nma_wifi_dialog_new (NMClient *client,
- NMRemoteSettings *settings,
- NMConnection *connection,
- NMDevice *device,
- NMAccessPoint *ap,
- gboolean secrets_only)
-{
- NMAWifiDialog *self;
- NMAWifiDialogPrivate *priv;
- guint32 dev_caps;
-
- g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
- g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), NULL);
- g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
-
- /* Ensure device validity */
- if (device) {
- dev_caps = nm_device_get_capabilities (device);
- g_return_val_if_fail (dev_caps & NM_DEVICE_CAP_NM_SUPPORTED, NULL);
- g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), NULL);
- }
-
- self = NMA_WIFI_DIALOG (g_object_new (NMA_TYPE_WIFI_DIALOG, NULL));
- if (self) {
- priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
-
- priv->client = g_object_ref (client);
- priv->settings = g_object_ref (settings);
- if (ap)
- priv->ap = g_object_ref (ap);
-
- priv->sec_combo = GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_combo"));
- priv->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-
- /* Handle CA cert ignore stuff */
- eap_method_ca_cert_ignore_load (connection);
-
- if (!internal_init (self, connection, device, secrets_only)) {
- g_warning ("Couldn't create Wi-Fi security dialog.");
- gtk_widget_destroy (GTK_WIDGET (self));
- self = NULL;
- }
- }
-
- return GTK_WIDGET (self);
-}
-
-static GtkWidget *
-internal_new_operation (NMClient *client,
- NMRemoteSettings *settings,
- guint operation)
-{
- NMAWifiDialog *self;
- NMAWifiDialogPrivate *priv;
-
- g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
- g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), NULL);
-
- self = NMA_WIFI_DIALOG (g_object_new (NMA_TYPE_WIFI_DIALOG, NULL));
- if (!self)
- return NULL;
-
- priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
-
- priv->client = g_object_ref (client);
- priv->settings = g_object_ref (settings);
- priv->sec_combo = GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_combo"));
- priv->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
- priv->operation = operation;
-
- if (!internal_init (self, NULL, NULL, FALSE)) {
- g_warning ("Couldn't create Wi-Fi security dialog.");
- gtk_widget_destroy (GTK_WIDGET (self));
- return NULL;
- }
-
- return GTK_WIDGET (self);
-}
-
-GtkWidget *
-nma_wifi_dialog_new_for_hidden (NMClient *client, NMRemoteSettings *settings)
-{
- return internal_new_operation (client, settings, OP_CONNECT_HIDDEN);
-}
-
-GtkWidget *
-nma_wifi_dialog_new_for_other (NMClient *client, NMRemoteSettings *settings)
-{
- return internal_new_operation (client, settings, OP_CONNECT_HIDDEN);
-}
-
-GtkWidget *
-nma_wifi_dialog_new_for_create (NMClient *client, NMRemoteSettings *settings)
-{
- return internal_new_operation (client, settings, OP_CREATE_ADHOC);
-}
-
-/**
- * nma_wifi_dialog_nag_user:
- * @self:
- *
- * Returns: (transfer full):
- */
-GtkWidget *
-nma_wifi_dialog_nag_user (NMAWifiDialog *self)
-{
- return NULL;
-}
-
-static void
-nma_wifi_dialog_init (NMAWifiDialog *self)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GError *error = NULL;
-
- priv->builder = gtk_builder_new ();
-
- if (!gtk_builder_add_from_resource (priv->builder, "/org/freedesktop/network-manager-applet/wifi.ui", &error)) {
- g_warning ("Couldn't load builder resource: %s", error->message);
- g_error_free (error);
- }
-}
-
-static void
-dispose (GObject *object)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (object);
-
- if (priv->disposed) {
- G_OBJECT_CLASS (nma_wifi_dialog_parent_class)->dispose (object);
- return;
- }
-
- priv->disposed = TRUE;
-
- if (priv->secrets_info)
- priv->secrets_info->canceled = TRUE;
-
- g_object_unref (priv->client);
- g_object_unref (priv->settings);
- g_object_unref (priv->builder);
-
- g_object_unref (priv->device_model);
- g_object_unref (priv->connection_model);
-
- if (priv->group)
- g_object_unref (priv->group);
-
- if (priv->connection)
- g_object_unref (priv->connection);
-
- if (priv->device)
- g_object_unref (priv->device);
-
- if (priv->ap)
- g_object_unref (priv->ap);
-
- if (priv->revalidate_id)
- g_source_remove (priv->revalidate_id);
-
- G_OBJECT_CLASS (nma_wifi_dialog_parent_class)->dispose (object);
-}
-
-static void
-nma_wifi_dialog_class_init (NMAWifiDialogClass *nmad_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (nmad_class);
-
- g_type_class_add_private (nmad_class, sizeof (NMAWifiDialogPrivate));
-
- /* virtual methods */
- object_class->dispose = dispose;
-}
diff --git a/src/libnm-gtk/nm-wifi-dialog.h b/src/libnm-gtk/nm-wifi-dialog.h
deleted file mode 100644
index 01f0a73a..00000000
--- a/src/libnm-gtk/nm-wifi-dialog.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Wireless Applet -- Display wireless access points and allow user control
- *
- * Dan Williams <dcbw@redhat.com>
- *
- * (C) Copyright 2007 - 2012 Red Hat, Inc.
- */
-
-#ifndef NMA_WIFI_DIALOG_H
-#define NMA_WIFI_DIALOG_H
-
-#include <gtk/gtk.h>
-#include <glib.h>
-#include <glib-object.h>
-
-#include <nm-client.h>
-#include <nm-connection.h>
-#include <nm-device.h>
-#include <nm-access-point.h>
-#include <nm-remote-settings.h>
-
-#define NMA_TYPE_WIFI_DIALOG (nma_wifi_dialog_get_type ())
-#define NMA_WIFI_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_WIFI_DIALOG, NMAWifiDialog))
-#define NMA_WIFI_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_WIFI_DIALOG, NMAWifiDialogClass))
-#define NMA_IS_WIFI_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_WIFI_DIALOG))
-#define NMA_IS_WIFI_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_WIFI_DIALOG))
-#define NMA_WIFI_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_WIFI_DIALOG, NMAWifiDialogClass))
-
-typedef struct {
- GtkDialog parent;
-} NMAWifiDialog;
-
-typedef struct {
- GtkDialogClass parent;
-} NMAWifiDialogClass;
-
-GType nma_wifi_dialog_get_type (void);
-
-GtkWidget *nma_wifi_dialog_new (NMClient *client,
- NMRemoteSettings *settings,
- NMConnection *connection,
- NMDevice *device,
- NMAccessPoint *ap,
- gboolean secrets_only);
-
-GtkWidget *nma_wifi_dialog_new_for_hidden (NMClient *client,
- NMRemoteSettings *settings);
-
-GtkWidget *nma_wifi_dialog_new_for_create (NMClient *client,
- NMRemoteSettings *settings);
-
-NMConnection * nma_wifi_dialog_get_connection (NMAWifiDialog *self,
- NMDevice **device,
- NMAccessPoint **ap);
-
-GLIB_DEPRECATED
-GtkWidget * nma_wifi_dialog_nag_user (NMAWifiDialog *self);
-
-GLIB_DEPRECATED
-void nma_wifi_dialog_set_nag_ignored (NMAWifiDialog *self, gboolean ignored);
-
-GLIB_DEPRECATED
-gboolean nma_wifi_dialog_get_nag_ignored (NMAWifiDialog *self);
-
-GLIB_DEPRECATED_FOR(nma_wifi_dialog_new_for_hidden)
-GtkWidget *nma_wifi_dialog_new_for_other (NMClient *client,
- NMRemoteSettings *settings);
-
-#endif /* NMA_WIFI_DIALOG_H */
-
diff --git a/src/libnm-gtk/nm-wireless-dialog.c b/src/libnm-gtk/nm-wireless-dialog.c
deleted file mode 100644
index 9e0009ce..00000000
--- a/src/libnm-gtk/nm-wireless-dialog.c
+++ /dev/null
@@ -1,52 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Dan Williams <dcbw@redhat.com>
- *
- * (C) Copyright 2007 - 2012 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <nm-client.h>
-
-#include "nm-wireless-dialog.h"
-#include "nm-wifi-dialog.h"
-
-GType
-nma_wireless_dialog_get_type (void)
-{
- return nma_wifi_dialog_get_type ();
-}
-
-NMConnection *
-nma_wireless_dialog_get_connection (NMAWirelessDialog *self,
- NMDevice **out_device,
- NMAccessPoint **ap)
-{
- return nma_wifi_dialog_get_connection ((NMAWifiDialog *)self, out_device, ap);
-}
-
-GtkWidget *
-nma_wireless_dialog_new (NMClient *client,
- NMRemoteSettings *settings,
- NMConnection *connection,
- NMDevice *device,
- NMAccessPoint *ap,
- gboolean secrets_only)
-{
- return nma_wifi_dialog_new (client, settings, connection, device, ap, secrets_only);
-}
-
-GtkWidget *
-nma_wireless_dialog_new_for_other (NMClient *client, NMRemoteSettings *settings)
-{
- return nma_wifi_dialog_new_for_hidden (client, settings);
-}
-
-GtkWidget *
-nma_wireless_dialog_new_for_create (NMClient *client, NMRemoteSettings *settings)
-{
- return nma_wifi_dialog_new_for_create (client, settings);
-}
-
diff --git a/src/libnm-gtk/nm-wireless-dialog.h b/src/libnm-gtk/nm-wireless-dialog.h
deleted file mode 100644
index 56a1be75..00000000
--- a/src/libnm-gtk/nm-wireless-dialog.h
+++ /dev/null
@@ -1,62 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Dan Williams <dcbw@redhat.com>
- *
- * (C) Copyright 2007 - 2012 Red Hat, Inc.
- */
-
-#ifndef NMA_WIRELESS_DIALOG_H
-#define NMA_WIRELESS_DIALOG_H
-
-#include <gtk/gtk.h>
-#include <glib.h>
-#include <glib-object.h>
-
-#include <nm-connection.h>
-#include <nm-device.h>
-#include <nm-access-point.h>
-#include <nm-remote-settings.h>
-#include <nm-wireless-dialog.h>
-
-#define NMA_TYPE_WIRELESS_DIALOG (nma_wireless_dialog_get_type ())
-#define NMA_WIRELESS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_WIRELESS_DIALOG, NMAWirelessDialog))
-#define NMA_WIRELESS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_WIRELESS_DIALOG, NMAWirelessDialogClass))
-#define NMA_IS_WIRELESS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_WIRELESS_DIALOG))
-#define NMA_IS_WIRELESS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_WIRELESS_DIALOG))
-#define NMA_WIRELESS_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_WIRELESS_DIALOG, NMAWirelessDialogClass))
-
-typedef struct {
- GObject parent;
-} NMAWirelessDialog;
-
-typedef struct {
- GObjectClass parent;
-} NMAWirelessDialogClass;
-
-GLIB_DEPRECATED_FOR(nma_wifi_dialog_get_type)
-GType nma_wireless_dialog_get_type (void);
-
-GLIB_DEPRECATED_FOR(nma_wifi_dialog_new)
-GtkWidget *nma_wireless_dialog_new (NMClient *client,
- NMRemoteSettings *settings,
- NMConnection *connection,
- NMDevice *device,
- NMAccessPoint *ap,
- gboolean secrets_only);
-
-GLIB_DEPRECATED_FOR(nma_wifi_dialog_new_for_other)
-GtkWidget *nma_wireless_dialog_new_for_other (NMClient *client,
- NMRemoteSettings *settings);
-
-GLIB_DEPRECATED_FOR(nma_wifi_dialog_new_for_create)
-GtkWidget *nma_wireless_dialog_new_for_create (NMClient *client,
- NMRemoteSettings *settings);
-
-GLIB_DEPRECATED_FOR(nma_wifi_dialog_get_connection)
-NMConnection * nma_wireless_dialog_get_connection (NMAWirelessDialog *dialog,
- NMDevice **device,
- NMAccessPoint **ap);
-
-#endif /* NMA_WIRELESS_DIALOG_H */
-
diff --git a/src/libnm-gtk/nm.gresource.xml b/src/libnm-gtk/nm.gresource.xml
deleted file mode 100644
index a8a181ee..00000000
--- a/src/libnm-gtk/nm.gresource.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gresources>
- <gresource prefix="/org/freedesktop/network-manager-applet">
- <file preprocess="xml-stripblanks">wifi.ui</file>
- </gresource>
-</gresources>
diff --git a/src/libnm-gtk/tests/iso3166-test.xml b/src/libnm-gtk/tests/iso3166-test.xml
deleted file mode 100644
index c733ce6f..00000000
--- a/src/libnm-gtk/tests/iso3166-test.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
- This file is just a chunk of the original iso 3166 database file,
- used solely for testing purposes.
--->
-
-<!--
-This file gives a list of all countries in the ISO 3166
-standard, and is used to provide translations via gettext
-
-Copyright (C) 2002, 2004, 2006 Alastair McKinstry <mckinstry@computer.org>
-Copyright (C) 2004 Andreas Jochens <aj@andaco.de>
-Copyright (C) 2004, 2007 Christian Perrier <bubulle@debian.org>
-Copyright (C) 2005, 2006, 2007 Tobias Quathamer <toddy@debian.org>
-
- This file is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This file is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this file; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-Source: <http://www.iso.org/iso/country_codes>
--->
-
-<!DOCTYPE iso_3166_entries [
- <!ELEMENT iso_3166_entries (iso_3166_entry+, iso_3166_3_entry*)>
- <!ELEMENT iso_3166_entry EMPTY>
- <!ATTLIST iso_3166_entry
- alpha_2_code CDATA #REQUIRED
- alpha_3_code CDATA #REQUIRED
- numeric_code CDATA #REQUIRED
- common_name CDATA #IMPLIED
- name CDATA #REQUIRED
- official_name CDATA #IMPLIED
- >
- <!ELEMENT iso_3166_3_entry EMPTY>
- <!ATTLIST iso_3166_3_entry
- alpha_4_code CDATA #REQUIRED
- alpha_3_code CDATA #REQUIRED
- numeric_code CDATA #IMPLIED
- date_withdrawn CDATA #IMPLIED
- names CDATA #REQUIRED
- comment CDATA #IMPLIED
- >
-]>
-
-<iso_3166_entries>
- <iso_3166_entry
- alpha_2_code="ES"
- alpha_3_code="ESP"
- numeric_code="724"
- name="Spain"
- official_name="Kingdom of Spain" />
- <iso_3166_entry
- alpha_2_code="US"
- alpha_3_code="USA"
- numeric_code="840"
- name="United States"
- official_name="United States of America" />
-</iso_3166_entries>
diff --git a/src/libnm-gtk/tests/serviceproviders-test.xml b/src/libnm-gtk/tests/serviceproviders-test.xml
deleted file mode 100644
index 85ac8c36..00000000
--- a/src/libnm-gtk/tests/serviceproviders-test.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0"?>
-
-
-<!DOCTYPE serviceproviders SYSTEM "serviceproviders.2.dtd">
-
-<serviceproviders format="2.0">
-
- <!-- United States -->
- <country code="us">
- <provider>
- <name>AT&amp;T</name>
- <gsm>
- <network-id mcc="310" mnc="038"/>
- <network-id mcc="310" mnc="090"/>
- <network-id mcc="310" mnc="150"/>
- <apn value="wap.cingular">
- <plan type="postpaid"/>
- <usage type="internet"/>
- <name>MEdia Net (phones)</name>
- </apn>
- </gsm>
- </provider>
- <provider>
- <name>Verizon</name>
- <cdma>
- <sid value="2"/>
- <sid value="4"/>
- <sid value="5"/>
- </cdma>
- </provider>
- </country>
-
- <!-- Spain -->
- <country code="es">
- <provider>
- <name>Movistar (Telefónica)</name>
- <gsm>
- <network-id mcc="214" mnc="05"/>
- <network-id mcc="214" mnc="07"/>
- <apn value="movistar.es">
- <plan type="postpaid"/>
- <usage type="internet"/>
- <username>movistar</username>
- <password>movistar</password>
- <dns>194.179.1.100</dns>
- <dns>194.179.1.101</dns>
- </apn>
- </gsm>
- </provider>
- </country>
-
-</serviceproviders>
diff --git a/src/libnm-gtk/tests/test-mobile-providers.c b/src/libnm-gtk/tests/test-mobile-providers.c
deleted file mode 100644
index 050ca435..00000000
--- a/src/libnm-gtk/tests/test-mobile-providers.c
+++ /dev/null
@@ -1,517 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2012 Aleksander Morgado <aleksander@gnu.org>
- */
-
-#include "nm-default.h"
-
-#include <locale.h>
-#include <string.h>
-
-#include "nm-mobile-providers.h"
-
-#include "nm-utils/nm-test-utils.h"
-
-#if defined TEST_DATA_DIR
-# define COUNTRY_CODES_FILE TEST_DATA_DIR "/iso3166-test.xml"
-# define SERVICE_PROVIDERS_FILE TEST_DATA_DIR "/serviceproviders-test.xml"
-#else
-# error You broke it!
-#endif
-
-/******************************************************************************/
-/* Common test utilities */
-
-static NMAMobileProvidersDatabase *
-common_create_mpd_sync (void)
-{
- NMAMobileProvidersDatabase *mpd;
- GError *error = NULL;
-
- mpd = nma_mobile_providers_database_new_sync (COUNTRY_CODES_FILE,
- SERVICE_PROVIDERS_FILE,
- NULL, /* cancellable */
- &error);
- g_assert_no_error (error);
- g_assert (NMA_IS_MOBILE_PROVIDERS_DATABASE (mpd));
-
- return mpd;
-}
-
-typedef struct {
- NMAMobileProvidersDatabase *mpd;
- GMainLoop *loop;
-} NewAsyncContext;
-
-static void
-new_ready (GObject *source,
- GAsyncResult *res,
- NewAsyncContext *ctx)
-{
- GError *error = NULL;
-
- ctx->mpd = nma_mobile_providers_database_new_finish (res, &error);
- g_assert_no_error (error);
- g_assert (NMA_IS_MOBILE_PROVIDERS_DATABASE (ctx->mpd));
-
- g_main_loop_quit (ctx->loop);
-}
-
-static NMAMobileProvidersDatabase *
-common_create_mpd_async (void)
-{
- NewAsyncContext ctx;
-
- ctx.loop = g_main_loop_new (NULL, FALSE);
- ctx.mpd = NULL;
-
- nma_mobile_providers_database_new (COUNTRY_CODES_FILE,
- SERVICE_PROVIDERS_FILE,
- NULL, /* cancellable */
- (GAsyncReadyCallback)new_ready,
- &ctx);
- g_main_loop_run (ctx.loop);
- g_main_loop_unref (ctx.loop);
-
- return ctx.mpd;
-}
-
-/******************************************************************************/
-
-static void
-new_sync (void)
-{
- NMAMobileProvidersDatabase *mpd;
-
- mpd = common_create_mpd_sync ();
- g_object_unref (mpd);
-}
-
-static void
-new_async (void)
-{
- NMAMobileProvidersDatabase *mpd;
-
- mpd = common_create_mpd_async ();
- g_object_unref (mpd);
-}
-
-/******************************************************************************/
-
-static void
-dump (void)
-{
- NMAMobileProvidersDatabase *mpd;
-
- /* Sync */
- mpd = common_create_mpd_sync ();
- nma_mobile_providers_database_dump (mpd);
- g_object_unref (mpd);
-
- /* Async */
- mpd = common_create_mpd_async ();
- nma_mobile_providers_database_dump (mpd);
- g_object_unref (mpd);
-}
-
-/******************************************************************************/
-
-static void
-lookup_country (void)
-{
- NMAMobileProvidersDatabase *mpd;
- NMACountryInfo *country_info;
-
- /* Sync */
- mpd = common_create_mpd_sync ();
- country_info = nma_mobile_providers_database_lookup_country (mpd, "US");
- g_assert (country_info != NULL);
- g_object_unref (mpd);
-
- /* Async */
- mpd = common_create_mpd_async ();
- country_info = nma_mobile_providers_database_lookup_country (mpd, "US");
- g_assert (country_info != NULL);
- g_object_unref (mpd);
-}
-
-static void
-lookup_unknown_country (void)
-{
- NMAMobileProvidersDatabase *mpd;
- NMACountryInfo *country_info;
-
- /* Sync */
- mpd = common_create_mpd_sync ();
- country_info = nma_mobile_providers_database_lookup_country (mpd, "KK");
- g_assert (country_info == NULL);
- g_object_unref (mpd);
-
- /* Async */
- mpd = common_create_mpd_async ();
- country_info = nma_mobile_providers_database_lookup_country (mpd, "KK");
- g_assert (country_info == NULL);
- g_object_unref (mpd);
-}
-
-/******************************************************************************/
-
-static void
-lookup_3gpp_mccmnc_1 (void)
-{
- NMAMobileProvidersDatabase *mpd;
- NMAMobileProvider *provider;
-
- /* Look for a 3 digit MNC using a 3 digit MNC */
-
- /* Sync */
- mpd = common_create_mpd_sync ();
- provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (mpd, "310150");
- g_assert (provider != NULL);
- g_assert_cmpstr (nma_mobile_provider_get_name (provider), ==, "AT&T");
- g_object_unref (mpd);
-
- /* Async */
- mpd = common_create_mpd_async ();
- provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (mpd, "310150");
- g_assert (provider != NULL);
- g_assert_cmpstr (nma_mobile_provider_get_name (provider), ==, "AT&T");
- g_object_unref (mpd);
-}
-
-static void
-lookup_3gpp_mccmnc_2 (void)
-{
- NMAMobileProvidersDatabase *mpd;
- NMAMobileProvider *provider;
-
- /* Look for a 3 digit MNC using a 2 digit MNC */
-
- /* Sync */
- mpd = common_create_mpd_sync ();
- provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (mpd, "31038");
- g_assert (provider != NULL);
- g_assert_cmpstr (nma_mobile_provider_get_name (provider), ==, "AT&T");
- g_object_unref (mpd);
-
- /* Async */
- mpd = common_create_mpd_async ();
- provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (mpd, "31038");
- g_assert (provider != NULL);
- g_assert_cmpstr (nma_mobile_provider_get_name (provider), ==, "AT&T");
- g_object_unref (mpd);
-}
-
-static void
-lookup_3gpp_mccmnc_3 (void)
-{
- NMAMobileProvidersDatabase *mpd;
- NMAMobileProvider *provider;
-
- /* Look for a 2 digit MNC using a 2 digit MNC */
-
- /* Sync */
- mpd = common_create_mpd_sync ();
- provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (mpd, "21405");
- g_assert (provider != NULL);
- g_assert_cmpstr (nma_mobile_provider_get_name (provider), ==, "Movistar (Telefónica)");
- g_object_unref (mpd);
-
- /* Async */
- mpd = common_create_mpd_async ();
- provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (mpd, "21405");
- g_assert (provider != NULL);
- g_assert_cmpstr (nma_mobile_provider_get_name (provider), ==, "Movistar (Telefónica)");
- g_object_unref (mpd);
-}
-
-static void
-lookup_3gpp_mccmnc_4 (void)
-{
- NMAMobileProvidersDatabase *mpd;
- NMAMobileProvider *provider;
-
- /* Look for a 2 digit MNC using a 3 digit MNC */
-
- /* Sync */
- mpd = common_create_mpd_sync ();
- provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (mpd, "214005");
- g_assert (provider != NULL);
- g_assert_cmpstr (nma_mobile_provider_get_name (provider), ==, "Movistar (Telefónica)");
- g_object_unref (mpd);
-
- /* Async */
- mpd = common_create_mpd_async ();
- provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (mpd, "214005");
- g_assert (provider != NULL);
- g_assert_cmpstr (nma_mobile_provider_get_name (provider), ==, "Movistar (Telefónica)");
- g_object_unref (mpd);
-}
-
-static void
-lookup_unknown_3gpp_mccmnc (void)
-{
- NMAMobileProvidersDatabase *mpd;
- NMAMobileProvider *provider;
-
- /* Sync */
- mpd = common_create_mpd_sync ();
- provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (mpd, "12345");
- g_assert (provider == NULL);
- g_object_unref (mpd);
-
- /* Async */
- mpd = common_create_mpd_async ();
- provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (mpd, "12345");
- g_assert (provider == NULL);
- g_object_unref (mpd);
-}
-
-static void
-ensure_movistar (NMAMobileProvider *provider)
-{
- NMAMobileAccessMethod *method;
-
- /* Check Name */
- g_assert_cmpstr (nma_mobile_provider_get_name (provider), ==, "Movistar (Telefónica)");
-
- /* Check MCCMNC values */
- {
- const gchar **mcc_mnc;
- guint i;
- gboolean found_21405 = FALSE;
- gboolean found_21407 = FALSE;
-
- mcc_mnc = nma_mobile_provider_get_3gpp_mcc_mnc (provider);
- g_assert (mcc_mnc != NULL);
- for (i = 0; mcc_mnc[i]; i++) {
- if (!strcmp (mcc_mnc[i], "21405")) {
- g_assert (!found_21405);
- found_21405 = TRUE;
- } else if (!strcmp (mcc_mnc[i], "21407")) {
- g_assert (!found_21407);
- found_21407 = TRUE;
- } else
- g_assert_not_reached ();
- }
- g_assert (found_21405);
- g_assert (found_21407);
- }
-
- /* Check SID */
- g_assert (nma_mobile_provider_get_cdma_sid (provider) == NULL);
-
- /* Check access methods */
- {
- GSList *methods;
-
- methods = nma_mobile_provider_get_methods (provider);
- g_assert_cmpuint (g_slist_length (methods), ==, 1);
- method = methods->data;
- }
-
- /* Check access method name, APN and type */
- g_assert_cmpstr (nma_mobile_access_method_get_name (method), !=, NULL);
- g_assert_cmpint (nma_mobile_access_method_get_family (method), ==, NMA_MOBILE_FAMILY_3GPP);
- g_assert_cmpstr (nma_mobile_access_method_get_3gpp_apn (method), ==, "movistar.es");
-
- /* Check DNS */
- {
- const gchar **dns;
- guint i;
- gboolean found_100 = FALSE;
- gboolean found_101 = FALSE;
-
- dns = nma_mobile_access_method_get_dns (method);
- g_assert (dns != NULL);
- for (i = 0; dns[i]; i++) {
- if (!strcmp (dns[i], "194.179.1.100")) {
- g_assert (!found_100);
- found_100 = TRUE;
- } else if (!strcmp (dns[i], "194.179.1.101")) {
- g_assert (!found_101);
- found_101 = TRUE;
- } else
- g_assert_not_reached ();
- }
- g_assert (found_100);
- g_assert (found_101);
- }
-
- /* Check Username and Password */
- g_assert_cmpstr (nma_mobile_access_method_get_username (method), ==, "movistar");
- g_assert_cmpstr (nma_mobile_access_method_get_password (method), ==, "movistar");
-}
-
-static void
-ensure_provider_contents_3gpp (void)
-{
- NMAMobileProvidersDatabase *mpd;
- NMAMobileProvider *provider;
-
- /* Sync */
- mpd = common_create_mpd_sync ();
- provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (mpd, "21405");
- g_assert (provider != NULL);
- ensure_movistar (provider);
- g_object_unref (mpd);
-
- /* Async */
- mpd = common_create_mpd_async ();
- provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (mpd, "21405");
- g_assert (provider != NULL);
- ensure_movistar (provider);
- g_object_unref (mpd);
-}
-
-/******************************************************************************/
-
-static void
-lookup_cdma_sid (void)
-{
- NMAMobileProvidersDatabase *mpd;
- NMAMobileProvider *provider;
-
- /* Sync */
- mpd = common_create_mpd_sync ();
- provider = nma_mobile_providers_database_lookup_cdma_sid (mpd, 2);
- g_assert (provider != NULL);
- g_assert_cmpstr (nma_mobile_provider_get_name (provider), ==, "Verizon");
- g_object_unref (mpd);
-
- /* Async */
- mpd = common_create_mpd_async ();
- provider = nma_mobile_providers_database_lookup_cdma_sid (mpd, 2);
- g_assert (provider != NULL);
- g_assert_cmpstr (nma_mobile_provider_get_name (provider), ==, "Verizon");
- g_object_unref (mpd);
-}
-
-static void
-lookup_unknown_cdma_sid (void)
-{
- NMAMobileProvidersDatabase *mpd;
- NMAMobileProvider *provider;
-
- /* Sync */
- mpd = common_create_mpd_sync ();
- provider = nma_mobile_providers_database_lookup_cdma_sid (mpd, 42);
- g_assert (provider == NULL);
- g_object_unref (mpd);
-
- /* Async */
- mpd = common_create_mpd_async ();
- provider = nma_mobile_providers_database_lookup_cdma_sid (mpd, 42);
- g_assert (provider == NULL);
- g_object_unref (mpd);
-}
-
-/******************************************************************************/
-
-static void
-split_mccmnc_1 (void)
-{
- gchar *mcc = NULL;
- gchar *mnc = NULL;
-
- g_assert (nma_mobile_providers_split_3gpp_mcc_mnc ("123456", &mcc, &mnc));
- g_assert_cmpstr (mcc, == , "123");
- g_assert_cmpstr (mnc, == , "456");
- g_free (mcc);
- g_free (mnc);
-}
-
-static void
-split_mccmnc_2 (void)
-{
- gchar *mcc = NULL;
- gchar *mnc = NULL;
-
- g_assert (nma_mobile_providers_split_3gpp_mcc_mnc ("12345", &mcc, &mnc));
- g_assert_cmpstr (mcc, == , "123");
- g_assert_cmpstr (mnc, == , "45");
- g_free (mcc);
- g_free (mnc);
-}
-
-static void
-split_mccmnc_error_1 (void)
-{
- gchar *mcc = NULL;
- gchar *mnc = NULL;
-
- g_assert (nma_mobile_providers_split_3gpp_mcc_mnc ("1", &mcc, &mnc) == FALSE);
- g_assert (mcc == NULL);
- g_assert (mnc == NULL);
-}
-
-static void
-split_mccmnc_error_2 (void)
-{
- gchar *mcc = NULL;
- gchar *mnc = NULL;
-
- g_assert (nma_mobile_providers_split_3gpp_mcc_mnc ("123", &mcc, &mnc) == FALSE);
- g_assert (mcc == NULL);
- g_assert (mnc == NULL);
-}
-
-static void
-split_mccmnc_error_3 (void)
-{
- gchar *mcc = NULL;
- gchar *mnc = NULL;
-
- g_assert (nma_mobile_providers_split_3gpp_mcc_mnc ("1234567", &mcc, &mnc) == FALSE);
- g_assert (mcc == NULL);
- g_assert (mnc == NULL);
-}
-
-static void
-split_mccmnc_error_4 (void)
-{
- gchar *mcc = NULL;
- gchar *mnc = NULL;
-
- g_assert (nma_mobile_providers_split_3gpp_mcc_mnc ("123ab", &mcc, &mnc) == FALSE);
- g_assert (mcc == NULL);
- g_assert (mnc == NULL);
-}
-
-/******************************************************************************/
-
-NMTST_DEFINE ();
-
-int main (int argc, char **argv)
-{
- setlocale (LC_ALL, "");
-
- nmtst_init (&argc, &argv, TRUE);
-
- g_test_add_func ("/MobileProvidersDatabase/new-sync", new_sync);
- g_test_add_func ("/MobileProvidersDatabase/new-async", new_async);
-
- g_test_add_func ("/MobileProvidersDatabase/dump", dump);
-
- g_test_add_func ("/MobileProvidersDatabase/lookup-country", lookup_country);
- g_test_add_func ("/MobileProvidersDatabase/lookup-unknown-country", lookup_unknown_country);
-
- g_test_add_func ("/MobileProvidersDatabase/lookup-3gpp-mccmnc-1", lookup_3gpp_mccmnc_1);
- g_test_add_func ("/MobileProvidersDatabase/lookup-3gpp-mccmnc-2", lookup_3gpp_mccmnc_2);
- g_test_add_func ("/MobileProvidersDatabase/lookup-3gpp-mccmnc-3", lookup_3gpp_mccmnc_3);
- g_test_add_func ("/MobileProvidersDatabase/lookup-3gpp-mccmnc-4", lookup_3gpp_mccmnc_4);
- g_test_add_func ("/MobileProvidersDatabase/lookup-unknown-3gpp-mccmnc", lookup_unknown_3gpp_mccmnc);
- g_test_add_func ("/MobileProvidersDatabase/ensure-providers-content-3gpp", ensure_provider_contents_3gpp);
-
- g_test_add_func ("/MobileProvidersDatabase/lookup-cdma-sid", lookup_cdma_sid);
- g_test_add_func ("/MobileProvidersDatabase/lookup-unknown-cdma-sid", lookup_unknown_cdma_sid);
-
- g_test_add_func ("/MobileProvidersDatabase/split-mccmnc-1", split_mccmnc_1);
- g_test_add_func ("/MobileProvidersDatabase/split-mccmnc-2", split_mccmnc_2);
- g_test_add_func ("/MobileProvidersDatabase/split-mccmnc-error-1", split_mccmnc_error_1);
- g_test_add_func ("/MobileProvidersDatabase/split-mccmnc-error-2", split_mccmnc_error_2);
- g_test_add_func ("/MobileProvidersDatabase/split-mccmnc-error-3", split_mccmnc_error_3);
- g_test_add_func ("/MobileProvidersDatabase/split-mccmnc-error-4", split_mccmnc_error_4);
-
- return g_test_run ();
-}
diff --git a/src/libnm-gtk/wifi.ui b/src/libnm-gtk/wifi.ui
deleted file mode 100644
index b7e40c47..00000000
--- a/src/libnm-gtk/wifi.ui
+++ /dev/null
@@ -1,222 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
-<interface domain="nm-applet">
- <requires lib="gtk+" version="3.10"/>
- <object class="GtkListStore" id="model1">
- <columns>
- <!-- column-name gchararray -->
- <column type="gchararray"/>
- </columns>
- <data>
- <row>
- <col id="0"> </col>
- </row>
- </data>
- </object>
- <object class="GtkListStore" id="model2">
- <columns>
- <!-- column-name gchararray -->
- <column type="gchararray"/>
- </columns>
- <data>
- <row>
- <col id="0"> </col>
- </row>
- </data>
- </object>
- <object class="GtkBox" id="hbox1">
- <property name="orientation">horizontal</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">5</property>
- <property name="margin_end">5</property>
- <property name="margin_top">5</property>
- <property name="margin_bottom">5</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="valign">start</property>
- <property name="icon_name">network-wireless</property>
- <property name="icon_size">6</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox1">
- <property name="orientation">vertical</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="caption_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_markup">True</property>
- <property name="wrap">True</property>
- <property name="max_width_chars">50</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkGrid" id="table1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">12</property>
- <child>
- <object class="GtkBox" id="security_vbox">
- <property name="orientation">vertical</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">4</property>
- <property name="width">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="security_combo_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Wi-Fi _security:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">security_combo</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="security_combo">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="model">model1</property>
- <child>
- <object class="GtkCellRendererText" id="renderer1"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
- </child>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="network_name_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_Network name:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">network_name_entry</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="network_name_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="activates_default">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="connection_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">C_onnection:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">connection_combo</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="connection_combo">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="device_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Wi-Fi _adapter:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">device_combo</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="device_combo">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="model">model2</property>
- <child>
- <object class="GtkCellRendererText" id="renderer2"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
- </child>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/src/libnma/init.c b/src/libnma/init.c
deleted file mode 100644
index 26828592..00000000
--- a/src/libnma/init.c
+++ /dev/null
@@ -1,23 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-
-/*
- * Copyright 2014 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <libintl.h>
-
-static void __attribute__((constructor))
-_libnma_init (void)
-{
- static gboolean initialized = FALSE;
-
- if (initialized)
- return;
- initialized = TRUE;
-
- bindtextdomain (GETTEXT_PACKAGE, NMALOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-}
-
diff --git a/src/libnma/libnma-gtk4.pc.in b/src/libnma/libnma-gtk4.pc.in
deleted file mode 100644
index a2cf2b49..00000000
--- a/src/libnma/libnma-gtk4.pc.in
+++ /dev/null
@@ -1,11 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-includedir=@includedir@
-libdir=@libdir@
-
-Name: libnma
-Description: NetworkManager UI utilities (gtk4 version)
-Version: @PACKAGE_VERSION@
-Requires: libnm
-Cflags: -I${includedir}/libnma
-Libs: -L${libdir} -lnma-gtk4
diff --git a/src/libnma/libnma.pc.in b/src/libnma/libnma.pc.in
deleted file mode 100644
index 9e6f905d..00000000
--- a/src/libnma/libnma.pc.in
+++ /dev/null
@@ -1,11 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-includedir=@includedir@
-libdir=@libdir@
-
-Name: libnma
-Description: NetworkManager UI utilities (libnm version)
-Version: @PACKAGE_VERSION@
-Requires: libnm
-Cflags: -I${includedir}/libnma
-Libs: -L${libdir} -lnma
diff --git a/src/libnma/libnma.ver b/src/libnma/libnma.ver
deleted file mode 100644
index 9b263d9c..00000000
--- a/src/libnma/libnma.ver
+++ /dev/null
@@ -1,114 +0,0 @@
-libnma_1_2_0 {
-global:
- nma_country_info_get_country_code;
- nma_country_info_get_country_name;
- nma_country_info_get_providers;
- nma_country_info_get_type;
- nma_country_info_ref;
- nma_country_info_unref;
- nma_mobile_access_method_get_3gpp_apn;
- nma_mobile_access_method_get_dns;
- nma_mobile_access_method_get_family;
- nma_mobile_access_method_get_gateway;
- nma_mobile_access_method_get_name;
- nma_mobile_access_method_get_password;
- nma_mobile_access_method_get_type;
- nma_mobile_access_method_get_username;
- nma_mobile_access_method_ref;
- nma_mobile_access_method_unref;
- nma_mobile_provider_get_3gpp_mcc_mnc;
- nma_mobile_provider_get_cdma_sid;
- nma_mobile_provider_get_methods;
- nma_mobile_provider_get_name;
- nma_mobile_provider_get_type;
- nma_mobile_provider_ref;
- nma_mobile_providers_database_dump;
- nma_mobile_providers_database_get_countries;
- nma_mobile_providers_database_get_type;
- nma_mobile_providers_database_lookup_3gpp_mcc_mnc;
- nma_mobile_providers_database_lookup_cdma_sid;
- nma_mobile_providers_database_lookup_country;
- nma_mobile_providers_database_new;
- nma_mobile_providers_database_new_finish;
- nma_mobile_providers_database_new_sync;
- nma_mobile_providers_split_3gpp_mcc_mnc;
- nma_mobile_provider_unref;
- nma_mobile_wizard_destroy;
- nma_mobile_wizard_new;
- nma_mobile_wizard_present;
- nma_utils_menu_to_secret_flags;
- nma_utils_setup_password_storage;
- nma_utils_update_password_storage;
- nma_vpn_password_dialog_focus_password;
- nma_vpn_password_dialog_focus_password_secondary;
- nma_vpn_password_dialog_focus_password_ternary;
- nma_vpn_password_dialog_get_password;
- nma_vpn_password_dialog_get_password_secondary;
- nma_vpn_password_dialog_get_password_ternary;
- nma_vpn_password_dialog_get_type;
- nma_vpn_password_dialog_new;
- nma_vpn_password_dialog_run_and_block;
- nma_vpn_password_dialog_set_password;
- nma_vpn_password_dialog_set_password_label;
- nma_vpn_password_dialog_set_password_secondary;
- nma_vpn_password_dialog_set_password_secondary_label;
- nma_vpn_password_dialog_set_password_ternary;
- nma_vpn_password_dialog_set_password_ternary_label;
- nma_vpn_password_dialog_set_show_password;
- nma_vpn_password_dialog_set_show_password_secondary;
- nma_vpn_password_dialog_set_show_password_ternary;
- nma_wifi_dialog_get_connection;
- nma_wifi_dialog_get_nag_ignored;
- nma_wifi_dialog_get_type;
- nma_wifi_dialog_nag_user;
- nma_wifi_dialog_new;
- nma_wifi_dialog_new_for_create;
- nma_wifi_dialog_new_for_hidden;
- nma_wifi_dialog_new_for_other;
- nma_wifi_dialog_set_nag_ignored;
-local:
- *;
-};
-
-libnma_1_8_0 {
-global:
- nma_cert_chooser_add_to_size_group;
- nma_cert_chooser_get_cert;
- nma_cert_chooser_get_cert_password;
- nma_cert_chooser_get_cert_password_flags;
- nma_cert_chooser_get_cert_uri;
- nma_cert_chooser_get_key;
- nma_cert_chooser_get_key_password;
- nma_cert_chooser_get_key_password_flags;
- nma_cert_chooser_get_key_uri;
- nma_cert_chooser_get_type;
- nma_cert_chooser_new;
- nma_cert_chooser_set_cert;
- nma_cert_chooser_set_cert_password;
- nma_cert_chooser_set_cert_uri;
- nma_cert_chooser_set_key;
- nma_cert_chooser_set_key_password;
- nma_cert_chooser_set_key_uri;
- nma_cert_chooser_setup_cert_password_storage;
- nma_cert_chooser_setup_key_password_storage;
- nma_cert_chooser_update_cert_password_storage;
- nma_cert_chooser_update_key_password_storage;
- nma_cert_chooser_validate;
-} libnma_1_2_0;
-
-libnma_1_8_12 {
- nma_mobile_wizard_get_type;
-} libnma_1_8_0;
-
-libnma_1_8_20 {
- nma_wifi_dialog_new_for_secrets;
-} libnma_1_8_12;
-
-libnma_1_8_22 {
- nma_bar_code_draw;
- nma_bar_code_get_size;
- nma_bar_code_get_type;
- nma_bar_code_new;
- nma_bar_code_widget_get_type;
- nma_bar_code_widget_new;
-} libnma_1_8_12;
diff --git a/src/libnma/meson.build b/src/libnma/meson.build
deleted file mode 100644
index 2432be93..00000000
--- a/src/libnma/meson.build
+++ /dev/null
@@ -1,186 +0,0 @@
-cert_chooser_headers = files('nma-cert-chooser.h')
-
-cert_chooser_sources = files(
- 'nma-cert-chooser.c',
- 'nma-file-cert-chooser.c'
-)
-
-resource_data = files(
- 'nma-pkcs11-cert-chooser-dialog.ui',
- 'nma-pkcs11-token-login-dialog.ui',
- 'wifi.ui'
-)
-
-built_sources = gnome.compile_resources(
- 'nma-resources',
- 'nma.gresource.xml',
- dependencies: resource_data
-)
-
-gir_headers = cert_chooser_headers + files(
- 'nma-bar-code-widget.h',
- 'nma-bar-code.h',
- 'nma-mobile-providers.h',
- 'nma-mobile-wizard.h',
- 'nma-ui-utils.h',
- 'nma-vpn-password-dialog.h',
- 'nma-wifi-dialog.h'
-)
-
-install_headers(
- gir_headers,
- subdir: 'libnma'
-)
-
-gir_sources = [version_header] + cert_chooser_sources + files(
- 'init.c',
- 'nma-bar-code-widget.c',
- 'nma-bar-code.c',
- 'nma-mobile-providers.c',
- 'nma-mobile-wizard.c',
- 'nma-ui-utils.c',
- 'nma-vpn-password-dialog.c',
- 'nma-wifi-dialog.c'
-)
-
-incs = [
- top_inc,
- shared_inc,
- src_inc,
- libnma_inc,
- wireless_security_inc
-]
-
-deps = [
- gudev_dep,
- libnm_dep,
- libutils_libnm_dep,
-]
-
-cflags = [
- '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB',
- '-DBINDIR="@0@"'.format(nma_bindir),
- '-DDATADIR="@0@"'.format(nma_datadir),
- '-DLIBEXECDIR="@0@"'.format(nma_libexecdir),
- '-DNMALOCALEDIR="@0@"'.format(nma_localedir),
- '-DSYSCONFDIR="@0@"'.format(nma_sysconfdir),
- '-DAUTOSTARTDIR="@0@"'.format(nma_autostartdir),
- '-DICONDIR="@0@"'.format(nma_icondir)
-]
-
-symbol_map = join_paths(meson.current_source_dir(), 'libnma.ver')
-
-nma_deps = [ deps, gtk_dep ]
-nma_sources = [ gir_sources, built_sources ]
-if enable_gcr
- nma_sources += files(
- 'nma-cert-chooser-button.c',
- 'nma-pkcs11-cert-chooser.c',
- 'nma-pkcs11-cert-chooser-dialog.c',
- 'nma-pkcs11-token-login-dialog.c'
- )
- nma_deps += gcr_dep
-endif
-
-libnma = shared_library(
- 'nma',
- sources: nma_sources,
- version: libversion,
- include_directories: incs,
- dependencies: nma_deps,
- c_args: cflags,
- link_args: '-Wl,--version-script,' + symbol_map,
- link_depends: symbol_map,
- link_whole: libwireless_security_libnm,
- install: true,
- install_dir: nma_libdir
-)
-
-libnma_dep = declare_dependency(
- link_with: libnma,
- include_directories: libnma_inc
-)
-
-if enable_libnma_gtk4
- libnma_gtk4 = shared_library(
- 'nma-gtk4',
- sources: gir_sources + built_sources,
- version: libversion,
- include_directories: incs,
- dependencies: [ deps, gtk4_dep ],
- c_args: cflags,
- link_args: '-Wl,--version-script,' + symbol_map,
- link_depends: symbol_map,
- link_whole: libwireless_security_libnma_gtk4,
- install: true,
- install_dir: nma_libdir
- )
-
- libnma_gtk4_dep = declare_dependency(
- link_with: libnma_gtk4,
- include_directories: libnma_inc
- )
-endif
-
-subdir('tests')
-
-pkg.generate(
- libraries: libnma,
- version: nma_version,
- name: 'libnma',
- description: 'NetworkManager UI utilities (libnm version)',
- filebase: 'libnma',
- subdirs: 'libnma',
- requires: 'libnm',
- variables: 'exec_prefix=' + nma_prefix,
- install_dir: join_paths(nma_libdir, 'pkgconfig')
-)
-
-if enable_libnma_gtk4
- pkg.generate(
- libraries: libnma_gtk4,
- version: nma_version,
- name: 'libnma-gtk4',
- description: 'NetworkManager UI utilities (gtk4 version)',
- filebase: 'libnma-gtk4',
- subdirs: 'libnma',
- requires: 'libnm',
- variables: 'exec_prefix=' + nma_prefix,
- install_dir: join_paths(nma_libdir, 'pkgconfig')
- )
-endif
-
-if enable_introspection
- gir_dir = join_paths(nma_datadir, 'gir-' + nma_gir_version)
- typelib_dir = join_paths(nma_libdir, 'girepository-' + nma_gir_version)
-
- gnome.generate_gir(
- libnma,
- sources: gir_sources + gir_headers,
- nsversion: nma_gir_version,
- namespace: 'NMA',
- includes: [ 'Gtk-3.0', 'NM-1.0' ],
- identifier_prefix: nma_gir_prefix,
- symbol_prefix: nma_gir_prefix.to_lower(),
- export_packages: 'libnma',
- install: true,
- install_dir_gir: gir_dir,
- install_dir_typelib: typelib_dir
- )
-
- if enable_libnma_gtk4
- gnome.generate_gir(
- libnma,
- sources: gir_sources + gir_headers,
- nsversion: nma_gir_version,
- namespace: 'NMA4',
- includes: [ 'Gtk-4.0', 'NM-1.0' ],
- identifier_prefix: nma_gir_prefix,
- symbol_prefix: nma_gir_prefix.to_lower(),
- export_packages: 'libnma',
- install: true,
- install_dir_gir: gir_dir,
- install_dir_typelib: typelib_dir
- )
- endif
-endif
diff --git a/src/libnma/nma-bar-code-widget.c b/src/libnma/nma-bar-code-widget.c
deleted file mode 100644
index 0d547f2a..00000000
--- a/src/libnma/nma-bar-code-widget.c
+++ /dev/null
@@ -1,462 +0,0 @@
-/* nma-bar-code-widget.h - Renderer of a "QR" code
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public License as
- * published by the ree Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * Copyright 2018, 2019 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <stdint.h>
-
-#include "nma-bar-code.h"
-#include "nma-bar-code-widget.h"
-
-#define CARD_WIDTH_PT 252
-#define CARD_HEIGHT_PT 144
-
-struct _NMABarCodeWidget {
- GtkBox parent;
-};
-
-struct _NMABarCodeWidgetClass {
- GtkBoxClass parent_class;
-};
-
-typedef struct {
- NMConnection *connection;
- GtkWidget *qr_code;
- NMABarCode *qr;
-} NMABarCodeWidgetPrivate;
-
-/**
- * SECTION:nma-bar-code-widget
- * @title: NMABarCodeWidget
- *
- * This is a widget that displays a QR code for a connection suitable for
- * optical recognition, e.g. scanning on a phone to connect to a hotspot.
- */
-
-G_DEFINE_TYPE_WITH_CODE (NMABarCodeWidget, nma_bar_code_widget, GTK_TYPE_BOX,
- G_ADD_PRIVATE (NMABarCodeWidget))
-
-enum {
- PROP_0,
- PROP_CONNECTION,
-
- LAST_PROP
-};
-
-#define NMA_BAR_CODE_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- NMA_TYPE_BAR_CODE_WIDGET, \
- NMABarCodeWidgetPrivate))
-
-static void
-do_qr_code_draw (GtkDrawingArea *area, cairo_t *cr, int width, int height,
- gpointer user_data)
-{
- NMABarCodeWidgetPrivate *priv = NMA_BAR_CODE_WIDGET_GET_PRIVATE (user_data);
- int size = nma_bar_code_get_size (priv->qr);
-
- gtk_widget_set_size_request (priv->qr_code, (size + 2) * 3, (size + 2) * 3);
-
- cairo_set_source_rgba (cr, 1, 1, 1, 1);
- cairo_fill (cr);
- cairo_paint (cr);
- cairo_set_source_rgba (cr, 0, 0, 0, 1);
- cairo_scale (cr, (float)width / (size + 2), (float)height / (size + 2));
- cairo_translate (cr, 1, 1);
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
- nma_bar_code_draw (priv->qr, cr);
-}
-
-static gboolean
-qr_code_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
-{
- do_qr_code_draw (GTK_DRAWING_AREA (widget), cr,
- gtk_widget_get_allocated_width (widget),
- gtk_widget_get_allocated_height (widget),
- user_data);
-
- return TRUE;
-}
-
-static char *
-shell_escape (const char *to_escape)
-{
- GString *string = g_string_sized_new (32);
- gboolean quote = *to_escape == '\0';
- const char *c;
-
- for (c = to_escape; *c; c++) {
- if (strchr ("$\\\"", *c))
- g_string_append_c (string, '\\');
- else if (!g_ascii_isalnum(*c) && !strchr ("@%^+-_[]:", *c))
- quote = TRUE;
- g_string_append_c (string, *c);
- }
- if (quote) {
- g_string_append_c (string, '"');
- g_string_prepend_c (string, '"');
- }
- return g_string_free (string, FALSE);
-}
-
-static void
-draw_one (NMABarCodeWidget *self, cairo_t *cr,
- const char *psk, const char *ssid,
- const char *nmcli_line1, const char *nmcli_line2)
-{
- NMABarCodeWidgetPrivate *priv = NMA_BAR_CODE_WIDGET_GET_PRIVATE (self);
- int size = nma_bar_code_get_size (priv->qr);
-
- cairo_save (cr);
-
- cairo_set_line_width (cr, 0.01);
- cairo_rectangle (cr, 0, 0, CARD_WIDTH_PT, CARD_HEIGHT_PT);
- cairo_stroke (cr);
- cairo_translate (cr, 12, 12);
-
- cairo_save (cr);
- cairo_scale (cr, (float)84/(float)size, (float)84/(float)size);
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
- nma_bar_code_draw (priv->qr, cr);
- cairo_restore (cr);
-
- cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
-
- cairo_move_to (cr, 96, 12);
- cairo_set_font_size (cr, 12);
- cairo_show_text(cr, _("Network"));
-
- cairo_move_to (cr, 96, 30);
- cairo_set_font_size (cr, 16);
- cairo_show_text(cr, ssid);
-
- cairo_select_font_face(cr, "Monospace", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
-
- cairo_move_to (cr, 0, 108);
- cairo_set_font_size (cr, 10);
- cairo_show_text(cr, nmcli_line1);
-
- if (psk) {
- cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
-
- cairo_move_to (cr, 96, 60);
- cairo_set_font_size (cr, 12);
- cairo_show_text(cr, _("Password"));
-
- cairo_move_to (cr, 96, 78);
- cairo_set_font_size (cr, 16);
- cairo_show_text(cr, psk);
-
- cairo_select_font_face(cr, "Monospace", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
-
- cairo_move_to (cr, 24, 120);
- cairo_set_font_size (cr, 10);
- cairo_show_text(cr, nmcli_line2);
- }
-
- cairo_restore (cr);
-}
-
-static void
-draw_page (GtkPrintOperation *operation, GtkPrintContext *context, int page_nr, gpointer user_data)
-{
- NMABarCodeWidget *self = NMA_BAR_CODE_WIDGET (user_data);
- NMABarCodeWidgetPrivate *priv = NMA_BAR_CODE_WIDGET_GET_PRIVATE (self);
- cairo_t *cr = gtk_print_context_get_cairo_context (context);
- double width = gtk_print_context_get_width (context);
- double height = gtk_print_context_get_height (context);
- int count_x = width / CARD_WIDTH_PT;
- int count_y = height / CARD_HEIGHT_PT;
- double spacing_x = (width - (count_x * CARD_WIDTH_PT)) / (count_x + 1);
- double spacing_y = (height - (count_y * CARD_HEIGHT_PT)) / (count_y + 1);
- NMSettingWireless *s_wireless;
- NMSettingWirelessSecurity *s_wsec;
- gs_free char *nmcli_line1 = NULL;
- gs_free char *nmcli_line2 = NULL;
- const char *psk = NULL;
- GBytes *ssid_bytes;
- char *ssid;
- char *tmp;
- int x, y;
-
- s_wireless = nm_connection_get_setting_wireless (priv->connection);
- if (!s_wireless) {
- nma_bar_code_set_text (priv->qr, NULL);
- gtk_widget_queue_draw (priv->qr_code);
- return;
- }
-
- ssid_bytes = nm_setting_wireless_get_ssid (s_wireless);
- g_return_if_fail (ssid_bytes);
- ssid = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid_bytes, NULL),
- g_bytes_get_size (ssid_bytes));
- g_return_if_fail (ssid);
-
- s_wsec = nm_connection_get_setting_wireless_security (priv->connection);
- if (s_wsec)
- psk = nm_setting_wireless_security_get_psk (s_wsec);
-
- tmp = shell_escape (ssid);
- nmcli_line1 = g_strdup_printf ("$ nmcli d wifi con %s%s", tmp, psk ? " \\" : "");
- g_free (tmp);
-
- if (psk) {
- tmp = shell_escape (psk);
- nmcli_line2 = g_strdup_printf ("password %s", tmp);
- g_free (tmp);
- }
-
- for (y = 0; y < count_y; y++) {
- cairo_save (cr);
-
- cairo_translate (cr, spacing_x, spacing_y);
-
- for (x = 0; x < count_x; x++) {
- draw_one (self, cr, psk, ssid, nmcli_line1, nmcli_line2);
- cairo_translate (cr, CARD_WIDTH_PT + spacing_x, 0);
- }
-
- cairo_restore (cr);
- cairo_translate (cr, 0, CARD_HEIGHT_PT + spacing_y);
- }
-}
-
-static gboolean
-link_activated (GtkLabel *label, char *uri, gpointer user_data)
-{
- NMABarCodeWidget *self = NMA_BAR_CODE_WIDGET (user_data);
- GtkPrintOperation *print = gtk_print_operation_new ();
- GtkWidget *window;
- GError *error = NULL;
-
- g_return_val_if_fail (strcmp (uri, "nma:print") == 0, FALSE);
-
- window = gtk_widget_get_ancestor (GTK_WIDGET (self), GTK_TYPE_WINDOW);
-
- gtk_print_operation_set_n_pages (print, 1);
- gtk_print_operation_set_use_full_page (print, TRUE);
- gtk_print_operation_set_unit (print, GTK_UNIT_POINTS);
- g_signal_connect (print, "draw_page", G_CALLBACK (draw_page), self);
-
- if (!gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
- window ? GTK_WINDOW (window) : NULL, &error)) {
- g_printerr ("%s", error->message);
- g_error_free (error);
- }
-
- g_object_unref (print);
-
- return FALSE;
-}
-
-static void
-string_append_mecard (GString *string, const char *tag, const char *text)
-{
- const char *p;
- bool is_hex = TRUE;
- int start;
-
- if (!text)
- return;
-
- g_string_append (string, tag);
- start = string->len;
-
- for (p = text; *p; p++) {
- if (!g_ascii_isxdigit (*p))
- is_hex = FALSE;
- if (strchr ("\\\":;,", *p))
- g_string_append_c (string, '\\');
- g_string_append_c (string, *p);
- }
-
- if (is_hex) {
- g_string_insert_c (string, start, '\"');
- g_string_append_c (string, '\"');
- }
- g_string_append_c (string, ';');
-}
-
-static void
-update_qr_code (NMABarCodeWidget *self)
-{
- NMABarCodeWidgetPrivate *priv = NMA_BAR_CODE_WIDGET_GET_PRIVATE (self);
- NMSettingWireless *s_wireless;
- NMSettingWirelessSecurity *s_wsec;
- const char *key_mgmt = NULL;
- const char *psk = NULL;
- const char *type = NULL;
- GBytes *ssid_bytes;
- char *ssid;
- GString *string;
-
- if (!priv->qr)
- return;
-
- s_wireless = nm_connection_get_setting_wireless (priv->connection);
- if (!s_wireless) {
- nma_bar_code_set_text (priv->qr, NULL);
- gtk_widget_queue_draw (priv->qr_code);
- return;
- }
-
- ssid_bytes = nm_setting_wireless_get_ssid (s_wireless);
- g_return_if_fail (ssid_bytes);
- ssid = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid_bytes, NULL),
- g_bytes_get_size (ssid_bytes));
- g_return_if_fail (ssid);
-
- string = g_string_sized_new (64);
- g_string_append (string, "WIFI:");
-
- s_wsec = nm_connection_get_setting_wireless_security (priv->connection);
- if (s_wsec) {
- key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wsec);
- psk = nm_setting_wireless_security_get_psk (s_wsec);
- }
-
- if (key_mgmt == NULL) {
- type = "nopass";
- } else if ( strcmp (key_mgmt, "none") == 0
- || strcmp (key_mgmt, "ieee8021x") == 0) {
- type = "WEP";
- } else if ( strcmp (key_mgmt, "wpa-none") == 0
- || strcmp (key_mgmt, "wpa-psk") == 0) {
- type = "WPA";
- }
-
- string_append_mecard(string, "T:", type);
- string_append_mecard(string, "S:", ssid);
- string_append_mecard(string, "P:", psk);
-
- if (nm_setting_wireless_get_hidden (s_wireless))
- g_string_append (string, "H:true;");
-
- g_string_append_c (string, ';');
- nma_bar_code_set_text (priv->qr, string->str);
- gtk_widget_queue_draw (priv->qr_code);
- g_string_free (string, TRUE);
-}
-
-static void
-set_connection (NMABarCodeWidget *self, NMConnection *connection)
-{
- NMABarCodeWidgetPrivate *priv = NMA_BAR_CODE_WIDGET_GET_PRIVATE (self);
-
- if (priv->connection) {
- g_signal_handlers_disconnect_by_data (priv->connection, self);
- g_clear_object (&priv->connection);
- }
-
- if (connection) {
- priv->connection = connection;
- g_signal_connect_swapped (connection, "changed", G_CALLBACK (update_qr_code), self);
- g_signal_connect_swapped (connection, "secrets-updated", G_CALLBACK (update_qr_code), self);
- }
-}
-
-static void
-get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- NMABarCodeWidgetPrivate *priv = NMA_BAR_CODE_WIDGET_GET_PRIVATE (object);
-
- switch (prop_id) {
- case PROP_CONNECTION:
- g_value_set_object (value, priv->connection);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- NMABarCodeWidget *self = NMA_BAR_CODE_WIDGET (object);
-
- switch (prop_id) {
- case PROP_CONNECTION:
- set_connection (self, g_value_dup_object (value));
- update_qr_code (self);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-nma_bar_code_widget_init (NMABarCodeWidget *self)
-{
- NMABarCodeWidgetPrivate *priv = NMA_BAR_CODE_WIDGET_GET_PRIVATE (self);
-
- gtk_widget_init_template (GTK_WIDGET (self));
-
- priv->qr = nma_bar_code_new (NULL);
- g_signal_connect (priv->qr_code, "draw", G_CALLBACK (qr_code_draw), self);
-}
-
-/**
- * nma_bar_code_widget_new:
- * @connection: connection to get network details from
- *
- * Returns: (transfer full): the bar code widget instance
- *
- * Since: 1.8.22
- */
-GtkWidget *
-nma_bar_code_widget_new (NMConnection *connection)
-{
- return g_object_new (NMA_TYPE_BAR_CODE_WIDGET,
- NMA_BAR_CODE_WIDGET_CONNECTION, connection,
- NULL);
-}
-
-static void
-finalize (GObject *object)
-{
- NMABarCodeWidget *self = NMA_BAR_CODE_WIDGET (object);
- NMABarCodeWidgetPrivate *priv = NMA_BAR_CODE_WIDGET_GET_PRIVATE (self);
-
- g_clear_object (&priv->qr);
- set_connection (self, NULL);
-
- G_OBJECT_CLASS (nma_bar_code_widget_parent_class)->finalize (object);
-}
-
-static void
-nma_bar_code_widget_class_init (NMABarCodeWidgetClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- object_class->get_property = get_property;
- object_class->set_property = set_property;
- object_class->finalize = finalize;
-
- g_object_class_install_property
- (object_class, PROP_CONNECTION,
- g_param_spec_object (NMA_BAR_CODE_WIDGET_CONNECTION, "", "",
- NM_TYPE_CONNECTION,
- G_PARAM_READABLE | G_PARAM_WRITABLE));
-
- gtk_widget_class_set_template_from_resource (widget_class,
- "/org/freedesktop/network-manager-applet/nma-bar-code-widget.ui");
-
- gtk_widget_class_bind_template_child_private (widget_class, NMABarCodeWidget, qr_code);
- gtk_widget_class_bind_template_callback (widget_class, link_activated);
-}
diff --git a/src/libnma/nma-bar-code-widget.h b/src/libnma/nma-bar-code-widget.h
deleted file mode 100644
index d12782e5..00000000
--- a/src/libnma/nma-bar-code-widget.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* nma-bar-code.h - Widget that renders a "QR" code
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public License as
- * published by the ree Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * Copyright (C) 2018, 2019 Red Hat, Inc.
- */
-
-#ifndef __NMA_BAR_CODE_WIDGET_H__
-#define __NMA_BAR_CODE_WIDGET_H__
-
-#include <glib-object.h>
-
-#include "nma-version.h"
-
-#define NMA_TYPE_BAR_CODE_WIDGET (nma_bar_code_widget_get_type ())
-#define NMA_BAR_CODE_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_BAR_CODE_WIDGET, NMABarCodeWidget))
-#define NMA_BAR_CODE_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_BAR_CODE_WIDGET, NMABarCodeWidgetClass))
-#define NMA_IS_BAR_CODE_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_BAR_CODE_WIDGET))
-#define NMA_IS_BAR_CODE_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_BAR_CODE_WIDGET))
-#define NMA_BAR_CODE_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_BAR_CODE_WIDGET, NMABarCodeWidgetClass))
-
-#define NMA_BAR_CODE_WIDGET_CONNECTION "connection"
-
-typedef struct _NMABarCodeWidget NMABarCodeWidget;
-typedef struct _NMABarCodeWidgetClass NMABarCodeWidgetClass;
-
-NMA_AVAILABLE_IN_1_8_22
-GType nma_bar_code_widget_get_type (void) G_GNUC_CONST;
-
-NMA_AVAILABLE_IN_1_8_22
-GtkWidget *nma_bar_code_widget_new (NMConnection *connection);
-
-#endif /* __NMA_BAR_CODE_WIDGET_H__ */
diff --git a/src/libnma/nma-bar-code-widget.ui b/src/libnma/nma-bar-code-widget.ui
deleted file mode 100644
index d88f17c6..00000000
--- a/src/libnma/nma-bar-code-widget.ui
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.1 -->
-<interface domain="nm-applet">
- <requires lib="gtk+" version="3.20"/>
- <template class="NMABarCodeWidget" parent="GtkBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">6</property>
- <property name="margin_end">6</property>
- <property name="margin_top">6</property>
- <property name="margin_bottom">6</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkAspectFrame">
- <property name="expand">True</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0.5</property>
- <child>
- <object class="GtkDrawingArea" id="qr_code">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="expand">False</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Scan with your phone or &lt;a href="nma:print"&gt;Print&lt;/a&gt;</property>
- <property name="use_markup">True</property>
- <signal name="activate-link" handler="link_activated" swapped="no"/>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </template>
-</interface>
diff --git a/src/libnma/nma-bar-code.c b/src/libnma/nma-bar-code.c
deleted file mode 100644
index 0efa9f12..00000000
--- a/src/libnma/nma-bar-code.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/* nma-bar-code.h - Renderer of a "QR" code
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public License as
- * published by the ree Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * Copyright 2018, 2019 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <stdint.h>
-
-#include "nma-bar-code.h"
-
-/*
- * The aim of this class is to provide a GObject-y QR code generator based
- * on qrcodegen library [1]. We purposefully include it directly instead
- * of compiling it separately, while providing a much less flexible (and
- * more straightforward) API. This way we the compiler does a good job at
- * slimming things down (chopping off half of the library) while allowing
- * us to leave the original source unmodified for easier maintenance.
- *
- * [1] https://github.com/nayuki/QR-Code-generator
- */
-
-#pragma GCC visibility push(hidden)
-NM_PRAGMA_WARNING_DISABLE("-Wdeclaration-after-statement")
-#define NDEBUG
-#include "qrcodegen.c"
-NM_PRAGMA_WARNING_REENABLE
-#pragma GCC visibility pop
-
-struct _NMABarCode {
- GObject parent;
-};
-
-struct _NMABarCodeClass {
- GObjectClass parent_class;
-};
-
-typedef struct {
- uint8_t qrcode[qrcodegen_BUFFER_LEN_FOR_VERSION (qrcodegen_VERSION_MAX)];
-} NMABarCodePrivate;
-
-/**
- * SECTION:nma-bar-code
- * @title: NMABarCode
- *
- * A Bar Code object provides the means of drawing a QR code onto a cairo
- * context. Useful for rendering Wi-Fi network credential in a form that
- * can be optically scanned with a phone camera.
- */
-
-G_DEFINE_TYPE_WITH_CODE (NMABarCode, nma_bar_code, G_TYPE_OBJECT,
- G_ADD_PRIVATE (NMABarCode))
-
-enum {
- PROP_0,
- PROP_TEXT,
- PROP_SIZE,
-
- LAST_PROP
-};
-
-#define NMA_BAR_CODE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMA_TYPE_BAR_CODE, NMABarCodePrivate))
-
-/**
- * nma_bar_code_set_text:
- * @self: bar code instance
- * @text: new bar code text
- *
- * Regenerates the QR code for a different text.
- *
- * Since: 1.8.22
- */
-
-void
-nma_bar_code_set_text (NMABarCode *self, const char *text)
-{
- g_object_set (self, NMA_BAR_CODE_TEXT, text, NULL);
-}
-
-/**
- * nma_bar_code_get_size:
- * @self: bar code instance
- *
- * Returns: the side of a QR code square.
- *
- * Since: 1.8.22
- */
-
-int
-nma_bar_code_get_size (NMABarCode *self)
-{
- int size;
-
- g_object_get (self, NMA_BAR_CODE_SIZE, &size, NULL);
- return size;
-}
-
-/**
- * nma_bar_code_draw:
- * @self: bar code instance
- * @cr: cairo context
- *
- * Draws the QR code onto the given context.
- *
- * Since: 1.8.22
- */
-
-void
-nma_bar_code_draw (NMABarCode *self, cairo_t *cr)
-{
- NMABarCodePrivate *priv = NMA_BAR_CODE_GET_PRIVATE (self);
- int x, y, size;
-
- size = qrcodegen_getSize (priv->qrcode);
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
-
- for (y = 0; y < size; y++) {
- for (x = 0; x < size; x++) {
- if (qrcodegen_getModule (priv->qrcode, x, y)) {
- cairo_rectangle (cr, x, y, 1, 1);
- cairo_fill (cr);
- }
- }
- }
-}
-
-static void
-get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- NMABarCodePrivate *priv = NMA_BAR_CODE_GET_PRIVATE (object);
-
- switch (prop_id) {
- case PROP_SIZE:
- g_value_set_int (value, qrcodegen_getSize (priv->qrcode));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- NMABarCodePrivate *priv = NMA_BAR_CODE_GET_PRIVATE (object);
- uint8_t tempBuffer[qrcodegen_BUFFER_LEN_FOR_VERSION (qrcodegen_VERSION_MAX)];
- const char *text;
- bool success = FALSE;
-
- switch (prop_id) {
- case PROP_TEXT:
- text = g_value_get_string (value);
- if (text) {
- success = qrcodegen_encodeText(g_value_get_string (value),
- tempBuffer,
- priv->qrcode,
- qrcodegen_Ecc_LOW,
- qrcodegen_VERSION_MIN,
- qrcodegen_VERSION_MAX,
- qrcodegen_Mask_AUTO,
- FALSE);
- }
- if (!success)
- bzero (priv->qrcode, sizeof (priv->qrcode));
- g_object_notify (object, NMA_BAR_CODE_SIZE);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-nma_bar_code_init (NMABarCode *self)
-{
-}
-
-/**
- * nma_bar_code_new:
- * @text: set the bar code text
- *
- * Returns: (transfer full): the bar code instance
- *
- * Since: 1.8.22
- */
-
-NMABarCode *
-nma_bar_code_new (const char *text)
-{
- return g_object_new (NMA_TYPE_BAR_CODE, NMA_BAR_CODE_TEXT, text, NULL);
-}
-
-static void
-nma_bar_code_class_init (NMABarCodeClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->get_property = get_property;
- object_class->set_property = set_property;
-
- g_object_class_install_property
- (object_class, PROP_TEXT,
- g_param_spec_string (NMA_BAR_CODE_TEXT, "", "",
- "", G_PARAM_WRITABLE));
-
- g_object_class_install_property
- (object_class, PROP_SIZE,
- g_param_spec_int (NMA_BAR_CODE_SIZE, "", "",
- G_MININT, G_MAXINT, 0, G_PARAM_READABLE));
-}
diff --git a/src/libnma/nma-bar-code.h b/src/libnma/nma-bar-code.h
deleted file mode 100644
index 143f2f8a..00000000
--- a/src/libnma/nma-bar-code.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* nma-bar-code.h - Widget that renders a "QR" code
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public License as
- * published by the ree Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * Copyright (C) 2018, 2019 Red Hat, Inc.
- */
-
-#ifndef __NMA_BAR_CODE_H__
-#define __NMA_BAR_CODE_H__
-
-#include <glib-object.h>
-#include <cairo.h>
-
-#include "nma-version.h"
-
-#define NMA_TYPE_BAR_CODE (nma_bar_code_get_type ())
-#define NMA_BAR_CODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_BAR_CODE, NMABarCode))
-#define NMA_BAR_CODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_BAR_CODE, NMABarCodeClass))
-#define NMA_IS_BAR_CODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_BAR_CODE))
-#define NMA_IS_BAR_CODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_BAR_CODE))
-#define NMA_BAR_CODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_BAR_CODE, NMABarCodeClass))
-
-#define NMA_BAR_CODE_TEXT "text"
-#define NMA_BAR_CODE_SIZE "size"
-
-typedef struct _NMABarCode NMABarCode;
-typedef struct _NMABarCodeClass NMABarCodeClass;
-
-NMA_AVAILABLE_IN_1_8_22
-GType nma_bar_code_get_type (void) G_GNUC_CONST;
-
-NMA_AVAILABLE_IN_1_8_22
-NMABarCode *nma_bar_code_new (const char *text);
-
-NMA_AVAILABLE_IN_1_8_22
-void nma_bar_code_set_text (NMABarCode *self, const char *text);
-
-NMA_AVAILABLE_IN_1_8_22
-int nma_bar_code_get_size (NMABarCode *self);
-
-NMA_AVAILABLE_IN_1_8_22
-void nma_bar_code_draw (NMABarCode *self, cairo_t *cr);
-
-#endif /* __NMA_BAR_CODE_H__ */
diff --git a/src/libnma/nma-cert-chooser-button.c b/src/libnma/nma-cert-chooser-button.c
deleted file mode 100644
index 9d5287f5..00000000
--- a/src/libnma/nma-cert-chooser-button.c
+++ /dev/null
@@ -1,469 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2016,2017 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-#include "nma-cert-chooser-button.h"
-#include "nma-pkcs11-cert-chooser-dialog.h"
-#include "utils.h"
-
-#include <gck/gck.h>
-
-/**
- * SECTION:nma-cert-chooser-button
- * @title: NMACertChooserButton
- * @short_description: The PKCS\#11 or file certificate chooser button
- *
- * #NMACertChooserButton is a button that provides a dropdown of
- * PKCS\#11 slots present in the system and allows choosing a certificate
- * from either of them or a file.
- */
-
-enum {
- COLUMN_LABEL,
- COLUMN_SLOT,
- N_COLUMNS
-};
-
-typedef struct {
- gchar *title;
- gchar *uri;
- gchar *pin;
- gboolean remember_pin;
- NMACertChooserButtonFlags flags;
-} NMACertChooserButtonPrivate;
-
-G_DEFINE_TYPE (NMACertChooserButton, nma_cert_chooser_button, GTK_TYPE_COMBO_BOX);
-
-#define NMA_CERT_CHOOSER_BUTTON_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- NMA_TYPE_CERT_CHOOSER_BUTTON, \
- NMACertChooserButtonPrivate))
-
-static gboolean
-is_this_a_slot_nobody_loves (GckSlot *slot)
-{
- GckSlotInfo *slot_info;
- gboolean ret_value = FALSE;
-
- slot_info = gck_slot_get_info (slot);
- if (!slot_info)
- return TRUE;
-
- /* The p11-kit CA trusts do use their filesystem paths for description. */
- if (g_str_has_prefix (slot_info->slot_description, "/"))
- ret_value = TRUE;
- else if (NM_IN_STRSET (slot_info->slot_description,
- "SSH Keys",
- "Secret Store",
- "User Key Storage"))
- ret_value = TRUE;
-
- gck_slot_info_free (slot_info);
-
- return ret_value;
-}
-
-static void
-modules_initialized (GObject *object, GAsyncResult *res, gpointer user_data)
-{
- NMACertChooserButton *self = NMA_CERT_CHOOSER_BUTTON (user_data);
- GList *slots;
- GList *list_iter;
- GError *error = NULL;
- GList *modules;
- GtkTreeIter iter;
- GtkListStore *model;
- GckTokenInfo *info;
- gchar *label;
-
- modules = gck_modules_initialize_registered_finish (res, &error);
- if (error) {
- /* The Front Fell Off. */
- g_warning ("Error getting registered modules: %s", error->message);
- g_clear_error (&error);
- }
-
- model = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (self)));
-
- /* A separator. */
- gtk_list_store_insert_with_values (model, &iter, 2,
- COLUMN_LABEL, NULL,
- COLUMN_SLOT, NULL, -1);
-
- slots = gck_modules_get_slots (modules, FALSE);
- for (list_iter = slots; list_iter; list_iter = list_iter->next) {
- GckSlot *slot = GCK_SLOT (list_iter->data);
-
- if (is_this_a_slot_nobody_loves (slot))
- continue;
-
- info = gck_slot_get_token_info (slot);
- if (!info) {
- /* This happens when the slot has no token inserted.
- * Don't add this one to the list. The other widgets
- * assume gck_slot_get_token_info() don't fail and a slot
- * for which it does is essentially useless as it can't be
- * used for crafting an URI. */
- continue;
- }
-
- if ((info->flags & CKF_TOKEN_INITIALIZED) == 0)
- continue;
-
- if (info->label && *info->label) {
- label = g_strdup_printf ("%s\342\200\246", info->label);
- } else if (info->model && *info->model) {
- g_warning ("The token doesn't have a valid label");
- label = g_strdup_printf ("%s\342\200\246", info->model);
- } else {
- g_warning ("The token has neither valid label nor model");
- label = g_strdup ("(Unknown)\342\200\246");
- }
- gtk_list_store_insert_with_values (model, &iter, 2,
- COLUMN_LABEL, label,
- COLUMN_SLOT, slot, -1);
- g_free (label);
- gck_token_info_free (info);
- }
-
- gck_list_unref_free (slots);
- gck_list_unref_free (modules);
-}
-
-static void
-update_title (NMACertChooserButton *button)
-{
- NMACertChooserButtonPrivate *priv = NMA_CERT_CHOOSER_BUTTON_GET_PRIVATE (button);
- GckUriData *data;
- GtkTreeIter iter;
- GtkTreeModel *model;
- gs_free char *label = NULL;
- GError *error = NULL;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (button));
-
- if (!gtk_tree_model_get_iter_first (model, &iter))
- g_return_if_reached ();
-
- if (!priv->uri) {
- label = g_strdup (_("(None)"));
- } else if (g_str_has_prefix (priv->uri, "pkcs11:")) {
- data = gck_uri_parse (priv->uri, GCK_URI_FOR_ANY, &error);
- if (data) {
- if (!gck_attributes_find_string (data->attributes, CKA_LABEL, &label)) {
- if (data->token_info) {
- g_free (label);
- label = g_strdup_printf ( priv->flags & NMA_CERT_CHOOSER_BUTTON_FLAG_KEY
- ? _("Key in %s")
- : _("Certificate in %s"),
- data->token_info->label);
- }
- }
- gck_uri_data_free (data);
- } else {
- g_warning ("Bad URI '%s': %s\n", priv->uri, error->message);
- g_error_free (error);
- }
- } else {
- label = priv->uri;
- if (g_str_has_prefix (label, "file://"))
- label += 7;
- if (g_strrstr (label, "/"))
- label = g_strrstr (label, "/") + 1;
- label = g_strdup (label);
- }
-
- gtk_list_store_set (GTK_LIST_STORE (model), &iter,
- COLUMN_LABEL, label ?: _("(Unknown)"),
- -1);
-}
-
-static void
-select_from_token (NMACertChooserButton *button, GckSlot *slot)
-{
- NMACertChooserButtonPrivate *priv = NMA_CERT_CHOOSER_BUTTON_GET_PRIVATE (button);
- GtkWidget *toplevel;
- GtkWidget *dialog;
-
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
- if (!gtk_widget_is_toplevel (toplevel) || !GTK_IS_WINDOW (toplevel))
- toplevel = NULL;
-
- dialog = nma_pkcs11_cert_chooser_dialog_new (slot,
- priv->flags & NMA_CERT_CHOOSER_BUTTON_FLAG_KEY
- ? CKO_PRIVATE_KEY
- : CKO_CERTIFICATE,
- priv->title,
- GTK_WINDOW (toplevel),
- GTK_FILE_CHOOSER_ACTION_OPEN | GTK_DIALOG_USE_HEADER_BAR,
- _("Select"), GTK_RESPONSE_ACCEPT,
- _("Cancel"), GTK_RESPONSE_CANCEL,
- NULL);
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
- if (priv->uri)
- g_free (priv->uri);
- priv->uri = nma_pkcs11_cert_chooser_dialog_get_uri (NMA_PKCS11_CERT_CHOOSER_DIALOG (dialog));
- if (priv->pin)
- g_free (priv->pin);
- priv->pin = nma_pkcs11_cert_chooser_dialog_get_pin (NMA_PKCS11_CERT_CHOOSER_DIALOG (dialog));
- priv->remember_pin = nma_pkcs11_cert_chooser_dialog_get_remember_pin (NMA_PKCS11_CERT_CHOOSER_DIALOG (dialog));
- update_title (button);
- }
- gtk_widget_destroy (dialog);
-}
-
-static void
-select_from_file (NMACertChooserButton *button)
-{
- NMACertChooserButtonPrivate *priv = NMA_CERT_CHOOSER_BUTTON_GET_PRIVATE (button);
- GtkWidget *toplevel;
- GtkWidget *dialog;
-
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
- if (!gtk_widget_is_toplevel (toplevel) || !GTK_IS_WINDOW (toplevel))
- toplevel = NULL;
-
- dialog = gtk_file_chooser_dialog_new (priv->title,
- GTK_WINDOW (toplevel),
- GTK_FILE_CHOOSER_ACTION_OPEN,
- _("Select"), GTK_RESPONSE_ACCEPT,
- _("Cancel"), GTK_RESPONSE_CANCEL,
- NULL);
-
- if (priv->flags & NMA_CERT_CHOOSER_BUTTON_FLAG_KEY)
- gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), utils_key_filter ());
- else
- gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), utils_cert_filter ());
-
- if (priv->uri)
- gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (dialog), priv->uri);
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
- if (priv->uri)
- g_free (priv->uri);
- priv->uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
- if (priv->pin) {
- g_free (priv->pin);
- priv->pin = NULL;
- }
- priv->remember_pin = FALSE;
- update_title (button);
- }
- gtk_widget_destroy (dialog);
-}
-
-static void
-dispose (GObject *object)
-{
- NMACertChooserButtonPrivate *priv = NMA_CERT_CHOOSER_BUTTON_GET_PRIVATE (object);
-
- nm_clear_g_free (&priv->title);
- nm_clear_g_free (&priv->uri);
- nm_clear_g_free (&priv->pin);
-}
-
-static void
-changed (GtkComboBox *combo_box)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
- gchar *label;
- GckSlot *slot;
-
- if (gtk_combo_box_get_active (combo_box) == 0)
- return;
-
- g_signal_stop_emission_by_name (combo_box, "changed");
- gtk_combo_box_get_active_iter (combo_box, &iter);
-
- model = gtk_combo_box_get_model (combo_box);
- gtk_tree_model_get (model, &iter,
- COLUMN_LABEL, &label,
- COLUMN_SLOT, &slot, -1);
- if (slot)
- select_from_token (NMA_CERT_CHOOSER_BUTTON (combo_box), slot);
- else
- select_from_file (NMA_CERT_CHOOSER_BUTTON (combo_box));
-
- g_free (label);
- g_clear_object (&slot);
- gtk_combo_box_set_active (combo_box, 0);
-}
-
-static void
-nma_cert_chooser_button_class_init (NMACertChooserButtonClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkComboBoxClass *combo_box_class = GTK_COMBO_BOX_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMACertChooserButtonPrivate));
-
- object_class->dispose = dispose;
- combo_box_class->changed = changed;
-}
-
-static void
-nma_cert_chooser_button_init (NMACertChooserButton *self)
-{
- gck_modules_initialize_registered_async (NULL, modules_initialized, self);
-}
-
-static gboolean
-row_separator (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
-{
- gchar *label;
- GckSlot *slot;
-
- gtk_tree_model_get (model, iter, 0, &label, 1, &slot, -1);
- if (label == NULL && slot == NULL)
- return TRUE;
- g_free (label);
- g_clear_object (&slot);
-
- return FALSE;
-}
-
-/**
- * nma_cert_chooser_button_set_title:
- * @button: the #NMACertChooserButton instance
- * @title: the title of the token or file chooser dialogs
- *
- * Set the title of file or PKCS\#11 object chooser dialogs.
- */
-void
-nma_cert_chooser_button_set_title (NMACertChooserButton *button, const gchar *title)
-{
- NMACertChooserButtonPrivate *priv = NMA_CERT_CHOOSER_BUTTON_GET_PRIVATE (button);
-
- if (priv->title)
- g_free (priv->title);
- priv->title = g_strdup (title);
-}
-
-/**
- * nma_cert_chooser_button_get_uri:
- * @button: the #NMACertChooserButton instance
- *
- * Obtain the URI of the selected obejct -- either of
- * "pkcs11" or "file" scheme.
- *
- * Returns: the URI or %NULL if none was selected.
- */
-const gchar *
-nma_cert_chooser_button_get_uri (NMACertChooserButton *button)
-{
- NMACertChooserButtonPrivate *priv = NMA_CERT_CHOOSER_BUTTON_GET_PRIVATE (button);
-
- return priv->uri;
-}
-
-/**
- * nma_cert_chooser_button_set_uri:
- * @button: the #NMACertChooserButton instance
- * @uri: the URI
- *
- * Set the chosen URI to given string.
- */
-void
-nma_cert_chooser_button_set_uri (NMACertChooserButton *button, const gchar *uri)
-{
- NMACertChooserButtonPrivate *priv = NMA_CERT_CHOOSER_BUTTON_GET_PRIVATE (button);
-
- if (priv->uri)
- g_free (priv->uri);
- priv->uri = g_strdup (uri);
- update_title (button);
-}
-
-/**
- * nma_cert_chooser_button_get_pin:
- * @button: the #NMACertChooserButton instance
- *
- * Obtain the PIN that was used to unlock the token.
- *
- * Returns: the PIN, %NULL if the token was not logged into or an emtpy
- * string ("") if the protected authentication path was used.
- */
-gchar *
-nma_cert_chooser_button_get_pin (NMACertChooserButton *button)
-{
- NMACertChooserButtonPrivate *priv = NMA_CERT_CHOOSER_BUTTON_GET_PRIVATE (button);
-
- return g_strdup (priv->pin);
-}
-
-/**
- * nma_cert_chooser_button_get_remember_pin:
- * @button: the #NMACertChooserButton instance
- *
- * Obtain the value of the "Remember PIN" checkbox during the token login.
- *
- * Returns: TRUE if the user chose to remember the PIN, FALSE
- * if not or if the tokin was not logged into at all.
- */
-gboolean
-nma_cert_chooser_button_get_remember_pin (NMACertChooserButton *button)
-{
- NMACertChooserButtonPrivate *priv = NMA_CERT_CHOOSER_BUTTON_GET_PRIVATE (button);
-
- return priv->remember_pin;
-}
-
-/**
- * nma_cert_chooser_button_new:
- * @flags: the flags configuring the behavior of the chooser dialogs
- *
- * Creates the new button that can select certificates from
- * files or PKCS\#11 tokens.
- *
- * Returns: the newly created #NMACertChooserButton
- */
-GtkWidget *
-nma_cert_chooser_button_new (NMACertChooserButtonFlags flags)
-{
- GtkWidget *self;
- GtkListStore *model;
- GtkTreeIter iter;
- GtkCellRenderer *cell;
- NMACertChooserButtonPrivate *priv;
-
- model = gtk_list_store_new (2, G_TYPE_STRING, GCK_TYPE_SLOT);
- self = g_object_new (NMA_TYPE_CERT_CHOOSER_BUTTON,
- "model", model,
- "popup-fixed-width", TRUE,
- NULL);
- g_object_unref (model);
-
- priv = NMA_CERT_CHOOSER_BUTTON_GET_PRIVATE (self);
- priv->flags = flags;
-
- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (self),
- row_separator,
- NULL,
- NULL);
-
- /* The first entry with current object name. */
- gtk_list_store_insert_with_values (model, &iter, 0,
- COLUMN_LABEL, NULL,
- COLUMN_SLOT, NULL, -1);
- update_title (NMA_CERT_CHOOSER_BUTTON (self));
-
- /* The separator and the last entry. The tokens will be added in between. */
- gtk_list_store_insert_with_values (model, &iter, 1,
- COLUMN_LABEL, NULL,
- COLUMN_SLOT, NULL, -1);
- gtk_list_store_insert_with_values (model, &iter, 2,
- COLUMN_LABEL, _("Select from file\342\200\246"),
- COLUMN_SLOT, NULL, -1);
-
- cell = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (self), cell, FALSE);
- gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (self), cell, "text", 0);
- gtk_combo_box_set_active (GTK_COMBO_BOX (self), 0);
-
- return self;
-}
diff --git a/src/libnma/nma-cert-chooser-button.h b/src/libnma/nma-cert-chooser-button.h
deleted file mode 100644
index fcc54680..00000000
--- a/src/libnma/nma-cert-chooser-button.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2016,2017 Red Hat, Inc.
- */
-
-#ifndef __NMA_CERT_CHOOSER_BUTTON_H__
-#define __NMA_CERT_CHOOSER_BUTTON_H__
-
-#include <gtk/gtk.h>
-
-/**
- * NMACertChooserButtonFlags:
- * @NMA_CERT_CHOOSER_BUTTON_FLAG_NONE: defaults
- * @NMA_CERT_CHOOSER_BUTTON_FLAG_KEY: only allow choosing a key
- *
- * Unless NMA_CERT_CHOOSER_BUTTON_FLAG_KEY is chosen, the
- * choosers allow picking a certificate or a certificate with
- * key in a single object (PKCS\#11 URI or a PKCS\#12 archive).
- */
-typedef enum {
- NMA_CERT_CHOOSER_BUTTON_FLAG_NONE = 0,
- NMA_CERT_CHOOSER_BUTTON_FLAG_KEY = 1,
-} NMACertChooserButtonFlags;
-
-typedef struct {
- GtkComboBox parent;
-} NMACertChooserButton;
-
-typedef struct {
- GtkComboBoxClass parent;
-} NMACertChooserButtonClass;
-
-#define NMA_TYPE_CERT_CHOOSER_BUTTON (nma_cert_chooser_button_get_type ())
-#define NMA_CERT_CHOOSER_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_CERT_CHOOSER_BUTTON, NMACertChooserButton))
-#define NMA_CERT_CHOOSER_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_CERT_CHOOSER_BUTTON, NMACertChooserButtonClass))
-#define NMA_IS_CERT_CHOOSER_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_CERT_CHOOSER_BUTTON))
-#define NMA_IS_CERT_CHOOSER_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_CERT_CHOOSER_BUTTON))
-#define NMA_CERT_CHOOSER_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_CERT_CHOOSER_BUTTON, NMACertChooserButtonClass))
-
-GType nma_cert_chooser_button_get_type (void);
-
-void nma_cert_chooser_button_set_title (NMACertChooserButton *button,
- const gchar *title);
-
-const gchar *nma_cert_chooser_button_get_uri (NMACertChooserButton *button);
-
-void nma_cert_chooser_button_set_uri (NMACertChooserButton *button,
- const gchar *uri);
-
-gchar *nma_cert_chooser_button_get_pin (NMACertChooserButton *button);
-
-gboolean nma_cert_chooser_button_get_remember_pin (NMACertChooserButton *button);
-
-GtkWidget *nma_cert_chooser_button_new (NMACertChooserButtonFlags flags);
-
-#endif /* __NMA_CERT_CHOOSER_BUTTON_H__ */
diff --git a/src/libnma/nma-cert-chooser-private.h b/src/libnma/nma-cert-chooser-private.h
deleted file mode 100644
index dcfc8ccc..00000000
--- a/src/libnma/nma-cert-chooser-private.h
+++ /dev/null
@@ -1,143 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2015,2017 Red Hat, Inc.
- */
-
-#ifndef NMA_CERT_CHOOSER_PRIVATE_H
-#define NMA_CERT_CHOOSER_PRIVATE_H
-
-#include "nma-cert-chooser.h"
-
-typedef struct _NMACertChooserVtable NMACertChooserVtable;
-
-typedef struct {
- GtkWidget *key_button_label;
- GtkWidget *key_password_label;
- GtkWidget *cert_button_label;
- GtkWidget *key_button;
- GtkWidget *key_password;
- GtkWidget *cert_button;
- GtkWidget *show_password;
-} NMAFileCertChooserPrivate;
-
-typedef struct {
- GtkWidget *key_button_label;
- GtkWidget *key_password_label;
- GtkWidget *cert_button_label;
- GtkWidget *cert_password_label;
- GtkWidget *key_button;
- GtkWidget *key_password;
- GtkWidget *cert_button;
- GtkWidget *cert_password;
- GtkWidget *show_password;
-} NMAPkcs11CertChooserPrivate;
-
-typedef struct {
- const NMACertChooserVtable *vtable;
-
- struct {
- union {
- NMAFileCertChooserPrivate file;
- NMAPkcs11CertChooserPrivate pkcs11;
- };
- } _sub;
-} NMACertChooserPrivate;
-
-struct _NMACertChooser {
- GtkGrid parent;
- NMACertChooserPrivate _priv;
-};
-
-struct _NMACertChooserClass {
- GtkGridClass parent_class;
-};
-
-/**
- * NMACertChooserVtable:
- * @init: called early to initialize the type.
- * @set_cert_uri: Set the certificate location for the chooser button.
- * @get_cert_uri: Get the real certificate location from the chooser button along
- * with the scheme.
- * @set_cert_password: Set the password or a PIN that might be required to
- * access the certificate.
- * @get_cert_password: Obtain the password or a PIN that was be required to
- * access the certificate.
- * @set_key_uri: Set the key location for the chooser button.
- * @get_key_uri: Get the real key location from the chooser button along with the
- * scheme.
- * @set_key_password: Set the password or a PIN that might be required to
- * access the key.
- * @get_key_password: Obtain the password or a PIN that was be required to
- * access the key.
- * @add_to_size_group: Add the labels to the specified size group so that they
- * are aligned.
- * @validate: Validate whether the chosen values make sense.
- * @setup_cert_password_storage: Set up certificate password storage.
- * @update_cert_password_storage: Update certificate password storage.
- * @get_cert_password_flags: Return secret flags corresponding to the
- * certificate password if one is present.
- * @setup_key_password_storage: Set up key password storage.
- * @update_key_password_storage: Update key password storage.
- * @get_key_password_flags: Returns secret flags corresponding to the key
- * password if one is present.
- * @set_title: Setup the title property
- * @set_flags: Setup the flags property
- */
-struct _NMACertChooserVtable {
- void (*init) (NMACertChooser *cert_chooser);
- void (*set_cert_uri) (NMACertChooser *cert_chooser,
- const gchar *uri);
- gchar *(*get_cert_uri) (NMACertChooser *cert_chooser);
- void (*set_cert_password) (NMACertChooser *cert_chooser,
- const gchar *password);
- const gchar *(*get_cert_password) (NMACertChooser *cert_chooser);
- void (*set_key_uri) (NMACertChooser *cert_chooser,
- const gchar *uri);
- gchar *(*get_key_uri) (NMACertChooser *cert_chooser);
- void (*set_key_password) (NMACertChooser *cert_chooser,
- const gchar *password);
- const gchar *(*get_key_password) (NMACertChooser *cert_chooser);
-
- void (*add_to_size_group) (NMACertChooser *cert_chooser,
- GtkSizeGroup *group);
- gboolean (*validate) (NMACertChooser *cert_chooser,
- GError **error);
-
- void (*setup_cert_password_storage) (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode);
- void (*update_cert_password_storage) (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name);
- NMSettingSecretFlags (*get_cert_password_flags) (NMACertChooser *cert_chooser);
- void (*setup_key_password_storage) (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode);
- void (*update_key_password_storage) (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name);
- NMSettingSecretFlags (*get_key_password_flags) (NMACertChooser *cert_chooser);
-
- void (*set_title) (NMACertChooser *cert_chooser,
- const gchar *title);
- void (*set_flags) (NMACertChooser *cert_chooser,
- NMACertChooserFlags flags);
-};
-
-extern const NMACertChooserVtable nma_cert_chooser_vtable_file;
-#if LIBNM_BUILD && WITH_GCR
-extern const NMACertChooserVtable nma_cert_chooser_vtable_pkcs11;
-#endif
-
-#endif /* NMA_CERT_CHOOSER_PRIVATE_H */
diff --git a/src/libnma/nma-cert-chooser.c b/src/libnma/nma-cert-chooser.c
deleted file mode 100644
index 82d0e00b..00000000
--- a/src/libnma/nma-cert-chooser.c
+++ /dev/null
@@ -1,788 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2017 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-#include "nma-cert-chooser.h"
-
-#include "nma-cert-chooser-private.h"
-
-#if !LIBNM_BUILD
-#define NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH "file://"
-#endif
-
-/**
- * SECTION:nma-cert-chooser
- * @title: NMACertChooser
- *
- * Certificate chooser allows for selection of a certificate or
- * various schemes optionally accompanied with a key and passwords
- * or PIN.
- *
- * The widgets that implement this interface may allow selecting
- * the certificates from various sources such as files or cryptographic
- * tokens.
- */
-
-enum {
- PROP_0,
- PROP_TITLE,
- PROP_FLAGS,
- LAST_PROP,
-};
-
-static GParamSpec *properties[LAST_PROP];
-
-enum {
- CERT_VALIDATE,
- CERT_PASSWORD_VALIDATE,
- KEY_VALIDATE,
- KEY_PASSWORD_VALIDATE,
- CHANGED,
- LAST_SIGNAL,
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE (NMACertChooser, nma_cert_chooser, GTK_TYPE_GRID)
-
-#define NMA_CERT_CHOOSER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMACertChooser, NMA_IS_CERT_CHOOSER)
-#define NMA_CERT_CHOOSER_GET_VTABLE(o) (NMA_CERT_CHOOSER_GET_PRIVATE (o)->vtable)
-
-static gboolean
-accu_validation_error (GSignalInvocationHint *ihint,
- GValue *return_accu,
- const GValue *handler_return,
- gpointer data)
-{
- if (g_value_get_boxed (handler_return)) {
- g_value_copy (handler_return, return_accu);
- return FALSE;
- }
-
- return TRUE;
-}
-
-static gchar *
-value_with_scheme_to_uri (const gchar *value, NMSetting8021xCKScheme scheme)
-{
- switch (scheme) {
- case NM_SETTING_802_1X_CK_SCHEME_PATH:
- return g_strdup_printf (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH "%s", value);
-#if LIBNM_BUILD
- case NM_SETTING_802_1X_CK_SCHEME_PKCS11:
- return g_strdup (value);
-#endif
- default:
- g_return_val_if_reached (NULL);
- }
-}
-
-static gchar *
-uri_to_value_with_scheme (const gchar *uri, NMSetting8021xCKScheme *scheme)
-{
- if (!uri) {
- NM_SET_OUT (scheme, NM_SETTING_802_1X_CK_SCHEME_UNKNOWN);
- return NULL;
- }
-
- if (g_str_has_prefix (uri, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH)) {
- NM_SET_OUT (scheme, NM_SETTING_802_1X_CK_SCHEME_PATH);
- return g_uri_unescape_string (uri + NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH), NULL);
- }
-
-#if LIBNM_BUILD
- if (g_str_has_prefix (uri, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PKCS11)) {
- NM_SET_OUT (scheme, NM_SETTING_802_1X_CK_SCHEME_PKCS11);
- return g_strdup (uri);
- }
-#endif
-
- g_return_val_if_reached (NULL);
-}
-
-/**
- * nma_cert_chooser_set_cert_uri:
- * @cert_chooser: certificate chooser button instance
- * @uri: the path or URI of a certificate
- *
- * Sets the certificate URI for the chooser button.
- *
- * Since: 1.8.0
- */
-void
-nma_cert_chooser_set_cert_uri (NMACertChooser *cert_chooser,
- const gchar *uri)
-{
- g_return_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser));
-
- NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser)->set_cert_uri (cert_chooser, uri);
-}
-
-/**
- * nma_cert_chooser_set_cert:
- * @cert_chooser: certificate chooser button instance
- * @value: the path or URI of a certificate
- * @scheme: the scheme of the certificate path
- *
- * Sets the certificate location for the chooser button.
- *
- * Since: 1.8.0
- */
-void
-nma_cert_chooser_set_cert (NMACertChooser *cert_chooser,
- const gchar *value,
- NMSetting8021xCKScheme scheme)
-{
- gs_free gchar *uri = NULL;
-
- g_return_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser));
-
- if (!value)
- return;
-
- uri = value_with_scheme_to_uri (value, scheme);
- nma_cert_chooser_set_cert_uri (cert_chooser, uri);
-}
-
-/**
- * nma_cert_chooser_get_cert_uri:
- * @cert_chooser: certificate chooser button instance
- *
- * Gets the real certificate URI from the chooser button along with the scheme.
- *
- * Returns: (transfer full) (nullable): the certificate URI
- *
- * Since: 1.8.0
- */
-gchar *
-nma_cert_chooser_get_cert_uri (NMACertChooser *cert_chooser)
-{
- g_return_val_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser), NULL);
-
- return NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser)->get_cert_uri (cert_chooser);
-}
-
-/**
- * nma_cert_chooser_get_cert:
- * @cert_chooser: certificate chooser button instance
- * @scheme: (out): the scheme of the returned certificate path
- *
- * Gets the real certificate location from the chooser button along with the scheme.
- *
- * Returns: (transfer full) (nullable): the certificate path
- *
- * Since: 1.8.0
- */
-gchar *
-nma_cert_chooser_get_cert (NMACertChooser *cert_chooser, NMSetting8021xCKScheme *scheme)
-{
- gs_free gchar *uri = NULL;
-
- g_return_val_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser), NULL);
-
- uri = nma_cert_chooser_get_cert_uri (cert_chooser);
- return uri_to_value_with_scheme (uri, scheme);
-}
-
-/**
- * nma_cert_chooser_set_cert_password:
- * @cert_chooser: certificate chooser button instance
- * @password: the certificate PIN or password
- *
- * Sets the password or a PIN that might be required to access the certificate.
- *
- * Since: 1.8.0
- */
-void
-nma_cert_chooser_set_cert_password (NMACertChooser *cert_chooser, const gchar *password)
-{
- const NMACertChooserVtable *vtable;
-
- g_return_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser));
- g_return_if_fail (password);
-
- vtable = NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser);
- if (vtable->set_cert_password)
- vtable->set_cert_password (cert_chooser, password);
- else
- g_warning ("Can't set certificate password");
-}
-
-/**
- * nma_cert_chooser_get_cert_password:
- * @cert_chooser: certificate chooser button instance
- *
- * Obtains the password or a PIN that was be required to access the certificate.
- *
- * Returns: the certificate PIN or password
- *
- * Since: 1.8.0
- */
-const gchar *
-nma_cert_chooser_get_cert_password (NMACertChooser *cert_chooser)
-{
- const NMACertChooserVtable *vtable;
-
- g_return_val_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser), NULL);
-
- vtable = NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser);
- if (!vtable->get_cert_password)
- return NULL;
- return vtable->get_cert_password (cert_chooser);
-}
-
-/**
- * nma_cert_chooser_set_key_uri:
- * @cert_chooser: certificate chooser button instance
- * @uri: the URI of a key
- *
- * Sets the key URI for the chooser button.
- *
- * Since: 1.8.0
- */
-void
-nma_cert_chooser_set_key_uri (NMACertChooser *cert_chooser,
- const gchar *uri)
-{
- g_return_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser));
-
- return NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser)->set_key_uri (cert_chooser, uri);
-}
-
-/**
- * nma_cert_chooser_set_key:
- * @cert_chooser: certificate chooser button instance
- * @value: the path or URI of a key
- * @scheme: the scheme of the key path
- *
- * Sets the key location for the chooser button.
- *
- * Since: 1.8.0
- */
-void
-nma_cert_chooser_set_key (NMACertChooser *cert_chooser,
- const gchar *value,
- NMSetting8021xCKScheme scheme)
-{
- gs_free gchar *uri = NULL;
-
- g_return_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser));
-
- if (!value)
- return;
-
- uri = value_with_scheme_to_uri (value, scheme);
- nma_cert_chooser_set_key_uri (cert_chooser, uri);
-}
-
-/**
- * nma_cert_chooser_get_key:
- * @cert_chooser: certificate chooser button instance
- * @scheme: (out): the scheme of the returned key path
- *
- * Gets the real key location from the chooser button along with the scheme.
- *
- * Returns: (transfer full) (nullable): the key path
- *
- * Since: 1.8.0
- */
-gchar *
-nma_cert_chooser_get_key (NMACertChooser *cert_chooser, NMSetting8021xCKScheme *scheme)
-{
- gs_free gchar *uri = NULL;
-
- g_return_val_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser), NULL);
-
- uri = nma_cert_chooser_get_key_uri (cert_chooser);
- return uri_to_value_with_scheme (uri, scheme);
-}
-
-/**
- * nma_cert_chooser_get_key_uri:
- * @cert_chooser: certificate chooser button instance
- *
- * Gets the real key URI from the chooser button along with the scheme.
- *
- * Returns: (transfer full) (nullable): the key URI
- *
- * Since: 1.8.0
- */
-gchar *
-nma_cert_chooser_get_key_uri (NMACertChooser *cert_chooser)
-{
- g_return_val_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser), NULL);
-
- return NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser)->get_key_uri (cert_chooser);
-}
-
-/**
- * nma_cert_chooser_set_key_password:
- * @cert_chooser: certificate chooser button instance
- * @password: the key PIN or password
- *
- * Sets the password or a PIN that might be required to access the key.
- *
- * Since: 1.8.0
- */
-void
-nma_cert_chooser_set_key_password (NMACertChooser *cert_chooser, const gchar *password)
-{
- g_return_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser));
- g_return_if_fail (password);
-
- NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser)->set_key_password (cert_chooser, password);
-}
-
-/**
- * nma_cert_chooser_get_key_password:
- * @cert_chooser: certificate chooser button instance
- *
- * Obtains the password or a PIN that was be required to access the key.
- *
- * Returns: the key PIN or password
- *
- * Since: 1.8.0
- */
-const gchar *
-nma_cert_chooser_get_key_password (NMACertChooser *cert_chooser)
-{
- g_return_val_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser), NULL);
-
- return NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser)->get_key_password (cert_chooser);
-}
-
-/**
- * nma_cert_chooser_add_to_size_group:
- * @cert_chooser: certificate chooser button instance
- * @group: a size group
- *
- * Adds the labels to the specified size group so that they are aligned
- * nicely with other entries in a form.
- *
- * It is expected that the NMACertChooser is a GtkGrid with two columns
- * with the labels in the first one.
- *
- * Since: 1.8.0
- */
-void
-nma_cert_chooser_add_to_size_group (NMACertChooser *cert_chooser, GtkSizeGroup *group)
-{
- g_return_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser));
-
- NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser)->add_to_size_group (cert_chooser, group);
-}
-
-/**
- * nma_cert_chooser_validate:
- * @cert_chooser: certificate chooser button instance
- * @error: error return location
- *
- * Validates whether the chosen values make sense. The users can do further
- * validation by subscribing to the "*-changed" signals and returning an
- * error themselves.
- *
- * Returns: %TRUE if validation passes, %FALSE otherwise
- *
- * Since: 1.8.0
- */
-gboolean
-nma_cert_chooser_validate (NMACertChooser *cert_chooser, GError **error)
-{
- g_return_val_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser), TRUE);
-
- return NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser)->validate (cert_chooser, error);
-}
-
-/**
- * nma_cert_chooser_setup_cert_password_storage:
- * @cert_chooser: certificate chooser button instance
- * @initial_flags: initial secret flags to setup password menu from
- * @setting: #NMSetting containing the password, or NULL
- * @password_flags_name: name of the secret flags (like psk-flags), or NULL
- * @with_not_required: whether to include "Not required" menu item
- * @ask_mode: %TRUE if the entry is shown in ASK mode
- *
- * This method basically calls nma_utils_setup_password_storage()
- * on the certificate password entry, in case one is present.
- *
- * Since: 1.8.0
- */
-void
-nma_cert_chooser_setup_cert_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode)
-{
- const NMACertChooserVtable *vtable;
-
- g_return_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser));
-
- vtable = NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser);
- if (vtable->setup_cert_password_storage) {
- vtable->setup_cert_password_storage (cert_chooser,
- initial_flags,
- setting,
- password_flags_name,
- with_not_required,
- ask_mode);
- }
-}
-
-/**
- * nma_cert_chooser_update_cert_password_storage:
- * @cert_chooser: certificate chooser button instance
- * @secret_flags: secret flags to set
- * @setting: #NMSetting containing the password, or NULL
- * @password_flags_name: name of the secret flags (like psk-flags), or NULL
- *
- * This method basically calls nma_utils_update_password_storage()
- * on the certificate password entry, in case one is present.
- *
- * Since: 1.8.0
- */
-void
-nma_cert_chooser_update_cert_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name)
-{
- const NMACertChooserVtable *vtable;
-
- g_return_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser));
-
- vtable = NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser);
- if (vtable->update_cert_password_storage) {
- vtable->update_cert_password_storage (cert_chooser,
- secret_flags,
- setting,
- password_flags_name);
- }
-}
-
-/**
- * nma_cert_chooser_get_cert_password_flags:
- * @cert_chooser: certificate chooser button instance
- *
- * Returns secret flags corresponding to the certificate password
- * if one is present. The chooser would typically call into
- * nma_utils_menu_to_secret_flags() for the certificate password
- * entry.
- *
- * Returns: secret flags corresponding to the certificate password
- *
- * Since: 1.8.0
- */
-NMSettingSecretFlags
-nma_cert_chooser_get_cert_password_flags (NMACertChooser *cert_chooser)
-{
- const NMACertChooserVtable *vtable;
-
- g_return_val_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser),
- NM_SETTING_SECRET_FLAG_NONE);
-
- vtable = NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser);
- if (!vtable->get_cert_password_flags)
- return NM_SETTING_SECRET_FLAG_NONE;
- return vtable->get_cert_password_flags (cert_chooser);
-}
-
-
-/**
- * nma_cert_chooser_setup_key_password_storage:
- * @cert_chooser: certificate chooser button instance
- * @initial_flags: initial secret flags to setup password menu from
- * @setting: #NMSetting containing the password, or NULL
- * @password_flags_name: name of the secret flags (like psk-flags), or NULL
- * @with_not_required: whether to include "Not required" menu item
- * @ask_mode: %TRUE if the entry is shown in ASK mode
- *
- * This method basically calls nma_utils_setup_password_storage()
- * on the key password entry, in case one is present.
- *
- * Since: 1.8.0
- */
-void
-nma_cert_chooser_setup_key_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode)
-{
- g_return_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser));
-
- NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser)->setup_key_password_storage (cert_chooser,
- initial_flags,
- setting,
- password_flags_name,
- with_not_required,
- ask_mode);
-}
-
-/**
- * nma_cert_chooser_update_key_password_storage:
- * @cert_chooser: certificate chooser button instance
- * @secret_flags: secret flags to set
- * @setting: #NMSetting containing the password, or NULL
- * @password_flags_name: name of the secret flags (like psk-flags), or NULL
- *
- * This method basically calls nma_utils_update_password_storage()
- * on the key password entry, in case one is present.
- *
- * Since: 1.8.0
- */
-void
-nma_cert_chooser_update_key_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name)
-{
- g_return_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser));
-
- NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser)->update_key_password_storage (cert_chooser,
- secret_flags,
- setting,
- password_flags_name);
-}
-
-/**
- * nma_cert_chooser_get_key_password_flags:
- * @cert_chooser: certificate chooser button instance
- *
- * Returns secret flags corresponding to the key password
- * if one is present. The chooser would typically call into
- * nma_utils_menu_to_secret_flags() for the key password
- * entry.
- *
- * Returns: secret flags corresponding to the key password
- *
- * Since: 1.8.0
- */
-NMSettingSecretFlags
-nma_cert_chooser_get_key_password_flags (NMACertChooser *cert_chooser)
-{
- g_return_val_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser),
- NM_SETTING_SECRET_FLAG_NONE);
-
- return NMA_CERT_CHOOSER_GET_VTABLE (cert_chooser)->get_key_password_flags (cert_chooser);
-}
-
-static GObject *
-constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties)
-{
- GObject *object;
- NMACertChooser *cert_chooser;
- NMACertChooserFlags flags = NMA_CERT_CHOOSER_FLAG_NONE;
- NMACertChooserPrivate *priv;
- int i;
- const gchar *title = NULL;
-
- object = G_OBJECT_CLASS (nma_cert_chooser_parent_class)->constructor (type,
- n_construct_properties,
- construct_properties);
- cert_chooser = NMA_CERT_CHOOSER (object);
- priv = NMA_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- for (i = 0; i < n_construct_properties; i++) {
- if (strcmp (construct_properties[i].pspec->name, "title") == 0)
- title = g_value_get_string (construct_properties[i].value);
- if (strcmp (construct_properties[i].pspec->name, "flags") == 0)
- flags |= g_value_get_uint (construct_properties[i].value);
- }
- priv->vtable = &nma_cert_chooser_vtable_file;
-#if LIBNM_BUILD && (GTK_CHECK_VERSION(3,90,0) ? WITH_GCR_GTK4 : WITH_GCR)
- if ((flags & NMA_CERT_CHOOSER_FLAG_PEM) == 0)
- priv->vtable = &nma_cert_chooser_vtable_pkcs11;
-#endif
-
- /* Initialize the vtable and construct-time properties */
- priv->vtable->init (cert_chooser);
- priv->vtable->set_flags (cert_chooser, flags);
- priv->vtable->set_title (cert_chooser, title);
-
- return object;
-}
-
-static void
-set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
-{
- NMACertChooser *cert_chooser = NMA_CERT_CHOOSER (object);
-
- g_return_if_fail (NMA_IS_CERT_CHOOSER (cert_chooser));
-
- switch (property_id) {
- case PROP_TITLE:
- case PROP_FLAGS:
- /* Just ignore these, should be set at construct time */
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-nma_cert_chooser_class_init (NMACertChooserClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMACertChooserPrivate));
-
- object_class->constructor = constructor;
- object_class->set_property = set_property;
-
- /**
- * NMACertChooser::title:
- *
- * Name of the certificate or certificate/key pair to be chosen.
- * Used in labels and chooser dialog titles.
- *
- * Since: 1.8.0
- */
- properties[PROP_TITLE] = g_param_spec_string ("title",
- "Title",
- "Certificate Chooser Title",
- NULL,
- G_PARAM_WRITABLE
- | G_PARAM_CONSTRUCT_ONLY
- | G_PARAM_STATIC_STRINGS);
-
- /**
- * NMACertChooser::flags:
- *
- * The #NMACertChooserFlags flags that influnce which chooser
- * implementation is used and configure its behavior.
- *
- * Since: 1.8.0
- */
- properties[PROP_FLAGS] = g_param_spec_uint ("flags",
- "Flags",
- "Certificate Chooser Flags",
- NMA_CERT_CHOOSER_FLAG_NONE,
- NMA_CERT_CHOOSER_FLAG_CERT
- | NMA_CERT_CHOOSER_FLAG_PASSWORDS
- | NMA_CERT_CHOOSER_FLAG_PEM,
- NMA_CERT_CHOOSER_FLAG_NONE,
- G_PARAM_WRITABLE
- | G_PARAM_CONSTRUCT_ONLY
- | G_PARAM_STATIC_STRINGS);
-
- g_object_class_install_properties (object_class, LAST_PROP, properties);
-
- /**
- * NMACertChooser::cert-validate:
- *
- * Emitted when the certificate needs validation. The handlers can indicate that
- * the certificate is invalid by returning an error, which blocks further
- * signal processing and causes a call to nma_cert_chooser_validate()
- * to fail.
- *
- * Since: 1.8.0
- */
- signals[CERT_VALIDATE] = g_signal_new ("cert-validate",
- NMA_TYPE_CERT_CHOOSER,
- G_SIGNAL_RUN_LAST,
- 0,
- accu_validation_error, NULL, NULL,
- G_TYPE_ERROR, 0);
-
- /**
- * NMACertChooser::cert-password-validate:
- *
- * Emitted when the certificate password needs validation. The handlers
- * can indicate that the password is invalid by returning an error, which blocks further
- * signal processing and causes a call to nma_cert_chooser_validate()
- * to fail.
- *
- * Since: 1.8.0
- */
- signals[CERT_PASSWORD_VALIDATE] = g_signal_new ("cert-password-validate",
- NMA_TYPE_CERT_CHOOSER,
- G_SIGNAL_RUN_LAST,
- 0,
- accu_validation_error, NULL, NULL,
- G_TYPE_ERROR, 0);
-
- /**
- * NMACertChooser::key-validate:
- *
- * Emitted when the key needs validation. The handlers can indicate that
- * the key is invalid by returning an error, which blocks further
- * signal processing and causes a call to nma_cert_chooser_validate()
- * to fail.
- *
- * Since: 1.8.0
- */
- signals[KEY_VALIDATE] = g_signal_new ("key-validate",
- NMA_TYPE_CERT_CHOOSER,
- G_SIGNAL_RUN_LAST,
- 0,
- accu_validation_error, NULL, NULL,
- G_TYPE_ERROR, 0);
-
- /**
- * NMACertChooser::key-password-validate:
- *
- * Emitted when the key password needs validation. The handlers can indicate
- * that the password is invalid by returning an error, which blocks further
- * signal processing and causes a call to nma_cert_chooser_validate()
- * to fail.
- *
- * Since: 1.8.0
- */
- signals[KEY_PASSWORD_VALIDATE] = g_signal_new ("key-password-validate",
- NMA_TYPE_CERT_CHOOSER,
- G_SIGNAL_RUN_LAST,
- 0,
- accu_validation_error, NULL, NULL,
- G_TYPE_ERROR, 0);
-
- /**
- * NMACertChooser::changed:
- *
- * Emitted when anything changes in the certificate chooser, be it a certificate,
- * a key or associated passwords.
- *
- * Since: 1.8.0
- */
- signals[CHANGED] = g_signal_new ("changed",
- NMA_TYPE_CERT_CHOOSER,
- G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE,
- 0,
- NULL, NULL, NULL,
- G_TYPE_NONE, 0);
-
-}
-
-static void
-nma_cert_chooser_init (NMACertChooser *file_cert_chooser)
-{
-}
-
-/**
- * nma_cert_chooser_new:
- * @title: title of the certificate chooser dialog
- * @flags: the flags that configure the capabilities of the button
- *
- * Constructs the button that is capable of selecting a certificate
- * and a key.
- *
- * Returns: (transfer full): the certificate chooser button instance
- *
- * Since: 1.8.0
- */
-GtkWidget *
-nma_cert_chooser_new (const gchar *title, NMACertChooserFlags flags)
-{
- return g_object_new (NMA_TYPE_CERT_CHOOSER,
- "title", title,
- "flags", flags,
- NULL);
-}
diff --git a/src/libnma/nma-cert-chooser.h b/src/libnma/nma-cert-chooser.h
deleted file mode 100644
index c4c0ad54..00000000
--- a/src/libnma/nma-cert-chooser.h
+++ /dev/null
@@ -1,151 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2015,2017 Red Hat, Inc.
- */
-
-#ifndef NMA_CERT_CHOOSER_H
-#define NMA_CERT_CHOOSER_H
-
-#include <gtk/gtk.h>
-#include <NetworkManager.h>
-
-#include "nma-version.h"
-
-G_BEGIN_DECLS
-
-/**
- * NMACertChooserFlags:
- * @NMA_CERT_CHOOSER_FLAG_NONE: No flags
- * @NMA_CERT_CHOOSER_FLAG_CERT: Only pick a certificate, not a key
- * @NMA_CERT_CHOOSER_FLAG_PASSWORDS: Hide all controls but the secrets entries
- * @NMA_CERT_CHOOSER_FLAG_PEM: Ensure the chooser only selects regular PEM files
- *
- * Flags that controls what is the certificate chooser button able to pick.
- * Currently only local files are supported, but might be extended to use URIs,
- * such as PKCS\#11 certificate URIs in future as well.
- *
- * Since: 1.8.0
- */
-NMA_AVAILABLE_IN_1_8
-typedef enum {
- NMA_CERT_CHOOSER_FLAG_NONE = 0x0,
- NMA_CERT_CHOOSER_FLAG_CERT = 0x1,
- NMA_CERT_CHOOSER_FLAG_PASSWORDS = 0x2,
- NMA_CERT_CHOOSER_FLAG_PEM = 0x4,
-} NMACertChooserFlags;
-
-#define NMA_TYPE_CERT_CHOOSER (nma_cert_chooser_get_type ())
-#define NMA_CERT_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_CERT_CHOOSER, NMACertChooser))
-#define NMA_CERT_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_CERT_CHOOSER, NMACertChooserClass))
-#define NMA_IS_CERT_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_CERT_CHOOSER))
-#define NMA_IS_CERT_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_CERT_CHOOSER))
-#define NMA_CERT_CHOOSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_CERT_CHOOSER, NMACertChooserClass))
-
-NMA_AVAILABLE_IN_1_8
-typedef struct _NMACertChooser NMACertChooser;
-
-NMA_AVAILABLE_IN_1_8
-typedef struct _NMACertChooserClass NMACertChooserClass;
-
-NMA_AVAILABLE_IN_1_8
-GType nma_cert_chooser_get_type (void);
-
-NMA_AVAILABLE_IN_1_8
-void nma_cert_chooser_set_cert (NMACertChooser *cert_chooser,
- const gchar *value,
- NMSetting8021xCKScheme scheme);
-
-NMA_AVAILABLE_IN_1_8
-void nma_cert_chooser_set_cert_uri (NMACertChooser *cert_chooser,
- const gchar *uri);
-
-NMA_AVAILABLE_IN_1_8
-gchar *nma_cert_chooser_get_cert (NMACertChooser *cert_chooser,
- NMSetting8021xCKScheme *scheme);
-
-NMA_AVAILABLE_IN_1_8
-gchar *nma_cert_chooser_get_cert_uri (NMACertChooser *cert_chooser);
-
-NMA_AVAILABLE_IN_1_8
-void nma_cert_chooser_set_cert_password (NMACertChooser *cert_chooser,
- const gchar *password);
-
-NMA_AVAILABLE_IN_1_8
-const gchar *nma_cert_chooser_get_cert_password (NMACertChooser *cert_chooser);
-
-NMA_AVAILABLE_IN_1_8
-void nma_cert_chooser_set_key (NMACertChooser *cert_chooser,
- const gchar *value,
- NMSetting8021xCKScheme scheme);
-
-NMA_AVAILABLE_IN_1_8
-void nma_cert_chooser_set_key_uri (NMACertChooser *cert_chooser,
- const gchar *uri);
-
-NMA_AVAILABLE_IN_1_8
-gchar *nma_cert_chooser_get_key (NMACertChooser *cert_chooser,
- NMSetting8021xCKScheme *scheme);
-
-NMA_AVAILABLE_IN_1_8
-gchar *nma_cert_chooser_get_key_uri (NMACertChooser *cert_chooser);
-
-NMA_AVAILABLE_IN_1_8
-void nma_cert_chooser_set_key_password (NMACertChooser *cert_chooser,
- const gchar *password);
-
-NMA_AVAILABLE_IN_1_8
-const gchar *nma_cert_chooser_get_key_password (NMACertChooser *cert_chooser);
-
-NMA_AVAILABLE_IN_1_8
-GtkWidget *nma_cert_chooser_new (const gchar *title,
- NMACertChooserFlags flags);
-
-
-NMA_AVAILABLE_IN_1_8
-void nma_cert_chooser_add_to_size_group (NMACertChooser *cert_chooser,
- GtkSizeGroup *group);
-
-NMA_AVAILABLE_IN_1_8
-gboolean nma_cert_chooser_validate (NMACertChooser *cert_chooser,
- GError **error);
-
-NMA_AVAILABLE_IN_1_8
-void nma_cert_chooser_setup_cert_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode);
-
-NMA_AVAILABLE_IN_1_8
-void nma_cert_chooser_update_cert_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name);
-
-NMA_AVAILABLE_IN_1_8
-NMSettingSecretFlags nma_cert_chooser_get_cert_password_flags (NMACertChooser *cert_chooser);
-
-NMA_AVAILABLE_IN_1_8
-void nma_cert_chooser_setup_key_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode);
-
-NMA_AVAILABLE_IN_1_8
-void nma_cert_chooser_update_key_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name);
-
-NMA_AVAILABLE_IN_1_8
-NMSettingSecretFlags nma_cert_chooser_get_key_password_flags (NMACertChooser *cert_chooser);
-
-G_END_DECLS
-
-#endif /* NMA_CERT_CHOOSER_H */
diff --git a/src/libnma/nma-file-cert-chooser.c b/src/libnma/nma-file-cert-chooser.c
deleted file mode 100644
index 8f24c826..00000000
--- a/src/libnma/nma-file-cert-chooser.c
+++ /dev/null
@@ -1,399 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Dan Williams <dcbw@redhat.com>
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2015,2017 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-#include "nma-private.h"
-#include "nma-cert-chooser-private.h"
-#include "utils.h"
-#ifdef LIBNM_BUILD
-#include "nma-ui-utils.h"
-#else
-#include "nm-ui-utils.h"
-#endif
-
-#define NMA_FILE_CERT_CHOOSER_GET_PRIVATE(self) (&(_NM_GET_PRIVATE (self, NMACertChooser, NMA_IS_CERT_CHOOSER)->_sub.file))
-
-#if GTK_CHECK_VERSION(3,90,0)
-#define gtk3_widget_set_no_show_all(widget, show)
-#else
-#define gtk3_widget_set_no_show_all(widget, show) gtk_widget_set_no_show_all (widget, show);
-#endif
-
-static void
-set_key_password (NMACertChooser *cert_chooser, const gchar *password)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- g_return_if_fail (priv->key_password != NULL);
- gtk_editable_set_text (GTK_EDITABLE (priv->key_password), password);
-}
-
-static const gchar *
-get_key_password (NMACertChooser *cert_chooser)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- g_return_val_if_fail (priv->key_password != NULL, NULL);
- return gtk_editable_get_text (GTK_EDITABLE (priv->key_password));
-}
-
-static void
-set_key_uri (NMACertChooser *cert_chooser, const gchar *uri)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- if (uri)
- gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (priv->key_button), uri);
-}
-
-static gchar *
-get_key_uri (NMACertChooser *cert_chooser)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- return gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (priv->key_button));
-}
-
-static void
-set_cert_uri (NMACertChooser *cert_chooser, const gchar *uri)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- if (uri)
- gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (priv->cert_button), uri);
-}
-
-static gchar *
-get_cert_uri (NMACertChooser *cert_chooser)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- return gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (priv->cert_button));
-}
-
-static void
-add_to_size_group (NMACertChooser *cert_chooser, GtkSizeGroup *group)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- gtk_size_group_add_widget (group, priv->cert_button_label);
- gtk_size_group_add_widget (group, priv->key_button_label);
- gtk_size_group_add_widget (group, priv->key_password_label);
-}
-
-static gboolean
-validate (NMACertChooser *cert_chooser, GError **error)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
- GError *local = NULL;
- char *tmp;
-
- tmp = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (priv->cert_button));
- if (tmp) {
- g_free (tmp);
- } else {
- g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("No certificate set"));
- return FALSE;
- }
-
- g_signal_emit_by_name (cert_chooser, "cert-validate", &local);
- if (local) {
- widget_set_error (priv->cert_button);
- g_propagate_error (error, local);
- return FALSE;
- } else {
- widget_unset_error (priv->cert_button);
- }
-
- if (gtk_widget_get_visible (priv->key_button)) {
- tmp = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (priv->key_button));
- if (tmp) {
- g_free (tmp);
- } else {
- g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("No key set"));
- return FALSE;
- }
-
- g_signal_emit_by_name (cert_chooser, "key-validate", &local);
- if (local) {
- widget_set_error (priv->key_button);
- g_propagate_error (error, local);
- return FALSE;
- } else {
- widget_unset_error (priv->key_button);
- }
-
- g_signal_emit_by_name (cert_chooser, "key-password-validate", &local);
- if (local) {
- widget_set_error (priv->key_password);
- g_propagate_error (error, local);
- return FALSE;
- } else {
- widget_unset_error (priv->key_password);
- }
- }
-
- return TRUE;
-}
-
-static void
-setup_key_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- nma_utils_setup_password_storage (priv->key_password,
- initial_flags,
- setting,
- password_flags_name,
- with_not_required,
- ask_mode);
-}
-
-static void
-update_key_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- nma_utils_update_password_storage (priv->key_password,
- secret_flags,
- setting,
- password_flags_name);
-}
-
-
-static NMSettingSecretFlags
-get_key_password_flags (NMACertChooser *cert_chooser)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- return nma_utils_menu_to_secret_flags (priv->key_password);
-}
-
-static void
-reset_filter (GtkWidget *widget, GParamSpec *spec, gpointer user_data)
-{
- if (!gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (widget))) {
- g_signal_handlers_block_by_func (widget, reset_filter, user_data);
- gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (widget), GTK_FILE_FILTER (user_data));
- g_signal_handlers_unblock_by_func (widget, reset_filter, user_data);
- }
-}
-
-static void
-cert_changed_cb (GtkFileChooserButton *file_chooser_button, gpointer user_data)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (NMA_CERT_CHOOSER (user_data));
-
- if (gtk_widget_get_visible (priv->key_button)) {
- gtk_widget_set_sensitive (priv->key_button, TRUE);
- gtk_widget_set_sensitive (priv->key_button_label, TRUE);
- }
- g_signal_emit_by_name (user_data, "changed");
-}
-
-static void
-key_changed_cb (GtkFileChooserButton *file_chooser_button, gpointer user_data)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (NMA_CERT_CHOOSER (user_data));
-
- gtk_widget_set_sensitive (priv->key_password, TRUE);
- gtk_widget_set_sensitive (priv->key_password_label, TRUE);
- g_signal_emit_by_name (user_data, "changed");
-}
-
-static void
-key_password_changed_cb (GtkEntry *entry, gpointer user_data)
-{
- g_signal_emit_by_name (user_data, "changed");
-}
-
-static void
-show_toggled_cb (GtkCheckButton *button, gpointer user_data)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (NMA_CERT_CHOOSER (user_data));
-
- gtk_entry_set_visibility (GTK_ENTRY (priv->key_password),
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)));
-}
-
-static void
-set_title (NMACertChooser *cert_chooser, const gchar *title)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
- gchar *text;
-
- text = g_strdup_printf (_("Choose a key for %s Certificate"), title);
- gtk_file_chooser_button_set_title (GTK_FILE_CHOOSER_BUTTON (priv->key_button), text);
- g_free (text);
-
- text = g_strdup_printf (_("%s private _key"), title);
- gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->key_button_label), text);
- g_free (text);
-
- text = g_strdup_printf (_("%s key _password"), title);
- gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->key_password_label), text);
- g_free (text);
-
- text = g_strdup_printf (_("Choose %s Certificate"), title);
- gtk_file_chooser_button_set_title (GTK_FILE_CHOOSER_BUTTON (priv->cert_button), text);
- g_free (text);
-
- text = g_strdup_printf (_("%s _certificate"), title);
- gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->cert_button_label), text);
- g_free (text);
-}
-
-static void
-set_flags (NMACertChooser *cert_chooser, NMACertChooserFlags flags)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- if (flags & NMA_CERT_CHOOSER_FLAG_CERT) {
- gtk_widget_hide (priv->key_button);
- gtk_widget_hide (priv->key_button_label);
- gtk_widget_hide (priv->key_password);
- gtk_widget_hide (priv->key_password_label);
- gtk_widget_hide (priv->show_password);
- }
-
- if (flags & NMA_CERT_CHOOSER_FLAG_PASSWORDS) {
- gtk_widget_hide (priv->cert_button);
- gtk_widget_hide (priv->cert_button_label);
- gtk_widget_hide (priv->key_button);
- gtk_widget_hide (priv->key_button_label);
- }
-}
-
-static void
-init (NMACertChooser *cert_chooser)
-{
- NMAFileCertChooserPrivate *priv = NMA_FILE_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
- GtkFileFilter *filter;
-
- gtk_grid_insert_column (GTK_GRID (cert_chooser), 2);
- gtk_grid_set_row_spacing (GTK_GRID (cert_chooser), 6);
- gtk_grid_set_column_spacing (GTK_GRID (cert_chooser), 6);
-
- /* The key chooser */
- gtk_grid_insert_row (GTK_GRID (cert_chooser), 0);
-
- priv->key_button = g_object_new (GTK_TYPE_FILE_CHOOSER_BUTTON,
- "action", GTK_FILE_CHOOSER_ACTION_OPEN,
- "filter", utils_key_filter (),
- "local-only", TRUE,
- NULL);
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->key_button, 1, 0, 1, 1);
- gtk_widget_set_hexpand (priv->key_button, TRUE);
- gtk_widget_set_sensitive (priv->key_button, FALSE);
- gtk_widget_show (priv->key_button);
- gtk3_widget_set_no_show_all (priv->key_button, TRUE);
-
- g_signal_connect (priv->key_button, "selection-changed",
- G_CALLBACK (key_changed_cb), cert_chooser);
-
- priv->key_button_label = gtk_label_new (NULL);
- g_object_set (priv->key_button_label, "xalign", (gfloat) 1, NULL);
- gtk_label_set_mnemonic_widget (GTK_LABEL (priv->key_button_label), priv->key_button);
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->key_button_label, 0, 0, 1, 1);
- gtk_widget_set_sensitive (priv->key_button_label, FALSE);
- gtk_widget_show (priv->key_button_label);
- gtk3_widget_set_no_show_all (priv->key_button_label, TRUE);
-
- /* The key password entry */
- gtk_grid_insert_row (GTK_GRID (cert_chooser), 1);
-
- priv->key_password = gtk_entry_new ();
- gtk_entry_set_visibility (GTK_ENTRY (priv->key_password), FALSE);
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->key_password, 1, 1, 1, 1);
- gtk_widget_set_hexpand (priv->key_password, TRUE);
- gtk_widget_set_sensitive (priv->key_password, FALSE);
- gtk_widget_show (priv->key_password);
- gtk3_widget_set_no_show_all (priv->key_password, TRUE);
-
- g_signal_connect (priv->key_password, "changed",
- G_CALLBACK (key_password_changed_cb), cert_chooser);
-
- priv->key_password_label = gtk_label_new (NULL);
- g_object_set (priv->key_password_label, "xalign", (gfloat) 1, NULL);
- gtk_label_set_mnemonic_widget (GTK_LABEL (priv->key_password_label), priv->key_password);
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->key_password_label, 0, 1, 1, 1);
- gtk_widget_set_sensitive (priv->key_password_label, FALSE);
- gtk_widget_show (priv->key_password_label);
- gtk3_widget_set_no_show_all (priv->key_password_label, TRUE);
-
- /* Show password */
- gtk_grid_insert_row (GTK_GRID (cert_chooser), 2);
- priv->show_password = gtk_check_button_new_with_mnemonic _("Sho_w password");
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->show_password, 1, 2, 1, 1);
- gtk_widget_show (priv->show_password);
- gtk3_widget_set_no_show_all (priv->show_password, TRUE);
- g_signal_connect (priv->show_password, "toggled",
- G_CALLBACK (show_toggled_cb), cert_chooser);
-
- /* The certificate chooser */
- gtk_grid_insert_row (GTK_GRID (cert_chooser), 0);
-
- filter = utils_cert_filter ();
- priv->cert_button = g_object_new (GTK_TYPE_FILE_CHOOSER_BUTTON,
- "action", GTK_FILE_CHOOSER_ACTION_OPEN,
- "filter", filter,
- "local-only", TRUE,
- NULL);
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->cert_button, 1, 0, 1, 1);
- gtk_widget_set_hexpand (priv->cert_button, TRUE);
- gtk_widget_show (priv->cert_button);
- gtk3_widget_set_no_show_all (priv->cert_button, TRUE);
-
- /* For some reason, GTK+ calls set_current_filter (..., NULL) from
- * gtkfilechooserdefault.c::show_and_select_files_finished_loading() on our
- * dialog; so force-reset the filter to what we want it to be whenever
- * it gets cleared.
- */
- g_signal_connect (priv->cert_button, "notify::filter",
- G_CALLBACK (reset_filter), filter);
-
- g_signal_connect (priv->cert_button, "selection-changed",
- G_CALLBACK (cert_changed_cb), cert_chooser);
-
- priv->cert_button_label = gtk_label_new (NULL);
- g_object_set (priv->cert_button_label, "xalign", (gfloat) 1, NULL);
- gtk_label_set_mnemonic_widget (GTK_LABEL (priv->cert_button_label), priv->cert_button);
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->cert_button_label, 0, 0, 1, 1);
- gtk_widget_show (priv->cert_button_label);
- gtk3_widget_set_no_show_all (priv->cert_button_label, TRUE);
-}
-
-const NMACertChooserVtable nma_cert_chooser_vtable_file = {
- .init = init,
-
- .set_title = set_title,
- .set_flags = set_flags,
-
- .set_cert_uri = set_cert_uri,
- .get_cert_uri = get_cert_uri,
- .set_key_uri = set_key_uri,
- .get_key_uri = get_key_uri,
- .set_key_password = set_key_password,
- .get_key_password = get_key_password,
-
- .add_to_size_group = add_to_size_group,
- .validate = validate,
-
- .setup_key_password_storage = setup_key_password_storage,
- .update_key_password_storage = update_key_password_storage,
- .get_key_password_flags = get_key_password_flags,
-};
diff --git a/src/libnma/nma-mobile-providers.c b/src/libnma/nma-mobile-providers.c
deleted file mode 100644
index e69378b3..00000000
--- a/src/libnma/nma-mobile-providers.c
+++ /dev/null
@@ -1,1600 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/*
- * Copyright (C) 2009 Novell, Inc.
- * Author: Tambet Ingo (tambet@gmail.com).
- *
- * Copyright (C) 2009 - 2012 Red Hat, Inc.
- * Copyright (C) 2012 Lanedo GmbH
- */
-
-#include "nm-default.h"
-
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-#include "nma-mobile-providers.h"
-
-#define MOBILE_BROADBAND_PROVIDER_INFO "/mobile-broadband-provider-info/serviceproviders.xml"
-#define ISO_3166_COUNTRY_CODES "/xml/iso-codes/iso_3166.xml"
-
-/******************************************************************************/
-/* Access method type */
-
-G_DEFINE_BOXED_TYPE (NMAMobileAccessMethod,
- nma_mobile_access_method,
- nma_mobile_access_method_ref,
- nma_mobile_access_method_unref)
-
-struct _NMAMobileAccessMethod {
- volatile gint refs;
-
- char *name;
- /* maps lang (char *) -> name (char *) */
- GHashTable *lcl_names;
-
- char *username;
- char *password;
- char *gateway;
- GPtrArray *dns; /* GPtrArray of 'char *' */
-
- /* Only used with 3GPP family type providers */
- char *apn;
-
- NMAMobileFamily family;
-};
-
-static NMAMobileAccessMethod *
-access_method_new (void)
-{
- NMAMobileAccessMethod *method;
-
- method = g_slice_new0 (NMAMobileAccessMethod);
- method->refs = 1;
- method->lcl_names = g_hash_table_new_full (g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- (GDestroyNotify) g_free);
-
- return method;
-}
-
-NMAMobileAccessMethod *
-nma_mobile_access_method_ref (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
- g_return_val_if_fail (method->refs > 0, NULL);
-
- g_atomic_int_inc (&method->refs);
-
- return method;
-}
-
-void
-nma_mobile_access_method_unref (NMAMobileAccessMethod *method)
-{
- g_return_if_fail (method != NULL);
- g_return_if_fail (method->refs > 0);
-
- if (g_atomic_int_dec_and_test (&method->refs)) {
- g_free (method->name);
- g_hash_table_destroy (method->lcl_names);
- g_free (method->username);
- g_free (method->password);
- g_free (method->gateway);
- g_free (method->apn);
-
- if (method->dns)
- g_ptr_array_unref (method->dns);
-
- g_slice_free (NMAMobileAccessMethod, method);
- }
-}
-
-/**
- * nma_mobile_access_method_get_name:
- * @method: a #NMAMobileAccessMethod
- *
- * Returns: (transfer none): the name of the method.
- */
-const gchar *
-nma_mobile_access_method_get_name (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
-
- return method->name;
-}
-
-/**
- * nma_mobile_access_method_get_username:
- * @method: a #NMAMobileAccessMethod
- *
- * Returns: (transfer none): the username.
- */
-const gchar *
-nma_mobile_access_method_get_username (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
-
- return method->username;
-}
-
-/**
- * nma_mobile_access_method_get_password:
- * @method: a #NMAMobileAccessMethod
- *
- * Returns: (transfer none): the password.
- */
-const gchar *
-nma_mobile_access_method_get_password (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
-
- return method->password;
-}
-
-/**
- * nma_mobile_access_method_get_gateway:
- * @method: a #NMAMobileAccessMethod
- *
- * Returns: (transfer none): the gateway.
- */
-const gchar *
-nma_mobile_access_method_get_gateway (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
-
- return method->gateway;
-}
-
-/**
- * nma_mobile_access_method_get_dns:
- * @method: a #NMAMobileAccessMethod
- *
- * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): the list of DNS.
- */
-const gchar **
-nma_mobile_access_method_get_dns (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
-
- return method->dns ? (const gchar **)method->dns->pdata : NULL;
-}
-
-/**
- * nma_mobile_access_method_get_3gpp_apn:
- * @method: a #NMAMobileAccessMethod
- *
- * Returns: (transfer none): the 3GPP APN.
- */
-const gchar *
-nma_mobile_access_method_get_3gpp_apn (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NULL);
-
- return method->apn;
-}
-
-/**
- * nma_mobile_access_method_get_family:
- * @method: a #NMAMobileAccessMethod
- *
- * Returns: a #NMAMobileFamily.
- */
-NMAMobileFamily
-nma_mobile_access_method_get_family (NMAMobileAccessMethod *method)
-{
- g_return_val_if_fail (method != NULL, NMA_MOBILE_FAMILY_UNKNOWN);
-
- return method->family;
-}
-
-/******************************************************************************/
-/* Mobile provider type */
-
-G_DEFINE_BOXED_TYPE (NMAMobileProvider,
- nma_mobile_provider,
- nma_mobile_provider_ref,
- nma_mobile_provider_unref)
-
-struct _NMAMobileProvider {
- volatile gint refs;
-
- char *name;
- /* maps lang (char *) -> name (char *) */
- GHashTable *lcl_names;
-
- GSList *methods; /* GSList of NmaMobileAccessMethod */
-
- GPtrArray *mcc_mnc; /* GPtrArray of strings */
- GArray *cdma_sid; /* GArray of guint32 */
-};
-
-static NMAMobileProvider *
-provider_new (void)
-{
- NMAMobileProvider *provider;
-
- provider = g_slice_new0 (NMAMobileProvider);
- provider->refs = 1;
- provider->lcl_names = g_hash_table_new_full (g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- (GDestroyNotify) g_free);
-
- return provider;
-}
-
-NMAMobileProvider *
-nma_mobile_provider_ref (NMAMobileProvider *provider)
-{
- g_return_val_if_fail (provider != NULL, NULL);
- g_return_val_if_fail (provider->refs > 0, NULL);
-
- g_atomic_int_inc (&provider->refs);
-
- return provider;
-}
-
-void
-nma_mobile_provider_unref (NMAMobileProvider *provider)
-{
- if (g_atomic_int_dec_and_test (&provider->refs)) {
- g_free (provider->name);
- g_hash_table_destroy (provider->lcl_names);
-
- g_slist_free_full (provider->methods, (GDestroyNotify) nma_mobile_access_method_unref);
-
- if (provider->mcc_mnc)
- g_ptr_array_unref (provider->mcc_mnc);
-
- if (provider->cdma_sid)
- g_array_unref (provider->cdma_sid);
-
- g_slice_free (NMAMobileProvider, provider);
- }
-}
-
-/**
- * nma_mobile_provider_get_name:
- * @provider: a #NMAMobileProvider
- *
- * Returns: (transfer none): the name of the provider.
- */
-const gchar *
-nma_mobile_provider_get_name (NMAMobileProvider *provider)
-{
- g_return_val_if_fail (provider != NULL, NULL);
-
- return provider->name;
-}
-
-/**
- * nma_mobile_provider_get_methods:
- * @provider: a #NMAMobileProvider
- *
- * Returns: (element-type NMAMobileAccessMethod) (transfer none): the
- * list of #NMAMobileAccessMethod this provider exposes.
- */
-GSList *
-nma_mobile_provider_get_methods (NMAMobileProvider *provider)
-{
- g_return_val_if_fail (provider != NULL, NULL);
-
- return provider->methods;
-}
-
-/**
- * nma_mobile_provider_get_3gpp_mcc_mnc:
- * @provider: a #NMAMobileProvider
- *
- * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): a
- * list of strings with the MCC and MNC codes this provider exposes.
- */
-const gchar **
-nma_mobile_provider_get_3gpp_mcc_mnc (NMAMobileProvider *provider)
-{
- g_return_val_if_fail (provider != NULL, NULL);
-
- return provider->mcc_mnc ? (const gchar **)provider->mcc_mnc->pdata : NULL;
-}
-
-/**
- * nma_mobile_provider_get_cdma_sid:
- * @provider: a #NMAMobileProvider
- *
- * Returns: (transfer none) (array zero-terminated=1) (element-type guint32): the
- * list of CDMA SIDs this provider exposes
- */
-const guint32 *
-nma_mobile_provider_get_cdma_sid (NMAMobileProvider *provider)
-{
- g_return_val_if_fail (provider != NULL, NULL);
-
- return provider->cdma_sid ? (const guint32 *)provider->cdma_sid->data : NULL;
-}
-
-/******************************************************************************/
-/* Country Info type */
-
-G_DEFINE_BOXED_TYPE (NMACountryInfo,
- nma_country_info,
- nma_country_info_ref,
- nma_country_info_unref)
-
-struct _NMACountryInfo {
- volatile gint refs;
-
- char *country_code;
- char *country_name;
- GSList *providers;
-};
-
-static NMACountryInfo *
-country_info_new (const char *country_code,
- const gchar *country_name)
-{
- NMACountryInfo *country_info;
-
- country_info = g_slice_new0 (NMACountryInfo);
- country_info->refs = 1;
- country_info->country_code = g_strdup (country_code);
- country_info->country_name = g_strdup (country_name);
- return country_info;
-}
-
-NMACountryInfo *
-nma_country_info_ref (NMACountryInfo *country_info)
-{
- g_return_val_if_fail (country_info != NULL, NULL);
- g_return_val_if_fail (country_info->refs > 0, NULL);
-
- g_atomic_int_inc (&country_info->refs);
-
- return country_info;
-}
-
-void
-nma_country_info_unref (NMACountryInfo *country_info)
-{
- if (g_atomic_int_dec_and_test (&country_info->refs)) {
- g_free (country_info->country_code);
- g_free (country_info->country_name);
- g_slist_free_full (country_info->providers,
- (GDestroyNotify) nma_mobile_provider_unref);
- g_slice_free (NMACountryInfo, country_info);
- }
-}
-
-/**
- * nma_country_info_get_country_code:
- * @country_info: a #NMACountryInfo
- *
- * Returns: (transfer none): the code of the country or %NULL for "Unknown".
- */
-const gchar *
-nma_country_info_get_country_code (NMACountryInfo *country_info)
-{
- g_return_val_if_fail (country_info != NULL, NULL);
-
- if (country_info->country_code[0] == '\0')
- return NULL;
-
- return country_info->country_code;
-}
-
-/**
- * nma_country_info_get_country_name:
- * @country_info: a #NMACountryInfo
- *
- * Returns: (transfer none): the name of the country.
- */
-const gchar *
-nma_country_info_get_country_name (NMACountryInfo *country_info)
-{
- g_return_val_if_fail (country_info != NULL, NULL);
-
- return country_info->country_name;
-}
-
-/**
- * nma_country_info_get_providers:
- * @country_info: a #NMACountryInfo
- *
- * Returns: (element-type NMAMobileProvider) (transfer none): the
- * list of #NMAMobileProvider this country exposes.
- */
-GSList *
-nma_country_info_get_providers (NMACountryInfo *country_info)
-{
- g_return_val_if_fail (country_info != NULL, NULL);
-
- return country_info->providers;
-}
-
-/******************************************************************************/
-/* XML Parser for iso_3166.xml */
-
-static void
-iso_3166_parser_start_element (GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer data,
- GError **error)
-{
- int i;
- const char *country_code = NULL;
- const char *common_name = NULL;
- const char *name = NULL;
- GHashTable *table = (GHashTable *) data;
-
- if (!strcmp (element_name, "iso_3166_entry")) {
- NMACountryInfo *country_info;
-
- for (i = 0; attribute_names && attribute_names[i]; i++) {
- if (!strcmp (attribute_names[i], "alpha_2_code"))
- country_code = attribute_values[i];
- else if (!strcmp (attribute_names[i], "common_name"))
- common_name = attribute_values[i];
- else if (!strcmp (attribute_names[i], "name"))
- name = attribute_values[i];
- }
- if (!country_code) {
- g_warning ("%s: missing mandatory 'alpha_2_code' atribute in '%s'"
- " element.", __func__, element_name);
- return;
- }
- if (!name) {
- g_warning ("%s: missing mandatory 'name' atribute in '%s'"
- " element.", __func__, element_name);
- return;
- }
-
- country_info = country_info_new (country_code,
- dgettext ("iso_3166", common_name ? common_name : name));
-
- g_hash_table_insert (table, g_strdup (country_code), country_info);
- }
-}
-
-static const GMarkupParser iso_3166_parser = {
- iso_3166_parser_start_element,
- NULL, /* end element */
- NULL, /* text */
- NULL, /* passthrough */
- NULL /* error */
-};
-
-static gboolean
-read_country_codes (GHashTable *table,
- const gchar *country_codes_file,
- GCancellable *cancellable,
- GError **error)
-{
- GMarkupParseContext *ctx;
- char *buf;
- gsize buf_len;
-
- /* Set domain to iso_3166 for country name translation */
- bindtextdomain ("iso_3166", ISO_CODES_PREFIX "/locale");
- bind_textdomain_codeset ("iso_3166", "UTF-8");
-
- if (!g_file_get_contents (country_codes_file, &buf, &buf_len, error)) {
- g_prefix_error (error,
- "Failed to load '%s' from 'iso-codes': ",
- country_codes_file);
- return FALSE;
- }
-
- ctx = g_markup_parse_context_new (&iso_3166_parser, 0, table, NULL);
- if (!g_markup_parse_context_parse (ctx, buf, buf_len, error)) {
- g_prefix_error (error,
- "Failed to parse '%s' from 'iso-codes': ",
- country_codes_file);
- return FALSE;
- }
-
- g_markup_parse_context_free (ctx);
- g_free (buf);
- return TRUE;
-}
-
-/******************************************************************************/
-/* XML Parser for serviceproviders.xml */
-
-typedef enum {
- PARSER_TOPLEVEL = 0,
- PARSER_COUNTRY,
- PARSER_PROVIDER,
- PARSER_METHOD_GSM,
- PARSER_METHOD_GSM_APN,
- PARSER_METHOD_CDMA,
- PARSER_ERROR
-} MobileContextState;
-
-typedef struct {
- GHashTable *table;
-
- NMACountryInfo *current_country;
- char *country_code;
- NMAMobileProvider *current_provider;
- NMAMobileAccessMethod *current_method;
-
- char *text_buffer;
- MobileContextState state;
-} MobileParser;
-
-static NMACountryInfo *
-lookup_country (GHashTable *table, const char *country_code)
-{
- NMACountryInfo *country_info;
-
- country_info = g_hash_table_lookup (table, country_code);
- if (!country_info) {
- g_warning ("%s: adding providers for unknown country '%s'", __func__, country_code);
- country_info = g_hash_table_lookup (table, "");
- }
-
- return country_info;
-}
-
-static void
-parser_toplevel_start (MobileParser *parser,
- const char *name,
- const char **attribute_names,
- const char **attribute_values)
-{
- int i;
-
- if (!strcmp (name, "serviceproviders")) {
- for (i = 0; attribute_names && attribute_names[i]; i++) {
- if (!strcmp (attribute_names[i], "format")) {
- if (strcmp (attribute_values[i], "2.0")) {
- g_warning ("%s: mobile broadband provider database format '%s'"
- " not supported.", __func__, attribute_values[i]);
- parser->state = PARSER_ERROR;
- break;
- }
- }
- }
- } else if (!strcmp (name, "country")) {
- for (i = 0; attribute_names && attribute_names[i]; i++) {
- if (!strcmp (attribute_names[i], "code")) {
- g_free (parser->country_code);
- parser->country_code = g_ascii_strup (attribute_values[i], -1);
- parser->current_country = lookup_country (parser->table, parser->country_code);
- parser->state = PARSER_COUNTRY;
- break;
- }
- }
- }
-}
-
-static void
-parser_country_start (MobileParser *parser,
- const char *name,
- const char **attribute_names,
- const char **attribute_values)
-{
- if (!strcmp (name, "provider")) {
- parser->state = PARSER_PROVIDER;
- parser->current_provider = provider_new ();
- }
-}
-
-static void
-parser_provider_start (MobileParser *parser,
- const char *name,
- const char **attribute_names,
- const char **attribute_values)
-{
- if (!strcmp (name, "gsm"))
- parser->state = PARSER_METHOD_GSM;
- else if (!strcmp (name, "cdma")) {
- parser->state = PARSER_METHOD_CDMA;
- parser->current_method = access_method_new ();
- }
-}
-
-static void
-parser_gsm_start (MobileParser *parser,
- const char *name,
- const char **attribute_names,
- const char **attribute_values)
-{
- if (!strcmp (name, "network-id")) {
- const char *mcc = NULL, *mnc = NULL;
- int i;
-
- for (i = 0; attribute_names && attribute_names[i]; i++) {
- if (!strcmp (attribute_names[i], "mcc"))
- mcc = attribute_values[i];
- else if (!strcmp (attribute_names[i], "mnc"))
- mnc = attribute_values[i];
-
- if (mcc && strlen (mcc) && mnc && strlen (mnc)) {
- gchar *mccmnc;
-
- if (!parser->current_provider->mcc_mnc)
- parser->current_provider->mcc_mnc = g_ptr_array_new_full (2, g_free);
-
- mccmnc = g_strdup_printf ("%s%s", mcc, mnc);
- g_ptr_array_add (parser->current_provider->mcc_mnc, mccmnc);
- break;
- }
- }
- } else if (!strcmp (name, "apn")) {
- int i;
-
- for (i = 0; attribute_names && attribute_names[i]; i++) {
- if (!strcmp (attribute_names[i], "value")) {
-
- parser->state = PARSER_METHOD_GSM_APN;
- parser->current_method = access_method_new ();
- parser->current_method->apn = g_strstrip (g_strdup (attribute_values[i]));
- break;
- }
- }
- }
-}
-
-static void
-parser_cdma_start (MobileParser *parser,
- const char *name,
- const char **attribute_names,
- const char **attribute_values)
-{
- if (!strcmp (name, "sid")) {
- int i;
-
- for (i = 0; attribute_names && attribute_names[i]; i++) {
- if (!strcmp (attribute_names[i], "value")) {
- guint32 tmp;
-
- errno = 0;
- tmp = (guint32) strtoul (attribute_values[i], NULL, 10);
- if (errno == 0 && tmp > 0) {
- if (!parser->current_provider->cdma_sid)
- parser->current_provider->cdma_sid = g_array_sized_new (TRUE, FALSE, sizeof (guint32), 2);
- g_array_append_val (parser->current_provider->cdma_sid, tmp);
- }
- break;
- }
- }
- }
-}
-
-static void
-mobile_parser_start_element (GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer data,
- GError **error)
-{
- MobileParser *parser = (MobileParser *) data;
-
- if (parser->text_buffer) {
- g_free (parser->text_buffer);
- parser->text_buffer = NULL;
- }
-
- switch (parser->state) {
- case PARSER_TOPLEVEL:
- parser_toplevel_start (parser, element_name, attribute_names, attribute_values);
- break;
- case PARSER_COUNTRY:
- parser_country_start (parser, element_name, attribute_names, attribute_values);
- break;
- case PARSER_PROVIDER:
- parser_provider_start (parser, element_name, attribute_names, attribute_values);
- break;
- case PARSER_METHOD_GSM:
- parser_gsm_start (parser, element_name, attribute_names, attribute_values);
- break;
- case PARSER_METHOD_CDMA:
- parser_cdma_start (parser, element_name, attribute_names, attribute_values);
- break;
- default:
- break;
- }
-}
-
-static void
-parser_country_end (MobileParser *parser,
- const char *name)
-{
- if (!strcmp (name, "country")) {
- parser->current_country = NULL;
- g_free (parser->country_code);
- parser->country_code = NULL;
- g_free (parser->text_buffer);
- parser->text_buffer = NULL;
- parser->state = PARSER_TOPLEVEL;
- }
-}
-
-static void
-parser_provider_end (MobileParser *parser,
- const char *name)
-{
- if (!strcmp (name, "name")) {
- if (!parser->current_provider->name) {
- /* Use the first one. */
- if (nma_country_info_get_country_code (parser->current_country)) {
- parser->current_provider->name = parser->text_buffer;
- } else {
- parser->current_provider->name = g_strdup_printf ("%s (%s)",
- parser->text_buffer,
- parser->country_code);
- g_free (parser->text_buffer);
- }
- parser->text_buffer = NULL;
- }
- } else if (!strcmp (name, "provider")) {
- if (parser->current_provider->mcc_mnc)
- g_ptr_array_add (parser->current_provider->mcc_mnc, NULL);
-
- parser->current_provider->methods = g_slist_reverse (parser->current_provider->methods);
-
- parser->current_country->providers = g_slist_prepend (parser->current_country->providers,
- parser->current_provider);
- parser->current_provider = NULL;
- g_free (parser->text_buffer);
- parser->text_buffer = NULL;
- parser->state = PARSER_COUNTRY;
- }
-}
-
-static void
-parser_gsm_end (MobileParser *parser,
- const char *name)
-{
- if (!strcmp (name, "gsm")) {
- g_free (parser->text_buffer);
- parser->text_buffer = NULL;
- parser->state = PARSER_PROVIDER;
- }
-}
-
-static void
-parser_gsm_apn_end (MobileParser *parser,
- const char *name)
-{
- if (!strcmp (name, "name")) {
- if (!parser->current_method->name) {
- /* Use the first one. */
- parser->current_method->name = parser->text_buffer;
- parser->text_buffer = NULL;
- }
- } else if (!strcmp (name, "username")) {
- parser->current_method->username = parser->text_buffer;
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "password")) {
- parser->current_method->password = parser->text_buffer;
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "dns")) {
- if (!parser->current_method->dns)
- parser->current_method->dns = g_ptr_array_new_full (2, g_free);
- g_ptr_array_add (parser->current_method->dns, parser->text_buffer);
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "gateway")) {
- parser->current_method->gateway = parser->text_buffer;
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "apn")) {
- parser->current_method->family = NMA_MOBILE_FAMILY_3GPP;
-
- if (!parser->current_method->name)
- parser->current_method->name = g_strdup (_("Default"));
-
- if (parser->current_method->dns)
- g_ptr_array_add (parser->current_method->dns, NULL);
-
- parser->current_provider->methods = g_slist_prepend (parser->current_provider->methods,
- parser->current_method);
- parser->current_method = NULL;
- g_free (parser->text_buffer);
- parser->text_buffer = NULL;
- parser->state = PARSER_METHOD_GSM;
- }
-}
-
-static void
-parser_cdma_end (MobileParser *parser,
- const char *name)
-{
- if (!strcmp (name, "username")) {
- parser->current_method->username = parser->text_buffer;
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "password")) {
- parser->current_method->password = parser->text_buffer;
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "dns")) {
- if (!parser->current_method->dns)
- parser->current_method->dns = g_ptr_array_new_full (2, g_free);
- g_ptr_array_add (parser->current_method->dns, parser->text_buffer);
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "gateway")) {
- parser->current_method->gateway = parser->text_buffer;
- parser->text_buffer = NULL;
- } else if (!strcmp (name, "cdma")) {
- parser->current_method->family = NMA_MOBILE_FAMILY_CDMA;
-
- if (!parser->current_method->name)
- parser->current_method->name = g_strdup (parser->current_provider->name);
-
- if (parser->current_method->dns)
- g_ptr_array_add (parser->current_method->dns, NULL);
-
- parser->current_provider->methods = g_slist_prepend (parser->current_provider->methods,
- parser->current_method);
- parser->current_method = NULL;
- g_free (parser->text_buffer);
- parser->text_buffer = NULL;
- parser->state = PARSER_PROVIDER;
- }
-}
-
-static void
-mobile_parser_end_element (GMarkupParseContext *context,
- const gchar *element_name,
- gpointer data,
- GError **error)
-{
- MobileParser *parser = (MobileParser *) data;
-
- switch (parser->state) {
- case PARSER_COUNTRY:
- parser_country_end (parser, element_name);
- break;
- case PARSER_PROVIDER:
- parser_provider_end (parser, element_name);
- break;
- case PARSER_METHOD_GSM:
- parser_gsm_end (parser, element_name);
- break;
- case PARSER_METHOD_GSM_APN:
- parser_gsm_apn_end (parser, element_name);
- break;
- case PARSER_METHOD_CDMA:
- parser_cdma_end (parser, element_name);
- break;
- default:
- break;
- }
-}
-
-static void
-mobile_parser_characters (GMarkupParseContext *context,
- const gchar *text,
- gsize text_len,
- gpointer data,
- GError **error)
-{
- MobileParser *parser = (MobileParser *) data;
-
- g_free (parser->text_buffer);
- parser->text_buffer = g_strdup (text);
-}
-
-static const GMarkupParser mobile_parser = {
- mobile_parser_start_element,
- mobile_parser_end_element,
- mobile_parser_characters,
- NULL, /* passthrough */
- NULL /* error */
-};
-
-static gboolean
-read_service_providers (GHashTable *countries,
- const gchar *service_providers,
- GCancellable *cancellable,
- GError **error)
-{
- GMarkupParseContext *ctx;
- GIOChannel *channel;
- MobileParser parser;
- char buffer[4096];
- GIOStatus status;
- gsize len = 0;
-
- memset (&parser, 0, sizeof (MobileParser));
- parser.table = countries;
-
- channel = g_io_channel_new_file (service_providers, "r", error);
- if (!channel) {
- g_prefix_error (error,
- "Could not read '%s': ",
- service_providers);
- return FALSE;
- }
-
- parser.state = PARSER_TOPLEVEL;
-
- ctx = g_markup_parse_context_new (&mobile_parser, 0, &parser, NULL);
-
- status = G_IO_STATUS_NORMAL;
- while (status == G_IO_STATUS_NORMAL) {
- status = g_io_channel_read_chars (channel, buffer, sizeof (buffer), &len, error);
-
- switch (status) {
- case G_IO_STATUS_NORMAL:
- if (!g_markup_parse_context_parse (ctx, buffer, len, error)) {
- status = G_IO_STATUS_ERROR;
- g_prefix_error (error,
- "Error while parsing XML at '%s': ",
- service_providers);
- }
- break;
- case G_IO_STATUS_EOF:
- break;
- case G_IO_STATUS_ERROR:
- g_prefix_error (error,
- "Error while reading '%s': ",
- service_providers);
- break;
- case G_IO_STATUS_AGAIN:
- /* FIXME: Try again a few times, but really, it never happens, right? */
- break;
- }
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- status = G_IO_STATUS_ERROR;
- }
-
- g_io_channel_unref (channel);
- g_markup_parse_context_free (ctx);
-
- if (parser.current_provider) {
- g_warning ("pending current provider");
- nma_mobile_provider_unref (parser.current_provider);
- }
-
- g_free (parser.text_buffer);
-
- return (status == G_IO_STATUS_EOF);
-}
-
-static GHashTable *
-mobile_providers_parse_sync (const gchar *country_codes,
- const gchar *service_providers,
- GCancellable *cancellable,
- GError **error)
-{
- GHashTable *countries;
- char *path;
- const gchar * const *dirs;
- int i;
- gboolean success;
-
- dirs = g_get_system_data_dirs ();
- countries = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- (GDestroyNotify)nma_country_info_unref);
-
- g_hash_table_insert (countries, g_strdup (""),
- country_info_new ("", _("My country is not listed")));
-
- /* Use default paths if none given */
- if (country_codes) {
- if (!read_country_codes (countries, country_codes, cancellable, error)) {
- g_hash_table_unref (countries);
- return FALSE;
- }
- } else {
- /* First try the user override file. */
- path = g_build_filename (g_get_user_data_dir (), ISO_3166_COUNTRY_CODES, NULL);
- success = read_country_codes (countries, path, cancellable, NULL);
- g_free (path);
-
- /* Look in system locations. */
- for (i = 0; dirs[i] && !success; i++) {
- path = g_build_filename (dirs[i], ISO_3166_COUNTRY_CODES, NULL);
- success = read_country_codes (countries, path, cancellable, NULL);
- g_free (path);
- }
-
- if (!success) {
- path = g_build_filename (ISO_CODES_PREFIX, "share", ISO_3166_COUNTRY_CODES, NULL);
- success = read_country_codes (countries, path, cancellable, NULL);
- g_free (path);
- }
-
- if (!success) {
- g_warning ("Could not find the country codes file (%s): check your installation\n",
- ISO_3166_COUNTRY_CODES);
- }
- }
-
- if (service_providers) {
- if (!read_service_providers (countries, service_providers, cancellable, error)) {
- g_hash_table_unref (countries);
- return FALSE;
- }
- } else {
- /* First try the user override file. */
- path = g_build_filename (g_get_user_data_dir (), MOBILE_BROADBAND_PROVIDER_INFO, NULL);
- success = read_service_providers (countries, path, cancellable, NULL);
- g_free (path);
-
- /* Look in system locations. */
- for (i = 0; dirs[i] && !success; i++) {
- path = g_build_filename (dirs[i], MOBILE_BROADBAND_PROVIDER_INFO, NULL);
- success = read_service_providers (countries, path, cancellable, NULL);
- g_free (path);
- }
-
- if (!success) {
- success = read_service_providers (countries, MOBILE_BROADBAND_PROVIDER_INFO_DATABASE, cancellable, NULL);
- }
-
- if (!success) {
- g_warning ("Could not find the provider data (%s): check your installation\n",
- MOBILE_BROADBAND_PROVIDER_INFO);
- }
- }
-
- return countries;
-}
-
-/******************************************************************************/
-/* Dump to stdout contents */
-
-static void
-dump_generic (NMAMobileAccessMethod *method)
-{
- g_print (" username: %s\n", method->username ? method->username : "");
- g_print (" password: %s\n", method->password ? method->password : "");
-
- if (method->dns) {
- guint i;
- const gchar **dns;
- GString *dns_str;
-
- dns = nma_mobile_access_method_get_dns (method);
- dns_str = g_string_new (NULL);
- for (i = 0; dns[i]; i++)
- g_string_append_printf (dns_str, "%s%s", i == 0 ? "" : ", ", dns[i]);
- g_print (" dns : %s\n", dns_str->str);
- g_string_free (dns_str, TRUE);
- }
-
- g_print (" gateway : %s\n", method->gateway ? method->gateway : "");
-}
-
-static void
-dump_cdma (NMAMobileAccessMethod *method)
-{
- g_print (" CDMA: %s\n", method->name);
-
- dump_generic (method);
-}
-
-static void
-dump_3gpp (NMAMobileAccessMethod *method)
-{
- g_print (" APN: %s (%s)\n", method->name, method->apn);
-
- dump_generic (method);
-}
-
-static void
-dump_country (gpointer key, gpointer value, gpointer user_data)
-{
- GSList *miter, *citer;
- NMACountryInfo *country_info = value;
-
- g_print ("Country: %s (%s)\n",
- country_info->country_code,
- country_info->country_name);
-
- for (citer = country_info->providers; citer; citer = g_slist_next (citer)) {
- NMAMobileProvider *provider = citer->data;
- const gchar **mcc_mnc;
- const guint *sid;
- guint n;
-
- g_print (" Provider: %s (%s)\n", provider->name, (const char *) key);
-
- mcc_mnc = nma_mobile_provider_get_3gpp_mcc_mnc (provider);
- if (mcc_mnc) {
- for (n = 0; mcc_mnc[n]; n++)
- g_print (" MCC/MNC: %s\n", mcc_mnc[n]);
- }
-
- sid = nma_mobile_provider_get_cdma_sid (provider);
- if (sid) {
- for (n = 0; sid[n]; n++)
- g_print (" SID: %u\n", sid[n]);
- }
-
- for (miter = provider->methods; miter; miter = g_slist_next (miter)) {
- NMAMobileAccessMethod *method = miter->data;
-
- switch (method->family) {
- case NMA_MOBILE_FAMILY_CDMA:
- dump_cdma (method);
- break;
- case NMA_MOBILE_FAMILY_3GPP:
- dump_3gpp (method);
- break;
- default:
- break;
- }
- g_print ("\n");
- }
- }
-}
-
-/******************************************************************************/
-/* Mobile providers database type */
-
-static void initable_iface_init (GInitableIface *iface);
-static void async_initable_iface_init (GAsyncInitableIface *iface);
-
-G_DEFINE_TYPE_EXTENDED (NMAMobileProvidersDatabase, nma_mobile_providers_database, G_TYPE_OBJECT, 0,
- G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init)
- G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, async_initable_iface_init))
-
-enum {
- PROP_0,
- PROP_COUNTRY_CODES_PATH,
- PROP_SERVICE_PROVIDERS_PATH,
- PROP_LAST
-};
-
-static GParamSpec *properties[PROP_LAST];
-
-struct _NMAMobileProvidersDatabasePrivate {
- /* Paths to input files */
- gchar *country_codes_path;
- gchar *service_providers_path;
-
- /* The HT with country code as key and NMACountryInfo as value. */
- GHashTable *countries;
-};
-
-/**********************************/
-
-/**
- * nma_mobile_providers_database_get_countries:
- * @self: a #NMAMobileProvidersDatabase.
- *
- * Returns: (element-type utf8 NMACountryInfo) (transfer none): a
- * hash table where keys are country names #gchar and values are #NMACountryInfo.
- */
-GHashTable *
-nma_mobile_providers_database_get_countries (NMAMobileProvidersDatabase *self)
-{
- g_return_val_if_fail (NMA_IS_MOBILE_PROVIDERS_DATABASE (self), NULL);
-
- /* Warn if the object hasn't been initialized */
- g_return_val_if_fail (self->priv->countries != NULL, NULL);
-
- return self->priv->countries;
-}
-
-/**
- * nma_mobile_providers_database_dump:
- * @self: a #NMAMobileProvidersDatabase.
- *
- */
-void
-nma_mobile_providers_database_dump (NMAMobileProvidersDatabase *self)
-{
- g_return_if_fail (NMA_IS_MOBILE_PROVIDERS_DATABASE (self));
-
- /* Warn if the object hasn't been initialized */
- g_return_if_fail (self->priv->countries != NULL);
-
- g_hash_table_foreach (self->priv->countries, dump_country, NULL);
-}
-
-/**
- * nma_mobile_providers_database_lookup_country:
- * @self: a #NMAMobileProvidersDatabase.
- * @country_code: the country code string to look for.
- *
- * Returns: (transfer none): a #NMACountryInfo or %NULL if not found.
- */
-NMACountryInfo *
-nma_mobile_providers_database_lookup_country (NMAMobileProvidersDatabase *self,
- const gchar *country_code)
-{
- g_return_val_if_fail (NMA_IS_MOBILE_PROVIDERS_DATABASE (self), NULL);
-
- /* Warn if the object hasn't been initialized */
- g_return_val_if_fail (self->priv->countries != NULL, NULL);
-
- return (NMACountryInfo *) g_hash_table_lookup (self->priv->countries, country_code);
-}
-
-/**
- * nma_mobile_providers_database_lookup_3gpp_mcc_mnc:
- * @self: a #NMAMobileProvidersDatabase.
- * @mccmnc: the MCC/MNC string to look for.
- *
- * Returns: (transfer none): a #NMAMobileProvider or %NULL if not found.
- */
-NMAMobileProvider *
-nma_mobile_providers_database_lookup_3gpp_mcc_mnc (NMAMobileProvidersDatabase *self,
- const gchar *mccmnc)
-{
- GHashTableIter iter;
- gpointer value;
- GSList *piter;
- NMAMobileProvider *provider_match_2mnc = NULL;
- guint mccmnc_len;
-
- g_return_val_if_fail (NMA_IS_MOBILE_PROVIDERS_DATABASE (self), NULL);
- g_return_val_if_fail (mccmnc != NULL, NULL);
- /* Warn if the object hasn't been initialized */
- g_return_val_if_fail (self->priv->countries != NULL, NULL);
-
- /* Expect only 5 or 6 digit MCCMNC strings */
- mccmnc_len = strlen (mccmnc);
- if (mccmnc_len != 5 && mccmnc_len != 6)
- return NULL;
-
- g_hash_table_iter_init (&iter, self->priv->countries);
- /* Search through each country */
- while (g_hash_table_iter_next (&iter, NULL, &value)) {
- NMACountryInfo *country_info = value;
-
- /* Search through each country's providers */
- for (piter = nma_country_info_get_providers (country_info);
- piter;
- piter = g_slist_next (piter)) {
- NMAMobileProvider *provider = piter->data;
- const gchar **mccmnc_list;
- guint i;
-
- /* Search through MCC/MNC list */
- mccmnc_list = nma_mobile_provider_get_3gpp_mcc_mnc (provider);
- if (!mccmnc_list)
- continue;
-
- for (i = 0; mccmnc_list[i]; i++) {
- const gchar *mccmnc_iter;
- guint mccmnc_iter_len;
-
- mccmnc_iter = mccmnc_list[i];
- mccmnc_iter_len = strlen (mccmnc_iter);
-
- /* Match both 2-digit and 3-digit MNC; prefer a
- * 3-digit match if found, otherwise a 2-digit one.
- */
-
- if (strncmp (mccmnc_iter, mccmnc, 3))
- /* MCC was wrong */
- continue;
-
- /* Now we have the following match cases, examples given:
- * a) input: 123/456 --> iter: 123/456 (3-digit match)
- * b) input: 123/45 --> iter: 123/045 (3-digit match)
- * c) input: 123/045 --> iter: 123/45 (2-digit match)
- * d) input: 123/45 --> iter: 123/45 (2-digit match)
- */
-
- if (mccmnc_iter_len == 6) {
- /* Covers cases a) and b) */
- if ( (mccmnc_len == 6 && !strncmp (mccmnc + 3, mccmnc_iter + 3, 3))
- || (mccmnc_len == 5 && mccmnc_iter[3] == '0' && !strncmp (mccmnc + 3, mccmnc_iter + 4, 2)))
- /* 3-digit MNC match! */
- return provider;
-
- /* MNC was wrong */
- continue;
- }
-
- if ( !provider_match_2mnc
- && mccmnc_iter_len == 5) {
- if ( (mccmnc_len == 5 && !strncmp (mccmnc + 3, mccmnc_iter + 3, 2))
- || (mccmnc_len == 6 && mccmnc[3] == '0' && !strncmp (mccmnc + 4, mccmnc_iter + 3, 2))) {
- /* Store the 2-digit MNC match, but keep looking,
- * we may have a 3-digit MNC match */
- provider_match_2mnc = provider;
- continue;
- }
-
- /* MNC was wrong */
- continue;
- }
- }
- }
- }
-
- return provider_match_2mnc;
-}
-
-/**
- * nma_mobile_providers_database_lookup_cdma_sid:
- * @self: a #NMAMobileProvidersDatabase.
- * @sid: the SID to look for.
- *
- * Returns: (transfer none): a #NMAMobileProvider, or %NULL if not found.
- */
-NMAMobileProvider *
-nma_mobile_providers_database_lookup_cdma_sid (NMAMobileProvidersDatabase *self,
- guint32 sid)
-{
- GHashTableIter iter;
- gpointer value;
- GSList *piter;
-
- g_return_val_if_fail (NMA_IS_MOBILE_PROVIDERS_DATABASE (self), NULL);
- g_return_val_if_fail (sid > 0, NULL);
- /* Warn if the object hasn't been initialized */
- g_return_val_if_fail (self->priv->countries != NULL, NULL);
-
- g_hash_table_iter_init (&iter, self->priv->countries);
- /* Search through each country */
- while (g_hash_table_iter_next (&iter, NULL, &value)) {
- NMACountryInfo *country_info = value;
-
- /* Search through each country's providers */
- for (piter = nma_country_info_get_providers (country_info);
- piter;
- piter = g_slist_next (piter)) {
- NMAMobileProvider *provider = piter->data;
- const guint32 *sid_list;
- guint i;
-
- /* Search through CDMA SID list */
- sid_list = nma_mobile_provider_get_cdma_sid (provider);
- if (!sid_list)
- continue;
-
- for (i = 0; sid_list[i]; i++) {
- if (sid == sid_list[i])
- return provider;
- }
- }
- }
-
- return NULL;
-}
-
-/**********************************/
-
-static gboolean
-initable_init_sync (GInitable *initable,
- GCancellable *cancellable,
- GError **error)
-{
- NMAMobileProvidersDatabase *self = NMA_MOBILE_PROVIDERS_DATABASE (initable);
-
- /* Parse the files */
- self->priv->countries = mobile_providers_parse_sync (self->priv->country_codes_path,
- self->priv->service_providers_path,
- cancellable,
- error);
- if (!self->priv->countries)
- return FALSE;
-
- /* All good */
- return TRUE;
-}
-
-/**********************************/
-
-/**
- * nma_mobile_providers_database_new:
- * @country_codes: (allow-none): Path to the country codes file.
- * @service_providers: (allow-none): Path to the service providers file.
- * @cancellable: (allow-none): A #GCancellable or %NULL.
- * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
- * @user_data: User data to pass to @callback.
- *
- */
-void
-nma_mobile_providers_database_new (const gchar *country_codes,
- const gchar *service_providers,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- g_async_initable_new_async (NMA_TYPE_MOBILE_PROVIDERS_DATABASE,
- G_PRIORITY_DEFAULT,
- cancellable,
- callback,
- user_data,
- "country-codes", country_codes,
- "service-providers", service_providers,
- NULL);
-}
-
-/**
- * nma_mobile_providers_database_new_finish:
- * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to nma_mobile_providers_database_new().
- * @error: Return location for error or %NULL.
- *
- * Returns: (transfer full) (type NMAMobileProvidersDatabase): The constructed object or %NULL if @error is set.
- */
-NMAMobileProvidersDatabase *
-nma_mobile_providers_database_new_finish (GAsyncResult *res,
- GError **error)
-{
- GObject *initable;
- GObject *out;
-
- initable = g_async_result_get_source_object (res);
- out = g_async_initable_new_finish (G_ASYNC_INITABLE (initable), res, error);
- g_object_unref (initable);
-
- return out ? NMA_MOBILE_PROVIDERS_DATABASE (out) : NULL;
-}
-
-/**
- * nma_mobile_providers_database_new_sync:
- * @country_codes: (allow-none): Path to the country codes file.
- * @service_providers: (allow-none): Path to the service providers file.
- * @cancellable: (allow-none): A #GCancellable or %NULL.
- * @error: Return location for error or %NULL.
- *
- * Returns: (transfer full) (type NMAMobileProvidersDatabase): The constructed object or %NULL if @error is set.
- */
-NMAMobileProvidersDatabase *
-nma_mobile_providers_database_new_sync (const gchar *country_codes,
- const gchar *service_providers,
- GCancellable *cancellable,
- GError **error)
-{
- GObject *out;
-
- out = g_initable_new (NMA_TYPE_MOBILE_PROVIDERS_DATABASE,
- cancellable,
- error,
- "country-codes", country_codes,
- "service-providers", service_providers,
- NULL);
-
- return out ? NMA_MOBILE_PROVIDERS_DATABASE (out) : NULL;
-}
-
-/**********************************/
-
-static void
-set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- NMAMobileProvidersDatabase *self = NMA_MOBILE_PROVIDERS_DATABASE (object);
-
- switch (prop_id) {
- case PROP_COUNTRY_CODES_PATH:
- self->priv->country_codes_path = g_value_dup_string (value);
- break;
- case PROP_SERVICE_PROVIDERS_PATH:
- self->priv->service_providers_path = g_value_dup_string (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- NMAMobileProvidersDatabase *self = NMA_MOBILE_PROVIDERS_DATABASE (object);
-
- switch (prop_id) {
- case PROP_COUNTRY_CODES_PATH:
- g_value_set_string (value, self->priv->country_codes_path);
- break;
- case PROP_SERVICE_PROVIDERS_PATH:
- g_value_set_string (value, self->priv->service_providers_path);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-nma_mobile_providers_database_init (NMAMobileProvidersDatabase *self)
-{
- /* Setup private data */
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- NMA_TYPE_MOBILE_PROVIDERS_DATABASE,
- NMAMobileProvidersDatabasePrivate);
-}
-
-static void
-finalize (GObject *object)
-{
- NMAMobileProvidersDatabase *self = NMA_MOBILE_PROVIDERS_DATABASE (object);
-
- g_free (self->priv->country_codes_path);
- g_free (self->priv->service_providers_path);
-
- if (self->priv->countries)
- g_hash_table_unref (self->priv->countries);
-
- G_OBJECT_CLASS (nma_mobile_providers_database_parent_class)->finalize (object);
-}
-
-static void
-initable_iface_init (GInitableIface *iface)
-{
- iface->init = initable_init_sync;
-}
-
-static void
-async_initable_iface_init (GAsyncInitableIface *iface)
-{
- /* Just use defaults (run sync init() in a thread) */
-}
-
-static void
-nma_mobile_providers_database_class_init (NMAMobileProvidersDatabaseClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMAMobileProvidersDatabasePrivate));
-
- /* Virtual methods */
- object_class->get_property = get_property;
- object_class->set_property = set_property;
- object_class->finalize = finalize;
-
- properties[PROP_COUNTRY_CODES_PATH] =
- g_param_spec_string ("country-codes",
- "Country Codes",
- "Path to the country codes file",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_COUNTRY_CODES_PATH, properties[PROP_COUNTRY_CODES_PATH]);
-
- properties[PROP_SERVICE_PROVIDERS_PATH] =
- g_param_spec_string ("service-providers",
- "Service Providers",
- "Path to the service providers file",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_SERVICE_PROVIDERS_PATH, properties[PROP_SERVICE_PROVIDERS_PATH]);
-}
-
-/******************************************************************************/
-/* Utils */
-
-/**
- * nma_mobile_providers_split_3gpp_mcc_mnc:
- * @mccmnc: input MCCMNC string.
- * @mcc: (out) (transfer full): the MCC.
- * @mnc: (out) (transfer full): the MNC.
- *
- * Splits the input MCCMNC string into separate MCC and MNC strings.
- *
- * Returns: %TRUE if correctly split and @mcc and @mnc are set; %FALSE otherwise.
- */
-gboolean
-nma_mobile_providers_split_3gpp_mcc_mnc (const gchar *mccmnc,
- gchar **mcc,
- gchar **mnc)
-{
- gint len;
-
- g_return_val_if_fail (mccmnc != NULL, FALSE);
- g_return_val_if_fail (mcc != NULL, FALSE);
- g_return_val_if_fail (mnc != NULL, FALSE);
-
- len = strlen (mccmnc);
- if (len != 5 && len != 6)
- return FALSE;
-
- /* MCCMNC is all digits */
- while (len > 0) {
- if (!g_ascii_isdigit (mccmnc[--len]))
- return FALSE;
- }
-
- *mcc = g_strndup (mccmnc, 3);
- *mnc = g_strdup (mccmnc + 3);
- return TRUE;
-}
diff --git a/src/libnma/nma-mobile-providers.h b/src/libnma/nma-mobile-providers.h
deleted file mode 100644
index 913aada8..00000000
--- a/src/libnma/nma-mobile-providers.h
+++ /dev/null
@@ -1,131 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/*
- * Copyright (C) 2009 Novell, Inc.
- * Author: Tambet Ingo (tambet@gmail.com).
- *
- * Copyright (C) 2009 - 2012 Red Hat, Inc.
- * Copyright (C) 2012 Lanedo GmbH.
- */
-
-#ifndef NM_MOBILE_PROVIDERS_H
-#define NM_MOBILE_PROVIDERS_H
-
-#include <glib.h>
-#include <glib-object.h>
-#include <gio/gio.h>
-
-/******************************************************************************/
-/* Access method type */
-
-/**
- * NMAMobileFamily:
- * @NMA_MOBILE_FAMILY_UNKNOWN: Unknown or invalid network access method
- * @NMA_MOBILE_FAMILY_3GPP: 3rd Generation Partnership Project (3GPP) network
- * @NMA_MOBILE_FAMILY_CDMA: A CDMA network
- */
-typedef enum {
- NMA_MOBILE_FAMILY_UNKNOWN = 0,
- NMA_MOBILE_FAMILY_3GPP,
- NMA_MOBILE_FAMILY_CDMA
-} NMAMobileFamily;
-
-#define NMA_TYPE_MOBILE_ACCESS_METHOD (nma_mobile_access_method_get_type ())
-
-typedef struct _NMAMobileAccessMethod NMAMobileAccessMethod;
-
-GType nma_mobile_access_method_get_type (void);
-NMAMobileAccessMethod *nma_mobile_access_method_ref (NMAMobileAccessMethod *method);
-void nma_mobile_access_method_unref (NMAMobileAccessMethod *method);
-const gchar *nma_mobile_access_method_get_name (NMAMobileAccessMethod *method);
-const gchar *nma_mobile_access_method_get_username (NMAMobileAccessMethod *method);
-const gchar *nma_mobile_access_method_get_password (NMAMobileAccessMethod *method);
-const gchar *nma_mobile_access_method_get_gateway (NMAMobileAccessMethod *method);
-const gchar **nma_mobile_access_method_get_dns (NMAMobileAccessMethod *method);
-const gchar *nma_mobile_access_method_get_3gpp_apn (NMAMobileAccessMethod *method);
-NMAMobileFamily nma_mobile_access_method_get_family (NMAMobileAccessMethod *method);
-
-/******************************************************************************/
-/* Mobile provider type */
-
-#define NMA_TYPE_MOBILE_PROVIDER (nma_mobile_provider_get_type ())
-
-typedef struct _NMAMobileProvider NMAMobileProvider;
-
-GType nma_mobile_provider_get_type (void);
-NMAMobileProvider *nma_mobile_provider_ref (NMAMobileProvider *provider);
-void nma_mobile_provider_unref (NMAMobileProvider *provider);
-const gchar *nma_mobile_provider_get_name (NMAMobileProvider *provider);
-GSList *nma_mobile_provider_get_methods (NMAMobileProvider *provider);
-const gchar **nma_mobile_provider_get_3gpp_mcc_mnc (NMAMobileProvider *provider);
-const guint32 *nma_mobile_provider_get_cdma_sid (NMAMobileProvider *provider);
-
-/******************************************************************************/
-/* Country Info type */
-
-#define NMA_TYPE_COUNTRY_INFO (nma_country_info_get_type ())
-
-typedef struct _NMACountryInfo NMACountryInfo;
-
-GType nma_country_info_get_type (void);
-NMACountryInfo *nma_country_info_ref (NMACountryInfo *country_info);
-void nma_country_info_unref (NMACountryInfo *country_info);
-const gchar *nma_country_info_get_country_code (NMACountryInfo *country_info);
-const gchar *nma_country_info_get_country_name (NMACountryInfo *country_info);
-GSList *nma_country_info_get_providers (NMACountryInfo *country_info);
-
-/******************************************************************************/
-/* Mobile providers database type */
-
-#define NMA_TYPE_MOBILE_PROVIDERS_DATABASE (nma_mobile_providers_database_get_type ())
-#define NMA_MOBILE_PROVIDERS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_MOBILE_PROVIDERS_DATABASE, NMAMobileProvidersDatabase))
-#define NMA_MOBILE_PROVIDERS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_MOBILE_PROVIDERS_DATABASE, NMAMobileProvidersDatabaseClass))
-#define NMA_IS_MOBILE_PROVIDERS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_MOBILE_PROVIDERS_DATABASE))
-#define NMA_IS_MOBILE_PROVIDERS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_MOBILE_PROVIDERS_DATABASE))
-#define NMA_MOBILE_PROVIDERS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_MOBILE_PROVIDERS_DATABASE, NMAMobileProvidersDatabaseClass))
-
-typedef struct _NMAMobileProvidersDatabase NMAMobileProvidersDatabase;
-typedef struct _NMAMobileProvidersDatabaseClass NMAMobileProvidersDatabaseClass;
-typedef struct _NMAMobileProvidersDatabasePrivate NMAMobileProvidersDatabasePrivate;
-
-struct _NMAMobileProvidersDatabase {
- GObject parent;
- NMAMobileProvidersDatabasePrivate *priv;
-};
-
-struct _NMAMobileProvidersDatabaseClass {
- GObjectClass parent;
-};
-
-GType nma_mobile_providers_database_get_type (void);
-
-void nma_mobile_providers_database_new (const gchar *country_codes,
- const gchar *service_providers,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-NMAMobileProvidersDatabase *nma_mobile_providers_database_new_finish (GAsyncResult *res,
- GError **error);
-NMAMobileProvidersDatabase *nma_mobile_providers_database_new_sync (const gchar *country_codes,
- const gchar *service_providers,
- GCancellable *cancellable,
- GError **error);
-
-GHashTable *nma_mobile_providers_database_get_countries (NMAMobileProvidersDatabase *self);
-
-void nma_mobile_providers_database_dump (NMAMobileProvidersDatabase *self);
-
-NMACountryInfo *nma_mobile_providers_database_lookup_country (NMAMobileProvidersDatabase *self,
- const gchar *country_code);
-NMAMobileProvider *nma_mobile_providers_database_lookup_3gpp_mcc_mnc (NMAMobileProvidersDatabase *self,
- const gchar *mccmnc);
-NMAMobileProvider *nma_mobile_providers_database_lookup_cdma_sid (NMAMobileProvidersDatabase *self,
- guint32 sid);
-
-/******************************************************************************/
-/* Utils */
-
-gboolean nma_mobile_providers_split_3gpp_mcc_mnc (const gchar *mccmnc,
- gchar **mcc,
- gchar **mnc);
-
-#endif /* NM_MOBILE_PROVIDERS_H */
diff --git a/src/libnma/nma-mobile-wizard.c b/src/libnma/nma-mobile-wizard.c
deleted file mode 100644
index 9a4e753b..00000000
--- a/src/libnma/nma-mobile-wizard.c
+++ /dev/null
@@ -1,1560 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Connection editor -- Connection editor for NetworkManager
- *
- * Dan Williams <dcbw@redhat.com>
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * (C) Copyright 2008 - 2018 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-#include "nma-private.h"
-
-#include <stdlib.h>
-
-#if GTK_CHECK_VERSION(3,90,0)
-#include <gdk/x11/gdkx.h>
-#else
-#include <gdk/gdkx.h>
-#endif
-
-#include <NetworkManager.h>
-#include <nm-setting-gsm.h>
-#include <nm-setting-cdma.h>
-#include <nm-client.h>
-#include <nm-device-modem.h>
-
-#include "nma-mobile-wizard.h"
-#include "nma-mobile-providers.h"
-#include "utils.h"
-
-#define DEVICE_TAG "device"
-#define TYPE_TAG "setting-type"
-
-#define INTRO_PAGE_IDX 0
-#define COUNTRY_PAGE_IDX 1
-#define PROVIDERS_PAGE_IDX 2
-#define PLAN_PAGE_IDX 3
-#define CONFIRM_PAGE_IDX 4
-
-static NMACountryInfo *get_selected_country (NMAMobileWizard *self);
-static NMAMobileProvider *get_selected_provider (NMAMobileWizard *self);
-static NMAMobileFamily get_provider_unlisted_type (NMAMobileWizard *self);
-static NMAMobileAccessMethod *get_selected_method (NMAMobileWizard *self, gboolean *manual);
-
-#include "nm-default.h"
-
-struct _NMAMobileWizard {
- GtkAssistant parent;
-};
-
-struct _NMAMobileWizardClass {
- GtkAssistantClass parent;
-};
-
-typedef struct {
- NMAMobileWizardCallback callback;
- gpointer user_data;
- NMAMobileProvidersDatabase *mobile_providers_database;
- NMAMobileFamily family;
- gboolean initial_family;
- gboolean will_connect_after;
-
- /* Intro page */
- GtkLabel *dev_combo_label;
- GtkComboBox *dev_combo;
- GtkLabel *provider_name_label;
- GtkLabel *plan_name_label;
- GtkLabel *apn_label;
- GtkTreeStore *dev_store;
- char *dev_desc;
- NMClient *client;
-
- /* Country page */
- NMACountryInfo *country;
- GtkWidget *country_page;
- GtkTreeView *country_view;
- GtkTreeStore *country_store;
- GtkTreeModelSort *country_sort;
- guint32 country_focus_id;
-
- /* Providers page */
- GtkWidget *providers_page;
- GtkTreeView *providers_view;
- GtkTreeStore *providers_store;
- GtkTreeModel *providers_sort;
- guint32 providers_focus_id;
- GtkToggleButton *providers_view_radio;
-
- GtkToggleButton *provider_unlisted_radio;
- GtkComboBox *provider_unlisted_type_combo;
-
- gboolean provider_only_cdma;
-
- /* Plan page */
- GtkWidget *plan_page;
- GtkComboBox *plan_combo;
- GtkTreeStore *plan_store;
- guint32 plan_focus_id;
-
- GtkEditable *plan_apn_entry;
-
- /* Confirm page */
- GtkWidget *confirm_page;
- GtkLabel *confirm_provider;
- GtkLabel *confirm_plan;
- GtkLabel *confirm_apn;
- GtkLabel *confirm_plan_label;
- GtkLabel *confirm_device;
- GtkLabel *confirm_device_label;
- GtkWidget *confirm_connect_after_label;
-} NMAMobileWizardPrivate;
-
-#define NMA_MOBILE_WIZARD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- NMA_TYPE_MOBILE_WIZARD, \
- NMAMobileWizardPrivate))
-
-G_DEFINE_TYPE_WITH_CODE (NMAMobileWizard, nma_mobile_wizard, GTK_TYPE_ASSISTANT,
- G_ADD_PRIVATE (NMAMobileWizard))
-
-static void
-assistant_closed (GtkButton *button, gpointer user_data)
-{
- NMAMobileWizard *self = NMA_MOBILE_WIZARD (user_data);
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- NMAMobileProvider *provider;
- NMAMobileAccessMethod *method;
- NMAMobileWizardAccessMethod *wiz_method;
- NMAMobileFamily family = priv->family;
-
- wiz_method = g_malloc0 (sizeof (NMAMobileWizardAccessMethod));
-
- provider = get_selected_provider (self);
- if (!provider) {
- if (family == NMA_MOBILE_FAMILY_UNKNOWN)
- family = get_provider_unlisted_type (self);
-
- switch (family) {
- case NMA_MOBILE_FAMILY_3GPP:
- wiz_method->provider_name = g_strdup (_("GSM"));
- break;
- case NMA_MOBILE_FAMILY_CDMA:
- wiz_method->provider_name = g_strdup (_("CDMA"));
- break;
- case NMA_MOBILE_FAMILY_UNKNOWN:
- g_return_if_reached ();
- break;
- }
- } else {
- gboolean manual = FALSE;
-
- wiz_method->provider_name = g_strdup (nma_mobile_provider_get_name (provider));
- method = get_selected_method (self, &manual);
- if (method) {
- family = nma_mobile_access_method_get_family (method);
- wiz_method->plan_name = g_strdup (nma_mobile_access_method_get_name (method));
- wiz_method->username = g_strdup (nma_mobile_access_method_get_username (method));
- wiz_method->password = g_strdup (nma_mobile_access_method_get_password (method));
- if (family == NMA_MOBILE_FAMILY_3GPP)
- wiz_method->gsm_apn = g_strdup (nma_mobile_access_method_get_3gpp_apn (method));
- } else {
- if (priv->provider_only_cdma) {
- GSList *methods;
-
- family = NMA_MOBILE_FAMILY_CDMA;
-
- methods = nma_mobile_provider_get_methods (provider);
- /* Take username and password from the first (only) method for CDMA only provider */
- if (methods) {
- method = methods->data;
- wiz_method->username = g_strdup (nma_mobile_access_method_get_username (method));
- wiz_method->password = g_strdup (nma_mobile_access_method_get_password (method));
- }
- } else {
- family = NMA_MOBILE_FAMILY_3GPP;
- wiz_method->gsm_apn = g_strdup (gtk_editable_get_text (priv->plan_apn_entry));
- }
- }
- }
-
- switch (family) {
- case NMA_MOBILE_FAMILY_3GPP:
- wiz_method->devtype = NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS;
- break;
- case NMA_MOBILE_FAMILY_CDMA:
- wiz_method->devtype = NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO;
- break;
- default:
- g_return_if_reached ();
- break;
- }
-
- (*(priv->callback)) (self, FALSE, wiz_method, priv->user_data);
-
- if (provider)
- nma_mobile_provider_unref (provider);
- g_free (wiz_method->provider_name);
- g_free (wiz_method->plan_name);
- g_free (wiz_method->username);
- g_free (wiz_method->password);
- g_free (wiz_method->gsm_apn);
- g_free (wiz_method);
-}
-
-static void
-assistant_cancel (GtkButton *button, gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- (*(priv->callback)) (self, TRUE, NULL, priv->user_data);
-}
-
-/**********************************************************/
-/* Confirm page */
-/**********************************************************/
-
-static void
-confirm_setup (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- if (priv->will_connect_after)
- gtk_widget_show (priv->confirm_connect_after_label);
-}
-
-static void
-confirm_prepare (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- NMAMobileProvider *provider = NULL;
- NMAMobileAccessMethod *method = NULL;
- const char *apn = NULL;
- NMACountryInfo *country_info;
- gboolean manual = FALSE;
- GString *str;
-
- provider = get_selected_provider (self);
- if (provider)
- method = get_selected_method (self, &manual);
-
- /* Provider */
- str = g_string_new (NULL);
- if (provider) {
- g_string_append (str, nma_mobile_provider_get_name (provider));
- nma_mobile_provider_unref (provider);
- } else {
- g_string_append (str, _("Unlisted"));
- }
-
- country_info = get_selected_country (self);
- if (nma_country_info_get_country_code (country_info))
- g_string_append_printf (str, ", %s", nma_country_info_get_country_name (country_info));
- nma_country_info_unref (country_info);
-
- gtk_label_set_text (priv->confirm_provider, str->str);
- gtk_widget_show (GTK_WIDGET (priv->confirm_provider));
- g_string_free (str, TRUE);
-
- if (priv->dev_desc) {
- gtk_label_set_text (priv->confirm_device, priv->dev_desc);
- gtk_widget_show (GTK_WIDGET (priv->confirm_device_label));
- gtk_widget_show (GTK_WIDGET (priv->confirm_device));
- } else {
- gtk_widget_hide (GTK_WIDGET (priv->confirm_device_label));
- gtk_widget_hide (GTK_WIDGET (priv->confirm_device));
- }
-
- if (priv->provider_only_cdma) {
- gtk_widget_hide (GTK_WIDGET (priv->confirm_plan_label));
- gtk_widget_hide (GTK_WIDGET (priv->confirm_plan));
- } else {
- /* Plan */
- gtk_widget_show (GTK_WIDGET (priv->confirm_plan_label));
- gtk_widget_show (GTK_WIDGET (priv->confirm_plan));
-
- if (method)
- gtk_label_set_text (priv->confirm_plan, nma_mobile_access_method_get_name (method));
- else
- gtk_label_set_text (priv->confirm_plan, _("Unlisted"));
-
- apn = gtk_editable_get_text (priv->plan_apn_entry);
- }
-
- if (apn) {
- str = g_string_new (NULL);
- g_string_append_printf (str, "<span color=\"#999999\">APN: %s</span>", apn);
- gtk_label_set_markup (priv->confirm_apn, str->str);
- g_string_free (str, TRUE);
- gtk_widget_show (GTK_WIDGET (priv->confirm_apn));
- } else {
- gtk_widget_hide (GTK_WIDGET (priv->confirm_apn));
- }
-}
-
-/**********************************************************/
-/* Plan page */
-/**********************************************************/
-
-#define PLAN_COL_NAME 0
-#define PLAN_COL_METHOD 1
-#define PLAN_COL_MANUAL 2
-
-static NMAMobileAccessMethod *
-get_selected_method (NMAMobileWizard *self, gboolean *manual)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkTreeModel *model;
- NMAMobileAccessMethod *method = NULL;
- GtkTreeIter iter;
- gboolean is_manual = FALSE;
-
- if (!gtk_combo_box_get_active_iter (priv->plan_combo, &iter))
- return NULL;
-
- model = gtk_combo_box_get_model (priv->plan_combo);
- if (!model)
- return NULL;
-
- gtk_tree_model_get (model, &iter,
- PLAN_COL_METHOD, &method,
- PLAN_COL_MANUAL, &is_manual,
- -1);
- if (is_manual) {
- if (manual)
- *manual = is_manual;
- if (method)
- nma_mobile_access_method_unref (method);
- method = NULL;
- }
-
- return method;
-}
-
-static void
-plan_update_complete (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkAssistant *assistant = GTK_ASSISTANT (self);
- gboolean is_manual = FALSE;
- NMAMobileAccessMethod *method;
-
- method = get_selected_method (self, &is_manual);
- if (method) {
- gtk_assistant_set_page_complete (assistant, priv->plan_page, TRUE);
- nma_mobile_access_method_unref (method);
- } else {
- const char *manual_apn;
-
- manual_apn = gtk_editable_get_text (priv->plan_apn_entry);
- gtk_assistant_set_page_complete (assistant, priv->plan_page,
- (manual_apn && strlen (manual_apn)));
- }
-}
-
-static void
-plan_combo_changed (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- NMAMobileAccessMethod *method = NULL;
- gboolean is_manual = FALSE;
-
- method = get_selected_method (self, &is_manual);
- if (method) {
- gtk_editable_set_text (priv->plan_apn_entry, nma_mobile_access_method_get_3gpp_apn (method));
- gtk_widget_set_sensitive (GTK_WIDGET (priv->plan_apn_entry), FALSE);
- } else {
- gtk_editable_set_text (priv->plan_apn_entry, "");
- gtk_widget_set_sensitive (GTK_WIDGET (priv->plan_apn_entry), TRUE);
- gtk_widget_grab_focus (GTK_WIDGET (priv->plan_apn_entry));
- }
-
- if (method)
- nma_mobile_access_method_unref (method);
-
- plan_update_complete (self);
-}
-
-static gboolean
-plan_row_separator_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
-{
- NMAMobileAccessMethod *method = NULL;
- gboolean is_manual = FALSE;
- gboolean draw_separator = FALSE;
-
- gtk_tree_model_get (model, iter,
- PLAN_COL_METHOD, &method,
- PLAN_COL_MANUAL, &is_manual,
- -1);
- if (!method && !is_manual)
- draw_separator = TRUE;
- if (method)
- nma_mobile_access_method_unref (method);
- return draw_separator;
-}
-
-static void
-apn_filter_cb (GtkEditable *editable,
- gchar *text,
- gint length,
- gint *position,
- gpointer user_data)
-{
- utils_filter_editable_on_insert_text (editable,
- text, length, position, user_data,
- utils_char_is_ascii_apn,
- apn_filter_cb);
-}
-
-static void
-plan_setup (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkCellRenderer *renderer;
-
- gtk_combo_box_set_row_separator_func (priv->plan_combo,
- plan_row_separator_func,
- NULL,
- NULL);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (priv->plan_combo), renderer, TRUE);
- gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (priv->plan_combo), renderer, "text", PLAN_COL_NAME);
-}
-
-static gboolean
-focus_plan_apn_entry (gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- priv->plan_focus_id = 0;
- gtk_widget_grab_focus (GTK_WIDGET (priv->plan_apn_entry));
- return FALSE;
-}
-
-static void
-plan_prepare (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- NMAMobileProvider *provider;
- GtkTreeIter method_iter;
- guint32 count = 0;
-
- gtk_tree_store_clear (priv->plan_store);
-
- provider = get_selected_provider (self);
- if (provider) {
- GSList *iter;
-
- for (iter = nma_mobile_provider_get_methods (provider); iter; iter = g_slist_next (iter)) {
- NMAMobileAccessMethod *method = iter->data;
-
- if ( (priv->family != NMA_MOBILE_FAMILY_UNKNOWN)
- && (nma_mobile_access_method_get_family (method) != priv->family))
- continue;
-
- gtk_tree_store_append (priv->plan_store, &method_iter, NULL);
- gtk_tree_store_set (priv->plan_store,
- &method_iter,
- PLAN_COL_NAME,
- nma_mobile_access_method_get_name (method),
- PLAN_COL_METHOD,
- method,
- -1);
- count++;
- }
- nma_mobile_provider_unref (provider);
-
- /* Draw the separator */
- if (count)
- gtk_tree_store_append (priv->plan_store, &method_iter, NULL);
- }
-
- /* Add the "My plan is not listed..." item */
- gtk_tree_store_append (priv->plan_store, &method_iter, NULL);
- gtk_tree_store_set (priv->plan_store,
- &method_iter,
- PLAN_COL_NAME,
- _("My plan is not listed…"),
- PLAN_COL_MANUAL,
- TRUE,
- -1);
- /* Select the first item by default if nothing is yet selected */
- if (gtk_combo_box_get_active (priv->plan_combo) < 0)
- gtk_combo_box_set_active (priv->plan_combo, 0);
-
- gtk_widget_set_sensitive (GTK_WIDGET (priv->plan_combo), count > 0);
- if (count == 0) {
- if (!priv->plan_focus_id)
- priv->plan_focus_id = g_idle_add (focus_plan_apn_entry, self);
- }
-
- plan_combo_changed (self);
-}
-
-/**********************************************************/
-/* Providers page */
-/**********************************************************/
-
-#define PROVIDER_COL_NAME 0
-#define PROVIDER_COL_PROVIDER 1
-
-static gboolean
-providers_search_func (GtkTreeModel *model,
- gint column,
- const char *key,
- GtkTreeIter *iter,
- gpointer search_data)
-{
- gboolean unmatched = TRUE;
- char *provider = NULL;
-
- if (!key)
- return TRUE;
-
- gtk_tree_model_get (model, iter, column, &provider, -1);
- if (!provider)
- return TRUE;
-
- unmatched = !!g_ascii_strncasecmp (provider, key, strlen (key));
- g_free (provider);
- return unmatched;
-}
-
-static NMAMobileProvider *
-get_selected_provider (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkTreeSelection *selection;
- GtkTreeModel *model = NULL;
- GtkTreeIter iter;
- NMAMobileProvider *provider = NULL;
-
- if (!gtk_toggle_button_get_active (priv->providers_view_radio))
- return NULL;
-
- selection = gtk_tree_view_get_selection (priv->providers_view);
- g_assert (selection);
-
- if (!gtk_tree_selection_get_selected (GTK_TREE_SELECTION (selection), &model, &iter))
- return NULL;
-
- gtk_tree_model_get (model, &iter, PROVIDER_COL_PROVIDER, &provider, -1);
- return provider;
-}
-
-static void
-providers_update_complete (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkAssistant *assistant = GTK_ASSISTANT (self);
- gboolean use_view;
-
- use_view = gtk_toggle_button_get_active (priv->providers_view_radio);
- if (use_view) {
- NMAMobileProvider *provider;
-
- provider = get_selected_provider (self);
- gtk_assistant_set_page_complete (assistant, priv->providers_page, !!provider);
- if (provider)
- nma_mobile_provider_unref (provider);
- } else {
- gtk_assistant_set_page_complete (assistant, priv->providers_page, TRUE);
- }
-}
-
-static void
-providers_update_continue (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- gtk_assistant_set_page_complete (GTK_ASSISTANT (self),
- priv->providers_page,
- TRUE);
-
- gtk_assistant_next_page (GTK_ASSISTANT (self));
-}
-
-static gboolean
-focus_providers_view (gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- priv->providers_focus_id = 0;
- gtk_widget_grab_focus (GTK_WIDGET (priv->providers_view));
- return FALSE;
-}
-
-static gboolean
-focus_provider_unlisted_type_combo (gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- priv->providers_focus_id = 0;
- gtk_widget_grab_focus (GTK_WIDGET (priv->provider_unlisted_type_combo));
- return FALSE;
-}
-
-static void
-providers_radio_toggled (GtkToggleButton *button, gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- gboolean use_view;
-
- use_view = gtk_toggle_button_get_active (priv->providers_view_radio);
- if (use_view) {
- if (!priv->providers_focus_id)
- priv->providers_focus_id = g_idle_add (focus_providers_view, self);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->providers_view), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->provider_unlisted_type_combo), FALSE);
- } else if (priv->family == NMA_MOBILE_FAMILY_UNKNOWN) {
- if (!priv->providers_focus_id)
- priv->providers_focus_id = g_idle_add (focus_provider_unlisted_type_combo, self);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->providers_view), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->provider_unlisted_type_combo), TRUE);
- }
-
- providers_update_complete (self);
-}
-
-static NMAMobileFamily
-get_provider_unlisted_type (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- switch (gtk_combo_box_get_active (priv->provider_unlisted_type_combo)) {
- case 0:
- return NMA_MOBILE_FAMILY_3GPP;
- case 1:
- return NMA_MOBILE_FAMILY_CDMA;
- default:
- g_return_val_if_reached (NMA_MOBILE_FAMILY_UNKNOWN);
- }
-}
-
-static void
-providers_setup (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- GtkTreeSelection *selection;
-
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->providers_sort),
- PROVIDER_COL_NAME, GTK_SORT_ASCENDING);
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("Provider"),
- renderer,
- "text", PROVIDER_COL_NAME,
- NULL);
- gtk_tree_view_append_column (priv->providers_view, column);
- gtk_tree_view_column_set_clickable (column, TRUE);
-
- selection = gtk_tree_view_get_selection (priv->providers_view);
- g_assert (selection);
-
- switch (priv->family) {
- case NMA_MOBILE_FAMILY_3GPP:
- gtk_combo_box_set_active (priv->provider_unlisted_type_combo, 0);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->provider_unlisted_type_combo), FALSE);
- break;
- case NMA_MOBILE_FAMILY_CDMA:
- gtk_combo_box_set_active (priv->provider_unlisted_type_combo, 1);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->provider_unlisted_type_combo), FALSE);
- break;
- case NMA_MOBILE_FAMILY_UNKNOWN:
- gtk_widget_set_sensitive (GTK_WIDGET (priv->provider_unlisted_type_combo), TRUE);
- break;
- }
-}
-
-static void
-providers_prepare (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkTreeSelection *selection;
- NMACountryInfo *country_info;
- GSList *piter;
-
- gtk_tree_store_clear (priv->providers_store);
-
- country_info = get_selected_country (self);
- for (piter = nma_country_info_get_providers (country_info);
- piter;
- piter = g_slist_next (piter)) {
- NMAMobileProvider *provider = piter->data;
- GtkTreeIter provider_iter;
-
- /* Ignore providers that don't match the current device type */
- if (priv->family != NMA_MOBILE_FAMILY_UNKNOWN) {
- GSList *miter;
- guint32 count = 0;
-
- for (miter = nma_mobile_provider_get_methods (provider); miter; miter = g_slist_next (miter)) {
- NMAMobileAccessMethod *method = miter->data;
-
- if (priv->family == nma_mobile_access_method_get_family (method))
- count++;
- }
-
- if (!count)
- continue;
- }
-
- gtk_tree_store_append (priv->providers_store, &provider_iter, NULL);
- gtk_tree_store_set (priv->providers_store,
- &provider_iter,
- PROVIDER_COL_NAME,
- nma_mobile_provider_get_name (provider),
- PROVIDER_COL_PROVIDER,
- provider,
- -1);
- }
- nma_country_info_unref (country_info);
-
- gtk_tree_view_set_search_column (priv->providers_view, PROVIDER_COL_NAME);
- gtk_tree_view_set_search_equal_func (priv->providers_view,
- providers_search_func, self, NULL);
-
- /* If no row has focus yet, focus the first row so that the user can start
- * incremental search without clicking.
- */
- selection = gtk_tree_view_get_selection (priv->providers_view);
- g_assert (selection);
- if (!gtk_tree_selection_count_selected_rows (selection)) {
- GtkTreeIter first_iter;
- GtkTreePath *first_path;
-
- if (gtk_tree_model_get_iter_first (priv->providers_sort, &first_iter)) {
- first_path = gtk_tree_model_get_path (priv->providers_sort, &first_iter);
- if (first_path) {
- gtk_tree_selection_select_path (selection, first_path);
- gtk_tree_path_free (first_path);
- }
- }
- }
-
- if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->providers_store), NULL) == 0) {
- /* No providers to choose from. */
- gtk_toggle_button_set_active (priv->provider_unlisted_radio, TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->providers_view_radio), FALSE);
- } else {
- gtk_toggle_button_set_active (priv->providers_view_radio, TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->providers_view_radio), TRUE);
- }
-
- providers_radio_toggled (NULL, self);
-
- /* Initial completeness state */
- providers_update_complete (self);
-}
-
-/**********************************************************/
-/* Country page */
-/**********************************************************/
-
-#define COUNTRIES_COL_NAME 0
-#define COUNTRIES_COL_INFO 1
-
-static gboolean
-country_search_func (GtkTreeModel *model,
- gint column,
- const char *key,
- GtkTreeIter *iter,
- gpointer search_data)
-{
- gboolean unmatched = TRUE;
- char *country = NULL;
-
- if (!key)
- return TRUE;
-
- gtk_tree_model_get (model, iter, column, &country, -1);
- if (!country)
- return TRUE;
-
- unmatched = !!g_ascii_strncasecmp (country, key, strlen (key));
- g_free (country);
- return unmatched;
-}
-
-static void
-add_one_country (gpointer key, gpointer value, gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- NMACountryInfo *country_info = value;
- GtkTreeIter country_iter;
- GtkTreePath *country_path, *country_view_path;
-
- g_assert (key);
-
- if ( nma_country_info_get_country_code (country_info)
- && !nma_country_info_get_providers (country_info))
- return;
-
- gtk_tree_store_append (priv->country_store, &country_iter, NULL);
- gtk_tree_store_set (priv->country_store,
- &country_iter,
- COUNTRIES_COL_NAME,
- nma_country_info_get_country_name (country_info),
- COUNTRIES_COL_INFO,
- country_info,
- -1);
-
- /* If this country is the same country as the user's current locale,
- * select it by default.
- */
- if (priv->country != country_info)
- return;
-
- country_path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->country_store), &country_iter);
- if (!country_path)
- return;
-
- country_view_path = gtk_tree_model_sort_convert_child_path_to_path (priv->country_sort, country_path);
- if (country_view_path) {
- GtkTreeSelection *selection;
-
- gtk_tree_view_expand_row (priv->country_view, country_view_path, TRUE);
-
- selection = gtk_tree_view_get_selection (priv->country_view);
- g_assert (selection);
- gtk_tree_selection_select_path (selection, country_view_path);
- gtk_tree_view_scroll_to_cell (priv->country_view,
- country_view_path, NULL, TRUE, 0, 0);
- gtk_tree_path_free (country_view_path);
- }
- gtk_tree_path_free (country_path);
-}
-
-static NMACountryInfo *
-get_selected_country (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkTreeSelection *selection;
- GtkTreeModel *model = NULL;
- GtkTreeIter iter;
- NMACountryInfo *country_info = NULL;
-
- selection = gtk_tree_view_get_selection (priv->country_view);
- g_assert (selection);
-
- if (!gtk_tree_selection_get_selected (GTK_TREE_SELECTION (selection), &model, &iter))
- return NULL;
-
- gtk_tree_model_get (model, &iter, COUNTRIES_COL_INFO, &country_info, -1);
- return country_info;
-}
-
-static void
-country_update_complete (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkTreeSelection *selection;
-
- selection = gtk_tree_view_get_selection (priv->country_view);
- g_assert (selection);
-
- gtk_assistant_set_page_complete (GTK_ASSISTANT (self),
- priv->country_page,
- gtk_tree_selection_get_selected (selection, NULL, NULL));
-}
-
-static void
-country_update_continue (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- gtk_assistant_set_page_complete (GTK_ASSISTANT (self),
- priv->country_page,
- TRUE);
-
- gtk_assistant_next_page (GTK_ASSISTANT (self));
-}
-
-static gint
-country_sort_func (GtkTreeModel *model,
- GtkTreeIter *a,
- GtkTreeIter *b,
- gpointer user_data)
-{
- char *a_str = NULL, *b_str = NULL;
- NMACountryInfo *a_country_info = NULL, *b_country_info = NULL;
- gint ret = 0;
-
- gtk_tree_model_get (model, a, COUNTRIES_COL_NAME, &a_str, COUNTRIES_COL_INFO, &a_country_info, -1);
- gtk_tree_model_get (model, b, COUNTRIES_COL_NAME, &b_str, COUNTRIES_COL_INFO, &b_country_info, -1);
-
- if (!a_country_info || !nma_country_info_get_country_code (a_country_info)) {
- ret = -1;
- goto out;
- } else if (!b_country_info || !nma_country_info_get_country_code (b_country_info)) {
- ret = 1;
- goto out;
- }
-
- if (a_str && !b_str)
- ret = -1;
- else if (!a_str && b_str)
- ret = 1;
- else if (!a_str && !b_str)
- ret = 0;
- else
- ret = g_utf8_collate (a_str, b_str);
-
-out:
- if (a_country_info)
- nma_country_info_unref (a_country_info);
- if (b_country_info)
- nma_country_info_unref (b_country_info);
- g_free (a_str);
- g_free (b_str);
- return ret;
-}
-
-static void
-country_setup (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- GtkTreeSelection *selection;
-
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->country_sort),
- COUNTRIES_COL_NAME, GTK_SORT_ASCENDING);
-
- gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->country_sort),
- COUNTRIES_COL_NAME,
- country_sort_func,
- NULL,
- NULL);
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (NULL,
- renderer,
- "text", COUNTRIES_COL_NAME,
- NULL);
- gtk_tree_view_append_column (priv->country_view, column);
- gtk_tree_view_column_set_clickable (column, TRUE);
-
- /* Add the rest of the providers */
- if (priv->mobile_providers_database) {
- GHashTable *countries;
-
- countries = nma_mobile_providers_database_get_countries (priv->mobile_providers_database);
- g_hash_table_foreach (countries, add_one_country, self);
- }
-
- /* If no row has focus yet, focus the first row so that the user can start
- * incremental search without clicking.
- */
- selection = gtk_tree_view_get_selection (priv->country_view);
- g_assert (selection);
- if (!gtk_tree_selection_count_selected_rows (selection)) {
- GtkTreeIter first_iter;
- GtkTreePath *first_path;
-
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->country_sort), &first_iter)) {
- first_path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->country_sort), &first_iter);
- if (first_path) {
- gtk_tree_selection_select_path (selection, first_path);
- gtk_tree_path_free (first_path);
- }
- }
- }
-
- /* Initial completeness state */
- country_update_complete (self);
-}
-
-static gboolean
-focus_country_view (gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- priv->country_focus_id = 0;
- gtk_widget_grab_focus (GTK_WIDGET (priv->country_view));
- return FALSE;
-}
-
-static void
-country_prepare (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- gtk_tree_view_set_search_column (priv->country_view, COUNTRIES_COL_NAME);
- gtk_tree_view_set_search_equal_func (priv->country_view, country_search_func, self, NULL);
-
- if (!priv->country_focus_id)
- priv->country_focus_id = g_idle_add (focus_country_view, self);
-
- country_update_complete (self);
-}
-
-/**********************************************************/
-/* Intro page */
-/**********************************************************/
-
-#define INTRO_COL_NAME 0
-#define INTRO_COL_DEVICE 1
-#define INTRO_COL_SEPARATOR 2
-
-static gboolean
-__intro_device_added (NMAMobileWizard *self, NMDevice *device, gboolean select_it)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkTreeIter iter;
- const char *desc = nm_device_get_description (device);
- NMDeviceModemCapabilities caps;
-
- if (!NM_IS_DEVICE_MODEM (device))
- return FALSE;
-
- caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
- if (caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS) {
- if (!desc)
- desc = _("Installed GSM device");
- } else if (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO) {
- if (!desc)
- desc = _("Installed CDMA device");
- } else
- return FALSE;
-
- gtk_tree_store_append (priv->dev_store, &iter, NULL);
- gtk_tree_store_set (priv->dev_store,
- &iter,
- INTRO_COL_NAME, desc,
- INTRO_COL_DEVICE, device,
- -1);
-
- /* Select the device just added */
- if (select_it)
- gtk_combo_box_set_active_iter (priv->dev_combo, &iter);
-
- gtk_widget_set_sensitive (GTK_WIDGET (priv->dev_combo), TRUE);
- return TRUE;
-}
-
-static void
-intro_device_added_cb (NMClient *client, NMDevice *device, NMAMobileWizard *self)
-{
- __intro_device_added (self, device, TRUE);
-}
-
-static void
-intro_device_removed_cb (NMClient *client, NMDevice *device, NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkTreeIter iter;
- gboolean have_device = FALSE, removed = FALSE;
-
- if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->dev_store), &iter))
- return;
-
- do {
- NMDevice *candidate = NULL;
-
- gtk_tree_model_get (GTK_TREE_MODEL (priv->dev_store), &iter,
- INTRO_COL_DEVICE, &candidate, -1);
- if (candidate) {
- if (candidate == device) {
- gtk_tree_store_remove (priv->dev_store, &iter);
- removed = TRUE;
- }
- g_object_unref (candidate);
- }
- } while (!removed && gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->dev_store), &iter));
-
- /* There's already a selected device item; nothing more to do */
- if (gtk_combo_box_get_active (priv->dev_combo) > 1)
- return;
-
- /* If there are no more devices, select the "Any" item and disable the
- * combo box. If there is no selected item and there is at least one device
- * item, select the first one.
- */
- if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->dev_store), &iter))
- return;
-
- do {
- NMDevice *candidate = NULL;
-
- gtk_tree_model_get (GTK_TREE_MODEL (priv->dev_store), &iter,
- INTRO_COL_DEVICE, &candidate, -1);
- if (candidate) {
- have_device = TRUE;
- g_object_unref (candidate);
- }
- } while (!have_device && gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->dev_store), &iter));
-
- if (have_device) {
- /* Iter should point to the last device item in the combo */
- gtk_combo_box_set_active_iter (priv->dev_combo, &iter);
- } else {
- gtk_combo_box_set_active (priv->dev_combo, 0);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->dev_combo), FALSE);
- }
-}
-
-static void
-intro_add_initial_devices (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- const GPtrArray *devices;
- gboolean selected_first = FALSE;
- int i;
-
- devices = priv->client ? nm_client_get_devices (priv->client) : NULL;
- for (i = 0; devices && (i < devices->len); i++) {
- if (__intro_device_added (self, g_ptr_array_index (devices, i), !selected_first)) {
- if (selected_first == FALSE)
- selected_first = TRUE;
- }
- }
-
- /* Otherwise the "Any device" item */
- if (!selected_first) {
- /* Select the first device item by default */
- gtk_combo_box_set_active (priv->dev_combo, 0);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->dev_combo), FALSE);
- }
-}
-
-static void
-intro_remove_all_devices (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- gtk_tree_store_clear (priv->dev_store);
-
- /* Select the "Any device" item */
- gtk_combo_box_set_active (priv->dev_combo, 0);
-}
-
-static void
-intro_manager_running_cb (NMClient *client, GParamSpec *pspec, NMAMobileWizard *self)
-{
- if (nm_client_get_nm_running (client))
- intro_add_initial_devices (self);
- else
- intro_remove_all_devices (self);
-}
-
-static gboolean
-intro_row_separator_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
-{
- gboolean separator = FALSE;
- gtk_tree_model_get (model, iter, INTRO_COL_SEPARATOR, &separator, -1);
- return separator;
-}
-
-static void
-intro_combo_changed (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkTreeIter iter;
- NMDevice *selected = NULL;
- NMDeviceModemCapabilities caps;
-
- g_free (priv->dev_desc);
- priv->dev_desc = NULL;
-
- if (!gtk_combo_box_get_active_iter (priv->dev_combo, &iter))
- return;
-
- gtk_tree_model_get (GTK_TREE_MODEL (priv->dev_store), &iter,
- INTRO_COL_DEVICE, &selected, -1);
- if (selected) {
- priv->dev_desc = g_strdup (nm_device_get_description (selected));
- caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (selected));
- if (caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS)
- priv->family = NMA_MOBILE_FAMILY_3GPP;
- else if (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
- priv->family = NMA_MOBILE_FAMILY_CDMA;
- else
- g_warning ("%s: unknown modem capabilities 0x%X", __func__, caps);
-
- g_object_unref (selected);
- }
-}
-
-static void
-intro_setup (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
- GtkCellRenderer *renderer;
- char *s;
-
- s = g_strdup_printf ("• %s", gtk_label_get_text (priv->provider_name_label));
- gtk_label_set_text (priv->provider_name_label, s);
- g_free (s);
-
- s = g_strdup_printf ("• %s", gtk_label_get_text (priv->plan_name_label));
- gtk_label_set_text (priv->plan_name_label, s);
- g_free (s);
-
- s = g_strdup_printf ("• %s", gtk_label_get_text (priv->apn_label));
- gtk_label_set_text (priv->apn_label, s);
- g_free (s);
-
- /* Device combo; only built if the wizard's caller didn't pass one in */
- if (!priv->initial_family) {
- GtkTreeIter iter;
-
- priv->client = nm_client_new (NULL, NULL);
- if (priv->client) {
- g_signal_connect (priv->client, "device-added",
- G_CALLBACK (intro_device_added_cb), self);
- g_signal_connect (priv->client, "device-removed",
- G_CALLBACK (intro_device_removed_cb), self);
- g_signal_connect (priv->client, "notify::manager-running",
- G_CALLBACK (intro_manager_running_cb), self);
- }
-
- gtk_combo_box_set_row_separator_func (priv->dev_combo,
- intro_row_separator_func, NULL, NULL);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (priv->dev_combo), renderer, TRUE);
- gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (priv->dev_combo), renderer, "text", INTRO_COL_NAME);
-
- /* Any device */
- gtk_tree_store_append (priv->dev_store, &iter, NULL);
- gtk_tree_store_set (priv->dev_store, &iter,
- INTRO_COL_NAME, _("Any device"), -1);
-
- /* Separator */
- gtk_tree_store_append (priv->dev_store, &iter, NULL);
- gtk_tree_store_set (priv->dev_store, &iter,
- INTRO_COL_SEPARATOR, TRUE, -1);
-
- intro_add_initial_devices (self);
- }
-}
-
-/**********************************************************/
-/* General assistant stuff */
-/**********************************************************/
-
-static void
-remove_plan_focus_idle (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- if (priv->plan_focus_id) {
- g_source_remove (priv->plan_focus_id);
- priv->plan_focus_id = 0;
- }
-}
-
-static void
-remove_provider_focus_idle (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- if (priv->providers_focus_id) {
- g_source_remove (priv->providers_focus_id);
- priv->providers_focus_id = 0;
- }
-}
-
-static void
-remove_country_focus_idle (NMAMobileWizard *self)
-{
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- if (priv->country_focus_id) {
- g_source_remove (priv->country_focus_id);
- priv->country_focus_id = 0;
- }
-}
-
-static void
-assistant_prepare (GtkAssistant *assistant, GtkWidget *page, gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- if (page != priv->plan_page)
- remove_plan_focus_idle (self);
- if (page != priv->providers_page)
- remove_provider_focus_idle (self);
- if (page != priv->country_page)
- remove_country_focus_idle (self);
-
- if (page == priv->country_page)
- country_prepare (self);
- else if (page == priv->providers_page)
- providers_prepare (self);
- else if (page == priv->plan_page)
- plan_prepare (self);
- else if (page == priv->confirm_page)
- confirm_prepare (self);
-}
-
-static gint
-forward_func (gint current_page, gpointer user_data)
-{
- NMAMobileWizard *self = user_data;
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- if (current_page == PROVIDERS_PAGE_IDX) {
- NMAMobileFamily family = priv->family;
-
- /* If the provider is unlisted, we can skip ahead of the user's
- * access technology is CDMA.
- */
- if (gtk_toggle_button_get_active (priv->provider_unlisted_radio)) {
- if (family == NMA_MOBILE_FAMILY_UNKNOWN)
- family = get_provider_unlisted_type (self);
- } else {
- /* Or, if the provider is only CDMA, then we can also skip ahead */
- NMAMobileProvider *provider;
- GSList *iter;
- gboolean gsm = FALSE, cdma = FALSE;
-
- provider = get_selected_provider (self);
- if (provider) {
- for (iter = nma_mobile_provider_get_methods (provider); iter; iter = g_slist_next (iter)) {
- NMAMobileAccessMethod *method = iter->data;
-
- if (nma_mobile_access_method_get_family (method) == NMA_MOBILE_FAMILY_CDMA)
- cdma = TRUE;
- else if (nma_mobile_access_method_get_family (method) == NMA_MOBILE_FAMILY_3GPP)
- gsm = TRUE;
- }
- nma_mobile_provider_unref (provider);
-
- if (cdma && !gsm)
- family = NMA_MOBILE_FAMILY_CDMA;
- }
- }
-
- /* Skip to the confirm page if we know its CDMA */
- if (family == NMA_MOBILE_FAMILY_CDMA) {
- priv->provider_only_cdma = TRUE;
- return CONFIRM_PAGE_IDX;
- } else
- priv->provider_only_cdma = FALSE;
- }
-
- return current_page + 1;
-}
-
-static char *
-get_country_from_locale (void)
-{
- char *p, *m, *cc, *lang;
-
- lang = getenv ("LC_ALL");
- if (!lang)
- lang = getenv ("LANG");
- if (!lang)
- return NULL;
-
- p = strchr (lang, '_');
- if (!p || !strlen (p)) {
- g_free (p);
- return NULL;
- }
-
- p = cc = g_strdup (++p);
- m = strchr (cc, '.');
- if (m)
- *m = '\0';
-
- while (*p) {
- *p = g_ascii_toupper (*p);
- p++;
- }
-
- return cc;
-}
-
-static void
-finalize (GObject *object)
-{
- NMAMobileWizard *self = NMA_MOBILE_WIZARD (object);
- NMAMobileWizardPrivate *priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- g_clear_pointer (&priv->dev_desc, g_free);
- g_clear_object (&priv->client);
-
- remove_plan_focus_idle (self);
- remove_provider_focus_idle (self);
- remove_country_focus_idle (self);
-
- g_clear_object (&priv->mobile_providers_database);
-
- G_OBJECT_CLASS (nma_mobile_wizard_parent_class)->finalize (object);
-}
-
-static void
-nma_mobile_wizard_class_init (NMAMobileWizardClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- object_class->finalize = finalize;
-
- g_type_ensure (NM_TYPE_DEVICE);
- gtk_widget_class_set_template_from_resource (widget_class,
- "/org/freedesktop/network-manager-applet/nma-mobile-wizard.ui");
-
-
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, dev_combo);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, dev_combo_label);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, country_page);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, country_view);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, providers_page);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, providers_view_radio);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, providers_view);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, provider_unlisted_radio);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, provider_unlisted_type_combo);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, plan_page);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, plan_combo);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, plan_apn_entry);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, confirm_page);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, confirm_provider);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, confirm_plan_label);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, confirm_apn);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, confirm_plan);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, confirm_device_label);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, confirm_connect_after_label);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, confirm_device);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, provider_name_label);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, plan_name_label);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, apn_label);
-
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, dev_store);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, country_store);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, country_sort);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, providers_store);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, providers_sort);
- gtk_widget_class_bind_template_child_private (widget_class, NMAMobileWizard, plan_store);
-
- gtk_widget_class_bind_template_callback (widget_class, assistant_closed);
- gtk_widget_class_bind_template_callback (widget_class, assistant_cancel);
- gtk_widget_class_bind_template_callback (widget_class, assistant_prepare);
- gtk_widget_class_bind_template_callback (widget_class, intro_combo_changed);
- gtk_widget_class_bind_template_callback (widget_class, country_update_continue);
- gtk_widget_class_bind_template_callback (widget_class, providers_radio_toggled);
- gtk_widget_class_bind_template_callback (widget_class, providers_update_complete);
- gtk_widget_class_bind_template_callback (widget_class, providers_update_continue);
- gtk_widget_class_bind_template_callback (widget_class, plan_combo_changed);
- gtk_widget_class_bind_template_callback (widget_class, plan_update_complete);
- gtk_widget_class_bind_template_callback (widget_class, apn_filter_cb);
-}
-
-static void
-nma_mobile_wizard_init (NMAMobileWizard *self)
-{
- gtk_widget_init_template (GTK_WIDGET (self));
- gtk_widget_realize (GTK_WIDGET (self));
-
- if (GDK_IS_X11_DISPLAY (gtk_widget_get_display (GTK_WIDGET (self)))) {
-#if GTK_CHECK_VERSION(3,90,0)
- GdkSurface *surface = gtk_widget_get_surface (GTK_WIDGET (self));
- gdk_x11_surface_set_skip_taskbar_hint (surface, TRUE);
-#else
- GdkWindow *gdk_window = gtk_widget_get_window (GTK_WIDGET (self));
- gdk_window_set_skip_taskbar_hint (gdk_window, TRUE);
-#endif
- }
-}
-
-/**
- * nma_mobile_wizard_new: (skip)
- * @parent:
- * @window_group:
- * @modem_caps:
- * @will_connect_after:
- * @cb: (scope async):
- * @user_data:
- *
- * Returns: the newly created #NMAMobileWizard
- */
-NMAMobileWizard *
-nma_mobile_wizard_new (GtkWindow *parent,
- GtkWindowGroup *window_group,
- NMDeviceModemCapabilities modem_caps,
- gboolean will_connect_after,
- NMAMobileWizardCallback cb,
- gpointer user_data)
-{
- NMAMobileWizard *self;
- NMAMobileWizardPrivate *priv;
- char *cc;
- GError *error = NULL;
-
- self = g_object_new (NMA_TYPE_MOBILE_WIZARD, NULL);
- priv = NMA_MOBILE_WIZARD_GET_PRIVATE (self);
-
- priv->mobile_providers_database = nma_mobile_providers_database_new_sync (NULL, NULL, NULL, &error);
- if (!priv->mobile_providers_database) {
- g_warning ("Cannot create mobile providers database: %s",
- error->message);
- g_error_free (error);
- nma_mobile_wizard_destroy (self);
- return NULL;
- }
-
- cc = get_country_from_locale ();
- if (cc) {
- priv->country = nma_mobile_providers_database_lookup_country (priv->mobile_providers_database, cc);
- g_free (cc);
- }
-
- priv->will_connect_after = will_connect_after;
- priv->callback = cb;
- priv->user_data = user_data;
- if (modem_caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS)
- priv->family = NMA_MOBILE_FAMILY_3GPP;
- else if (modem_caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
- priv->family = NMA_MOBILE_FAMILY_CDMA;
- if (priv->family) {
- priv->initial_family = TRUE; /* Skip device selection */
- } else {
- gtk_widget_show (GTK_WIDGET (priv->dev_combo_label));
- gtk_widget_show (GTK_WIDGET (priv->dev_combo));
- }
-
- gtk_assistant_set_forward_page_func (GTK_ASSISTANT (self),
- forward_func, self, NULL);
-
- intro_setup (self);
- country_setup (self);
- providers_setup (self);
- plan_setup (self);
- confirm_setup (self);
-
- if (parent)
- gtk_window_set_transient_for (GTK_WINDOW (self), parent);
- if (window_group)
- gtk_window_group_add_window (window_group, GTK_WINDOW (self));
-
- return self;
-}
-
-void
-nma_mobile_wizard_present (NMAMobileWizard *self)
-{
- g_return_if_fail (self != NULL);
-
- gtk_window_present (GTK_WINDOW (self));
-}
-
-void
-nma_mobile_wizard_destroy (NMAMobileWizard *self)
-{
- g_return_if_fail (self != NULL);
-
- gtk_widget_destroy (GTK_WIDGET (self));
-}
diff --git a/src/libnma/nma-mobile-wizard.h b/src/libnma/nma-mobile-wizard.h
deleted file mode 100644
index 85239387..00000000
--- a/src/libnma/nma-mobile-wizard.h
+++ /dev/null
@@ -1,65 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Connection editor -- Connection editor for NetworkManager
- *
- * Dan Williams <dcbw@redhat.com>
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * (C) Copyright 2008 - 2018 Red Hat, Inc.
- */
-
-#ifndef MOBILE_WIZARD_H
-#define MOBILE_WIZARD_H
-
-#include <glib.h>
-#include <NetworkManager.h>
-#include <nm-device.h>
-
-typedef struct _NMAMobileWizard NMAMobileWizard;
-typedef struct _NMAMobileWizardClass NMAMobileWizardClass;
-
-/**
- * NMAMobileWizardAccessMethod:
- * @provider_name: The mobile network provider name
- * @plan_name: The provided network access billing plan
- * @devtype: Required NetworkManager device capabilities
- * @username: User login
- * @password: User secret
- * @gsm_apn: The GSM Access Point Name
- *
- * Network access method details.
- */
-typedef struct {
- char *provider_name;
- char *plan_name;
- NMDeviceModemCapabilities devtype;
- char *username;
- char *password;
- char *gsm_apn;
-} NMAMobileWizardAccessMethod;
-
-typedef void (*NMAMobileWizardCallback) (NMAMobileWizard *self,
- gboolean canceled,
- NMAMobileWizardAccessMethod *method,
- gpointer user_data);
-
-#define NMA_TYPE_MOBILE_WIZARD (nma_mobile_wizard_get_type ())
-#define NMA_MOBILE_WIZARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_MOBILE_WIZARD, NMAMobileWizard))
-#define NMA_MOBILE_WIZARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_MOBILE_WIZARD, NMAMobileWizardClass))
-#define NMA_IS_MOBILE_WIZARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_MOBILE_WIZARD))
-#define NMA_IS_MOBILE_WIZARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_MOBILE_WIZARD))
-#define NMA_MOBILE_WIZARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_MOBILE_WIZARD, NMAMobileWizardClass))
-
-GType nma_mobile_wizard_get_type (void);
-
-NMAMobileWizard *nma_mobile_wizard_new (GtkWindow *parent,
- GtkWindowGroup *window_group,
- NMDeviceModemCapabilities modem_caps,
- gboolean will_connect_after,
- NMAMobileWizardCallback cb,
- gpointer user_data);
-
-void nma_mobile_wizard_present (NMAMobileWizard *wizard);
-
-void nma_mobile_wizard_destroy (NMAMobileWizard *self);
-
-#endif /* MOBILE_WIZARD_H */
diff --git a/src/libnma/nma-mobile-wizard.ui b/src/libnma/nma-mobile-wizard.ui
deleted file mode 100644
index e120e962..00000000
--- a/src/libnma/nma-mobile-wizard.ui
+++ /dev/null
@@ -1,604 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.2 -->
-<interface domain="nm-applet">
- <requires lib="gtk+" version="3.20"/>
- <object class="GtkTreeStore" id="country_store">
- <columns>
- <!-- column-name name -->
- <column type="gchararray"/>
- <!-- column-name info -->
- <column type="NMACountryInfo"/>
- </columns>
- </object>
- <object class="GtkTreeModelSort" id="country_sort">
- <property name="model">country_store</property>
- </object>
- <object class="GtkTreeStore" id="dev_store">
- <columns>
- <!-- column-name name -->
- <column type="gchararray"/>
- <!-- column-name device -->
- <column type="NMDevice"/>
- <!-- column-name sparator -->
- <column type="gboolean"/>
- </columns>
- </object>
- <object class="GtkTreeStore" id="plan_store">
- <columns>
- <!-- column-name name -->
- <column type="gchararray"/>
- <!-- column-name method -->
- <column type="NMAMobileAccessMethod"/>
- <!-- column-name manual -->
- <column type="gboolean"/>
- </columns>
- </object>
- <object class="GtkTreeStore" id="providers_store">
- <columns>
- <!-- column-name name -->
- <column type="gchararray"/>
- <!-- column-name provider -->
- <column type="NMAMobileProvider"/>
- </columns>
- </object>
- <object class="GtkTreeModelSort" id="providers_sort">
- <property name="model">providers_store</property>
- </object>
- <template class="NMAMobileWizard" parent="GtkAssistant">
- <property name="can_focus">False</property>
- <property name="title" translatable="yes">New Mobile Broadband Connection</property>
- <property name="modal">True</property>
- <property name="window_position">center-always</property>
- <property name="type_hint">dialog</property>
- <property name="use_header_bar">1</property>
- <signal name="cancel" handler="assistant_cancel" swapped="no"/>
- <signal name="close" handler="assistant_closed" swapped="no"/>
- <signal name="prepare" handler="assistant_prepare" swapped="no"/>
- <child>
- <object class="GtkBox" id="intro_page">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <property name="margin_top">12</property>
- <property name="margin_bottom">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">This assistant helps you easily set up a mobile broadband connection to a cellular (3G) network.</property>
- <property name="wrap">True</property>
- <property name="max_width_chars">60</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">5</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">You will need the following information:</property>
- <property name="wrap">True</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">6</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="provider_name_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">25</property>
- <property name="label" translatable="yes">Your broadband provider’s name</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">7</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="plan_name_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">25</property>
- <property name="label" translatable="yes">Your broadband billing plan name</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">8</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="apn_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">25</property>
- <property name="label" translatable="yes">(in some cases) Your broadband billing plan APN (Access Point Name)</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">9</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="dev_combo_label">
- <property name="can_focus">False</property>
- <property name="valign">end</property>
- <property name="vexpand">True</property>
- <property name="label" translatable="yes">Create a connection for _this mobile broadband device:</property>
- <property name="use_underline">True</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">10</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="dev_combo">
- <property name="sensitive">False</property>
- <property name="can_focus">False</property>
- <property name="model">dev_store</property>
- <property name="active">0</property>
- <signal name="changed" handler="intro_combo_changed" swapped="yes"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">11</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="page_type">intro</property>
- <property name="title" translatable="yes">Set up a Mobile Broadband Connection</property>
- <property name="complete">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="country_page">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <property name="margin_top">12</property>
- <property name="margin_bottom">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Country or region:</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="vexpand">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="country_view">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <property name="model">country_sort</property>
- <property name="headers_visible">False</property>
- <property name="search_column">0</property>
- <signal name="row-activated" handler="country_update_continue" swapped="yes"/>
- <child internal-child="selection">
- <object class="GtkTreeSelection"/>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="title" translatable="yes">Choose your Provider’s Country or Region</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="providers_page">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <property name="margin_top">12</property>
- <property name="margin_bottom">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkRadioButton" id="providers_view_radio">
- <property name="label" translatable="yes">Select your provider from a _list:</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="providers_radio_toggled" swapped="no"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow">
- <property name="height_request">140</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="margin_start">25</property>
- <property name="vexpand">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="providers_view">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="model">providers_sort</property>
- <property name="search_column">0</property>
- <signal name="row-activated" handler="providers_update_continue" swapped="yes"/>
- <child internal-child="selection">
- <object class="GtkTreeSelection"/>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="provider_unlisted_radio">
- <property name="label" translatable="yes">I can’t find my provider and I wish to set up the connection _manually:</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- <property name="group">providers_view_radio</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBoxText" id="provider_unlisted_type_combo">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">25</property>
- <property name="active">0</property>
- <items>
- <item id="0" translatable="yes">My provider uses GSM technology (GPRS, EDGE, UMTS, HSPA)</item>
- <item id="1" translatable="yes">My provider uses CDMA technology (1xRTT, EVDO)</item>
- </items>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="title" translatable="yes">Choose your Provider</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="plan_page">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <property name="margin_top">12</property>
- <property name="margin_bottom">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_Select your plan:</property>
- <property name="use_underline">True</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="plan_combo">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="model">plan_store</property>
- <signal name="changed" handler="plan_combo_changed" swapped="yes"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Selected plan _APN (Access Point Name):</property>
- <property name="use_underline">True</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="plan_apn_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="max_length">64</property>
- <signal name="changed" handler="plan_update_complete" swapped="yes"/>
- <signal name="insert-text" handler="apn_filter_cb" swapped="no"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="valign">end</property>
- <property name="vexpand">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="valign">start</property>
- <property name="icon_name">dialog-warning</property>
- <property name="icon_size">6</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="width_request">500</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Warning: Selecting an incorrect plan may result in billing issues for your broadband account or may prevent connectivity.
-
-If you are unsure of your plan please ask your provider for your plan’s APN.</property>
- <property name="wrap">True</property>
- <property name="max_width_chars">60</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">5</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">4</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="title" translatable="yes">Choose your Billing Plan</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="confirm_page">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <property name="margin_top">12</property>
- <property name="margin_bottom">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="width_request">500</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Your mobile broadband connection is configured with the following settings:</property>
- <property name="wrap">True</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="confirm_device_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Your Device:</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="confirm_device">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">25</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Your Provider:</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="confirm_provider">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">25</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="confirm_plan_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Your Plan:</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">5</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="confirm_plan">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">25</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="confirm_apn">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">25</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">6</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="confirm_connect_after_label">
- <property name="visible">False</property>
- <property name="width_request">500</property>
- <property name="can_focus">False</property>
- <property name="valign">end</property>
- <property name="vexpand">True</property>
- <property name="label" translatable="yes">A connection will now be made to your mobile broadband provider using the settings you selected. If the connection fails or you cannot access network resources, double-check your settings. To modify your mobile broadband connection settings, choose “Network Connections” from the System → Preferences menu.</property>
- <property name="wrap">True</property>
- <property name="max_width_chars">60</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">7</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="page_type">confirm</property>
- <property name="title" translatable="yes">Confirm Mobile Broadband Settings</property>
- <property name="complete">True</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- <child internal-child="action_area">
- <object class="GtkBox">
- <property name="can_focus">False</property>
- </object>
- <packing>
- </packing>
- </child>
- </template>
-</interface>
diff --git a/src/libnma/nma-pkcs11-cert-chooser-dialog.c b/src/libnma/nma-pkcs11-cert-chooser-dialog.c
deleted file mode 100644
index f8feb056..00000000
--- a/src/libnma/nma-pkcs11-cert-chooser-dialog.c
+++ /dev/null
@@ -1,643 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2016,2017 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-#include "nma-pkcs11-cert-chooser-dialog.h"
-#include "nma-pkcs11-token-login-dialog.h"
-
-#include <string.h>
-#include <gck/gck.h>
-#include <gcr/gcr.h>
-
-/**
- * SECTION:nma-pkcs11-cert-chooser-dialog
- * @title: NMAPkcs11CertChooserDialog
- * @short_description: The PKCS\#11 Object Chooser Dialog
- *
- * #NMAPkcs11CertChooserDialog selects an object from a PKCS\#11 token,
- * optionally allowing the user to specify the PIN and log in.
- */
-
-enum {
- COLUMN_LABEL,
- COLUMN_ISSUER,
- COLUMN_HAS_KEY,
- COLUMN_ATTRIBUTES,
- N_COLUMNS
-};
-
-struct _NMAPkcs11CertChooserDialogPrivate {
- GckSlot *slot;
- GtkListStore *cert_store;
- GtkListStore *key_store;
- GtkWidget *login_button;
-
- guchar *pin_value;
- gulong pin_length;
- gboolean remember_pin;
-
- GtkRevealer *error_revealer;
- GtkLabel *error_label;
- GtkTreeView *objects_view;
- GtkTreeViewColumn *list_name_column;
- GtkCellRenderer *list_name_renderer;
- GtkTreeViewColumn *list_issued_by_column;
- GtkCellRenderer *list_issued_by_renderer;
-};
-
-#define NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- NMA_TYPE_PKCS11_CERT_CHOOSER_DIALOG, \
- NMAPkcs11CertChooserDialogPrivate))
-
-G_DEFINE_TYPE_WITH_CODE (NMAPkcs11CertChooserDialog, nma_pkcs11_cert_chooser_dialog, GTK_TYPE_DIALOG,
- G_ADD_PRIVATE (NMAPkcs11CertChooserDialog))
-
-#define NMA_RESPONSE_LOGIN 1
-
-enum {
- PROP_0,
- PROP_SLOT,
-};
-
-typedef struct {
- GckAttributes *attrs;
- gboolean has_key;
-} IdMatchData;
-
-static gboolean
-id_match (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- IdMatchData *data = user_data;
- GckAttributes *attrs = NULL;
- const GckAttribute *attr1, *attr2;
-
- attr1 = gck_attributes_find (data->attrs, CKA_ID);
- if (!attr1 || !attr1->value || !attr1->length)
- goto out;
-
- gtk_tree_model_get (model, iter, COLUMN_ATTRIBUTES, &attrs, -1);
- attr2 = gck_attributes_find (attrs, CKA_ID);
- if (!attr2 || !attr2->value || !attr2->length)
- goto out;
-
- if (attr1->length != attr2->length)
- goto out;
-
- if (memcmp (attr1->value, attr2->value, attr1->length))
- goto out;
-
- data->has_key = TRUE;
- gtk_list_store_set (GTK_LIST_STORE (model), iter,
- COLUMN_HAS_KEY, TRUE, -1);
-
- if (attrs)
- gck_attributes_unref (attrs);
-out:
- return data->has_key;
-}
-
-static void
-object_details (GObject *source_object, GAsyncResult *res, gpointer user_data)
-{
- GckObject *object = GCK_OBJECT (source_object);
- NMAPkcs11CertChooserDialog *self = NMA_PKCS11_CERT_CHOOSER_DIALOG (user_data);
- NMAPkcs11CertChooserDialogPrivate *priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (self);
- GckAttributes *attrs;
- GtkTreeIter iter;
- CK_OBJECT_CLASS cka_class;
- const GckAttribute *attr;
- GcrCertificate *cert;
- gchar *label, *issuer;
- GError *error = NULL;
- GtkListStore *store1, *store2;
- IdMatchData data;
-
- attrs = gck_object_get_finish (object, res, &error);
- if (!attrs) {
- /* No better idea than to just ignore the object. */
- g_warning ("Error getting attributes: %s\n", error->message);
- g_error_free (error);
- goto out;
- }
-
- if (!gck_attributes_find_ulong (attrs, CKA_CLASS, &cka_class)) {
- g_warning ("An object without CKA_CLASS\n");
- goto out;
- }
-
- switch (cka_class) {
- case CKO_CERTIFICATE:
- store1 = priv->cert_store;
- store2 = priv->key_store;
- break;
- case CKO_PRIVATE_KEY:
- store1 = priv->key_store;
- store2 = priv->cert_store;
- break;
- default:
- goto out;
- }
-
- /* See if there's a matching object in another store. */
- data.attrs = attrs;
- data.has_key = FALSE;
- gtk_tree_model_foreach (GTK_TREE_MODEL (store2),
- id_match,
- &data);
-
- attr = gck_attributes_find (attrs, CKA_VALUE);
- if (attr && attr->value && attr->length) {
- cert = gcr_simple_certificate_new (attr->value, attr->length);
- label = gcr_certificate_get_subject_name (cert);
- issuer = gcr_certificate_get_issuer_name (cert);
- g_object_unref (cert);
- } else {
- attr = gck_attributes_find (attrs, CKA_LABEL);
- if (attr && attr->value && attr->length) {
- label = g_malloc (attr->length + 1);
- memcpy (label, attr->value, attr->length);
- label[attr->length] = '\0';
- } else {
- label = g_strdup (_("(Unknown)"));
- }
- issuer = g_memdup ("", 1);
- }
-
- gtk_list_store_append (store1, &iter);
- gtk_list_store_set (store1, &iter,
- COLUMN_LABEL, label,
- COLUMN_ISSUER, issuer,
- COLUMN_HAS_KEY, data.has_key,
- COLUMN_ATTRIBUTES, attrs,
- -1);
-
- g_free (label);
- g_free (issuer);
-
-out:
- if (attrs)
- gck_attributes_unref (attrs);
-}
-
-static void
-next_object (GObject *obj, GAsyncResult *res, gpointer user_data)
-{
- NMAPkcs11CertChooserDialog *self = NMA_PKCS11_CERT_CHOOSER_DIALOG (user_data);
- GckEnumerator *enm = GCK_ENUMERATOR (obj);
- GList *objects;
- GList *iter;
- GError *error = NULL;
-
- objects = gck_enumerator_next_finish (enm, res, &error);
- if (error) {
- /* No better idea than to just ignore the object. */
- g_warning ("Error getting object: %s", error->message);
- g_error_free (error);
- return;
- }
-
- for (iter = objects; iter; iter = iter->next) {
- GckObject *object = GCK_OBJECT (iter->data);
- const gulong attr_types[] = { CKA_ID, CKA_LABEL, CKA_ISSUER,
- CKA_VALUE, CKA_CLASS };
-
- gck_object_get_async (object, attr_types,
- sizeof(attr_types) / sizeof(attr_types[0]),
- NULL, object_details, self);
- }
-
- gck_list_unref_free (objects);
-}
-
-static void
-reload_slot (NMAPkcs11CertChooserDialog *self, GckSession *session)
-{
- NMAPkcs11CertChooserDialogPrivate *priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (self);
- GckEnumerator *enm;
-
- gtk_list_store_clear (priv->key_store);
- gtk_list_store_clear (priv->cert_store);
- enm = gck_session_enumerate_objects (session, gck_attributes_new_empty (GCK_INVALID));
- gck_enumerator_next_async (enm, -1, NULL, next_object, self);
-}
-
-static void
-logged_in (GObject *obj, GAsyncResult *res, gpointer user_data)
-{
- NMAPkcs11CertChooserDialog *self = NMA_PKCS11_CERT_CHOOSER_DIALOG (user_data);
- NMAPkcs11CertChooserDialogPrivate *priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (self);
- GckSession *session = GCK_SESSION (obj);
- GError *error = NULL;
-
- if (!gck_session_login_finish (session, res, &error)) {
- g_prefix_error (&error, _("Error logging in: "));
- gtk_label_set_label (priv->error_label, error->message);
- gtk_revealer_set_reveal_child (priv->error_revealer, TRUE);
- g_error_free (error);
- } else {
- gtk_revealer_set_reveal_child (priv->error_revealer, FALSE);
- gtk_widget_set_sensitive (priv->login_button, FALSE);
- reload_slot (self, session);
- g_clear_object (&session);
- }
-}
-
-static void
-session_opened (GObject *obj, GAsyncResult *res, gpointer user_data)
-{
- NMAPkcs11CertChooserDialog *self = NMA_PKCS11_CERT_CHOOSER_DIALOG (user_data);
- NMAPkcs11CertChooserDialogPrivate *priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (self);
- GckSession *session;
- GError *error = NULL;
-
- session = gck_slot_open_session_finish (priv->slot, res, &error);
- if (error) {
- g_prefix_error (&error, _("Error opening a session: "));
- gtk_label_set_label (priv->error_label, error->message);
- gtk_revealer_set_reveal_child (priv->error_revealer, TRUE);
- g_error_free (error);
- return;
- }
-
- if (priv->pin_value) {
- gck_session_login_async (session, CKU_USER,
- priv->pin_value, priv->pin_length,
- NULL, logged_in, self);
- } else {
- reload_slot (self, session);
- g_clear_object (&session);
- }
-}
-
-static void
-row_activated (GtkTreeView *tree_view, GtkTreePath *path,
- GtkTreeViewColumn *column, gpointer user_data)
-{
- if (gtk_window_activate_default (GTK_WINDOW (user_data)))
- return;
-}
-
-static void
-cursor_changed (GtkTreeView *tree_view, gpointer user_data)
-{
- NMAPkcs11CertChooserDialog *self = NMA_PKCS11_CERT_CHOOSER_DIALOG (user_data);
- gchar *uri;
-
- uri = nma_pkcs11_cert_chooser_dialog_get_uri (self);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_ACCEPT, uri != NULL);
- g_free (uri);
-}
-
-static void
-error_close (GtkInfoBar *bar, gint response_id, gpointer user_data)
-{
- NMAPkcs11CertChooserDialog *self = user_data;
- NMAPkcs11CertChooserDialogPrivate *priv = self->priv;
-
- gtk_revealer_set_reveal_child (priv->error_revealer, FALSE);
-}
-
-static void
-login_clicked (GtkButton *button, gpointer user_data)
-{
- NMAPkcs11CertChooserDialog *self = NMA_PKCS11_CERT_CHOOSER_DIALOG (user_data);
- NMAPkcs11CertChooserDialogPrivate *priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (self);
- GtkWidget *dialog;
- GckTokenInfo *token_info;
- gboolean has_pin_pad = FALSE;
-
- /* See if the token has a PIN pad. */
- token_info = gck_slot_get_token_info (priv->slot);
- g_return_if_fail (token_info);
- if (token_info->flags & CKF_PROTECTED_AUTHENTICATION_PATH)
- has_pin_pad = TRUE;
- gck_token_info_free (token_info);
-
- if (priv->pin_value)
- g_free (priv->pin_value);
-
- if (has_pin_pad) {
- /* Login with empty credentials makes the token
- * log in on its PIN pad. */
- priv->pin_length = 0;
- priv->pin_value = g_memdup ("", 1);
- priv->remember_pin = TRUE;
- gck_slot_open_session_async (priv->slot, GCK_SESSION_READ_ONLY, NULL, session_opened, self);
- return;
- }
-
- /* The token doesn't have a PIN pad. Ask for PIN. */
- dialog = nma_pkcs11_token_login_dialog_new (priv->slot);
- gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (self));
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
-
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
- priv->pin_length = nma_pkcs11_token_login_dialog_get_pin_length (NMA_PKCS11_TOKEN_LOGIN_DIALOG (dialog));
- priv->pin_value = g_memdup (nma_pkcs11_token_login_dialog_get_pin_value (NMA_PKCS11_TOKEN_LOGIN_DIALOG (dialog)),
- priv->pin_length + 1);
- priv->remember_pin = nma_pkcs11_token_login_dialog_get_remember_pin (NMA_PKCS11_TOKEN_LOGIN_DIALOG (dialog));
- gck_slot_open_session_async (priv->slot, GCK_SESSION_READ_ONLY, NULL, session_opened, self);
- }
-
- gtk_widget_destroy (dialog);
-}
-
-static void
-get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- NMAPkcs11CertChooserDialog *self = NMA_PKCS11_CERT_CHOOSER_DIALOG (object);
- NMAPkcs11CertChooserDialogPrivate *priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (self);
-
- switch (prop_id) {
- case PROP_SLOT:
- if (priv->slot)
- g_value_set_object (value, priv->slot);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
-}
-
-static void
-set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- NMAPkcs11CertChooserDialog *self = NMA_PKCS11_CERT_CHOOSER_DIALOG (object);
- NMAPkcs11CertChooserDialogPrivate *priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (self);
- GckTokenInfo *token_info;
-
- switch (prop_id) {
- case PROP_SLOT:
- priv->slot = g_value_dup_object (value);
- token_info = gck_slot_get_token_info (priv->slot);
- g_return_if_fail (token_info);
- if ((token_info->flags & CKF_LOGIN_REQUIRED) == 0)
- gtk_widget_set_sensitive (priv->login_button, FALSE);
- gck_token_info_free (token_info);
- gck_slot_open_session_async (priv->slot, GCK_SESSION_READ_ONLY, NULL, session_opened, self);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
-}
-
-static void
-finalize (GObject *object)
-{
- NMAPkcs11CertChooserDialog *self = NMA_PKCS11_CERT_CHOOSER_DIALOG (object);
- NMAPkcs11CertChooserDialogPrivate *priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (self);
-
- g_clear_object (&priv->cert_store);
- g_clear_object (&priv->key_store);
- g_clear_object (&priv->slot);
-
- if (priv->pin_value) {
- g_free (priv->pin_value);
- priv->pin_value = NULL;
- }
-
- G_OBJECT_CLASS (nma_pkcs11_cert_chooser_dialog_parent_class)->finalize (object);
-}
-
-static void
-nma_pkcs11_cert_chooser_dialog_class_init (NMAPkcs11CertChooserDialogClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- object_class->get_property = get_property;
- object_class->set_property = set_property;
- object_class->finalize = finalize;
-
- g_object_class_install_property (object_class, PROP_SLOT,
- g_param_spec_object ("slot", "PKCS#11 Slot", "PKCS#11 Slot",
- GCK_TYPE_SLOT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- gtk_widget_class_set_template_from_resource (widget_class,
- "/org/freedesktop/network-manager-applet/nma-pkcs11-cert-chooser-dialog.ui");
-
- gtk_widget_class_bind_template_child_private (widget_class, NMAPkcs11CertChooserDialog, objects_view);
- gtk_widget_class_bind_template_child_private (widget_class, NMAPkcs11CertChooserDialog, list_name_column);
- gtk_widget_class_bind_template_child_private (widget_class, NMAPkcs11CertChooserDialog, list_name_renderer);
- gtk_widget_class_bind_template_child_private (widget_class, NMAPkcs11CertChooserDialog, list_issued_by_column);
- gtk_widget_class_bind_template_child_private (widget_class, NMAPkcs11CertChooserDialog, list_issued_by_renderer);
- gtk_widget_class_bind_template_child_private (widget_class, NMAPkcs11CertChooserDialog, error_revealer);
- gtk_widget_class_bind_template_child_private (widget_class, NMAPkcs11CertChooserDialog, error_label);
- gtk_widget_class_bind_template_child_private (widget_class, NMAPkcs11CertChooserDialog, login_button);
-
- gtk_widget_class_bind_template_callback (widget_class, row_activated);
- gtk_widget_class_bind_template_callback (widget_class, cursor_changed);
- gtk_widget_class_bind_template_callback (widget_class, error_close);
- gtk_widget_class_bind_template_callback (widget_class, login_clicked);
-}
-
-static void
-nma_pkcs11_cert_chooser_dialog_init (NMAPkcs11CertChooserDialog *self)
-{
- NMAPkcs11CertChooserDialogPrivate *priv;
-
- self->priv = nma_pkcs11_cert_chooser_dialog_get_instance_private (self);
- priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (self);
-
- gtk_widget_init_template (GTK_WIDGET (self));
-
- gtk_tree_view_column_set_attributes (priv->list_name_column,
- priv->list_name_renderer,
- "text", 0, NULL);
- gtk_tree_view_column_set_attributes (priv->list_issued_by_column,
- priv->list_issued_by_renderer,
- "text", 1, NULL);
-
- priv->cert_store = gtk_list_store_new (N_COLUMNS,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_BOOLEAN,
- GCK_TYPE_ATTRIBUTES);
- priv->key_store = gtk_list_store_new (N_COLUMNS,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_BOOLEAN,
- GCK_TYPE_ATTRIBUTES);
-}
-
-static GtkWidget *
-nma_pkcs11_cert_chooser_dialog_new_valist (GckSlot *slot,
- CK_OBJECT_CLASS object_class,
- const gchar *title, GtkWindow *parent,
- GtkDialogFlags flags,
- const gchar *first_button_text,
- va_list varargs)
-{
- NMAPkcs11CertChooserDialogPrivate *priv;
- GtkWidget *self;
- const char *button_text = first_button_text;
- gint response_id;
-
- self = g_object_new (NMA_TYPE_PKCS11_CERT_CHOOSER_DIALOG,
- "use-header-bar", !!(flags & GTK_DIALOG_USE_HEADER_BAR),
- "title", title,
- "slot", slot,
- NULL);
-
- priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (self);
- switch (object_class) {
- case CKO_CERTIFICATE:
- gtk_tree_view_set_model (GTK_TREE_VIEW (priv->objects_view),
- GTK_TREE_MODEL (priv->cert_store));
- break;
- case CKO_PRIVATE_KEY:
- gtk_tree_view_set_model (GTK_TREE_VIEW (priv->objects_view),
- GTK_TREE_MODEL (priv->key_store));
- break;
- default:
- g_warn_if_reached ();
- }
-
- if (parent)
- gtk_window_set_transient_for (GTK_WINDOW (self), parent);
-
- while (button_text) {
- response_id = va_arg (varargs, gint);
- gtk_dialog_add_button (GTK_DIALOG (self), button_text, response_id);
- button_text = va_arg (varargs, const gchar *);
- }
-
- gtk_dialog_set_default_response (GTK_DIALOG (self), GTK_RESPONSE_ACCEPT);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_ACCEPT, FALSE);
-
- return self;
-}
-
-/**
- * nma_pkcs11_cert_chooser_dialog_get_uri:
- * @dialog: the #NMAPkcs11CertChooserDialog instance
- *
- * Obtain the URI of the selected obejct.
- *
- * Returns: the URI or %NULL if none was selected.
- */
-gchar *
-nma_pkcs11_cert_chooser_dialog_get_uri (NMAPkcs11CertChooserDialog *dialog)
-{
- NMAPkcs11CertChooserDialogPrivate *priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (dialog);
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreeIter iter;
- GckAttributes *attrs;
- gboolean has_key;
- GckBuilder *builder;
- GckUriData uri_data = { 0, };
- gchar *uri;
-
- gtk_tree_view_get_cursor (priv->objects_view, &path, NULL);
- if (path == NULL)
- return NULL;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->objects_view));
- if (!gtk_tree_model_get_iter (model, &iter, path))
- g_return_val_if_reached (NULL);
-
- gtk_tree_model_get (model, &iter,
- COLUMN_HAS_KEY, &has_key,
- COLUMN_ATTRIBUTES, &attrs, -1);
-
- builder = gck_builder_new (GCK_BUILDER_NONE);
- if (has_key) {
- /* We do have a object with matching id in the other store (a key)
- * but its other properties (label) may be unset or missing.
- * Still, we want an URI that matches both. */
- gck_builder_add_only (builder, attrs, CKA_ID, GCK_INVALID);
- } else {
- gck_builder_add_all (builder, attrs);
- }
-
- uri_data.attributes = gck_builder_end (builder);
- uri_data.token_info = gck_slot_get_token_info (priv->slot);
- uri = gck_uri_build (&uri_data, GCK_URI_FOR_OBJECT_ON_TOKEN);
-
- gck_attributes_unref (uri_data.attributes);
- gck_attributes_unref (attrs);
-
- return uri;
-}
-
-/**
- * nma_pkcs11_cert_chooser_dialog_get_pin:
- * @dialog: the #NMAPkcs11CertChooserDialog instance
- *
- * Obtain the PIN that was used to unlock the token.
- *
- * Returns: the PIN, %NULL if the token was not logged into or an emtpy
- * string ("") if the protected authentication path was used.
- */
-gchar *
-nma_pkcs11_cert_chooser_dialog_get_pin (NMAPkcs11CertChooserDialog *dialog)
-{
- NMAPkcs11CertChooserDialogPrivate *priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (dialog);
-
- return g_strdup ((gchar *) priv->pin_value);
-}
-
-/**
- * nma_pkcs11_cert_chooser_dialog_get_remember_pin:
- * @dialog: the #NMAPkcs11CertChooserDialog instance
- *
- * Obtain the value of the "Remember PIN" checkbox during the token login.
- *
- * Returns: TRUE if the user chose to remember the PIN, FALSE
- * if not or if the tokin was not logged into at all.
- */
-gboolean
-nma_pkcs11_cert_chooser_dialog_get_remember_pin (NMAPkcs11CertChooserDialog *dialog)
-{
- NMAPkcs11CertChooserDialogPrivate *priv = NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_PRIVATE (dialog);
-
- return priv->remember_pin;
-}
-
-/**
- * nma_pkcs11_cert_chooser_dialog_new:
- * @slot: the PKCS\#11 slot the token is in
- * @object_class: CKA_CLASS of object to be selected
- * @title: The dialog window title
- * @parent: (allow-none): The parent window or %NULL
- * @flags: The dialog flags
- * @first_button_text: (allow-none): The text of the first button
- * @...: response ID for the first button, texts and response ids for other buttons, terminated with %NULL
- *
- * Creates the new #NMAPkcs11CertChooserDialog.
- *
- * Returns: newly created #NMAPkcs11CertChooserDialog
- */
-
-GtkWidget *
-nma_pkcs11_cert_chooser_dialog_new (GckSlot *slot,
- CK_OBJECT_CLASS object_class,
- const gchar *title,
- GtkWindow *parent,
- GtkDialogFlags flags,
- const gchar *first_button_text,
- ...)
-{
- GtkWidget *result;
- va_list varargs;
-
- va_start (varargs, first_button_text);
- result = nma_pkcs11_cert_chooser_dialog_new_valist (slot,
- object_class,
- title,
- parent,
- flags,
- first_button_text,
- varargs);
- va_end (varargs);
-
- return result;
-}
diff --git a/src/libnma/nma-pkcs11-cert-chooser-dialog.h b/src/libnma/nma-pkcs11-cert-chooser-dialog.h
deleted file mode 100644
index ced388ab..00000000
--- a/src/libnma/nma-pkcs11-cert-chooser-dialog.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2016,2017 Red Hat, Inc.
- */
-
-#ifndef __NMA_PKCS11_CERT_CHOOSER_DIALOG_H__
-#define __NMA_PKCS11_CERT_CHOOSER_DIALOG_H__
-
-#include <gtk/gtk.h>
-#include <gck/gck.h>
-
-typedef struct _NMAPkcs11CertChooserDialogPrivate NMAPkcs11CertChooserDialogPrivate;
-
-typedef struct {
- GtkDialog parent;
- NMAPkcs11CertChooserDialogPrivate *priv;
-} NMAPkcs11CertChooserDialog;
-
-typedef struct {
- GtkDialogClass parent;
-} NMAPkcs11CertChooserDialogClass;
-
-#define NMA_TYPE_PKCS11_CERT_CHOOSER_DIALOG (nma_pkcs11_cert_chooser_dialog_get_type ())
-#define NMA_PKCS11_CERT_CHOOSER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_PKCS11_CERT_CHOOSER_DIALOG, NMAPkcs11CertChooserDialog))
-#define NMA_PKCS11_CERT_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_PKCS11_CERT_CHOOSER_DIALOG, NMAPkcs11CertChooserDialogClass))
-#define NMA_IS_PKCS11_CERT_CHOOSER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_PKCS11_CERT_CHOOSER_DIALOG))
-#define NMA_IS_PKCS11_CERT_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_PKCS11_CERT_CHOOSER_DIALOG))
-#define NMA_PKCS11_CERT_CHOOSER_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_PKCS11_CERT_CHOOSER_DIALOG, NMAPkcs11CertChooserDialogClass))
-
-GType nma_pkcs11_cert_chooser_dialog_get_type (void);
-
-GtkWidget *nma_pkcs11_cert_chooser_dialog_new (GckSlot *slot,
- CK_OBJECT_CLASS object_class,
- const gchar *title,
- GtkWindow *parent,
- GtkDialogFlags flags,
- const gchar *first_button_text,
- ...);
-
-gchar *nma_pkcs11_cert_chooser_dialog_get_uri (NMAPkcs11CertChooserDialog *dialog);
-
-gchar *nma_pkcs11_cert_chooser_dialog_get_pin (NMAPkcs11CertChooserDialog *dialog);
-
-gboolean nma_pkcs11_cert_chooser_dialog_get_remember_pin (NMAPkcs11CertChooserDialog *dialog);
-
-#endif /* __NMA_PKCS11_CERT_CHOOSER_DIALOG_H__ */
diff --git a/src/libnma/nma-pkcs11-cert-chooser-dialog.ui b/src/libnma/nma-pkcs11-cert-chooser-dialog.ui
deleted file mode 100644
index 3141dba8..00000000
--- a/src/libnma/nma-pkcs11-cert-chooser-dialog.ui
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
-<interface domain="gtk30">
- <requires lib="gtk+" version="3.10"/>
- <template class="NMAPkcs11CertChooserDialog" parent="GtkDialog">
- <property name="can_focus">False</property>
- <property name="role">NMAPkcs11CertChooserDialog</property>
- <property name="type_hint">dialog</property>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area1">
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="login_button">
- <property name="label" translatable="yes">_Unlock token</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- <signal name="clicked" handler="login_clicked" swapped="no"/>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkRevealer" id="error_revealer">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkInfoBar" id="error_bar">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="message_type">error</property>
- <property name="show_close_button">True</property>
- <signal name="response" handler="error_close" swapped="no"/>
- <child internal-child="action_area">
- <object class="GtkButtonBox">
- <property name="can_focus">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child internal-child="content_area">
- <object class="GtkBox">
- <property name="can_focus">False</property>
- <child>
- <object class="GtkLabel" id="error_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow">
- <property name="width_request">300</property>
- <property name="height_request">200</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hscrollbar_policy">never</property>
- <child>
- <object class="GtkTreeView" id="objects_view">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="enable_search">False</property>
- <signal name="cursor-changed" handler="cursor_changed" swapped="no"/>
- <signal name="row-activated" handler="row_activated" swapped="no"/>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="objects_view_selection"/>
- </child>
- <child>
- <object class="GtkTreeViewColumn" id="list_name_column">
- <property name="title" translatable="yes">Name</property>
- <child>
- <object class="GtkCellRendererText" id="list_name_renderer">
- <property name="xpad">6</property>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkTreeViewColumn" id="list_issued_by_column">
- <property name="title" translatable="yes">Issued By</property>
- <child>
- <object class="GtkCellRendererText" id="list_issued_by_renderer">
- <property name="xpad">6</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </template>
-</interface>
diff --git a/src/libnma/nma-pkcs11-cert-chooser.c b/src/libnma/nma-pkcs11-cert-chooser.c
deleted file mode 100644
index 8e45138e..00000000
--- a/src/libnma/nma-pkcs11-cert-chooser.c
+++ /dev/null
@@ -1,559 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2017,2018 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-#include "nma-private.h"
-#include "nma-cert-chooser-private.h"
-#include "nma-cert-chooser-button.h"
-#include "nma-ui-utils.h"
-#include "utils.h"
-
-#include <glib/gstdio.h>
-#include <gck/gck.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-
-#define NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE(self) (&(_NM_GET_PRIVATE (self, NMACertChooser, NMA_IS_CERT_CHOOSER)->_sub.pkcs11))
-
-static void
-set_key_password (NMACertChooser *cert_chooser, const gchar *password)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- g_return_if_fail (priv->key_password != NULL);
- if (password)
- gtk_editable_set_text (GTK_EDITABLE (priv->key_password), password);
-}
-
-static const gchar *
-get_key_password (NMACertChooser *cert_chooser)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
- const gchar *text;
-
- g_return_val_if_fail (priv->key_password != NULL, NULL);
- text = gtk_editable_get_text (GTK_EDITABLE (priv->key_password));
-
- return text && text[0] ? text : NULL;
-}
-
-static void
-set_key_uri (NMACertChooser *cert_chooser, const gchar *uri)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- gtk_widget_set_sensitive (priv->key_button, TRUE);
- gtk_widget_set_sensitive (priv->key_button_label, TRUE);
- gtk_widget_set_sensitive (priv->key_password, TRUE);
- gtk_widget_set_sensitive (priv->key_password_label, TRUE);
- gtk_widget_show (priv->key_password);
- gtk_widget_show (priv->key_password_label);
- gtk_widget_show (priv->show_password);
- nma_cert_chooser_button_set_uri (NMA_CERT_CHOOSER_BUTTON (priv->key_button), uri);
-}
-
-static gchar *
-get_key_uri (NMACertChooser *cert_chooser)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- return g_strdup (nma_cert_chooser_button_get_uri (NMA_CERT_CHOOSER_BUTTON (priv->key_button)));
-}
-
-static void
-set_cert_password (NMACertChooser *cert_chooser, const gchar *password)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- g_return_if_fail (priv->cert_password != NULL);
- if (password)
- gtk_editable_set_text (GTK_EDITABLE (priv->cert_password), password);
-}
-
-static const gchar *
-get_cert_password (NMACertChooser *cert_chooser)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
- const gchar *text;
-
- g_return_val_if_fail (priv->cert_password != NULL, NULL);
- text = gtk_editable_get_text (GTK_EDITABLE (priv->cert_password));
-
- return text && text[0] ? text : NULL;
-}
-
-static void
-set_cert_uri (NMACertChooser *cert_chooser, const gchar *uri)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- if (g_str_has_prefix (uri, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH)) {
- gtk_widget_set_sensitive (priv->cert_password, FALSE);
- gtk_widget_set_sensitive (priv->cert_password_label, FALSE);
- } else if (g_str_has_prefix (uri, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PKCS11)) {
- gtk_widget_set_sensitive (priv->cert_password, TRUE);
- gtk_widget_set_sensitive (priv->cert_password_label, TRUE);
- gtk_widget_show (priv->cert_password);
- gtk_widget_show (priv->cert_password_label);
- gtk_widget_show (priv->show_password);
- } else {
- g_warning ("The certificate '%s' uses an unknown scheme\n", uri);
- return;
- }
-
- nma_cert_chooser_button_set_uri (NMA_CERT_CHOOSER_BUTTON (priv->cert_button), uri);
-}
-
-static gchar *
-get_cert_uri (NMACertChooser *cert_chooser)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- return g_strdup (nma_cert_chooser_button_get_uri (NMA_CERT_CHOOSER_BUTTON (priv->cert_button)));
-}
-
-static void
-add_to_size_group (NMACertChooser *cert_chooser, GtkSizeGroup *group)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- gtk_size_group_add_widget (group, priv->cert_button_label);
- gtk_size_group_add_widget (group, priv->cert_password_label);
- gtk_size_group_add_widget (group, priv->key_button_label);
- gtk_size_group_add_widget (group, priv->key_password_label);
-}
-
-static gboolean
-validate (NMACertChooser *cert_chooser, GError **error)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
- GError *local = NULL;
-
- if (!nma_cert_chooser_button_get_uri (NMA_CERT_CHOOSER_BUTTON (priv->cert_button))) {
- g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("No certificate set"));
- return FALSE;
- }
-
- g_signal_emit_by_name (cert_chooser, "cert-validate", &local);
- if (local) {
- widget_set_error (priv->cert_button);
- g_propagate_error (error, local);
- return FALSE;
- } else {
- widget_unset_error (priv->cert_button);
- }
-
- g_signal_emit_by_name (cert_chooser, "cert-password-validate", &local);
- if (local) {
- widget_set_error (priv->cert_password);
- g_propagate_error (error, local);
- return FALSE;
- } else {
- widget_unset_error (priv->cert_password);
- }
-
- if (gtk_widget_get_visible (priv->key_button)) {
- if (!nma_cert_chooser_button_get_uri (NMA_CERT_CHOOSER_BUTTON (priv->cert_button))) {
- g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("No key set"));
- return FALSE;
- }
-
- g_signal_emit_by_name (cert_chooser, "key-validate", &local);
- if (local) {
- widget_set_error (priv->key_button);
- g_propagate_error (error, local);
- return FALSE;
- } else {
- widget_unset_error (priv->key_button);
- }
-
- g_signal_emit_by_name (cert_chooser, "key-password-validate", &local);
- if (local) {
- widget_set_error (priv->key_password);
- g_propagate_error (error, local);
- return FALSE;
- } else {
- widget_unset_error (priv->key_password);
- }
- }
-
- return TRUE;
-}
-
-static void
-setup_key_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- nma_utils_setup_password_storage (priv->key_password,
- initial_flags,
- setting,
- password_flags_name,
- with_not_required,
- ask_mode);
-}
-
-static void
-update_key_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- nma_utils_update_password_storage (priv->key_password,
- secret_flags,
- setting,
- password_flags_name);
-}
-
-static NMSettingSecretFlags
-get_key_password_flags (NMACertChooser *cert_chooser)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- return nma_utils_menu_to_secret_flags (priv->key_password);
-}
-
-static void
-setup_cert_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- nma_utils_setup_password_storage (priv->cert_password,
- initial_flags,
- setting,
- password_flags_name,
- with_not_required,
- ask_mode);
-}
-
-static void
-update_cert_password_storage (NMACertChooser *cert_chooser,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- nma_utils_update_password_storage (priv->cert_password,
- secret_flags,
- setting,
- password_flags_name);
-}
-
-static NMSettingSecretFlags
-get_cert_password_flags (NMACertChooser *cert_chooser)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- return nma_utils_menu_to_secret_flags (priv->cert_password);
-}
-
-static void
-cert_changed_cb (NMACertChooserButton *button, gpointer user_data)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (NMA_CERT_CHOOSER (user_data));
- GckUriData *uri_data;
- gchar *pin = NULL;
- const gchar *uri;
-
- uri = nma_cert_chooser_button_get_uri (button);
- if (!uri)
- return;
- uri_data = gck_uri_parse (uri, GCK_URI_FOR_OBJECT, NULL);
-
- if (nma_cert_chooser_button_get_remember_pin (button))
- pin = nma_cert_chooser_button_get_pin (button);
- if (pin)
- gtk_editable_set_text (GTK_EDITABLE (priv->cert_password), pin);
-
- gtk_widget_set_sensitive (priv->cert_password, uri_data != NULL);
- gtk_widget_set_sensitive (priv->cert_password_label, uri_data != NULL);
-
- if (!gtk_widget_get_sensitive (priv->key_button)) {
- gtk_widget_set_sensitive (priv->key_button, TRUE);
- gtk_widget_set_sensitive (priv->key_button_label, TRUE);
-
- if (uri_data) {
- /* URI that is good both for a certificate and for a key. */
- if (!gck_attributes_find (uri_data->attributes, CKA_CLASS)) {
- nma_cert_chooser_button_set_uri (NMA_CERT_CHOOSER_BUTTON (priv->key_button), uri);
- gtk_widget_set_sensitive (priv->key_password, TRUE);
- gtk_widget_set_sensitive (priv->key_password_label, TRUE);
- if (pin)
- gtk_editable_set_text (GTK_EDITABLE (priv->key_password), pin);
- }
- }
- }
-
- if (uri_data)
- gck_uri_data_free (uri_data);
- if (pin)
- g_free (pin);
-
- g_signal_emit_by_name (user_data, "changed");
-}
-
-static void
-key_changed_cb (NMACertChooserButton *button, gpointer user_data)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (NMA_CERT_CHOOSER (user_data));
- gchar *pin = NULL;
-
- if (nma_cert_chooser_button_get_remember_pin (button))
- pin = nma_cert_chooser_button_get_pin (button);
- if (pin) {
- gtk_editable_set_text (GTK_EDITABLE (priv->key_password), pin);
- g_free (pin);
- }
-
- gtk_widget_set_sensitive (priv->key_password, TRUE);
- gtk_widget_set_sensitive (priv->key_password_label, TRUE);
- g_signal_emit_by_name (user_data, "changed");
-}
-
-static void
-key_password_changed_cb (GtkEntry *entry, gpointer user_data)
-{
- g_signal_emit_by_name (user_data, "changed");
-}
-
-static void
-cert_password_changed_cb (GtkEntry *entry, gpointer user_data)
-{
- g_signal_emit_by_name (user_data, "changed");
-}
-
-
-static void
-show_toggled_cb (GtkCheckButton *button, gpointer user_data)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (NMA_CERT_CHOOSER (user_data));
- gboolean active;
-
- active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
- gtk_entry_set_visibility (GTK_ENTRY (priv->cert_password), active);
- if (priv->key_password)
- gtk_entry_set_visibility (GTK_ENTRY (priv->key_password), active);
-}
-
-static void
-set_title (NMACertChooser *cert_chooser, const gchar *title)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
- gs_free gchar *mnemonic_escaped = NULL;
- gchar *text;
- char **split;
-
- split = g_strsplit (title, "_", -1);
- mnemonic_escaped = g_strjoinv("__", split);
- g_strfreev (split);
-
- text = g_strdup_printf (_("Choose a key for %s Certificate"), title);
- nma_cert_chooser_button_set_title (NMA_CERT_CHOOSER_BUTTON (priv->key_button), text);
- g_free (text);
-
- text = g_strdup_printf (_("%s private _key"), mnemonic_escaped);
- gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->key_button_label), text);
- g_free (text);
-
- text = g_strdup_printf (_("%s key _password"), mnemonic_escaped);
- gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->key_password_label), text);
- g_free (text);
-
- text = g_strdup_printf (_("Choose a %s Certificate"), title);
- nma_cert_chooser_button_set_title (NMA_CERT_CHOOSER_BUTTON (priv->cert_button), text);
- g_free (text);
-
- text = g_strdup_printf (_("%s _certificate"), mnemonic_escaped);
- gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->cert_button_label), text);
- g_free (text);
-
- text = g_strdup_printf (_("%s certificate _password"), mnemonic_escaped);
- gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->cert_password_label), text);
- g_free (text);
-}
-
-static void
-set_flags (NMACertChooser *cert_chooser, NMACertChooserFlags flags)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- if (flags & NMA_CERT_CHOOSER_FLAG_CERT) {
- gtk_widget_hide (priv->key_button);
- gtk_widget_hide (priv->key_button_label);
- gtk_widget_hide (priv->key_password);
- gtk_widget_hide (priv->key_password_label);
- }
-
- if (flags & NMA_CERT_CHOOSER_FLAG_PASSWORDS) {
- gtk_widget_hide (priv->cert_button);
- gtk_widget_hide (priv->cert_button_label);
- gtk_widget_hide (priv->key_button);
- gtk_widget_hide (priv->key_button_label);
-
- /* With FLAG_PASSWORDS the user can't pick a different key or a
- * certificate, so there's no point in showing inactive password
- * inputs. */
- if (!gtk_widget_get_sensitive (priv->cert_password)) {
- gtk_widget_hide (priv->cert_password);
- gtk_widget_hide (priv->cert_password_label);
- }
- if (!gtk_widget_get_sensitive (priv->key_password)) {
- gtk_widget_hide (priv->key_password);
- gtk_widget_hide (priv->key_password_label);
- }
- if ( !gtk_widget_get_visible (priv->cert_password)
- && !gtk_widget_get_visible (priv->key_password)) {
- gtk_widget_hide (priv->show_password);
- }
- }
-}
-
-static void
-init (NMACertChooser *cert_chooser)
-{
- NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
-
- gtk_grid_insert_column (GTK_GRID (cert_chooser), 2);
- gtk_grid_set_row_spacing (GTK_GRID (cert_chooser), 6);
- gtk_grid_set_column_spacing (GTK_GRID (cert_chooser), 6);
-
- /* Show password */
- gtk_grid_insert_row (GTK_GRID (cert_chooser), 0);
- priv->show_password = gtk_check_button_new_with_mnemonic _("Sho_w passwords");
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->show_password, 1, 2, 1, 1);
- gtk_widget_show (priv->show_password);
- gtk_widget_set_no_show_all (priv->show_password, TRUE);
- g_signal_connect (priv->show_password, "toggled",
- G_CALLBACK (show_toggled_cb), cert_chooser);
-
- /* The key chooser */
- gtk_grid_insert_row (GTK_GRID (cert_chooser), 0);
-
- priv->key_button = nma_cert_chooser_button_new (NMA_CERT_CHOOSER_BUTTON_FLAG_KEY);
-
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->key_button, 1, 0, 1, 1);
- gtk_widget_set_hexpand (priv->key_button, TRUE);
- gtk_widget_set_sensitive (priv->key_button, FALSE);
- gtk_widget_show (priv->key_button);
- gtk_widget_set_no_show_all (priv->key_button, TRUE);
-
- g_signal_connect (priv->key_button, "changed",
- G_CALLBACK (key_changed_cb), cert_chooser);
-
- priv->key_button_label = gtk_label_new (NULL);
- g_object_set (priv->key_button_label, "xalign", (gfloat) 1, NULL);
- gtk_label_set_mnemonic_widget (GTK_LABEL (priv->key_button_label), priv->key_button);
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->key_button_label, 0, 0, 1, 1);
- gtk_widget_set_sensitive (priv->key_button_label, FALSE);
- gtk_widget_show (priv->key_button_label);
- gtk_widget_set_no_show_all (priv->key_button_label, TRUE);
-
- /* The key password entry */
- gtk_grid_insert_row (GTK_GRID (cert_chooser), 1);
-
- priv->key_password = gtk_entry_new ();
- gtk_entry_set_visibility (GTK_ENTRY (priv->key_password), FALSE);
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->key_password, 1, 1, 1, 1);
- gtk_widget_set_hexpand (priv->key_password, TRUE);
- gtk_widget_set_sensitive (priv->key_password, FALSE);
- gtk_widget_show (priv->key_password);
- gtk_widget_set_no_show_all (priv->key_password, TRUE);
-
- g_signal_connect (priv->key_password, "changed",
- G_CALLBACK (key_password_changed_cb), cert_chooser);
-
- priv->key_password_label = gtk_label_new (NULL);
- g_object_set (priv->key_password_label, "xalign", (gfloat) 1, NULL);
- gtk_label_set_mnemonic_widget (GTK_LABEL (priv->key_password_label), priv->key_password);
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->key_password_label, 0, 1, 1, 1);
- gtk_widget_set_sensitive (priv->key_password_label, FALSE);
- gtk_widget_show (priv->key_password_label);
- gtk_widget_set_no_show_all (priv->key_password_label, TRUE);
-
- /* The certificate chooser */
- gtk_grid_insert_row (GTK_GRID (cert_chooser), 0);
-
- priv->cert_button = nma_cert_chooser_button_new (NMA_CERT_CHOOSER_BUTTON_FLAG_NONE);
-
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->cert_button, 1, 0, 1, 1);
- gtk_widget_set_hexpand (priv->cert_button, TRUE);
- gtk_widget_show (priv->cert_button);
- gtk_widget_set_no_show_all (priv->cert_button, TRUE);
-
- g_signal_connect (priv->cert_button, "changed",
- G_CALLBACK (cert_changed_cb), cert_chooser);
-
- priv->cert_button_label = gtk_label_new (NULL);
- g_object_set (priv->cert_button_label, "xalign", (gfloat) 1, NULL);
- gtk_label_set_mnemonic_widget (GTK_LABEL (priv->cert_button_label), priv->cert_button);
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->cert_button_label, 0, 0, 1, 1);
- gtk_widget_show (priv->cert_button_label);
- gtk_widget_set_no_show_all (priv->cert_button_label, TRUE);
-
- /* The cert password entry */
- gtk_grid_insert_row (GTK_GRID (cert_chooser), 1);
-
- priv->cert_password = gtk_entry_new ();
- gtk_entry_set_visibility (GTK_ENTRY (priv->cert_password), FALSE);
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->cert_password, 1, 1, 1, 1);
- gtk_widget_set_hexpand (priv->cert_password, TRUE);
- gtk_widget_set_sensitive (priv->cert_password, FALSE);
- gtk_widget_show (priv->cert_password);
- gtk_widget_set_no_show_all (priv->cert_password, TRUE);
-
- g_signal_connect (priv->cert_password, "changed",
- G_CALLBACK (cert_password_changed_cb), cert_chooser);
-
- priv->cert_password_label = gtk_label_new (NULL);
- g_object_set (priv->cert_password_label, "xalign", (gfloat) 1, NULL);
- gtk_label_set_mnemonic_widget (GTK_LABEL (priv->cert_password_label), priv->cert_password);
- gtk_grid_attach (GTK_GRID (cert_chooser), priv->cert_password_label, 0, 1, 1, 1);
- gtk_widget_set_sensitive (priv->cert_password_label, FALSE);
- gtk_widget_show (priv->cert_password_label);
- gtk_widget_set_no_show_all (priv->cert_password_label, TRUE);
-}
-
-const NMACertChooserVtable nma_cert_chooser_vtable_pkcs11 = {
- .init = init,
-
- .set_title = set_title,
- .set_flags = set_flags,
- .set_cert_uri = set_cert_uri,
- .get_cert_uri = get_cert_uri,
-
- .set_cert_password = set_cert_password,
- .get_cert_password = get_cert_password,
- .set_key_uri = set_key_uri,
- .get_key_uri = get_key_uri,
- .set_key_password = set_key_password,
- .get_key_password = get_key_password,
-
- .add_to_size_group = add_to_size_group,
- .validate = validate,
-
- .setup_key_password_storage = setup_key_password_storage,
- .update_key_password_storage = update_key_password_storage,
- .get_key_password_flags = get_key_password_flags,
- .setup_cert_password_storage = setup_cert_password_storage,
- .update_cert_password_storage = update_cert_password_storage,
- .get_cert_password_flags = get_cert_password_flags,
-};
diff --git a/src/libnma/nma-pkcs11-token-login-dialog.c b/src/libnma/nma-pkcs11-token-login-dialog.c
deleted file mode 100644
index f141ce74..00000000
--- a/src/libnma/nma-pkcs11-token-login-dialog.c
+++ /dev/null
@@ -1,236 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2016,2017 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-#include "nma-pkcs11-token-login-dialog.h"
-
-#include <gck/gck.h>
-
-/**
- * SECTION:nma-pkcs11-token-login-dialog
- * @title: NMAPkcs11TokenLoginDialog
- * @short_description: The PKCS\#11 PIN Dialog
- * @see_also: #GcrObjectChooserDialog
- *
- * #NMAPkcs11TokenLoginDialog asks for the PKCS\#11 login PIN.
- * It enforces the PIN constrains (maximum & minimum length).
- *
- * Used by the #GcrObjectChooserDialog when the #GcrTokensSidebar indicates
- * that the user requested the token to be logged in.
- */
-
-struct _NMAPkcs11TokenLoginDialogPrivate
-{
- GckSlot *slot;
- GckTokenInfo *info;
-
- GtkEntry *pin_entry;
- GtkCheckButton *remember;
-};
-
-G_DEFINE_TYPE_WITH_CODE (NMAPkcs11TokenLoginDialog, nma_pkcs11_token_login_dialog, GTK_TYPE_DIALOG,
- G_ADD_PRIVATE (NMAPkcs11TokenLoginDialog));
-
-enum
-{
- PROP_0,
- PROP_TOKEN_SLOT,
-};
-
-/**
- * nma_pkcs11_token_login_dialog_get_pin_value:
- * @self: The #NMAPkcs11TokenLoginDialog
- *
- * Returns: the entered PIN
- */
-
-const guchar *
-nma_pkcs11_token_login_dialog_get_pin_value (NMAPkcs11TokenLoginDialog *self)
-{
- NMAPkcs11TokenLoginDialogPrivate *priv = self->priv;
- GtkEntryBuffer *buffer = gtk_entry_get_buffer (priv->pin_entry);
-
- return (guchar *) gtk_entry_buffer_get_text (buffer);
-}
-
-/**
- * nma_pkcs11_token_login_dialog_get_pin_length:
- * @self: The #NMAPkcs11TokenLoginDialog
- *
- * Returns: the PIN length
- */
-
-gulong
-nma_pkcs11_token_login_dialog_get_pin_length (NMAPkcs11TokenLoginDialog *self)
-{
- NMAPkcs11TokenLoginDialogPrivate *priv = self->priv;
- GtkEntryBuffer *buffer = gtk_entry_get_buffer (priv->pin_entry);
-
- return gtk_entry_buffer_get_bytes (buffer);
-}
-
-/**
- * nma_pkcs11_token_login_dialog_get_remember_pin:
- * @self: The #NMAPkcs11TokenLoginDialog
- *
- * Returns: %TRUE if the "Remember PIN" checkbox was checked
- */
-
-gboolean
-nma_pkcs11_token_login_dialog_get_remember_pin (NMAPkcs11TokenLoginDialog *self)
-{
- NMAPkcs11TokenLoginDialogPrivate *priv = self->priv;
-
- return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->remember));
-}
-
-static void
-get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- NMAPkcs11TokenLoginDialog *self = NMA_PKCS11_TOKEN_LOGIN_DIALOG (object);
- NMAPkcs11TokenLoginDialogPrivate *priv = self->priv;
-
- switch (prop_id) {
- case PROP_TOKEN_SLOT:
- if (priv->slot)
- g_value_set_object (value, priv->slot);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
-}
-
-static gboolean
-can_activate (NMAPkcs11TokenLoginDialog *self)
-{
- NMAPkcs11TokenLoginDialogPrivate *priv = self->priv;
- GtkEntryBuffer *buffer = gtk_entry_get_buffer (priv->pin_entry);
- guint len = gtk_entry_buffer_get_length (buffer);
-
- return len <= priv->info->max_pin_len && len >= priv->info->min_pin_len;
-}
-
-static void
-set_slot (NMAPkcs11TokenLoginDialog *self, GckSlot *slot)
-{
- NMAPkcs11TokenLoginDialogPrivate *priv = self->priv;
- gchar *title;
-
- g_clear_object (&priv->slot);
- if (priv->info)
- gck_token_info_free (priv->info);
-
- priv->slot = slot;
- priv->info = gck_slot_get_token_info (slot);
- g_return_if_fail (priv->info);
-
- title = g_strdup_printf (_("Enter %s PIN"), priv->info->label);
- gtk_window_set_title (GTK_WINDOW (self), title);
- g_free (title);
-
- gtk_entry_set_max_length (priv->pin_entry, priv->info->max_pin_len);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_ACCEPT,
- can_activate (self));
-}
-
-
-static void
-set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- NMAPkcs11TokenLoginDialog *self = NMA_PKCS11_TOKEN_LOGIN_DIALOG (object);
-
- switch (prop_id) {
- case PROP_TOKEN_SLOT:
- set_slot (self, g_value_dup_object (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
-}
-
-static void
-finalize (GObject *object)
-{
- NMAPkcs11TokenLoginDialog *self = NMA_PKCS11_TOKEN_LOGIN_DIALOG (object);
- NMAPkcs11TokenLoginDialogPrivate *priv = self->priv;
-
- g_clear_object (&priv->slot);
- if (priv->info) {
- gck_token_info_free (priv->info);
- priv->info = NULL;
- }
-
- G_OBJECT_CLASS (nma_pkcs11_token_login_dialog_parent_class)->finalize (object);
-}
-
-static void
-pin_changed (GtkEditable *editable, gpointer user_data)
-{
- gtk_dialog_set_response_sensitive (GTK_DIALOG (user_data), GTK_RESPONSE_ACCEPT,
- can_activate (NMA_PKCS11_TOKEN_LOGIN_DIALOG (user_data)));
-}
-
-
-static void
-pin_activate (GtkEditable *editable, gpointer user_data)
-{
- if (can_activate (NMA_PKCS11_TOKEN_LOGIN_DIALOG (user_data)))
- gtk_dialog_response (GTK_DIALOG (user_data), GTK_RESPONSE_ACCEPT);
-}
-
-static void
-nma_pkcs11_token_login_dialog_class_init (NMAPkcs11TokenLoginDialogClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- object_class->get_property = get_property;
- object_class->set_property = set_property;
- object_class->finalize = finalize;
-
- /**
- * NMAPkcs11TokenLoginDialog::token-slot:
- *
- * Slot that contains the pin for which the dialog requests
- * the PIN.
- */
- g_object_class_install_property (object_class, PROP_TOKEN_SLOT,
- g_param_spec_object ("token-slot", "Slot", "Slot containing the Token",
- GCK_TYPE_SLOT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/network-manager-applet/nma-pkcs11-token-login-dialog.ui");
- gtk_widget_class_bind_template_child_private (widget_class, NMAPkcs11TokenLoginDialog, pin_entry);
- gtk_widget_class_bind_template_child_private (widget_class, NMAPkcs11TokenLoginDialog, remember);
- gtk_widget_class_bind_template_callback (widget_class, pin_changed);
- gtk_widget_class_bind_template_callback (widget_class, pin_activate);
-}
-
-static void
-nma_pkcs11_token_login_dialog_init (NMAPkcs11TokenLoginDialog *self)
-{
- self->priv = nma_pkcs11_token_login_dialog_get_instance_private (self);
-
- gtk_widget_init_template (GTK_WIDGET (self));
-}
-
-/**
- * nma_pkcs11_token_login_dialog_new:
- * @slot: Slot that contains the pin for which the dialog requests the PIN
- *
- * Creates the new PKCS\#11 login dialog.
- *
- * Returns: the newly created #NMAPkcs11TokenLoginDialog
- */
-GtkWidget *
-nma_pkcs11_token_login_dialog_new (GckSlot *slot)
-{
- return GTK_WIDGET (g_object_new (NMA_TYPE_PKCS11_TOKEN_LOGIN_DIALOG,
- "use-header-bar", TRUE,
- "token-slot", slot,
- NULL));
-}
diff --git a/src/libnma/nma-pkcs11-token-login-dialog.h b/src/libnma/nma-pkcs11-token-login-dialog.h
deleted file mode 100644
index fd8e602c..00000000
--- a/src/libnma/nma-pkcs11-token-login-dialog.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2017 Red Hat, Inc.
- */
-
-#ifndef __NMA_PKCS11_TOKEN_LOGIN_DIALOG_H__
-#define __NMA_PKCS11_TOKEN_LOGIN_DIALOG_H__
-
-#include <gtk/gtk.h>
-#include <gck/gck.h>
-
-typedef struct _NMAPkcs11TokenLoginDialogPrivate NMAPkcs11TokenLoginDialogPrivate;
-
-typedef struct {
- GtkDialog parent;
- NMAPkcs11TokenLoginDialogPrivate *priv;
-} NMAPkcs11TokenLoginDialog;
-
-typedef struct {
- GtkDialog parent;
-} NMAPkcs11TokenLoginDialogClass;
-
-#define NMA_TYPE_PKCS11_TOKEN_LOGIN_DIALOG (nma_pkcs11_token_login_dialog_get_type ())
-#define NMA_PKCS11_TOKEN_LOGIN_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_PKCS11_TOKEN_LOGIN_DIALOG, NMAPkcs11TokenLoginDialog))
-#define NMA_PKCS11_TOKEN_LOGIN_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_PKCS11_TOKEN_LOGIN_DIALOG, NMAPkcs11TokenLoginDialogClass))
-#define NMA_IS_PKCS11_TOKEN_LOGIN_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_PKCS11_TOKEN_LOGIN_DIALOG))
-#define NMA_IS_PKCS11_TOKEN_LOGIN_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_PKCS11_TOKEN_LOGIN_DIALOG))
-#define NMA_PKCS11_TOKEN_LOGIN_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_PKCS11_TOKEN_LOGIN_DIALOG, NMAPkcs11TokenLoginDialogClass))
-
-GType nma_pkcs11_token_login_dialog_get_type (void);
-
-GtkWidget *nma_pkcs11_token_login_dialog_new (GckSlot *slot);
-
-const guchar *nma_pkcs11_token_login_dialog_get_pin_value (NMAPkcs11TokenLoginDialog *self);
-
-gulong nma_pkcs11_token_login_dialog_get_pin_length (NMAPkcs11TokenLoginDialog *self);
-
-gboolean nma_pkcs11_token_login_dialog_get_remember_pin (NMAPkcs11TokenLoginDialog *self);
-
-#endif /* __NMA_PKCS11_TOKEN_LOGIN_DIALOG_H__ */
diff --git a/src/libnma/nma-pkcs11-token-login-dialog.ui b/src/libnma/nma-pkcs11-token-login-dialog.ui
deleted file mode 100644
index 147596b1..00000000
--- a/src/libnma/nma-pkcs11-token-login-dialog.ui
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
-<interface domain="nm-applet">
- <requires lib="gtk+" version="3.10"/>
- <template class="NMAPkcs11TokenLoginDialog" parent="GtkDialog">
- <property name="can_focus">False</property>
- <property name="type_hint">dialog</property>
- <child internal-child="vbox">
- <object class="GtkBox">
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox">
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="cancel">
- <property name="label" translatable="yes">_Cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="login">
- <property name="label" translatable="yes">_Login</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <property name="margin_top">12</property>
- <property name="margin_bottom">12</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkEntry" id="pin_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="visibility">False</property>
- <property name="input_purpose">password</property>
- <signal name="activate" handler="pin_activate" swapped="no"/>
- <signal name="changed" handler="pin_changed" swapped="no"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="padding">6</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="remember">
- <property name="label" translatable="yes">_Remember PIN</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="halign">start</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="padding">6</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-6">cancel</action-widget>
- <action-widget response="-3">login</action-widget>
- </action-widgets>
- </template>
-</interface>
diff --git a/src/libnma/nma-private.h b/src/libnma/nma-private.h
deleted file mode 100644
index 8470fbf3..00000000
--- a/src/libnma/nma-private.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Lubomir Rintel <lkundrak@v3.sk>
- *
- * Copyright (C) 2019 Red Hat, Inc.
- */
-
-#ifndef NMA_PRIVATE_H
-
-#if !GTK_CHECK_VERSION(3,96,0)
-#define gtk_editable_set_text(editable,text) gtk_entry_set_text(GTK_ENTRY(editable), (text))
-#define gtk_editable_get_text(editable) gtk_entry_get_text(GTK_ENTRY(editable))
-#define gtk_editable_set_width_chars(editable, n_chars) gtk_entry_set_width_chars(GTK_ENTRY(editable), (n_chars))
-#endif
-
-void nma_gtk_widget_activate_default (GtkWidget *widget);
-
-#define NMA_PRIVATE_H
-
-#endif /* NMA_PRIVATE_H */
diff --git a/src/libnma/nma-ui-utils.c b/src/libnma/nma-ui-utils.c
deleted file mode 100644
index d36638ad..00000000
--- a/src/libnma/nma-ui-utils.c
+++ /dev/null
@@ -1,432 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright 2015 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-#include "nma-private.h"
-
-#include <string.h>
-
-#include "nma-ui-utils.h"
-
-/*---------------------------------------------------------------------------*/
-/* Password storage icon */
-
-#define PASSWORD_STORAGE_MENU_TAG "password-storage-menu"
-#define MENU_WITH_NOT_REQUIRED_TAG "menu-with-not-required"
-#define ASK_MODE_TAG "ask-mode"
-
-typedef enum {
- ITEM_STORAGE_USER = 0,
- ITEM_STORAGE_SYSTEM = 1,
- ITEM_STORAGE_ASK = 2,
- ITEM_STORAGE_UNUSED = 3,
- __ITEM_STORAGE_MAX,
- ITEM_STORAGE_MAX = __ITEM_STORAGE_MAX - 1,
-} MenuItem;
-
-static const char *icon_name_table[ITEM_STORAGE_MAX + 1] = {
- [ITEM_STORAGE_USER] = "user-info-symbolic",
- [ITEM_STORAGE_SYSTEM] = "system-users-symbolic",
- [ITEM_STORAGE_ASK] = "dialog-question-symbolic",
- [ITEM_STORAGE_UNUSED] = "edit-clear-all-symbolic",
-};
-static const char *icon_desc_table[ITEM_STORAGE_MAX + 1] = {
- [ITEM_STORAGE_USER] = N_("Store the password only for this user"),
- [ITEM_STORAGE_SYSTEM] = N_("Store the password for all users"),
- [ITEM_STORAGE_ASK] = N_("Ask for this password every time"),
- [ITEM_STORAGE_UNUSED] = N_("The password is not required"),
-};
-
-static void
-g_free_str0 (gpointer mem)
-{
- /* g_free a char pointer and set it to 0 before (for passwords). */
- if (mem) {
- char *p = mem;
- memset (p, 0, strlen (p));
- g_free (p);
- }
-}
-
-static void
-change_password_storage_icon (GtkWidget *passwd_entry, MenuItem item)
-{
- const char *old_pwd;
- gboolean ask_mode;
-
- g_return_if_fail (item >= 0 && item <= ITEM_STORAGE_MAX);
-
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (passwd_entry),
- GTK_ENTRY_ICON_SECONDARY,
- icon_name_table[item]);
- gtk_entry_set_icon_tooltip_text (GTK_ENTRY (passwd_entry),
- GTK_ENTRY_ICON_SECONDARY,
- _(icon_desc_table[item]));
-
- /* We want to make entry insensitive when ITEM_STORAGE_ASK is selected
- * Unfortunately, making GtkEntry insensitive will also make the icon
- * insensitive, which prevents user from reverting the action.
- * Let's workaround that by disabling focus for entry instead of
- * sensitivity change.
- */
- ask_mode = !!g_object_get_data (G_OBJECT (passwd_entry), ASK_MODE_TAG);
- if ( (item == ITEM_STORAGE_ASK && !ask_mode)
- || item == ITEM_STORAGE_UNUSED) {
- /* Store the old password */
- old_pwd = gtk_editable_get_text (GTK_EDITABLE (passwd_entry));
- if (old_pwd && *old_pwd)
- g_object_set_data_full (G_OBJECT (passwd_entry), "password-old",
- g_strdup (old_pwd), g_free_str0);
- gtk_editable_set_text (GTK_EDITABLE (passwd_entry), "");
-
- if (gtk_widget_is_focus (passwd_entry))
- gtk_widget_child_focus ((gtk_widget_get_toplevel (passwd_entry)), GTK_DIR_TAB_BACKWARD);
- gtk_widget_set_can_focus (passwd_entry, FALSE);
- } else {
- /* Set the old password to the entry */
- old_pwd = g_object_get_data (G_OBJECT (passwd_entry), "password-old");
- if (old_pwd && *old_pwd)
- gtk_editable_set_text (GTK_EDITABLE (passwd_entry), old_pwd);
- g_object_set_data (G_OBJECT (passwd_entry), "password-old", NULL);
-
- if (!gtk_widget_get_can_focus (passwd_entry)) {
- gtk_widget_set_can_focus (passwd_entry, TRUE);
- gtk_widget_grab_focus (passwd_entry);
- }
- }
-}
-
-static MenuItem
-secret_flags_to_menu_item (NMSettingSecretFlags flags, gboolean with_not_required)
-{
- MenuItem idx;
-
- if (flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)
- idx = ITEM_STORAGE_ASK;
- else if (with_not_required && (flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED))
- idx = ITEM_STORAGE_UNUSED;
- else if (flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED)
- idx = ITEM_STORAGE_USER;
- else
- idx = ITEM_STORAGE_SYSTEM;
-
- return idx;
-}
-
-static NMSettingSecretFlags
-menu_item_to_secret_flags (MenuItem item)
-{
- NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
-
- switch (item) {
- case ITEM_STORAGE_USER:
- flags |= NM_SETTING_SECRET_FLAG_AGENT_OWNED;
- break;
- case ITEM_STORAGE_ASK:
- flags |= NM_SETTING_SECRET_FLAG_NOT_SAVED;
- break;
- case ITEM_STORAGE_UNUSED:
- flags |= NM_SETTING_SECRET_FLAG_NOT_REQUIRED;
- break;
- case ITEM_STORAGE_SYSTEM:
- default:
- break;
- }
- return flags;
-}
-
-typedef struct {
- NMSetting *setting;
- char *password_flags_name;
- MenuItem item_number;
- GtkWidget *passwd_entry;
-} PopupMenuItemInfo;
-
-static void
-popup_menu_item_info_destroy (gpointer data, GClosure *closure)
-{
- PopupMenuItemInfo *info = (PopupMenuItemInfo *) data;
-
- if (info->setting)
- g_object_unref (info->setting);
- g_clear_pointer (&info->password_flags_name, g_free);
- if (info->passwd_entry)
- g_object_remove_weak_pointer (G_OBJECT (info->passwd_entry), (gpointer *) &info->passwd_entry);
- g_slice_free (PopupMenuItemInfo, info);
-}
-
-static void
-activate_menu_item_cb (GtkMenuItem *menuitem, gpointer user_data)
-{
- PopupMenuItemInfo *info = (PopupMenuItemInfo *) user_data;
- NMSettingSecretFlags flags;
-
- /* Update password flags according to the password-storage popup menu */
- if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem))) {
- flags = menu_item_to_secret_flags (info->item_number);
-
- /* Update the secret flags in the setting */
- if (info->setting)
- nm_setting_set_secret_flags (info->setting, info->password_flags_name,
- flags, NULL);
-
- /* Change icon */
- if (info->passwd_entry) {
- change_password_storage_icon (info->passwd_entry, info->item_number);
-
- /* Emit "changed" signal on the entry */
- g_signal_emit_by_name (G_OBJECT (info->passwd_entry), "changed");
- }
- }
-}
-
-static void
-popup_menu_item_info_register (GtkWidget *item,
- NMSetting *setting,
- const char *password_flags_name,
- MenuItem item_number,
- GtkWidget *passwd_entry)
-{
- PopupMenuItemInfo *info;
-
- info = g_slice_new0 (PopupMenuItemInfo);
- info->setting = setting ? g_object_ref (setting) : NULL;
- info->password_flags_name = g_strdup (password_flags_name);
- info->item_number = item_number;
- info->passwd_entry = passwd_entry;
-
- if (info->passwd_entry)
- g_object_add_weak_pointer (G_OBJECT (info->passwd_entry), (gpointer *) &info->passwd_entry);
-
- g_signal_connect_data (item, "activate",
- G_CALLBACK (activate_menu_item_cb),
- info,
- (GClosureNotify) popup_menu_item_info_destroy, 0);
-}
-
-void
-nma_gtk_widget_activate_default (GtkWidget *widget)
-{
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_widget_activate_default (widget);
-#else
- gtk_window_activate_default (GTK_WINDOW (widget));
-#endif
-}
-
-static void
-icon_release_cb (GtkEntry *entry,
- GtkEntryIconPosition position,
-#if !GTK_CHECK_VERSION(3,90,0)
- GdkEventButton *event,
-#endif
- gpointer data)
-{
- GtkMenu *menu = GTK_MENU (data);
-#if GTK_CHECK_VERSION(3,90,0)
- GdkRectangle icon_area;
-#endif
-
- if (position == GTK_ENTRY_ICON_SECONDARY) {
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_widget_show (GTK_WIDGET (data));
- gtk_entry_get_icon_area (entry,
- GTK_ENTRY_ICON_SECONDARY,
- &icon_area);
- gtk_menu_popup_at_rect (menu,
- gtk_widget_get_surface (GTK_WIDGET (entry)),
- &icon_area,
- GDK_GRAVITY_CENTER,
- GDK_GRAVITY_CENTER,
- NULL);
-#else
- gtk_widget_show_all (GTK_WIDGET (data));
- gtk_menu_popup (menu, NULL, NULL, NULL, NULL,
- event->button, event->time);
-#endif
- }
-}
-
-/**
- * nma_utils_setup_password_storage:
- * @passwd_entry: password #GtkEntry which the icon is attached to
- * @initial_flags: initial secret flags to setup password menu from
- * @setting: #NMSetting containing the password, or NULL
- * @password_flags_name: name of the secret flags (like psk-flags), or NULL
- * @with_not_required: whether to include "Not required" menu item
- * @ask_mode: %TRUE if the entry is shown in ASK mode. That means,
- * while prompting for a password, contrary to being inside the
- * editor mode.
- * If %TRUE, the entry should be sensivive on selected "always-ask"
- * icon (this is e.f. for nm-applet asking for password), otherwise
- * not.
- * If %TRUE, it shall not be possible to select a different storage,
- * because we only prompt for a password, we cannot change the password
- * location.
- *
- * Adds a secondary icon and creates a popup menu for password entry.
- * The active menu item is set up according to initial_flags, or
- * from @setting/@password_flags_name (if they are not NULL).
- * If the @setting/@password_flags_name are not NULL, secret flags will
- * be automatically updated in the setting when menu is changed.
- */
-void
-nma_utils_setup_password_storage (GtkWidget *passwd_entry,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode)
-{
- GtkWidget *popup_menu;
- GtkWidget *item[4];
- GSList *group;
- MenuItem idx;
- NMSettingSecretFlags secret_flags;
-
- /* Whether entry should be sensitive if "always-ask" is active " */
- g_object_set_data (G_OBJECT (passwd_entry), ASK_MODE_TAG, GUINT_TO_POINTER (ask_mode));
-
- popup_menu = gtk_menu_new ();
- g_object_set_data (G_OBJECT (popup_menu), PASSWORD_STORAGE_MENU_TAG, GUINT_TO_POINTER (TRUE));
- g_object_set_data (G_OBJECT (popup_menu), MENU_WITH_NOT_REQUIRED_TAG, GUINT_TO_POINTER (with_not_required));
- group = NULL;
- item[0] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[0]));
- group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (item[0]));
- item[1] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[1]));
- item[2] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[2]));
- if (with_not_required)
- item[3] = gtk_radio_menu_item_new_with_label (group, _(icon_desc_table[3]));
-
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item[0]);
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item[1]);
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item[2]);
- if (with_not_required)
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item[3]);
-
- popup_menu_item_info_register (item[0], setting, password_flags_name, ITEM_STORAGE_USER, passwd_entry);
- popup_menu_item_info_register (item[1], setting, password_flags_name, ITEM_STORAGE_SYSTEM, passwd_entry);
- popup_menu_item_info_register (item[2], setting, password_flags_name, ITEM_STORAGE_ASK, passwd_entry);
- if (with_not_required)
- popup_menu_item_info_register (item[3], setting, password_flags_name, ITEM_STORAGE_UNUSED, passwd_entry);
-
- g_signal_connect (passwd_entry, "icon-release", G_CALLBACK (icon_release_cb), popup_menu);
- gtk_entry_set_icon_activatable (GTK_ENTRY (passwd_entry), GTK_ENTRY_ICON_SECONDARY,
- !ask_mode);
- gtk_menu_attach_to_widget (GTK_MENU (popup_menu), passwd_entry, NULL);
-
- /* Initialize active item for password-storage popup menu */
- if (setting && password_flags_name)
- nm_setting_get_secret_flags (setting, password_flags_name, &secret_flags, NULL);
- else
- secret_flags = initial_flags;
-
- idx = secret_flags_to_menu_item (secret_flags, with_not_required);
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item[idx]), TRUE);
- change_password_storage_icon (passwd_entry, idx);
-}
-
-/**
- * nma_utils_menu_to_secret_flags:
- * @passwd_entry: password #GtkEntry which the password icon/menu is attached to
- *
- * Returns secret flags corresponding to the selected password storage menu
- * in the attached icon
- *
- * Returns: secret flags corresponding to the active item in password menu
- */
-NMSettingSecretFlags
-nma_utils_menu_to_secret_flags (GtkWidget *passwd_entry)
-{
- GList *menu_list, *iter;
- GtkWidget *menu = NULL;
- NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
-
- menu_list = gtk_menu_get_for_attach_widget (passwd_entry);
- for (iter = menu_list; iter; iter = g_list_next (iter)) {
- if (g_object_get_data (G_OBJECT (iter->data), PASSWORD_STORAGE_MENU_TAG)) {
- menu = iter->data;
- break;
- }
- }
-
- /* Translate password popup menu to secret flags */
- if (menu) {
- MenuItem idx = 0;
- gs_free_list GList *list = NULL;
- int i, length;
-
- list = gtk_container_get_children (GTK_CONTAINER (menu));
- iter = list;
- length = g_list_length (list);
- for (i = 0; i < length; i++) {
- if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (iter->data))) {
- idx = (MenuItem) i;
- break;
- }
- iter = g_list_next (iter);
- }
-
- flags = menu_item_to_secret_flags (idx);
- }
- return flags;
-}
-
-/**
- * nma_utils_update_password_storage:
- * @passwd_entry: #GtkEntry with the password
- * @secret_flags: secret flags to set
- * @setting: #NMSetting containing the password, or NULL
- * @password_flags_name: name of the secret flags (like psk-flags), or NULL
- *
- * Updates secret flags in the password storage popup menu and also
- * in the @setting (if @setting and @password_flags_name are not NULL).
- *
- */
-void
-nma_utils_update_password_storage (GtkWidget *passwd_entry,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name)
-{
- GList *menu_list, *iter;
- GtkWidget *menu = NULL;
-
- /* Update secret flags (WEP_KEY_FLAGS, PSK_FLAGS, ...) in the security setting */
- if (setting && password_flags_name)
- nm_setting_set_secret_flags (setting, password_flags_name, secret_flags, NULL);
-
- /* Update password-storage popup menu to reflect secret flags */
- menu_list = gtk_menu_get_for_attach_widget (passwd_entry);
- for (iter = menu_list; iter; iter = g_list_next (iter)) {
- if (g_object_get_data (G_OBJECT (iter->data), PASSWORD_STORAGE_MENU_TAG)) {
- menu = iter->data;
- break;
- }
- }
-
- if (menu) {
- GtkRadioMenuItem *item;
- MenuItem idx;
- GSList *group;
- gboolean with_not_required;
- int i, last;
-
- /* radio menu group list contains the menu items in reverse order */
- item = (GtkRadioMenuItem *) gtk_menu_get_active (GTK_MENU (menu));
- group = gtk_radio_menu_item_get_group (item);
- with_not_required = !!g_object_get_data (G_OBJECT (menu), MENU_WITH_NOT_REQUIRED_TAG);
-
- idx = secret_flags_to_menu_item (secret_flags, with_not_required);
- last = g_slist_length (group) - idx - 1;
- for (i = 0; i < last; i++)
- group = g_slist_next (group);
-
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (group->data), TRUE);
- change_password_storage_icon (passwd_entry, idx);
- }
-}
-/*---------------------------------------------------------------------------*/
-
diff --git a/src/libnma/nma-ui-utils.h b/src/libnma/nma-ui-utils.h
deleted file mode 100644
index bde5f487..00000000
--- a/src/libnma/nma-ui-utils.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright 2015 Red Hat, Inc.
- */
-
-#ifndef NMA_UI_UTILS_H
-#define NMA_UI_UTILS_H
-
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <NetworkManager.h>
-
-void nma_utils_setup_password_storage (GtkWidget *passwd_entry,
- NMSettingSecretFlags initial_flags,
- NMSetting *setting,
- const char *password_flags_name,
- gboolean with_not_required,
- gboolean ask_mode);
-NMSettingSecretFlags nma_utils_menu_to_secret_flags (GtkWidget *passwd_entry);
-void nma_utils_update_password_storage (GtkWidget *passwd_entry,
- NMSettingSecretFlags secret_flags,
- NMSetting *setting,
- const char *password_flags_name);
-
-#endif /* NMA_UI_UTILS_H */
-
diff --git a/src/libnma/nma-version.h.in b/src/libnma/nma-version.h.in
deleted file mode 100644
index 78e0f206..00000000
--- a/src/libnma/nma-version.h.in
+++ /dev/null
@@ -1,119 +0,0 @@
-// SPDX-License-Identifier: LGPL-2.1+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Copyright (C) 2011-2017 Red Hat, Inc.
- */
-
-#ifndef NMA_VERSION_H
-#define NMA_VERSION_H
-
-#include <glib.h>
-
-/**
- * NMA_MAJOR_VERSION:
- *
- * Evaluates to the major version number of NetworkManager which this source
- * is compiled against.
- */
-#define NMA_MAJOR_VERSION (@NMA_MAJOR_VERSION@)
-
-/**
- * NMA_MINOR_VERSION:
- *
- * Evaluates to the minor version number of NetworkManager which this source
- * is compiled against.
- */
-#define NMA_MINOR_VERSION (@NMA_MINOR_VERSION@)
-
-/**
- * NMA_MICRO_VERSION:
- *
- * Evaluates to the micro version number of NetworkManager which this source
- * compiled against.
- */
-#define NMA_MICRO_VERSION (@NMA_MICRO_VERSION@)
-
-/**
- * NMA_CHECK_VERSION:
- * @major: major version (e.g. 1 for version 1.2.5)
- * @minor: minor version (e.g. 2 for version 1.2.5)
- * @micro: micro version (e.g. 5 for version 1.2.5)
- *
- * Returns: %TRUE if the version of the NetworkManager header files
- * is the same as or newer than the passed-in version.
- */
-#define NMA_CHECK_VERSION(major,minor,micro) \
- (NMA_MAJOR_VERSION > (major) || \
- (NMA_MAJOR_VERSION == (major) && NMA_MINOR_VERSION > (minor)) || \
- (NMA_MAJOR_VERSION == (major) && NMA_MINOR_VERSION == (minor) && NMA_MICRO_VERSION >= (micro)))
-
-#define NMA_ENCODE_VERSION(major,minor,micro) ((major) << 16 | (minor) << 8 | (micro))
-
-#define NMA_VERSION_1_2 (NMA_ENCODE_VERSION (1, 2, 0))
-#define NMA_VERSION_1_4 (NMA_ENCODE_VERSION (1, 4, 0))
-#define NMA_VERSION_1_8 (NMA_ENCODE_VERSION (1, 8, 0))
-#define NMA_VERSION_1_8_2 (NMA_ENCODE_VERSION (1, 8, 2))
-#define NMA_VERSION_1_8_4 (NMA_ENCODE_VERSION (1, 8, 4))
-#define NMA_VERSION_1_8_6 (NMA_ENCODE_VERSION (1, 8, 6))
-#define NMA_VERSION_1_8_8 (NMA_ENCODE_VERSION (1, 8, 8))
-#define NMA_VERSION_1_8_10 (NMA_ENCODE_VERSION (1, 8, 10))
-#define NMA_VERSION_1_8_12 (NMA_ENCODE_VERSION (1, 8, 12))
-#define NMA_VERSION_1_8_22 (NMA_ENCODE_VERSION (1, 8, 22))
-
-#define NMA_VERSION_CUR_STABLE NMA_VERSION_1_8_10
-#define NMA_VERSION_NEXT_STABLE NMA_VERSION_1_8_22
-
-#define NMA_VERSION NMA_ENCODE_VERSION (NMA_MAJOR_VERSION, NMA_MINOR_VERSION, NMA_MICRO_VERSION)
-
-/* Deprecation / Availability macros */
-
-#if !defined (NMA_VERSION_MIN_REQUIRED) || (NMA_VERSION_MIN_REQUIRED == 0)
-# undef NMA_VERSION_MIN_REQUIRED
-# define NMA_VERSION_MIN_REQUIRED (NMA_VERSION_CUR_STABLE)
-#endif
-
-#if !defined (NMA_VERSION_MAX_ALLOWED) || (NMA_VERSION_MAX_ALLOWED == 0)
-# undef NMA_VERSION_MAX_ALLOWED
-# define NMA_VERSION_MAX_ALLOWED (NMA_VERSION_NEXT_STABLE)
-#endif
-
-/* sanity checks */
-#if NMA_VERSION_MIN_REQUIRED > NMA_VERSION_NEXT_STABLE
-#error "NMA_VERSION_MIN_REQUIRED must be <= NMA_VERSION_NEXT_STABLE"
-#endif
-#if NMA_VERSION_MAX_ALLOWED < NMA_VERSION_MIN_REQUIRED
-#error "NMA_VERSION_MAX_ALLOWED must be >= NMA_VERSION_MIN_REQUIRED"
-#endif
-#if NMA_VERSION_MIN_REQUIRED < NMA_VERSION_1_2
-#error "NMA_VERSION_MIN_REQUIRED must be >= NMA_VERSION_1_2"
-#endif
-
-#if NMA_VERSION_MIN_REQUIRED >= NMA_VERSION_1_2
-# define NMA_DEPRECATED_IN_1_2 G_DEPRECATED
-# define NMA_DEPRECATED_IN_1_2_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define NMA_DEPRECATED_IN_1_2
-# define NMA_DEPRECATED_IN_1_2_FOR(f)
-#endif
-
-#if NMA_VERSION_MIN_REQUIRED >= NMA_VERSION_1_8
-# define NMA_DEPRECATED_IN_1_8 G_DEPRECATED
-# define NMA_DEPRECATED_IN_1_8_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define NMA_DEPRECATED_IN_1_8
-# define NMA_DEPRECATED_IN_1_8_FOR(f)
-#endif
-
-#if NMA_VERSION_MAX_ALLOWED < NMA_VERSION_1_8
-# define NMA_AVAILABLE_IN_1_8 G_UNAVAILABLE(1,8)
-#else
-# define NMA_AVAILABLE_IN_1_8
-#endif
-
-#if NMA_VERSION_MAX_ALLOWED < NMA_VERSION_1_8_22
-# define NMA_AVAILABLE_IN_1_8_22 G_UNAVAILABLE(1.8,22)
-#else
-# define NMA_AVAILABLE_IN_1_8_22
-#endif
-
-#endif /* NMA_VERSION_H */
diff --git a/src/libnma/nma-vpn-password-dialog.c b/src/libnma/nma-vpn-password-dialog.c
deleted file mode 100644
index adc67971..00000000
--- a/src/libnma/nma-vpn-password-dialog.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/* nma-vpn-password-dialog.c - A password prompting dialog widget.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public License as
- * published by the ree Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * Copyright (C) 1999, 2000 Eazel, Inc.
- * Copyright (C) 2011 - 2018 Red Hat, Inc.
- *
- * Authors: Ramiro Estrugo <ramiro@eazel.com>
- * Dan Williams <dcbw@redhat.com>
- * Lubomir Rintel <lkundrak@v3.sk>
- */
-
-#include "nm-default.h"
-#include "nma-private.h"
-#include "nma-vpn-password-dialog.h"
-
-typedef struct {
- GtkWidget *message_label;
- GtkWidget *password_label;
- GtkWidget *password_label_secondary;
- GtkWidget *password_label_tertiary;
- GtkWidget *password_entry;
- GtkWidget *password_entry_secondary;
- GtkWidget *password_entry_tertiary;
- GtkWidget *show_passwords_checkbox;
-} NMAVpnPasswordDialogPrivate;
-
-G_DEFINE_TYPE_WITH_CODE (NMAVpnPasswordDialog, nma_vpn_password_dialog, GTK_TYPE_DIALOG,
- G_ADD_PRIVATE (NMAVpnPasswordDialog))
-
-
-#define NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- NMA_VPN_TYPE_PASSWORD_DIALOG, \
- NMAVpnPasswordDialogPrivate))
-
-/* NMAVpnPasswordDialogClass methods */
-static void nma_vpn_password_dialog_class_init (NMAVpnPasswordDialogClass *password_dialog_class);
-static void nma_vpn_password_dialog_init (NMAVpnPasswordDialog *password_dialog);
-
-/* GtkDialog callbacks */
-static void dialog_show_callback (GtkWidget *widget, gpointer callback_data);
-static void dialog_close_callback (GtkWidget *widget, gpointer callback_data);
-
-static void
-show_passwords_toggled_cb (GtkWidget *widget, gpointer user_data)
-{
- NMAVpnPasswordDialog *dialog = NMA_VPN_PASSWORD_DIALOG (user_data);
- NMAVpnPasswordDialogPrivate *priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- gboolean visible;
-
- visible = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
-
- gtk_entry_set_visibility (GTK_ENTRY (priv->password_entry), visible);
- gtk_entry_set_visibility (GTK_ENTRY (priv->password_entry_secondary), visible);
- gtk_entry_set_visibility (GTK_ENTRY (priv->password_entry_tertiary), visible);
-}
-
-static void
-nma_vpn_password_dialog_class_init (NMAVpnPasswordDialogClass *klass)
-{
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- g_type_ensure (NM_TYPE_DEVICE);
- gtk_widget_class_set_template_from_resource (widget_class,
- "/org/freedesktop/network-manager-applet/nma-vpn-password-dialog.ui");
-
- gtk_widget_class_bind_template_child_private (widget_class, NMAVpnPasswordDialog, message_label);
- gtk_widget_class_bind_template_child_private (widget_class, NMAVpnPasswordDialog, password_label);
- gtk_widget_class_bind_template_child_private (widget_class, NMAVpnPasswordDialog, password_label_secondary);
- gtk_widget_class_bind_template_child_private (widget_class, NMAVpnPasswordDialog, password_label_tertiary);
- gtk_widget_class_bind_template_child_private (widget_class, NMAVpnPasswordDialog, password_entry);
- gtk_widget_class_bind_template_child_private (widget_class, NMAVpnPasswordDialog, password_entry_secondary);
- gtk_widget_class_bind_template_child_private (widget_class, NMAVpnPasswordDialog, password_entry_tertiary);
- gtk_widget_class_bind_template_child_private (widget_class, NMAVpnPasswordDialog, show_passwords_checkbox);
-
- gtk_widget_class_bind_template_callback (widget_class, dialog_close_callback);
- gtk_widget_class_bind_template_callback (widget_class, dialog_show_callback);
- gtk_widget_class_bind_template_callback (widget_class, nma_gtk_widget_activate_default);
- gtk_widget_class_bind_template_callback (widget_class, show_passwords_toggled_cb);
-}
-
-static void
-nma_vpn_password_dialog_init (NMAVpnPasswordDialog *dialog)
-{
- gtk_widget_init_template (GTK_WIDGET (dialog));
-}
-
-/* GtkDialog callbacks */
-static void
-dialog_show_callback (GtkWidget *widget, gpointer callback_data)
-{
- NMAVpnPasswordDialog *dialog = NMA_VPN_PASSWORD_DIALOG (callback_data);
- NMAVpnPasswordDialogPrivate *priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- GtkWidget *to_focus = NULL;
-
-
- if ( gtk_widget_get_visible (priv->password_entry)
- && gtk_entry_get_text_length (GTK_ENTRY (priv->password_entry)) == 0)
- to_focus = priv->password_entry;
- else if ( gtk_widget_get_visible (priv->password_entry_secondary)
- && gtk_entry_get_text_length (GTK_ENTRY (priv->password_entry_secondary)) == 0)
- to_focus = priv->password_entry_secondary;
- else if ( gtk_widget_get_visible (priv->password_entry_tertiary)
- && gtk_entry_get_text_length (GTK_ENTRY (priv->password_entry_tertiary)) == 0)
- to_focus = priv->password_entry_tertiary;
-
- gtk_widget_grab_focus (to_focus ?: priv->password_entry);
-}
-
-static void
-dialog_close_callback (GtkWidget *widget, gpointer callback_data)
-{
- gtk_widget_hide (widget);
-}
-
-/* Public NMAVpnPasswordDialog methods */
-GtkWidget *
-nma_vpn_password_dialog_new (const char *title,
- const char *message,
- const char *password)
-{
- GtkWidget *dialog;
- NMAVpnPasswordDialogPrivate *priv;
-
- dialog = gtk_widget_new (NMA_VPN_TYPE_PASSWORD_DIALOG, "title", title, NULL);
- if (!dialog)
- return NULL;
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- if (message) {
- gtk_label_set_text (GTK_LABEL (priv->message_label), message);
- gtk_widget_show (priv->message_label);
- }
-
- nma_vpn_password_dialog_set_password (NMA_VPN_PASSWORD_DIALOG (dialog), password);
-
- return GTK_WIDGET (dialog);
-}
-
-gboolean
-nma_vpn_password_dialog_run_and_block (NMAVpnPasswordDialog *dialog)
-{
- gint button_clicked;
-
- g_return_val_if_fail (dialog != NULL, FALSE);
- g_return_val_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog), FALSE);
-
- button_clicked = gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_hide (GTK_WIDGET (dialog));
-
- return button_clicked == GTK_RESPONSE_OK;
-}
-
-void
-nma_vpn_password_dialog_set_password (NMAVpnPasswordDialog *dialog,
- const char *password)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- gtk_editable_set_text (GTK_EDITABLE (priv->password_entry), password ? password : "");
-}
-
-void
-nma_vpn_password_dialog_set_password_secondary (NMAVpnPasswordDialog *dialog,
- const char *password_secondary)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- gtk_editable_set_text (GTK_EDITABLE (priv->password_entry_secondary),
- password_secondary ? password_secondary : "");
-}
-
-void
-nma_vpn_password_dialog_set_password_ternary (NMAVpnPasswordDialog *dialog,
- const char *password_tertiary)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- gtk_editable_set_text (GTK_EDITABLE (priv->password_entry_tertiary),
- password_tertiary ? password_tertiary : "");
-}
-
-void
-nma_vpn_password_dialog_set_show_password (NMAVpnPasswordDialog *dialog, gboolean show)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- gtk_widget_set_visible (priv->password_label, show);
- gtk_widget_set_visible (priv->password_entry, show);
-}
-
-void
-nma_vpn_password_dialog_set_show_password_secondary (NMAVpnPasswordDialog *dialog,
- gboolean show)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- gtk_widget_set_visible (priv->password_label_secondary, show);
- gtk_widget_set_visible (priv->password_entry_secondary, show);
-}
-
-void
-nma_vpn_password_dialog_set_show_password_ternary (NMAVpnPasswordDialog *dialog,
- gboolean show)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- gtk_widget_set_visible (priv->password_label_tertiary, show);
- gtk_widget_set_visible (priv->password_entry_tertiary, show);
-}
-
-void
-nma_vpn_password_dialog_focus_password (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- if (gtk_widget_get_visible (priv->password_entry))
- gtk_widget_grab_focus (priv->password_entry);
-}
-
-void
-nma_vpn_password_dialog_focus_password_secondary (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- if (gtk_widget_get_visible (priv->password_entry_secondary))
- gtk_widget_grab_focus (priv->password_entry_secondary);
-}
-
-void
-nma_vpn_password_dialog_focus_password_ternary (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- if (gtk_widget_get_visible (priv->password_entry_tertiary))
- gtk_widget_grab_focus (priv->password_entry_tertiary);
-}
-
-const char *
-nma_vpn_password_dialog_get_password (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_val_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog), NULL);
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- return gtk_editable_get_text (GTK_EDITABLE (priv->password_entry));
-}
-
-const char *
-nma_vpn_password_dialog_get_password_secondary (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_val_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog), NULL);
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- return gtk_editable_get_text (GTK_EDITABLE (priv->password_entry_secondary));
-}
-
-const char *
-nma_vpn_password_dialog_get_password_ternary (NMAVpnPasswordDialog *dialog)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_val_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog), NULL);
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
- return gtk_editable_get_text (GTK_EDITABLE (priv->password_entry_tertiary));
-}
-
-void nma_vpn_password_dialog_set_password_label (NMAVpnPasswordDialog *dialog,
- const char *label)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->password_label), label);
-}
-
-void nma_vpn_password_dialog_set_password_secondary_label (NMAVpnPasswordDialog *dialog,
- const char *label)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->password_label_secondary), label);
-}
-
-void
-nma_vpn_password_dialog_set_password_ternary_label (NMAVpnPasswordDialog *dialog,
- const char *label)
-{
- NMAVpnPasswordDialogPrivate *priv;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
-
- priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
-
- gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->password_label_tertiary), label);
-}
diff --git a/src/libnma/nma-vpn-password-dialog.h b/src/libnma/nma-vpn-password-dialog.h
deleted file mode 100644
index 5e274222..00000000
--- a/src/libnma/nma-vpn-password-dialog.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* vpn-password-dialog.c - A use password prompting dialog widget.
- *
- * The Gnome Library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public License as
- * published by the ree Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * The Gnome Library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * Copyright (C) 1999, 2000 Eazel, Inc.
- * Copyright (C) 2011, 2013 Red Hat, Inc.
- *
- * Authors: Ramiro Estrugo <ramiro@eazel.com>
- * Dan Williams <dcbw@redhat.com>
- */
-
-#ifndef NMA_VPN_PASSWORD_DIALOG_H
-#define NMA_VPN_PASSWORD_DIALOG_H
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define NMA_VPN_TYPE_PASSWORD_DIALOG (nma_vpn_password_dialog_get_type ())
-#define NMA_VPN_PASSWORD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_VPN_TYPE_PASSWORD_DIALOG, NMAVpnPasswordDialog))
-#define NMA_VPN_PASSWORD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_VPN_TYPE_PASSWORD_DIALOG, NMAVpnPasswordDialogClass))
-#define NMA_VPN_IS_PASSWORD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_VPN_TYPE_PASSWORD_DIALOG))
-#define NMA_VPN_IS_PASSWORD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_VPN_TYPE_PASSWORD_DIALOG))
-
-typedef struct NMAVpnPasswordDialog NMAVpnPasswordDialog;
-typedef struct NMAVpnPasswordDialogClass NMAVpnPasswordDialogClass;
-
-struct NMAVpnPasswordDialog {
- GtkDialog parent;
-};
-
-struct NMAVpnPasswordDialogClass {
- GtkDialogClass parent_class;
-};
-
-GType nma_vpn_password_dialog_get_type (void);
-GtkWidget* nma_vpn_password_dialog_new (const char *title,
- const char *message,
- const char *password);
-
-gboolean nma_vpn_password_dialog_run_and_block (NMAVpnPasswordDialog *dialog);
-
-/* Attribute mutators */
-void nma_vpn_password_dialog_set_show_password (NMAVpnPasswordDialog *dialog,
- gboolean show);
-void nma_vpn_password_dialog_focus_password (NMAVpnPasswordDialog *dialog);
-void nma_vpn_password_dialog_set_password (NMAVpnPasswordDialog *dialog,
- const char *password);
-void nma_vpn_password_dialog_set_password_label (NMAVpnPasswordDialog *dialog,
- const char *label);
-
-void nma_vpn_password_dialog_set_show_password_secondary (NMAVpnPasswordDialog *dialog,
- gboolean show);
-void nma_vpn_password_dialog_focus_password_secondary (NMAVpnPasswordDialog *dialog);
-void nma_vpn_password_dialog_set_password_secondary (NMAVpnPasswordDialog *dialog,
- const char *password_secondary);
-void nma_vpn_password_dialog_set_password_secondary_label (NMAVpnPasswordDialog *dialog,
- const char *label);
-
-void nma_vpn_password_dialog_set_show_password_ternary (NMAVpnPasswordDialog *dialog,
- gboolean show);
-void nma_vpn_password_dialog_focus_password_ternary (NMAVpnPasswordDialog *dialog);
-void nma_vpn_password_dialog_set_password_ternary (NMAVpnPasswordDialog *dialog,
- const char *password_ternary);
-void nma_vpn_password_dialog_set_password_ternary_label (NMAVpnPasswordDialog *dialog,
- const char *label);
-
-/* Attribute accessors */
-const char *nma_vpn_password_dialog_get_password (NMAVpnPasswordDialog *dialog);
-
-const char *nma_vpn_password_dialog_get_password_secondary (NMAVpnPasswordDialog *dialog);
-
-const char *nma_vpn_password_dialog_get_password_ternary (NMAVpnPasswordDialog *dialog);
-
-G_END_DECLS
-
-#endif /* NMA_VPN_PASSWORD_DIALOG_H */
diff --git a/src/libnma/nma-vpn-password-dialog.ui b/src/libnma/nma-vpn-password-dialog.ui
deleted file mode 100644
index 4774d2e4..00000000
--- a/src/libnma/nma-vpn-password-dialog.ui
+++ /dev/null
@@ -1,222 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.2 -->
-<interface domain="nm-applet">
- <requires lib="gtk+" version="3.20"/>
- <template class="NMAVpnPasswordDialog" parent="GtkDialog">
- <property name="can_focus">False</property>
- <property name="resizable">False</property>
- <property name="modal">True</property>
- <property name="window_position">center</property>
- <property name="type_hint">dialog</property>
- <signal name="close" handler="dialog_close_callback" swapped="no"/>
- <signal name="show" handler="dialog_show_callback" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox">
- <property name="can_focus">False</property>
- <child>
- <object class="GtkButton" id="cancel_button">
- <property name="label" translatable="yes">_Cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">True</property>
- <property name="valign">baseline</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="ok_button">
- <property name="label" translatable="yes">_OK</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="receives_default">True</property>
- <property name="valign">baseline</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkGrid">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <property name="margin_top">12</property>
- <property name="margin_bottom">12</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">12</property>
- <child>
- <object class="GtkCheckButton" id="show_passwords_checkbox">
- <property name="label" translatable="yes">Sh_ow passwords</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="halign">start</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="show_passwords_toggled_cb" swapped="no"/>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="password_entry_tertiary">
- <property name="visible">False</property>
- <property name="can_focus">True</property>
- <property name="visibility">False</property>
- <property name="width_chars">20</property>
- <signal name="activate" handler="nma_gtk_widget_activate_default" swapped="yes"/>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="password_entry_secondary">
- <property name="visible">False</property>
- <property name="can_focus">True</property>
- <property name="visibility">False</property>
- <property name="width_chars">20</property>
- <signal name="activate" handler="nma_gtk_widget_activate_default" swapped="yes"/>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="password_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="visibility">False</property>
- <property name="width_chars">20</property>
- <signal name="activate" handler="nma_gtk_widget_activate_default" swapped="yes"/>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="password_label_tertiary">
- <property name="visible">False</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_Tertiary Password:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">password_entry_tertiary</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="password_label_secondary">
- <property name="visible">False</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_Secondary Password:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">password_entry_secondary</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="password_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_Password:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">password_entry</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="message_label">
- <property name="visible">False</property>
- <property name="can_focus">False</property>
- <property name="halign">start</property>
- <property name="margin_bottom">12</property>
- <property name="hexpand">True</property>
- <property name="wrap">True</property>
- <property name="max_width_chars">35</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- <property name="width">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">6</property>
- <property name="margin_end">12</property>
- <property name="margin_top">6</property>
- <property name="margin_bottom">6</property>
- <property name="valign">start</property>
- <property name="icon_name">dialog-password</property>
- <property name="icon_size">6</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="height">5</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-6">cancel_button</action-widget>
- <action-widget response="-5">ok_button</action-widget>
- </action-widgets>
- <child>
- <placeholder/>
- </child>
- </template>
-</interface>
diff --git a/src/libnma/nma-wifi-dialog.c b/src/libnma/nma-wifi-dialog.c
deleted file mode 100644
index 2a572ccf..00000000
--- a/src/libnma/nma-wifi-dialog.c
+++ /dev/null
@@ -1,1559 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Applet -- allow user control over networking
- *
- * Dan Williams <dcbw@redhat.com>
- *
- * Copyright 2007 - 2017 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-#include "nma-private.h"
-
-#include <string.h>
-#include <netinet/ether.h>
-
-#include <NetworkManager.h>
-
-#include "nma-wifi-dialog.h"
-#include "wireless-security.h"
-#include "eap-method.h"
-
-G_DEFINE_TYPE (NMAWifiDialog, nma_wifi_dialog, GTK_TYPE_DIALOG)
-
-#define NMA_WIFI_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- NMA_TYPE_WIFI_DIALOG, \
- NMAWifiDialogPrivate))
-
-typedef struct {
- NMAWifiDialog *self;
- NMConnection *connection;
- gboolean canceled;
-} GetSecretsInfo;
-
-typedef struct {
- NMClient *client;
-
- GtkBuilder *builder;
-
- NMConnection *specific_connection;
- NMConnection *connection;
- NMDevice *device;
- NMAccessPoint *ap;
- guint operation;
-
- GtkTreeModel *device_model;
- GtkTreeModel *connection_model;
- GtkSizeGroup *group;
- GtkWidget *sec_combo;
- GtkWidget *ok_response_button;
-
- gboolean network_name_focus;
-
- gboolean secrets_only;
-
- guint revalidate_id;
-
- GetSecretsInfo *secrets_info;
-} NMAWifiDialogPrivate;
-
-enum {
- OP_NONE = 0,
- OP_CREATE_ADHOC,
- OP_CONNECT_HIDDEN,
-};
-
-#define D_NAME_COLUMN 0
-#define D_DEV_COLUMN 1
-
-#define S_NAME_COLUMN 0
-#define S_SEC_COLUMN 1
-
-#define C_NAME_COLUMN 0
-#define C_CON_COLUMN 1
-#define C_SEP_COLUMN 2
-#define C_NEW_COLUMN 3
-
-static gboolean security_combo_init (NMAWifiDialog *self, gboolean secrets_only,
- const char *secrets_setting_name,
- const char *const*secrets_hints);
-static void ssid_entry_changed (GtkWidget *entry, gpointer user_data);
-
-void
-nma_wifi_dialog_set_nag_ignored (NMAWifiDialog *self, gboolean ignored)
-{
-}
-
-gboolean
-nma_wifi_dialog_get_nag_ignored (NMAWifiDialog *self)
-{
- return TRUE;
-}
-
-static void
-size_group_clear (GtkSizeGroup *group)
-{
- GSList *iter;
-
- g_return_if_fail (group != NULL);
-
- iter = gtk_size_group_get_widgets (group);
- while (iter) {
- gtk_size_group_remove_widget (group, GTK_WIDGET (iter->data));
- iter = gtk_size_group_get_widgets (group);
- }
-}
-
-static void
-_set_ok_sensitive (NMAWifiDialog *self, gboolean is_sensitive, const char *error_tooltip)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_OK, is_sensitive);
-
- if (priv->ok_response_button) {
- gtk_widget_set_tooltip_text (priv->ok_response_button,
- is_sensitive ? _("Click to connect") : error_tooltip);
- }
-}
-
-static void
-size_group_add_permanent (GtkSizeGroup *group,
- GtkBuilder *builder)
-{
- GtkWidget *widget;
-
- g_return_if_fail (group != NULL);
- g_return_if_fail (builder != NULL);
-
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "network_name_label"));
- gtk_size_group_add_widget (group, widget);
-
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "security_combo_label"));
- gtk_size_group_add_widget (group, widget);
-
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "device_label"));
- gtk_size_group_add_widget (group, widget);
-}
-
-static void
-security_combo_changed (GtkWidget *combo,
- gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkWidget *vbox, *sec_widget, *def_widget;
- GList *elt, *children;
- GtkTreeIter iter;
- GtkTreeModel *model;
- WirelessSecurity *sec = NULL;
-
- vbox = GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_vbox"));
- g_assert (vbox);
-
- size_group_clear (priv->group);
-
- /* Remove any previous wireless security widgets */
- children = gtk_container_get_children (GTK_CONTAINER (vbox));
- for (elt = children; elt; elt = g_list_next (elt))
- gtk_container_remove (GTK_CONTAINER (vbox), GTK_WIDGET (elt->data));
- g_list_free (children);
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) {
- g_warning ("%s: no active security combo box item.", __func__);
- return;
- }
-
- gtk_tree_model_get (model, &iter, S_SEC_COLUMN, &sec, -1);
- if (!sec) {
- /* Revalidate dialog if the user picked "None" so the OK button
- * gets enabled if there's already a valid SSID.
- */
- ssid_entry_changed (NULL, self);
- return;
- }
-
- sec_widget = wireless_security_get_widget (sec);
- g_assert (sec_widget);
- gtk_widget_unparent (sec_widget);
-
- size_group_add_permanent (priv->group, priv->builder);
- wireless_security_add_to_size_group (sec, priv->group);
-
- gtk_container_add (GTK_CONTAINER (vbox), sec_widget);
-
- /* Re-validate */
- wireless_security_changed_cb (NULL, sec);
-
- /* Set focus to the security method's default widget, but only if the
- * network name entry should not be focused.
- */
- if (!priv->network_name_focus && sec->default_field) {
- def_widget = GTK_WIDGET (gtk_builder_get_object (sec->builder, sec->default_field));
- if (def_widget)
- gtk_widget_grab_focus (def_widget);
- }
-
- wireless_security_unref (sec);
-}
-
-static void
-security_combo_changed_manually (GtkWidget *combo,
- gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
-
- /* Flag that the combo was changed manually to allow focus to move
- * to the security method's default widget instead of the network name.
- */
- priv->network_name_focus = FALSE;
- security_combo_changed (combo, user_data);
-}
-
-static GBytes *
-validate_dialog_ssid (NMAWifiDialog *self)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkWidget *widget;
- const char *ssid;
- GBytes *ssid_bytes;
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_entry"));
-
- ssid = gtk_editable_get_text (GTK_EDITABLE (widget));
-
- if (!ssid || strlen (ssid) == 0 || strlen (ssid) > 32)
- return NULL;
-
- ssid_bytes = g_bytes_new (ssid, strlen (ssid));
- return ssid_bytes;
-}
-
-static void
-stuff_changed_cb (WirelessSecurity *sec, gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GBytes *ssid = NULL;
- gboolean free_ssid = TRUE;
- gboolean valid = FALSE;
- GtkTreeModel *model;
- GtkTreeIter iter;
- WirelessSecurity *sel_sec = NULL;
- gs_free_error GError *error = NULL;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->sec_combo));
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->sec_combo), &iter))
- gtk_tree_model_get (model, &iter, S_SEC_COLUMN, &sel_sec, -1);
-
- if (sel_sec)
- wireless_security_unref (sel_sec);
-
- if (sel_sec != sec)
- return;
-
- if (priv->connection) {
- NMSettingWireless *s_wireless;
- s_wireless = nm_connection_get_setting_wireless (priv->connection);
- g_assert (s_wireless);
- ssid = nm_setting_wireless_get_ssid (s_wireless);
- free_ssid = FALSE;
- } else {
- ssid = validate_dialog_ssid (self);
- }
-
- if (ssid) {
- valid = wireless_security_validate (sec, &error);
- if (free_ssid)
- g_bytes_unref (ssid);
- }
-
- /* But if there's an in-progress secrets call (which might require authorization)
- * then we don't want to enable the OK button because we don't have all the
- * connection details yet.
- */
- if (priv->secrets_info)
- valid = FALSE;
-
- _set_ok_sensitive (self, valid, error ? error->message : NULL);
-}
-
-static void
-ssid_entry_changed (GtkWidget *entry, gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkTreeIter iter;
- WirelessSecurity *sec = NULL;
- GtkTreeModel *model;
- gboolean valid = FALSE;
- GBytes *ssid;
- gs_free_error GError *error = NULL;
-
- /* If the network name entry was touched at all, allow focus to go to
- * the default widget of the security method now.
- */
- priv->network_name_focus = FALSE;
-
- ssid = validate_dialog_ssid (self);
- if (!ssid)
- goto out;
-
- g_bytes_unref (ssid);
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->sec_combo));
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->sec_combo), &iter))
- gtk_tree_model_get (model, &iter, S_SEC_COLUMN, &sec, -1);
-
- if (sec) {
- valid = wireless_security_validate (sec, &error);
- wireless_security_unref (sec);
- } else {
- valid = TRUE;
- }
-
-out:
- /* But if there's an in-progress secrets call (which might require authorization)
- * then we don't want to enable the OK button because we don't have all the
- * connection details yet.
- */
- if (priv->secrets_info)
- valid = FALSE;
-
- _set_ok_sensitive (self, valid, error ? error->message : NULL);
-}
-
-static void
-connection_combo_changed (GtkWidget *combo,
- gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkTreeIter iter;
- GtkTreeModel *model;
- gboolean is_new = FALSE;
- NMSettingWireless *s_wireless;
- char *utf8_ssid;
- GtkWidget *widget;
-
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) {
- g_warning ("%s: no active connection combo box item.", __func__);
- return;
- }
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
-
- if (priv->connection)
- g_object_unref (priv->connection);
-
- gtk_tree_model_get (model, &iter,
- C_CON_COLUMN, &priv->connection,
- C_NEW_COLUMN, &is_new, -1);
-
- if (priv->connection)
- eap_method_ca_cert_ignore_load (priv->connection);
-
- if (!security_combo_init (self, priv->secrets_only, NULL, NULL)) {
- g_warning ("Couldn't change Wi-Fi security combo box.");
- return;
- }
- security_combo_changed (priv->sec_combo, self);
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_entry"));
- if (priv->connection) {
- GBytes *ssid;
-
- s_wireless = nm_connection_get_setting_wireless (priv->connection);
- ssid = nm_setting_wireless_get_ssid (s_wireless);
- utf8_ssid = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid, NULL), g_bytes_get_size (ssid));
- gtk_editable_set_text (GTK_EDITABLE (widget), utf8_ssid);
- g_free (utf8_ssid);
- } else {
- gtk_editable_set_text (GTK_EDITABLE (widget), "");
- }
-
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_entry")), is_new);
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_label")), is_new);
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_combo")), is_new);
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_combo_label")), is_new);
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_vbox")), is_new);
-}
-
-static gboolean
-connection_combo_separator_cb (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
-{
- gboolean is_separator = FALSE;
-
- gtk_tree_model_get (model, iter, C_SEP_COLUMN, &is_separator, -1);
- return is_separator;
-}
-
-static gint
-alphabetize_connections (NMConnection *a, NMConnection *b)
-{
- NMSettingConnection *asc, *bsc;
-
- asc = nm_connection_get_setting_connection (a);
- bsc = nm_connection_get_setting_connection (b);
-
- return strcmp (nm_setting_connection_get_id (asc),
- nm_setting_connection_get_id (bsc));
-}
-
-static gboolean
-connection_combo_init (NMAWifiDialog *self)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkListStore *store;
- int num_added = 0;
- GtkTreeIter tree_iter;
- GtkWidget *widget;
- NMSettingConnection *s_con;
- GtkCellRenderer *renderer;
- const char *id;
-
- g_clear_object (&priv->connection_model);
- g_clear_object (&priv->connection);
-
- /* New model */
- store = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_OBJECT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
- priv->connection_model = GTK_TREE_MODEL (store);
-
- if (priv->specific_connection) {
- s_con = nm_connection_get_setting_connection (priv->specific_connection);
- g_assert (s_con);
- id = nm_setting_connection_get_id (s_con);
- if (id == NULL) {
- /* New connections which will be completed by NM won't have an ID
- * yet, but that doesn't matter because we don't show the connection
- * combo anyway when there's a predefined connection.
- */
- id = "blahblah";
- }
-
- gtk_list_store_append (store, &tree_iter);
- gtk_list_store_set (store, &tree_iter,
- C_NAME_COLUMN, id,
- C_CON_COLUMN, priv->specific_connection, -1);
- } else {
- GSList *to_add = NULL, *iter;
- const GPtrArray *connections;
- int i;
-
- gtk_list_store_append (store, &tree_iter);
- gtk_list_store_set (store, &tree_iter,
- C_NAME_COLUMN, _("New…"),
- C_NEW_COLUMN, TRUE, -1);
-
- gtk_list_store_append (store, &tree_iter);
- gtk_list_store_set (store, &tree_iter, C_SEP_COLUMN, TRUE, -1);
-
- connections = nm_client_get_connections (priv->client);
- for (i = 0; i < connections->len; i++) {
- NMConnection *candidate = NM_CONNECTION (connections->pdata[i]);
- NMSettingWireless *s_wireless;
- const char *connection_type;
- const char *mode;
- const char *setting_mac, *hw_addr;
-
- s_con = nm_connection_get_setting_connection (candidate);
- connection_type = s_con ? nm_setting_connection_get_connection_type (s_con) : NULL;
- if (!connection_type)
- continue;
-
- if (strcmp (connection_type, NM_SETTING_WIRELESS_SETTING_NAME))
- continue;
-
- s_wireless = nm_connection_get_setting_wireless (candidate);
- if (!s_wireless)
- continue;
-
- /* If creating a new Ad-Hoc network, only show shared network connections */
- if (priv->operation == OP_CREATE_ADHOC) {
- NMSettingIPConfig *s_ip4;
- const char *method = NULL;
-
- s_ip4 = nm_connection_get_setting_ip4_config (candidate);
- if (s_ip4)
- method = nm_setting_ip_config_get_method (s_ip4);
-
- if (!s_ip4 || strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED))
- continue;
-
- /* Ignore non-Ad-Hoc connections too */
- mode = nm_setting_wireless_get_mode (s_wireless);
- if (!mode || (strcmp (mode, "adhoc") && strcmp (mode, "ap")))
- continue;
- }
-
- /* Ignore connections that don't apply to the selected device */
- setting_mac = nm_setting_wireless_get_mac_address (s_wireless);
- hw_addr = nm_device_wifi_get_hw_address (NM_DEVICE_WIFI (priv->device));
- if ( setting_mac
- && hw_addr
- && !nm_utils_hwaddr_matches (setting_mac, -1, hw_addr, -1))
- continue;
-
- to_add = g_slist_append (to_add, candidate);
- }
-
- /* Alphabetize the list then add the connections */
- to_add = g_slist_sort (to_add, (GCompareFunc) alphabetize_connections);
- for (iter = to_add; iter; iter = g_slist_next (iter)) {
- NMConnection *candidate = NM_CONNECTION (iter->data);
-
- s_con = nm_connection_get_setting_connection (candidate);
- gtk_list_store_append (store, &tree_iter);
- gtk_list_store_set (store, &tree_iter,
- C_NAME_COLUMN, nm_setting_connection_get_id (s_con),
- C_CON_COLUMN, candidate, -1);
- num_added++;
- }
- g_slist_free (to_add);
- }
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "connection_combo"));
-
- gtk_cell_layout_clear (GTK_CELL_LAYOUT (widget));
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
- gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (widget), renderer,
- "text", C_NAME_COLUMN);
-#if !GTK_CHECK_VERSION(3,96,0)
- gtk_combo_box_set_wrap_width (GTK_COMBO_BOX (widget), 1);
-#endif
-
- gtk_combo_box_set_model (GTK_COMBO_BOX (widget), priv->connection_model);
-
- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (widget),
- connection_combo_separator_cb,
- NULL,
- NULL);
-
- gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
-
- g_signal_handlers_disconnect_by_func (widget, connection_combo_changed, self);
- if (priv->specific_connection || !num_added) {
- gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (priv->builder, "connection_label")));
- gtk_widget_hide (widget);
- } else {
- g_signal_connect (widget, "changed",
- G_CALLBACK (connection_combo_changed), self);
- }
- if (gtk_tree_model_get_iter_first (priv->connection_model, &tree_iter))
- gtk_tree_model_get (priv->connection_model, &tree_iter, C_CON_COLUMN, &priv->connection, -1);
-
- return TRUE;
-}
-
-static void
-device_combo_changed (GtkWidget *combo,
- gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkTreeIter iter;
- GtkTreeModel *model;
-
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) {
- g_warning ("%s: no active device combo box item.", __func__);
- return;
- }
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
-
- g_object_unref (priv->device);
- gtk_tree_model_get (model, &iter, D_DEV_COLUMN, &priv->device, -1);
-
- if (!connection_combo_init (self)) {
- g_warning ("Couldn't change connection combo box.");
- return;
- }
-
- if (!security_combo_init (self, priv->secrets_only, NULL, NULL)) {
- g_warning ("Couldn't change Wi-Fi security combo box.");
- return;
- }
-
- security_combo_changed (priv->sec_combo, self);
-}
-
-static void
-add_device_to_model (GtkListStore *model, NMDevice *device)
-{
- GtkTreeIter iter;
- const char *desc;
-
- desc = nm_device_get_description (device);
- gtk_list_store_append (model, &iter);
- gtk_list_store_set (model, &iter, D_NAME_COLUMN, desc, D_DEV_COLUMN, device, -1);
-}
-
-static gboolean
-can_use_device (NMDevice *device)
-{
- /* Ignore unsupported devices */
- if (!(nm_device_get_capabilities (device) & NM_DEVICE_CAP_NM_SUPPORTED))
- return FALSE;
-
- if (!NM_IS_DEVICE_WIFI (device))
- return FALSE;
-
- if (nm_device_get_state (device) < NM_DEVICE_STATE_DISCONNECTED)
- return FALSE;
-
- return TRUE;
-}
-
-static gboolean
-device_combo_init (NMAWifiDialog *self, NMDevice *device)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- const GPtrArray *devices;
- GtkListStore *store;
- int i, num_added = 0;
-
- g_return_val_if_fail (priv->device == NULL, FALSE);
-
- store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_OBJECT);
- priv->device_model = GTK_TREE_MODEL (store);
-
- if (device) {
- if (!can_use_device (device))
- return FALSE;
- add_device_to_model (store, device);
- num_added++;
- } else {
- devices = nm_client_get_devices (priv->client);
- if (!devices)
- return FALSE;
-
- for (i = 0; devices && (i < devices->len); i++) {
- device = NM_DEVICE (g_ptr_array_index (devices, i));
- if (can_use_device (device)) {
- add_device_to_model (store, device);
- num_added++;
- }
- }
- }
-
- if (num_added > 0) {
- GtkWidget *widget;
- GtkTreeIter iter;
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "device_combo"));
- gtk_combo_box_set_model (GTK_COMBO_BOX (widget), priv->device_model);
- gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
- g_signal_connect (G_OBJECT (widget), "changed",
- G_CALLBACK (device_combo_changed), self);
- if (num_added == 1) {
- gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (priv->builder, "device_label")));
- gtk_widget_hide (widget);
- }
- if (gtk_tree_model_get_iter_first (priv->device_model, &iter))
- gtk_tree_model_get (priv->device_model, &iter, D_DEV_COLUMN, &priv->device, -1);
- }
-
- return num_added > 0 ? TRUE : FALSE;
-}
-
-static gboolean
-find_proto (NMSettingWirelessSecurity *sec, const char *item)
-{
- guint32 i;
-
- for (i = 0; i < nm_setting_wireless_security_get_num_protos (sec); i++) {
- if (!strcmp (item, nm_setting_wireless_security_get_proto (sec, i)))
- return TRUE;
- }
- return FALSE;
-}
-
-static NMUtilsSecurityType
-get_default_type_for_security (NMSettingWirelessSecurity *sec,
- gboolean have_ap,
- guint32 ap_flags,
- guint32 dev_caps)
-{
- const char *key_mgmt, *auth_alg;
-
- g_return_val_if_fail (sec != NULL, NMU_SEC_NONE);
-
- key_mgmt = nm_setting_wireless_security_get_key_mgmt (sec);
- auth_alg = nm_setting_wireless_security_get_auth_alg (sec);
-
- /* No IEEE 802.1x */
- if (!strcmp (key_mgmt, "none"))
- return NMU_SEC_STATIC_WEP;
-
- if ( !strcmp (key_mgmt, "ieee8021x")
- && (!have_ap || (ap_flags & NM_802_11_AP_FLAGS_PRIVACY))) {
- if (auth_alg && !strcmp (auth_alg, "leap"))
- return NMU_SEC_LEAP;
- return NMU_SEC_DYNAMIC_WEP;
- }
-
- if (!strcmp (key_mgmt, "sae"))
- return NMU_SEC_SAE;
-
- if ( !strcmp (key_mgmt, "wpa-none")
- || !strcmp (key_mgmt, "wpa-psk")) {
- if (!have_ap || (ap_flags & NM_802_11_AP_FLAGS_PRIVACY)) {
- if (find_proto (sec, "rsn"))
- return NMU_SEC_WPA2_PSK;
- else if (find_proto (sec, "wpa"))
- return NMU_SEC_WPA_PSK;
- else
- return NMU_SEC_WPA_PSK;
- }
- }
-
- if ( !strcmp (key_mgmt, "wpa-eap")
- && (!have_ap || (ap_flags & NM_802_11_AP_FLAGS_PRIVACY))) {
- if (find_proto (sec, "rsn"))
- return NMU_SEC_WPA2_ENTERPRISE;
- else if (find_proto (sec, "wpa"))
- return NMU_SEC_WPA_ENTERPRISE;
- else
- return NMU_SEC_WPA_ENTERPRISE;
- }
-
- return NMU_SEC_INVALID;
-}
-
-static void
-add_security_item (NMAWifiDialog *self,
- WirelessSecurity *sec,
- GtkListStore *model,
- GtkTreeIter *iter,
- const char *text)
-{
- wireless_security_set_changed_notify (sec, stuff_changed_cb, self);
- gtk_list_store_append (model, iter);
- gtk_list_store_set (model, iter, S_NAME_COLUMN, text, S_SEC_COLUMN, sec, -1);
- wireless_security_unref (sec);
-}
-
-static void
-get_secrets_cb (GObject *object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GetSecretsInfo *info = user_data;
- NMRemoteConnection *connection = NM_REMOTE_CONNECTION (object);
- NMAWifiDialogPrivate *priv;
- GVariant *secrets;
- GVariantIter variant_iter;
- const char *setting_name;
- GVariant *setting_dict;
- GtkTreeModel *model;
- GtkTreeIter iter;
- GError *error = NULL;
- gboolean current_secrets = FALSE;
-
- if (info->canceled)
- goto out;
-
- priv = NMA_WIFI_DIALOG_GET_PRIVATE (info->self);
- if (priv->secrets_info == info) {
- priv->secrets_info = NULL;
-
- /* Buttons should only be re-enabled if this secrets response is the
- * in-progress one.
- */
- gtk_dialog_set_response_sensitive (GTK_DIALOG (info->self), GTK_RESPONSE_CANCEL, TRUE);
- current_secrets = TRUE;
- }
-
- secrets = nm_remote_connection_get_secrets_finish (connection, result, &error);
- if (error) {
- g_warning ("%s: error getting connection secrets: (%d) %s",
- __func__,
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- goto out;
- }
-
- if (current_secrets)
- _set_ok_sensitive (info->self, TRUE, NULL);
-
- /* User might have changed the connection while the secrets call was in
- * progress, so don't try to update the wrong connection with the secrets
- * we just received.
- */
- if ( (priv->connection != info->connection)
- || !secrets)
- goto out;
-
- /* Try to update the connection's secrets; log errors but we don't care */
- g_variant_iter_init (&variant_iter, secrets);
- while (g_variant_iter_next (&variant_iter, "{&s@a{sv}}", &setting_name, &setting_dict)) {
- GError *update_error = NULL;
-
- if (!nm_connection_update_secrets (priv->connection,
- setting_name,
- setting_dict,
- &update_error)) {
- g_warning ("%s: error updating connection secrets: (%d) %s",
- __func__,
- update_error ? update_error->code : -1,
- update_error && update_error->message ? update_error->message : "(unknown)");
- g_clear_error (&update_error);
- }
- g_variant_unref (setting_dict);
- }
-
- /* Update each security method's UI elements with the new secrets */
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->sec_combo));
- if (gtk_tree_model_get_iter_first (model, &iter)) {
- do {
- WirelessSecurity *sec = NULL;
-
- gtk_tree_model_get (model, &iter, S_SEC_COLUMN, &sec, -1);
- if (sec) {
- wireless_security_update_secrets (sec, priv->connection);
- wireless_security_unref (sec);
- }
- } while (gtk_tree_model_iter_next (model, &iter));
- }
-
-out:
- g_object_unref (info->connection);
- g_free (info);
-}
-
-static gboolean
-security_valid (NMUtilsSecurityType sectype,
- NM80211Mode mode,
- NMDeviceWifiCapabilities wifi_caps,
- gboolean have_ap,
- NM80211ApFlags ap_flags,
- NM80211ApSecurityFlags ap_wpa,
- NM80211ApSecurityFlags ap_rsn)
-{
- switch (mode) {
- case NM_802_11_MODE_AP:
- if (sectype == NMU_SEC_SAE)
- return TRUE;
- return nm_utils_ap_mode_security_valid (sectype, wifi_caps);
- case NM_802_11_MODE_ADHOC:
- case NM_802_11_MODE_INFRA:
- default:
- return nm_utils_security_valid (sectype,
- wifi_caps,
- have_ap,
- (mode == NM_802_11_MODE_ADHOC),
- ap_flags, ap_wpa, ap_rsn);
- }
- g_assert_not_reached ();
-}
-
-static gboolean
-security_combo_init (NMAWifiDialog *self, gboolean secrets_only,
- const char *secrets_setting_name, const char *const*secrets_hints)
-{
- NMAWifiDialogPrivate *priv;
- GtkListStore *sec_model;
- GtkTreeIter iter;
- guint32 ap_flags = 0;
- guint32 ap_wpa = 0;
- guint32 ap_rsn = 0;
- guint32 dev_caps;
- NMSettingWirelessSecurity *wsec = NULL;
- NMUtilsSecurityType default_type = NMU_SEC_NONE;
- NMWepKeyType wep_type = NM_WEP_KEY_TYPE_KEY;
- int active = -1;
- int item = 0;
- NMSettingWireless *s_wireless = NULL;
- NM80211Mode mode;
- const char *setting_name;
-
- g_return_val_if_fail (self != NULL, FALSE);
-
- priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- g_return_val_if_fail (priv->device != NULL, FALSE);
- g_return_val_if_fail (priv->sec_combo != NULL, FALSE);
-
- mode = (priv->operation == OP_CREATE_ADHOC) ? NM_802_11_MODE_ADHOC : NM_802_11_MODE_INFRA;
-
- /* The security options displayed are filtered based on device
- * capabilities, and if provided, additionally by access point capabilities.
- * If a connection is given, that connection's options should be selected
- * by default. If hints is non-empty only filter based on the setting
- * keys on the hints list.
- */
- dev_caps = nm_device_wifi_get_capabilities (NM_DEVICE_WIFI (priv->device));
- if (priv->ap != NULL) {
- ap_flags = nm_access_point_get_flags (priv->ap);
- ap_wpa = nm_access_point_get_wpa_flags (priv->ap);
- ap_rsn = nm_access_point_get_rsn_flags (priv->ap);
- }
-
- if (priv->connection) {
- const char *mode_str;
-
- s_wireless = nm_connection_get_setting_wireless (priv->connection);
-
- mode_str = nm_setting_wireless_get_mode (s_wireless);
- if (mode_str && !strcmp (mode_str, "adhoc"))
- mode = NM_802_11_MODE_ADHOC;
- else if (mode_str && !strcmp (mode_str, "ap"))
- mode = NM_802_11_MODE_AP;
- else
- mode = NM_802_11_MODE_INFRA;
-
- wsec = nm_connection_get_setting_wireless_security (priv->connection);
-
- if (wsec) {
- default_type = get_default_type_for_security (wsec, !!priv->ap, ap_flags, dev_caps);
- if (default_type == NMU_SEC_STATIC_WEP)
- wep_type = nm_setting_wireless_security_get_wep_key_type (wsec);
- if (wep_type == NM_WEP_KEY_TYPE_UNKNOWN)
- wep_type = NM_WEP_KEY_TYPE_KEY;
- }
- } else if (mode == NM_802_11_MODE_ADHOC) {
- default_type = NMU_SEC_STATIC_WEP;
- wep_type = NM_WEP_KEY_TYPE_PASSPHRASE;
- }
-
- sec_model = gtk_list_store_new (2, G_TYPE_STRING, WIRELESS_TYPE_SECURITY);
-
- if (security_valid (NMU_SEC_NONE, mode, dev_caps, !!priv->ap, ap_flags, ap_wpa, ap_rsn)) {
- gtk_list_store_append (sec_model, &iter);
- gtk_list_store_set (sec_model, &iter,
- S_NAME_COLUMN, C_("Wifi/wired security", "None"),
- -1);
- if (default_type == NMU_SEC_NONE)
- active = item;
- item++;
- }
-
- /* Don't show Static WEP if both the AP and the device are capable of WPA,
- * even though technically it's possible to have this configuration.
- */
- if ( security_valid (NMU_SEC_STATIC_WEP, mode, dev_caps, !!priv->ap, ap_flags, ap_wpa, ap_rsn)
- && ((!ap_wpa && !ap_rsn) || !(dev_caps & (NM_WIFI_DEVICE_CAP_WPA | NM_WIFI_DEVICE_CAP_RSN)))) {
- WirelessSecurityWEPKey *ws_wep;
-
- ws_wep = ws_wep_key_new (priv->connection, NM_WEP_KEY_TYPE_KEY, mode == NM_802_11_MODE_ADHOC, secrets_only);
- if (ws_wep) {
- add_security_item (self, WIRELESS_SECURITY (ws_wep), sec_model,
- &iter, _("WEP 40/128-bit Key (Hex or ASCII)"));
- if ((active < 0) && (default_type == NMU_SEC_STATIC_WEP) && (wep_type == NM_WEP_KEY_TYPE_KEY))
- active = item;
- item++;
- }
-
- ws_wep = ws_wep_key_new (priv->connection, NM_WEP_KEY_TYPE_PASSPHRASE, mode == NM_802_11_MODE_ADHOC, secrets_only);
- if (ws_wep) {
- add_security_item (self, WIRELESS_SECURITY (ws_wep), sec_model,
- &iter, _("WEP 128-bit Passphrase"));
- if ((active < 0) && (default_type == NMU_SEC_STATIC_WEP) && (wep_type == NM_WEP_KEY_TYPE_PASSPHRASE))
- active = item;
- item++;
- }
- }
-
- /* Don't show LEAP if both the AP and the device are capable of WPA,
- * even though technically it's possible to have this configuration.
- */
- if ( security_valid (NMU_SEC_LEAP, mode, dev_caps, !!priv->ap, ap_flags, ap_wpa, ap_rsn)
- && ((!ap_wpa && !ap_rsn) || !(dev_caps & (NM_WIFI_DEVICE_CAP_WPA | NM_WIFI_DEVICE_CAP_RSN)))) {
- WirelessSecurityLEAP *ws_leap;
-
- ws_leap = ws_leap_new (priv->connection, secrets_only);
- if (ws_leap) {
- add_security_item (self, WIRELESS_SECURITY (ws_leap), sec_model,
- &iter, _("LEAP"));
- if ((active < 0) && (default_type == NMU_SEC_LEAP))
- active = item;
- item++;
- }
- }
-
- if (security_valid (NMU_SEC_DYNAMIC_WEP, mode, dev_caps, !!priv->ap, ap_flags, ap_wpa, ap_rsn)) {
- WirelessSecurityDynamicWEP *ws_dynamic_wep;
-
- ws_dynamic_wep = ws_dynamic_wep_new (priv->connection, FALSE, secrets_only);
- if (ws_dynamic_wep) {
- add_security_item (self, WIRELESS_SECURITY (ws_dynamic_wep), sec_model,
- &iter, _("Dynamic WEP (802.1x)"));
- if ((active < 0) && (default_type == NMU_SEC_DYNAMIC_WEP))
- active = item;
- item++;
- }
- }
-
- if ( security_valid (NMU_SEC_WPA_PSK, mode, dev_caps, !!priv->ap, ap_flags, ap_wpa, ap_rsn)
- || security_valid (NMU_SEC_WPA2_PSK, mode, dev_caps, !!priv->ap, ap_flags, ap_wpa, ap_rsn)) {
- WirelessSecurityWPAPSK *ws_wpa_psk;
-
- ws_wpa_psk = ws_wpa_psk_new (priv->connection, secrets_only);
- if (ws_wpa_psk) {
- add_security_item (self, WIRELESS_SECURITY (ws_wpa_psk), sec_model,
- &iter, _("WPA & WPA2 Personal"));
- if ((active < 0) && ((default_type == NMU_SEC_WPA_PSK) || (default_type == NMU_SEC_WPA2_PSK)))
- active = item;
- item++;
- }
- }
-
- if ( security_valid (NMU_SEC_WPA_ENTERPRISE, mode, dev_caps, !!priv->ap, ap_flags, ap_wpa, ap_rsn)
- || security_valid (NMU_SEC_WPA2_ENTERPRISE, mode, dev_caps, !!priv->ap, ap_flags, ap_wpa, ap_rsn)) {
- WirelessSecurityWPAEAP *ws_wpa_eap;
- const char *const*hints = NULL;
-
- if (secrets_setting_name && !strcmp (secrets_setting_name, NM_SETTING_802_1X_SETTING_NAME))
- hints = secrets_hints;
-
- ws_wpa_eap = ws_wpa_eap_new (priv->connection, FALSE, secrets_only, hints);
- if (ws_wpa_eap) {
- add_security_item (self, WIRELESS_SECURITY (ws_wpa_eap), sec_model,
- &iter, _("WPA & WPA2 Enterprise"));
- if ((active < 0) && ((default_type == NMU_SEC_WPA_ENTERPRISE) || (default_type == NMU_SEC_WPA2_ENTERPRISE)))
- active = item;
- item++;
- }
- }
-
- if (security_valid (NMU_SEC_SAE, mode, dev_caps, !!priv->ap, ap_flags, ap_wpa, ap_rsn)) {
- WirelessSecuritySAE *ws_sae;
-
- ws_sae = ws_sae_new (priv->connection, secrets_only);
- if (ws_sae) {
- add_security_item (self, WIRELESS_SECURITY (ws_sae), sec_model,
- &iter, _("WPA3 Personal"));
- if (active < 0 && default_type == NMU_SEC_SAE)
- active = item;
- item++;
- }
- }
-
- gtk_combo_box_set_model (GTK_COMBO_BOX (priv->sec_combo), GTK_TREE_MODEL (sec_model));
- gtk_combo_box_set_active (GTK_COMBO_BOX (priv->sec_combo), active < 0 ? 0 : (guint32) active);
- g_object_unref (G_OBJECT (sec_model));
-
- /* If the dialog was given a connection when it was created, that connection
- * will already be populated with secrets. If no connection was given,
- * then we need to get any existing secrets to populate the dialog with.
- */
- if (priv->connection) {
- if (secrets_setting_name)
- setting_name = secrets_setting_name;
- else
- setting_name = nm_connection_need_secrets (priv->connection, NULL);
- } else
- setting_name = NULL;
-
- if (setting_name && NM_IS_REMOTE_CONNECTION (priv->connection)) {
- GetSecretsInfo *info;
-
- /* Desensitize the dialog's buttons while we wait for the secrets
- * operation to complete.
- */
- _set_ok_sensitive (self, FALSE, NULL);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_CANCEL, FALSE);
-
- info = g_malloc0 (sizeof (GetSecretsInfo));
- info->self = self;
- info->connection = g_object_ref (priv->connection);
- priv->secrets_info = info;
-
- nm_remote_connection_get_secrets_async (NM_REMOTE_CONNECTION (priv->connection),
- setting_name, NULL, get_secrets_cb, info);
- }
-
- return TRUE;
-}
-
-static gboolean
-revalidate (gpointer user_data)
-{
- NMAWifiDialog *self = NMA_WIFI_DIALOG (user_data);
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
-
- priv->revalidate_id = 0;
- security_combo_changed (priv->sec_combo, self);
- return FALSE;
-}
-
-static gboolean
-internal_init (NMAWifiDialog *self,
- NMConnection *specific_connection,
- NMDevice *specific_device,
- gboolean secrets_only,
- const char *secrets_setting_name,
- const char *const*secrets_hints)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GtkWidget *widget;
- char *label, *icon_name = "network-wireless";
- gboolean security_combo_focus = FALSE;
-
- gtk_window_set_position (GTK_WINDOW (self), GTK_WIN_POS_CENTER_ALWAYS);
- gtk_window_set_default_size (GTK_WINDOW (self), 488, -1);
- gtk_window_set_resizable (GTK_WINDOW (self), FALSE);
-
- priv->secrets_only = secrets_only;
- if (secrets_only)
- icon_name = "dialog-password";
- else
- icon_name = "network-wireless";
-
- if (specific_connection)
- priv->specific_connection = g_object_ref (specific_connection);
-
- gtk_window_set_icon_name (GTK_WINDOW (self), icon_name);
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "image1"));
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_image_set_from_icon_name (GTK_IMAGE (widget), icon_name);
-#else
- gtk_image_set_from_icon_name (GTK_IMAGE (widget), icon_name, GTK_ICON_SIZE_DIALOG);
-#endif
-
- gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (self))), 2);
-
- widget = gtk_dialog_add_button (GTK_DIALOG (self), _("_Cancel"), GTK_RESPONSE_CANCEL);
-
- /* Connect/Create button */
- if (priv->operation == OP_CREATE_ADHOC) {
- widget = gtk_dialog_add_button (GTK_DIALOG (self), _("C_reate"), GTK_RESPONSE_OK);
- } else {
- widget = gtk_dialog_add_button (GTK_DIALOG (self), _("C_onnect"), GTK_RESPONSE_OK);
- priv->ok_response_button = widget;
- }
-
-#if !GTK_CHECK_VERSION(3,96,0)
- g_object_set (G_OBJECT (widget), "can-default", TRUE, NULL);
- gtk_widget_grab_default (widget);
-#endif
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "wifi_dialog"));
- if (!widget) {
- g_warning ("Couldn't find Wi-Fi_dialog widget.");
- return FALSE;
- }
-
- gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (self))), widget);
-
- /* If given a valid connection, hide the SSID bits and connection combo */
- if (specific_connection) {
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_label"));
- gtk_widget_hide (widget);
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_entry"));
- gtk_widget_hide (widget);
-
- security_combo_focus = TRUE;
- priv->network_name_focus = FALSE;
- } else {
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_entry"));
- g_signal_connect (G_OBJECT (widget), "changed", (GCallback) ssid_entry_changed, self);
- priv->network_name_focus = TRUE;
- }
-
- _set_ok_sensitive (self, FALSE, NULL);
-
- if (!device_combo_init (self, specific_device)) {
- g_warning ("No Wi-Fi devices available.");
- return FALSE;
- }
-
- if (!connection_combo_init (self)) {
- g_warning ("Couldn't set up connection combo box.");
- return FALSE;
- }
-
- if (!security_combo_init (self, priv->secrets_only, secrets_setting_name, secrets_hints)) {
- g_warning ("Couldn't set up Wi-Fi security combo box.");
- return FALSE;
- }
-
- security_combo_changed (priv->sec_combo, self);
- g_signal_connect (G_OBJECT (priv->sec_combo), "changed",
- G_CALLBACK (security_combo_changed_manually), self);
-
- if (secrets_only) {
- gtk_widget_hide (priv->sec_combo);
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_combo_label"));
- gtk_widget_hide (widget);
- }
-
- if (security_combo_focus && !secrets_only)
- gtk_widget_grab_focus (priv->sec_combo);
- else if (priv->network_name_focus) {
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "network_name_entry"));
- gtk_widget_grab_focus (widget);
- }
-
- if (priv->connection) {
- char *tmp;
- char *esc_ssid = NULL;
- NMSettingWireless *s_wireless;
- GBytes *ssid;
-
- s_wireless = nm_connection_get_setting_wireless (priv->connection);
- ssid = s_wireless ? nm_setting_wireless_get_ssid (s_wireless) : NULL;
- if (ssid)
- esc_ssid = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid, NULL), g_bytes_get_size (ssid));
-
- tmp = g_strdup_printf (_("Passwords or encryption keys are required to access the Wi-Fi network “%s”."),
- esc_ssid ? esc_ssid : "<unknown>");
- gtk_window_set_title (GTK_WINDOW (self), _("Wi-Fi Network Authentication Required"));
- label = g_markup_printf_escaped ("<span size=\"larger\" weight=\"bold\">%s</span>\n\n%s",
- _("Authentication required by Wi-Fi network"),
- tmp);
- g_free (esc_ssid);
- g_free (tmp);
- } else if (priv->operation == OP_CREATE_ADHOC) {
- gtk_window_set_title (GTK_WINDOW (self), _("Create New Wi-Fi Network"));
- label = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>\n\n%s",
- _("New Wi-Fi network"),
- _("Enter a name for the Wi-Fi network you wish to create."));
- } else if (priv->operation == OP_CONNECT_HIDDEN) {
- gtk_window_set_title (GTK_WINDOW (self), _("Connect to Hidden Wi-Fi Network"));
- label = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>\n\n%s",
- _("Hidden Wi-Fi network"),
- _("Enter the name and security details of the hidden Wi-Fi network you wish to connect to."));
- } else
- g_assert_not_reached ();
-
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "caption_label"));
- gtk_label_set_markup (GTK_LABEL (widget), label);
- g_free (label);
-
- /* Re-validate from an idle handler so that widgets like file choosers
- * have had time to find their files.
- */
- priv->revalidate_id = g_idle_add (revalidate, self);
-
- return TRUE;
-}
-
-/**
- * nma_wifi_dialog_get_connection:
- * @self: an #NMAWifiDialog
- * @device: (out):
- * @ap: (out):
- *
- * Returns: (transfer full):
- */
-NMConnection *
-nma_wifi_dialog_get_connection (NMAWifiDialog *self,
- NMDevice **device,
- NMAccessPoint **ap)
-{
- NMAWifiDialogPrivate *priv;
- GtkWidget *combo;
- GtkTreeModel *model;
- WirelessSecurity *sec = NULL;
- GtkTreeIter iter;
- NMConnection *connection;
- NMSettingWireless *s_wireless;
-
- g_return_val_if_fail (self != NULL, NULL);
-
- priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
-
- if (!priv->connection) {
- NMSettingConnection *s_con;
- char *uuid;
- GBytes *ssid;
-
- connection = nm_simple_connection_new ();
-
- s_con = (NMSettingConnection *) nm_setting_connection_new ();
- uuid = nm_utils_uuid_generate ();
- g_object_set (s_con,
- NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_CONNECTION_UUID, uuid,
- NULL);
- g_free (uuid);
- nm_connection_add_setting (connection, (NMSetting *) s_con);
-
- s_wireless = (NMSettingWireless *) nm_setting_wireless_new ();
- ssid = validate_dialog_ssid (self);
- g_object_set (s_wireless, NM_SETTING_WIRELESS_SSID, ssid, NULL);
- g_bytes_unref (ssid);
-
- if (priv->operation == OP_CREATE_ADHOC) {
- NMSetting *s_ip4;
-
- g_object_set (s_wireless, NM_SETTING_WIRELESS_MODE, "adhoc", NULL);
-
- s_ip4 = nm_setting_ip4_config_new ();
- g_object_set (s_ip4,
- NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_SHARED,
- NULL);
- nm_connection_add_setting (connection, s_ip4);
- } else if (priv->operation == OP_CONNECT_HIDDEN) {
- /* Mark as a hidden SSID network */
- g_object_set (s_wireless, NM_SETTING_WIRELESS_HIDDEN, TRUE, NULL);
- } else
- g_assert_not_reached ();
-
- nm_connection_add_setting (connection, (NMSetting *) s_wireless);
- } else
- connection = g_object_ref (priv->connection);
-
- /* Fill security */
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->sec_combo));
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->sec_combo), &iter))
- gtk_tree_model_get (model, &iter, S_SEC_COLUMN, &sec, -1);
- if (sec) {
- wireless_security_fill_connection (sec, connection);
- wireless_security_unref (sec);
- }
-
- /* Save new CA cert ignore values to GSettings */
- eap_method_ca_cert_ignore_save (connection);
-
- /* Fill device */
- if (device) {
- combo = GTK_WIDGET (gtk_builder_get_object (priv->builder, "device_combo"));
- gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter);
- gtk_tree_model_get (priv->device_model, &iter, D_DEV_COLUMN, device, -1);
- g_object_unref (*device);
- }
-
- if (ap)
- *ap = priv->ap;
-
- return connection;
-}
-
-static GtkWidget *
-internal_new_dialog (NMClient *client,
- NMConnection *connection,
- NMDevice *device,
- NMAccessPoint *ap,
- gboolean secrets_only,
- const char *secrets_setting_name,
- const char *const*secrets_hints)
-{
- NMAWifiDialog *self;
- NMAWifiDialogPrivate *priv;
-
- g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
- g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
-
- self = NMA_WIFI_DIALOG (g_object_new (NMA_TYPE_WIFI_DIALOG, NULL));
- if (self) {
- priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
-
- priv->client = g_object_ref (client);
- if (ap)
- priv->ap = g_object_ref (ap);
-
- priv->sec_combo = GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_combo"));
- priv->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-
- /* Handle CA cert ignore stuff */
- eap_method_ca_cert_ignore_load (connection);
-
- if (!internal_init (self, connection, device, secrets_only, secrets_setting_name, secrets_hints)) {
- g_warning ("Couldn't create Wi-Fi security dialog.");
- gtk_widget_destroy (GTK_WIDGET (self));
- self = NULL;
- }
- }
-
- return GTK_WIDGET (self);
-}
-
-/**
- * nma_wifi_dialog_new:
- * @client: client to retrieve list of devices or connections from
- * @connection: connection to be shown/edited or %NULL
- * @device: device to check connection compatibility against
- * @ap: AP to check connection compatibility against
- * @secrets_only: whether to only ask for secrets for given connection
- *
- * Creates a wifi connection dialog and populates it with settings from
- * @connection if given. If @device is not given a device selection combo box
- * will be included. If @connection is not given a connection selection combo
- * box will be included. If @secrets_only is %FALSE a complete connection
- * creator/editor dialog is returned, otherwise only wifi security secrets
- * relevant to the security settings in @connection are going to be shown and
- * will be editable.
- *
- * Returns: the dialog widget or %NULL in case of error
- */
-GtkWidget *
-nma_wifi_dialog_new (NMClient *client,
- NMConnection *connection,
- NMDevice *device,
- NMAccessPoint *ap,
- gboolean secrets_only)
-{
- guint32 dev_caps;
-
- /* Ensure device validity */
- if (device) {
- dev_caps = nm_device_get_capabilities (device);
- g_return_val_if_fail (dev_caps & NM_DEVICE_CAP_NM_SUPPORTED, NULL);
- g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), NULL);
- }
-
- return internal_new_dialog (client,
- connection,
- device,
- ap,
- secrets_only,
- NULL,
- NULL);
-}
-
-/**
- * nma_wifi_dialog_new_for_secrets:
- * @client: client to retrieve list of devices or connections from
- * @connection: connection for which secrets are requested
- * @secrets_setting_name: setting name whose secrets are requested
- * or %NULL
- * @secrets_hints: array of setting key names within the setting given in
- * @secrets_setting_name which are requested or %NULL
- *
- * Creates a wifi secrets dialog and populates it with setting values from
- * @connection. If @secrets_setting_name and @secrets_hints are not given
- * this function creates an identical dialog as nma_wifi_dialog_new() would
- * create with the @secrets_only parameter %TRUE. Otherwise
- * @secrets_setting_name and @secrets_hints determine the list of specific
- * secrets that are being requested from the user and no editable entries
- * are shown for any other settings.
- *
- * Note: only a subset of all settings and setting keys is supported as
- * @secrets_setting_name and @secrets_hints.
- *
- * Returns: the dialog widget or %NULL in case of error
- */
-GtkWidget *
-nma_wifi_dialog_new_for_secrets (NMClient *client,
- NMConnection *connection,
- const char *secrets_setting_name,
- const char *const*secrets_hints)
-{
- return internal_new_dialog (client,
- connection,
- NULL,
- NULL,
- TRUE,
- secrets_setting_name,
- secrets_hints);
-}
-
-static GtkWidget *
-internal_new_operation (NMClient *client,
- guint operation)
-{
- NMAWifiDialog *self;
- NMAWifiDialogPrivate *priv;
-
- g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
-
- self = NMA_WIFI_DIALOG (g_object_new (NMA_TYPE_WIFI_DIALOG, NULL));
- if (!self)
- return NULL;
-
- priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
-
- priv->client = g_object_ref (client);
- priv->sec_combo = GTK_WIDGET (gtk_builder_get_object (priv->builder, "security_combo"));
- priv->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
- priv->operation = operation;
-
- if (!internal_init (self, NULL, NULL, FALSE, NULL, NULL)) {
- g_warning ("Couldn't create Wi-Fi security dialog.");
- gtk_widget_destroy (GTK_WIDGET (self));
- return NULL;
- }
-
- return GTK_WIDGET (self);
-}
-
-GtkWidget *
-nma_wifi_dialog_new_for_hidden (NMClient *client)
-{
- return internal_new_operation (client, OP_CONNECT_HIDDEN);
-}
-
-GtkWidget *
-nma_wifi_dialog_new_for_other (NMClient *client)
-{
- return internal_new_operation (client, OP_CONNECT_HIDDEN);
-}
-
-GtkWidget *
-nma_wifi_dialog_new_for_create (NMClient *client)
-{
- return internal_new_operation (client, OP_CREATE_ADHOC);
-}
-
-/**
- * nma_wifi_dialog_nag_user:
- * @self:
- *
- * Returns: (transfer full):
- */
-GtkWidget *
-nma_wifi_dialog_nag_user (NMAWifiDialog *self)
-{
- return NULL;
-}
-
-static void
-nma_wifi_dialog_init (NMAWifiDialog *self)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (self);
- GError *error = NULL;
-
- priv->builder = gtk_builder_new ();
-
- if (!gtk_builder_add_from_resource (priv->builder, "/org/freedesktop/network-manager-applet/wifi.ui", &error)) {
- g_warning ("Couldn't load builder resource: %s", error->message);
- g_error_free (error);
- }
-}
-
-static void
-dispose (GObject *object)
-{
- NMAWifiDialogPrivate *priv = NMA_WIFI_DIALOG_GET_PRIVATE (object);
-
-
- if (priv->secrets_info) {
- priv->secrets_info->canceled = TRUE;
- priv->secrets_info = NULL;
- }
-
- g_clear_object (&priv->client);
- g_clear_object (&priv->builder);
-
- g_clear_object (&priv->device_model);
- g_clear_object (&priv->connection_model);
-
- g_clear_object (&priv->group);
-
- g_clear_object (&priv->specific_connection);
- g_clear_object (&priv->connection);
-
- g_clear_object (&priv->device);
-
- g_clear_object (&priv->ap);
-
- if (priv->revalidate_id) {
- g_source_remove (priv->revalidate_id);
- priv->revalidate_id = 0;
- }
-
- G_OBJECT_CLASS (nma_wifi_dialog_parent_class)->dispose (object);
-}
-
-static void
-nma_wifi_dialog_class_init (NMAWifiDialogClass *nmad_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (nmad_class);
-
- g_type_class_add_private (nmad_class, sizeof (NMAWifiDialogPrivate));
-
- /* virtual methods */
- object_class->dispose = dispose;
-}
diff --git a/src/libnma/nma-wifi-dialog.h b/src/libnma/nma-wifi-dialog.h
deleted file mode 100644
index 18c43b0a..00000000
--- a/src/libnma/nma-wifi-dialog.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/* NetworkManager Wireless Applet -- Display wireless access points and allow user control
- *
- * Dan Williams <dcbw@redhat.com>
- *
- * Copyright 2007 - 2014 Red Hat, Inc.
- */
-
-#ifndef NMA_WIFI_DIALOG_H
-#define NMA_WIFI_DIALOG_H
-
-#include <gtk/gtk.h>
-#include <glib.h>
-#include <glib-object.h>
-
-#include <NetworkManager.h>
-
-#include "nma-version.h"
-
-#define NMA_TYPE_WIFI_DIALOG (nma_wifi_dialog_get_type ())
-#define NMA_WIFI_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_WIFI_DIALOG, NMAWifiDialog))
-#define NMA_WIFI_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_WIFI_DIALOG, NMAWifiDialogClass))
-#define NMA_IS_WIFI_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_WIFI_DIALOG))
-#define NMA_IS_WIFI_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_WIFI_DIALOG))
-#define NMA_WIFI_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_WIFI_DIALOG, NMAWifiDialogClass))
-
-typedef struct {
- GtkDialog parent;
-} NMAWifiDialog;
-
-typedef struct {
- GtkDialogClass parent;
-} NMAWifiDialogClass;
-
-GType nma_wifi_dialog_get_type (void);
-
-GtkWidget *nma_wifi_dialog_new (NMClient *client,
- NMConnection *connection,
- NMDevice *device,
- NMAccessPoint *ap,
- gboolean secrets_only);
-
-GtkWidget *nma_wifi_dialog_new_for_secrets (NMClient *client,
- NMConnection *connection,
- const char *secrets_setting_name,
- const char *const*secrets_hints);
-
-GtkWidget *nma_wifi_dialog_new_for_hidden (NMClient *client);
-
-GtkWidget *nma_wifi_dialog_new_for_create (NMClient *client);
-
-NMConnection * nma_wifi_dialog_get_connection (NMAWifiDialog *self,
- NMDevice **device,
- NMAccessPoint **ap);
-
-NMA_DEPRECATED_IN_1_2
-GtkWidget * nma_wifi_dialog_nag_user (NMAWifiDialog *self);
-
-NMA_DEPRECATED_IN_1_2
-void nma_wifi_dialog_set_nag_ignored (NMAWifiDialog *self, gboolean ignored);
-
-NMA_DEPRECATED_IN_1_2
-gboolean nma_wifi_dialog_get_nag_ignored (NMAWifiDialog *self);
-
-NMA_DEPRECATED_IN_1_2_FOR(nma_wifi_dialog_new_for_hidden)
-GtkWidget *nma_wifi_dialog_new_for_other (NMClient *client);
-
-#endif /* NMA_WIFI_DIALOG_H */
-
diff --git a/src/libnma/nma.gresource.xml b/src/libnma/nma.gresource.xml
deleted file mode 100644
index ee1fcb20..00000000
--- a/src/libnma/nma.gresource.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gresources>
- <gresource prefix="/org/freedesktop/network-manager-applet">
- <file preprocess="xml-stripblanks">wifi.ui</file>
- <file preprocess="xml-stripblanks">nma-pkcs11-token-login-dialog.ui</file>
- <file preprocess="xml-stripblanks">nma-pkcs11-cert-chooser-dialog.ui</file>
- <file preprocess="xml-stripblanks">nma-mobile-wizard.ui</file>
- <file preprocess="xml-stripblanks">nma-vpn-password-dialog.ui</file>
- <file preprocess="xml-stripblanks">nma-bar-code-widget.ui</file>
- </gresource>
-</gresources>
diff --git a/src/libnma/qrcodegen.c b/src/libnma/qrcodegen.c
deleted file mode 100644
index 7cda9659..00000000
--- a/src/libnma/qrcodegen.c
+++ /dev/null
@@ -1,1009 +0,0 @@
-/*
- * QR Code generator library (C)
- *
- * Copyright (c) Project Nayuki. (MIT License)
- * https://www.nayuki.io/page/qr-code-generator-library
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- * - The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * - The Software is provided "as is", without warranty of any kind, express or
- * implied, including but not limited to the warranties of merchantability,
- * fitness for a particular purpose and noninfringement. In no event shall the
- * authors or copyright holders be liable for any claim, damages or other
- * liability, whether in an action of contract, tort or otherwise, arising from,
- * out of or in connection with the Software or the use or other dealings in the
- * Software.
- */
-
-#include <assert.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-#include "qrcodegen.h"
-
-#ifndef QRCODEGEN_TEST
- #define testable static // Keep functions private
-#else
- #define testable // Expose private functions
-#endif
-
-
-/*---- Forward declarations for private functions ----*/
-
-// Regarding all public and private functions defined in this source file:
-// - They require all pointer/array arguments to be not null unless the array length is zero.
-// - They only read input scalar/array arguments, write to output pointer/array
-// arguments, and return scalar values; they are "pure" functions.
-// - They don't read mutable global variables or write to any global variables.
-// - They don't perform I/O, read the clock, print to console, etc.
-// - They allocate a small and constant amount of stack memory.
-// - They don't allocate or free any memory on the heap.
-// - They don't recurse or mutually recurse. All the code
-// could be inlined into the top-level public functions.
-// - They run in at most quadratic time with respect to input arguments.
-// Most functions run in linear time, and some in constant time.
-// There are no unbounded loops or non-obvious termination conditions.
-// - They are completely thread-safe if the caller does not give the
-// same writable buffer to concurrent calls to these functions.
-
-testable void appendBitsToBuffer(unsigned int val, int numBits, uint8_t buffer[], int *bitLen);
-
-testable void addEccAndInterleave(uint8_t data[], int version, enum qrcodegen_Ecc ecl, uint8_t result[]);
-testable int getNumDataCodewords(int version, enum qrcodegen_Ecc ecl);
-testable int getNumRawDataModules(int ver);
-
-testable void calcReedSolomonGenerator(int degree, uint8_t result[]);
-testable void calcReedSolomonRemainder(const uint8_t data[], int dataLen,
- const uint8_t generator[], int degree, uint8_t result[]);
-testable uint8_t finiteFieldMultiply(uint8_t x, uint8_t y);
-
-testable void initializeFunctionModules(int version, uint8_t qrcode[]);
-static void drawWhiteFunctionModules(uint8_t qrcode[], int version);
-static void drawFormatBits(enum qrcodegen_Ecc ecl, enum qrcodegen_Mask mask, uint8_t qrcode[]);
-testable int getAlignmentPatternPositions(int version, uint8_t result[7]);
-static void fillRectangle(int left, int top, int width, int height, uint8_t qrcode[]);
-
-static void drawCodewords(const uint8_t data[], int dataLen, uint8_t qrcode[]);
-static void applyMask(const uint8_t functionModules[], uint8_t qrcode[], enum qrcodegen_Mask mask);
-static long getPenaltyScore(const uint8_t qrcode[]);
-static void addRunToHistory(unsigned char run, unsigned char history[7]);
-static bool hasFinderLikePattern(unsigned char runHistory[7]);
-
-testable bool getModule(const uint8_t qrcode[], int x, int y);
-testable void setModule(uint8_t qrcode[], int x, int y, bool isBlack);
-testable void setModuleBounded(uint8_t qrcode[], int x, int y, bool isBlack);
-static bool getBit(int x, int i);
-
-testable int calcSegmentBitLength(enum qrcodegen_Mode mode, size_t numChars);
-testable int getTotalBits(const struct qrcodegen_Segment segs[], size_t len, int version);
-static int numCharCountBits(enum qrcodegen_Mode mode, int version);
-
-
-
-/*---- Private tables of constants ----*/
-
-// The set of all legal characters in alphanumeric mode, where each character
-// value maps to the index in the string. For checking text and encoding segments.
-static const char *ALPHANUMERIC_CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";
-
-// For generating error correction codes.
-testable const int8_t ECC_CODEWORDS_PER_BLOCK[4][41] = {
- // Version: (note that index 0 is for padding, and is set to an illegal value)
- //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
- {-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // Low
- {-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, // Medium
- {-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // Quartile
- {-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // High
-};
-
-#define qrcodegen_REED_SOLOMON_DEGREE_MAX 30 // Based on the table above
-
-// For generating error correction codes.
-testable const int8_t NUM_ERROR_CORRECTION_BLOCKS[4][41] = {
- // Version: (note that index 0 is for padding, and is set to an illegal value)
- //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
- {-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25}, // Low
- {-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49}, // Medium
- {-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68}, // Quartile
- {-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81}, // High
-};
-
-// For automatic mask pattern selection.
-static const int PENALTY_N1 = 3;
-static const int PENALTY_N2 = 3;
-static const int PENALTY_N3 = 40;
-static const int PENALTY_N4 = 10;
-
-
-
-/*---- High-level QR Code encoding functions ----*/
-
-// Public function - see documentation comment in header file.
-bool qrcodegen_encodeText(const char *text, uint8_t tempBuffer[], uint8_t qrcode[],
- enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl) {
-
- size_t textLen = strlen(text);
- if (textLen == 0)
- return qrcodegen_encodeSegmentsAdvanced(NULL, 0, ecl, minVersion, maxVersion, mask, boostEcl, tempBuffer, qrcode);
- size_t bufLen = qrcodegen_BUFFER_LEN_FOR_VERSION(maxVersion);
-
- struct qrcodegen_Segment seg;
- if (qrcodegen_isNumeric(text)) {
- if (qrcodegen_calcSegmentBufferSize(qrcodegen_Mode_NUMERIC, textLen) > bufLen)
- goto fail;
- seg = qrcodegen_makeNumeric(text, tempBuffer);
- } else if (qrcodegen_isAlphanumeric(text)) {
- if (qrcodegen_calcSegmentBufferSize(qrcodegen_Mode_ALPHANUMERIC, textLen) > bufLen)
- goto fail;
- seg = qrcodegen_makeAlphanumeric(text, tempBuffer);
- } else {
- if (textLen > bufLen)
- goto fail;
- for (size_t i = 0; i < textLen; i++)
- tempBuffer[i] = (uint8_t)text[i];
- seg.mode = qrcodegen_Mode_BYTE;
- seg.bitLength = calcSegmentBitLength(seg.mode, textLen);
- if (seg.bitLength == -1)
- goto fail;
- seg.numChars = (int)textLen;
- seg.data = tempBuffer;
- }
- return qrcodegen_encodeSegmentsAdvanced(&seg, 1, ecl, minVersion, maxVersion, mask, boostEcl, tempBuffer, qrcode);
-
-fail:
- qrcode[0] = 0; // Set size to invalid value for safety
- return false;
-}
-
-
-// Public function - see documentation comment in header file.
-bool qrcodegen_encodeBinary(uint8_t dataAndTemp[], size_t dataLen, uint8_t qrcode[],
- enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl) {
-
- struct qrcodegen_Segment seg;
- seg.mode = qrcodegen_Mode_BYTE;
- seg.bitLength = calcSegmentBitLength(seg.mode, dataLen);
- if (seg.bitLength == -1) {
- qrcode[0] = 0; // Set size to invalid value for safety
- return false;
- }
- seg.numChars = (int)dataLen;
- seg.data = dataAndTemp;
- return qrcodegen_encodeSegmentsAdvanced(&seg, 1, ecl, minVersion, maxVersion, mask, boostEcl, dataAndTemp, qrcode);
-}
-
-
-// Appends the given number of low-order bits of the given value to the given byte-based
-// bit buffer, increasing the bit length. Requires 0 <= numBits <= 16 and val < 2^numBits.
-testable void appendBitsToBuffer(unsigned int val, int numBits, uint8_t buffer[], int *bitLen) {
- assert(0 <= numBits && numBits <= 16 && (unsigned long)val >> numBits == 0);
- for (int i = numBits - 1; i >= 0; i--, (*bitLen)++)
- buffer[*bitLen >> 3] |= ((val >> i) & 1) << (7 - (*bitLen & 7));
-}
-
-
-
-/*---- Low-level QR Code encoding functions ----*/
-
-// Public function - see documentation comment in header file.
-bool qrcodegen_encodeSegments(const struct qrcodegen_Segment segs[], size_t len,
- enum qrcodegen_Ecc ecl, uint8_t tempBuffer[], uint8_t qrcode[]) {
- return qrcodegen_encodeSegmentsAdvanced(segs, len, ecl,
- qrcodegen_VERSION_MIN, qrcodegen_VERSION_MAX, -1, true, tempBuffer, qrcode);
-}
-
-
-// Public function - see documentation comment in header file.
-bool qrcodegen_encodeSegmentsAdvanced(const struct qrcodegen_Segment segs[], size_t len, enum qrcodegen_Ecc ecl,
- int minVersion, int maxVersion, int mask, bool boostEcl, uint8_t tempBuffer[], uint8_t qrcode[]) {
- assert(segs != NULL || len == 0);
- assert(qrcodegen_VERSION_MIN <= minVersion && minVersion <= maxVersion && maxVersion <= qrcodegen_VERSION_MAX);
- assert(0 <= (int)ecl && (int)ecl <= 3 && -1 <= (int)mask && (int)mask <= 7);
-
- // Find the minimal version number to use
- int version, dataUsedBits;
- for (version = minVersion; ; version++) {
- int dataCapacityBits = getNumDataCodewords(version, ecl) * 8; // Number of data bits available
- dataUsedBits = getTotalBits(segs, len, version);
- if (dataUsedBits != -1 && dataUsedBits <= dataCapacityBits)
- break; // This version number is found to be suitable
- if (version >= maxVersion) { // All versions in the range could not fit the given data
- qrcode[0] = 0; // Set size to invalid value for safety
- return false;
- }
- }
- assert(dataUsedBits != -1);
-
- // Increase the error correction level while the data still fits in the current version number
- for (int i = (int)qrcodegen_Ecc_MEDIUM; i <= (int)qrcodegen_Ecc_HIGH; i++) { // From low to high
- if (boostEcl && dataUsedBits <= getNumDataCodewords(version, (enum qrcodegen_Ecc)i) * 8)
- ecl = (enum qrcodegen_Ecc)i;
- }
-
- // Concatenate all segments to create the data bit string
- memset(qrcode, 0, qrcodegen_BUFFER_LEN_FOR_VERSION(version) * sizeof(qrcode[0]));
- int bitLen = 0;
- for (size_t i = 0; i < len; i++) {
- const struct qrcodegen_Segment *seg = &segs[i];
- appendBitsToBuffer((int)seg->mode, 4, qrcode, &bitLen);
- appendBitsToBuffer(seg->numChars, numCharCountBits(seg->mode, version), qrcode, &bitLen);
- for (int j = 0; j < seg->bitLength; j++)
- appendBitsToBuffer((seg->data[j >> 3] >> (7 - (j & 7))) & 1, 1, qrcode, &bitLen);
- }
- assert(bitLen == dataUsedBits);
-
- // Add terminator and pad up to a byte if applicable
- int dataCapacityBits = getNumDataCodewords(version, ecl) * 8;
- assert(bitLen <= dataCapacityBits);
- int terminatorBits = dataCapacityBits - bitLen;
- if (terminatorBits > 4)
- terminatorBits = 4;
- appendBitsToBuffer(0, terminatorBits, qrcode, &bitLen);
- appendBitsToBuffer(0, (8 - bitLen % 8) % 8, qrcode, &bitLen);
- assert(bitLen % 8 == 0);
-
- // Pad with alternating bytes until data capacity is reached
- for (uint8_t padByte = 0xEC; bitLen < dataCapacityBits; padByte ^= 0xEC ^ 0x11)
- appendBitsToBuffer(padByte, 8, qrcode, &bitLen);
-
- // Draw function and data codeword modules
- addEccAndInterleave(qrcode, version, ecl, tempBuffer);
- initializeFunctionModules(version, qrcode);
- drawCodewords(tempBuffer, getNumRawDataModules(version) / 8, qrcode);
- drawWhiteFunctionModules(qrcode, version);
- initializeFunctionModules(version, tempBuffer);
-
- // Handle masking
- if (mask == qrcodegen_Mask_AUTO) { // Automatically choose best mask
- long minPenalty = LONG_MAX;
- for (int i = 0; i < 8; i++) {
- enum qrcodegen_Mask msk = (enum qrcodegen_Mask)i;
- drawFormatBits(ecl, msk, qrcode);
- applyMask(tempBuffer, qrcode, msk);
- long penalty = getPenaltyScore(qrcode);
- if (penalty < minPenalty) {
- mask = msk;
- minPenalty = penalty;
- }
- applyMask(tempBuffer, qrcode, msk); // Undoes the mask due to XOR
- }
- }
- assert(0 <= (int)mask && (int)mask <= 7);
- drawFormatBits(ecl, mask, qrcode);
- applyMask(tempBuffer, qrcode, mask);
- return true;
-}
-
-
-
-/*---- Error correction code generation functions ----*/
-
-// Appends error correction bytes to each block of the given data array, then interleaves
-// bytes from the blocks and stores them in the result array. data[0 : dataLen] contains
-// the input data. data[dataLen : rawCodewords] is used as a temporary work area and will
-// be clobbered by this function. The final answer is stored in result[0 : rawCodewords].
-testable void addEccAndInterleave(uint8_t data[], int version, enum qrcodegen_Ecc ecl, uint8_t result[]) {
- // Calculate parameter numbers
- assert(0 <= (int)ecl && (int)ecl < 4 && qrcodegen_VERSION_MIN <= version && version <= qrcodegen_VERSION_MAX);
- int numBlocks = NUM_ERROR_CORRECTION_BLOCKS[(int)ecl][version];
- int blockEccLen = ECC_CODEWORDS_PER_BLOCK [(int)ecl][version];
- int rawCodewords = getNumRawDataModules(version) / 8;
- int dataLen = getNumDataCodewords(version, ecl);
- int numShortBlocks = numBlocks - rawCodewords % numBlocks;
- int shortBlockDataLen = rawCodewords / numBlocks - blockEccLen;
-
- // Split data into blocks, calculate ECC, and interleave
- // (not concatenate) the bytes into a single sequence
- uint8_t generator[qrcodegen_REED_SOLOMON_DEGREE_MAX];
- calcReedSolomonGenerator(blockEccLen, generator);
- const uint8_t *dat = data;
- for (int i = 0; i < numBlocks; i++) {
- int datLen = shortBlockDataLen + (i < numShortBlocks ? 0 : 1);
- uint8_t *ecc = &data[dataLen]; // Temporary storage
- calcReedSolomonRemainder(dat, datLen, generator, blockEccLen, ecc);
- for (int j = 0, k = i; j < datLen; j++, k += numBlocks) { // Copy data
- if (j == shortBlockDataLen)
- k -= numShortBlocks;
- result[k] = dat[j];
- }
- for (int j = 0, k = dataLen + i; j < blockEccLen; j++, k += numBlocks) // Copy ECC
- result[k] = ecc[j];
- dat += datLen;
- }
-}
-
-
-// Returns the number of 8-bit codewords that can be used for storing data (not ECC),
-// for the given version number and error correction level. The result is in the range [9, 2956].
-testable int getNumDataCodewords(int version, enum qrcodegen_Ecc ecl) {
- int v = version, e = (int)ecl;
- assert(0 <= e && e < 4);
- return getNumRawDataModules(v) / 8
- - ECC_CODEWORDS_PER_BLOCK [e][v]
- * NUM_ERROR_CORRECTION_BLOCKS[e][v];
-}
-
-
-// Returns the number of data bits that can be stored in a QR Code of the given version number, after
-// all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.
-// The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.
-testable int getNumRawDataModules(int ver) {
- assert(qrcodegen_VERSION_MIN <= ver && ver <= qrcodegen_VERSION_MAX);
- int result = (16 * ver + 128) * ver + 64;
- if (ver >= 2) {
- int numAlign = ver / 7 + 2;
- result -= (25 * numAlign - 10) * numAlign - 55;
- if (ver >= 7)
- result -= 36;
- }
- return result;
-}
-
-
-
-/*---- Reed-Solomon ECC generator functions ----*/
-
-// Calculates the Reed-Solomon generator polynomial of the given degree, storing in result[0 : degree].
-testable void calcReedSolomonGenerator(int degree, uint8_t result[]) {
- // Start with the monomial x^0
- assert(1 <= degree && degree <= qrcodegen_REED_SOLOMON_DEGREE_MAX);
- memset(result, 0, degree * sizeof(result[0]));
- result[degree - 1] = 1;
-
- // Compute the product polynomial (x - r^0) * (x - r^1) * (x - r^2) * ... * (x - r^{degree-1}),
- // drop the highest term, and store the rest of the coefficients in order of descending powers.
- // Note that r = 0x02, which is a generator element of this field GF(2^8/0x11D).
- uint8_t root = 1;
- for (int i = 0; i < degree; i++) {
- // Multiply the current product by (x - r^i)
- for (int j = 0; j < degree; j++) {
- result[j] = finiteFieldMultiply(result[j], root);
- if (j + 1 < degree)
- result[j] ^= result[j + 1];
- }
- root = finiteFieldMultiply(root, 0x02);
- }
-}
-
-
-// Calculates the remainder of the polynomial data[0 : dataLen] when divided by the generator[0 : degree], where all
-// polynomials are in big endian and the generator has an implicit leading 1 term, storing the result in result[0 : degree].
-testable void calcReedSolomonRemainder(const uint8_t data[], int dataLen,
- const uint8_t generator[], int degree, uint8_t result[]) {
-
- // Perform polynomial division
- assert(1 <= degree && degree <= qrcodegen_REED_SOLOMON_DEGREE_MAX);
- memset(result, 0, degree * sizeof(result[0]));
- for (int i = 0; i < dataLen; i++) {
- uint8_t factor = data[i] ^ result[0];
- memmove(&result[0], &result[1], (degree - 1) * sizeof(result[0]));
- result[degree - 1] = 0;
- for (int j = 0; j < degree; j++)
- result[j] ^= finiteFieldMultiply(generator[j], factor);
- }
-}
-
-#undef qrcodegen_REED_SOLOMON_DEGREE_MAX
-
-
-// Returns the product of the two given field elements modulo GF(2^8/0x11D).
-// All inputs are valid. This could be implemented as a 256*256 lookup table.
-testable uint8_t finiteFieldMultiply(uint8_t x, uint8_t y) {
- // Russian peasant multiplication
- uint8_t z = 0;
- for (int i = 7; i >= 0; i--) {
- z = (z << 1) ^ ((z >> 7) * 0x11D);
- z ^= ((y >> i) & 1) * x;
- }
- return z;
-}
-
-
-
-/*---- Drawing function modules ----*/
-
-// Clears the given QR Code grid with white modules for the given
-// version's size, then marks every function module as black.
-testable void initializeFunctionModules(int version, uint8_t qrcode[]) {
- // Initialize QR Code
- int qrsize = version * 4 + 17;
- memset(qrcode, 0, ((qrsize * qrsize + 7) / 8 + 1) * sizeof(qrcode[0]));
- qrcode[0] = (uint8_t)qrsize;
-
- // Fill horizontal and vertical timing patterns
- fillRectangle(6, 0, 1, qrsize, qrcode);
- fillRectangle(0, 6, qrsize, 1, qrcode);
-
- // Fill 3 finder patterns (all corners except bottom right) and format bits
- fillRectangle(0, 0, 9, 9, qrcode);
- fillRectangle(qrsize - 8, 0, 8, 9, qrcode);
- fillRectangle(0, qrsize - 8, 9, 8, qrcode);
-
- // Fill numerous alignment patterns
- uint8_t alignPatPos[7];
- int numAlign = getAlignmentPatternPositions(version, alignPatPos);
- for (int i = 0; i < numAlign; i++) {
- for (int j = 0; j < numAlign; j++) {
- // Don't draw on the three finder corners
- if (!((i == 0 && j == 0) || (i == 0 && j == numAlign - 1) || (i == numAlign - 1 && j == 0)))
- fillRectangle(alignPatPos[i] - 2, alignPatPos[j] - 2, 5, 5, qrcode);
- }
- }
-
- // Fill version blocks
- if (version >= 7) {
- fillRectangle(qrsize - 11, 0, 3, 6, qrcode);
- fillRectangle(0, qrsize - 11, 6, 3, qrcode);
- }
-}
-
-
-// Draws white function modules and possibly some black modules onto the given QR Code, without changing
-// non-function modules. This does not draw the format bits. This requires all function modules to be previously
-// marked black (namely by initializeFunctionModules()), because this may skip redrawing black function modules.
-static void drawWhiteFunctionModules(uint8_t qrcode[], int version) {
- // Draw horizontal and vertical timing patterns
- int qrsize = qrcodegen_getSize(qrcode);
- for (int i = 7; i < qrsize - 7; i += 2) {
- setModule(qrcode, 6, i, false);
- setModule(qrcode, i, 6, false);
- }
-
- // Draw 3 finder patterns (all corners except bottom right; overwrites some timing modules)
- for (int dy = -4; dy <= 4; dy++) {
- for (int dx = -4; dx <= 4; dx++) {
- int dist = abs(dx);
- if (abs(dy) > dist)
- dist = abs(dy);
- if (dist == 2 || dist == 4) {
- setModuleBounded(qrcode, 3 + dx, 3 + dy, false);
- setModuleBounded(qrcode, qrsize - 4 + dx, 3 + dy, false);
- setModuleBounded(qrcode, 3 + dx, qrsize - 4 + dy, false);
- }
- }
- }
-
- // Draw numerous alignment patterns
- uint8_t alignPatPos[7];
- int numAlign = getAlignmentPatternPositions(version, alignPatPos);
- for (int i = 0; i < numAlign; i++) {
- for (int j = 0; j < numAlign; j++) {
- if ((i == 0 && j == 0) || (i == 0 && j == numAlign - 1) || (i == numAlign - 1 && j == 0))
- continue; // Don't draw on the three finder corners
- for (int dy = -1; dy <= 1; dy++) {
- for (int dx = -1; dx <= 1; dx++)
- setModule(qrcode, alignPatPos[i] + dx, alignPatPos[j] + dy, dx == 0 && dy == 0);
- }
- }
- }
-
- // Draw version blocks
- if (version >= 7) {
- // Calculate error correction code and pack bits
- int rem = version; // version is uint6, in the range [7, 40]
- for (int i = 0; i < 12; i++)
- rem = (rem << 1) ^ ((rem >> 11) * 0x1F25);
- long bits = (long)version << 12 | rem; // uint18
- assert(bits >> 18 == 0);
-
- // Draw two copies
- for (int i = 0; i < 6; i++) {
- for (int j = 0; j < 3; j++) {
- int k = qrsize - 11 + j;
- setModule(qrcode, k, i, (bits & 1) != 0);
- setModule(qrcode, i, k, (bits & 1) != 0);
- bits >>= 1;
- }
- }
- }
-}
-
-
-// Draws two copies of the format bits (with its own error correction code) based
-// on the given mask and error correction level. This always draws all modules of
-// the format bits, unlike drawWhiteFunctionModules() which might skip black modules.
-static void drawFormatBits(enum qrcodegen_Ecc ecl, enum qrcodegen_Mask mask, uint8_t qrcode[]) {
- // Calculate error correction code and pack bits
- assert(0 <= (int)mask && (int)mask <= 7);
- static const int table[] = {1, 0, 3, 2};
- int data = table[(int)ecl] << 3 | (int)mask; // errCorrLvl is uint2, mask is uint3
- int rem = data;
- for (int i = 0; i < 10; i++)
- rem = (rem << 1) ^ ((rem >> 9) * 0x537);
- int bits = (data << 10 | rem) ^ 0x5412; // uint15
- assert(bits >> 15 == 0);
-
- // Draw first copy
- for (int i = 0; i <= 5; i++)
- setModule(qrcode, 8, i, getBit(bits, i));
- setModule(qrcode, 8, 7, getBit(bits, 6));
- setModule(qrcode, 8, 8, getBit(bits, 7));
- setModule(qrcode, 7, 8, getBit(bits, 8));
- for (int i = 9; i < 15; i++)
- setModule(qrcode, 14 - i, 8, getBit(bits, i));
-
- // Draw second copy
- int qrsize = qrcodegen_getSize(qrcode);
- for (int i = 0; i < 8; i++)
- setModule(qrcode, qrsize - 1 - i, 8, getBit(bits, i));
- for (int i = 8; i < 15; i++)
- setModule(qrcode, 8, qrsize - 15 + i, getBit(bits, i));
- setModule(qrcode, 8, qrsize - 8, true); // Always black
-}
-
-
-// Calculates and stores an ascending list of positions of alignment patterns
-// for this version number, returning the length of the list (in the range [0,7]).
-// Each position is in the range [0,177), and are used on both the x and y axes.
-// This could be implemented as lookup table of 40 variable-length lists of unsigned bytes.
-testable int getAlignmentPatternPositions(int version, uint8_t result[7]) {
- if (version == 1)
- return 0;
- int numAlign = version / 7 + 2;
- int step = (version == 32) ? 26 :
- (version*4 + numAlign*2 + 1) / (numAlign*2 - 2) * 2;
- for (int i = numAlign - 1, pos = version * 4 + 10; i >= 1; i--, pos -= step)
- result[i] = pos;
- result[0] = 6;
- return numAlign;
-}
-
-
-// Sets every pixel in the range [left : left + width] * [top : top + height] to black.
-static void fillRectangle(int left, int top, int width, int height, uint8_t qrcode[]) {
- for (int dy = 0; dy < height; dy++) {
- for (int dx = 0; dx < width; dx++)
- setModule(qrcode, left + dx, top + dy, true);
- }
-}
-
-
-
-/*---- Drawing data modules and masking ----*/
-
-// Draws the raw codewords (including data and ECC) onto the given QR Code. This requires the initial state of
-// the QR Code to be black at function modules and white at codeword modules (including unused remainder bits).
-static void drawCodewords(const uint8_t data[], int dataLen, uint8_t qrcode[]) {
- int qrsize = qrcodegen_getSize(qrcode);
- int i = 0; // Bit index into the data
- // Do the funny zigzag scan
- for (int right = qrsize - 1; right >= 1; right -= 2) { // Index of right column in each column pair
- if (right == 6)
- right = 5;
- for (int vert = 0; vert < qrsize; vert++) { // Vertical counter
- for (int j = 0; j < 2; j++) {
- int x = right - j; // Actual x coordinate
- bool upward = ((right + 1) & 2) == 0;
- int y = upward ? qrsize - 1 - vert : vert; // Actual y coordinate
- if (!getModule(qrcode, x, y) && i < dataLen * 8) {
- bool black = getBit(data[i >> 3], 7 - (i & 7));
- setModule(qrcode, x, y, black);
- i++;
- }
- // If this QR Code has any remainder bits (0 to 7), they were assigned as
- // 0/false/white by the constructor and are left unchanged by this method
- }
- }
- }
- assert(i == dataLen * 8);
-}
-
-
-// XORs the codeword modules in this QR Code with the given mask pattern.
-// The function modules must be marked and the codeword bits must be drawn
-// before masking. Due to the arithmetic of XOR, calling applyMask() with
-// the same mask value a second time will undo the mask. A final well-formed
-// QR Code needs exactly one (not zero, two, etc.) mask applied.
-static void applyMask(const uint8_t functionModules[], uint8_t qrcode[], enum qrcodegen_Mask mask) {
- assert(0 <= (int)mask && (int)mask <= 7); // Disallows qrcodegen_Mask_AUTO
- int qrsize = qrcodegen_getSize(qrcode);
- for (int y = 0; y < qrsize; y++) {
- for (int x = 0; x < qrsize; x++) {
- if (getModule(functionModules, x, y))
- continue;
- bool invert;
- switch ((int)mask) {
- case 0: invert = (x + y) % 2 == 0; break;
- case 1: invert = y % 2 == 0; break;
- case 2: invert = x % 3 == 0; break;
- case 3: invert = (x + y) % 3 == 0; break;
- case 4: invert = (x / 3 + y / 2) % 2 == 0; break;
- case 5: invert = x * y % 2 + x * y % 3 == 0; break;
- case 6: invert = (x * y % 2 + x * y % 3) % 2 == 0; break;
- case 7: invert = ((x + y) % 2 + x * y % 3) % 2 == 0; break;
- default: assert(false); return;
- }
- bool val = getModule(qrcode, x, y);
- setModule(qrcode, x, y, val ^ invert);
- }
- }
-}
-
-
-// Calculates and returns the penalty score based on state of the given QR Code's current modules.
-// This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.
-static long getPenaltyScore(const uint8_t qrcode[]) {
- int qrsize = qrcodegen_getSize(qrcode);
- long result = 0;
-
- // Adjacent modules in row having same color, and finder-like patterns
- for (int y = 0; y < qrsize; y++) {
- unsigned char runHistory[7] = {0};
- bool color = false;
- unsigned char runX = 0;
- for (int x = 0; x < qrsize; x++) {
- if (getModule(qrcode, x, y) == color) {
- runX++;
- if (runX == 5)
- result += PENALTY_N1;
- else if (runX > 5)
- result++;
- } else {
- addRunToHistory(runX, runHistory);
- if (!color && hasFinderLikePattern(runHistory))
- result += PENALTY_N3;
- color = getModule(qrcode, x, y);
- runX = 1;
- }
- }
- addRunToHistory(runX, runHistory);
- if (color)
- addRunToHistory(0, runHistory); // Dummy run of white
- if (hasFinderLikePattern(runHistory))
- result += PENALTY_N3;
- }
- // Adjacent modules in column having same color, and finder-like patterns
- for (int x = 0; x < qrsize; x++) {
- unsigned char runHistory[7] = {0};
- bool color = false;
- unsigned char runY = 0;
- for (int y = 0; y < qrsize; y++) {
- if (getModule(qrcode, x, y) == color) {
- runY++;
- if (runY == 5)
- result += PENALTY_N1;
- else if (runY > 5)
- result++;
- } else {
- addRunToHistory(runY, runHistory);
- if (!color && hasFinderLikePattern(runHistory))
- result += PENALTY_N3;
- color = getModule(qrcode, x, y);
- runY = 1;
- }
- }
- addRunToHistory(runY, runHistory);
- if (color)
- addRunToHistory(0, runHistory); // Dummy run of white
- if (hasFinderLikePattern(runHistory))
- result += PENALTY_N3;
- }
-
- // 2*2 blocks of modules having same color
- for (int y = 0; y < qrsize - 1; y++) {
- for (int x = 0; x < qrsize - 1; x++) {
- bool color = getModule(qrcode, x, y);
- if ( color == getModule(qrcode, x + 1, y) &&
- color == getModule(qrcode, x, y + 1) &&
- color == getModule(qrcode, x + 1, y + 1))
- result += PENALTY_N2;
- }
- }
-
- // Balance of black and white modules
- int black = 0;
- for (int y = 0; y < qrsize; y++) {
- for (int x = 0; x < qrsize; x++) {
- if (getModule(qrcode, x, y))
- black++;
- }
- }
- int total = qrsize * qrsize; // Note that size is odd, so black/total != 1/2
- // Compute the smallest integer k >= 0 such that (45-5k)% <= black/total <= (55+5k)%
- int k = (int)((labs(black * 20L - total * 10L) + total - 1) / total) - 1;
- result += k * PENALTY_N4;
- return result;
-}
-
-
-// Inserts the given value to the front of the given array, which shifts over the
-// existing values and deletes the last value. A helper function for getPenaltyScore().
-static void addRunToHistory(unsigned char run, unsigned char history[7]) {
- memmove(&history[1], &history[0], 6 * sizeof(history[0]));
- history[0] = run;
-}
-
-
-// Tests whether the given run history has the pattern of ratio 1:1:3:1:1 in the middle, and
-// surrounded by at least 4 on either or both ends. A helper function for getPenaltyScore().
-// Must only be called immediately after a run of white modules has ended.
-static bool hasFinderLikePattern(unsigned char runHistory[7]) {
- unsigned char n = runHistory[1];
- // The maximum QR Code size is 177, hence the run length n <= 177.
- // Arithmetic is promoted to int, so n*4 will not overflow.
- return n > 0 && runHistory[2] == n && runHistory[4] == n && runHistory[5] == n
- && runHistory[3] == n * 3 && (runHistory[0] >= n * 4 || runHistory[6] >= n * 4);
-}
-
-
-
-/*---- Basic QR Code information ----*/
-
-// Public function - see documentation comment in header file.
-int qrcodegen_getSize(const uint8_t qrcode[]) {
- assert(qrcode != NULL);
- int result = qrcode[0];
- assert((qrcodegen_VERSION_MIN * 4 + 17) <= result
- && result <= (qrcodegen_VERSION_MAX * 4 + 17));
- return result;
-}
-
-
-// Public function - see documentation comment in header file.
-bool qrcodegen_getModule(const uint8_t qrcode[], int x, int y) {
- assert(qrcode != NULL);
- int qrsize = qrcode[0];
- return (0 <= x && x < qrsize && 0 <= y && y < qrsize) && getModule(qrcode, x, y);
-}
-
-
-// Gets the module at the given coordinates, which must be in bounds.
-testable bool getModule(const uint8_t qrcode[], int x, int y) {
- int qrsize = qrcode[0];
- assert(21 <= qrsize && qrsize <= 177 && 0 <= x && x < qrsize && 0 <= y && y < qrsize);
- int index = y * qrsize + x;
- return getBit(qrcode[(index >> 3) + 1], index & 7);
-}
-
-
-// Sets the module at the given coordinates, which must be in bounds.
-testable void setModule(uint8_t qrcode[], int x, int y, bool isBlack) {
- int qrsize = qrcode[0];
- assert(21 <= qrsize && qrsize <= 177 && 0 <= x && x < qrsize && 0 <= y && y < qrsize);
- int index = y * qrsize + x;
- int bitIndex = index & 7;
- int byteIndex = (index >> 3) + 1;
- if (isBlack)
- qrcode[byteIndex] |= 1 << bitIndex;
- else
- qrcode[byteIndex] &= (1 << bitIndex) ^ 0xFF;
-}
-
-
-// Sets the module at the given coordinates, doing nothing if out of bounds.
-testable void setModuleBounded(uint8_t qrcode[], int x, int y, bool isBlack) {
- int qrsize = qrcode[0];
- if (0 <= x && x < qrsize && 0 <= y && y < qrsize)
- setModule(qrcode, x, y, isBlack);
-}
-
-
-// Returns true iff the i'th bit of x is set to 1. Requires x >= 0 and 0 <= i <= 14.
-static bool getBit(int x, int i) {
- return ((x >> i) & 1) != 0;
-}
-
-
-
-/*---- Segment handling ----*/
-
-// Public function - see documentation comment in header file.
-bool qrcodegen_isAlphanumeric(const char *text) {
- assert(text != NULL);
- for (; *text != '\0'; text++) {
- if (strchr(ALPHANUMERIC_CHARSET, *text) == NULL)
- return false;
- }
- return true;
-}
-
-
-// Public function - see documentation comment in header file.
-bool qrcodegen_isNumeric(const char *text) {
- assert(text != NULL);
- for (; *text != '\0'; text++) {
- if (*text < '0' || *text > '9')
- return false;
- }
- return true;
-}
-
-
-// Public function - see documentation comment in header file.
-size_t qrcodegen_calcSegmentBufferSize(enum qrcodegen_Mode mode, size_t numChars) {
- int temp = calcSegmentBitLength(mode, numChars);
- if (temp == -1)
- return SIZE_MAX;
- assert(0 <= temp && temp <= INT16_MAX);
- return ((size_t)temp + 7) / 8;
-}
-
-
-// Returns the number of data bits needed to represent a segment
-// containing the given number of characters using the given mode. Notes:
-// - Returns -1 on failure, i.e. numChars > INT16_MAX or
-// the number of needed bits exceeds INT16_MAX (i.e. 32767).
-// - Otherwise, all valid results are in the range [0, INT16_MAX].
-// - For byte mode, numChars measures the number of bytes, not Unicode code points.
-// - For ECI mode, numChars must be 0, and the worst-case number of bits is returned.
-// An actual ECI segment can have shorter data. For non-ECI modes, the result is exact.
-testable int calcSegmentBitLength(enum qrcodegen_Mode mode, size_t numChars) {
- // All calculations are designed to avoid overflow on all platforms
- if (numChars > (unsigned int)INT16_MAX)
- return -1;
- long result = (long)numChars;
- if (mode == qrcodegen_Mode_NUMERIC)
- result = (result * 10 + 2) / 3; // ceil(10/3 * n)
- else if (mode == qrcodegen_Mode_ALPHANUMERIC)
- result = (result * 11 + 1) / 2; // ceil(11/2 * n)
- else if (mode == qrcodegen_Mode_BYTE)
- result *= 8;
- else if (mode == qrcodegen_Mode_KANJI)
- result *= 13;
- else if (mode == qrcodegen_Mode_ECI && numChars == 0)
- result = 3 * 8;
- else { // Invalid argument
- assert(false);
- return -1;
- }
- assert(result >= 0);
- if (result > (unsigned int)INT16_MAX)
- return -1;
- return (int)result;
-}
-
-
-// Public function - see documentation comment in header file.
-struct qrcodegen_Segment qrcodegen_makeBytes(const uint8_t data[], size_t len, uint8_t buf[]) {
- assert(data != NULL || len == 0);
- struct qrcodegen_Segment result;
- result.mode = qrcodegen_Mode_BYTE;
- result.bitLength = calcSegmentBitLength(result.mode, len);
- assert(result.bitLength != -1);
- result.numChars = (int)len;
- if (len > 0)
- memcpy(buf, data, len * sizeof(buf[0]));
- result.data = buf;
- return result;
-}
-
-
-// Public function - see documentation comment in header file.
-struct qrcodegen_Segment qrcodegen_makeNumeric(const char *digits, uint8_t buf[]) {
- assert(digits != NULL);
- struct qrcodegen_Segment result;
- size_t len = strlen(digits);
- result.mode = qrcodegen_Mode_NUMERIC;
- int bitLen = calcSegmentBitLength(result.mode, len);
- assert(bitLen != -1);
- result.numChars = (int)len;
- if (bitLen > 0)
- memset(buf, 0, ((size_t)bitLen + 7) / 8 * sizeof(buf[0]));
- result.bitLength = 0;
-
- unsigned int accumData = 0;
- int accumCount = 0;
- for (; *digits != '\0'; digits++) {
- char c = *digits;
- assert('0' <= c && c <= '9');
- accumData = accumData * 10 + (unsigned int)(c - '0');
- accumCount++;
- if (accumCount == 3) {
- appendBitsToBuffer(accumData, 10, buf, &result.bitLength);
- accumData = 0;
- accumCount = 0;
- }
- }
- if (accumCount > 0) // 1 or 2 digits remaining
- appendBitsToBuffer(accumData, accumCount * 3 + 1, buf, &result.bitLength);
- assert(result.bitLength == bitLen);
- result.data = buf;
- return result;
-}
-
-
-// Public function - see documentation comment in header file.
-struct qrcodegen_Segment qrcodegen_makeAlphanumeric(const char *text, uint8_t buf[]) {
- assert(text != NULL);
- struct qrcodegen_Segment result;
- size_t len = strlen(text);
- result.mode = qrcodegen_Mode_ALPHANUMERIC;
- int bitLen = calcSegmentBitLength(result.mode, len);
- assert(bitLen != -1);
- result.numChars = (int)len;
- if (bitLen > 0)
- memset(buf, 0, ((size_t)bitLen + 7) / 8 * sizeof(buf[0]));
- result.bitLength = 0;
-
- unsigned int accumData = 0;
- int accumCount = 0;
- for (; *text != '\0'; text++) {
- const char *temp = strchr(ALPHANUMERIC_CHARSET, *text);
- assert(temp != NULL);
- accumData = accumData * 45 + (unsigned int)(temp - ALPHANUMERIC_CHARSET);
- accumCount++;
- if (accumCount == 2) {
- appendBitsToBuffer(accumData, 11, buf, &result.bitLength);
- accumData = 0;
- accumCount = 0;
- }
- }
- if (accumCount > 0) // 1 character remaining
- appendBitsToBuffer(accumData, 6, buf, &result.bitLength);
- assert(result.bitLength == bitLen);
- result.data = buf;
- return result;
-}
-
-
-// Public function - see documentation comment in header file.
-struct qrcodegen_Segment qrcodegen_makeEci(long assignVal, uint8_t buf[]) {
- struct qrcodegen_Segment result;
- result.mode = qrcodegen_Mode_ECI;
- result.numChars = 0;
- result.bitLength = 0;
- if (assignVal < 0)
- assert(false);
- else if (assignVal < (1 << 7)) {
- memset(buf, 0, 1 * sizeof(buf[0]));
- appendBitsToBuffer(assignVal, 8, buf, &result.bitLength);
- } else if (assignVal < (1 << 14)) {
- memset(buf, 0, 2 * sizeof(buf[0]));
- appendBitsToBuffer(2, 2, buf, &result.bitLength);
- appendBitsToBuffer(assignVal, 14, buf, &result.bitLength);
- } else if (assignVal < 1000000L) {
- memset(buf, 0, 3 * sizeof(buf[0]));
- appendBitsToBuffer(6, 3, buf, &result.bitLength);
- appendBitsToBuffer(assignVal >> 10, 11, buf, &result.bitLength);
- appendBitsToBuffer(assignVal & 0x3FF, 10, buf, &result.bitLength);
- } else
- assert(false);
- result.data = buf;
- return result;
-}
-
-
-// Calculates the number of bits needed to encode the given segments at the given version.
-// Returns a non-negative number if successful. Otherwise returns -1 if a segment has too
-// many characters to fit its length field, or the total bits exceeds INT16_MAX.
-testable int getTotalBits(const struct qrcodegen_Segment segs[], size_t len, int version) {
- assert(segs != NULL || len == 0);
- long result = 0;
- for (size_t i = 0; i < len; i++) {
- int numChars = segs[i].numChars;
- int bitLength = segs[i].bitLength;
- assert(0 <= numChars && numChars <= INT16_MAX);
- assert(0 <= bitLength && bitLength <= INT16_MAX);
- int ccbits = numCharCountBits(segs[i].mode, version);
- assert(0 <= ccbits && ccbits <= 16);
- if (numChars >= (1L << ccbits))
- return -1; // The segment's length doesn't fit the field's bit width
- result += 4L + ccbits + bitLength;
- if (result > INT16_MAX)
- return -1; // The sum might overflow an int type
- }
- assert(0 <= result && result <= INT16_MAX);
- return (int)result;
-}
-
-
-// Returns the bit width of the character count field for a segment in the given mode
-// in a QR Code at the given version number. The result is in the range [0, 16].
-static int numCharCountBits(enum qrcodegen_Mode mode, int version) {
- assert(qrcodegen_VERSION_MIN <= version && version <= qrcodegen_VERSION_MAX);
- int i = (version + 7) / 17;
- switch (mode) {
- case qrcodegen_Mode_NUMERIC : { static const int temp[] = {10, 12, 14}; return temp[i]; }
- case qrcodegen_Mode_ALPHANUMERIC: { static const int temp[] = { 9, 11, 13}; return temp[i]; }
- case qrcodegen_Mode_BYTE : { static const int temp[] = { 8, 16, 16}; return temp[i]; }
- case qrcodegen_Mode_KANJI : { static const int temp[] = { 8, 10, 12}; return temp[i]; }
- case qrcodegen_Mode_ECI : return 0;
- default: assert(false); return -1; // Dummy value
- }
-}
diff --git a/src/libnma/qrcodegen.h b/src/libnma/qrcodegen.h
deleted file mode 100644
index 55e2bfec..00000000
--- a/src/libnma/qrcodegen.h
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * QR Code generator library (C)
- *
- * Copyright (c) Project Nayuki. (MIT License)
- * https://www.nayuki.io/page/qr-code-generator-library
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- * - The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * - The Software is provided "as is", without warranty of any kind, express or
- * implied, including but not limited to the warranties of merchantability,
- * fitness for a particular purpose and noninfringement. In no event shall the
- * authors or copyright holders be liable for any claim, damages or other
- * liability, whether in an action of contract, tort or otherwise, arising from,
- * out of or in connection with the Software or the use or other dealings in the
- * Software.
- */
-
-#pragma once
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*
- * This library creates QR Code symbols, which is a type of two-dimension barcode.
- * Invented by Denso Wave and described in the ISO/IEC 18004 standard.
- * A QR Code structure is an immutable square grid of black and white cells.
- * The library provides functions to create a QR Code from text or binary data.
- * The library covers the QR Code Model 2 specification, supporting all versions (sizes)
- * from 1 to 40, all 4 error correction levels, and 4 character encoding modes.
- *
- * Ways to create a QR Code object:
- * - High level: Take the payload data and call qrcodegen_encodeText() or qrcodegen_encodeBinary().
- * - Low level: Custom-make the list of segments and call
- * qrcodegen_encodeSegments() or qrcodegen_encodeSegmentsAdvanced().
- * (Note that all ways require supplying the desired error correction level and various byte buffers.)
- */
-
-
-/*---- Enum and struct types----*/
-
-/*
- * The error correction level in a QR Code symbol.
- */
-enum qrcodegen_Ecc {
- // Must be declared in ascending order of error protection
- // so that an internal qrcodegen function works properly
- qrcodegen_Ecc_LOW = 0 , // The QR Code can tolerate about 7% erroneous codewords
- qrcodegen_Ecc_MEDIUM , // The QR Code can tolerate about 15% erroneous codewords
- qrcodegen_Ecc_QUARTILE, // The QR Code can tolerate about 25% erroneous codewords
- qrcodegen_Ecc_HIGH , // The QR Code can tolerate about 30% erroneous codewords
-};
-
-
-/*
- * The mask pattern used in a QR Code symbol.
- */
-enum qrcodegen_Mask {
- // A special value to tell the QR Code encoder to
- // automatically select an appropriate mask pattern
- qrcodegen_Mask_AUTO = -1,
- // The eight actual mask patterns
- qrcodegen_Mask_0 = 0,
- qrcodegen_Mask_1,
- qrcodegen_Mask_2,
- qrcodegen_Mask_3,
- qrcodegen_Mask_4,
- qrcodegen_Mask_5,
- qrcodegen_Mask_6,
- qrcodegen_Mask_7,
-};
-
-
-/*
- * Describes how a segment's data bits are interpreted.
- */
-enum qrcodegen_Mode {
- qrcodegen_Mode_NUMERIC = 0x1,
- qrcodegen_Mode_ALPHANUMERIC = 0x2,
- qrcodegen_Mode_BYTE = 0x4,
- qrcodegen_Mode_KANJI = 0x8,
- qrcodegen_Mode_ECI = 0x7,
-};
-
-
-/*
- * A segment of character/binary/control data in a QR Code symbol.
- * The mid-level way to create a segment is to take the payload data
- * and call a factory function such as qrcodegen_makeNumeric().
- * The low-level way to create a segment is to custom-make the bit buffer
- * and initialize a qrcodegen_Segment struct with appropriate values.
- * Even in the most favorable conditions, a QR Code can only hold 7089 characters of data.
- * Any segment longer than this is meaningless for the purpose of generating QR Codes.
- * Moreover, the maximum allowed bit length is 32767 because
- * the largest QR Code (version 40) has 31329 modules.
- */
-struct qrcodegen_Segment {
- // The mode indicator of this segment.
- enum qrcodegen_Mode mode;
-
- // The length of this segment's unencoded data. Measured in characters for
- // numeric/alphanumeric/kanji mode, bytes for byte mode, and 0 for ECI mode.
- // Always zero or positive. Not the same as the data's bit length.
- int numChars;
-
- // The data bits of this segment, packed in bitwise big endian.
- // Can be null if the bit length is zero.
- uint8_t *data;
-
- // The number of valid data bits used in the buffer. Requires
- // 0 <= bitLength <= 32767, and bitLength <= (capacity of data array) * 8.
- // The character count (numChars) must agree with the mode and the bit buffer length.
- int bitLength;
-};
-
-
-
-/*---- Macro constants and functions ----*/
-
-#define qrcodegen_VERSION_MIN 1 // The minimum version number supported in the QR Code Model 2 standard
-#define qrcodegen_VERSION_MAX 40 // The maximum version number supported in the QR Code Model 2 standard
-
-// Calculates the number of bytes needed to store any QR Code up to and including the given version number,
-// as a compile-time constant. For example, 'uint8_t buffer[qrcodegen_BUFFER_LEN_FOR_VERSION(25)];'
-// can store any single QR Code from version 1 to 25 (inclusive). The result fits in an int (or int16).
-// Requires qrcodegen_VERSION_MIN <= n <= qrcodegen_VERSION_MAX.
-#define qrcodegen_BUFFER_LEN_FOR_VERSION(n) ((((n) * 4 + 17) * ((n) * 4 + 17) + 7) / 8 + 1)
-
-// The worst-case number of bytes needed to store one QR Code, up to and including
-// version 40. This value equals 3918, which is just under 4 kilobytes.
-// Use this more convenient value to avoid calculating tighter memory bounds for buffers.
-#define qrcodegen_BUFFER_LEN_MAX qrcodegen_BUFFER_LEN_FOR_VERSION(qrcodegen_VERSION_MAX)
-
-
-
-/*---- Functions (high level) to generate QR Codes ----*/
-
-/*
- * Encodes the given text string to a QR Code, returning true if encoding succeeded.
- * If the data is too long to fit in any version in the given range
- * at the given ECC level, then false is returned.
- * - The input text must be encoded in UTF-8 and contain no NULs.
- * - The variables ecl and mask must correspond to enum constant values.
- * - Requires 1 <= minVersion <= maxVersion <= 40.
- * - The arrays tempBuffer and qrcode must each have a length
- * of at least qrcodegen_BUFFER_LEN_FOR_VERSION(maxVersion).
- * - After the function returns, tempBuffer contains no useful data.
- * - If successful, the resulting QR Code may use numeric,
- * alphanumeric, or byte mode to encode the text.
- * - In the most optimistic case, a QR Code at version 40 with low ECC
- * can hold any UTF-8 string up to 2953 bytes, or any alphanumeric string
- * up to 4296 characters, or any digit string up to 7089 characters.
- * These numbers represent the hard upper limit of the QR Code standard.
- * - Please consult the QR Code specification for information on
- * data capacities per version, ECC level, and text encoding mode.
- */
-bool qrcodegen_encodeText(const char *text, uint8_t tempBuffer[], uint8_t qrcode[],
- enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl);
-
-
-/*
- * Encodes the given binary data to a QR Code, returning true if encoding succeeded.
- * If the data is too long to fit in any version in the given range
- * at the given ECC level, then false is returned.
- * - The input array range dataAndTemp[0 : dataLen] should normally be
- * valid UTF-8 text, but is not required by the QR Code standard.
- * - The variables ecl and mask must correspond to enum constant values.
- * - Requires 1 <= minVersion <= maxVersion <= 40.
- * - The arrays dataAndTemp and qrcode must each have a length
- * of at least qrcodegen_BUFFER_LEN_FOR_VERSION(maxVersion).
- * - After the function returns, the contents of dataAndTemp may have changed,
- * and does not represent useful data anymore.
- * - If successful, the resulting QR Code will use byte mode to encode the data.
- * - In the most optimistic case, a QR Code at version 40 with low ECC can hold any byte
- * sequence up to length 2953. This is the hard upper limit of the QR Code standard.
- * - Please consult the QR Code specification for information on
- * data capacities per version, ECC level, and text encoding mode.
- */
-bool qrcodegen_encodeBinary(uint8_t dataAndTemp[], size_t dataLen, uint8_t qrcode[],
- enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl);
-
-
-/*---- Functions (low level) to generate QR Codes ----*/
-
-/*
- * Renders a QR Code representing the given segments at the given error correction level.
- * The smallest possible QR Code version is automatically chosen for the output. Returns true if
- * QR Code creation succeeded, or false if the data is too long to fit in any version. The ECC level
- * of the result may be higher than the ecl argument if it can be done without increasing the version.
- * This function allows the user to create a custom sequence of segments that switches
- * between modes (such as alphanumeric and byte) to encode text in less space.
- * This is a low-level API; the high-level API is qrcodegen_encodeText() and qrcodegen_encodeBinary().
- * To save memory, the segments' data buffers can alias/overlap tempBuffer, and will
- * result in them being clobbered, but the QR Code output will still be correct.
- * But the qrcode array must not overlap tempBuffer or any segment's data buffer.
- */
-bool qrcodegen_encodeSegments(const struct qrcodegen_Segment segs[], size_t len,
- enum qrcodegen_Ecc ecl, uint8_t tempBuffer[], uint8_t qrcode[]);
-
-
-/*
- * Renders a QR Code representing the given segments with the given encoding parameters.
- * Returns true if QR Code creation succeeded, or false if the data is too long to fit in the range of versions.
- * The smallest possible QR Code version within the given range is automatically
- * chosen for the output. Iff boostEcl is true, then the ECC level of the result
- * may be higher than the ecl argument if it can be done without increasing the
- * version. The mask number is either between 0 to 7 (inclusive) to force that
- * mask, or -1 to automatically choose an appropriate mask (which may be slow).
- * This function allows the user to create a custom sequence of segments that switches
- * between modes (such as alphanumeric and byte) to encode text in less space.
- * This is a low-level API; the high-level API is qrcodegen_encodeText() and qrcodegen_encodeBinary().
- * To save memory, the segments' data buffers can alias/overlap tempBuffer, and will
- * result in them being clobbered, but the QR Code output will still be correct.
- * But the qrcode array must not overlap tempBuffer or any segment's data buffer.
- */
-bool qrcodegen_encodeSegmentsAdvanced(const struct qrcodegen_Segment segs[], size_t len, enum qrcodegen_Ecc ecl,
- int minVersion, int maxVersion, int mask, bool boostEcl, uint8_t tempBuffer[], uint8_t qrcode[]);
-
-
-/*
- * Tests whether the given string can be encoded as a segment in alphanumeric mode.
- * A string is encodable iff each character is in the following set: 0 to 9, A to Z
- * (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.
- */
-bool qrcodegen_isAlphanumeric(const char *text);
-
-
-/*
- * Tests whether the given string can be encoded as a segment in numeric mode.
- * A string is encodable iff each character is in the range 0 to 9.
- */
-bool qrcodegen_isNumeric(const char *text);
-
-
-/*
- * Returns the number of bytes (uint8_t) needed for the data buffer of a segment
- * containing the given number of characters using the given mode. Notes:
- * - Returns SIZE_MAX on failure, i.e. numChars > INT16_MAX or
- * the number of needed bits exceeds INT16_MAX (i.e. 32767).
- * - Otherwise, all valid results are in the range [0, ceil(INT16_MAX / 8)], i.e. at most 4096.
- * - It is okay for the user to allocate more bytes for the buffer than needed.
- * - For byte mode, numChars measures the number of bytes, not Unicode code points.
- * - For ECI mode, numChars must be 0, and the worst-case number of bytes is returned.
- * An actual ECI segment can have shorter data. For non-ECI modes, the result is exact.
- */
-size_t qrcodegen_calcSegmentBufferSize(enum qrcodegen_Mode mode, size_t numChars);
-
-
-/*
- * Returns a segment representing the given binary data encoded in
- * byte mode. All input byte arrays are acceptable. Any text string
- * can be converted to UTF-8 bytes and encoded as a byte mode segment.
- */
-struct qrcodegen_Segment qrcodegen_makeBytes(const uint8_t data[], size_t len, uint8_t buf[]);
-
-
-/*
- * Returns a segment representing the given string of decimal digits encoded in numeric mode.
- */
-struct qrcodegen_Segment qrcodegen_makeNumeric(const char *digits, uint8_t buf[]);
-
-
-/*
- * Returns a segment representing the given text string encoded in alphanumeric mode.
- * The characters allowed are: 0 to 9, A to Z (uppercase only), space,
- * dollar, percent, asterisk, plus, hyphen, period, slash, colon.
- */
-struct qrcodegen_Segment qrcodegen_makeAlphanumeric(const char *text, uint8_t buf[]);
-
-
-/*
- * Returns a segment representing an Extended Channel Interpretation
- * (ECI) designator with the given assignment value.
- */
-struct qrcodegen_Segment qrcodegen_makeEci(long assignVal, uint8_t buf[]);
-
-
-/*---- Functions to extract raw data from QR Codes ----*/
-
-/*
- * Returns the side length of the given QR Code, assuming that encoding succeeded.
- * The result is in the range [21, 177]. Note that the length of the array buffer
- * is related to the side length - every 'uint8_t qrcode[]' must have length at least
- * qrcodegen_BUFFER_LEN_FOR_VERSION(version), which equals ceil(size^2 / 8 + 1).
- */
-int qrcodegen_getSize(const uint8_t qrcode[]);
-
-
-/*
- * Returns the color of the module (pixel) at the given coordinates, which is false
- * for white or true for black. The top left corner has the coordinates (x=0, y=0).
- * If the given coordinates are out of bounds, then false (white) is returned.
- */
-bool qrcodegen_getModule(const uint8_t qrcode[], int x, int y);
-
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/src/libnma/tests/bar-code.c b/src/libnma/tests/bar-code.c
deleted file mode 100644
index f85a0cfa..00000000
--- a/src/libnma/tests/bar-code.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public License as
- * published by the ree Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * Copyright 2018, 2019 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-#include "nma-private.h"
-
-#include <stdio.h>
-#include <string.h>
-
-#include <gtk/gtk.h>
-
-#include "nma-bar-code-widget.h"
-
-static gboolean
-delete (GtkWidget *widget, GdkEvent *event, gpointer user_data)
-{
- gtk_main_quit ();
-
- return FALSE;
-}
-
-static void
-ssid_changed (GtkEditable *editable, gpointer user_data)
-{
- NMConnection *connection = NM_CONNECTION (user_data);
- NMSettingWireless *s_wireless = nm_connection_get_setting_wireless (connection);
- gs_unref_bytes GBytes *ssid = NULL;
- GtkEntryBuffer *buffer;
-
- g_return_if_fail (s_wireless);
-
- buffer = gtk_entry_get_buffer (GTK_ENTRY (editable));
- ssid = g_bytes_new_static (gtk_entry_buffer_get_text (buffer),
- gtk_entry_buffer_get_bytes (buffer));
-
- g_object_set (s_wireless,
- NM_SETTING_WIRELESS_SSID, ssid,
- NULL);
-}
-
-static void
-password_changed (GtkEditable *editable, gpointer user_data)
-{
- NMConnection *connection = NM_CONNECTION (user_data);
- NMSettingWirelessSecurity *s_wsec = nm_connection_get_setting_wireless_security (connection);
-
- if (!s_wsec)
- return;
-
- g_object_set (s_wsec,
- NM_SETTING_WIRELESS_SECURITY_PSK,
- gtk_editable_get_text (editable),
- NULL);
-}
-
-static void
-key_mgmt_changed (GtkComboBox *combo_box, gpointer user_data)
-{
- NMConnection *connection = NM_CONNECTION (user_data);
- const char *key_mgmt = gtk_combo_box_get_active_id (combo_box);
- NMSettingWirelessSecurity *s_wsec = nm_connection_get_setting_wireless_security (connection);
- GtkWidget *pass = g_object_get_data (G_OBJECT (combo_box), "pass");
-
- if (!key_mgmt) {
- nm_connection_remove_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
- gtk_widget_set_sensitive (pass, FALSE);
- return;
- }
-
- if (!s_wsec) {
- s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_setting_wireless_security_new ());
- nm_connection_add_setting (connection, NM_SETTING (s_wsec));
- gtk_widget_set_sensitive (pass, TRUE);
- password_changed (GTK_EDITABLE (pass), connection);
- }
-
- g_object_set (s_wsec,
- NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, key_mgmt,
- NULL);
-}
-
-int
-main (int argc, char *argv[])
-{
- GtkWidget *w, *pass;
- GtkWidget *grid;
- NMConnection *connection = NULL;
- gs_unref_bytes GBytes *ssid = g_bytes_new_static ("\"ab:cd\"", 13);
-
- connection = nm_simple_connection_new ();
- nm_connection_add_setting (connection,
- g_object_new (NM_TYPE_SETTING_CONNECTION,
- NM_SETTING_CONNECTION_ID, "fifik",
- NULL));
- nm_connection_add_setting (connection,
- nm_setting_wireless_new ());
-
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_init ();
-#else
- gtk_init (&argc, &argv);
-#endif
-
- w = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_widget_show (w);
- gtk_window_set_default_size (GTK_WINDOW (w), 800, 680);
- g_signal_connect (w, "delete-event", G_CALLBACK (delete), NULL);
-
- grid = gtk_grid_new ();
- gtk_widget_show (grid);
- gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
- gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
- g_object_set (grid,
- "margin_start", 6,
- "margin_end", 6,
- "margin_top", 6,
- "margin_bottom", 6,
- NULL);
- gtk_container_add (GTK_CONTAINER (w), grid);
-
- w = gtk_label_new ("SSID");
- gtk_widget_show (w);
- g_object_set (w, "xalign", 1.0, NULL);
- gtk_grid_attach (GTK_GRID (grid), w, 0, 0, 1, 1);
-
- w = gtk_entry_new ();
- g_signal_connect (w, "changed", G_CALLBACK (ssid_changed), connection);
- gtk_editable_set_text (GTK_EDITABLE (w), "\"ab:cd\"");
- gtk_widget_show (w);
- gtk_grid_attach (GTK_GRID (grid), w, 1, 0, 1, 1);
-
- w = gtk_label_new ("Password");
- gtk_widget_show (w);
- g_object_set (w, "xalign", 1.0, NULL);
- gtk_grid_attach (GTK_GRID (grid), w, 0, 1, 1, 1);
-
- pass = gtk_entry_new ();
- g_signal_connect (pass, "changed", G_CALLBACK (password_changed), connection);
- gtk_editable_set_text (GTK_EDITABLE (pass), "lolofon");
- gtk_widget_show (pass);
- gtk_grid_attach (GTK_GRID (grid), pass, 1, 1, 1, 1);
-
- w = gtk_label_new ("Key Management");
- gtk_widget_show (w);
- g_object_set (w, "xalign", 1.0, NULL);
- gtk_grid_attach (GTK_GRID (grid), w, 0, 2, 1, 1);
-
- w = gtk_combo_box_text_new ();
- gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (w), NULL, "No Password");
- gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (w), "none", "WEP: none");
- gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (w), "ieee8021x", "WEP: ieee8021x");
- gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (w), "wpa-none", "WPA: wpa-none");
- gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (w), "wpa-psk", "WPA: wpa-psk");
- g_object_set_data (G_OBJECT (w), "pass", pass);
- g_signal_connect (w, "changed", G_CALLBACK (key_mgmt_changed), connection);
- gtk_combo_box_set_active_id (GTK_COMBO_BOX (w), "wpa-psk");
- gtk_widget_show (w);
- gtk_grid_attach (GTK_GRID (grid), w, 1, 2, 1, 1);
-
- w = nma_bar_code_widget_new (connection);
- gtk_widget_show (w);
- gtk_widget_set_vexpand (w, TRUE);
- gtk_widget_set_hexpand (w, TRUE);
- gtk_grid_attach (GTK_GRID (grid), w, 0, 3, 2, 1);
-
- gtk_main ();
-}
diff --git a/src/libnma/tests/cert-chooser.c b/src/libnma/tests/cert-chooser.c
deleted file mode 100644
index 99808d12..00000000
--- a/src/libnma/tests/cert-chooser.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public License as
- * published by the ree Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * Copyright 2019 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <gtk/gtk.h>
-#include "nma-cert-chooser.h"
-
-int
-main (int argc, char *argv[])
-{
- GtkWidget *dialog;
- GtkBox *content;
- GtkWidget *widget;
-
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_init ();
-#else
- gtk_init (&argc, &argv);
-#endif
-
- dialog = gtk_dialog_new_with_buttons ("NMACertChooser test",
- NULL, GTK_DIALOG_MODAL,
- "Dismiss", GTK_RESPONSE_DELETE_EVENT,
- NULL);
- content = GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog)));
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_box_set_spacing (content, 6);
-#endif
-
- widget = nma_cert_chooser_new ("Any", 0);
- gtk_widget_show (widget);
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_container_add (GTK_CONTAINER (content), widget);
-#else
- gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
-#endif
-
- widget = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
- gtk_widget_show (widget);
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_container_add (GTK_CONTAINER (content), widget);
-#else
- gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
-#endif
-
- widget = nma_cert_chooser_new ("FLAG_PASSWORDS", NMA_CERT_CHOOSER_FLAG_PASSWORDS);
- nma_cert_chooser_set_cert (NMA_CERT_CHOOSER (widget),
- "pkcs11:object=praise;type=satan",
- NM_SETTING_802_1X_CK_SCHEME_PKCS11);
- nma_cert_chooser_set_key_uri (NMA_CERT_CHOOSER (widget),
- "pkcs11:object=worship;type=doom");
- gtk_widget_show (widget);
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_container_add (GTK_CONTAINER (content), widget);
-#else
- gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
-#endif
-
- widget = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
- gtk_widget_show (widget);
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_container_add (GTK_CONTAINER (content), widget);
-#else
- gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
-#endif
-
- widget = nma_cert_chooser_new ("FLAG_CERT", NMA_CERT_CHOOSER_FLAG_CERT);
- gtk_widget_show (widget);
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_container_add (GTK_CONTAINER (content), widget);
-#else
- gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
-#endif
-
- widget = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
- gtk_widget_show (widget);
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_container_add (GTK_CONTAINER (content), widget);
-#else
- gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
-#endif
-
- widget = nma_cert_chooser_new ("FLAG_PEM", NMA_CERT_CHOOSER_FLAG_PEM);
- gtk_widget_show (widget);
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_container_add (GTK_CONTAINER (content), widget);
-#else
- gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
-#endif
-
- gtk_dialog_run (GTK_DIALOG (dialog));
-}
diff --git a/src/libnma/tests/meson.build b/src/libnma/tests/meson.build
deleted file mode 100644
index 253de9e7..00000000
--- a/src/libnma/tests/meson.build
+++ /dev/null
@@ -1,31 +0,0 @@
-tests = [
- 'bar-code',
- 'cert-chooser',
- 'mobile-wizard',
- 'run-vpn',
- 'vpn-password-dialog',
- 'wifi-dialog',
- 'wifi-dialog-secrets',
-]
-
-foreach tst : tests
- executable(
- tst,
- tst + '.c',
- include_directories: incs,
- dependencies: [ gtk_dep, libnm_dep, libnma_dep ],
- c_args: cflags,
- install: false
- )
-
- if enable_libnma_gtk4
- executable(
- tst + '-gtk4',
- tst + '.c',
- include_directories: incs,
- dependencies: [ gtk4_dep, libnm_dep, libnma_gtk4_dep ],
- c_args: cflags,
- install: false
- )
- endif
-endforeach
diff --git a/src/libnma/tests/mobile-wizard.c b/src/libnma/tests/mobile-wizard.c
deleted file mode 100644
index 1e21868f..00000000
--- a/src/libnma/tests/mobile-wizard.c
+++ /dev/null
@@ -1,33 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright 2018 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <gtk/gtk.h>
-#include "nma-mobile-wizard.h"
-
-static void
-wizard_cb (NMAMobileWizard *self, gboolean canceled, NMAMobileWizardAccessMethod *method, gpointer user_data)
-{
- gtk_main_quit ();
-}
-
-int
-main (int argc, char *argv[])
-{
- NMAMobileWizard *wizard;
-
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_init ();
-#else
- gtk_init (&argc, &argv);
-#endif
-
- wizard = nma_mobile_wizard_new (NULL, NULL, NM_DEVICE_MODEM_CAPABILITY_NONE, TRUE, wizard_cb, NULL);
-
- nma_mobile_wizard_present (wizard);
- gtk_main ();
- nma_mobile_wizard_destroy (wizard);
-}
diff --git a/src/libnma/tests/run-vpn.c b/src/libnma/tests/run-vpn.c
deleted file mode 100644
index b0e39d9d..00000000
--- a/src/libnma/tests/run-vpn.c
+++ /dev/null
@@ -1,87 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * run-vpn - VPN plugin runner for testing
- *
- * (C) Copyright 2018 Lubomir Rintel
- */
-
-#include "nm-default.h"
-
-#include <NetworkManager.h>
-#include <gtk/gtk.h>
-#include <stdlib.h>
-
-static gboolean
-window_deleted (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data)
-{
- GMainLoop *main_loop = user_data;
- g_main_loop_quit (main_loop);
- return TRUE;
-}
-
-int
-main (int argc, char *argv[])
-{
- gs_unref_object NMVpnEditorPlugin *plugin = NULL;
- gs_unref_object NMVpnEditor *editor = NULL;
- gs_unref_object NMConnection *connection = NULL;
- gs_free char *service_type = NULL;
- GMainLoop *main_loop;
- GtkWidget *window;
- GtkWidget *widget;
- gs_free_error GError *error = NULL;
-
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_init ();
-#else
- gtk_init (&argc, &argv);
-#endif
-
- if (argc != 2) {
- g_printerr ("Usage: %s libnm-vpn-plugin-<name>.so\n", argv[0]);
- return EXIT_FAILURE;
- }
-
- plugin = nm_vpn_editor_plugin_load (argv[1], NULL, &error);
- if (!plugin) {
- g_printerr ("Error: %s\n", error->message);
- return EXIT_FAILURE;
- }
-
- g_object_get (G_OBJECT (plugin), "service", &service_type, NULL);
- g_return_val_if_fail (service_type, EXIT_FAILURE);
-
- connection = nm_simple_connection_new ();
- nm_connection_add_setting (connection,
- g_object_new (NM_TYPE_SETTING_VPN,
- "service-type", service_type,
- NULL));
-
- editor = nm_vpn_editor_plugin_get_editor (plugin, connection, &error);
- if (!editor) {
- g_printerr ("Error: %s\n", error->message);
- return EXIT_FAILURE;
- }
-
- main_loop = g_main_loop_new (NULL, FALSE);
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_widget_show (window);
- g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (window_deleted), main_loop);
-
- widget = GTK_WIDGET (nm_vpn_editor_get_widget (editor));
- gtk_widget_show (widget);
- gtk_container_add (GTK_CONTAINER (window), widget);
- g_main_loop_run (main_loop);
-
- if (!nm_vpn_editor_update_connection (editor, connection, &error)) {
- g_printerr ("Error: %s\n", error->message);
- return EXIT_FAILURE;
- }
-
- gtk_widget_destroy (widget);
- nm_connection_dump (connection);
-
- return EXIT_SUCCESS;
-}
diff --git a/src/libnma/tests/vpn-password-dialog.c b/src/libnma/tests/vpn-password-dialog.c
deleted file mode 100644
index 2a65b432..00000000
--- a/src/libnma/tests/vpn-password-dialog.c
+++ /dev/null
@@ -1,36 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright 2018 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <gtk/gtk.h>
-#include "nma-vpn-password-dialog.h"
-
-int
-main (int argc, char *argv[])
-{
- GtkWidget *widget;
-
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_init ();
-#else
- gtk_init (&argc, &argv);
-#endif
-
- widget = nma_vpn_password_dialog_new ("Title", "Message", "Password");
-
- nma_vpn_password_dialog_set_password (NMA_VPN_PASSWORD_DIALOG (widget), "Password One");
- nma_vpn_password_dialog_set_password_label (NMA_VPN_PASSWORD_DIALOG (widget), "First _Label");
-
- nma_vpn_password_dialog_set_password_secondary (NMA_VPN_PASSWORD_DIALOG (widget), "");
- nma_vpn_password_dialog_set_password_secondary_label (NMA_VPN_PASSWORD_DIALOG (widget), "_Second Label");
- nma_vpn_password_dialog_set_show_password_secondary (NMA_VPN_PASSWORD_DIALOG (widget), TRUE);
-
- nma_vpn_password_dialog_set_password_ternary_label (NMA_VPN_PASSWORD_DIALOG (widget), "_Third Label");
- nma_vpn_password_dialog_set_show_password_ternary (NMA_VPN_PASSWORD_DIALOG (widget), TRUE);
-
- nma_vpn_password_dialog_run_and_block (NMA_VPN_PASSWORD_DIALOG (widget));
- gtk_widget_destroy (widget);
-}
diff --git a/src/libnma/tests/wifi-dialog-secrets.c b/src/libnma/tests/wifi-dialog-secrets.c
deleted file mode 100644
index f6d9ef95..00000000
--- a/src/libnma/tests/wifi-dialog-secrets.c
+++ /dev/null
@@ -1,100 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright 2018 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <gtk/gtk.h>
-#include <NetworkManager.h>
-#include "nma-wifi-dialog.h"
-
-static void
-response_cb (GtkDialog *obj, gint response, gpointer user_data)
-{
- NMAWifiDialog *dialog = NMA_WIFI_DIALOG (obj);
-
- g_print ("response %i\n", response);
-
- if (response == GTK_RESPONSE_OK) {
- GHashTable *diff = NULL, *setting_diff;
- GHashTableIter iter, setting_iter;
- const char *setting, *key;
- NMConnection *connection = nma_wifi_dialog_get_connection (dialog, NULL, NULL);
- NMConnection *orig = user_data;
-
- g_print ("settings changed:\n");
- nm_connection_diff (connection, orig, NM_SETTING_COMPARE_FLAG_EXACT, &diff);
- if (!diff)
- return;
-
- g_hash_table_iter_init (&iter, diff);
- while (g_hash_table_iter_next (&iter, (gpointer) &setting, (gpointer) &setting_diff)) {
- g_hash_table_iter_init (&setting_iter, setting_diff);
- while (g_hash_table_iter_next (&setting_iter, (gpointer) &key, NULL))
- g_print (" %s.%s\n", setting, key);
- }
-
- g_hash_table_destroy (diff);
- }
-}
-
-int
-main (int argc, char *argv[])
-{
- GtkWidget *dialog;
- NMClient *client = NULL;
- NMConnection *connection = NULL;
- GError *error = NULL;
- gs_unref_bytes GBytes *ssid = g_bytes_new_static ("<Maj Vaj Faj>", 13);
- const char *hints[] = {
- NM_SETTING_802_1X_IDENTITY,
- NM_SETTING_802_1X_PASSWORD,
- NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD,
- NULL
- };
-
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_init ();
-#else
- gtk_init (&argc, &argv);
-#endif
-
- client = nm_client_new (NULL, NULL);
- connection = nm_simple_connection_new ();
- nm_connection_add_setting (connection,
- g_object_new (NM_TYPE_SETTING_CONNECTION,
- NM_SETTING_CONNECTION_ID, "<Maj Vaj Faj>",
- NULL));
- nm_connection_add_setting (connection,
- g_object_new (NM_TYPE_SETTING_WIRELESS,
- NM_SETTING_WIRELESS_SSID, ssid,
- NULL));
- nm_connection_add_setting (connection,
- g_object_new (NM_TYPE_SETTING_WIRELESS_SECURITY,
- NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap",
- NULL));
- nm_connection_add_setting (connection,
- g_object_new (NM_TYPE_SETTING_802_1X,
- NM_SETTING_802_1X_EAP, (const char * const []){ "peap", NULL },
- NM_SETTING_802_1X_IDENTITY, "budulinek",
- NM_SETTING_802_1X_PHASE2_AUTH, "gtc",
- NULL));
-
- if (!nm_connection_normalize (connection, NULL, NULL, &error)) {
- nm_connection_dump (connection);
- g_printerr ("Error: %s\n", error->message);
- g_error_free (error);
- return 1;
- }
-
- dialog = nma_wifi_dialog_new_for_secrets (client,
- nm_simple_connection_new_clone (connection),
- NM_SETTING_802_1X_SETTING_NAME,
- hints);
- g_signal_connect (dialog, "response", G_CALLBACK (response_cb), connection);
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-
- g_object_unref (connection);
-}
diff --git a/src/libnma/tests/wifi-dialog.c b/src/libnma/tests/wifi-dialog.c
deleted file mode 100644
index 1f8219ae..00000000
--- a/src/libnma/tests/wifi-dialog.c
+++ /dev/null
@@ -1,60 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright 2018 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <gtk/gtk.h>
-#include "nma-wifi-dialog.h"
-
-int
-main (int argc, char *argv[])
-{
- GtkWidget *dialog;
- NMClient *client = NULL;
- NMConnection *connection = NULL;
- NMDevice *device = NULL;
- NMAccessPoint *ap = NULL;
- gboolean secrets_only = FALSE;
- GError *error = NULL;
- gs_unref_bytes GBytes *ssid = g_bytes_new_static ("<Maj Vaj Faj>", 13);
-
-#if GTK_CHECK_VERSION(3,90,0)
- gtk_init ();
-#else
- gtk_init (&argc, &argv);
-#endif
-
- client = nm_client_new (NULL, NULL);
- connection = nm_simple_connection_new ();
- nm_connection_add_setting (connection,
- g_object_new (NM_TYPE_SETTING_CONNECTION,
- NM_SETTING_CONNECTION_ID, "<Maj Vaj Faj>",
- NULL));
- nm_connection_add_setting (connection,
- g_object_new (NM_TYPE_SETTING_WIRELESS,
- NM_SETTING_WIRELESS_SSID, ssid,
- NULL));
- nm_connection_add_setting (connection,
- g_object_new (NM_TYPE_SETTING_WIRELESS_SECURITY,
- NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap",
- NULL));
- nm_connection_add_setting (connection,
- g_object_new (NM_TYPE_SETTING_802_1X,
- NM_SETTING_802_1X_EAP, (const char * const []){ "peap", NULL },
- NM_SETTING_802_1X_IDENTITY, "budulinek",
- NM_SETTING_802_1X_PHASE2_AUTH, "gtc",
- NULL));
-
- if (!nm_connection_normalize (connection, NULL, NULL, &error)) {
- nm_connection_dump (connection);
- g_printerr ("Error: %s\n", error->message);
- g_error_free (error);
- return 1;
- }
-
- dialog = nma_wifi_dialog_new (client, connection, device, ap, secrets_only);
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-}
diff --git a/src/libnma/wifi.ui b/src/libnma/wifi.ui
deleted file mode 100644
index 9e212057..00000000
--- a/src/libnma/wifi.ui
+++ /dev/null
@@ -1,215 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
-<interface domain="nm-applet">
- <requires lib="gtk+" version="3.10"/>
- <object class="GtkListStore" id="model1">
- <columns>
- <!-- column-name gchararray -->
- <column type="gchararray"/>
- </columns>
- <data>
- <row>
- <col id="0"> </col>
- </row>
- </data>
- </object>
- <object class="GtkListStore" id="model2">
- <columns>
- <!-- column-name gchararray -->
- <column type="gchararray"/>
- </columns>
- <data>
- <row>
- <col id="0"> </col>
- </row>
- </data>
- </object>
- <object class="GtkGrid" id="wifi_dialog">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <property name="margin_top">12</property>
- <property name="margin_bottom">12</property>
- <property name="row_spacing">12</property>
- <property name="column_spacing">12</property>
- <child>
- <object class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="valign">start</property>
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <property name="margin_top">12</property>
- <property name="margin_bottom">12</property>
- <property name="icon_name">network-wireless</property>
- <property name="icon_size">6</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="caption_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <property name="margin_top">12</property>
- <property name="margin_bottom">12</property>
- <property name="use_markup">True</property>
- <property name="wrap">True</property>
- <property name="max_width_chars">50</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkGrid" id="table1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
- <child>
- <object class="GtkBox" id="security_vbox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="orientation">vertical</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">4</property>
- <property name="width">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="security_combo_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Wi-Fi _security</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">security_combo</property>
- <property name="xalign">1</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="security_combo">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="model">model1</property>
- <child>
- <object class="GtkCellRendererText" id="renderer1"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
- </child>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="network_name_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_Network name</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">network_name_entry</property>
- <property name="xalign">1</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="network_name_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="activates_default">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="connection_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">C_onnection</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">connection_combo</property>
- <property name="xalign">1</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="connection_combo">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="device_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Wi-Fi _adapter</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">device_combo</property>
- <property name="xalign">1</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="device_combo">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="model">model2</property>
- <child>
- <object class="GtkCellRendererText" id="renderer2"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
- </child>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">2</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/src/meson.build b/src/meson.build
index 761cfb43..9647a428 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,32 +1,12 @@
src_inc = include_directories('.')
-# FIXME: although this file is contained in the libnma directory
-# it should be generated before because it's used at
-# wireless-security directory, which is needed later for
-# libnma directory.
-libnma_inc = include_directories('libnma')
-
version_conf = configuration_data()
version_conf.set('NMA_MAJOR_VERSION', nma_major_version)
version_conf.set('NMA_MINOR_VERSION', nma_minor_version)
version_conf.set('NMA_MICRO_VERSION', nma_micro_version)
-version = 'nma-version.h'
-
-version_header = configure_file(
- input: 'libnma/' + version + '.in',
- output: version,
- configuration: version_conf,
- install_dir: join_paths(nma_includedir, 'libnma')
-)
-
subdir('utils')
subdir('wireless-security')
-subdir('libnma')
-
-if enable_libnm_gtk
- subdir('libnm-gtk')
-endif
subdir('connection-editor')
diff --git a/src/mobile-helpers.c b/src/mobile-helpers.c
index 54f250b8..0621a81b 100644
--- a/src/mobile-helpers.c
+++ b/src/mobile-helpers.c
@@ -7,7 +7,7 @@
*/
#include "nm-default.h"
-#include "nma-private.h"
+
#include <ctype.h>
#include <libsecret/secret.h>
@@ -469,7 +469,7 @@ ask_for_pin (GtkEntry **out_secret_entry)
w = gtk_entry_new ();
*out_secret_entry = GTK_ENTRY (w);
gtk_entry_set_max_length (GTK_ENTRY (w), 8);
- gtk_editable_set_width_chars (GTK_EDITABLE (w), 8);
+ gtk_entry_set_width_chars (GTK_ENTRY (w), 8);
gtk_entry_set_activates_default (GTK_ENTRY (w), TRUE);
gtk_entry_set_visibility (GTK_ENTRY (w), FALSE);
gtk_box_pack_start (box, w, FALSE, FALSE, 0);
diff --git a/src/utils/meson.build b/src/utils/meson.build
index 11d23911..c3bec9ea 100644
--- a/src/utils/meson.build
+++ b/src/utils/meson.build
@@ -35,27 +35,3 @@ exe = executable(
)
test(test_unit, exe)
-
-if enable_libnm_gtk
- deps = [
- gtk_dep,
- libnm_glib_dep
- ]
-
- cflags = '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB_LEGACY'
-
- libutils_libnm_glib = static_library(
- 'utils-libnm-glib',
- sources: shared_legacy_sources + files(
- 'utils.c',
- ),
- include_directories: incs,
- dependencies: deps,
- c_args: cflags
- )
-
- libutils_libnm_glib_dep = declare_dependency(
- link_with: libutils_libnm_glib,
- include_directories: utils_inc
- )
-endif
diff --git a/src/wireless-security/eap-method-fast.c b/src/wireless-security/eap-method-fast.c
index 32674739..311371c3 100644
--- a/src/wireless-security/eap-method-fast.c
+++ b/src/wireless-security/eap-method-fast.c
@@ -6,7 +6,6 @@
*/
#include "nm-default.h"
-#include "nma-private.h"
#include <ctype.h>
#include <string.h>
@@ -132,7 +131,7 @@ fill_connection (EAPMethod *parent, NMConnection *connection)
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_fast_anon_identity_entry"));
g_assert (widget);
- text = gtk_editable_get_text (GTK_EDITABLE (widget));
+ text = gtk_entry_get_text (GTK_ENTRY (widget));
if (text && strlen (text))
g_object_set (s_8021x, NM_SETTING_802_1X_ANONYMOUS_IDENTITY, text, NULL);
@@ -383,7 +382,7 @@ eap_method_fast_new (WirelessSecurity *ws_parent,
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_fast_anon_identity_entry"));
if (s_8021x && nm_setting_802_1x_get_anonymous_identity (s_8021x))
- gtk_editable_set_text (GTK_EDITABLE (widget), nm_setting_802_1x_get_anonymous_identity (s_8021x));
+ gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_anonymous_identity (s_8021x));
g_signal_connect (G_OBJECT (widget), "changed",
(GCallback) wireless_security_changed_cb,
ws_parent);
diff --git a/src/wireless-security/eap-method-leap.c b/src/wireless-security/eap-method-leap.c
index ee45257b..2f43ab85 100644
--- a/src/wireless-security/eap-method-leap.c
+++ b/src/wireless-security/eap-method-leap.c
@@ -7,7 +7,6 @@
*/
#include "nm-default.h"
-#include "nma-private.h"
#include <ctype.h>
#include <string.h>
@@ -47,7 +46,7 @@ validate (EAPMethod *parent, GError **error)
const char *text;
gboolean ret = TRUE;
- text = gtk_editable_get_text (GTK_EDITABLE (method->username_entry));
+ text = gtk_entry_get_text (method->username_entry);
if (!text || !strlen (text)) {
widget_set_error (GTK_WIDGET (method->username_entry));
g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("missing EAP-LEAP username"));
@@ -55,7 +54,7 @@ validate (EAPMethod *parent, GError **error)
} else
widget_unset_error (GTK_WIDGET (method->username_entry));
- text = gtk_editable_get_text (GTK_EDITABLE (method->password_entry));
+ text = gtk_entry_get_text (method->password_entry);
if (!text || !strlen (text)) {
widget_set_error (GTK_WIDGET (method->password_entry));
if (ret) {
@@ -95,10 +94,8 @@ fill_connection (EAPMethod *parent, NMConnection *connection)
nm_setting_802_1x_add_eap_method (s_8021x, "leap");
- g_object_set (s_8021x,
- NM_SETTING_802_1X_IDENTITY, gtk_editable_get_text (GTK_EDITABLE (method->username_entry)),
- NM_SETTING_802_1X_PASSWORD, gtk_editable_get_text (GTK_EDITABLE (method->password_entry)),
- NULL);
+ g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, gtk_entry_get_text (method->username_entry), NULL);
+ g_object_set (s_8021x, NM_SETTING_802_1X_PASSWORD, gtk_entry_get_text (method->password_entry), NULL);
passwd_entry = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_leap_password_entry"));
g_assert (passwd_entry);
@@ -129,19 +126,15 @@ update_secrets (EAPMethod *parent, NMConnection *connection)
static void
set_userpass_ui (EAPMethodLEAP *method)
{
- if (method->ws_parent->username) {
- gtk_editable_set_text (GTK_EDITABLE (method->username_entry),
- method->ws_parent->username);
- } else {
- gtk_editable_set_text (GTK_EDITABLE (method->username_entry), "");
- }
-
- if (method->ws_parent->password && !method->ws_parent->always_ask) {
- gtk_editable_set_text (GTK_EDITABLE (method->password_entry),
- method->ws_parent->password);
- } else {
- gtk_editable_set_text (GTK_EDITABLE (method->password_entry), "");
- }
+ if (method->ws_parent->username)
+ gtk_entry_set_text (method->username_entry, method->ws_parent->username);
+ else
+ gtk_entry_set_text (method->username_entry, "");
+
+ if (method->ws_parent->password && !method->ws_parent->always_ask)
+ gtk_entry_set_text (method->password_entry, method->ws_parent->password);
+ else
+ gtk_entry_set_text (method->password_entry, "");
gtk_toggle_button_set_active (method->show_password, method->ws_parent->show_password);
}
@@ -156,8 +149,8 @@ static void
widgets_unrealized (GtkWidget *widget, EAPMethodLEAP *method)
{
wireless_security_set_userpass (method->ws_parent,
- gtk_editable_get_text (GTK_EDITABLE (method->username_entry)),
- gtk_editable_get_text (GTK_EDITABLE (method->password_entry)),
+ gtk_entry_get_text (method->username_entry),
+ gtk_entry_get_text (method->password_entry),
(gboolean) -1,
gtk_toggle_button_get_active (method->show_password));
}
diff --git a/src/wireless-security/eap-method-peap.c b/src/wireless-security/eap-method-peap.c
index a7dd3e59..4c765dbc 100644
--- a/src/wireless-security/eap-method-peap.c
+++ b/src/wireless-security/eap-method-peap.c
@@ -7,7 +7,6 @@
*/
#include "nm-default.h"
-#include "nma-private.h"
#include <ctype.h>
#include <string.h>
@@ -143,14 +142,14 @@ fill_connection (EAPMethod *parent, NMConnection *connection)
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_peap_anon_identity_entry"));
g_assert (widget);
- text = gtk_editable_get_text (GTK_EDITABLE (widget));
+ text = gtk_entry_get_text (GTK_ENTRY (widget));
if (text && strlen (text))
g_object_set (s_8021x, NM_SETTING_802_1X_ANONYMOUS_IDENTITY, text, NULL);
#if LIBNM_BUILD
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_peap_domain_entry"));
g_assert (widget);
- text = gtk_editable_get_text (GTK_EDITABLE (widget));
+ text = gtk_entry_get_text (GTK_ENTRY (widget));
if (text && strlen (text))
g_object_set (s_8021x, NM_SETTING_802_1X_DOMAIN_SUFFIX_MATCH, text, NULL);
#endif
@@ -456,7 +455,7 @@ eap_method_peap_new (WirelessSecurity *ws_parent,
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_peap_anon_identity_entry"));
if (s_8021x && nm_setting_802_1x_get_anonymous_identity (s_8021x))
- gtk_editable_set_text (GTK_EDITABLE (widget), nm_setting_802_1x_get_anonymous_identity (s_8021x));
+ gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_anonymous_identity (s_8021x));
g_signal_connect (G_OBJECT (widget), "changed",
(GCallback) wireless_security_changed_cb,
ws_parent);
@@ -464,7 +463,7 @@ eap_method_peap_new (WirelessSecurity *ws_parent,
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_peap_domain_entry"));
#if LIBNM_BUILD
if (s_8021x && nm_setting_802_1x_get_domain_suffix_match (s_8021x))
- gtk_editable_set_text (GTK_EDITABLE (widget), nm_setting_802_1x_get_domain_suffix_match (s_8021x));
+ gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_domain_suffix_match (s_8021x));
g_signal_connect (G_OBJECT (widget), "changed",
(GCallback) wireless_security_changed_cb,
ws_parent);
diff --git a/src/wireless-security/eap-method-simple.c b/src/wireless-security/eap-method-simple.c
index 26aef0de..20322868 100644
--- a/src/wireless-security/eap-method-simple.c
+++ b/src/wireless-security/eap-method-simple.c
@@ -7,7 +7,6 @@
*/
#include "nm-default.h"
-#include "nma-private.h"
#include <ctype.h>
#include <string.h>
@@ -71,7 +70,7 @@ validate (EAPMethod *parent, GError **error)
gboolean ret = TRUE;
if (method->username_requested) {
- text = gtk_editable_get_text (GTK_EDITABLE (method->username_entry));
+ text = gtk_entry_get_text (method->username_entry);
if (!text || !strlen (text)) {
widget_set_error (GTK_WIDGET (method->username_entry));
g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("missing EAP username"));
@@ -85,7 +84,7 @@ validate (EAPMethod *parent, GError **error)
if (always_ask_selected (method->password_entry))
widget_unset_error (GTK_WIDGET (method->password_entry));
else {
- text = gtk_editable_get_text (GTK_EDITABLE (method->password_entry));
+ text = gtk_entry_get_text (method->password_entry);
if (!text || !strlen (text)) {
widget_set_error (GTK_WIDGET (method->password_entry));
if (ret) {
@@ -99,7 +98,7 @@ validate (EAPMethod *parent, GError **error)
}
if (method->pkey_passphrase_requested) {
- text = gtk_editable_get_text (GTK_EDITABLE (method->pkey_passphrase_entry));
+ text = gtk_entry_get_text (method->pkey_passphrase_entry);
if (!text || !strlen (text)) {
widget_set_error (GTK_WIDGET (method->pkey_passphrase_entry));
if (ret) {
@@ -194,11 +193,8 @@ fill_connection (EAPMethod *parent, NMConnection *connection)
nm_setting_802_1x_add_eap_method (s_8021x, eap_type->name);
}
- if (method->username_requested) {
- g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY,
- gtk_editable_get_text (GTK_EDITABLE (method->username_entry)),
- NULL);
- }
+ if (method->username_requested)
+ g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, gtk_entry_get_text (method->username_entry), NULL);
if (method->password_requested) {
/* Save the password always ask setting */
@@ -213,8 +209,7 @@ fill_connection (EAPMethod *parent, NMConnection *connection)
*/
if (!(method->flags & EAP_METHOD_SIMPLE_FLAG_IS_EDITOR) || not_saved == FALSE) {
g_object_set (s_8021x, NM_SETTING_802_1X_PASSWORD,
- gtk_editable_get_text (GTK_EDITABLE (method->password_entry)),
- NULL);
+ gtk_entry_get_text (method->password_entry), NULL);
}
/* Update secret flags and popup when editing the connection */
@@ -230,8 +225,7 @@ fill_connection (EAPMethod *parent, NMConnection *connection)
if (method->pkey_passphrase_requested) {
g_object_set (s_8021x, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD,
- gtk_editable_get_text (GTK_EDITABLE (method->pkey_passphrase_entry)),
- NULL);
+ gtk_entry_get_text (method->pkey_passphrase_entry), NULL);
}
}
@@ -286,19 +280,15 @@ password_storage_changed (GObject *entry,
static void
set_userpass_ui (EAPMethodSimple *method)
{
- if (method->ws_parent->username) {
- gtk_editable_set_text (GTK_EDITABLE (method->username_entry),
- method->ws_parent->username);
- } else {
- gtk_editable_set_text (GTK_EDITABLE (method->username_entry), "");
- }
+ if (method->ws_parent->username)
+ gtk_entry_set_text (method->username_entry, method->ws_parent->username);
+ else
+ gtk_entry_set_text (method->username_entry, "");
- if (method->ws_parent->password && !method->ws_parent->always_ask) {
- gtk_editable_set_text (GTK_EDITABLE (method->password_entry),
- method->ws_parent->password);
- } else {
- gtk_editable_set_text (GTK_EDITABLE (method->password_entry), "");
- }
+ if (method->ws_parent->password && !method->ws_parent->always_ask)
+ gtk_entry_set_text (method->password_entry, method->ws_parent->password);
+ else
+ gtk_entry_set_text (method->password_entry, "");
gtk_toggle_button_set_active (method->show_password, method->ws_parent->show_password);
password_storage_changed (NULL, NULL, method);
@@ -314,8 +304,8 @@ static void
widgets_unrealized (GtkWidget *widget, EAPMethodSimple *method)
{
wireless_security_set_userpass (method->ws_parent,
- gtk_editable_get_text (GTK_EDITABLE (method->username_entry)),
- gtk_editable_get_text (GTK_EDITABLE (method->password_entry)),
+ gtk_entry_get_text (method->username_entry),
+ gtk_entry_get_text (method->password_entry),
always_ask_selected (method->password_entry),
gtk_toggle_button_get_active (method->show_password));
}
diff --git a/src/wireless-security/eap-method-tls.c b/src/wireless-security/eap-method-tls.c
index 79f296dc..12374e87 100644
--- a/src/wireless-security/eap-method-tls.c
+++ b/src/wireless-security/eap-method-tls.c
@@ -8,7 +8,6 @@
*/
#include "nm-default.h"
-#include "nma-private.h"
#include <ctype.h>
#include <string.h>
@@ -45,7 +44,7 @@ validate (EAPMethod *parent, GError **error)
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_tls_identity_entry"));
g_assert (widget);
- identity = gtk_editable_get_text (GTK_EDITABLE (widget));
+ identity = gtk_entry_get_text (GTK_ENTRY (widget));
if (!identity || !strlen (identity)) {
widget_set_error (widget);
g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("missing EAP-TLS identity"));
@@ -115,14 +114,14 @@ fill_connection (EAPMethod *parent, NMConnection *connection)
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_tls_identity_entry"));
g_assert (widget);
- g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, gtk_editable_get_text (GTK_EDITABLE (widget)), NULL);
+ g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, gtk_entry_get_text (GTK_ENTRY (widget)), NULL);
#if LIBNM_BUILD
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_tls_domain_entry"));
g_assert (widget);
g_object_set (s_8021x,
parent->phase2 ? NM_SETTING_802_1X_PHASE2_DOMAIN_SUFFIX_MATCH : NM_SETTING_802_1X_DOMAIN_SUFFIX_MATCH,
- gtk_editable_get_text (GTK_EDITABLE (widget)), NULL);
+ gtk_entry_get_text (GTK_ENTRY (widget)), NULL);
#endif
/* TLS private key */
@@ -399,7 +398,7 @@ eap_method_tls_new (WirelessSecurity *ws_parent,
(GCallback) wireless_security_changed_cb,
ws_parent);
if (s_8021x && nm_setting_802_1x_get_identity (s_8021x))
- gtk_editable_set_text (GTK_EDITABLE (widget), nm_setting_802_1x_get_identity (s_8021x));
+ gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_identity (s_8021x));
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_tls_domain_entry"));
g_assert (widget);
@@ -409,10 +408,10 @@ eap_method_tls_new (WirelessSecurity *ws_parent,
ws_parent);
if (phase2) {
if (s_8021x && nm_setting_802_1x_get_phase2_domain_suffix_match (s_8021x))
- gtk_editable_set_text (GTK_EDITABLE (widget), nm_setting_802_1x_get_phase2_domain_suffix_match (s_8021x));
+ gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_phase2_domain_suffix_match (s_8021x));
} else {
if (s_8021x && nm_setting_802_1x_get_domain_suffix_match (s_8021x))
- gtk_editable_set_text (GTK_EDITABLE (widget), nm_setting_802_1x_get_domain_suffix_match (s_8021x));
+ gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_domain_suffix_match (s_8021x));
}
#else
gtk_widget_hide (widget);
diff --git a/src/wireless-security/eap-method-ttls.c b/src/wireless-security/eap-method-ttls.c
index 1d589ee7..c94a9deb 100644
--- a/src/wireless-security/eap-method-ttls.c
+++ b/src/wireless-security/eap-method-ttls.c
@@ -7,7 +7,6 @@
*/
#include "nm-default.h"
-#include "nma-private.h"
#include <ctype.h>
#include <string.h>
@@ -139,14 +138,14 @@ fill_connection (EAPMethod *parent, NMConnection *connection)
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_ttls_anon_identity_entry"));
g_assert (widget);
- text = gtk_editable_get_text (GTK_EDITABLE (widget));
+ text = gtk_entry_get_text (GTK_ENTRY (widget));
if (text && strlen (text))
g_object_set (s_8021x, NM_SETTING_802_1X_ANONYMOUS_IDENTITY, text, NULL);
#if LIBNM_BUILD
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_ttls_domain_entry"));
g_assert (widget);
- text = gtk_editable_get_text (GTK_EDITABLE (widget));
+ text = gtk_entry_get_text (GTK_ENTRY (widget));
if (text && strlen (text))
g_object_set (s_8021x, NM_SETTING_802_1X_DOMAIN_SUFFIX_MATCH, text, NULL);
#endif
@@ -488,7 +487,7 @@ eap_method_ttls_new (WirelessSecurity *ws_parent,
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_ttls_anon_identity_entry"));
if (s_8021x && nm_setting_802_1x_get_anonymous_identity (s_8021x))
- gtk_editable_set_text (GTK_EDITABLE (widget), nm_setting_802_1x_get_anonymous_identity (s_8021x));
+ gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_anonymous_identity (s_8021x));
g_signal_connect (G_OBJECT (widget), "changed",
(GCallback) wireless_security_changed_cb,
ws_parent);
@@ -496,7 +495,7 @@ eap_method_ttls_new (WirelessSecurity *ws_parent,
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "eap_ttls_domain_entry"));
#if LIBNM_BUILD
if (s_8021x && nm_setting_802_1x_get_domain_suffix_match (s_8021x))
- gtk_editable_set_text (GTK_EDITABLE (widget), nm_setting_802_1x_get_domain_suffix_match (s_8021x));
+ gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_domain_suffix_match (s_8021x));
g_signal_connect (G_OBJECT (widget), "changed",
(GCallback) wireless_security_changed_cb,
ws_parent);
diff --git a/src/wireless-security/helpers.c b/src/wireless-security/helpers.c
index 31009cb2..5cb86377 100644
--- a/src/wireless-security/helpers.c
+++ b/src/wireless-security/helpers.c
@@ -7,7 +7,7 @@
*/
#include "nm-default.h"
-#include "nma-private.h"
+
#include "helpers.h"
void
@@ -32,7 +32,7 @@ helper_fill_secret_entry (NMConnection *connection,
if (tmp) {
widget = GTK_WIDGET (gtk_builder_get_object (builder, entry_name));
g_assert (widget);
- gtk_editable_set_text (GTK_EDITABLE (widget), tmp);
+ gtk_entry_set_text (GTK_ENTRY (widget), tmp);
}
}
}
diff --git a/src/wireless-security/meson.build b/src/wireless-security/meson.build
index 2348fcb9..288f341e 100644
--- a/src/wireless-security/meson.build
+++ b/src/wireless-security/meson.build
@@ -1,6 +1,6 @@
wireless_security_inc = include_directories('.')
-sources = [version_header] + files(
+sources = files(
'eap-method.c',
'eap-method-fast.c',
'eap-method-leap.c',
@@ -42,13 +42,13 @@ sources += gnome.compile_resources(
incs = [
top_inc,
shared_inc,
- src_inc,
- libnma_inc
+ src_inc
]
deps = [
gtk_dep,
libnm_dep,
+ libnma_dep,
libutils_libnm_dep
]
@@ -58,37 +58,3 @@ libwireless_security_libnm = static_library(
include_directories: incs,
dependencies: deps
)
-
-if enable_libnma_gtk4
- deps = [
- gtk4_dep,
- libnm_dep,
- libutils_libnm_dep
- ]
-
- libwireless_security_libnma_gtk4 = static_library(
- 'wireless-security-libnma-gtk4',
- sources: sources,
- include_directories: incs,
- dependencies: deps,
- c_args: cflags
- )
-endif
-
-if enable_libnm_gtk
- deps = [
- gtk_dep,
- libnm_glib_dep,
- libutils_libnm_glib_dep
- ]
-
- cflags = '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB_LEGACY'
-
- libwireless_security_libnm_glib = static_library(
- 'wireless-security-libnm-glib',
- sources: sources,
- include_directories: incs,
- dependencies: deps,
- c_args: cflags
- )
-endif
diff --git a/src/wireless-security/ws-leap.c b/src/wireless-security/ws-leap.c
index e400a10a..f102fc6a 100644
--- a/src/wireless-security/ws-leap.c
+++ b/src/wireless-security/ws-leap.c
@@ -7,7 +7,6 @@
*/
#include "nm-default.h"
-#include "nma-private.h"
#include <string.h>
@@ -45,7 +44,7 @@ validate (WirelessSecurity *parent, GError **error)
entry = GTK_WIDGET (gtk_builder_get_object (parent->builder, "leap_username_entry"));
g_assert (entry);
- text = gtk_editable_get_text (GTK_EDITABLE (entry));
+ text = gtk_entry_get_text (GTK_ENTRY (entry));
if (!text || !strlen (text)) {
widget_set_error (entry);
g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("missing leap-username"));
@@ -57,7 +56,7 @@ validate (WirelessSecurity *parent, GError **error)
g_assert (entry);
secret_flags = nma_utils_menu_to_secret_flags (entry);
- text = gtk_editable_get_text (GTK_EDITABLE (entry));
+ text = gtk_entry_get_text (GTK_ENTRY (entry));
if ( secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED
|| secret_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED
@@ -100,11 +99,11 @@ fill_connection (WirelessSecurity *parent, NMConnection *connection)
nm_connection_add_setting (connection, (NMSetting *) s_wireless_sec);
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "leap_username_entry"));
- leap_username = gtk_editable_get_text (GTK_EDITABLE (widget));
+ leap_username = gtk_entry_get_text (GTK_ENTRY (widget));
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "leap_password_entry"));
passwd_entry = widget;
- leap_password = gtk_editable_get_text (GTK_EDITABLE (widget));
+ leap_password = gtk_entry_get_text (GTK_ENTRY (widget));
g_object_set (s_wireless_sec,
NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x",
@@ -191,7 +190,7 @@ ws_leap_new (NMConnection *connection, gboolean secrets_only)
(GCallback) wireless_security_changed_cb,
sec);
if (wsec)
- gtk_editable_set_text (GTK_EDITABLE (widget), nm_setting_wireless_security_get_leap_username (wsec));
+ gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_wireless_security_get_leap_username (wsec));
if (secrets_only)
gtk_widget_hide (widget);
diff --git a/src/wireless-security/ws-sae.c b/src/wireless-security/ws-sae.c
index 4bebf138..7fa95c68 100644
--- a/src/wireless-security/ws-sae.c
+++ b/src/wireless-security/ws-sae.c
@@ -4,7 +4,6 @@
*/
#include "nm-default.h"
-#include "nma-private.h"
#include <ctype.h>
#include <string.h>
@@ -47,7 +46,7 @@ validate (WirelessSecurity *parent, GError **error)
g_assert (entry);
secret_flags = nma_utils_menu_to_secret_flags (entry);
- key = gtk_editable_get_text (GTK_EDITABLE (entry));
+ key = gtk_entry_get_text (GTK_ENTRY (entry));
if ( secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED
|| secret_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED) {
@@ -99,7 +98,7 @@ fill_connection (WirelessSecurity *parent, NMConnection *connection)
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "psk_entry"));
passwd_entry = widget;
- key = gtk_editable_get_text (GTK_EDITABLE (widget));
+ key = gtk_entry_get_text (GTK_ENTRY (widget));
g_object_set (s_wireless_sec, NM_SETTING_WIRELESS_SECURITY_PSK, key, NULL);
/* Save PSK_FLAGS to the connection */
@@ -168,7 +167,7 @@ ws_sae_new (NMConnection *connection, gboolean secrets_only)
g_signal_connect (G_OBJECT (widget), "changed",
(GCallback) wireless_security_changed_cb,
sec);
- gtk_editable_set_width_chars (GTK_EDITABLE (widget), 28);
+ gtk_entry_set_width_chars (GTK_ENTRY (widget), 28);
/* Create password-storage popup menu for password entry under entry's secondary icon */
if (connection)
diff --git a/src/wireless-security/ws-wep-key.c b/src/wireless-security/ws-wep-key.c
index fc5a4b74..caedfa5f 100644
--- a/src/wireless-security/ws-wep-key.c
+++ b/src/wireless-security/ws-wep-key.c
@@ -7,7 +7,6 @@
*/
#include "nm-default.h"
-#include "nma-private.h"
#include <string.h>
@@ -50,7 +49,7 @@ key_index_combo_changed_cb (GtkWidget *combo, WirelessSecurity *parent)
/* Save WEP key for old key index */
entry = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wep_key_entry"));
- key = gtk_editable_get_text (GTK_EDITABLE (entry));
+ key = gtk_entry_get_text (GTK_ENTRY (entry));
if (key)
g_strlcpy (sec->keys[sec->cur_index], key, sizeof (sec->keys[sec->cur_index]));
else
@@ -61,7 +60,7 @@ key_index_combo_changed_cb (GtkWidget *combo, WirelessSecurity *parent)
g_return_if_fail (key_index >= 0);
/* Populate entry with key from new index */
- gtk_editable_set_text (GTK_EDITABLE (entry), sec->keys[key_index]);
+ gtk_entry_set_text (GTK_ENTRY (entry), sec->keys[key_index]);
sec->cur_index = key_index;
wireless_security_changed_cb (combo, parent);
@@ -90,7 +89,7 @@ validate (WirelessSecurity *parent, GError **error)
g_assert (entry);
secret_flags = nma_utils_menu_to_secret_flags (entry);
- key = gtk_editable_get_text (GTK_EDITABLE (entry));
+ key = gtk_entry_get_text (GTK_ENTRY (entry));
if ( secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED
|| secret_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED) {
@@ -167,7 +166,7 @@ fill_connection (WirelessSecurity *parent, NMConnection *connection)
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wep_key_entry"));
passwd_entry = widget;
- key = gtk_editable_get_text (GTK_EDITABLE (widget));
+ key = gtk_entry_get_text (GTK_ENTRY (widget));
g_strlcpy (sec->keys[sec->cur_index], key, sizeof (sec->keys[sec->cur_index]));
/* Blow away the old security setting by adding a clear one */
@@ -218,7 +217,7 @@ update_secrets (WirelessSecurity *parent, NMConnection *connection)
{
WirelessSecurityWEPKey *sec = (WirelessSecurityWEPKey *) parent;
NMSettingWirelessSecurity *s_wsec;
- GtkEditable *entry;
+ GtkWidget *widget;
const char *tmp;
int i;
@@ -229,9 +228,9 @@ update_secrets (WirelessSecurity *parent, NMConnection *connection)
g_strlcpy (sec->keys[i], tmp, sizeof (sec->keys[i]));
}
- entry = GTK_EDITABLE (gtk_builder_get_object (parent->builder, "wep_key_entry"));
+ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wep_key_entry"));
if (strlen (sec->keys[sec->cur_index]))
- gtk_editable_set_text (entry, sec->keys[sec->cur_index]);
+ gtk_entry_set_text (GTK_ENTRY (widget), sec->keys[sec->cur_index]);
}
WirelessSecurityWEPKey *
@@ -268,7 +267,7 @@ ws_wep_key_new (NMConnection *connection,
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wep_key_entry"));
g_assert (widget);
- gtk_editable_set_width_chars (GTK_EDITABLE (widget), 28);
+ gtk_entry_set_width_chars (GTK_ENTRY (widget), 28);
/* Create password-storage popup menu for password entry under entry's secondary icon */
if (connection)
diff --git a/src/wireless-security/ws-wpa-psk.c b/src/wireless-security/ws-wpa-psk.c
index 5f0df4db..eba22a79 100644
--- a/src/wireless-security/ws-wpa-psk.c
+++ b/src/wireless-security/ws-wpa-psk.c
@@ -7,7 +7,6 @@
*/
#include "nm-default.h"
-#include "nma-private.h"
#include <ctype.h>
#include <string.h>
@@ -52,7 +51,7 @@ validate (WirelessSecurity *parent, GError **error)
g_assert (entry);
secret_flags = nma_utils_menu_to_secret_flags (entry);
- key = gtk_editable_get_text (GTK_EDITABLE (entry));
+ key = gtk_entry_get_text (GTK_ENTRY (entry));
len = key ? strlen (key) : 0;
if ( secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED
@@ -116,7 +115,7 @@ fill_connection (WirelessSecurity *parent, NMConnection *connection)
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "wpa_psk_entry"));
passwd_entry = widget;
- key = gtk_editable_get_text (GTK_EDITABLE (widget));
+ key = gtk_entry_get_text (GTK_ENTRY (widget));
g_object_set (s_wireless_sec, NM_SETTING_WIRELESS_SECURITY_PSK, key, NULL);
/* Save PSK_FLAGS to the connection */
@@ -185,7 +184,7 @@ ws_wpa_psk_new (NMConnection *connection, gboolean secrets_only)
g_signal_connect (G_OBJECT (widget), "changed",
(GCallback) wireless_security_changed_cb,
sec);
- gtk_editable_set_width_chars (GTK_EDITABLE (widget), 28);
+ gtk_entry_set_width_chars (GTK_ENTRY (widget), 28);
/* Create password-storage popup menu for password entry under entry's secondary icon */
if (connection)