diff options
Diffstat (limited to 'netspeed/src')
-rw-r--r-- | netspeed/src/Makefile.am | 39 | ||||
-rw-r--r-- | netspeed/src/backend.c | 51 | ||||
-rw-r--r-- | netspeed/src/backend.h | 7 | ||||
-rw-r--r-- | netspeed/src/netspeed-preferences.c | 34 | ||||
-rw-r--r-- | netspeed/src/netspeed.c | 206 |
5 files changed, 181 insertions, 156 deletions
diff --git a/netspeed/src/Makefile.am b/netspeed/src/Makefile.am index 8358b3c9..ceec7342 100644 --- a/netspeed/src/Makefile.am +++ b/netspeed/src/Makefile.am @@ -13,11 +13,11 @@ if HAVE_NL AM_CPPFLAGS += $(NL_CFLAGS) endif -libexec_PROGRAMS = mate-netspeed-applet - -BUILT_SOURCES = netspeed-resources.c netspeed-resources.h -nodist_mate_netspeed_applet_SOURCES = $(BUILT_SOURCES) -mate_netspeed_applet_SOURCES = \ +BUILT_SOURCES = \ + netspeed-resources.c \ + netspeed-resources.h \ + $(NULL) +APPLET_SOURCES = \ backend.h \ backend.c \ netspeed.c \ @@ -27,23 +27,40 @@ mate_netspeed_applet_SOURCES = \ $(NULL) if HAVE_NL -mate_netspeed_applet_SOURCES += \ +APPLET_SOURCES += \ nl80211.h \ ieee80211.h \ $(NULL) endif -mate_netspeed_applet_LDADD = $(GIO_LIBS) $(GTOP_APPLETS_LIBS) \ - $(MATE_APPLETS4_LIBS) \ - $(INTLLIBS) -lm +APPLET_LIBS = \ + $(GIO_LIBS) \ + $(GTOP_APPLETS_LIBS) \ + $(MATE_APPLETS4_LIBS) \ + $(INTLLIBS) -lm if HAVE_IW -mate_netspeed_applet_LDADD += $(IW_LIBS) +APPLET_LIBS += $(IW_LIBS) endif if HAVE_NL -mate_netspeed_applet_LDADD += $(NL_LIBS) +APPLET_LIBS += $(NL_LIBS) endif +if ENABLE_IN_PROCESS +pkglib_LTLIBRARIES = libmate-netspeed-applet.la +nodist_libmate_netspeed_applet_la_SOURCES = $(BUILT_SOURCES) +libmate_netspeed_applet_la_SOURCES = $(APPLET_SOURCES) +libmate_netspeed_applet_la_CFLAGS = $(AM_CFLAGS) +libmate_netspeed_applet_la_LDFLAGS = -module -avoid-version +libmate_netspeed_applet_la_LIBADD = $(APPLET_LIBS) +else !ENABLE_IN_PROCESS +libexec_PROGRAMS = mate-netspeed-applet +nodist_mate_netspeed_applet_SOURCES = $(BUILT_SOURCES) +mate_netspeed_applet_SOURCES = $(APPLET_SOURCES) +mate_netspeed_applet_CFLAGS = $(AM_CFLAGS) +mate_netspeed_applet_LDADD = $(APPLET_LIBS) +endif !ENABLE_IN_PROCESS + netspeed-resources.c: $(srcdir)/../data/netspeed-resources.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir)/../data --generate-dependencies $(srcdir)/../data/netspeed-resources.gresource.xml) $(AM_V_GEN)$(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir)/../data --generate --c-name netspeed $< diff --git a/netspeed/src/backend.c b/netspeed/src/backend.c index f013c170..e1321497 100644 --- a/netspeed/src/backend.c +++ b/netspeed/src/backend.c @@ -88,7 +88,6 @@ is_dummy_device (const char* device) return FALSE; } - /* Check for all available devices. This really should be * portable for at least all plattforms using the gnu c lib * TODO: drop it, use glibtop_get_netlist directly / gchar** @@ -105,6 +104,7 @@ get_available_devices (void) for (dev = devices; *dev; ++dev) { device_glist = g_list_prepend (device_glist, g_strdup (*dev)); } + device_glist = g_list_sort (device_glist, (GCompareFunc) g_strcmp0); g_strfreev (devices); @@ -207,6 +207,41 @@ get_ip_address_list (const char *iface_name, return list; } +GSList* +get_ip6_address_list (const char *iface_name) +{ + GSList *list = NULL; + struct ifaddrs *ifaces; + + if (getifaddrs (&ifaces) != -1) { + char ip6[INET6_ADDRSTRLEN]; + + for (struct ifaddrs *iface = ifaces; iface != NULL; iface = iface->ifa_next) { + if ((iface->ifa_addr == NULL) || (iface->ifa_addr->sa_family != AF_INET6)) + continue; + + if (!g_strcmp0 (iface->ifa_name, iface_name)) { + void *sinx_addr = NULL; + + struct sockaddr_in6 ip6_addr; + + memcpy (&ip6_addr, iface->ifa_addr, sizeof (struct sockaddr_in6)); + + /* get network ip */ + sinx_addr = &ip6_addr.sin6_addr; + inet_ntop (iface->ifa_addr->sa_family, sinx_addr, ip6, sizeof (ip6)); + + list = g_slist_prepend (list, g_strdup (ip6)); + } + } + + if (list != NULL) + list = g_slist_sort (list, (GCompareFunc) g_strcmp0); + freeifaddrs (ifaces); + } + return list; +} + const gchar* get_default_route (void) { @@ -243,12 +278,6 @@ get_default_route (void) return NULL; } -void -free_devices_list (GList *list) -{ - g_list_free_full (list, g_free); -} - /* Frees a DevInfo struct and all the stuff it contains */ void @@ -350,7 +379,6 @@ get_device_info (const char *device, if (devinfo->running) { devinfo->ip = netload.address; devinfo->netmask = netload.subnet; - memcpy (devinfo->ipv6, netload.address6, 16); #if defined (HAVE_NL) if (devinfo->type != DEV_WIRELESS) { devinfo->tx = netload.bytes_out; @@ -476,7 +504,6 @@ out_handle_destroy: return err; } - static void nl80211_cleanup (struct nl80211_state *state) { @@ -788,7 +815,7 @@ get_wireless_info (DevInfo *devinfo) ret = nl_recvmsgs_default (nlstate.sock); nlmsg_free (msg); if (ret < 0) { - g_warning ("failed to recive netlink message"); + g_warning ("failed to receive netlink message"); } if (!devinfo->running) @@ -812,7 +839,7 @@ get_wireless_info (DevInfo *devinfo) ret = nl_recvmsgs_default (nlstate.sock); nlmsg_free (msg); if (ret < 0) { - g_warning ("failed to recive netlink message"); + g_warning ("failed to receive netlink message"); goto cleanup; } @@ -838,7 +865,7 @@ get_wireless_info (DevInfo *devinfo) ret = nl_recvmsgs_default (nlstate.sock); nlmsg_free (msg); if (ret < 0) { - g_warning ("failed to recive netlink message"); + g_warning ("failed to receive netlink message"); } cleanup: diff --git a/netspeed/src/backend.h b/netspeed/src/backend.h index cd98c66c..5f382cd1 100644 --- a/netspeed/src/backend.h +++ b/netspeed/src/backend.h @@ -61,7 +61,6 @@ typedef struct { guint32 netmask; guint32 ptpip; guint8 hwaddr [8]; /* EUI-48 or EUI-64 */ - guint8 ipv6 [16]; char *essid; gboolean up; gboolean running; @@ -91,9 +90,6 @@ gboolean is_dummy_device (const char* device); void -free_devices_list (GList *list); - -void free_device_info (DevInfo *devinfo); void @@ -108,4 +104,7 @@ get_wireless_info (DevInfo *devinfo); GSList* get_ip_address_list (const char *ifa_name, gboolean ipv4); +GSList* +get_ip6_address_list (const char *ifa_name); + #endif /* _BACKEND_H */ diff --git a/netspeed/src/netspeed-preferences.c b/netspeed/src/netspeed-preferences.c index 401a9de8..cc52a506 100644 --- a/netspeed/src/netspeed-preferences.c +++ b/netspeed/src/netspeed-preferences.c @@ -38,6 +38,8 @@ struct _NetspeedPreferences GtkWidget *show_icon_checkbutton; GtkWidget *show_quality_icon_checkbutton; GtkWidget *change_icon_checkbutton; + + GList *devices; }; typedef enum @@ -112,11 +114,9 @@ static void on_network_device_combo_changed (GtkComboBox *combo, NetspeedPreferences *preferences) { - GList *devices; - int i, active; + gint active; gboolean old_auto_change_device, auto_change_device; - devices = g_object_get_data (G_OBJECT (combo), "devices"); active = gtk_combo_box_get_active (combo); g_assert (active > -1); @@ -128,16 +128,15 @@ on_network_device_combo_changed (GtkComboBox *combo, auto_change_device = TRUE; } else { const gchar *current_device_name; + const gchar *selected_device_name; current_device_name = netspeed_applet_get_current_device_name (preferences->netspeed); auto_change_device = FALSE; - for (i = 1; i < active; i++) { - devices = g_list_next (devices); - } - if (!devices || !g_strcmp0 (devices->data, current_device_name)) + selected_device_name = g_list_nth_data (preferences->devices, (guint) (active - 1)); + if (!g_strcmp0 (selected_device_name, current_device_name)) return; g_settings_set_string (preferences->settings, - "device", devices->data); + "device", selected_device_name); } if (old_auto_change_device != auto_change_device) g_settings_set_boolean (preferences->settings, @@ -147,10 +146,9 @@ on_network_device_combo_changed (GtkComboBox *combo, static void netspeed_preferences_finalize (GObject *object) { - NetspeedPreferences *self = NETSPEED_PREFERENCES (object); - g_signal_handlers_disconnect_by_func (self->network_device_combo, - on_network_device_combo_changed, - self); + NetspeedPreferences *preferences = NETSPEED_PREFERENCES (object); + + g_list_free_full (preferences->devices, g_free); G_OBJECT_CLASS (netspeed_preferences_parent_class)->finalize (object); } @@ -188,15 +186,9 @@ netspeed_preferences_class_init (NetspeedPreferencesClass *klass) } static void -free_devices (gpointer data) -{ - g_list_free_full (data, g_free); -} - -static void fill_device_combo (NetspeedPreferences *preferences, GSettings *settings) { - GList *ptr, *devices; + GList *ptr; int i, active = -1; const gchar *current_device_name; gboolean auto_change_device; @@ -204,7 +196,7 @@ fill_device_combo (NetspeedPreferences *preferences, GSettings *settings) /* Default means device with default route set */ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (preferences->network_device_combo), _("Default")); - ptr = devices = get_available_devices (); + ptr = preferences->devices = get_available_devices (); current_device_name = netspeed_applet_get_current_device_name (preferences->netspeed); auto_change_device = g_settings_get_boolean (settings, "auto-change-device"); for (i = 0; ptr; ptr = g_list_next (ptr)) { @@ -217,8 +209,6 @@ fill_device_combo (NetspeedPreferences *preferences, GSettings *settings) if (active < 0 || auto_change_device) active = 0; gtk_combo_box_set_active (GTK_COMBO_BOX (preferences->network_device_combo), active); - g_object_set_data_full (G_OBJECT (preferences->network_device_combo), "devices", - devices, free_devices); } GtkWidget * diff --git a/netspeed/src/netspeed.c b/netspeed/src/netspeed.c index eeb2dce4..73185abd 100644 --- a/netspeed/src/netspeed.c +++ b/netspeed/src/netspeed.c @@ -518,7 +518,7 @@ redraw_graph (NetspeedApplet *netspeed, w = gdk_window_get_width (real_window); h = gdk_window_get_height (real_window); - /* the graph hight should be: hight/2 <= applet->max_graph < hight */ + /* the graph hight should be: hight/2 <= netspeed->max_graph < hight */ for (max_val = 1; max_val < netspeed->max_graph; max_val *= 2) ; /* calculate the polygons (GdkPoint[]) for the graphs */ @@ -630,7 +630,7 @@ search_for_up_if (NetspeedApplet *netspeed) if (set_applet_devinfo (netspeed, tmp->data)) break; } - free_devices_list (devices); + g_list_free_full (devices, g_free); } static char * @@ -687,13 +687,6 @@ format_ipv4 (guint32 ip, } static void -format_ipv6 (const guint8 ip[16], - char *dest) -{ - inet_ntop (AF_INET6, ip, dest, INET6_ADDRSTRLEN); -} - -static void fill_details_dialog (NetspeedApplet *netspeed) { char *text; @@ -1058,12 +1051,12 @@ about_cb (GtkAction *action, "version", VERSION, "copyright", _("Copyright \xc2\xa9 2002-2003 Jörgen Scheibengruber\n" "Copyright \xc2\xa9 2011-2014 Stefano Karapetsas\n" - "Copyright \xc2\xa9 2015-2020 MATE developers"), + "Copyright \xc2\xa9 2015-2021 MATE developers"), "comments", _("A little applet that displays some information on the traffic on the specified network device"), "authors", authors, "documenters", NULL, "translator-credits", _("translator-credits"), - "website", "http://www.mate-desktop.org/", + "website", PACKAGE_URL, "logo-icon-name", LOGO_ICON, NULL); } @@ -1371,54 +1364,44 @@ update_tooltip (NetspeedApplet *netspeed) if (!netspeed->devinfo->running) g_string_printf (tooltip, _("%s is down"), netspeed->devinfo->name); else { + GSList *iterator; + GString *string = NULL; char ipv4_text [INET_ADDRSTRLEN]; - char ipv6_text [INET6_ADDRSTRLEN]; - char *ip; - - if (netspeed->show_all_addresses) { - format_ipv6 (netspeed->devinfo->ipv6, ipv6_text); - if (netspeed->devinfo->ip) { - format_ipv4 (netspeed->devinfo->ip, ipv4_text); - if (strlen (ipv6_text) > 2) { - g_string_printf (tooltip, - _("%s: %s and %s"), - netspeed->devinfo->name, - ipv4_text, - ipv6_text); - } else { - g_string_printf (tooltip, - _("%s: %s"), - netspeed->devinfo->name, - ipv4_text); - } - } else { - if (strlen (ipv6_text) > 2) { - g_string_printf (tooltip, - _("%s: %s"), - netspeed->devinfo->name, - ipv6_text); - } else { - g_string_printf (tooltip, - _("%s: has no ip"), - netspeed->devinfo->name); - } - } - } else { - if (netspeed->devinfo->ip) { - format_ipv4 (netspeed->devinfo->ip, ipv4_text); - ip = ipv4_text; - } else { - format_ipv6 (netspeed->devinfo->ipv6, ipv6_text); - if (strlen (ipv6_text) > 2) { - ip = ipv6_text; - } else { - ip = _("has no ip"); + + g_string_printf (tooltip, "%s: ", netspeed->devinfo->name); + + if (netspeed->show_all_addresses || !netspeed->devinfo->ip) { + GSList *ip6_address_list = get_ip6_address_list (netspeed->devinfo->name); + + /* check if we got IPv6 addresses */ + if (ip6_address_list != NULL) { + for (iterator = ip6_address_list; iterator; iterator = iterator->next) { + if (string == NULL) + string = g_string_new ((char*) iterator->data); + else + g_string_append_printf (string, + _("\n%s"), + (char*) iterator->data); } } - g_string_printf (tooltip, - _("%s: %s"), - netspeed->devinfo->name, - ip); + + g_slist_free_full (ip6_address_list, g_free); + } + + if (!netspeed->devinfo->ip && !string) { + g_string_append (tooltip, "has no ip"); + } + + if (netspeed->devinfo->ip) { + format_ipv4 (netspeed->devinfo->ip, ipv4_text); + g_string_append (tooltip, ipv4_text); + } + + if (string != NULL) { + g_string_append_printf (tooltip, + _("\n%s"), + string->str); + g_string_free (string, TRUE); } if (netspeed->show_sum) { @@ -1455,7 +1438,6 @@ update_tooltip (NetspeedApplet *netspeed) g_string_free (tooltip, TRUE); } - static gboolean netspeed_applet_enter_notify_event (GtkWidget *widget, GdkEventCrossing *event) @@ -1564,7 +1546,6 @@ device_settings_changed (GSettings *settings, NetspeedApplet *netspeed) { char *device; - DevInfo *info; device = g_settings_get_string (settings, key); if (device && *device != '\0') { @@ -1586,13 +1567,17 @@ netspeed_applet_factory (MatePanelApplet *applet, int i; GtkWidget *spacer, *spacer_box; GtkActionGroup *action_group; + AtkObject *atk_obj; char *tmp; if (strcmp (iid, "NetspeedApplet")) return FALSE; glibtop_init (); + +#ifndef ENABLE_IN_PROCESS g_set_application_name (_("MATE Netspeed")); +#endif netspeed = NETSPEED_APPLET (applet); netspeed->icon_theme = gtk_icon_theme_get_default (); @@ -1660,7 +1645,7 @@ netspeed_applet_factory (MatePanelApplet *applet, } ptr = g_list_next (ptr); } - free_devices_list (devices); + g_list_free_full (devices, g_free); } if (!netspeed->devinfo) get_device_info ("lo", &netspeed->devinfo); @@ -1698,62 +1683,61 @@ netspeed_applet_factory (MatePanelApplet *applet, netspeed->timeout_id = g_timeout_add (REFRESH_TIME, (GSourceFunc)timeout_function, netspeed); + g_signal_connect_object (applet, "change-size", + G_CALLBACK (applet_change_size_or_orient), + netspeed, 0); - g_signal_connect (applet, "change_size", - G_CALLBACK (applet_change_size_or_orient), - netspeed); - - g_signal_connect (netspeed->icon_theme, "changed", - G_CALLBACK (icon_theme_changed_cb), - netspeed); + g_signal_connect_object (netspeed->icon_theme, "changed", + G_CALLBACK (icon_theme_changed_cb), + netspeed, 0); - g_signal_connect (applet, "change_orient", - G_CALLBACK (applet_change_size_or_orient), - netspeed); + g_signal_connect_object (applet, "change-orient", + G_CALLBACK (applet_change_size_or_orient), + netspeed, 0); - g_signal_connect (netspeed->in_label, "size_allocate", - G_CALLBACK (label_size_allocate_cb), - netspeed); + g_signal_connect_object (netspeed->in_label, "size-allocate", + G_CALLBACK (label_size_allocate_cb), + netspeed, 0); - g_signal_connect (netspeed->out_label, "size_allocate", - G_CALLBACK (label_size_allocate_cb), - netspeed); + g_signal_connect_object (netspeed->out_label, "size-allocate", + G_CALLBACK (label_size_allocate_cb), + netspeed, 0); - g_signal_connect (netspeed->sum_label, "size_allocate", - G_CALLBACK (label_size_allocate_cb), - netspeed); + g_signal_connect_object (netspeed->sum_label, "size-allocate", + G_CALLBACK (label_size_allocate_cb), + netspeed, 0); - g_signal_connect (netspeed->settings, "changed::auto-change-device", - G_CALLBACK (auto_change_device_settings_changed), - netspeed); + g_signal_connect_object (netspeed->settings, "changed::auto-change-device", + G_CALLBACK (auto_change_device_settings_changed), + netspeed, 0); - g_signal_connect (netspeed->settings, "changed::device", - G_CALLBACK (device_settings_changed), - netspeed); + g_signal_connect_object (netspeed->settings, "changed::device", + G_CALLBACK (device_settings_changed), + netspeed, 0); - g_signal_connect (netspeed->settings, "changed::show-all-addresses", - G_CALLBACK (showalladdresses_settings_changed), - netspeed); + g_signal_connect_object (netspeed->settings, "changed::show-all-addresses", + G_CALLBACK (showalladdresses_settings_changed), + netspeed, 0); - g_signal_connect (netspeed->settings, "changed::show-sum", - G_CALLBACK (showsum_settings_changed), - netspeed); + g_signal_connect_object (netspeed->settings, "changed::show-sum", + G_CALLBACK (showsum_settings_changed), + netspeed, 0); - g_signal_connect (netspeed->settings, "changed::show-bits", - G_CALLBACK (showbits_settings_changed), - netspeed); + g_signal_connect_object (netspeed->settings, "changed::show-bits", + G_CALLBACK (showbits_settings_changed), + netspeed, 0); - g_signal_connect (netspeed->settings, "changed::change-icon", - G_CALLBACK (changeicon_settings_changed), - netspeed); + g_signal_connect_object (netspeed->settings, "changed::change-icon", + G_CALLBACK (changeicon_settings_changed), + netspeed, 0); - g_signal_connect (netspeed->settings, "changed::show-icon", - G_CALLBACK (showicon_settings_changed), - netspeed); + g_signal_connect_object (netspeed->settings, "changed::show-icon", + G_CALLBACK (showicon_settings_changed), + netspeed, 0); - g_signal_connect (netspeed->settings, "changed::show-quality-icon", - G_CALLBACK (showqualityicon_settings_changed), - netspeed); + g_signal_connect_object (netspeed->settings, "changed::show-quality-icon", + G_CALLBACK (showqualityicon_settings_changed), + netspeed, 0); action_group = gtk_action_group_new ("Netspeed Applet Actions"); gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE); @@ -1766,13 +1750,21 @@ netspeed_applet_factory (MatePanelApplet *applet, NETSPEED_RESOURCE_PATH "netspeed-menu.xml", action_group); + atk_obj = gtk_widget_get_accessible (GTK_WIDGET (applet)); + + if (GTK_IS_ACCESSIBLE (atk_obj)) { + atk_object_set_name (atk_obj, _("MATE Netspeed")); + atk_object_set_description (atk_obj, + _("A little applet that displays some information on the traffic on the specified network device")); + } + g_object_unref (action_group); return TRUE; } -MATE_PANEL_APPLET_OUT_PROCESS_FACTORY ("NetspeedAppletFactory", - NETSPEED_TYPE_APPLET, - "NetspeedApplet", - netspeed_applet_factory, - NULL) +PANEL_APPLET_FACTORY ("NetspeedAppletFactory", + NETSPEED_TYPE_APPLET, + "NetspeedApplet", + netspeed_applet_factory, + NULL) |