[packages/mate-applets: 255/311] - port modemlights plugin to liboobs
glen
glen at pld-linux.org
Thu Dec 27 20:44:33 CET 2012
commit 1be1f5b8056470463004c1ce5e3a371a83aad43e
Author: Marcin Banasiak <marcin.banasiak at gmail.com>
Date: Sun Jun 10 11:51:15 2007 +0000
- port modemlights plugin to liboobs
Changed files:
gnome-applets-use-liboobs.patch -> 1.1
gnome-applets-use-liboobs.patch | 1316 +++++++++++++++++++++++++++++++++++++++
1 file changed, 1316 insertions(+)
---
diff --git a/gnome-applets-use-liboobs.patch b/gnome-applets-use-liboobs.patch
new file mode 100644
index 0000000..5469237
--- /dev/null
+++ b/gnome-applets-use-liboobs.patch
@@ -0,0 +1,1316 @@
+diff -urN gnome-applets-2.18.0/configure.in gnome-applets-2.18.0.new/configure.in
+--- gnome-applets-2.18.0/configure.in 2007-03-12 13:57:09.000000000 +0100
++++ gnome-applets-2.18.0.new/configure.in 2007-06-10 12:30:15.000000000 +0200
+@@ -35,6 +35,7 @@
+ GNOME_PYTHON_REQUIRED=2.10
+ GNOME_ICON_THEME_REQUIRED=2.15.91
+ LIBXML_REQUIRED=2.5.0
++LIBOOBS_REQUIRED=0.5.0
+ dnl ***************************************************************************
+
+ AM_MAINTAINER_MODE
+@@ -509,25 +510,20 @@
+ dnl *** modemlights applet check ***
+ dnl ***************************************************************************
+
+-SU_TOOL=
+-P_MODEMLIGHTS=
+-HAVE_LIBUTIL=
+-
+-AC_PATH_PROG(SU_TOOL, su)
+-AC_CHECK_LIB(util, forkpty, HAVE_LIBUTIL=true, HAVE_LIBUTIL=false)
+-AM_PATH_SYSTEM_TOOLS_BACKENDS($SYSTEM_TOOLS_BACKENDS_REQUIRED, P_MODEMLIGHTS=modemlights)
+-
+-if test "x$HAVE_LIBUTIL" = "xtrue" -a "x$P_MODEMLIGHTS" = "xmodemlights" -a "x$HAVE_GNOME_SETTINGS_DAEMON" = "xyes"; then
+- MODEMLIGHTS_LIBS=" -lutil"
+- AC_SUBST(MODEMLIGHTS_LIBS)
+- AC_DEFINE_UNQUOTED(STB_SCRIPTS_DIR, "$STB_SCRIPTS_DIR", [System tools backends])
+- AC_DEFINE_UNQUOTED(SU_PATH, "${SU_TOOL}", [su executable path])
++MODEMLIGHTS_LIBS=
++MODEMLIGHTS_CFLAGS=
++
++PKG_CHECK_MODULES(MODEMLIGHTS, liboobs-1 >= $LIBOOBS_REQUIRED,
++ HAVE_LIBOOBS=yes, HAVE_LIBOOBS=no)
++if test "x$HAVE_LIBOOBS" = "xyes" -a "x$HAVE_GNOME_SETTINGS_DAEMON" = "xyes"; then
+ BUILD_MODEM_LIGHTS=yes
+ else
+ AC_MSG_WARN([*** modemlights applet will not be built ***])
+ BUILD_MODEM_LIGHTS=no
+ fi
+
++AC_SUBST(MODEMLIGHTS_LIBS)
++AC_SUBST(MODEMLIGHTS_CFLAGS)
+ AM_CONDITIONAL(APPLET_MODEMLIGHTS, test "x$BUILD_MODEM_LIGHTS" = "xyes")
+
+ dnl ***************************************************************************
+diff -urN gnome-applets-2.18.0/modemlights/Makefile.am gnome-applets-2.18.0.new/modemlights/Makefile.am
+--- gnome-applets-2.18.0/modemlights/Makefile.am 2006-12-31 03:16:08.000000000 +0100
++++ gnome-applets-2.18.0.new/modemlights/Makefile.am 2007-06-10 12:31:26.000000000 +0200
+@@ -2,6 +2,7 @@
+
+ INCLUDES = -I. -I$(srcdir) \
+ $(GNOME_APPLETS_CFLAGS) \
++ $(MODEMLIGHTS_CFLAGS) \
+ $(LIBGLADE_CFLAGS)
+
+ libexec_PROGRAMS = modem_applet
+diff -urN gnome-applets-2.18.0/modemlights/modem-applet.c gnome-applets-2.18.0.new/modemlights/modem-applet.c
+--- gnome-applets-2.18.0/modemlights/modem-applet.c 2006-12-31 03:16:08.000000000 +0100
++++ gnome-applets-2.18.0.new/modemlights/modem-applet.c 2007-06-10 13:32:32.000000000 +0200
+@@ -23,31 +23,14 @@
+ #endif
+
+ #include <panel-applet.h>
+-#include <fcntl.h>
+-#ifdef HAVE_PTY_H
+-#include <pty.h>
+-#endif
+-#include <sys/poll.h>
+-#include <sys/types.h>
+-#include <sys/wait.h>
+-#include <libxml/tree.h>
++#include <oobs/oobs.h>
+ #include <glade/glade.h>
+
+-#ifdef __FreeBSD__
+-#include <sys/ioctl.h>
+-#include <termios.h>
+-#include <libutil.h>
+-#endif
+-
+ #include "modem-applet.h"
+
+ #define MODEM_APPLET_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_MODEM_APPLET, ModemAppletPrivate))
+ #define NETWORK_TOOL "network-admin"
+-#define END_OF_REQUEST "<!-- GST: end of request -->\n"
+-#define BUF_SIZE 1024
+
+-typedef void (*DirectiveCallback) (ModemApplet*, xmlDoc*);
+-typedef struct _BackendDirective BackendDirective;
+ typedef struct _ModemAppletPrivate ModemAppletPrivate;
+
+ struct _ModemAppletPrivate
+@@ -59,47 +42,19 @@
+ GtkWidget *image;
+ GtkTooltips *tooltips;
+
+- /* auth dialog */
+- GtkWidget *auth_dialog;
+- GtkWidget *auth_dialog_label;
+- GtkWidget *auth_dialog_entry;
+-
+ /* report window */
+ GtkWidget *report_window;
+ GtkWidget *report_window_image;
+ GtkWidget *report_window_progress;
+
+- guint directives_id;
+- guint progress_id;
+- guint tooltip_id;
+- guint info_id;
+- guint timeout_id;
+-
+- /* for communicating with the backend */
+- gint config_id;
+- gint pid;
+- int read_fd;
+- int write_fd;
+- FILE *read_stream;
+- FILE *write_stream;
+- GSList *directives;
+- gboolean directive_running;
+-
+- /* interface data */
+- gboolean configured; /* is configured? */
+- gboolean enabled; /* is enabled? */
+- gboolean is_isdn; /* is an isdn device? */
+- gchar *dev; /* device name */
+- gchar *lock_file; /* lock file */
+-
+- gboolean has_root;
+-};
++ /* configuration */
++ OobsSession *session;
++ OobsObject *config;
++ OobsIface *iface;
++ gchar *lock_file;
+
+-struct _BackendDirective
+-{
+- DirectiveCallback callback;
+- GSList *directive;
+- gboolean show_report;
++ guint pulse_id;
++ guint tooltip_id;
+ };
+
+ static void modem_applet_class_init (ModemAppletClass *class);
+@@ -139,8 +94,6 @@
+ gboolean backend_alive,
+ gboolean already_waiting);
+
+-static gpointer parent_class;
+-
+ static const BonoboUIVerb menu_verbs[] = {
+ BONOBO_UI_UNSAFE_VERB ("Activate", on_modem_applet_activate),
+ BONOBO_UI_UNSAFE_VERB ("Deactivate", on_modem_applet_deactivate),
+@@ -150,32 +103,7 @@
+ BONOBO_UI_VERB_END
+ };
+
+-static GType
+-modem_applet_get_type (void)
+-{
+- static GType type = 0;
+-
+- if (!type)
+- {
+- static const GTypeInfo info =
+- {
+- sizeof (ModemAppletClass),
+- NULL, /* base_init */
+- NULL, /* base_finalize */
+- (GClassInitFunc) modem_applet_class_init,
+- NULL, /* class_finalize */
+- NULL, /* class_data */
+- sizeof (ModemApplet),
+- 0, /* n_preallocs */
+- (GInstanceInitFunc) modem_applet_init,
+- };
+-
+- type = g_type_register_static (PANEL_TYPE_APPLET, "ModemApplet",
+- &info, 0);
+- }
+-
+- return type;
+-}
++G_DEFINE_TYPE (ModemApplet, modem_applet, PANEL_TYPE_APPLET);
+
+ static void
+ modem_applet_class_init (ModemAppletClass *class)
+@@ -185,8 +113,7 @@
+
+ object_class = G_OBJECT_CLASS (class);
+ applet_class = PANEL_APPLET_CLASS (class);
+- parent_class = g_type_class_peek_parent (class);
+-
++
+ object_class->finalize = modem_applet_finalize;
+ applet_class->change_size = modem_applet_change_size;
+ applet_class->change_background = modem_applet_change_background;
+@@ -194,6 +121,57 @@
+ g_type_class_add_private (object_class, sizeof (ModemAppletPrivate));
+ }
+
++static OobsIface*
++get_modem_iface (OobsIfacesConfig *config)
++{
++ OobsList *list;
++ OobsListIter iter;
++ gboolean valid;
++
++ /* First try the modem ifaces */
++ list = oobs_ifaces_config_get_ifaces (config, OOBS_IFACE_TYPE_MODEM);
++ valid = oobs_list_get_iter_first (list, &iter);
++
++ if (valid)
++ return (OobsIface *) oobs_list_get (list, &iter);
++
++ /* no modem? try the isdn ifaces */
++ list = oobs_ifaces_config_get_ifaces (config, OOBS_IFACE_TYPE_ISDN);
++ valid = oobs_list_get_iter_first (list, &iter);
++
++ if (valid)
++ return (OobsIface *) oobs_list_get (list, &iter);
++
++ return NULL;
++}
++
++static gchar*
++get_lock_file (OobsIface *iface)
++{
++ gchar *lock_file;
++
++ if (!iface)
++ return NULL;
++
++ if (OOBS_IS_IFACE_MODEM (iface))
++ {
++ const gchar *serial_port, *str;
++
++ serial_port = oobs_iface_modem_get_serial_port (OOBS_IFACE_MODEM (iface));
++
++ if (serial_port)
++ {
++ str = strchr (serial_port, '/');
++ lock_file = g_strdup_printf ("/var/lock/LCK..%s", str + 1);
++ }
++ }
++ else if (OOBS_IS_IFACE_ISDN (iface))
++ lock_file = g_strdup ("/var/lock/LCK..capi_0");
++
++ return lock_file;
++}
++
++
+ static void
+ modem_applet_init (ModemApplet *applet)
+ {
+@@ -208,9 +186,10 @@
+ priv->image = gtk_image_new ();
+ priv->tooltips = gtk_tooltips_new ();
+
+- priv->auth_dialog = glade_xml_get_widget (priv->xml, "auth_dialog");
+- priv->auth_dialog_label = glade_xml_get_widget (priv->xml, "auth_dialog_label");
+- priv->auth_dialog_entry = glade_xml_get_widget (priv->xml, "auth_dialog_entry");
++ priv->session = oobs_session_get ();
++ priv->config = oobs_ifaces_config_get (priv->session);
++ priv->iface = get_modem_iface (OOBS_IFACES_CONFIG (priv->config));
++ priv->lock_file = get_lock_file (priv->iface);
+
+ priv->report_window = glade_xml_get_widget (priv->xml, "report_window");
+ priv->report_window_image = glade_xml_get_widget (priv->xml, "report_window_image");
+@@ -223,19 +202,7 @@
+ gtk_image_set_from_pixbuf (GTK_IMAGE (priv->report_window_image), pixbuf);
+ gdk_pixbuf_unref (pixbuf);
+
+- priv->configured = FALSE;
+- priv->enabled = FALSE;
+- priv->dev = NULL;
+- priv->lock_file = NULL;
+-
+- priv->has_root = FALSE;
+-
+- priv->directives = NULL;
+- priv->directives_id = g_timeout_add (250, (GSourceFunc) dispatch_directives, applet);
+- priv->directive_running = FALSE;
+ priv->tooltip_id = g_timeout_add (1000, (GSourceFunc) update_tooltip, applet);
+-
+- launch_backend (applet, FALSE);
+ gtk_container_add (GTK_CONTAINER (applet), priv->image);
+ }
+
+@@ -246,18 +213,25 @@
+
+ if (priv)
+ {
+- shutdown_backend (MODEM_APPLET (object), TRUE, TRUE);
+-
+- gtk_widget_destroy (priv->auth_dialog);
+- gtk_widget_destroy (priv->report_window);
++ g_object_unref (priv->xml);
+ g_object_unref (priv->icon);
++ gtk_widget_destroy (priv->image);
++
++ if (priv->pulse_id)
++ {
++ g_source_remove (priv->pulse_id);
++ priv->pulse_id = 0;
++ }
+
+- g_free (priv->dev);
+- g_free (priv->lock_file);
++ if (priv->tooltip_id)
++ {
++ g_source_remove (priv->tooltip_id);
++ priv->tooltip_id = 0;
++ }
+ }
+
+- if (G_OBJECT_CLASS (parent_class)->finalize)
+- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
++ if (G_OBJECT_CLASS (modem_applet_parent_class)->finalize)
++ (* G_OBJECT_CLASS (modem_applet_parent_class)->finalize) (object);
+ }
+
+ static void
+@@ -312,401 +286,26 @@
+ }
+ }
+
+-static gboolean
+-pulse_progressbar (GtkWidget *progressbar)
+-{
+- gtk_progress_bar_pulse (GTK_PROGRESS_BAR (progressbar));
+- return TRUE;
+-}
+-
+-/* XML manipulation functions */
+-static xmlNodePtr
+-get_root_node (xmlDoc *doc)
+-{
+- return xmlDocGetRootElement (doc);
+-}
+-
+-static xmlNodePtr
+-find_first_element (xmlNodePtr node, const gchar *name)
+-{
+- xmlNodePtr n;
+-
+- g_return_val_if_fail (node != NULL, NULL);
+- g_return_val_if_fail (name != NULL, NULL);
+-
+- for (n = node->children; n; n = n->next)
+- if (n->name && (strcmp (name, (char *) n->name) == 0))
+- break;
+-
+- return n;
+-}
+-
+-static xmlNodePtr
+-find_next_element (xmlNodePtr node, const gchar *name)
+-{
+- xmlNodePtr n;
+-
+- g_return_val_if_fail (node != NULL, NULL);
+- g_return_val_if_fail (name != NULL, NULL);
+-
+- for (n = node->next; n; n = n->next)
+- if (n->name && (strcmp (name, (char *) n->name) == 0))
+- break;
+-
+- return n;
+-}
+-
+-static guchar *
+-element_get_attribute (xmlNodePtr node, const gchar *attribute)
+-{
+- xmlAttrPtr a;
+-
+- g_return_val_if_fail (node != NULL, NULL);
+- a = node->properties;
+-
+- while (a)
+- {
+- if (a->name && (strcmp ((char *) a->name, attribute) == 0))
+- return xmlNodeGetContent (a->children);
+-
+- a = a->next;
+- }
+-
+- return NULL;
+-}
+-
+-static guchar *
+-element_get_child_content (xmlNodePtr node, const gchar *tag)
+-{
+- xmlNodePtr child, n;
+-
+- child = find_first_element (node, tag);
+- if (!child)
+- return NULL;
+-
+- for (n = child->children; n; n = n->next)
+- if (n->type == XML_TEXT_NODE)
+- return xmlNodeGetContent (n);
+-
+- return NULL;
+-}
+-
+-static xmlNodePtr
+-find_dialup_interface_node (xmlNodePtr root)
+-{
+- xmlNodePtr node;
+- gchar *type;
+-
+- node = find_first_element (root, "interface");
+-
+- while (node)
+- {
+- type = (char *) element_get_attribute (node, "type");
+-
+- if (type && (strcmp (type, "modem") == 0 || strcmp (type, "isdn") == 0))
+- {
+- g_free (type);
+- return node;
+- }
+-
+- g_free (type);
+- node = find_next_element (node, "interface");
+- }
+-
+- return NULL;
+-}
+-
+-/* backend communication functions */
+-static gchar *
+-compose_directive_string (GSList *directive)
+-{
+- GString *dir;
+- gchar *arg, *s, *str;
+- GSList *elem;
+-
+- elem = directive;
+- dir = g_string_new ("");
+-
+- while (elem)
+- {
+- arg = elem->data;
+-
+- for (s = arg; *s; s++)
+- {
+- /* escape needed chars */
+- if ((*s == '\\') ||
+- ((*s == ':') && (* (s + 1) == ':')))
+- g_string_append_c (dir, '\\');
+-
+- g_string_append_c (dir, *s);
+- }
+-
+- g_string_append (dir, "::");
+- elem = elem->next;
+- }
+-
+- g_string_append_c (dir, '\n');
+-
+- str = dir->str;
+- g_string_free (dir, FALSE);
+-
+- return str;
+-}
+-
+-static void
+-poll_backend (ModemAppletPrivate *priv)
+-{
+- struct pollfd fd;
+-
+- fd.fd = priv->read_fd;
+- fd.events = POLLIN || POLLPRI;
+-
+- while (poll (&fd, 1, 100) <= 0)
+- {
+- while (gtk_events_pending ())
+- gtk_main_iteration ();
+- }
+-}
+-
+-static xmlDoc*
+-read_xml (ModemApplet *applet, gboolean show_report)
+-{
+- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
+- gchar buffer[BUF_SIZE], *s;
+- GString *str;
+- xmlDoc *doc = NULL;
+- gboolean backend_alive;
+-
+- str = g_string_new ("");
+- backend_alive = (waitpid (priv->pid, NULL, WNOHANG) == 0);
+-
+- /* if show_report, create pulse timeout and show window */
+- if (show_report)
+- {
+- priv->progress_id = gtk_timeout_add (200, (GSourceFunc) pulse_progressbar, priv->report_window_progress);
+- gtk_window_set_screen (GTK_WINDOW (priv->report_window), gtk_widget_get_screen (GTK_WIDGET (applet)));
+- gtk_widget_show (priv->report_window);
+- }
+-
+- while (backend_alive && !g_strrstr (str->str, END_OF_REQUEST))
+- {
+- poll_backend (priv);
+- fgets (buffer, BUF_SIZE, priv->read_stream);
+- g_string_append (str, buffer);
+-
+- while (gtk_events_pending ())
+- gtk_main_iteration ();
+-
+- backend_alive = (waitpid (priv->pid, NULL, WNOHANG) == 0);
+- }
+-
+- /* if show_report, hide window and so */
+- if (show_report)
+- {
+- g_source_remove (priv->progress_id);
+- priv->progress_id = 0;
+- gtk_widget_hide (priv->report_window);
+- }
+-
+- s = str->str;
+-
+- while (*s && (*s != '<'))
+- s++;
+-
+- if (strcmp (s, END_OF_REQUEST) != 0)
+- doc = xmlParseDoc ((xmlChar *) s);
+-
+- g_string_free (str, TRUE);
+-
+- return doc;
+-}
+-
+-static void
+-queue_directive (ModemApplet *applet,
+- DirectiveCallback callback,
+- gboolean show_report,
+- const gchar *dir,
+- ...)
+-{
+- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
+- BackendDirective *directive;
+- GSList *list = NULL;
+- va_list ap;
+- gchar *arg;
+-
+- list = g_slist_prepend (list, g_strdup (dir));
+- va_start (ap, dir);
+-
+- while ((arg = va_arg (ap, gchar *)) != NULL)
+- list = g_slist_prepend (list, g_strdup (arg));
+-
+- va_end (ap);
+- list = g_slist_reverse (list);
+-
+- directive = g_new0 (BackendDirective, 1);
+- directive->callback = callback;
+- directive->directive = list;
+- directive->show_report = show_report;
+-
+- priv->directives = g_slist_append (priv->directives, directive);
+-}
+-
+-static gboolean
+-dispatch_directives (ModemApplet *applet)
+-{
+- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
+- BackendDirective *directive;
+- xmlDoc *doc;
+- gchar *dir;
+- GSList *elem;
+-
+- if (priv->directive_running)
+- return TRUE;
+-
+- priv->directive_running = TRUE;
+- elem = priv->directives;
+-
+- while (elem)
+- {
+- directive = elem->data;
+-
+- dir = compose_directive_string (directive->directive);
+- fputs (dir, priv->write_stream);
+- g_free (dir);
+-
+- doc = read_xml (applet, directive->show_report);
+-
+- if (directive->callback)
+- directive->callback (applet, doc);
+-
+- if (doc)
+- xmlFreeDoc (doc);
+-
+- g_slist_foreach (directive->directive, (GFunc) g_free, NULL);
+- g_slist_free (directive->directive);
+-
+- elem = elem->next;
+- }
+-
+- g_slist_foreach (priv->directives, (GFunc) g_free, NULL);
+- g_slist_free (priv->directives);
+- priv->directives = NULL;
+- priv->directive_running = FALSE;
+-
+- return TRUE;
+-}
+-
+-static void
+-shutdown_backend (ModemApplet *applet, gboolean backend_alive, gboolean already_waiting)
+-{
+- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
+-
+- if (priv->info_id)
+- {
+- g_source_remove (priv->info_id);
+- priv->info_id = 0;
+- }
+-
+- if (priv->timeout_id)
+- {
+- g_source_remove (priv->timeout_id);
+- priv->timeout_id = 0;
+- }
+-
+- if (priv->tooltip_id)
+- {
+- g_source_remove (priv->tooltip_id);
+- priv->tooltip_id = 0;
+- }
+-
+- if (backend_alive)
+- kill (priv->pid, 9);
+-
+- if (!already_waiting)
+- {
+- /* don't leave zombies */
+- while (waitpid (priv->pid, NULL, WNOHANG) <= 0)
+- {
+- usleep (2000);
+-
+- while (gtk_events_pending ())
+- gtk_main_iteration ();
+- }
+- }
+-
+- /* close remaining streams and fds */
+- fclose (priv->read_stream);
+- fclose (priv->write_stream);
+- close (priv->read_fd);
+- close (priv->write_fd);
+-}
+-
+-/* functions for extracting the interface information from the XML */
+ static void
+ update_popup_buttons (ModemApplet *applet)
+ {
+ BonoboUIComponent *component;
+ ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
++ gboolean enabled;
+
+ component = panel_applet_get_popup_component (PANEL_APPLET (applet));
++ enabled = (priv->iface && oobs_iface_get_active (priv->iface));
+
+ bonobo_ui_component_set_prop (component,
+ "/commands/Activate",
+- "sensitive", (priv->configured && !priv->enabled) ? "1" : "0",
++ "sensitive", (enabled) ? "1" : "0",
+ NULL);
+ bonobo_ui_component_set_prop (component,
+ "/commands/Deactivate",
+- "sensitive", (priv->configured && priv->enabled) ? "1" : "0",
++ "sensitive", (enabled) ? "1" : "0",
+ NULL);
+ }
+
+-static void
+-get_interface_data (ModemApplet *applet, xmlNodePtr iface)
+-{
+- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
+- xmlNodePtr configuration;
+- gchar *text, *device;
+-
+- g_return_if_fail (iface != NULL);
+-
+- text = (char *) element_get_child_content (iface, "enabled");
+- priv->enabled = (*text == '1');
+- g_free (text);
+-
+- g_free (priv->dev);
+- priv->dev = (char *) element_get_child_content (iface, "dev");
+-
+- g_free (priv->lock_file);
+- configuration = find_first_element (iface, "configuration");
+-
+- if (configuration)
+- {
+- priv->configured = TRUE;
+- text = (char *) element_get_child_content (configuration, "serial_port");
+-
+- if (text)
+- {
+- /* Modem device */
+- device = strrchr (text, '/');
+- priv->lock_file = g_strdup_printf ("/var/lock/LCK..%s", device + 1);
+- g_free (text);
+-
+- priv->is_isdn = FALSE;
+- }
+- else
+- {
+- /* isdn device */
+- priv->lock_file = g_strdup ("/var/lock/LCK..capi_0");
+- priv->is_isdn = TRUE;
+- }
+- }
+- else
+- {
+- priv->lock_file = NULL;
+- priv->configured = FALSE;
+- }
+-}
+-
+ static gint
+ get_connection_time (const gchar *lock_file)
+ {
+@@ -725,30 +324,30 @@
+ gchar *text;
+ gint t, t1, t2;
+
+- if (priv->enabled)
++ if (!priv->lock_file)
++ text = g_strdup (_("Could not get connection time"));
++ else
+ {
+- if (!priv->lock_file)
+- text = g_strdup (_("Connection active, but could not get connection time"));
++ t = get_connection_time (priv->lock_file);
++
++ if (t == 0)
++ text = g_strdup (_("Not connected"));
+ else
+ {
+- t = get_connection_time (priv->lock_file);
+-
+- if (t < (60 * 60 * 24))
+- {
+- t1 = t / 3600; /* hours */
+- t2 = (t - (t1 * 3600)) / 60; /* minutes */
+- }
+- else
+- {
+- t1 = t / (3600 * 24); /* days */
+- t2 = (t - (t1 * 3600 * 24)) / 3600; /* hours */
+- }
+-
++ if (t < (60 * 60 * 24))
++ {
++ t1 = t / 3600; /* hours */
++ t2 = (t - (t1 * 3600)) / 60; /* minutes */
++ }
++ else
++ {
++ t1 = t / (3600 * 24); /* days */
++ t2 = (t - (t1 * 3600 * 24)) / 3600; /* hours */
++ }
++
+ text = g_strdup_printf (_("Time connected: %.1d:%.2d"), t1, t2);
+ }
+ }
+- else
+- text = g_strdup (_("Not connected"));
+
+ gtk_tooltips_set_tip(priv->tooltips, GTK_WIDGET (applet), text, NULL);
+ g_free(text);
+@@ -756,165 +355,8 @@
+ return TRUE;
+ }
+
+-static void
+-rerun_backend_callback (ModemApplet *applet, xmlDoc *doc)
+-{
+- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
+- gchar *text, *password;
+- gint response;
+- gboolean enable;
+-
+- shutdown_backend (applet, FALSE, FALSE);
+- launch_backend (applet, TRUE);
+-
+- enable = !priv->enabled;
+-
+- text = (enable) ?
+- _("To connect to your Internet service provider, you need administrator privileges") :
+- _("To disconnect from your Internet service provider, you need administrator privileges");
+-
+- gtk_label_set_text (GTK_LABEL (priv->auth_dialog_label), text);
+- gtk_window_set_screen (GTK_WINDOW (priv->auth_dialog),
+- gtk_widget_get_screen (GTK_WIDGET (applet)));
+-
+- gtk_widget_grab_focus (priv->auth_dialog_entry);
+- response = gtk_dialog_run (GTK_DIALOG (priv->auth_dialog));
+- gtk_widget_hide (priv->auth_dialog);
+- password = (gchar *) gtk_entry_get_text (GTK_ENTRY (priv->auth_dialog_entry));
+-
+- if (response == GTK_RESPONSE_OK)
+- {
+-
+- password = (gchar *) gtk_entry_get_text (GTK_ENTRY (priv->auth_dialog_entry));
+- fputs (password, priv->write_stream);
+- fputs ("\n", priv->write_stream);
+-
+- while (fflush (priv->write_stream) != 0);
+-
+- queue_directive (applet, NULL, enable,
+- "enable_iface", priv->dev, (enable) ? "1" : "0", NULL);
+- }
+- else
+- {
+- shutdown_backend (applet, TRUE, FALSE);
+- launch_backend (applet, FALSE);
+- }
+-
+- /* stab the root password */
+- memset (password, ' ', sizeof (password));
+- gtk_entry_set_text (GTK_ENTRY (priv->auth_dialog_entry), "");
+-}
+-
+-static void
+-update_info_callback (ModemApplet *applet, xmlDoc *doc)
+-{
+- xmlNodePtr iface;
+-
+- if (!doc)
+- return;
+-
+- iface = find_dialup_interface_node (get_root_node (doc));
+- if (!iface)
+- return;
+-
+- get_interface_data (applet, iface);
+- update_popup_buttons (applet);
+-}
+-
+ static gboolean
+-update_info (ModemApplet *applet)
+-{
+- queue_directive (applet, update_info_callback,
+- FALSE, "get", NULL);
+- return TRUE;
+-}
+-
+-static gboolean
+-check_backend (ModemApplet *applet)
+-{
+- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
+- gint status, pid = -1;
+- GtkWidget *dialog;
+-
+- pid = waitpid (priv->pid, &status, WNOHANG);
+-
+- if (pid != 0)
+- {
+- if (errno == ECHILD || ((WIFEXITED (status)) && (WEXITSTATUS (status)) && (WEXITSTATUS(status) < 255)))
+- {
+- dialog = gtk_message_dialog_new (NULL,
+- GTK_DIALOG_MODAL,
+- GTK_MESSAGE_WARNING,
+- GTK_BUTTONS_CLOSE,
+- _("The entered password is invalid"));
+- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+- _("Check that you have typed it correctly and that "
+- "you haven't activated the \"caps lock\" key"));
+- gtk_dialog_run (GTK_DIALOG (dialog));
+- gtk_widget_destroy (dialog);
+- }
+-
+- priv->timeout_id = 0;
+- shutdown_backend (applet, FALSE, TRUE);
+- launch_backend (applet, FALSE);
+-
+- return FALSE;
+- }
+-
+- return TRUE;
+-}
+-
+-static void
+-launch_backend (ModemApplet *applet, gboolean root_auth)
+-{
+- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
+- gchar *non_auth_args[] = { STB_SCRIPTS_DIR "/network-conf", NULL };
+- gchar *auth_args[] = { SU_PATH, "-c", STB_SCRIPTS_DIR "/network-conf", NULL };
+- gchar **args;
+- int p[2];
+-
+- pipe (p);
+- priv->pid = forkpty (&priv->write_fd, NULL, NULL, NULL);
+- args = (root_auth) ? auth_args : non_auth_args;
+-
+- if (priv->pid < 0)
+- g_warning ("Could not spawn GST backend");
+- else
+- {
+- if (priv->pid == 0)
+- {
+- /* child process */
+- unsetenv("LC_ALL");
+- unsetenv("LC_MESSAGES");
+- unsetenv("LANG");
+- unsetenv("LANGUAGE");
+-
+- dup2 (p[1], 1);
+- dup2 (p[1], 2);
+- close (p[0]);
+-
+- execv (args[0], args);
+- exit (255);
+- }
+- else
+- {
+- close (p[1]);
+-
+- priv->read_fd = p[0];
+- priv->timeout_id = g_timeout_add (1000, (GSourceFunc) check_backend, applet);
+- priv->info_id = g_timeout_add (2500, (GSourceFunc) update_info, applet);
+- priv->read_stream = fdopen (priv->read_fd, "r");
+- priv->write_stream = fdopen (priv->write_fd, "w");
+- priv->has_root = root_auth;
+-
+- setvbuf (priv->read_stream, NULL, _IONBF, 0);
+- fcntl (priv->read_fd, F_SETFL, 0);
+- }
+- }
+-}
+-
+-static gboolean
+-launch_config_tool (GdkScreen *screen, gboolean is_isdn)
++launch_config_tool (GdkScreen *screen, OobsIface *iface)
+ {
+ gchar *argv[4], *application;
+ gboolean ret;
+@@ -925,8 +367,8 @@
+ return FALSE;
+
+ argv[0] = application;
+- argv[1] = "--configure-type";
+- argv[2] = (is_isdn) ? "isdn" : "modem";
++ argv[1] = "--configure";
++ argv[2] = (gchar*) oobs_iface_get_device_name (iface);
+ argv[3] = NULL;
+
+ ret = gdk_spawn_on_screen (screen, NULL, argv, NULL, 0,
+@@ -935,52 +377,48 @@
+ return ret;
+ }
+
+-static void
+-toggle_interface_non_root (ModemApplet *applet, gboolean enable)
++static gboolean
++pulse_progressbar (GtkProgressBar *progressbar)
+ {
+- queue_directive (applet, rerun_backend_callback,
+- FALSE, "end", NULL);
++ gtk_progress_bar_pulse (progressbar);
++ return TRUE;
+ }
+
+ static void
+-toggle_interface_root (ModemApplet *applet, gboolean enable)
++show_report_window (ModemApplet *applet)
+ {
+- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
+- GtkWidget *dialog;
+- gchar *text;
++ ModemAppletPrivate *priv;
+
+- text = (enable) ?
+- _("Do you want to connect?") :
+- _("Do you want to disconnect?");
+-
+- dialog = gtk_message_dialog_new (NULL,
+- GTK_DIALOG_MODAL,
+- GTK_MESSAGE_QUESTION,
+- GTK_BUTTONS_NONE,
+- text);
+- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+- (enable) ? _("C_onnect") : _("_Disconnect"),
+- GTK_RESPONSE_OK, NULL);
+- gtk_window_set_screen (GTK_WINDOW (dialog),
+- gtk_widget_get_screen (GTK_WIDGET (applet)));
+-
+- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
+- queue_directive (applet, NULL, enable,
+- "enable_iface", priv->dev, (enable) ? "1" : "0", NULL);
++ priv = MODEM_APPLET_GET_PRIVATE (applet);
++ gtk_widget_show (priv->report_window);
++ priv->pulse_id = g_timeout_add (300, (GSourceFunc) pulse_progressbar, priv->report_window_progress);
++}
++
++static void
++hide_report_window (ModemApplet *applet)
++{
++ ModemAppletPrivate *priv;
+
+- gtk_widget_destroy (dialog);
++ priv = MODEM_APPLET_GET_PRIVATE (applet);
++ gtk_widget_hide (priv->report_window);
++
++ if (priv->pulse_id != 0)
++ {
++ g_source_remove (priv->pulse_id);
++ priv->pulse_id = 0;
++ }
+ }
+
+ static void
+-toggle_interface (ModemApplet *applet, gboolean enable)
++on_config_committed (OobsObject *object,
++ OobsResult result,
++ gpointer data)
+ {
+- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
++ ModemApplet *applet = MODEM_APPLET (data);
+
+- if (priv->has_root)
+- toggle_interface_root (applet, enable);
+- else
+- toggle_interface_non_root (applet, enable);
++ hide_report_window (applet);
++ gtk_widget_set_sensitive (GTK_WIDGET (applet), FALSE);
++ update_popup_buttons (applet);
+ }
+
+ static void
+@@ -988,7 +426,14 @@
+ ModemApplet *applet,
+ const gchar *verb)
+ {
+- toggle_interface (applet, TRUE);
++ ModemAppletPrivate *priv;
++
++ gtk_widget_set_sensitive (GTK_WIDGET (applet), FALSE);
++ show_report_window (applet);
++
++ priv = MODEM_APPLET_GET_PRIVATE (applet);
++ oobs_iface_set_active (priv->iface, TRUE);
++ oobs_object_commit_async (priv->config, on_config_committed, applet);
+ }
+
+ static void
+@@ -996,7 +441,12 @@
+ ModemApplet *applet,
+ const gchar *verb)
+ {
+- toggle_interface (applet, FALSE);
++ ModemAppletPrivate *priv;
++
++ priv = MODEM_APPLET_GET_PRIVATE (applet);
++ oobs_iface_set_active (priv->iface, FALSE);
++ gtk_widget_set_sensitive (GTK_WIDGET (applet), FALSE);
++ oobs_object_commit_async (priv->config, on_config_committed, applet);
+ }
+
+ static void
+@@ -1010,7 +460,7 @@
+
+ screen = gtk_widget_get_screen (GTK_WIDGET (applet));
+
+- if (!launch_config_tool (screen, priv->is_isdn))
++ if (!launch_config_tool (screen, priv->iface))
+ {
+ dialog = gtk_message_dialog_new (NULL,
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+diff -urN gnome-applets-2.18.0/modemlights/modemlights.glade gnome-applets-2.18.0.new/modemlights/modemlights.glade
+--- gnome-applets-2.18.0/modemlights/modemlights.glade 2006-12-31 03:16:08.000000000 +0100
++++ gnome-applets-2.18.0.new/modemlights/modemlights.glade 2007-06-10 13:08:15.000000000 +0200
+@@ -2,222 +2,6 @@
+ <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+ <glade-interface>
+-<requires lib="gnome"/>
+-
+-<widget class="GtkDialog" id="auth_dialog">
+- <property name="title" translatable="yes">Enter password</property>
+- <property name="type">GTK_WINDOW_TOPLEVEL</property>
+- <property name="window_position">GTK_WIN_POS_CENTER</property>
+- <property name="modal">True</property>
+- <property name="resizable">False</property>
+- <property name="destroy_with_parent">False</property>
+- <property name="decorated">True</property>
+- <property name="skip_taskbar_hint">False</property>
+- <property name="skip_pager_hint">False</property>
+- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+- <property name="has_separator">False</property>
+-
+- <child internal-child="vbox">
+- <widget class="GtkVBox" id="dialog-vbox1">
+- <property name="visible">True</property>
+- <property name="homogeneous">False</property>
+- <property name="spacing">0</property>
+-
+- <child internal-child="action_area">
+- <widget class="GtkHButtonBox" id="dialog-action_area1">
+- <property name="visible">True</property>
+- <property name="layout_style">GTK_BUTTONBOX_END</property>
+-
+- <child>
+- <widget class="GtkButton" id="cancelbutton1">
+- <property name="visible">True</property>
+- <property name="can_default">True</property>
+- <property name="can_focus">True</property>
+- <property name="label">gtk-cancel</property>
+- <property name="use_stock">True</property>
+- <property name="relief">GTK_RELIEF_NORMAL</property>
+- <property name="focus_on_click">True</property>
+- <property name="response_id">-6</property>
+- </widget>
+- </child>
+-
+- <child>
+- <widget class="GtkButton" id="okbutton1">
+- <property name="visible">True</property>
+- <property name="can_default">True</property>
+- <property name="has_default">True</property>
+- <property name="can_focus">True</property>
+- <property name="label">gtk-ok</property>
+- <property name="use_stock">True</property>
+- <property name="relief">GTK_RELIEF_NORMAL</property>
+- <property name="focus_on_click">True</property>
+- <property name="response_id">-5</property>
+- </widget>
+- </child>
+- </widget>
+- <packing>
+- <property name="padding">0</property>
+- <property name="expand">False</property>
+- <property name="fill">True</property>
+- <property name="pack_type">GTK_PACK_END</property>
+- </packing>
+- </child>
+-
+- <child>
+- <widget class="GtkHBox" id="hbox1">
+- <property name="border_width">7</property>
+- <property name="visible">True</property>
+- <property name="homogeneous">False</property>
+- <property name="spacing">12</property>
+-
+- <child>
+- <widget class="GtkImage" id="image1">
+- <property name="visible">True</property>
+- <property name="stock">gnome-stock-authentication</property>
+- <property name="icon_size">6</property>
+- <property name="xalign">0</property>
+- <property name="yalign">0</property>
+- <property name="xpad">0</property>
+- <property name="ypad">0</property>
+- </widget>
+- <packing>
+- <property name="padding">0</property>
+- <property name="expand">False</property>
+- <property name="fill">False</property>
+- </packing>
+- </child>
+-
+- <child>
+- <widget class="GtkVBox" id="vbox1">
+- <property name="visible">True</property>
+- <property name="homogeneous">False</property>
+- <property name="spacing">6</property>
+-
+- <child>
+- <widget class="GtkLabel" id="label1">
+- <property name="visible">True</property>
+- <property name="label" translatable="yes"><span weight="bold" size="larger">Root password required</span></property>
+- <property name="use_underline">False</property>
+- <property name="use_markup">True</property>
+- <property name="justify">GTK_JUSTIFY_LEFT</property>
+- <property name="wrap">False</property>
+- <property name="selectable">False</property>
+- <property name="xalign">0</property>
+- <property name="yalign">0.5</property>
+- <property name="xpad">0</property>
+- <property name="ypad">0</property>
+- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+- <property name="width_chars">-1</property>
+- <property name="single_line_mode">False</property>
+- <property name="angle">0</property>
+- </widget>
+- <packing>
+- <property name="padding">0</property>
+- <property name="expand">False</property>
+- <property name="fill">False</property>
+- </packing>
+- </child>
+-
+- <child>
+- <widget class="GtkLabel" id="auth_dialog_label">
+- <property name="visible">True</property>
+- <property name="can_focus">True</property>
+- <property name="label" translatable="yes"></property>
+- <property name="use_underline">False</property>
+- <property name="use_markup">False</property>
+- <property name="justify">GTK_JUSTIFY_LEFT</property>
+- <property name="wrap">True</property>
+- <property name="selectable">True</property>
+- <property name="xalign">0</property>
+- <property name="yalign">0.5</property>
+- <property name="xpad">0</property>
+- <property name="ypad">0</property>
+- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+- <property name="width_chars">-1</property>
+- <property name="single_line_mode">False</property>
+- <property name="angle">0</property>
+- </widget>
+- <packing>
+- <property name="padding">0</property>
+- <property name="expand">False</property>
+- <property name="fill">False</property>
+- </packing>
+- </child>
+-
+- <child>
+- <widget class="GtkHBox" id="hbox2">
+- <property name="visible">True</property>
+- <property name="homogeneous">False</property>
+- <property name="spacing">12</property>
+-
+- <child>
+- <widget class="GtkLabel" id="label3">
+- <property name="visible">True</property>
+- <property name="label" translatable="yes">Password:</property>
+- <property name="use_underline">False</property>
+- <property name="use_markup">False</property>
+- <property name="justify">GTK_JUSTIFY_LEFT</property>
+- <property name="wrap">False</property>
+- <property name="selectable">False</property>
+- <property name="xalign">0.5</property>
+- <property name="yalign">0.5</property>
+- <property name="xpad">0</property>
+- <property name="ypad">0</property>
+- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+- <property name="width_chars">-1</property>
+- <property name="single_line_mode">False</property>
+- <property name="angle">0</property>
+- </widget>
+- <packing>
+- <property name="padding">0</property>
+- <property name="expand">False</property>
+- <property name="fill">False</property>
+- </packing>
+- </child>
+-
+- <child>
+- <widget class="GtkEntry" id="auth_dialog_entry">
+- <property name="visible">True</property>
+- <property name="can_focus">True</property>
+- <property name="editable">True</property>
+- <property name="visibility">False</property>
+- <property name="max_length">0</property>
+- <property name="text" translatable="yes"></property>
+- <property name="has_frame">True</property>
+- <property name="invisible_char">*</property>
+- <property name="activates_default">True</property>
+- </widget>
+- <packing>
+- <property name="padding">0</property>
+- <property name="expand">True</property>
+- <property name="fill">True</property>
+- </packing>
+- </child>
+- </widget>
+- <packing>
+- <property name="padding">0</property>
+- <property name="expand">False</property>
+- <property name="fill">False</property>
+- </packing>
+- </child>
+- </widget>
+- <packing>
+- <property name="padding">0</property>
+- <property name="expand">True</property>
+- <property name="fill">True</property>
+- </packing>
+- </child>
+- </widget>
+- <packing>
+- <property name="padding">0</property>
+- <property name="expand">False</property>
+- <property name="fill">False</property>
+- </packing>
+- </child>
+- </widget>
+- </child>
+-</widget>
+
+ <widget class="GtkWindow" id="report_window">
+ <property name="title" translatable="yes"></property>
+@@ -231,6 +15,8 @@
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
++ <property name="focus_on_map">True</property>
++ <property name="urgency_hint">False</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox3">
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/mate-applets.git/commitdiff/65c1b73f8721e2c1dd8f5b7d875df06b87ad8453
More information about the pld-cvs-commit
mailing list