Mailinglist Archive: opensuse-commit (1942 mails)
| < Previous | Next > |
commit umtsmon
- From: root@xxxxxxxxxxxxxxx (h_root)
- Date: Tue, 18 Nov 2008 13:47:44 +0100
- Message-id: <20081118124744.4CE2A678164@xxxxxxxxxxxxxxx>
Hello community,
here is the log from the commit of package umtsmon
checked in at Tue Nov 18 13:47:43 CET 2008.
--------
--- umtsmon/umtsmon.changes 2008-11-10 12:13:31.000000000 +0100
+++ /mounts/work_src_done/STABLE/umtsmon/umtsmon.changes 2008-11-17
08:35:06.000000000 +0100
@@ -1,0 +2,7 @@
+Mon Nov 17 08:30:44 CET 2008 - seife@xxxxxxx
+
+- update to current CVS
+ - implement autoconnect option
+ - small i18n fixes
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
umtsmon-0.9.51.20081029.tar.bz2
New:
----
umtsmon-0.9.51.20081117.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ umtsmon.spec ++++++
--- /var/tmp/diff_new_pack.j10313/_old 2008-11-18 13:47:24.000000000 +0100
+++ /var/tmp/diff_new_pack.j10313/_new 2008-11-18 13:47:24.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package umtsmon (Version 0.9.51.20081029)
+# spec file for package umtsmon (Version 0.9.51.20081117)
#
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -23,9 +23,9 @@
# not there on mandriva and fedora...
BuildRequires: qt3-devel-tools update-desktop-files
%endif
-Version: 0.9.51.20081029
+Version: 0.9.51.20081117
Release: 1
-%define DATE 20081029
+%define DATE 20081117
Summary: Control/monitor your UMTS card
License: GPL v2 or later
Group: Hardware/Mobile
@@ -85,6 +85,10 @@
rm -rf %{buildroot}
%changelog
+* Mon Nov 17 2008 seife@xxxxxxx
+- update to current CVS
+ - implement autoconnect option
+ - small i18n fixes
* Mon Nov 10 2008 seife@xxxxxxx
- update to current CVS
- updated spanish translation
++++++ umtsmon-0.9.51.20081029.tar.bz2 -> umtsmon-0.9.51.20081117.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn
--exclude=.svnignore old/umtsmon/main.cpp new/umtsmon/main.cpp
--- old/umtsmon/main.cpp 2008-11-10 11:52:01.000000000 +0100
+++ new/umtsmon/main.cpp 2008-11-17 08:29:04.000000000 +0100
@@ -42,6 +42,9 @@
static const int MAXLONGCOMMANDSIZE = 20;
static const int MAXSHORTCOMMANDSIZE = 4;
+const char* theLanguageSetting = "/General/Language";
+const char* theGeneralAutoConnectSettingName = "/General/Autoconnect";
+
struct s_args
{
char theFullCommand [MAXLONGCOMMANDSIZE];
@@ -65,6 +68,19 @@
return true;
}
+static bool setAutoConnect(__attribute__ ((unused)) char* anArgument)
+{
+ DEBUG5("setautoconnect\n");
+
TheSettingsSingleton::getQSRef().writeEntry(theGeneralAutoConnectSettingName,
true);
+ return true;
+}
+
+static bool setNoAutoConnect(__attribute__ ((unused)) char* anArgument)
+{
+ DEBUG5("setNOautoconnect\n");
+
TheSettingsSingleton::getQSRef().writeEntry(theGeneralAutoConnectSettingName,
false);
+ return true;
+}
static bool setserial(char* anArgument)
{
@@ -149,6 +165,8 @@
printf(" --verbosity <lvl>[,ppplvl] set verbosity, 1=little (default),
%d=all\n", MAX_VERBOSITY);
printf(" -v <lvl>[,ppplvl] set verbosity\n");
printf(" --language <locale> set the language, e.g. nl or pt_BR\n");
+ printf(" --autoconnect set autoconnect to true (persistant!)");
+ printf(" --no-autoconnect set autoconnect to false (persistant!)");
printf("\n");
exit(1);
}
@@ -156,11 +174,14 @@
static struct s_args theArgsTable[] =
{
+// long, short, has args, function name
{ "--help", "-h", false, help, },
{ "--serial", "-s", true, setserial, },
{ "--verbosity", "-v", true, setVerbosity, },
{ "--force-autodetect", "", false, setForceAutodetection, },
{ "--language", "", true, setLocale, },
+ { "--autoconnect", "", false, setAutoConnect, },
+ { "--no-autoconnect", "", false, setNoAutoConnect, },
// keep this one last
{ "\0", "\0", false, NULL, },
};
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn
--exclude=.svnignore old/umtsmon/mainwindow.ui new/umtsmon/mainwindow.ui
--- old/umtsmon/mainwindow.ui 2008-11-10 11:52:01.000000000 +0100
+++ new/umtsmon/mainwindow.ui 2008-11-17 08:29:04.000000000 +0100
@@ -113,7 +113,9 @@
<action name="menu_pin_enable"/>
<action name="menu_pin_disable"/>
<separator/>
- <action name="settingsSet_LanguageAction"/>
+ <action name="menu_settings_SetLanguage"/>
+ <separator/>
+ <action name="menu_settings_AutoConnect"/>
</item>
<item text="&Help" name="helpMenu">
<separator/>
@@ -550,15 +552,26 @@
</action>
<action>
<property name="name">
- <cstring>settingsSet_LanguageAction</cstring>
+ <cstring>menu_settings_SetLanguage</cstring>
</property>
<property name="text">
- <string>Set Language</string>
+ <string>Set the language</string>
</property>
<property name="menuText">
<string>Set Language...</string>
</property>
</action>
+ <action>
+ <property name="name">
+ <cstring>menu_settings_AutoConnect</cstring>
+ </property>
+ <property name="text">
+ <string>Automatically connect when network is found</string>
+ </property>
+ <property name="menuText">
+ <string>Autoconnect</string>
+ </property>
+ </action>
</actions>
<connections>
<connection>
@@ -670,10 +683,16 @@
<slot>showRadioPreferences()</slot>
</connection>
<connection>
- <sender>settingsSet_LanguageAction</sender>
+ <sender>menu_settings_SetLanguage</sender>
<signal>activated()</signal>
<receiver>mainwindow</receiver>
- <slot>settingsSet_LanguageAction_activated()</slot>
+ <slot>menu_settings_SetLanguage_activated()</slot>
+ </connection>
+ <connection>
+ <sender>menu_settings_AutoConnect</sender>
+ <signal>activated()</signal>
+ <receiver>mainwindow</receiver>
+ <slot>menu_settings_AutoConnect_activated()</slot>
</connection>
</connections>
<includes>
@@ -693,8 +712,8 @@
<include location="local" impldecl="in
declaration">PPPConnection.h</include>
<include location="local" impldecl="in
implementation">PPPErrorLogsDialog.h</include>
<include location="local" impldecl="in
implementation">radiopreferences.h</include>
- <include location="local" impldecl="in
implementation">mainwindow.ui.h</include>
<include location="local" impldecl="in
declaration">SetLanguageDialog.h</include>
+ <include location="local" impldecl="in
implementation">mainwindow.ui.h</include>
</includes>
<forwards>
<forward>class QTimer;</forward>
@@ -709,6 +728,8 @@
<variable access="private">PPPConnection thePPPConnection;</variable>
<variable access="private">Internationalisation* myI18n;</variable>
<variable access="private">MainWindowPPPObserver*
theMainWindowPPPObserverPtr;</variable>
+ <variable access="private">enum AutoConnectStates {NOTHING_SPECIAL,
USER_CANCELLED, STARTING};</variable>
+ <variable access="private">AutoConnectStates
theAutoConnectState;</variable>
</variables>
<slots>
<slot>showAboutDialog()</slot>
@@ -725,15 +746,16 @@
<slot>showProfileDialog()</slot>
<slot>showNetworkOperatorDialog()</slot>
<slot>showRadioPreferences()</slot>
- <slot>settingsSet_LanguageAction_activated()</slot>
+ <slot>menu_settings_SetLanguage_activated()</slot>
+ <slot>menu_settings_AutoConnect_activated()</slot>
</slots>
<functions>
<function access="private" specifier="non virtual">init()</function>
<function>newPPPState( PPPObserverInterface::PPPDState aNewState
)</function>
- <function access="public">setI18nRef( Internationalisation& anI18nRef
)</function>
- <function access="private" specifier="non virtual"
returnType="bool">checkRegistered()</function>
+ <function access="private" specifier="non virtual"
returnType="bool">checkRegistered(bool isShowPopups=true)</function>
<function access="private" specifier="non virtual"
returnType="bool">ifATPortAvailableRunExec( QDialog * aDialogToExecPtr
)</function>
<function access="private" specifier="non virtual"
returnType="bool">ifPPPInactiveRunExec( QDialog * aDialogToExecPtr )</function>
+ <function>setI18nRef( Internationalisation& anI18nRef )</function>
</functions>
<pixmapinproject/>
<layoutdefaults spacing="6" margin="11"/>
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn
--exclude=.svnignore old/umtsmon/mainwindow.ui.h new/umtsmon/mainwindow.ui.h
--- old/umtsmon/mainwindow.ui.h 2008-11-10 11:52:01.000000000 +0100
+++ new/umtsmon/mainwindow.ui.h 2008-11-17 08:29:04.000000000 +0100
@@ -45,6 +45,8 @@
// time between two refreshes in seconds
#define SEC_REFRESH 3
+// it's actually defined in main.cpp
+extern const char* theGeneralAutoConnectSettingName;
/** this class contains the observer for the PPPConnection
@@ -69,6 +71,7 @@
void mainwindow::init()
{
myRefreshTimer = NULL;
+ theAutoConnectState=NOTHING_SPECIAL;
setCaption("UMTSmon");
menu_help_about->setMenuText("&About " APPNAME );
@@ -107,7 +110,10 @@
theMainWindowPPPObserverPtr = new MainWindowPPPObserver(this);
thePPPConnection.attach(theMainWindowPPPObserverPtr);
-
+
+ // the autoconnect item is a toggle one
+ menu_settings_AutoConnect->setToggleAction(true);
+
menu_settings_AutoConnect->setOn(TheSettingsSingleton::getQSRef().readBoolEntry(theGeneralAutoConnectSettingName,
false));
}
@@ -347,9 +353,27 @@
if (theVisualCounter >4)
theVisualCounter = 0;
}
-
-
}
+
+ // if we have autoconnect enabled and:
+ // 1) the connect button is enabled (i.e. we're allowed to start
connecting)
+ // 2) the user hasn't cancelled a connection yet
+ // 3) we are actually registered
+ // let's autoconnect
+ if (menu_connection_connect->isEnabled()
+ && theAutoConnectState == NOTHING_SPECIAL
+ &&
TheSettingsSingleton::getQSRef().readBoolEntry(theGeneralAutoConnectSettingName,
false))
+ {
+ // don't show warnings if not registered
+ if (checkRegistered(false))
+ {
+ DEBUG2("Autoconnect just clicked the connect button
:-)\n");
+ emit ConnectPPP();
+ }
+ else
+ DEBUG5("Autoconnect not allowed - not registered yet...
\n");
+ }
+
}
@@ -450,12 +474,16 @@
bool mainwindow::DisconnectPPP()
{
DEBUG4("umtsmonmain::DisconnectPPP\n");
+
+ // user pressed cancel - make sure autoconnect won't work again!
+ theAutoConnectState = USER_CANCELLED;
thePPPConnection.stopPPP();
emit updateNetworkData();
+
return true;
}
-bool mainwindow::checkRegistered()
+bool mainwindow::checkRegistered(bool isShowPopups)
{
// ask a ConnectionInfo if we are operator connected already
ConnectionInfo* myCIPtr =
TheDeviceManagerSingleton::getConnectionInfoPtr();
@@ -466,14 +494,16 @@
if (myCIPtr->isSearching()==true)
{
- Popup::Info("There is no connection with a mobile network
yet.\n"
- "Please wait a few more seconds. If the problem
remains,"
- "try selecting another network operator.");
+ if (isShowPopups)
+ Popup::Info("There is no connection with a mobile
network yet.\n"
+ "Please wait a few more seconds. If the problem
remains,"
+ "try selecting another network operator.");
return false;
}
if (!myCIPtr->isDeviceRegistered())
{
- Popup::Warning(tr("You are not connected to a network yet."),
this);
+ if (isShowPopups)
+ Popup::Warning(tr("You are not connected to a network
yet."), this);
return false;
}
@@ -496,6 +526,7 @@
// connection will take time anyway, so better show progress from start
myProgress.start(0);
+ theAutoConnectState = STARTING;
if(thePPPConnection.startPPP()==false)
goto problems;
DEBUG2("thePPPConnection.startPPP() returned without indicating
problems\n");
@@ -509,6 +540,7 @@
}
}
myProgress.finish();
+ theAutoConnectState = NOTHING_SPECIAL;
if (thePPPConnection.hasErrors())
goto problems;
emit updateNetworkData();
@@ -612,7 +644,7 @@
}
-void mainwindow::settingsSet_LanguageAction_activated()
+void mainwindow::menu_settings_SetLanguage_activated()
{
SetLanguageDialog myDialog;
myDialog.setI18nPtr(myI18n);
@@ -623,3 +655,10 @@
{
myI18n = &anI18nRef;
}
+
+
+void mainwindow::menu_settings_AutoConnect_activated()
+{
+
TheSettingsSingleton::getQSRef().writeEntry(theGeneralAutoConnectSettingName,
+ menu_settings_AutoConnect->isOn());
+}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn
--exclude=.svnignore old/umtsmon/src/base/Internationalisation.cpp
new/umtsmon/src/base/Internationalisation.cpp
--- old/umtsmon/src/base/Internationalisation.cpp 2008-11-10
11:52:01.000000000 +0100
+++ new/umtsmon/src/base/Internationalisation.cpp 2008-11-17
08:29:04.000000000 +0100
@@ -29,7 +29,7 @@
#include <assert.h>
#include <stdlib.h>
-static const char* theLanguageSetting = "/I18n/Language";
+extern const char* theLanguageSetting;
bool
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn
--exclude=.svnignore old/umtsmon/src/model/PPPConnection.cpp
new/umtsmon/src/model/PPPConnection.cpp
--- old/umtsmon/src/model/PPPConnection.cpp 2008-11-10 11:52:01.000000000
+0100
+++ new/umtsmon/src/model/PPPConnection.cpp 2008-11-17 08:29:04.000000000
+0100
@@ -38,13 +38,13 @@
static pid_t theRunningPPPDPID = -1;
-// the function to be called by atexit
+// the function to be called by atexit
// to make sure the PPPD daemon is shut down
static void run_at_exit(void)
{
DEBUG5("PPPConnection run_at_exit() called\n");
Runner myRunner;
- int myPID = myRunner.doesPPPDexist();
+ int myPID = myRunner.doesPPPDexist();
if (myPID!=-1)
{
if (thePPPDState != PPPObserverInterface::NOT_OURS_RUNNING)
@@ -72,18 +72,18 @@
atexit(run_at_exit);
signal(SIGINT, run_at_signal);
signal(SIGHUP, run_at_signal);
-
+
theSerialPortName =
TheDeviceManagerSingleton::getDeviceCapsRef().getPPPSerialPortName();
assert(!theSerialPortName.isEmpty());
-
+
// check if AT and PPP are the same device
if (TheDeviceManagerSingleton::getDeviceCapsRef().getATSerialPortName()
== theSerialPortName)
hasOnlyOnePort = true;
-
+
// let's assume the worst
setNewPPPState(PPPObserverInterface::NOT_OURS_RUNNING);
isPPPConnected();
-
+
// for some compatibility stuff, we need the exact version number of
pppd
Runner myRunner;
myRunner.runCommand(Runner::PPPD, "--version");
@@ -91,20 +91,20 @@
int myFirst = myTotalVersionNr.find(QRegExp("\\d"), 0);
int myLast = myTotalVersionNr.find(QRegExp("\\d"), -1);
thePPPVersionNumber = myTotalVersionNr.mid(myFirst,myLast-myFirst+1);
- DEBUG4("pppd version string '%s' results in '%s'.\n",
+ DEBUG4("pppd version string '%s' results in '%s'.\n",
myTotalVersionNr.ascii(),
thePPPVersionNumber.ascii());
-}
+}
-PPPConnection::~PPPConnection(void)
-{
+PPPConnection::~PPPConnection(void)
+{
DEBUG4("PPPConnection::~PPPConnection(void)\n");
- stopPPP();
+ stopPPP();
}
-void
+void
PPPConnection::stopPPP(void)
{
run_at_exit();
@@ -119,13 +119,13 @@
}
-bool
+bool
PPPConnection::isPPPConnected(void)
{
// FIXME: unfortunately, this is a rather expensive operation...
// this can be worked around by checking if we know where to look first
pid_t myPID = Runner::doesPPPDexist();
-
+
switch (thePPPDState)
{
case PPPObserverInterface::ERROR:
@@ -152,7 +152,7 @@
// something went wrong ?!?
setNewPPPState(PPPObserverInterface::STOPPED);
thePPPDStdErr.push_back(APPNAME " internal Error: not
thePPPThreadPtr");
- break;
+ break;
}
if (thePPPThreadPtr->isDone())
{
@@ -161,9 +161,9 @@
if (myPID == theRunningPPPDPID)
{
// euh? finished *and* still running?
- // that means we have a zombie
+ // that means we have a zombie
// - process is dead, we have to reap it...
- myPID = -1;
+ myPID = -1;
}
if (myPID == -1)
{
@@ -218,9 +218,9 @@
}
break;
}
-
+
DEBUG5("The PPPDState is %d\n", thePPPDState);
-
+
// we need the ConnectionInfoInhibitor here if we have only one serial
port
// and we're not in 'stopped'.
// note that PPPThread and startPPP also have CIIs to make sure that we
@@ -244,8 +244,8 @@
}
}
}
-
- if (thePPPDState==PPPObserverInterface::STOPPED
+
+ if (thePPPDState==PPPObserverInterface::STOPPED
|| thePPPDState==PPPObserverInterface::STARTING)
return false;
else
@@ -253,14 +253,14 @@
}
-bool
+bool
PPPConnection::startPPP()
{
// just for this startup, create a Profile - which should be the
currently selected profile
Profile myProfile;
-
+
// just as a precaution, some sanity checks.
- // we will be checking if a PPP connection is already running.
+ // we will be checking if a PPP connection is already running.
// This shouldn't be the case - that's why there is an assert(false).
// however, if this happens in a release build, just return false.
DEBUG3("PPPConnection::startPPP entry\n");
@@ -277,14 +277,14 @@
if (isPPPConnected())
return false;
}
-
+
// remove everything that might be left from previous connections
assert(thePPPThreadPtr==NULL);
thePPPDStdOut.clear();
thePPPDStdErr.clear();
-
- // from now on until the exit of this member, prevent
+
+ // from now on until the exit of this member, prevent
// ConnectionInfo from interfering with the AT serial port
setNewPPPState(PPPObserverInterface::STARTING);
assert(theCIInhibitorPtr == NULL);
@@ -298,7 +298,7 @@
return false;
}
- // let's create a new serial port, that will temporarily
+ // let's create a new serial port, that will temporarily
// (as long as this temp class exists) replace the original serial
// port for queries. As this temp object will be deleted upon exit of
this
// member, the original state will be returned automatically
@@ -329,7 +329,7 @@
thePPPThreadPtr = new PPPThread(myPPPArguments);
thePPPThreadPtr->start();
// if there is a PPP running now, it's ours.
- // but it might take a while before all scheduling is done,
+ // but it might take a while before all scheduling is done,
// so let's wait for it...
theRunningPPPDPID = -1;
for (int i=0; i<5 && theRunningPPPDPID==-1; i++)
@@ -343,8 +343,8 @@
bool PPPConnection::chat(const Profile& aProfile) const
{
DEBUG3("PPPConnection::chat() start\n");
- // we need the braces {} here to make sure that the Query class is
- // destroyed immediately after usage
+ // we need the braces {} here to make sure that the Query class is
+ // destroyed immediately after usage
{
// AT&F: reset modem to default profile
// FIXME: if this fails, we should do pccardctl eject and insert and
retry
@@ -360,12 +360,12 @@
return false;
}
- // build up the connectionstring
+ // build up the connectionstring
// like "AT+CGDCONT=1,\"IP\",\"office.vodafone.nl\""
//
// security check: anAPN should not contain any quotes or spaces
QString myAPN = aProfile.getAPN();
- if ( myAPN.contains("\"") || myAPN.contains("\"") ||
+ if ( myAPN.contains("\"") || myAPN.contains("\"") ||
myAPN.contains("'") || myAPN.contains(" ") )
{
Popup::Warning(QObject::tr("Your APN contains illegal
characters.\nPlease go back to your Profile page and change the APN."));
@@ -376,8 +376,8 @@
{
Popup::WarningWithMemory("NoAPNMsg", QObject::tr("Warning: You
did not specify an 'APN' in your profile.\nThis may work ok, it may not -
depending on your network operator."));
}
- // FIXME: myCID should be made flexible in the future,
- // needs to be a different number for cell phones on USB or BT
+ // FIXME: myCID should be made flexible in the future,
+ // needs to be a different number for cell phones on USB or BT
const int myCID = 1;
QString myConnectStr = "AT+CGDCONT=";
myConnectStr += myConnectStr.number(myCID);
@@ -416,14 +416,14 @@
myPPPArguments.push_back("debug");
myPPPArguments.push_back("debug");
}
-
+
// modem-related stuff
myPPPArguments.push_back("460800");
- myPPPArguments.push_back("lock");
+ myPPPArguments.push_back("lock");
myPPPArguments.push_back("crtscts");
- myPPPArguments.push_back("modem");
+ myPPPArguments.push_back("modem");
myPPPArguments.push_back(theSerialPortName);
-
+
// header compressions and such
myPPPArguments.push_back("noipx");
if (aProfile.getNoCompression())
@@ -432,7 +432,7 @@
}
if (aProfile.getNoCCP())
myPPPArguments.push_back("noccp");
-
+
// routing related stuff
if (aProfile.getIsDefaultRoute())
myPPPArguments.push_back("defaultroute");
@@ -442,7 +442,7 @@
myPPPArguments.push_back("usepeerdns");
if (aProfile.getNoIpDefault())
myPPPArguments.push_back("noipdefault");
-
+
// login info
if (!aProfile.getUsername().isEmpty())
{
@@ -451,10 +451,10 @@
}
if (!aProfile.getPassword().isEmpty())
{
- myPPPArguments.push_back("password");
+ myPPPArguments.push_back("password");
myPPPArguments.push_back(aProfile.getPassword());
}
-
+
return myPPPArguments;
}
@@ -477,7 +477,7 @@
}
}
-void PPPConnection::notifyObserver(PPPObserverInterface* myObserverPtr) const
+void PPPConnection::notifyObserver(PPPObserverInterface* myObserverPtr) const
{
myObserverPtr->newPPPState(thePPPDState);
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn
--exclude=.svnignore old/umtsmon/TODO new/umtsmon/TODO
--- old/umtsmon/TODO 2008-11-10 11:52:01.000000000 +0100
+++ new/umtsmon/TODO 2008-11-17 08:29:04.000000000 +0100
@@ -9,11 +9,12 @@
--------------------------------------------------------------------------
For the 0.10 release:
* add checks whether user is part of 'dialout' and 'uucp' groups
+ * run the "groups" command line tool or
+ * use getgroups32() to get the group ids, then figure out the names
+ * OpenSuse commandline (for root): "groupmod --add-user klaas dialout"
X BUG TO BE REPORTED:
- even if *time* limit is hit, still data limit mentioned in warning dialog.
- that dialog is not i18n aware
- * BUG TO BE REPORTED:
- - if i18n active, connection fails in weird ways...
X BUG:
X ###P1 t=935: ERROR: APN contains illegal character
this error should be visible to the GUI user, too.
@@ -42,7 +43,7 @@
X make setting for non-en_US language persistent
X get list of all possible languages
X add menu option to set language from GUI
- * auto connect option
+ X auto connect option
* finish Option HSO device support
X add Device class name and port info to System info dialog
* remember if roaming last time, so can show right stats at startup
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: opensuse-commit+help@xxxxxxxxxxxx
| < Previous | Next > |