summaryrefslogtreecommitdiff
path: root/netspeed/src/netspeed.c
diff options
context:
space:
mode:
Diffstat (limited to 'netspeed/src/netspeed.c')
-rw-r--r--netspeed/src/netspeed.c2004
1 files changed, 1016 insertions, 988 deletions
diff --git a/netspeed/src/netspeed.c b/netspeed/src/netspeed.c
index e692d7da..73185abd 100644
--- a/netspeed/src/netspeed.c
+++ b/netspeed/src/netspeed.c
@@ -32,9 +32,11 @@
#include <gio/gio.h>
#include "backend.h"
+#include "netspeed-preferences.h"
+
+#include "netspeed.h"
#define GET_COLOR_CHOOSER(x) (GTK_COLOR_CHOOSER (gtk_builder_get_object (builder, (x))))
-#define GET_DIALOG(x) (GTK_DIALOG (gtk_builder_get_object (builder, (x))))
#define GET_DRAWING_AREA(x) (GTK_DRAWING_AREA (gtk_builder_get_object (builder, (x))))
#define GET_WIDGET(x) (GTK_WIDGET (gtk_builder_get_object (builder, (x))))
@@ -76,9 +78,10 @@ static const char LOGO_ICON[] = "mate-netspeed-applet";
/* A struct containing all the "global" data of the
* applet
*/
-typedef struct
+struct _NetspeedApplet
{
- MatePanelApplet *applet;
+ MatePanelApplet parent;
+
GtkWidget *box;
GtkWidget *pix_box;
GtkWidget *speed_box;
@@ -99,6 +102,7 @@ typedef struct
guint timeout_id;
char *up_cmd;
char *down_cmd;
+ gboolean show_all_addresses;
gboolean show_sum;
gboolean show_bits;
gboolean change_icon;
@@ -109,7 +113,7 @@ typedef struct
GdkRGBA out_color;
int width;
/* details dialog */
- GtkDialog *details;
+ GtkWidget *details;
GtkDrawingArea *drawingarea;
GtkWidget *ip_text;
GtkWidget *netmask_text;
@@ -129,8 +133,7 @@ typedef struct
GtkWidget *netlink_box;
GtkWidget *wireless_box;
/* settings dialog */
- GtkDialog *settings;
- GtkWidget *network_device_combo;
+ GtkWidget *preferences;
guint index_old;
guint64 in_old [OLD_VALUES];
@@ -142,14 +145,25 @@ typedef struct
GtkWidget *connect_dialog;
gboolean show_tooltip;
GtkIconTheme *icon_theme;
- GSettings *gsettings;
-} MateNetspeedApplet;
+ GSettings *settings;
+};
-static void
-update_tooltip(MateNetspeedApplet* applet);
+G_DEFINE_TYPE (NetspeedApplet, netspeed_applet, PANEL_TYPE_APPLET)
static void
-device_change_cb(GtkComboBox *combo, MateNetspeedApplet *applet);
+update_tooltip (NetspeedApplet *netspeed);
+
+GSettings *
+netspeed_applet_get_settings (NetspeedApplet *netspeed)
+{
+ return netspeed->settings;
+}
+
+const gchar *
+netspeed_applet_get_current_device_name (NetspeedApplet *netspeed)
+{
+ return netspeed->devinfo->name;
+}
/* Adds a Pango markup "foreground" to a bytestring
*/
@@ -166,62 +180,62 @@ add_markup_fgcolor (char **string,
/* Change the icons according to the selected device
*/
static void
-change_icons (MateNetspeedApplet *applet)
+change_icons (NetspeedApplet *netspeed)
{
cairo_surface_t *dev, *down;
cairo_surface_t *in_arrow, *out_arrow;
gint icon_scale;
- gint icon_size = mate_panel_applet_get_size (MATE_PANEL_APPLET (applet->applet)) - 8;
+ gint icon_size = mate_panel_applet_get_size (MATE_PANEL_APPLET (netspeed)) - 8;
/* FIXME: Not all network icons include a high enough resolution, so to make them all
* consistent, we cap them at 48px.*/
icon_size = CLAMP (icon_size, 16, 48);
- icon_scale = gtk_widget_get_scale_factor (GTK_WIDGET (applet->applet));
+ icon_scale = gtk_widget_get_scale_factor (GTK_WIDGET (netspeed));
/* If the user wants a different icon than current, we load it */
- if (applet->show_icon && applet->change_icon && applet->devinfo) {
- dev = gtk_icon_theme_load_surface (applet->icon_theme,
- dev_type_icon [applet->devinfo->type],
+ if (netspeed->show_icon && netspeed->change_icon && netspeed->devinfo) {
+ dev = gtk_icon_theme_load_surface (netspeed->icon_theme,
+ dev_type_icon [netspeed->devinfo->type],
icon_size, icon_scale, NULL, 0, NULL);
} else {
- dev = gtk_icon_theme_load_surface (applet->icon_theme,
+ dev = gtk_icon_theme_load_surface (netspeed->icon_theme,
dev_type_icon [DEV_UNKNOWN],
icon_size, icon_scale, NULL, 0, NULL);
}
/* We need a fallback */
if (dev == NULL)
- dev = gtk_icon_theme_load_surface (applet->icon_theme,
+ dev = gtk_icon_theme_load_surface (netspeed->icon_theme,
dev_type_icon [DEV_UNKNOWN],
icon_size, icon_scale, NULL, 0, NULL);
- in_arrow = gtk_icon_theme_load_surface (applet->icon_theme,
+ in_arrow = gtk_icon_theme_load_surface (netspeed->icon_theme,
IN_ICON,
16, icon_scale, NULL, 0, NULL);
- out_arrow = gtk_icon_theme_load_surface (applet->icon_theme,
+ out_arrow = gtk_icon_theme_load_surface (netspeed->icon_theme,
OUT_ICON,
16, icon_scale, NULL, 0, NULL);
/* Set the windowmanager icon for the applet */
gtk_window_set_default_icon_name (LOGO_ICON);
- gtk_image_set_from_surface (GTK_IMAGE (applet->out_pix), out_arrow);
- gtk_image_set_from_surface (GTK_IMAGE (applet->in_pix), in_arrow);
+ gtk_image_set_from_surface (GTK_IMAGE (netspeed->out_pix), out_arrow);
+ gtk_image_set_from_surface (GTK_IMAGE (netspeed->in_pix), in_arrow);
cairo_surface_destroy (in_arrow);
cairo_surface_destroy (out_arrow);
- if (applet->devinfo && applet->devinfo->running) {
- gtk_widget_show (applet->in_box);
- gtk_widget_show (applet->out_box);
+ if (netspeed->devinfo && netspeed->devinfo->running) {
+ gtk_widget_show (netspeed->in_box);
+ gtk_widget_show (netspeed->out_box);
} else {
cairo_t *cr;
cairo_surface_t *copy;
gint down_coords;
- gtk_widget_hide (applet->in_box);
- gtk_widget_hide (applet->out_box);
+ gtk_widget_hide (netspeed->in_box);
+ gtk_widget_hide (netspeed->out_box);
/* We're not allowed to modify "dev" */
copy = cairo_surface_create_similar (dev,
@@ -232,7 +246,7 @@ change_icons (MateNetspeedApplet *applet)
cairo_set_source_surface (cr, dev, 0, 0);
cairo_paint (cr);
- down = gtk_icon_theme_load_surface (applet->icon_theme,
+ down = gtk_icon_theme_load_surface (netspeed->icon_theme,
ERROR_ICON,
icon_size, icon_scale, NULL, 0, NULL);
@@ -247,14 +261,14 @@ change_icons (MateNetspeedApplet *applet)
dev = copy;
}
- if (applet->show_icon) {
- gtk_widget_show (applet->dev_pix);
- gtk_image_set_from_surface (GTK_IMAGE (applet->dev_pix), dev);
+ if (netspeed->show_icon) {
+ gtk_widget_show (netspeed->dev_pix);
+ gtk_image_set_from_surface (GTK_IMAGE (netspeed->dev_pix), dev);
} else {
- gtk_widget_hide (applet->dev_pix);
+ gtk_widget_hide (netspeed->dev_pix);
}
- cairo_surface_destroy(dev);
+ cairo_surface_destroy (dev);
}
/* Here some rearangement of the icons and the labels occurs
@@ -262,130 +276,132 @@ change_icons (MateNetspeedApplet *applet)
* or just the sum
*/
static void
-applet_change_size_or_orient(MatePanelApplet *applet_widget, int arg1, MateNetspeedApplet *applet)
+applet_change_size_or_orient (MatePanelApplet *applet,
+ int arg1,
+ NetspeedApplet *netspeed)
{
- int size;
- MatePanelAppletOrient orient;
-
- g_assert(applet);
-
- size = mate_panel_applet_get_size(applet_widget);
- orient = mate_panel_applet_get_orient(applet_widget);
-
- g_object_ref(applet->pix_box);
- g_object_ref(applet->in_pix);
- g_object_ref(applet->in_label);
- g_object_ref(applet->out_pix);
- g_object_ref(applet->out_label);
- g_object_ref(applet->sum_label);
-
- if (applet->in_box) {
- gtk_container_remove(GTK_CONTAINER(applet->in_box), applet->in_label);
- gtk_container_remove(GTK_CONTAINER(applet->in_box), applet->in_pix);
- gtk_widget_destroy(applet->in_box);
- }
- if (applet->out_box) {
- gtk_container_remove(GTK_CONTAINER(applet->out_box), applet->out_label);
- gtk_container_remove(GTK_CONTAINER(applet->out_box), applet->out_pix);
- gtk_widget_destroy(applet->out_box);
- }
- if (applet->sum_box) {
- gtk_container_remove(GTK_CONTAINER(applet->sum_box), applet->sum_label);
- gtk_widget_destroy(applet->sum_box);
- }
- if (applet->box) {
- gtk_container_remove(GTK_CONTAINER(applet->box), applet->pix_box);
- gtk_widget_destroy(applet->box);
- }
-
- if (orient == MATE_PANEL_APPLET_ORIENT_LEFT || orient == MATE_PANEL_APPLET_ORIENT_RIGHT) {
- applet->box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- applet->speed_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- if (size > 64) {
- applet->sum_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
- applet->in_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
- applet->out_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
- } else {
- applet->sum_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- applet->in_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- applet->out_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- }
- applet->labels_dont_shrink = FALSE;
- } else {
- applet->in_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
- applet->out_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
- applet->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
- applet->sum_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
- if (size < 48) {
- applet->speed_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
- applet->labels_dont_shrink = TRUE;
- } else {
- applet->speed_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- applet->labels_dont_shrink = !applet->show_sum;
- }
- }
-
- gtk_box_pack_start(GTK_BOX(applet->in_box), applet->in_pix, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(applet->in_box), applet->in_label, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(applet->out_box), applet->out_pix, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(applet->out_box), applet->out_label, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(applet->sum_box), applet->sum_label, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(applet->box), applet->pix_box, FALSE, FALSE, 0);
-
- g_object_unref(applet->pix_box);
- g_object_unref(applet->in_pix);
- g_object_unref(applet->in_label);
- g_object_unref(applet->out_pix);
- g_object_unref(applet->out_label);
- g_object_unref(applet->sum_label);
-
- if (applet->show_sum) {
- gtk_box_pack_start(GTK_BOX(applet->speed_box), applet->sum_box, TRUE, TRUE, 0);
- } else {
- gtk_box_pack_start(GTK_BOX(applet->speed_box), applet->in_box, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(applet->speed_box), applet->out_box, TRUE, TRUE, 0);
- }
- gtk_box_pack_start(GTK_BOX(applet->box), applet->speed_box, TRUE, TRUE, 0);
-
- gtk_widget_show_all(applet->box);
- if (!applet->show_icon) {
- gtk_widget_hide(applet->dev_pix);
- }
- gtk_container_add(GTK_CONTAINER(applet->applet), applet->box);
-
- change_icons (applet);
+ int size;
+ MatePanelAppletOrient orient;
+
+ g_assert (netspeed);
+
+ size = mate_panel_applet_get_size (applet);
+ orient = mate_panel_applet_get_orient (applet);
+
+ g_object_ref (netspeed->pix_box);
+ g_object_ref (netspeed->in_pix);
+ g_object_ref (netspeed->in_label);
+ g_object_ref (netspeed->out_pix);
+ g_object_ref (netspeed->out_label);
+ g_object_ref (netspeed->sum_label);
+
+ if (netspeed->in_box) {
+ gtk_container_remove (GTK_CONTAINER (netspeed->in_box), netspeed->in_label);
+ gtk_container_remove (GTK_CONTAINER (netspeed->in_box), netspeed->in_pix);
+ gtk_widget_destroy (netspeed->in_box);
+ }
+ if (netspeed->out_box) {
+ gtk_container_remove (GTK_CONTAINER (netspeed->out_box), netspeed->out_label);
+ gtk_container_remove (GTK_CONTAINER (netspeed->out_box), netspeed->out_pix);
+ gtk_widget_destroy (netspeed->out_box);
+ }
+ if (netspeed->sum_box) {
+ gtk_container_remove (GTK_CONTAINER (netspeed->sum_box), netspeed->sum_label);
+ gtk_widget_destroy (netspeed->sum_box);
+ }
+ if (netspeed->box) {
+ gtk_container_remove (GTK_CONTAINER (netspeed->box), netspeed->pix_box);
+ gtk_widget_destroy (netspeed->box);
+ }
+
+ if (orient == MATE_PANEL_APPLET_ORIENT_LEFT || orient == MATE_PANEL_APPLET_ORIENT_RIGHT) {
+ netspeed->box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ netspeed->speed_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ if (size > 64) {
+ netspeed->sum_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
+ netspeed->in_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
+ netspeed->out_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
+ } else {
+ netspeed->sum_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ netspeed->in_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ netspeed->out_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ }
+ netspeed->labels_dont_shrink = FALSE;
+ } else {
+ netspeed->in_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
+ netspeed->out_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
+ netspeed->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
+ netspeed->sum_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
+ if (size < 48) {
+ netspeed->speed_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
+ netspeed->labels_dont_shrink = TRUE;
+ } else {
+ netspeed->speed_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ netspeed->labels_dont_shrink = !netspeed->show_sum;
+ }
+ }
+
+ gtk_box_pack_start (GTK_BOX (netspeed->in_box), netspeed->in_pix, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (netspeed->in_box), netspeed->in_label, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (netspeed->out_box), netspeed->out_pix, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (netspeed->out_box), netspeed->out_label, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (netspeed->sum_box), netspeed->sum_label, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (netspeed->box), netspeed->pix_box, FALSE, FALSE, 0);
+
+ g_object_unref (netspeed->pix_box);
+ g_object_unref (netspeed->in_pix);
+ g_object_unref (netspeed->in_label);
+ g_object_unref (netspeed->out_pix);
+ g_object_unref (netspeed->out_label);
+ g_object_unref (netspeed->sum_label);
+
+ if (netspeed->show_sum) {
+ gtk_box_pack_start (GTK_BOX (netspeed->speed_box), netspeed->sum_box, TRUE, TRUE, 0);
+ } else {
+ gtk_box_pack_start (GTK_BOX (netspeed->speed_box), netspeed->in_box, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (netspeed->speed_box), netspeed->out_box, TRUE, TRUE, 0);
+ }
+ gtk_box_pack_start (GTK_BOX (netspeed->box), netspeed->speed_box, TRUE, TRUE, 0);
+
+ gtk_widget_show_all (netspeed->box);
+ if (!netspeed->show_icon) {
+ gtk_widget_hide (netspeed->dev_pix);
+ }
+ gtk_container_add (GTK_CONTAINER (netspeed), netspeed->box);
+
+ change_icons (netspeed);
}
/* Change visibility of signal quality icon for wireless devices
*/
static void
-change_quality_icon(MateNetspeedApplet *applet)
+change_quality_icon (NetspeedApplet *netspeed)
{
- if (applet->devinfo->type == DEV_WIRELESS &&
- applet->devinfo->up && applet->show_quality_icon) {
- gtk_widget_show(applet->qual_pix);
- } else {
- gtk_widget_hide(applet->qual_pix);
- }
+ if (netspeed->devinfo->type == DEV_WIRELESS &&
+ netspeed->devinfo->up && netspeed->show_quality_icon) {
+ gtk_widget_show (netspeed->qual_pix);
+ } else {
+ gtk_widget_hide (netspeed->qual_pix);
+ }
}
static void
-update_quality_icon(MateNetspeedApplet *applet)
+update_quality_icon (NetspeedApplet *netspeed)
{
- if (!applet->show_quality_icon) {
- return;
- }
+ if (!netspeed->show_quality_icon) {
+ return;
+ }
- unsigned int q;
+ unsigned int q;
- q = (applet->devinfo->qual);
- q /= 25;
- q = MIN (q, 3); /* q out of range would crash when accessing qual_surfaces[q] */
- gtk_image_set_from_surface (GTK_IMAGE(applet->qual_pix), applet->qual_surfaces[q]);
+ q = (netspeed->devinfo->qual);
+ q /= 25;
+ q = MIN (q, 3); /* q out of range would crash when accessing qual_surfaces[q] */
+ gtk_image_set_from_surface (GTK_IMAGE (netspeed->qual_pix), netspeed->qual_surfaces[q]);
}
static void
-init_quality_surfaces (MateNetspeedApplet *applet)
+init_quality_surfaces (NetspeedApplet *netspeed)
{
int i;
cairo_surface_t *surface;
@@ -394,45 +410,43 @@ init_quality_surfaces (MateNetspeedApplet *applet)
/* FIXME: Add larger icon files. */
gint icon_size = 24;
- icon_scale = gtk_widget_get_scale_factor (GTK_WIDGET (applet->applet));
+ icon_scale = gtk_widget_get_scale_factor (GTK_WIDGET (netspeed));
for (i = 0; i < 4; i++) {
- if (applet->qual_surfaces[i])
- cairo_surface_destroy (applet->qual_surfaces[i]);
+ if (netspeed->qual_surfaces[i])
+ cairo_surface_destroy (netspeed->qual_surfaces[i]);
- surface = gtk_icon_theme_load_surface (applet->icon_theme,
+ surface = gtk_icon_theme_load_surface (netspeed->icon_theme,
wireless_quality_icon[i],
icon_size, icon_scale, NULL, 0, NULL);
if (surface) {
cairo_t *cr;
- applet->qual_surfaces[i] = cairo_surface_create_similar (surface,
+ netspeed->qual_surfaces[i] = cairo_surface_create_similar (surface,
cairo_surface_get_content (surface),
cairo_image_surface_get_width (surface) / icon_scale,
cairo_image_surface_get_height (surface) / icon_scale);
- cr = cairo_create (applet->qual_surfaces[i]);
+ cr = cairo_create (netspeed->qual_surfaces[i]);
cairo_set_source_surface (cr, surface, 0, 0);
cairo_paint (cr);
cairo_surface_destroy (surface);
}
else {
- applet->qual_surfaces[i] = NULL;
+ netspeed->qual_surfaces[i] = NULL;
}
}
}
static void
-icon_theme_changed_cb (GtkIconTheme *icon_theme,
- gpointer user_data)
+icon_theme_changed_cb (GtkIconTheme *icon_theme,
+ NetspeedApplet *netspeed)
{
- MateNetspeedApplet *applet = (MateNetspeedApplet*)user_data;
-
- init_quality_surfaces(user_data);
- if (applet->devinfo->type == DEV_WIRELESS && applet->devinfo->up)
- update_quality_icon(user_data);
- change_icons(user_data);
+ init_quality_surfaces (netspeed);
+ if (netspeed->devinfo->type == DEV_WIRELESS && netspeed->devinfo->up)
+ update_quality_icon (netspeed);
+ change_icons (netspeed);
}
#define IEC_KIBI_DBL 1024.0
@@ -467,7 +481,7 @@ format_transfer_rate (gchar *out,
unit = bits ? /* translators: Gibibit (short) */ N_("Gibit/s") : /* translators: Gibibyte (short) */ N_("GiB/s");
}
- g_snprintf (out, MAX_FORMAT_SIZE, format, bytes, gettext(unit));
+ g_snprintf (out, MAX_FORMAT_SIZE, format, bytes, gettext (unit));
}
/* Converts a number of bytes into a human
@@ -475,7 +489,8 @@ format_transfer_rate (gchar *out,
* The string has to be freed
*/
static char*
-bps_to_string(double bytes, gboolean bits)
+bps_to_string (double bytes,
+ gboolean bits)
{
char res[MAX_FORMAT_SIZE];
format_transfer_rate (res, bytes, bits);
@@ -486,134 +501,136 @@ bps_to_string(double bytes, gboolean bits)
* Some really black magic is going on in here ;-)
*/
static void
-redraw_graph(MateNetspeedApplet *applet, cairo_t *cr)
+redraw_graph (NetspeedApplet *netspeed,
+ cairo_t *cr)
{
- GtkWidget *da = GTK_WIDGET(applet->drawingarea);
- GtkStyleContext *stylecontext = gtk_widget_get_style_context (da);
- GdkWindow *real_window = gtk_widget_get_window (da);
- GdkPoint in_points[GRAPH_VALUES], out_points[GRAPH_VALUES];
- PangoLayout *layout;
- PangoRectangle logical_rect;
- char *text;
- int i, offset, w, h;
- double max_val;
- double dash[2] = { 1.0, 2.0 };
-
- 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 */
- for (max_val = 1; max_val < applet->max_graph; max_val *= 2) ;
-
- /* calculate the polygons (GdkPoint[]) for the graphs */
- offset = 0;
- for (i = (applet->index_graph + 1) % GRAPH_VALUES; applet->in_graph[i] < 0; i = (i + 1) % GRAPH_VALUES)
- offset++;
- for (i = offset + 1; i < GRAPH_VALUES; i++)
- {
- int index = (applet->index_graph + i) % GRAPH_VALUES;
- out_points[i].x = in_points[i].x = ((w - 6) * i) / GRAPH_VALUES + 4;
- in_points[i].y = h - 6 - (int)((h - 8) * applet->in_graph[index] / max_val);
- out_points[i].y = h - 6 - (int)((h - 8) * applet->out_graph[index] / max_val);
- }
- in_points[offset].x = out_points[offset].x = ((w - 6) * offset) / GRAPH_VALUES + 4;
- in_points[offset].y = in_points[(offset + 1) % GRAPH_VALUES].y;
- out_points[offset].y = out_points[(offset + 1) % GRAPH_VALUES].y;
-
- /* draw the background */
- cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
- cairo_rectangle (cr, 02, 2, w - 6, h - 6);
- cairo_fill (cr);
-
- cairo_set_line_width(cr, 1.0);
- cairo_set_dash (cr, dash, 2, 0);
-
- cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
- cairo_rectangle (cr, 2, 2, w - 6, h - 6);
- cairo_stroke (cr);
-
- for (i = 0; i < GRAPH_LINES; i++) {
- int y = 2 + ((h - 6) * i) / GRAPH_LINES;
- cairo_move_to (cr, 2, y);
- cairo_line_to (cr, w - 4, y);
- }
- cairo_stroke (cr);
-
- /* draw the polygons */
- cairo_set_dash (cr, dash, 0, 1);
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
- cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
-
- gdk_cairo_set_source_rgba (cr, &applet->in_color);
- for (i = offset; i < GRAPH_VALUES; i++) {
- cairo_line_to (cr, in_points[i].x, in_points[i].y);
- }
- cairo_stroke (cr);
-
- gdk_cairo_set_source_rgba (cr, &applet->out_color);
- for (i = offset; i < GRAPH_VALUES; i++) {
- cairo_line_to (cr, out_points[i].x, out_points[i].y);
- }
- cairo_stroke (cr);
-
- text = bps_to_string (max_val, applet->show_bits);
- add_markup_fgcolor(&text, "black");
- layout = gtk_widget_create_pango_layout (da, NULL);
- pango_layout_set_markup(layout, text, -1);
- g_free (text);
- gtk_render_layout(stylecontext, cr, 3, 2, layout);
- g_object_unref(G_OBJECT(layout));
-
- text = bps_to_string (0.0, applet->show_bits);
- add_markup_fgcolor(&text, "black");
- layout = gtk_widget_create_pango_layout (da, NULL);
- pango_layout_set_markup(layout, text, -1);
- pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
- g_free (text);
- gtk_render_layout(stylecontext, cr, 3, h - 4 - logical_rect.height, layout);
- g_object_unref(G_OBJECT(layout));
+ GtkWidget *da = GTK_WIDGET (netspeed->drawingarea);
+ GtkStyleContext *stylecontext = gtk_widget_get_style_context (da);
+ GdkWindow *real_window = gtk_widget_get_window (da);
+ GdkPoint in_points[GRAPH_VALUES], out_points[GRAPH_VALUES];
+ PangoLayout *layout;
+ PangoRectangle logical_rect;
+ char *text;
+ int i, offset, w, h;
+ double max_val;
+ double dash[2] = { 1.0, 2.0 };
+
+ w = gdk_window_get_width (real_window);
+ h = gdk_window_get_height (real_window);
+
+ /* 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 */
+ offset = 0;
+ for (i = (netspeed->index_graph + 1) % GRAPH_VALUES; netspeed->in_graph[i] < 0; i = (i + 1) % GRAPH_VALUES)
+ offset++;
+ for (i = offset + 1; i < GRAPH_VALUES; i++)
+ {
+ int index = (netspeed->index_graph + i) % GRAPH_VALUES;
+ out_points[i].x = in_points[i].x = ((w - 6) * i) / GRAPH_VALUES + 4;
+ in_points[i].y = h - 6 - (int)((h - 8) * netspeed->in_graph[index] / max_val);
+ out_points[i].y = h - 6 - (int)((h - 8) * netspeed->out_graph[index] / max_val);
+ }
+ in_points[offset].x = out_points[offset].x = ((w - 6) * offset) / GRAPH_VALUES + 4;
+ in_points[offset].y = in_points[(offset + 1) % GRAPH_VALUES].y;
+ out_points[offset].y = out_points[(offset + 1) % GRAPH_VALUES].y;
+
+ /* draw the background */
+ cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+ cairo_rectangle (cr, 02, 2, w - 6, h - 6);
+ cairo_fill (cr);
+
+ cairo_set_line_width (cr, 1.0);
+ cairo_set_dash (cr, dash, 2, 0);
+
+ cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
+ cairo_rectangle (cr, 2, 2, w - 6, h - 6);
+ cairo_stroke (cr);
+
+ for (i = 0; i < GRAPH_LINES; i++) {
+ int y = 2 + ((h - 6) * i) / GRAPH_LINES;
+ cairo_move_to (cr, 2, y);
+ cairo_line_to (cr, w - 4, y);
+ }
+ cairo_stroke (cr);
+
+ /* draw the polygons */
+ cairo_set_dash (cr, dash, 0, 1);
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
+ cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
+
+ gdk_cairo_set_source_rgba (cr, &netspeed->in_color);
+ for (i = offset; i < GRAPH_VALUES; i++) {
+ cairo_line_to (cr, in_points[i].x, in_points[i].y);
+ }
+ cairo_stroke (cr);
+
+ gdk_cairo_set_source_rgba (cr, &netspeed->out_color);
+ for (i = offset; i < GRAPH_VALUES; i++) {
+ cairo_line_to (cr, out_points[i].x, out_points[i].y);
+ }
+ cairo_stroke (cr);
+
+ text = bps_to_string (max_val, netspeed->show_bits);
+ add_markup_fgcolor (&text, "black");
+ layout = gtk_widget_create_pango_layout (da, NULL);
+ pango_layout_set_markup (layout, text, -1);
+ g_free (text);
+ gtk_render_layout (stylecontext, cr, 3, 2, layout);
+ g_object_unref (G_OBJECT (layout));
+
+ text = bps_to_string (0.0, netspeed->show_bits);
+ add_markup_fgcolor (&text, "black");
+ layout = gtk_widget_create_pango_layout (da, NULL);
+ pango_layout_set_markup (layout, text, -1);
+ pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
+ g_free (text);
+ gtk_render_layout (stylecontext, cr, 3, h - 4 - logical_rect.height, layout);
+ g_object_unref (G_OBJECT (layout));
}
static gboolean
-set_applet_devinfo(MateNetspeedApplet* applet, const char* iface)
+set_applet_devinfo (NetspeedApplet *netspeed,
+ const char *iface)
{
- DevInfo *info;
+ DevInfo *info;
- get_device_info (iface, &info);
+ get_device_info (iface, &info);
- if (info->running) {
- free_device_info(applet->devinfo);
- applet->devinfo = info;
- applet->device_has_changed = TRUE;
- return TRUE;
- }
+ if (info->running) {
+ free_device_info (netspeed->devinfo);
+ netspeed->devinfo = info;
+ netspeed->device_has_changed = TRUE;
+ return TRUE;
+ }
- free_device_info (info);
- return FALSE;
+ free_device_info (info);
+ return FALSE;
}
/* Find the first available device, that is running and != lo */
static void
-search_for_up_if(MateNetspeedApplet *applet)
+search_for_up_if (NetspeedApplet *netspeed)
{
- const gchar *default_route;
- GList *devices, *tmp;
-
- default_route = get_default_route();
-
- if (default_route != NULL) {
- if (set_applet_devinfo(applet, default_route))
- return;
- }
-
- devices = get_available_devices();
- for (tmp = devices; tmp; tmp = g_list_next(tmp)) {
- if (is_dummy_device(tmp->data))
- continue;
- if (set_applet_devinfo(applet, tmp->data))
- break;
- }
- free_devices_list(devices);
+ const gchar *default_route;
+ GList *devices, *tmp;
+
+ default_route = get_default_route ();
+
+ if (default_route != NULL) {
+ if (set_applet_devinfo (netspeed, default_route))
+ return;
+ }
+
+ devices = get_available_devices ();
+ for (tmp = devices; tmp; tmp = g_list_next (tmp)) {
+ if (is_dummy_device (tmp->data))
+ continue;
+ if (set_applet_devinfo (netspeed, tmp->data))
+ break;
+ }
+ g_list_free_full (devices, g_free);
}
static char *
@@ -670,107 +687,112 @@ 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 (MateNetspeedApplet *applet)
+fill_details_dialog (NetspeedApplet *netspeed)
{
char *text;
char ipv4_text [INET_ADDRSTRLEN];
- char ipv6_text [INET6_ADDRSTRLEN];
- if (applet->devinfo->ip) {
- format_ipv4 (applet->devinfo->ip, ipv4_text);
+ if (netspeed->devinfo->ip) {
+ format_ipv4 (netspeed->devinfo->ip, ipv4_text);
text = ipv4_text;
} else {
text = _("none");
}
- gtk_label_set_text (GTK_LABEL (applet->ip_text), text);
+ gtk_label_set_text (GTK_LABEL (netspeed->ip_text), text);
- if (applet->devinfo->netmask) {
- format_ipv4 (applet->devinfo->netmask, ipv4_text);
+ if (netspeed->devinfo->netmask) {
+ format_ipv4 (netspeed->devinfo->netmask, ipv4_text);
text = ipv4_text;
} else {
text = _("none");
}
- gtk_label_set_text (GTK_LABEL (applet->netmask_text), text);
+ gtk_label_set_text (GTK_LABEL (netspeed->netmask_text), text);
- if (applet->devinfo->type != DEV_LO) {
- text = mac_addr_n2a (applet->devinfo->hwaddr);
- gtk_label_set_text (GTK_LABEL (applet->hwaddr_text), text);
+ if (netspeed->devinfo->type != DEV_LO) {
+ text = mac_addr_n2a (netspeed->devinfo->hwaddr);
+ gtk_label_set_text (GTK_LABEL (netspeed->hwaddr_text), text);
g_free (text);
} else {
- gtk_label_set_text (GTK_LABEL (applet->hwaddr_text), _("none"));
+ gtk_label_set_text (GTK_LABEL (netspeed->hwaddr_text), _("none"));
}
- if (applet->devinfo->ptpip) {
- format_ipv4 (applet->devinfo->ptpip, ipv4_text);
+ if (netspeed->devinfo->ptpip) {
+ format_ipv4 (netspeed->devinfo->ptpip, ipv4_text);
text = ipv4_text;
} else {
text = _("none");
}
- gtk_label_set_text (GTK_LABEL (applet->ptpip_text), text);
+ gtk_label_set_text (GTK_LABEL (netspeed->ptpip_text), text);
/* check if we got an ipv6 address */
- format_ipv6 (applet->devinfo->ipv6, ipv6_text);
- if (strlen (ipv6_text) > 2) {
- gtk_label_set_text (GTK_LABEL (applet->ipv6_text), ipv6_text);
- gtk_widget_show (applet->ipv6_box);
+ GSList *ipv6_address_list = get_ip_address_list (netspeed->devinfo->name, FALSE);
+ if (ipv6_address_list != NULL) {
+ GSList *iterator;
+ GString *string = NULL;
+
+ for (iterator = ipv6_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);
+ }
+ if (string != NULL) {
+ gtk_label_set_text (GTK_LABEL (netspeed->ipv6_text), string->str);
+ gtk_widget_show (netspeed->ipv6_box);
+ }
+ g_string_free (string, TRUE);
+ g_slist_free_full (ipv6_address_list, g_free);
} else {
- gtk_widget_hide (applet->ipv6_box);
+ gtk_widget_hide (netspeed->ipv6_box);
}
- if (applet->devinfo->type == DEV_WIRELESS) {
+ if (netspeed->devinfo->type == DEV_WIRELESS) {
float quality;
/* _maybe_ we can add the encrypted icon between the essid and the signal bar. */
- quality = applet->devinfo->qual / 100.0f;
+ quality = netspeed->devinfo->qual / 100.0f;
if (quality > 1.0)
quality = 1.0;
- text = g_strdup_printf ("%d %%", applet->devinfo->qual);
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (applet->signalbar), quality);
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (applet->signalbar), text);
- g_free(text);
+ text = g_strdup_printf ("%d %%", netspeed->devinfo->qual);
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (netspeed->signalbar), quality);
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (netspeed->signalbar), text);
+ g_free (text);
- gtk_label_set_text (GTK_LABEL (applet->essid_text),
- applet->devinfo->essid);
+ gtk_label_set_text (GTK_LABEL (netspeed->essid_text),
+ netspeed->devinfo->essid);
#ifdef HAVE_NL
- if (applet->devinfo->running) {
- text = mac_addr_n2a (applet->devinfo->station_mac_addr);
- gtk_label_set_text (GTK_LABEL (applet->station_text), text);
+ if (netspeed->devinfo->running) {
+ text = mac_addr_n2a (netspeed->devinfo->station_mac_addr);
+ gtk_label_set_text (GTK_LABEL (netspeed->station_text), text);
g_free (text);
} else {
- gtk_label_set_text (GTK_LABEL (applet->station_text), _("unknown"));
+ gtk_label_set_text (GTK_LABEL (netspeed->station_text), _("unknown"));
}
- gtk_label_set_text (GTK_LABEL (applet->channel_text),
- applet->devinfo->channel ? applet->devinfo->channel : _("unknown"));
+ gtk_label_set_text (GTK_LABEL (netspeed->channel_text),
+ netspeed->devinfo->channel ? netspeed->devinfo->channel : _("unknown"));
- text = format_time (applet->devinfo->connected_time);
- gtk_label_set_text (GTK_LABEL (applet->connected_time_text),
- applet->devinfo->connected_time > 0 ? text : _("na"));
+ text = format_time (netspeed->devinfo->connected_time);
+ gtk_label_set_text (GTK_LABEL (netspeed->connected_time_text),
+ netspeed->devinfo->connected_time > 0 ? text : _("na"));
g_free (text);
- gtk_widget_show (applet->netlink_box);
+ gtk_widget_show (netspeed->netlink_box);
#else
- gtk_widget_hide (applet->netlink_box);
+ gtk_widget_hide (netspeed->netlink_box);
#endif /* HAVE_NL */
- gtk_widget_show (applet->wireless_box);
+ gtk_widget_show (netspeed->wireless_box);
} else {
- gtk_widget_hide (applet->wireless_box);
+ gtk_widget_hide (netspeed->wireless_box);
}
}
/* Here happens the really interesting stuff */
static void
-update_applet (MateNetspeedApplet *applet)
+update_applet (NetspeedApplet *netspeed)
{
guint64 indiff, outdiff;
double inrate, outrate;
@@ -778,363 +800,276 @@ update_applet (MateNetspeedApplet *applet)
int i;
DevInfo *oldinfo;
- if (!applet) return;
+ if (!netspeed) return;
/* First we try to figure out if the device has changed */
- oldinfo = applet->devinfo;
- get_device_info (oldinfo->name, &applet->devinfo);
- if (compare_device_info (applet->devinfo, oldinfo))
- applet->device_has_changed = TRUE;
+ oldinfo = netspeed->devinfo;
+ get_device_info (oldinfo->name, &netspeed->devinfo);
+ if (compare_device_info (netspeed->devinfo, oldinfo))
+ netspeed->device_has_changed = TRUE;
free_device_info (oldinfo);
/* If the device has changed, reintialize stuff */
- if (applet->device_has_changed) {
- change_icons (applet);
- change_quality_icon (applet);
+ if (netspeed->device_has_changed) {
+ change_icons (netspeed);
+ change_quality_icon (netspeed);
for (i = 0; i < OLD_VALUES; i++) {
- applet->in_old[i] = applet->devinfo->rx;
- applet->out_old[i] = applet->devinfo->tx;
+ netspeed->in_old[i] = netspeed->devinfo->rx;
+ netspeed->out_old[i] = netspeed->devinfo->tx;
}
for (i = 0; i < GRAPH_VALUES; i++) {
- applet->in_graph[i] = -1;
- applet->out_graph[i] = -1;
+ netspeed->in_graph[i] = -1;
+ netspeed->out_graph[i] = -1;
}
- applet->max_graph = 0;
- applet->index_graph = 0;
+ netspeed->max_graph = 0;
+ netspeed->index_graph = 0;
- if (applet->details) {
- fill_details_dialog (applet);
+ if (netspeed->details) {
+ fill_details_dialog (netspeed);
}
- applet->device_has_changed = FALSE;
+ netspeed->device_has_changed = FALSE;
}
/* create the strings for the labels and tooltips */
- if (applet->devinfo->running) {
- if (applet->devinfo->rx < applet->in_old[applet->index_old])
+ if (netspeed->devinfo->running) {
+ if (netspeed->devinfo->rx < netspeed->in_old[netspeed->index_old])
indiff = 0;
else
- indiff = applet->devinfo->rx - applet->in_old[applet->index_old];
+ indiff = netspeed->devinfo->rx - netspeed->in_old[netspeed->index_old];
- if (applet->devinfo->tx < applet->out_old[applet->index_old])
+ if (netspeed->devinfo->tx < netspeed->out_old[netspeed->index_old])
outdiff = 0;
else
- outdiff = applet->devinfo->tx - applet->out_old[applet->index_old];
+ outdiff = netspeed->devinfo->tx - netspeed->out_old[netspeed->index_old];
inrate = (double)indiff / OLD_VALUES_DBL;
outrate = (double)outdiff / OLD_VALUES_DBL;
- applet->in_graph[applet->index_graph] = inrate;
- applet->out_graph[applet->index_graph] = outrate;
- applet->max_graph = MAX(inrate, applet->max_graph);
- applet->max_graph = MAX(outrate, applet->max_graph);
+ netspeed->in_graph[netspeed->index_graph] = inrate;
+ netspeed->out_graph[netspeed->index_graph] = outrate;
+ netspeed->max_graph = MAX (inrate, netspeed->max_graph);
+ netspeed->max_graph = MAX (outrate, netspeed->max_graph);
- format_transfer_rate (applet->devinfo->rx_rate, inrate, applet->show_bits);
- format_transfer_rate (applet->devinfo->tx_rate, outrate, applet->show_bits);
- format_transfer_rate (applet->devinfo->sum_rate, inrate + outrate, applet->show_bits);
+ format_transfer_rate (netspeed->devinfo->rx_rate, inrate, netspeed->show_bits);
+ format_transfer_rate (netspeed->devinfo->tx_rate, outrate, netspeed->show_bits);
+ format_transfer_rate (netspeed->devinfo->sum_rate, inrate + outrate, netspeed->show_bits);
} else {
- applet->devinfo->rx_rate[0] = '\0';
- applet->devinfo->tx_rate[0] = '\0';
- applet->devinfo->sum_rate[0] = '\0';
- applet->in_graph[applet->index_graph] = 0;
- applet->out_graph[applet->index_graph] = 0;
+ netspeed->devinfo->rx_rate[0] = '\0';
+ netspeed->devinfo->tx_rate[0] = '\0';
+ netspeed->devinfo->sum_rate[0] = '\0';
+ netspeed->in_graph[netspeed->index_graph] = 0;
+ netspeed->out_graph[netspeed->index_graph] = 0;
}
- if (applet->devinfo->type == DEV_WIRELESS) {
- if (applet->devinfo->up)
- update_quality_icon(applet);
+ if (netspeed->devinfo->type == DEV_WIRELESS) {
+ if (netspeed->devinfo->up)
+ update_quality_icon (netspeed);
- if (applet->signalbar) {
+ if (netspeed->signalbar) {
float quality;
char *text;
- quality = applet->devinfo->qual / 100.0f;
+ quality = netspeed->devinfo->qual / 100.0f;
if (quality > 1.0)
quality = 1.0;
- text = g_strdup_printf ("%d %%", applet->devinfo->qual);
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (applet->signalbar), quality);
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (applet->signalbar), text);
- g_free(text);
+ text = g_strdup_printf ("%d %%", netspeed->devinfo->qual);
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (netspeed->signalbar), quality);
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (netspeed->signalbar), text);
+ g_free (text);
}
#ifdef HAVE_NL
/* Refresh the value of Connected Time */
- if (applet->connected_time_text) {
+ if (netspeed->connected_time_text) {
char *text;
- text = format_time (applet->devinfo->connected_time);
- gtk_label_set_text (GTK_LABEL (applet->connected_time_text),
- applet->devinfo->connected_time > 0 ? text : _("na"));
+ text = format_time (netspeed->devinfo->connected_time);
+ gtk_label_set_text (GTK_LABEL (netspeed->connected_time_text),
+ netspeed->devinfo->connected_time > 0 ? text : _("na"));
g_free (text);
}
#endif
}
- update_tooltip(applet);
+ update_tooltip (netspeed);
- /* Refresh the text of the labels and tooltip */
- if (applet->show_sum) {
- gtk_label_set_text (GTK_LABEL (applet->sum_label),
- applet->devinfo->sum_rate);
+ /* Refresh the text of the labels */
+ if (netspeed->show_sum) {
+ gtk_label_set_text (GTK_LABEL (netspeed->sum_label),
+ netspeed->devinfo->sum_rate);
} else {
- gtk_label_set_text (GTK_LABEL (applet->in_label),
- applet->devinfo->rx_rate);
- gtk_label_set_text (GTK_LABEL (applet->out_label),
- applet->devinfo->tx_rate);
+ gtk_label_set_text (GTK_LABEL (netspeed->in_label),
+ netspeed->devinfo->rx_rate);
+ gtk_label_set_text (GTK_LABEL (netspeed->out_label),
+ netspeed->devinfo->tx_rate);
}
/* Refresh the values of the Infodialog */
- if (applet->inbytes_text) {
- if (applet->show_bits)
- inbytes = g_format_size_full (applet->devinfo->rx*8,
+ if (netspeed->inbytes_text) {
+ if (netspeed->show_bits)
+ inbytes = g_format_size_full (netspeed->devinfo->rx*8,
G_FORMAT_SIZE_IEC_UNITS | G_FORMAT_SIZE_BITS);
else
- inbytes = g_format_size_full (applet->devinfo->rx,
+ inbytes = g_format_size_full (netspeed->devinfo->rx,
G_FORMAT_SIZE_IEC_UNITS);
- gtk_label_set_text (GTK_LABEL (applet->inbytes_text), inbytes);
+ gtk_label_set_text (GTK_LABEL (netspeed->inbytes_text), inbytes);
g_free (inbytes);
}
- if (applet->outbytes_text) {
- if (applet->show_bits)
- outbytes = g_format_size_full (applet->devinfo->tx*8,
+ if (netspeed->outbytes_text) {
+ if (netspeed->show_bits)
+ outbytes = g_format_size_full (netspeed->devinfo->tx*8,
G_FORMAT_SIZE_IEC_UNITS | G_FORMAT_SIZE_BITS);
else
- outbytes = g_format_size_full (applet->devinfo->tx,
+ outbytes = g_format_size_full (netspeed->devinfo->tx,
G_FORMAT_SIZE_IEC_UNITS);
- gtk_label_set_text (GTK_LABEL (applet->outbytes_text), outbytes);
- g_free (outbytes);
+ gtk_label_set_text (GTK_LABEL (netspeed->outbytes_text), outbytes);
+ g_free (outbytes);
}
/* Redraw the graph of the Infodialog */
- if (applet->drawingarea)
- gtk_widget_queue_draw (GTK_WIDGET (applet->drawingarea));
+ if (netspeed->drawingarea)
+ gtk_widget_queue_draw (GTK_WIDGET (netspeed->drawingarea));
/* Save old values... */
- applet->in_old [applet->index_old] = applet->devinfo->rx;
- applet->out_old [applet->index_old] = applet->devinfo->tx;
- applet->index_old = (applet->index_old + 1) % OLD_VALUES;
+ netspeed->in_old [netspeed->index_old] = netspeed->devinfo->rx;
+ netspeed->out_old [netspeed->index_old] = netspeed->devinfo->tx;
+ netspeed->index_old = (netspeed->index_old + 1) % OLD_VALUES;
/* Move the graphindex. Check if we can scale down again */
- applet->index_graph = (applet->index_graph + 1) % GRAPH_VALUES;
- if (applet->index_graph % 20 == 0) {
+ netspeed->index_graph = (netspeed->index_graph + 1) % GRAPH_VALUES;
+ if (netspeed->index_graph % 20 == 0) {
double max = 0;
for (i = 0; i < GRAPH_VALUES; i++) {
- max = MAX (max, applet->in_graph[i]);
- max = MAX (max, applet->out_graph[i]);
+ max = MAX (max, netspeed->in_graph[i]);
+ max = MAX (max, netspeed->out_graph[i]);
}
- applet->max_graph = max;
+ netspeed->max_graph = max;
}
/* Always follow the default route */
- if (applet->auto_change_device) {
- gboolean change_device_now = !applet->devinfo->running;
+ if (netspeed->auto_change_device) {
+ gboolean change_device_now = !netspeed->devinfo->running;
if (!change_device_now) {
const gchar *default_route;
- default_route = get_default_route();
+ default_route = get_default_route ();
change_device_now = (default_route != NULL &&
- strcmp (default_route, applet->devinfo->name));
+ strcmp (default_route, netspeed->devinfo->name));
}
if (change_device_now) {
- search_for_up_if(applet);
+ search_for_up_if (netspeed);
}
}
}
static gboolean
-timeout_function(MateNetspeedApplet *applet)
+timeout_function (NetspeedApplet *netspeed)
{
- if (!applet)
- return FALSE;
- if (!applet->timeout_id)
- return FALSE;
+ if (!netspeed)
+ return FALSE;
+ if (!netspeed->timeout_id)
+ return FALSE;
- update_applet(applet);
- return TRUE;
+ update_applet (netspeed);
+ return TRUE;
}
/* Display a section of netspeed help
*/
-static void
-display_help (GtkWidget *dialog, const gchar *section)
+void
+netspeed_applet_display_help (GtkWidget *dialog,
+ const gchar *section)
{
- GError *error = NULL;
- gboolean ret;
- char *uri;
-
- if (section)
- uri = g_strdup_printf ("help:mate-netspeed-applet/%s", section);
- else
- uri = g_strdup ("help:mate-netspeed-applet");
-
- ret = gtk_show_uri_on_window (NULL,
- uri,
- gtk_get_current_event_time (),
- &error);
- g_free (uri);
-
- if (ret == FALSE) {
- GtkWidget *error_dialog = gtk_message_dialog_new (NULL,
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- _("There was an error displaying help:\n%s"),
- error->message);
- g_signal_connect (error_dialog, "response",
- G_CALLBACK (gtk_widget_destroy), NULL);
-
- gtk_window_set_resizable (GTK_WINDOW (error_dialog), FALSE);
- gtk_window_set_screen (GTK_WINDOW (error_dialog), gtk_widget_get_screen (dialog));
- gtk_widget_show (error_dialog);
- g_error_free (error);
- }
+ GError *error = NULL;
+ gboolean ret;
+ char *uri;
+
+ if (section)
+ uri = g_strdup_printf ("help:mate-netspeed-applet/%s", section);
+ else
+ uri = g_strdup ("help:mate-netspeed-applet");
+
+ ret = gtk_show_uri_on_window (NULL,
+ uri,
+ gtk_get_current_event_time (),
+ &error);
+ g_free (uri);
+
+ if (ret == FALSE) {
+ GtkWidget *error_dialog = gtk_message_dialog_new (NULL,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _("There was an error displaying help:\n%s"),
+ error->message);
+ g_signal_connect (error_dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+
+ gtk_window_set_resizable (GTK_WINDOW (error_dialog), FALSE);
+ gtk_window_set_screen (GTK_WINDOW (error_dialog), gtk_widget_get_screen (dialog));
+ gtk_widget_show (error_dialog);
+ g_error_free (error);
+ }
}
/* Opens gnome help application
*/
static void
-help_cb (GtkAction *action,
- MateNetspeedApplet *ap)
+help_cb (GtkAction *action,
+ NetspeedApplet *netspeed)
{
- display_help (GTK_WIDGET (ap->applet), NULL);
+ netspeed_applet_display_help (GTK_WIDGET (netspeed), NULL);
}
/* Just the about window... If it's already open, just fokus it
*/
static void
-about_cb(GtkAction *action, gpointer data)
+about_cb (GtkAction *action,
+ gpointer data)
{
- const char *authors[] =
- {
- "Jörgen Scheibengruber <[email protected]>",
- "Dennis Cranston <[email protected]>",
- "Pedro Villavicencio Garrido <[email protected]>",
- "Benoît Dejean <[email protected]>",
- "Stefano Karapetsas <[email protected]>",
- "Perberos <[email protected]>",
- NULL
- };
-
- gtk_show_about_dialog (NULL,
- "title", _("About MATE Netspeed"),
- "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"),
- "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/",
- "logo-icon-name", LOGO_ICON,
- NULL);
-
+ const char *authors[] =
+ {
+ "Jörgen Scheibengruber <[email protected]>",
+ "Dennis Cranston <[email protected]>",
+ "Pedro Villavicencio Garrido <[email protected]>",
+ "Benoît Dejean <[email protected]>",
+ "Stefano Karapetsas <[email protected]>",
+ "Perberos <[email protected]>",
+ NULL
+ };
+
+ gtk_show_about_dialog (NULL,
+ "title", _("About MATE Netspeed"),
+ "version", VERSION,
+ "copyright", _("Copyright \xc2\xa9 2002-2003 Jörgen Scheibengruber\n"
+ "Copyright \xc2\xa9 2011-2014 Stefano Karapetsas\n"
+ "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", PACKAGE_URL,
+ "logo-icon-name", LOGO_ICON,
+ NULL);
}
-/* this basically just retrieves the new devicestring
- * and then calls applet_device_change() and change_icons()
- */
-static void
-device_change_cb(GtkComboBox *combo, MateNetspeedApplet *applet)
-{
- GList *devices;
- int i, active;
-
- g_assert(combo);
- devices = g_object_get_data(G_OBJECT(combo), "devices");
- active = gtk_combo_box_get_active(combo);
- g_assert(active > -1);
-
- if (0 == active) {
- if (applet->auto_change_device)
- return;
- applet->auto_change_device = TRUE;
- } else {
- applet->auto_change_device = FALSE;
- for (i = 1; i < active; i++) {
- devices = g_list_next(devices);
- }
- if (g_str_equal(devices->data, applet->devinfo->name))
- return;
- free_device_info (applet->devinfo);
- get_device_info (devices->data, &applet->devinfo);
- }
-
- applet->device_has_changed = TRUE;
- update_applet(applet);
-}
-
-
-/* Handle preference dialog response event
- */
static void
-pref_response_cb (GtkDialog *dialog, gint id, gpointer data)
+netspeed_applet_destroy_preferences (GtkWidget *widget,
+ gpointer user_data)
{
- MateNetspeedApplet *applet = data;
-
- if(id == GTK_RESPONSE_HELP){
- display_help (GTK_WIDGET (dialog), "netspeed_applet-settings");
- return;
- }
- g_settings_delay (applet->gsettings);
- g_settings_set_string (applet->gsettings, "device", applet->devinfo->name);
- g_settings_set_boolean (applet->gsettings, "auto-change-device", applet->auto_change_device);
- g_settings_apply (applet->gsettings);
+ NetspeedApplet *netspeed;
+ (void) widget;
- gtk_widget_destroy(GTK_WIDGET(applet->settings));
- applet->settings = NULL;
-}
-
-/* Called when the showsum checkbutton is toggled...
- */
-static void
-showsum_change_cb(GtkToggleButton *togglebutton, MateNetspeedApplet *applet)
-{
- applet->show_sum = gtk_toggle_button_get_active(togglebutton);
- applet_change_size_or_orient(applet->applet, -1, (gpointer)applet);
- change_icons(applet);
-}
-
-/* Called when the showbits checkbutton is toggled...
- */
-static void
-showbits_change_cb(GtkToggleButton *togglebutton, MateNetspeedApplet *applet)
-{
- applet->show_bits = gtk_toggle_button_get_active(togglebutton);
-}
-
-/* Called when the showicon checkbutton is toggled...
- */
-static void
-showicon_change_cb(GtkToggleButton *togglebutton, MateNetspeedApplet *applet)
-{
- applet->show_icon = gtk_toggle_button_get_active(togglebutton);
- change_icons(applet);
-}
-
-/* Called when the showqualityicon checkbutton is toggled...
- */
-static void
-showqualityicon_change_cb(GtkToggleButton *togglebutton, MateNetspeedApplet *applet)
-{
- applet->show_quality_icon = gtk_toggle_button_get_active(togglebutton);
- change_quality_icon(applet);
-}
-
-/* Called when the changeicon checkbutton is toggled...
- */
-static void
-changeicon_change_cb(GtkToggleButton *togglebutton, MateNetspeedApplet *applet)
-{
- applet->change_icon = gtk_toggle_button_get_active(togglebutton);
- change_icons(applet);
+ netspeed = NETSPEED_APPLET (user_data);
+ netspeed->preferences = NULL;
}
/* Creates the settings dialog
@@ -1142,189 +1077,142 @@ changeicon_change_cb(GtkToggleButton *togglebutton, MateNetspeedApplet *applet)
* them in the gsettings database
*/
static void
-settings_cb (GtkAction *action,
- gpointer data)
+settings_cb (GtkAction *action,
+ NetspeedApplet *netspeed)
{
- GtkBuilder *builder;
- MateNetspeedApplet *applet = (MateNetspeedApplet*)data;
- GList *ptr, *devices;
- int i, active = -1;
-
- g_assert(applet);
-
- if (applet->settings)
- {
- gtk_window_present(GTK_WINDOW(applet->settings));
- return;
- }
-
- builder = gtk_builder_new_from_resource (NETSPEED_RESOURCE_PATH "netspeed-preferences.ui");
-
- applet->settings = GET_DIALOG ("preferences_dialog");
- applet->network_device_combo = GET_WIDGET ("network_device_combo");
-
- gtk_window_set_screen(GTK_WINDOW(applet->settings),
- gtk_widget_get_screen(GTK_WIDGET(applet->settings)));
-
- gtk_dialog_set_default_response(GTK_DIALOG(applet->settings), GTK_RESPONSE_CLOSE);
-
- g_settings_bind (applet->gsettings, "show-sum", gtk_builder_get_object (builder, "show_sum_checkbutton"), "active", G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (applet->gsettings, "show-bits", gtk_builder_get_object (builder, "show_bits_checkbutton"), "active", G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (applet->gsettings, "show-icon", gtk_builder_get_object (builder, "show_icon_checkbutton"), "active", G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (applet->gsettings, "show-quality-icon", gtk_builder_get_object (builder, "show_quality_icon_checkbutton"), "active", G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (applet->gsettings, "change-icon", gtk_builder_get_object (builder, "change_icon_checkbutton"), "active", G_SETTINGS_BIND_DEFAULT);
-
- /* Default means device with default route set */
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(applet->network_device_combo), _("Default"));
- ptr = devices = get_available_devices();
- for (i = 0; ptr; ptr = g_list_next(ptr)) {
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(applet->network_device_combo), ptr->data);
- if (g_str_equal(ptr->data, applet->devinfo->name)) active = (i + 1);
- ++i;
- }
- if (active < 0 || applet->auto_change_device) {
- active = 0;
- }
- gtk_combo_box_set_active(GTK_COMBO_BOX(applet->network_device_combo), active);
- g_object_set_data_full(G_OBJECT(applet->network_device_combo), "devices", devices, (GDestroyNotify)free_devices_list);
-
- /* signals */
- gtk_builder_add_callback_symbols (builder,
- "on_network_device_combo_changed", G_CALLBACK (device_change_cb),
- "on_show_sum_checkbutton_toggled", G_CALLBACK (showsum_change_cb),
- "on_show_bits_checkbutton_toggled", G_CALLBACK(showbits_change_cb),
- "on_change_icon_checkbutton_toggled", G_CALLBACK (changeicon_change_cb),
- "on_show_icon_checkbutton_toggled", G_CALLBACK (showicon_change_cb),
- "on_show_quality_icon_checkbutton_toggled", G_CALLBACK (showqualityicon_change_cb),
- "on_preferences_dialog_response", G_CALLBACK(pref_response_cb),
- NULL);
- gtk_builder_connect_signals (builder, applet);
-
- g_object_unref (builder);
-
- gtk_widget_show_all(GTK_WIDGET(applet->settings));
+ g_assert (netspeed);
+
+ if (netspeed->preferences)
+ {
+ gtk_window_present (GTK_WINDOW (netspeed->preferences));
+ return;
+ }
+
+ netspeed->preferences = netspeed_preferences_new (netspeed);
+ g_signal_connect (netspeed->preferences, "destroy",
+ G_CALLBACK (netspeed_applet_destroy_preferences), netspeed);
+ gtk_widget_show_all (netspeed->preferences);
}
static gboolean
-da_draw(GtkWidget *widget, cairo_t *cr, gpointer data)
+da_draw (GtkWidget *widget,
+ cairo_t *cr,
+ NetspeedApplet *netspeed)
{
- MateNetspeedApplet *applet = (MateNetspeedApplet*)data;
+ redraw_graph (netspeed, cr);
- redraw_graph(applet, cr);
-
- return FALSE;
+ return FALSE;
}
static void
-incolor_changed_cb (GtkColorChooser *button, gpointer data)
+incolor_changed_cb (GtkColorChooser *button,
+ NetspeedApplet *netspeed)
{
- MateNetspeedApplet *applet = (MateNetspeedApplet*)data;
- GdkRGBA color;
- gchar *string;
+ GdkRGBA color;
+ gchar *string;
- gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (button), &color);
- applet->in_color = color;
+ gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (button), &color);
+ netspeed->in_color = color;
- string = gdk_rgba_to_string (&color);
- g_settings_set_string (applet->gsettings, "in-color", string);
- g_free (string);
+ string = gdk_rgba_to_string (&color);
+ g_settings_set_string (netspeed->settings, "in-color", string);
+ g_free (string);
}
static void
-outcolor_changed_cb (GtkColorChooser *button, gpointer data)
+outcolor_changed_cb (GtkColorChooser *button,
+ NetspeedApplet *netspeed)
{
- MateNetspeedApplet *applet = (MateNetspeedApplet*)data;
- GdkRGBA color;
- gchar *string;
+ GdkRGBA color;
+ gchar *string;
- gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (button), &color);
- applet->out_color = color;
+ gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (button), &color);
+ netspeed->out_color = color;
- string = gdk_rgba_to_string (&color);
- g_settings_set_string (applet->gsettings, "out-color", string);
- g_free (string);
+ string = gdk_rgba_to_string (&color);
+ g_settings_set_string (netspeed->settings, "out-color", string);
+ g_free (string);
}
/* Handle info dialog response event
*/
static void
-info_response_cb (GtkDialog *dialog,
- gint id,
- MateNetspeedApplet *applet)
+info_response_cb (GtkDialog *dialog,
+ gint id,
+ NetspeedApplet *netspeed)
{
if (id == GTK_RESPONSE_HELP) {
- display_help (GTK_WIDGET (dialog), "netspeed_applet-details");
+ netspeed_applet_display_help (GTK_WIDGET (dialog), "netspeed_applet-details");
return;
}
- gtk_widget_destroy(GTK_WIDGET(applet->details));
-
- applet->details = NULL;
- applet->drawingarea = NULL;
- applet->ip_text = NULL;
- applet->netmask_text = NULL;
- applet->ptpip_text = NULL;
- applet->ipv6_text = NULL;
- applet->hwaddr_text = NULL;
- applet->inbytes_text = NULL;
- applet->outbytes_text = NULL;
- applet->essid_text = NULL;
- applet->signalbar = NULL;
+ gtk_widget_destroy (netspeed->details);
+
+ netspeed->details = NULL;
+ netspeed->drawingarea = NULL;
+ netspeed->ip_text = NULL;
+ netspeed->netmask_text = NULL;
+ netspeed->ptpip_text = NULL;
+ netspeed->ipv6_text = NULL;
+ netspeed->hwaddr_text = NULL;
+ netspeed->inbytes_text = NULL;
+ netspeed->outbytes_text = NULL;
+ netspeed->essid_text = NULL;
+ netspeed->signalbar = NULL;
#ifdef HAVE_NL
- applet->station_text = NULL;
- applet->channel_text = NULL;
- applet->connected_time_text = NULL;
+ netspeed->station_text = NULL;
+ netspeed->channel_text = NULL;
+ netspeed->connected_time_text = NULL;
#endif /* HAVE_NL */
- applet->ipv6_box = NULL;
- applet->netlink_box = NULL;
- applet->wireless_box = NULL;
+ netspeed->ipv6_box = NULL;
+ netspeed->netlink_box = NULL;
+ netspeed->wireless_box = NULL;
}
/* Creates the details dialog
*/
static void
-showinfo_cb (GtkAction *action,
- gpointer data)
+showinfo_cb (GtkAction *action,
+ NetspeedApplet *netspeed)
{
GtkBuilder *builder;
- MateNetspeedApplet *applet = (MateNetspeedApplet*)data;
- g_assert(applet);
+ g_assert (netspeed);
- if (applet->details) {
- gtk_window_present(GTK_WINDOW(applet->details));
+ if (netspeed->details) {
+ gtk_window_present (GTK_WINDOW (netspeed->details));
return;
}
builder = gtk_builder_new_from_resource (NETSPEED_RESOURCE_PATH "netspeed-details.ui");
- applet->details = GET_DIALOG ("dialog");
- applet->drawingarea = GET_DRAWING_AREA ("drawingarea");
-
- applet->ip_text = GET_WIDGET ("ip_text");
- applet->netmask_text = GET_WIDGET ("netmask_text");
- applet->ptpip_text = GET_WIDGET ("ptpip_text");
- applet->ipv6_text = GET_WIDGET ("ipv6_text");
- applet->hwaddr_text = GET_WIDGET ("hwaddr_text");
- applet->inbytes_text = GET_WIDGET ("inbytes_text");
- applet->outbytes_text = GET_WIDGET ("outbytes_text");
- applet->essid_text = GET_WIDGET ("essid_text");
- applet->signalbar = GET_WIDGET ("signalbar");
+ netspeed->details = GET_WIDGET ("dialog");
+ netspeed->drawingarea = GET_DRAWING_AREA ("drawingarea");
+
+ netspeed->ip_text = GET_WIDGET ("ip_text");
+ netspeed->netmask_text = GET_WIDGET ("netmask_text");
+ netspeed->ptpip_text = GET_WIDGET ("ptpip_text");
+ netspeed->ipv6_text = GET_WIDGET ("ipv6_text");
+ netspeed->hwaddr_text = GET_WIDGET ("hwaddr_text");
+ netspeed->inbytes_text = GET_WIDGET ("inbytes_text");
+ netspeed->outbytes_text = GET_WIDGET ("outbytes_text");
+ netspeed->essid_text = GET_WIDGET ("essid_text");
+ netspeed->signalbar = GET_WIDGET ("signalbar");
#ifdef HAVE_NL
- applet->station_text = GET_WIDGET ("station_text");
- applet->channel_text = GET_WIDGET ("channel_text");
+ netspeed->station_text = GET_WIDGET ("station_text");
+ netspeed->channel_text = GET_WIDGET ("channel_text");
- applet->connected_time_text = GET_WIDGET ("connected_time_text");
+ netspeed->connected_time_text = GET_WIDGET ("connected_time_text");
#endif /* HAVE_NL */
- applet->ipv6_box = GET_WIDGET ("ipv6_box");
- applet->netlink_box = GET_WIDGET ("netlink_box");
- applet->wireless_box = GET_WIDGET ("wireless_box");
+ netspeed->ipv6_box = GET_WIDGET ("ipv6_box");
+ netspeed->netlink_box = GET_WIDGET ("netlink_box");
+ netspeed->wireless_box = GET_WIDGET ("wireless_box");
- gtk_color_chooser_set_rgba (GET_COLOR_CHOOSER ("incolor_sel"), &applet->in_color);
- gtk_color_chooser_set_rgba (GET_COLOR_CHOOSER ("outcolor_sel"), &applet->out_color);
+ gtk_color_chooser_set_rgba (GET_COLOR_CHOOSER ("incolor_sel"), &netspeed->in_color);
+ gtk_color_chooser_set_rgba (GET_COLOR_CHOOSER ("outcolor_sel"), &netspeed->out_color);
- fill_details_dialog (applet);
+ fill_details_dialog (netspeed);
gtk_builder_add_callback_symbols (builder,
"on_drawingarea_draw", G_CALLBACK (da_draw),
@@ -1332,22 +1220,22 @@ showinfo_cb (GtkAction *action,
"on_outcolor_sel_color_set", G_CALLBACK (outcolor_changed_cb),
"on_dialog_response", G_CALLBACK (info_response_cb),
NULL);
- gtk_builder_connect_signals (builder, applet);
+ gtk_builder_connect_signals (builder, netspeed);
g_object_unref (builder);
- gtk_window_present (GTK_WINDOW (applet->details));
+ gtk_window_present (GTK_WINDOW (netspeed->details));
}
-static const GtkActionEntry mate_netspeed_applet_menu_actions [] = {
- { "MateNetspeedAppletDetails", "dialog-information", N_("Device _Details"),
- NULL, NULL, G_CALLBACK (showinfo_cb) },
- { "MateNetspeedAppletProperties", "document-properties", N_("Preferences..."),
- NULL, NULL, G_CALLBACK (settings_cb) },
- { "MateNetspeedAppletHelp", "help-browser", N_("Help"),
- NULL, NULL, G_CALLBACK (help_cb) },
- { "MateNetspeedAppletAbout", "help-about", N_("About..."),
- NULL, NULL, G_CALLBACK (about_cb) }
+static const GtkActionEntry netspeed_applet_menu_actions [] = {
+ { "NetspeedAppletDetails", "dialog-information", N_("Device _Details"),
+ NULL, NULL, G_CALLBACK (showinfo_cb) },
+ { "NetspeedAppletProperties", "document-properties", N_("Preferences..."),
+ NULL, NULL, G_CALLBACK (settings_cb) },
+ { "NetspeedAppletHelp", "help-browser", N_("Help"),
+ NULL, NULL, G_CALLBACK (help_cb) },
+ { "NetspeedAppletAbout", "help-about", N_("About..."),
+ NULL, NULL, G_CALLBACK (about_cb) }
};
/* Block the size_request signal emit by the label if the
@@ -1357,49 +1245,51 @@ static const GtkActionEntry mate_netspeed_applet_menu_actions [] = {
* "jumping around" in the mate_panel which looks uggly
*/
static void
-label_size_allocate_cb(GtkWidget *widget, GtkAllocation *allocation, MateNetspeedApplet *applet)
+label_size_allocate_cb (GtkWidget *widget,
+ GtkAllocation *allocation,
+ NetspeedApplet *netspeed)
{
- if (applet->labels_dont_shrink) {
- if (allocation->width <= applet->width)
- allocation->width = applet->width;
- else
- applet->width = allocation->width;
- }
+ if (netspeed->labels_dont_shrink) {
+ if (allocation->width <= netspeed->width)
+ allocation->width = netspeed->width;
+ else
+ netspeed->width = allocation->width;
+ }
}
static gboolean
-applet_button_press (GtkWidget *widget,
- GdkEventButton *event,
- MateNetspeedApplet *applet)
+netspeed_applet_button_press_event (GtkWidget *widget,
+ GdkEventButton *event)
{
if (event->button == 1) {
+ NetspeedApplet *netspeed = NETSPEED_APPLET (widget);
GError *error = NULL;
- if (applet->connect_dialog) {
- gtk_window_present (GTK_WINDOW (applet->connect_dialog));
+ if (netspeed->connect_dialog) {
+ gtk_window_present (GTK_WINDOW (netspeed->connect_dialog));
return FALSE;
}
- if (applet->up_cmd && applet->down_cmd) {
+ if (netspeed->up_cmd && netspeed->down_cmd) {
char *question;
int response;
- if (applet->devinfo->up)
+ if (netspeed->devinfo->up)
question = g_strdup_printf (_("Do you want to disconnect %s now?"),
- applet->devinfo->name);
+ netspeed->devinfo->name);
else
question = g_strdup_printf (_("Do you want to connect %s now?"),
- applet->devinfo->name);
+ netspeed->devinfo->name);
- applet->connect_dialog =
+ netspeed->connect_dialog =
gtk_message_dialog_new (NULL,
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO,
"%s", question);
- response = gtk_dialog_run (GTK_DIALOG (applet->connect_dialog));
- gtk_widget_destroy (applet->connect_dialog);
- applet->connect_dialog = NULL;
+ response = gtk_dialog_run (GTK_DIALOG (netspeed->connect_dialog));
+ gtk_widget_destroy (netspeed->connect_dialog);
+ netspeed->connect_dialog = NULL;
g_free (question);
if (response == GTK_RESPONSE_YES) {
@@ -1407,8 +1297,8 @@ applet_button_press (GtkWidget *widget,
char *command;
command = g_strdup_printf ("%s %s",
- applet->devinfo->up ? applet->down_cmd : applet->up_cmd,
- applet->devinfo->name);
+ netspeed->devinfo->up ? netspeed->down_cmd : netspeed->up_cmd,
+ netspeed->devinfo->name);
if (!g_spawn_command_line_async (command, &error)) {
dialog = gtk_message_dialog_new_with_markup (NULL,
@@ -1421,322 +1311,460 @@ applet_button_press (GtkWidget *widget,
g_error_free (error);
}
- g_free(command);
+ g_free (command);
}
}
}
- return FALSE;
+ return GTK_WIDGET_CLASS (netspeed_applet_parent_class)->button_press_event (widget, event);
}
/* Frees the applet and all the data it contains
* Removes the timeout_cb
*/
static void
-applet_destroy (MatePanelApplet *applet_widget,
- MateNetspeedApplet *applet)
+netspeed_applet_finalize (GObject *object)
{
- g_assert(applet);
+ NetspeedApplet *netspeed = NETSPEED_APPLET (object);
- if (applet->icon_theme != NULL) {
- g_signal_handlers_disconnect_by_func (applet->icon_theme,
+ if (netspeed->icon_theme != NULL) {
+ g_signal_handlers_disconnect_by_func (netspeed->icon_theme,
icon_theme_changed_cb,
- applet);
- applet->icon_theme = NULL;
+ netspeed);
+ netspeed->icon_theme = NULL;
}
- g_source_remove (applet->timeout_id);
- applet->timeout_id = 0;
+ if (netspeed->timeout_id > 0) {
+ g_source_remove (netspeed->timeout_id);
+ netspeed->timeout_id = 0;
+ }
+
+ g_clear_object (&netspeed->settings);
+
+ g_clear_pointer (&netspeed->details, gtk_widget_destroy);
+ g_clear_pointer (&netspeed->preferences, gtk_widget_destroy);
- if (applet->up_cmd)
- g_free (applet->up_cmd);
- if (applet->down_cmd)
- g_free (applet->down_cmd);
- if (applet->gsettings)
- g_object_unref (applet->gsettings);
+ g_free (netspeed->up_cmd);
+ g_free (netspeed->down_cmd);
/* Should never be NULL */
- free_device_info (applet->devinfo);
- g_free (applet);
- return;
+ free_device_info (netspeed->devinfo);
}
static void
-update_tooltip (MateNetspeedApplet* applet)
+update_tooltip (NetspeedApplet *netspeed)
{
GString* tooltip;
- if (!applet->show_tooltip)
+ if (!netspeed->show_tooltip)
return;
- tooltip = g_string_new("");
+ tooltip = g_string_new ("");
- if (!applet->devinfo->running)
- g_string_printf(tooltip, _("%s is down"), applet->devinfo->name);
+ 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 *ip;
- if (applet->devinfo->ip) {
- format_ipv4 (applet->devinfo->ip, ipv4_text);
- ip = ipv4_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_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 (applet->show_sum) {
- g_string_printf(tooltip,
- _("%s: %s\nin: %s out: %s"),
- applet->devinfo->name,
- ip,
- applet->devinfo->rx_rate,
- applet->devinfo->tx_rate);
+ if (netspeed->show_sum) {
+ g_string_append_printf (tooltip,
+ _("\nin: %s out: %s"),
+ netspeed->devinfo->rx_rate,
+ netspeed->devinfo->tx_rate);
} else {
- g_string_printf(tooltip,
- _("%s: %s\nsum: %s"),
- applet->devinfo->name,
- ip,
- applet->devinfo->sum_rate);
+ g_string_append_printf (tooltip,
+ _("\nsum: %s"),
+ netspeed->devinfo->sum_rate);
}
+
#ifdef HAVE_NL
- if (applet->devinfo->type == DEV_WIRELESS)
+ if (netspeed->devinfo->type == DEV_WIRELESS)
g_string_append_printf (tooltip,
_("\nESSID: %s\nRSSI: %d dBm\nRX Bitrate: %s\nTX Bitrate: %s"),
- applet->devinfo->essid ? applet->devinfo->essid : _("unknown"),
- applet->devinfo->rssi,
- applet->devinfo->rx_bitrate,
- applet->devinfo->tx_bitrate);
+ netspeed->devinfo->essid ? netspeed->devinfo->essid : _("unknown"),
+ netspeed->devinfo->rssi,
+ netspeed->devinfo->rx_bitrate,
+ netspeed->devinfo->tx_bitrate);
#endif /* HAVE_NL */
#ifdef HAVE_IW
- if (applet->devinfo->type == DEV_WIRELESS)
+ if (netspeed->devinfo->type == DEV_WIRELESS)
g_string_append_printf (tooltip,
_("\nESSID: %s\nStrength: %d %%"),
- applet->devinfo->essid ? applet->devinfo->essid : _("unknown"),
- applet->devinfo->qual);
+ netspeed->devinfo->essid ? netspeed->devinfo->essid : _("unknown"),
+ netspeed->devinfo->qual);
#endif /* HAVE_IW */
}
- gtk_widget_set_tooltip_text (GTK_WIDGET (applet->applet), tooltip->str);
- gtk_widget_trigger_tooltip_query (GTK_WIDGET (applet->applet));
+ gtk_widget_set_tooltip_text (GTK_WIDGET (netspeed), tooltip->str);
+ gtk_widget_trigger_tooltip_query (GTK_WIDGET (netspeed));
g_string_free (tooltip, TRUE);
}
+static gboolean
+netspeed_applet_enter_notify_event (GtkWidget *widget,
+ GdkEventCrossing *event)
+{
+ NetspeedApplet *netspeed = NETSPEED_APPLET (widget);
+
+ netspeed->show_tooltip = TRUE;
+ update_tooltip (netspeed);
+ return TRUE;
+}
static gboolean
-mate_netspeed_enter_cb(GtkWidget *widget, GdkEventCrossing *event, gpointer data)
+netspeed_applet_leave_notify_event (GtkWidget *widget,
+ GdkEventCrossing *event)
+{
+ NetspeedApplet *netspeed = NETSPEED_APPLET (widget);
+
+ netspeed->show_tooltip = FALSE;
+ return TRUE;
+}
+
+static void
+netspeed_applet_class_init (NetspeedAppletClass *klass)
{
- MateNetspeedApplet *applet = data;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- applet->show_tooltip = TRUE;
- update_tooltip(applet);
+ object_class->finalize = netspeed_applet_finalize;
- return TRUE;
+ widget_class->button_press_event = netspeed_applet_button_press_event;
+ widget_class->leave_notify_event = netspeed_applet_leave_notify_event;
+ widget_class->enter_notify_event = netspeed_applet_enter_notify_event;
}
-static gboolean
-mate_netspeed_leave_cb(GtkWidget *widget, GdkEventCrossing *event, gpointer data)
+static void
+netspeed_applet_init (NetspeedApplet *netspeed)
+{
+}
+
+static void
+changeicon_settings_changed (GSettings *settings,
+ const gchar *key,
+ NetspeedApplet *netspeed)
+{
+ netspeed->change_icon = g_settings_get_boolean (settings, key);
+ change_icons (netspeed);
+}
+
+static void
+showalladdresses_settings_changed (GSettings *settings,
+ const gchar *key,
+ NetspeedApplet *netspeed)
+{
+ netspeed->show_all_addresses = g_settings_get_boolean (settings, key);
+}
+
+static void
+showsum_settings_changed (GSettings *settings,
+ const gchar *key,
+ NetspeedApplet *netspeed)
{
- MateNetspeedApplet *applet = data;
+ netspeed->show_sum = g_settings_get_boolean (settings, key);
+ applet_change_size_or_orient (MATE_PANEL_APPLET (netspeed), -1, netspeed);
+ change_icons (netspeed);
+}
- applet->show_tooltip = FALSE;
- return TRUE;
+static void
+showbits_settings_changed (GSettings *settings,
+ const gchar *key,
+ NetspeedApplet *netspeed)
+{
+ netspeed->show_bits = g_settings_get_boolean (settings, key);
+}
+
+static void
+showicon_settings_changed (GSettings *settings,
+ const gchar *key,
+ NetspeedApplet *netspeed)
+{
+ netspeed->show_icon = g_settings_get_boolean (settings, key);
+ change_icons (netspeed);
+}
+
+static void
+showqualityicon_settings_changed (GSettings *settings,
+ const gchar *key,
+ NetspeedApplet *netspeed)
+{
+ netspeed->show_quality_icon = g_settings_get_boolean (settings, key);
+ change_quality_icon (netspeed);
+}
+
+static void
+auto_change_device_settings_changed (GSettings *settings,
+ const gchar *key,
+ NetspeedApplet *netspeed)
+{
+ netspeed->auto_change_device = g_settings_get_boolean (settings, key);
+ netspeed->device_has_changed = TRUE;
+ update_applet (netspeed);
+}
+
+static void
+device_settings_changed (GSettings *settings,
+ const gchar *key,
+ NetspeedApplet *netspeed)
+{
+ char *device;
+
+ device = g_settings_get_string (settings, key);
+ if (device && *device != '\0') {
+ free_device_info (netspeed->devinfo);
+ get_device_info (device, &netspeed->devinfo);
+ netspeed->device_has_changed = TRUE;
+ }
+ g_free (device);
}
/* The "main" function of the applet
*/
static gboolean
-mate_netspeed_applet_factory(MatePanelApplet *applet_widget, const gchar *iid, gpointer data)
+netspeed_applet_factory (MatePanelApplet *applet,
+ const gchar *iid,
+ gpointer data)
{
- MateNetspeedApplet *applet;
- int i;
- GtkWidget *spacer, *spacer_box;
- GtkActionGroup *action_group;
-
- /* Have our background automatically painted. */
- mate_panel_applet_set_background_widget(MATE_PANEL_APPLET(applet_widget),
- GTK_WIDGET(applet_widget));
-
- if (strcmp (iid, "NetspeedApplet"))
- return FALSE;
-
- glibtop_init();
- g_set_application_name (_("MATE Netspeed"));
-
- /* Alloc the applet. The "NULL-setting" is really redudant
- * but aren't we paranoid?
- */
- applet = g_new0 (MateNetspeedApplet, 1);
- applet->applet = applet_widget;
- applet->icon_theme = gtk_icon_theme_get_default ();
-
- /* Set the default colors of the graph
- */
- applet->in_color.red = 0xdf00;
- applet->in_color.green = 0x2800;
- applet->in_color.blue = 0x4700;
- applet->out_color.red = 0x3700;
- applet->out_color.green = 0x2800;
- applet->out_color.blue = 0xdf00;
-
- for (i = 0; i < GRAPH_VALUES; i++)
- {
- applet->in_graph[i] = -1;
- applet->out_graph[i] = -1;
- }
-
- applet->gsettings = mate_panel_applet_settings_new (applet_widget, "org.mate.panel.applet.netspeed");
-
- /* Get stored settings from gsettings
- */
- applet->show_sum = g_settings_get_boolean (applet->gsettings, "show-sum");
- applet->show_bits = g_settings_get_boolean (applet->gsettings, "show-bits");
- applet->show_icon = g_settings_get_boolean (applet->gsettings, "show-icon");
- applet->show_quality_icon = g_settings_get_boolean (applet->gsettings, "show-quality-icon");
- applet->change_icon = g_settings_get_boolean (applet->gsettings, "change-icon");
- applet->auto_change_device = g_settings_get_boolean (applet->gsettings, "auto-change-device");
-
- char *tmp = NULL;
- tmp = g_settings_get_string (applet->gsettings, "device");
- if (tmp && strcmp(tmp, ""))
- {
- get_device_info(tmp, &applet->devinfo);
- g_free(tmp);
- }
-
- tmp = g_settings_get_string (applet->gsettings, "up-command");
- if (tmp && strcmp(tmp, ""))
- {
- applet->up_cmd = g_strdup(tmp);
- g_free(tmp);
- }
-
- tmp = g_settings_get_string (applet->gsettings, "down-command");
- if (tmp && strcmp(tmp, ""))
- {
- applet->down_cmd = g_strdup(tmp);
- g_free(tmp);
- }
-
- tmp = g_settings_get_string (applet->gsettings, "in-color");
- if (tmp)
- {
- gdk_rgba_parse (&applet->in_color, tmp);
- g_free(tmp);
- }
-
- tmp = g_settings_get_string (applet->gsettings, "out-color");
- if (tmp)
- {
- gdk_rgba_parse (&applet->out_color, tmp);
- g_free(tmp);
- }
-
- if (!applet->devinfo) {
- GList *ptr, *devices = get_available_devices();
- ptr = devices;
- while (ptr) {
- if (!g_str_equal(ptr->data, "lo")) {
- get_device_info(ptr->data, &applet->devinfo);
- break;
- }
- ptr = g_list_next(ptr);
- }
- free_devices_list(devices);
- }
- if (!applet->devinfo)
- get_device_info("lo", &applet->devinfo);
- applet->device_has_changed = TRUE;
-
- applet->in_label = gtk_label_new("");
- applet->out_label = gtk_label_new("");
- applet->sum_label = gtk_label_new("");
-
- applet->in_pix = gtk_image_new();
- applet->out_pix = gtk_image_new();
- applet->dev_pix = gtk_image_new();
- applet->qual_pix = gtk_image_new();
-
- applet->pix_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- spacer = gtk_label_new("");
- gtk_box_pack_start(GTK_BOX(applet->pix_box), spacer, TRUE, TRUE, 0);
- spacer = gtk_label_new("");
- gtk_box_pack_end(GTK_BOX(applet->pix_box), spacer, TRUE, TRUE, 0);
-
- spacer_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
- gtk_box_pack_start(GTK_BOX(applet->pix_box), spacer_box, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(spacer_box), applet->qual_pix, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(spacer_box), applet->dev_pix, FALSE, FALSE, 0);
-
- init_quality_surfaces(applet);
-
- applet_change_size_or_orient(applet_widget, -1, (gpointer)applet);
- gtk_widget_show_all(GTK_WIDGET(applet_widget));
- update_applet(applet);
-
- mate_panel_applet_set_flags(applet_widget, MATE_PANEL_APPLET_EXPAND_MINOR);
-
- applet->timeout_id = g_timeout_add (REFRESH_TIME,
- (GSourceFunc)timeout_function,
- (gpointer)applet);
-
- g_signal_connect(G_OBJECT(applet_widget), "change_size",
- G_CALLBACK(applet_change_size_or_orient),
- (gpointer)applet);
-
- g_signal_connect(G_OBJECT(applet->icon_theme), "changed",
- G_CALLBACK(icon_theme_changed_cb),
- (gpointer)applet);
-
- g_signal_connect(G_OBJECT(applet_widget), "change_orient",
- G_CALLBACK(applet_change_size_or_orient),
- (gpointer)applet);
-
- g_signal_connect(G_OBJECT(applet->in_label), "size_allocate",
- G_CALLBACK(label_size_allocate_cb),
- (gpointer)applet);
-
- g_signal_connect(G_OBJECT(applet->out_label), "size_allocate",
- G_CALLBACK(label_size_allocate_cb),
- (gpointer)applet);
-
- g_signal_connect(G_OBJECT(applet->sum_label), "size_allocate",
- G_CALLBACK(label_size_allocate_cb),
- (gpointer)applet);
-
- g_signal_connect(G_OBJECT(applet_widget), "destroy",
- G_CALLBACK(applet_destroy),
- (gpointer)applet);
-
- g_signal_connect(G_OBJECT(applet_widget), "button-press-event",
- G_CALLBACK(applet_button_press),
- (gpointer)applet);
-
- g_signal_connect(G_OBJECT(applet_widget), "leave_notify_event",
- G_CALLBACK(mate_netspeed_leave_cb),
- (gpointer)applet);
-
- g_signal_connect(G_OBJECT(applet_widget), "enter_notify_event",
- G_CALLBACK(mate_netspeed_enter_cb),
- (gpointer)applet);
-
- action_group = gtk_action_group_new ("Netspeed Applet Actions");
- gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
- gtk_action_group_add_actions (action_group,
- mate_netspeed_applet_menu_actions,
- G_N_ELEMENTS (mate_netspeed_applet_menu_actions),
- applet);
-
- mate_panel_applet_setup_menu_from_resource (MATE_PANEL_APPLET (applet->applet),
- NETSPEED_RESOURCE_PATH "netspeed-menu.xml",
- action_group);
-
- g_object_unref (action_group);
-
- return TRUE;
+ NetspeedApplet *netspeed;
+ 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 ();
+
+ for (i = 0; i < GRAPH_VALUES; i++)
+ {
+ netspeed->in_graph[i] = -1;
+ netspeed->out_graph[i] = -1;
+ }
+
+ netspeed->settings = mate_panel_applet_settings_new (applet, "org.mate.panel.applet.netspeed");
+
+ /* Get stored settings from gsettings
+ */
+ netspeed->show_all_addresses = g_settings_get_boolean (netspeed->settings, "show-all-addresses");
+ netspeed->show_sum = g_settings_get_boolean (netspeed->settings, "show-sum");
+ netspeed->show_bits = g_settings_get_boolean (netspeed->settings, "show-bits");
+ netspeed->show_icon = g_settings_get_boolean (netspeed->settings, "show-icon");
+ netspeed->show_quality_icon = g_settings_get_boolean (netspeed->settings, "show-quality-icon");
+ netspeed->change_icon = g_settings_get_boolean (netspeed->settings, "change-icon");
+ netspeed->auto_change_device = g_settings_get_boolean (netspeed->settings, "auto-change-device");
+
+ tmp = g_settings_get_string (netspeed->settings, "device");
+ if (tmp && *tmp != '\0')
+ get_device_info (tmp, &netspeed->devinfo);
+ else
+ netspeed->devinfo = NULL;
+ g_free (tmp);
+
+ tmp = g_settings_get_string (netspeed->settings, "up-command");
+ if (tmp && *tmp != '\0')
+ netspeed->up_cmd = g_strdup (tmp);
+ else
+ netspeed->up_cmd = NULL;
+ g_free (tmp);
+
+ tmp = g_settings_get_string (netspeed->settings, "down-command");
+ if (tmp && *tmp != '\0')
+ netspeed->down_cmd = g_strdup (tmp);
+ else
+ netspeed->down_cmd = NULL;
+ g_free (tmp);
+
+ tmp = g_settings_get_string (netspeed->settings, "in-color");
+ if (tmp && *tmp != '\0')
+ gdk_rgba_parse (&netspeed->in_color, tmp);
+ else
+ gdk_rgba_parse (&netspeed->in_color, "#df0028004700");
+ g_free (tmp);
+
+ tmp = g_settings_get_string (netspeed->settings, "out-color");
+ if (tmp && *tmp != '\0')
+ gdk_rgba_parse (&netspeed->out_color, tmp);
+ else
+ gdk_rgba_parse (&netspeed->out_color, "#37002800df00");
+ g_free (tmp);
+
+ if (!netspeed->devinfo) {
+ GList *ptr, *devices = get_available_devices ();
+ ptr = devices;
+ while (ptr) {
+ if (!g_str_equal (ptr->data, "lo")) {
+ get_device_info (ptr->data, &netspeed->devinfo);
+ break;
+ }
+ ptr = g_list_next (ptr);
+ }
+ g_list_free_full (devices, g_free);
+ }
+ if (!netspeed->devinfo)
+ get_device_info ("lo", &netspeed->devinfo);
+
+ netspeed->device_has_changed = TRUE;
+
+ netspeed->in_label = gtk_label_new ("");
+ netspeed->out_label = gtk_label_new ("");
+ netspeed->sum_label = gtk_label_new ("");
+
+ netspeed->in_pix = gtk_image_new ();
+ netspeed->out_pix = gtk_image_new ();
+ netspeed->dev_pix = gtk_image_new ();
+ netspeed->qual_pix = gtk_image_new ();
+
+ netspeed->pix_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+ spacer = gtk_label_new ("");
+ gtk_box_pack_start (GTK_BOX (netspeed->pix_box), spacer, TRUE, TRUE, 0);
+ spacer = gtk_label_new ("");
+ gtk_box_pack_end (GTK_BOX (netspeed->pix_box), spacer, TRUE, TRUE, 0);
+
+ spacer_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
+ gtk_box_pack_start (GTK_BOX (netspeed->pix_box), spacer_box, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (spacer_box), netspeed->qual_pix, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (spacer_box), netspeed->dev_pix, FALSE, FALSE, 0);
+
+ init_quality_surfaces (netspeed);
+
+ applet_change_size_or_orient (applet, -1, netspeed);
+ gtk_widget_show_all (GTK_WIDGET (applet));
+ update_applet (netspeed);
+
+ mate_panel_applet_set_flags (applet, MATE_PANEL_APPLET_EXPAND_MINOR);
+
+ 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_object (netspeed->icon_theme, "changed",
+ G_CALLBACK (icon_theme_changed_cb),
+ netspeed, 0);
+
+ g_signal_connect_object (applet, "change-orient",
+ G_CALLBACK (applet_change_size_or_orient),
+ netspeed, 0);
+
+ g_signal_connect_object (netspeed->in_label, "size-allocate",
+ G_CALLBACK (label_size_allocate_cb),
+ netspeed, 0);
+
+ g_signal_connect_object (netspeed->out_label, "size-allocate",
+ G_CALLBACK (label_size_allocate_cb),
+ netspeed, 0);
+
+ g_signal_connect_object (netspeed->sum_label, "size-allocate",
+ G_CALLBACK (label_size_allocate_cb),
+ netspeed, 0);
+
+ g_signal_connect_object (netspeed->settings, "changed::auto-change-device",
+ G_CALLBACK (auto_change_device_settings_changed),
+ netspeed, 0);
+
+ g_signal_connect_object (netspeed->settings, "changed::device",
+ G_CALLBACK (device_settings_changed),
+ netspeed, 0);
+
+ g_signal_connect_object (netspeed->settings, "changed::show-all-addresses",
+ G_CALLBACK (showalladdresses_settings_changed),
+ netspeed, 0);
+
+ g_signal_connect_object (netspeed->settings, "changed::show-sum",
+ G_CALLBACK (showsum_settings_changed),
+ netspeed, 0);
+
+ g_signal_connect_object (netspeed->settings, "changed::show-bits",
+ G_CALLBACK (showbits_settings_changed),
+ netspeed, 0);
+
+ g_signal_connect_object (netspeed->settings, "changed::change-icon",
+ G_CALLBACK (changeicon_settings_changed),
+ netspeed, 0);
+
+ g_signal_connect_object (netspeed->settings, "changed::show-icon",
+ G_CALLBACK (showicon_settings_changed),
+ netspeed, 0);
+
+ 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);
+ gtk_action_group_add_actions (action_group,
+ netspeed_applet_menu_actions,
+ G_N_ELEMENTS (netspeed_applet_menu_actions),
+ netspeed);
+
+ mate_panel_applet_setup_menu_from_resource (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",
- PANEL_TYPE_APPLET,
- "NetspeedApplet",
- mate_netspeed_applet_factory,
- NULL)
+PANEL_APPLET_FACTORY ("NetspeedAppletFactory",
+ NETSPEED_TYPE_APPLET,
+ "NetspeedApplet",
+ netspeed_applet_factory,
+ NULL)