]> git.pld-linux.org Git - packages/gnome-applets.git/blame - gnome-applets-use-liboobs.patch
- 2.22.0
[packages/gnome-applets.git] / gnome-applets-use-liboobs.patch
CommitLineData
1be1f5b8
MB
1diff -urN gnome-applets-2.18.0/configure.in gnome-applets-2.18.0.new/configure.in
2--- gnome-applets-2.18.0/configure.in 2007-03-12 13:57:09.000000000 +0100
3+++ gnome-applets-2.18.0.new/configure.in 2007-06-10 12:30:15.000000000 +0200
4@@ -35,6 +35,7 @@
5 GNOME_PYTHON_REQUIRED=2.10
6 GNOME_ICON_THEME_REQUIRED=2.15.91
7 LIBXML_REQUIRED=2.5.0
8+LIBOOBS_REQUIRED=0.5.0
9 dnl ***************************************************************************
10
11 AM_MAINTAINER_MODE
12@@ -509,25 +510,20 @@
13 dnl *** modemlights applet check ***
14 dnl ***************************************************************************
15
16-SU_TOOL=
17-P_MODEMLIGHTS=
18-HAVE_LIBUTIL=
19-
20-AC_PATH_PROG(SU_TOOL, su)
21-AC_CHECK_LIB(util, forkpty, HAVE_LIBUTIL=true, HAVE_LIBUTIL=false)
22-AM_PATH_SYSTEM_TOOLS_BACKENDS($SYSTEM_TOOLS_BACKENDS_REQUIRED, P_MODEMLIGHTS=modemlights)
23-
24-if test "x$HAVE_LIBUTIL" = "xtrue" -a "x$P_MODEMLIGHTS" = "xmodemlights" -a "x$HAVE_GNOME_SETTINGS_DAEMON" = "xyes"; then
25- MODEMLIGHTS_LIBS=" -lutil"
26- AC_SUBST(MODEMLIGHTS_LIBS)
27- AC_DEFINE_UNQUOTED(STB_SCRIPTS_DIR, "$STB_SCRIPTS_DIR", [System tools backends])
28- AC_DEFINE_UNQUOTED(SU_PATH, "${SU_TOOL}", [su executable path])
29+MODEMLIGHTS_LIBS=
30+MODEMLIGHTS_CFLAGS=
31+
32+PKG_CHECK_MODULES(MODEMLIGHTS, liboobs-1 >= $LIBOOBS_REQUIRED,
33+ HAVE_LIBOOBS=yes, HAVE_LIBOOBS=no)
34+if test "x$HAVE_LIBOOBS" = "xyes" -a "x$HAVE_GNOME_SETTINGS_DAEMON" = "xyes"; then
35 BUILD_MODEM_LIGHTS=yes
36 else
37 AC_MSG_WARN([*** modemlights applet will not be built ***])
38 BUILD_MODEM_LIGHTS=no
39 fi
40
41+AC_SUBST(MODEMLIGHTS_LIBS)
42+AC_SUBST(MODEMLIGHTS_CFLAGS)
43 AM_CONDITIONAL(APPLET_MODEMLIGHTS, test "x$BUILD_MODEM_LIGHTS" = "xyes")
44
45 dnl ***************************************************************************
46diff -urN gnome-applets-2.18.0/modemlights/Makefile.am gnome-applets-2.18.0.new/modemlights/Makefile.am
47--- gnome-applets-2.18.0/modemlights/Makefile.am 2006-12-31 03:16:08.000000000 +0100
48+++ gnome-applets-2.18.0.new/modemlights/Makefile.am 2007-06-10 12:31:26.000000000 +0200
49@@ -2,6 +2,7 @@
50
51 INCLUDES = -I. -I$(srcdir) \
52 $(GNOME_APPLETS_CFLAGS) \
53+ $(MODEMLIGHTS_CFLAGS) \
54 $(LIBGLADE_CFLAGS)
55
56 libexec_PROGRAMS = modem_applet
57diff -urN gnome-applets-2.18.0/modemlights/modem-applet.c gnome-applets-2.18.0.new/modemlights/modem-applet.c
58--- gnome-applets-2.18.0/modemlights/modem-applet.c 2006-12-31 03:16:08.000000000 +0100
59+++ gnome-applets-2.18.0.new/modemlights/modem-applet.c 2007-06-10 13:32:32.000000000 +0200
60@@ -23,31 +23,14 @@
61 #endif
62
63 #include <panel-applet.h>
64-#include <fcntl.h>
65-#ifdef HAVE_PTY_H
66-#include <pty.h>
67-#endif
68-#include <sys/poll.h>
69-#include <sys/types.h>
70-#include <sys/wait.h>
71-#include <libxml/tree.h>
72+#include <oobs/oobs.h>
73 #include <glade/glade.h>
74
75-#ifdef __FreeBSD__
76-#include <sys/ioctl.h>
77-#include <termios.h>
78-#include <libutil.h>
79-#endif
80-
81 #include "modem-applet.h"
82
83 #define MODEM_APPLET_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_MODEM_APPLET, ModemAppletPrivate))
84 #define NETWORK_TOOL "network-admin"
85-#define END_OF_REQUEST "<!-- GST: end of request -->\n"
86-#define BUF_SIZE 1024
87
88-typedef void (*DirectiveCallback) (ModemApplet*, xmlDoc*);
89-typedef struct _BackendDirective BackendDirective;
90 typedef struct _ModemAppletPrivate ModemAppletPrivate;
91
92 struct _ModemAppletPrivate
93@@ -59,47 +42,19 @@
94 GtkWidget *image;
95 GtkTooltips *tooltips;
96
97- /* auth dialog */
98- GtkWidget *auth_dialog;
99- GtkWidget *auth_dialog_label;
100- GtkWidget *auth_dialog_entry;
101-
102 /* report window */
103 GtkWidget *report_window;
104 GtkWidget *report_window_image;
105 GtkWidget *report_window_progress;
106
107- guint directives_id;
108- guint progress_id;
109- guint tooltip_id;
110- guint info_id;
111- guint timeout_id;
112-
113- /* for communicating with the backend */
114- gint config_id;
115- gint pid;
116- int read_fd;
117- int write_fd;
118- FILE *read_stream;
119- FILE *write_stream;
120- GSList *directives;
121- gboolean directive_running;
122-
123- /* interface data */
124- gboolean configured; /* is configured? */
125- gboolean enabled; /* is enabled? */
126- gboolean is_isdn; /* is an isdn device? */
127- gchar *dev; /* device name */
128- gchar *lock_file; /* lock file */
129-
130- gboolean has_root;
131-};
132+ /* configuration */
133+ OobsSession *session;
134+ OobsObject *config;
135+ OobsIface *iface;
136+ gchar *lock_file;
137
138-struct _BackendDirective
139-{
140- DirectiveCallback callback;
141- GSList *directive;
142- gboolean show_report;
143+ guint pulse_id;
144+ guint tooltip_id;
145 };
146
147 static void modem_applet_class_init (ModemAppletClass *class);
148@@ -139,8 +94,6 @@
149 gboolean backend_alive,
150 gboolean already_waiting);
151
152-static gpointer parent_class;
153-
154 static const BonoboUIVerb menu_verbs[] = {
155 BONOBO_UI_UNSAFE_VERB ("Activate", on_modem_applet_activate),
156 BONOBO_UI_UNSAFE_VERB ("Deactivate", on_modem_applet_deactivate),
157@@ -150,32 +103,7 @@
158 BONOBO_UI_VERB_END
159 };
160
161-static GType
162-modem_applet_get_type (void)
163-{
164- static GType type = 0;
165-
166- if (!type)
167- {
168- static const GTypeInfo info =
169- {
170- sizeof (ModemAppletClass),
171- NULL, /* base_init */
172- NULL, /* base_finalize */
173- (GClassInitFunc) modem_applet_class_init,
174- NULL, /* class_finalize */
175- NULL, /* class_data */
176- sizeof (ModemApplet),
177- 0, /* n_preallocs */
178- (GInstanceInitFunc) modem_applet_init,
179- };
180-
181- type = g_type_register_static (PANEL_TYPE_APPLET, "ModemApplet",
182- &info, 0);
183- }
184-
185- return type;
186-}
187+G_DEFINE_TYPE (ModemApplet, modem_applet, PANEL_TYPE_APPLET);
188
189 static void
190 modem_applet_class_init (ModemAppletClass *class)
191@@ -185,8 +113,7 @@
192
193 object_class = G_OBJECT_CLASS (class);
194 applet_class = PANEL_APPLET_CLASS (class);
195- parent_class = g_type_class_peek_parent (class);
196-
197+
198 object_class->finalize = modem_applet_finalize;
199 applet_class->change_size = modem_applet_change_size;
200 applet_class->change_background = modem_applet_change_background;
201@@ -194,6 +121,57 @@
202 g_type_class_add_private (object_class, sizeof (ModemAppletPrivate));
203 }
204
205+static OobsIface*
206+get_modem_iface (OobsIfacesConfig *config)
207+{
208+ OobsList *list;
209+ OobsListIter iter;
210+ gboolean valid;
211+
212+ /* First try the modem ifaces */
213+ list = oobs_ifaces_config_get_ifaces (config, OOBS_IFACE_TYPE_MODEM);
214+ valid = oobs_list_get_iter_first (list, &iter);
215+
216+ if (valid)
217+ return (OobsIface *) oobs_list_get (list, &iter);
218+
219+ /* no modem? try the isdn ifaces */
220+ list = oobs_ifaces_config_get_ifaces (config, OOBS_IFACE_TYPE_ISDN);
221+ valid = oobs_list_get_iter_first (list, &iter);
222+
223+ if (valid)
224+ return (OobsIface *) oobs_list_get (list, &iter);
225+
226+ return NULL;
227+}
228+
229+static gchar*
230+get_lock_file (OobsIface *iface)
231+{
232+ gchar *lock_file;
233+
234+ if (!iface)
235+ return NULL;
236+
237+ if (OOBS_IS_IFACE_MODEM (iface))
238+ {
239+ const gchar *serial_port, *str;
240+
241+ serial_port = oobs_iface_modem_get_serial_port (OOBS_IFACE_MODEM (iface));
242+
243+ if (serial_port)
244+ {
245+ str = strchr (serial_port, '/');
246+ lock_file = g_strdup_printf ("/var/lock/LCK..%s", str + 1);
247+ }
248+ }
249+ else if (OOBS_IS_IFACE_ISDN (iface))
250+ lock_file = g_strdup ("/var/lock/LCK..capi_0");
251+
252+ return lock_file;
253+}
254+
255+
256 static void
257 modem_applet_init (ModemApplet *applet)
258 {
259@@ -208,9 +186,10 @@
260 priv->image = gtk_image_new ();
261 priv->tooltips = gtk_tooltips_new ();
262
263- priv->auth_dialog = glade_xml_get_widget (priv->xml, "auth_dialog");
264- priv->auth_dialog_label = glade_xml_get_widget (priv->xml, "auth_dialog_label");
265- priv->auth_dialog_entry = glade_xml_get_widget (priv->xml, "auth_dialog_entry");
266+ priv->session = oobs_session_get ();
267+ priv->config = oobs_ifaces_config_get (priv->session);
268+ priv->iface = get_modem_iface (OOBS_IFACES_CONFIG (priv->config));
269+ priv->lock_file = get_lock_file (priv->iface);
270
271 priv->report_window = glade_xml_get_widget (priv->xml, "report_window");
272 priv->report_window_image = glade_xml_get_widget (priv->xml, "report_window_image");
273@@ -223,19 +202,7 @@
274 gtk_image_set_from_pixbuf (GTK_IMAGE (priv->report_window_image), pixbuf);
275 gdk_pixbuf_unref (pixbuf);
276
277- priv->configured = FALSE;
278- priv->enabled = FALSE;
279- priv->dev = NULL;
280- priv->lock_file = NULL;
281-
282- priv->has_root = FALSE;
283-
284- priv->directives = NULL;
285- priv->directives_id = g_timeout_add (250, (GSourceFunc) dispatch_directives, applet);
286- priv->directive_running = FALSE;
287 priv->tooltip_id = g_timeout_add (1000, (GSourceFunc) update_tooltip, applet);
288-
289- launch_backend (applet, FALSE);
290 gtk_container_add (GTK_CONTAINER (applet), priv->image);
291 }
292
293@@ -246,18 +213,25 @@
294
295 if (priv)
296 {
297- shutdown_backend (MODEM_APPLET (object), TRUE, TRUE);
298-
299- gtk_widget_destroy (priv->auth_dialog);
300- gtk_widget_destroy (priv->report_window);
301+ g_object_unref (priv->xml);
302 g_object_unref (priv->icon);
303+ gtk_widget_destroy (priv->image);
304+
305+ if (priv->pulse_id)
306+ {
307+ g_source_remove (priv->pulse_id);
308+ priv->pulse_id = 0;
309+ }
310
311- g_free (priv->dev);
312- g_free (priv->lock_file);
313+ if (priv->tooltip_id)
314+ {
315+ g_source_remove (priv->tooltip_id);
316+ priv->tooltip_id = 0;
317+ }
318 }
319
320- if (G_OBJECT_CLASS (parent_class)->finalize)
321- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
322+ if (G_OBJECT_CLASS (modem_applet_parent_class)->finalize)
323+ (* G_OBJECT_CLASS (modem_applet_parent_class)->finalize) (object);
324 }
325
326 static void
327@@ -312,401 +286,26 @@
328 }
329 }
330
331-static gboolean
332-pulse_progressbar (GtkWidget *progressbar)
333-{
334- gtk_progress_bar_pulse (GTK_PROGRESS_BAR (progressbar));
335- return TRUE;
336-}
337-
338-/* XML manipulation functions */
339-static xmlNodePtr
340-get_root_node (xmlDoc *doc)
341-{
342- return xmlDocGetRootElement (doc);
343-}
344-
345-static xmlNodePtr
346-find_first_element (xmlNodePtr node, const gchar *name)
347-{
348- xmlNodePtr n;
349-
350- g_return_val_if_fail (node != NULL, NULL);
351- g_return_val_if_fail (name != NULL, NULL);
352-
353- for (n = node->children; n; n = n->next)
354- if (n->name && (strcmp (name, (char *) n->name) == 0))
355- break;
356-
357- return n;
358-}
359-
360-static xmlNodePtr
361-find_next_element (xmlNodePtr node, const gchar *name)
362-{
363- xmlNodePtr n;
364-
365- g_return_val_if_fail (node != NULL, NULL);
366- g_return_val_if_fail (name != NULL, NULL);
367-
368- for (n = node->next; n; n = n->next)
369- if (n->name && (strcmp (name, (char *) n->name) == 0))
370- break;
371-
372- return n;
373-}
374-
375-static guchar *
376-element_get_attribute (xmlNodePtr node, const gchar *attribute)
377-{
378- xmlAttrPtr a;
379-
380- g_return_val_if_fail (node != NULL, NULL);
381- a = node->properties;
382-
383- while (a)
384- {
385- if (a->name && (strcmp ((char *) a->name, attribute) == 0))
386- return xmlNodeGetContent (a->children);
387-
388- a = a->next;
389- }
390-
391- return NULL;
392-}
393-
394-static guchar *
395-element_get_child_content (xmlNodePtr node, const gchar *tag)
396-{
397- xmlNodePtr child, n;
398-
399- child = find_first_element (node, tag);
400- if (!child)
401- return NULL;
402-
403- for (n = child->children; n; n = n->next)
404- if (n->type == XML_TEXT_NODE)
405- return xmlNodeGetContent (n);
406-
407- return NULL;
408-}
409-
410-static xmlNodePtr
411-find_dialup_interface_node (xmlNodePtr root)
412-{
413- xmlNodePtr node;
414- gchar *type;
415-
416- node = find_first_element (root, "interface");
417-
418- while (node)
419- {
420- type = (char *) element_get_attribute (node, "type");
421-
422- if (type && (strcmp (type, "modem") == 0 || strcmp (type, "isdn") == 0))
423- {
424- g_free (type);
425- return node;
426- }
427-
428- g_free (type);
429- node = find_next_element (node, "interface");
430- }
431-
432- return NULL;
433-}
434-
435-/* backend communication functions */
436-static gchar *
437-compose_directive_string (GSList *directive)
438-{
439- GString *dir;
440- gchar *arg, *s, *str;
441- GSList *elem;
442-
443- elem = directive;
444- dir = g_string_new ("");
445-
446- while (elem)
447- {
448- arg = elem->data;
449-
450- for (s = arg; *s; s++)
451- {
452- /* escape needed chars */
453- if ((*s == '\\') ||
454- ((*s == ':') && (* (s + 1) == ':')))
455- g_string_append_c (dir, '\\');
456-
457- g_string_append_c (dir, *s);
458- }
459-
460- g_string_append (dir, "::");
461- elem = elem->next;
462- }
463-
464- g_string_append_c (dir, '\n');
465-
466- str = dir->str;
467- g_string_free (dir, FALSE);
468-
469- return str;
470-}
471-
472-static void
473-poll_backend (ModemAppletPrivate *priv)
474-{
475- struct pollfd fd;
476-
477- fd.fd = priv->read_fd;
478- fd.events = POLLIN || POLLPRI;
479-
480- while (poll (&fd, 1, 100) <= 0)
481- {
482- while (gtk_events_pending ())
483- gtk_main_iteration ();
484- }
485-}
486-
487-static xmlDoc*
488-read_xml (ModemApplet *applet, gboolean show_report)
489-{
490- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
491- gchar buffer[BUF_SIZE], *s;
492- GString *str;
493- xmlDoc *doc = NULL;
494- gboolean backend_alive;
495-
496- str = g_string_new ("");
497- backend_alive = (waitpid (priv->pid, NULL, WNOHANG) == 0);
498-
499- /* if show_report, create pulse timeout and show window */
500- if (show_report)
501- {
502- priv->progress_id = gtk_timeout_add (200, (GSourceFunc) pulse_progressbar, priv->report_window_progress);
503- gtk_window_set_screen (GTK_WINDOW (priv->report_window), gtk_widget_get_screen (GTK_WIDGET (applet)));
504- gtk_widget_show (priv->report_window);
505- }
506-
507- while (backend_alive && !g_strrstr (str->str, END_OF_REQUEST))
508- {
509- poll_backend (priv);
510- fgets (buffer, BUF_SIZE, priv->read_stream);
511- g_string_append (str, buffer);
512-
513- while (gtk_events_pending ())
514- gtk_main_iteration ();
515-
516- backend_alive = (waitpid (priv->pid, NULL, WNOHANG) == 0);
517- }
518-
519- /* if show_report, hide window and so */
520- if (show_report)
521- {
522- g_source_remove (priv->progress_id);
523- priv->progress_id = 0;
524- gtk_widget_hide (priv->report_window);
525- }
526-
527- s = str->str;
528-
529- while (*s && (*s != '<'))
530- s++;
531-
532- if (strcmp (s, END_OF_REQUEST) != 0)
533- doc = xmlParseDoc ((xmlChar *) s);
534-
535- g_string_free (str, TRUE);
536-
537- return doc;
538-}
539-
540-static void
541-queue_directive (ModemApplet *applet,
542- DirectiveCallback callback,
543- gboolean show_report,
544- const gchar *dir,
545- ...)
546-{
547- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
548- BackendDirective *directive;
549- GSList *list = NULL;
550- va_list ap;
551- gchar *arg;
552-
553- list = g_slist_prepend (list, g_strdup (dir));
554- va_start (ap, dir);
555-
556- while ((arg = va_arg (ap, gchar *)) != NULL)
557- list = g_slist_prepend (list, g_strdup (arg));
558-
559- va_end (ap);
560- list = g_slist_reverse (list);
561-
562- directive = g_new0 (BackendDirective, 1);
563- directive->callback = callback;
564- directive->directive = list;
565- directive->show_report = show_report;
566-
567- priv->directives = g_slist_append (priv->directives, directive);
568-}
569-
570-static gboolean
571-dispatch_directives (ModemApplet *applet)
572-{
573- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
574- BackendDirective *directive;
575- xmlDoc *doc;
576- gchar *dir;
577- GSList *elem;
578-
579- if (priv->directive_running)
580- return TRUE;
581-
582- priv->directive_running = TRUE;
583- elem = priv->directives;
584-
585- while (elem)
586- {
587- directive = elem->data;
588-
589- dir = compose_directive_string (directive->directive);
590- fputs (dir, priv->write_stream);
591- g_free (dir);
592-
593- doc = read_xml (applet, directive->show_report);
594-
595- if (directive->callback)
596- directive->callback (applet, doc);
597-
598- if (doc)
599- xmlFreeDoc (doc);
600-
601- g_slist_foreach (directive->directive, (GFunc) g_free, NULL);
602- g_slist_free (directive->directive);
603-
604- elem = elem->next;
605- }
606-
607- g_slist_foreach (priv->directives, (GFunc) g_free, NULL);
608- g_slist_free (priv->directives);
609- priv->directives = NULL;
610- priv->directive_running = FALSE;
611-
612- return TRUE;
613-}
614-
615-static void
616-shutdown_backend (ModemApplet *applet, gboolean backend_alive, gboolean already_waiting)
617-{
618- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
619-
620- if (priv->info_id)
621- {
622- g_source_remove (priv->info_id);
623- priv->info_id = 0;
624- }
625-
626- if (priv->timeout_id)
627- {
628- g_source_remove (priv->timeout_id);
629- priv->timeout_id = 0;
630- }
631-
632- if (priv->tooltip_id)
633- {
634- g_source_remove (priv->tooltip_id);
635- priv->tooltip_id = 0;
636- }
637-
638- if (backend_alive)
639- kill (priv->pid, 9);
640-
641- if (!already_waiting)
642- {
643- /* don't leave zombies */
644- while (waitpid (priv->pid, NULL, WNOHANG) <= 0)
645- {
646- usleep (2000);
647-
648- while (gtk_events_pending ())
649- gtk_main_iteration ();
650- }
651- }
652-
653- /* close remaining streams and fds */
654- fclose (priv->read_stream);
655- fclose (priv->write_stream);
656- close (priv->read_fd);
657- close (priv->write_fd);
658-}
659-
660-/* functions for extracting the interface information from the XML */
661 static void
662 update_popup_buttons (ModemApplet *applet)
663 {
664 BonoboUIComponent *component;
665 ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
666+ gboolean enabled;
667
668 component = panel_applet_get_popup_component (PANEL_APPLET (applet));
669+ enabled = (priv->iface && oobs_iface_get_active (priv->iface));
670
671 bonobo_ui_component_set_prop (component,
672 "/commands/Activate",
673- "sensitive", (priv->configured && !priv->enabled) ? "1" : "0",
674+ "sensitive", (enabled) ? "1" : "0",
675 NULL);
676 bonobo_ui_component_set_prop (component,
677 "/commands/Deactivate",
678- "sensitive", (priv->configured && priv->enabled) ? "1" : "0",
679+ "sensitive", (enabled) ? "1" : "0",
680 NULL);
681 }
682
683-static void
684-get_interface_data (ModemApplet *applet, xmlNodePtr iface)
685-{
686- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
687- xmlNodePtr configuration;
688- gchar *text, *device;
689-
690- g_return_if_fail (iface != NULL);
691-
692- text = (char *) element_get_child_content (iface, "enabled");
693- priv->enabled = (*text == '1');
694- g_free (text);
695-
696- g_free (priv->dev);
697- priv->dev = (char *) element_get_child_content (iface, "dev");
698-
699- g_free (priv->lock_file);
700- configuration = find_first_element (iface, "configuration");
701-
702- if (configuration)
703- {
704- priv->configured = TRUE;
705- text = (char *) element_get_child_content (configuration, "serial_port");
706-
707- if (text)
708- {
709- /* Modem device */
710- device = strrchr (text, '/');
711- priv->lock_file = g_strdup_printf ("/var/lock/LCK..%s", device + 1);
712- g_free (text);
713-
714- priv->is_isdn = FALSE;
715- }
716- else
717- {
718- /* isdn device */
719- priv->lock_file = g_strdup ("/var/lock/LCK..capi_0");
720- priv->is_isdn = TRUE;
721- }
722- }
723- else
724- {
725- priv->lock_file = NULL;
726- priv->configured = FALSE;
727- }
728-}
729-
730 static gint
731 get_connection_time (const gchar *lock_file)
732 {
733@@ -725,30 +324,30 @@
734 gchar *text;
735 gint t, t1, t2;
736
737- if (priv->enabled)
738+ if (!priv->lock_file)
739+ text = g_strdup (_("Could not get connection time"));
740+ else
741 {
742- if (!priv->lock_file)
743- text = g_strdup (_("Connection active, but could not get connection time"));
744+ t = get_connection_time (priv->lock_file);
745+
746+ if (t == 0)
747+ text = g_strdup (_("Not connected"));
748 else
749 {
750- t = get_connection_time (priv->lock_file);
751-
752- if (t < (60 * 60 * 24))
753- {
754- t1 = t / 3600; /* hours */
755- t2 = (t - (t1 * 3600)) / 60; /* minutes */
756- }
757- else
758- {
759- t1 = t / (3600 * 24); /* days */
760- t2 = (t - (t1 * 3600 * 24)) / 3600; /* hours */
761- }
762-
763+ if (t < (60 * 60 * 24))
764+ {
765+ t1 = t / 3600; /* hours */
766+ t2 = (t - (t1 * 3600)) / 60; /* minutes */
767+ }
768+ else
769+ {
770+ t1 = t / (3600 * 24); /* days */
771+ t2 = (t - (t1 * 3600 * 24)) / 3600; /* hours */
772+ }
773+
774 text = g_strdup_printf (_("Time connected: %.1d:%.2d"), t1, t2);
775 }
776 }
777- else
778- text = g_strdup (_("Not connected"));
779
780 gtk_tooltips_set_tip(priv->tooltips, GTK_WIDGET (applet), text, NULL);
781 g_free(text);
782@@ -756,165 +355,8 @@
783 return TRUE;
784 }
785
786-static void
787-rerun_backend_callback (ModemApplet *applet, xmlDoc *doc)
788-{
789- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
790- gchar *text, *password;
791- gint response;
792- gboolean enable;
793-
794- shutdown_backend (applet, FALSE, FALSE);
795- launch_backend (applet, TRUE);
796-
797- enable = !priv->enabled;
798-
799- text = (enable) ?
800- _("To connect to your Internet service provider, you need administrator privileges") :
801- _("To disconnect from your Internet service provider, you need administrator privileges");
802-
803- gtk_label_set_text (GTK_LABEL (priv->auth_dialog_label), text);
804- gtk_window_set_screen (GTK_WINDOW (priv->auth_dialog),
805- gtk_widget_get_screen (GTK_WIDGET (applet)));
806-
807- gtk_widget_grab_focus (priv->auth_dialog_entry);
808- response = gtk_dialog_run (GTK_DIALOG (priv->auth_dialog));
809- gtk_widget_hide (priv->auth_dialog);
810- password = (gchar *) gtk_entry_get_text (GTK_ENTRY (priv->auth_dialog_entry));
811-
812- if (response == GTK_RESPONSE_OK)
813- {
814-
815- password = (gchar *) gtk_entry_get_text (GTK_ENTRY (priv->auth_dialog_entry));
816- fputs (password, priv->write_stream);
817- fputs ("\n", priv->write_stream);
818-
819- while (fflush (priv->write_stream) != 0);
820-
821- queue_directive (applet, NULL, enable,
822- "enable_iface", priv->dev, (enable) ? "1" : "0", NULL);
823- }
824- else
825- {
826- shutdown_backend (applet, TRUE, FALSE);
827- launch_backend (applet, FALSE);
828- }
829-
830- /* stab the root password */
831- memset (password, ' ', sizeof (password));
832- gtk_entry_set_text (GTK_ENTRY (priv->auth_dialog_entry), "");
833-}
834-
835-static void
836-update_info_callback (ModemApplet *applet, xmlDoc *doc)
837-{
838- xmlNodePtr iface;
839-
840- if (!doc)
841- return;
842-
843- iface = find_dialup_interface_node (get_root_node (doc));
844- if (!iface)
845- return;
846-
847- get_interface_data (applet, iface);
848- update_popup_buttons (applet);
849-}
850-
851 static gboolean
852-update_info (ModemApplet *applet)
853-{
854- queue_directive (applet, update_info_callback,
855- FALSE, "get", NULL);
856- return TRUE;
857-}
858-
859-static gboolean
860-check_backend (ModemApplet *applet)
861-{
862- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
863- gint status, pid = -1;
864- GtkWidget *dialog;
865-
866- pid = waitpid (priv->pid, &status, WNOHANG);
867-
868- if (pid != 0)
869- {
870- if (errno == ECHILD || ((WIFEXITED (status)) && (WEXITSTATUS (status)) && (WEXITSTATUS(status) < 255)))
871- {
872- dialog = gtk_message_dialog_new (NULL,
873- GTK_DIALOG_MODAL,
874- GTK_MESSAGE_WARNING,
875- GTK_BUTTONS_CLOSE,
876- _("The entered password is invalid"));
877- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
878- _("Check that you have typed it correctly and that "
879- "you haven't activated the \"caps lock\" key"));
880- gtk_dialog_run (GTK_DIALOG (dialog));
881- gtk_widget_destroy (dialog);
882- }
883-
884- priv->timeout_id = 0;
885- shutdown_backend (applet, FALSE, TRUE);
886- launch_backend (applet, FALSE);
887-
888- return FALSE;
889- }
890-
891- return TRUE;
892-}
893-
894-static void
895-launch_backend (ModemApplet *applet, gboolean root_auth)
896-{
897- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
898- gchar *non_auth_args[] = { STB_SCRIPTS_DIR "/network-conf", NULL };
899- gchar *auth_args[] = { SU_PATH, "-c", STB_SCRIPTS_DIR "/network-conf", NULL };
900- gchar **args;
901- int p[2];
902-
903- pipe (p);
904- priv->pid = forkpty (&priv->write_fd, NULL, NULL, NULL);
905- args = (root_auth) ? auth_args : non_auth_args;
906-
907- if (priv->pid < 0)
908- g_warning ("Could not spawn GST backend");
909- else
910- {
911- if (priv->pid == 0)
912- {
913- /* child process */
914- unsetenv("LC_ALL");
915- unsetenv("LC_MESSAGES");
916- unsetenv("LANG");
917- unsetenv("LANGUAGE");
918-
919- dup2 (p[1], 1);
920- dup2 (p[1], 2);
921- close (p[0]);
922-
923- execv (args[0], args);
924- exit (255);
925- }
926- else
927- {
928- close (p[1]);
929-
930- priv->read_fd = p[0];
931- priv->timeout_id = g_timeout_add (1000, (GSourceFunc) check_backend, applet);
932- priv->info_id = g_timeout_add (2500, (GSourceFunc) update_info, applet);
933- priv->read_stream = fdopen (priv->read_fd, "r");
934- priv->write_stream = fdopen (priv->write_fd, "w");
935- priv->has_root = root_auth;
936-
937- setvbuf (priv->read_stream, NULL, _IONBF, 0);
938- fcntl (priv->read_fd, F_SETFL, 0);
939- }
940- }
941-}
942-
943-static gboolean
944-launch_config_tool (GdkScreen *screen, gboolean is_isdn)
945+launch_config_tool (GdkScreen *screen, OobsIface *iface)
946 {
947 gchar *argv[4], *application;
948 gboolean ret;
949@@ -925,8 +367,8 @@
950 return FALSE;
951
952 argv[0] = application;
953- argv[1] = "--configure-type";
954- argv[2] = (is_isdn) ? "isdn" : "modem";
955+ argv[1] = "--configure";
956+ argv[2] = (gchar*) oobs_iface_get_device_name (iface);
957 argv[3] = NULL;
958
959 ret = gdk_spawn_on_screen (screen, NULL, argv, NULL, 0,
960@@ -935,52 +377,48 @@
961 return ret;
962 }
963
964-static void
965-toggle_interface_non_root (ModemApplet *applet, gboolean enable)
966+static gboolean
967+pulse_progressbar (GtkProgressBar *progressbar)
968 {
969- queue_directive (applet, rerun_backend_callback,
970- FALSE, "end", NULL);
971+ gtk_progress_bar_pulse (progressbar);
972+ return TRUE;
973 }
974
975 static void
976-toggle_interface_root (ModemApplet *applet, gboolean enable)
977+show_report_window (ModemApplet *applet)
978 {
979- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
980- GtkWidget *dialog;
981- gchar *text;
982+ ModemAppletPrivate *priv;
983
984- text = (enable) ?
985- _("Do you want to connect?") :
986- _("Do you want to disconnect?");
987-
988- dialog = gtk_message_dialog_new (NULL,
989- GTK_DIALOG_MODAL,
990- GTK_MESSAGE_QUESTION,
991- GTK_BUTTONS_NONE,
992- text);
993- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
994- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
995- (enable) ? _("C_onnect") : _("_Disconnect"),
996- GTK_RESPONSE_OK, NULL);
997- gtk_window_set_screen (GTK_WINDOW (dialog),
998- gtk_widget_get_screen (GTK_WIDGET (applet)));
999-
1000- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
1001- queue_directive (applet, NULL, enable,
1002- "enable_iface", priv->dev, (enable) ? "1" : "0", NULL);
1003+ priv = MODEM_APPLET_GET_PRIVATE (applet);
1004+ gtk_widget_show (priv->report_window);
1005+ priv->pulse_id = g_timeout_add (300, (GSourceFunc) pulse_progressbar, priv->report_window_progress);
1006+}
1007+
1008+static void
1009+hide_report_window (ModemApplet *applet)
1010+{
1011+ ModemAppletPrivate *priv;
1012
1013- gtk_widget_destroy (dialog);
1014+ priv = MODEM_APPLET_GET_PRIVATE (applet);
1015+ gtk_widget_hide (priv->report_window);
1016+
1017+ if (priv->pulse_id != 0)
1018+ {
1019+ g_source_remove (priv->pulse_id);
1020+ priv->pulse_id = 0;
1021+ }
1022 }
1023
1024 static void
1025-toggle_interface (ModemApplet *applet, gboolean enable)
1026+on_config_committed (OobsObject *object,
1027+ OobsResult result,
1028+ gpointer data)
1029 {
1030- ModemAppletPrivate *priv = MODEM_APPLET_GET_PRIVATE (applet);
1031+ ModemApplet *applet = MODEM_APPLET (data);
1032
1033- if (priv->has_root)
1034- toggle_interface_root (applet, enable);
1035- else
1036- toggle_interface_non_root (applet, enable);
1037+ hide_report_window (applet);
1038+ gtk_widget_set_sensitive (GTK_WIDGET (applet), FALSE);
1039+ update_popup_buttons (applet);
1040 }
1041
1042 static void
1043@@ -988,7 +426,14 @@
1044 ModemApplet *applet,
1045 const gchar *verb)
1046 {
1047- toggle_interface (applet, TRUE);
1048+ ModemAppletPrivate *priv;
1049+
1050+ gtk_widget_set_sensitive (GTK_WIDGET (applet), FALSE);
1051+ show_report_window (applet);
1052+
1053+ priv = MODEM_APPLET_GET_PRIVATE (applet);
1054+ oobs_iface_set_active (priv->iface, TRUE);
1055+ oobs_object_commit_async (priv->config, on_config_committed, applet);
1056 }
1057
1058 static void
1059@@ -996,7 +441,12 @@
1060 ModemApplet *applet,
1061 const gchar *verb)
1062 {
1063- toggle_interface (applet, FALSE);
1064+ ModemAppletPrivate *priv;
1065+
1066+ priv = MODEM_APPLET_GET_PRIVATE (applet);
1067+ oobs_iface_set_active (priv->iface, FALSE);
1068+ gtk_widget_set_sensitive (GTK_WIDGET (applet), FALSE);
1069+ oobs_object_commit_async (priv->config, on_config_committed, applet);
1070 }
1071
1072 static void
1073@@ -1010,7 +460,7 @@
1074
1075 screen = gtk_widget_get_screen (GTK_WIDGET (applet));
1076
1077- if (!launch_config_tool (screen, priv->is_isdn))
1078+ if (!launch_config_tool (screen, priv->iface))
1079 {
1080 dialog = gtk_message_dialog_new (NULL,
1081 GTK_DIALOG_DESTROY_WITH_PARENT,
1082diff -urN gnome-applets-2.18.0/modemlights/modemlights.glade gnome-applets-2.18.0.new/modemlights/modemlights.glade
1083--- gnome-applets-2.18.0/modemlights/modemlights.glade 2006-12-31 03:16:08.000000000 +0100
1084+++ gnome-applets-2.18.0.new/modemlights/modemlights.glade 2007-06-10 13:08:15.000000000 +0200
1085@@ -2,222 +2,6 @@
1086 <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
1087
1088 <glade-interface>
1089-<requires lib="gnome"/>
1090-
1091-<widget class="GtkDialog" id="auth_dialog">
1092- <property name="title" translatable="yes">Enter password</property>
1093- <property name="type">GTK_WINDOW_TOPLEVEL</property>
1094- <property name="window_position">GTK_WIN_POS_CENTER</property>
1095- <property name="modal">True</property>
1096- <property name="resizable">False</property>
1097- <property name="destroy_with_parent">False</property>
1098- <property name="decorated">True</property>
1099- <property name="skip_taskbar_hint">False</property>
1100- <property name="skip_pager_hint">False</property>
1101- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
1102- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
1103- <property name="has_separator">False</property>
1104-
1105- <child internal-child="vbox">
1106- <widget class="GtkVBox" id="dialog-vbox1">
1107- <property name="visible">True</property>
1108- <property name="homogeneous">False</property>
1109- <property name="spacing">0</property>
1110-
1111- <child internal-child="action_area">
1112- <widget class="GtkHButtonBox" id="dialog-action_area1">
1113- <property name="visible">True</property>
1114- <property name="layout_style">GTK_BUTTONBOX_END</property>
1115-
1116- <child>
1117- <widget class="GtkButton" id="cancelbutton1">
1118- <property name="visible">True</property>
1119- <property name="can_default">True</property>
1120- <property name="can_focus">True</property>
1121- <property name="label">gtk-cancel</property>
1122- <property name="use_stock">True</property>
1123- <property name="relief">GTK_RELIEF_NORMAL</property>
1124- <property name="focus_on_click">True</property>
1125- <property name="response_id">-6</property>
1126- </widget>
1127- </child>
1128-
1129- <child>
1130- <widget class="GtkButton" id="okbutton1">
1131- <property name="visible">True</property>
1132- <property name="can_default">True</property>
1133- <property name="has_default">True</property>
1134- <property name="can_focus">True</property>
1135- <property name="label">gtk-ok</property>
1136- <property name="use_stock">True</property>
1137- <property name="relief">GTK_RELIEF_NORMAL</property>
1138- <property name="focus_on_click">True</property>
1139- <property name="response_id">-5</property>
1140- </widget>
1141- </child>
1142- </widget>
1143- <packing>
1144- <property name="padding">0</property>
1145- <property name="expand">False</property>
1146- <property name="fill">True</property>
1147- <property name="pack_type">GTK_PACK_END</property>
1148- </packing>
1149- </child>
1150-
1151- <child>
1152- <widget class="GtkHBox" id="hbox1">
1153- <property name="border_width">7</property>
1154- <property name="visible">True</property>
1155- <property name="homogeneous">False</property>
1156- <property name="spacing">12</property>
1157-
1158- <child>
1159- <widget class="GtkImage" id="image1">
1160- <property name="visible">True</property>
1161- <property name="stock">gnome-stock-authentication</property>
1162- <property name="icon_size">6</property>
1163- <property name="xalign">0</property>
1164- <property name="yalign">0</property>
1165- <property name="xpad">0</property>
1166- <property name="ypad">0</property>
1167- </widget>
1168- <packing>
1169- <property name="padding">0</property>
1170- <property name="expand">False</property>
1171- <property name="fill">False</property>
1172- </packing>
1173- </child>
1174-
1175- <child>
1176- <widget class="GtkVBox" id="vbox1">
1177- <property name="visible">True</property>
1178- <property name="homogeneous">False</property>
1179- <property name="spacing">6</property>
1180-
1181- <child>
1182- <widget class="GtkLabel" id="label1">
1183- <property name="visible">True</property>
1184- <property name="label" translatable="yes">&lt;span weight=&quot;bold&quot; size=&quot;larger&quot;&gt;Root password required&lt;/span&gt;</property>
1185- <property name="use_underline">False</property>
1186- <property name="use_markup">True</property>
1187- <property name="justify">GTK_JUSTIFY_LEFT</property>
1188- <property name="wrap">False</property>
1189- <property name="selectable">False</property>
1190- <property name="xalign">0</property>
1191- <property name="yalign">0.5</property>
1192- <property name="xpad">0</property>
1193- <property name="ypad">0</property>
1194- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
1195- <property name="width_chars">-1</property>
1196- <property name="single_line_mode">False</property>
1197- <property name="angle">0</property>
1198- </widget>
1199- <packing>
1200- <property name="padding">0</property>
1201- <property name="expand">False</property>
1202- <property name="fill">False</property>
1203- </packing>
1204- </child>
1205-
1206- <child>
1207- <widget class="GtkLabel" id="auth_dialog_label">
1208- <property name="visible">True</property>
1209- <property name="can_focus">True</property>
1210- <property name="label" translatable="yes"></property>
1211- <property name="use_underline">False</property>
1212- <property name="use_markup">False</property>
1213- <property name="justify">GTK_JUSTIFY_LEFT</property>
1214- <property name="wrap">True</property>
1215- <property name="selectable">True</property>
1216- <property name="xalign">0</property>
1217- <property name="yalign">0.5</property>
1218- <property name="xpad">0</property>
1219- <property name="ypad">0</property>
1220- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
1221- <property name="width_chars">-1</property>
1222- <property name="single_line_mode">False</property>
1223- <property name="angle">0</property>
1224- </widget>
1225- <packing>
1226- <property name="padding">0</property>
1227- <property name="expand">False</property>
1228- <property name="fill">False</property>
1229- </packing>
1230- </child>
1231-
1232- <child>
1233- <widget class="GtkHBox" id="hbox2">
1234- <property name="visible">True</property>
1235- <property name="homogeneous">False</property>
1236- <property name="spacing">12</property>
1237-
1238- <child>
1239- <widget class="GtkLabel" id="label3">
1240- <property name="visible">True</property>
1241- <property name="label" translatable="yes">Password:</property>
1242- <property name="use_underline">False</property>
1243- <property name="use_markup">False</property>
1244- <property name="justify">GTK_JUSTIFY_LEFT</property>
1245- <property name="wrap">False</property>
1246- <property name="selectable">False</property>
1247- <property name="xalign">0.5</property>
1248- <property name="yalign">0.5</property>
1249- <property name="xpad">0</property>
1250- <property name="ypad">0</property>
1251- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
1252- <property name="width_chars">-1</property>
1253- <property name="single_line_mode">False</property>
1254- <property name="angle">0</property>
1255- </widget>
1256- <packing>
1257- <property name="padding">0</property>
1258- <property name="expand">False</property>
1259- <property name="fill">False</property>
1260- </packing>
1261- </child>
1262-
1263- <child>
1264- <widget class="GtkEntry" id="auth_dialog_entry">
1265- <property name="visible">True</property>
1266- <property name="can_focus">True</property>
1267- <property name="editable">True</property>
1268- <property name="visibility">False</property>
1269- <property name="max_length">0</property>
1270- <property name="text" translatable="yes"></property>
1271- <property name="has_frame">True</property>
1272- <property name="invisible_char">*</property>
1273- <property name="activates_default">True</property>
1274- </widget>
1275- <packing>
1276- <property name="padding">0</property>
1277- <property name="expand">True</property>
1278- <property name="fill">True</property>
1279- </packing>
1280- </child>
1281- </widget>
1282- <packing>
1283- <property name="padding">0</property>
1284- <property name="expand">False</property>
1285- <property name="fill">False</property>
1286- </packing>
1287- </child>
1288- </widget>
1289- <packing>
1290- <property name="padding">0</property>
1291- <property name="expand">True</property>
1292- <property name="fill">True</property>
1293- </packing>
1294- </child>
1295- </widget>
1296- <packing>
1297- <property name="padding">0</property>
1298- <property name="expand">False</property>
1299- <property name="fill">False</property>
1300- </packing>
1301- </child>
1302- </widget>
1303- </child>
1304-</widget>
1305
1306 <widget class="GtkWindow" id="report_window">
1307 <property name="title" translatable="yes"></property>
1308@@ -231,6 +15,8 @@
1309 <property name="skip_pager_hint">False</property>
1310 <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
1311 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
1312+ <property name="focus_on_map">True</property>
1313+ <property name="urgency_hint">False</property>
1314
1315 <child>
1316 <widget class="GtkHBox" id="hbox3">
This page took 0.2338 seconds and 4 git commands to generate.