author | korovkin <korovkin> | 2006-04-04 18:53:07 (UTC) |
---|---|---|
committer | korovkin <korovkin> | 2006-04-04 18:53:07 (UTC) |
commit | 31ea6e9f697d72a31ce319f7f42254fe90e48a36 (patch) (unidiff) | |
tree | 694ad373b6ac80ebdf93137029b0b6c5d335d3f6 | |
parent | 76276b77e99897ae264aa5b171191521edada420 (diff) | |
download | opie-31ea6e9f697d72a31ce319f7f42254fe90e48a36.zip opie-31ea6e9f697d72a31ce319f7f42254fe90e48a36.tar.gz opie-31ea6e9f697d72a31ce319f7f42254fe90e48a36.tar.bz2 |
Added persist mode for dund.
-rw-r--r-- | noncore/net/opietooth/manager/TODO.txt | 2 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/dundialog.cpp | 8 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/dundialog.h | 1 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/dunpopup.cpp | 3 |
4 files changed, 13 insertions, 1 deletions
diff --git a/noncore/net/opietooth/manager/TODO.txt b/noncore/net/opietooth/manager/TODO.txt index 1914d8b..ed512cd 100644 --- a/noncore/net/opietooth/manager/TODO.txt +++ b/noncore/net/opietooth/manager/TODO.txt | |||
@@ -1,4 +1,4 @@ | |||
1 | 1. Try and run and correct authentification and encoding. | 1 | 1. Improve hcid.conf parsing algorithm. |
2 | 2. Collect requirements from others. | 2 | 2. Collect requirements from others. |
3 | 3 | ||
4 | //eof | 4 | //eof |
diff --git a/noncore/net/opietooth/manager/dundialog.cpp b/noncore/net/opietooth/manager/dundialog.cpp index 7aac271..c6d8619 100644 --- a/noncore/net/opietooth/manager/dundialog.cpp +++ b/noncore/net/opietooth/manager/dundialog.cpp | |||
@@ -1,140 +1,148 @@ | |||
1 | /* $Id$ */ | 1 | /* $Id$ */ |
2 | /* DUN connection dialog */ | 2 | /* DUN connection dialog */ |
3 | /*************************************************************************** | 3 | /*************************************************************************** |
4 | * * | 4 | * * |
5 | * This program is free software; you can redistribute it and/or modify * | 5 | * This program is free software; you can redistribute it and/or modify * |
6 | * it under the terms of the GNU General Public License as published by * | 6 | * it under the terms of the GNU General Public License as published by * |
7 | * the Free Software Foundation; either version 2 of the License, or * | 7 | * the Free Software Foundation; either version 2 of the License, or * |
8 | * (at your option) any later version. * | 8 | * (at your option) any later version. * |
9 | * * | 9 | * * |
10 | ***************************************************************************/ | 10 | ***************************************************************************/ |
11 | #include "dundialog.h" | 11 | #include "dundialog.h" |
12 | #include <qpushbutton.h> | 12 | #include <qpushbutton.h> |
13 | #include <qmultilineedit.h> | 13 | #include <qmultilineedit.h> |
14 | #include <qlineedit.h> | 14 | #include <qlineedit.h> |
15 | #include <qlayout.h> | 15 | #include <qlayout.h> |
16 | #include <qcheckbox.h> | 16 | #include <qcheckbox.h> |
17 | #include <qlabel.h> | 17 | #include <qlabel.h> |
18 | #include <qstring.h> | 18 | #include <qstring.h> |
19 | #include <opie2/oprocess.h> | 19 | #include <opie2/oprocess.h> |
20 | #include <opie2/odebug.h> | 20 | #include <opie2/odebug.h> |
21 | using namespace Opie::Core; | 21 | using namespace Opie::Core; |
22 | 22 | ||
23 | using namespace OpieTooth; | 23 | using namespace OpieTooth; |
24 | 24 | ||
25 | using namespace Opie::Core; | 25 | using namespace Opie::Core; |
26 | 26 | ||
27 | DunDialog::DunDialog( const QString& device, int port, QWidget* parent, | 27 | DunDialog::DunDialog( const QString& device, int port, QWidget* parent, |
28 | const char* name, bool modal, WFlags fl ) | 28 | const char* name, bool modal, WFlags fl ) |
29 | : QDialog( parent, name, modal, fl ) { | 29 | : QDialog( parent, name, modal, fl ) { |
30 | if ( !name ) | 30 | if ( !name ) |
31 | setName( "DUNDialog" ); | 31 | setName( "DUNDialog" ); |
32 | setCaption( tr( "DUN connection " ) ) ; | 32 | setCaption( tr( "DUN connection " ) ) ; |
33 | 33 | ||
34 | m_device = device; | 34 | m_device = device; |
35 | m_port = port; | 35 | m_port = port; |
36 | 36 | ||
37 | m_dunConnect = NULL; | 37 | m_dunConnect = NULL; |
38 | layout = new QVBoxLayout( this ); | 38 | layout = new QVBoxLayout( this ); |
39 | 39 | ||
40 | QLabel* info = new QLabel( this ); | 40 | QLabel* info = new QLabel( this ); |
41 | info->setText( tr("Enter an ppp script name:") ); | 41 | info->setText( tr("Enter an ppp script name:") ); |
42 | 42 | ||
43 | cmdLine = new QLineEdit( this ); | 43 | cmdLine = new QLineEdit( this ); |
44 | 44 | ||
45 | outPut = new QMultiLineEdit( this ); | 45 | outPut = new QMultiLineEdit( this ); |
46 | QFont outPut_font( outPut->font() ); | 46 | QFont outPut_font( outPut->font() ); |
47 | outPut_font.setPointSize( 8 ); | 47 | outPut_font.setPointSize( 8 ); |
48 | outPut->setFont( outPut_font ); | 48 | outPut->setFont( outPut_font ); |
49 | outPut->setWordWrap( QMultiLineEdit::WidgetWidth ); | 49 | outPut->setWordWrap( QMultiLineEdit::WidgetWidth ); |
50 | 50 | ||
51 | connectButton = new QPushButton( this ); | 51 | connectButton = new QPushButton( this ); |
52 | connectButton->setText( tr( "Connect" ) ); | 52 | connectButton->setText( tr( "Connect" ) ); |
53 | 53 | ||
54 | doEncryption = new QCheckBox(this, "encrypt"); | 54 | doEncryption = new QCheckBox(this, "encrypt"); |
55 | doEncryption->setText( tr( "encrypt" ) ); | 55 | doEncryption->setText( tr( "encrypt" ) ); |
56 | 56 | ||
57 | persist = new QCheckBox(this, "persist"); | ||
58 | persist->setText( tr( "persist" ) ); | ||
59 | |||
57 | layout->addWidget(info); | 60 | layout->addWidget(info); |
58 | layout->addWidget(cmdLine); | 61 | layout->addWidget(cmdLine); |
59 | layout->addWidget(doEncryption); | 62 | layout->addWidget(doEncryption); |
63 | layout->addWidget(persist); | ||
60 | layout->addWidget(outPut); | 64 | layout->addWidget(outPut); |
61 | layout->addWidget(connectButton); | 65 | layout->addWidget(connectButton); |
62 | 66 | ||
63 | connect( connectButton, SIGNAL( clicked() ), this, SLOT( connectToDevice() ) ); | 67 | connect( connectButton, SIGNAL( clicked() ), this, SLOT( connectToDevice() ) ); |
64 | } | 68 | } |
65 | 69 | ||
66 | DunDialog::~DunDialog() { | 70 | DunDialog::~DunDialog() { |
67 | } | 71 | } |
68 | 72 | ||
69 | void DunDialog::connectToDevice() { | 73 | void DunDialog::connectToDevice() { |
70 | bool doEnc = doEncryption->isChecked(); | 74 | bool doEnc = doEncryption->isChecked(); |
75 | bool doPersist = persist->isChecked(); | ||
76 | |||
71 | if (cmdLine->text() == "") | 77 | if (cmdLine->text() == "") |
72 | return; | 78 | return; |
73 | if (m_dunConnect) { | 79 | if (m_dunConnect) { |
74 | outPut->append(tr("Work in progress")); | 80 | outPut->append(tr("Work in progress")); |
75 | return; | 81 | return; |
76 | } | 82 | } |
77 | m_dunConnect = new OProcess(); | 83 | m_dunConnect = new OProcess(); |
78 | outPut->clear(); | 84 | outPut->clear(); |
79 | 85 | ||
80 | // Fill process command line | 86 | // Fill process command line |
81 | *m_dunConnect << tr("dund") | 87 | *m_dunConnect << tr("dund") |
82 | << tr("--connect") << m_device | 88 | << tr("--connect") << m_device |
83 | << tr("--channel") << QString::number(m_port) | 89 | << tr("--channel") << QString::number(m_port) |
84 | << tr("--nodetach"); | 90 | << tr("--nodetach"); |
85 | if (doEnc) | 91 | if (doEnc) |
86 | *m_dunConnect << tr("--encrypt"); | 92 | *m_dunConnect << tr("--encrypt"); |
93 | if (doPersist) | ||
94 | *m_dunConnect << tr("--persist"); | ||
87 | *m_dunConnect << tr("call") | 95 | *m_dunConnect << tr("call") |
88 | << cmdLine->text(); | 96 | << cmdLine->text(); |
89 | if (!m_dunConnect->start(OProcess::NotifyOnExit, | 97 | if (!m_dunConnect->start(OProcess::NotifyOnExit, |
90 | OProcess::All)) { | 98 | OProcess::All)) { |
91 | outPut->append(tr("Couldn't start")); | 99 | outPut->append(tr("Couldn't start")); |
92 | delete m_dunConnect; | 100 | delete m_dunConnect; |
93 | m_dunConnect = NULL; | 101 | m_dunConnect = NULL; |
94 | } | 102 | } |
95 | else | 103 | else |
96 | { | 104 | { |
97 | m_dunConnect->resume(); | 105 | m_dunConnect->resume(); |
98 | outPut->append(tr("Started")); | 106 | outPut->append(tr("Started")); |
99 | connect(m_dunConnect, | 107 | connect(m_dunConnect, |
100 | SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int)), | 108 | SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int)), |
101 | this, SLOT(fillOutPut(Opie::Core::OProcess*, char*, int))); | 109 | this, SLOT(fillOutPut(Opie::Core::OProcess*, char*, int))); |
102 | connect(m_dunConnect, | 110 | connect(m_dunConnect, |
103 | SIGNAL(receivedStderr(Opie::Core::OProcess*, char*, int)), | 111 | SIGNAL(receivedStderr(Opie::Core::OProcess*, char*, int)), |
104 | this, SLOT(fillErr(Opie::Core::OProcess*, char*, int))); | 112 | this, SLOT(fillErr(Opie::Core::OProcess*, char*, int))); |
105 | connect(m_dunConnect, | 113 | connect(m_dunConnect, |
106 | SIGNAL(processExited(Opie::Core::OProcess*)), | 114 | SIGNAL(processExited(Opie::Core::OProcess*)), |
107 | this, SLOT(slotProcessExited(Opie::Core::OProcess*))); | 115 | this, SLOT(slotProcessExited(Opie::Core::OProcess*))); |
108 | } | 116 | } |
109 | } | 117 | } |
110 | 118 | ||
111 | void DunDialog::fillOutPut( OProcess*, char* cha, int len ) { | 119 | void DunDialog::fillOutPut( OProcess*, char* cha, int len ) { |
112 | QCString str(cha, len); | 120 | QCString str(cha, len); |
113 | outPut->append(str); | 121 | outPut->append(str); |
114 | } | 122 | } |
115 | 123 | ||
116 | void DunDialog::fillErr(OProcess*, char* buf, int len) | 124 | void DunDialog::fillErr(OProcess*, char* buf, int len) |
117 | { | 125 | { |
118 | QCString str(buf, len); | 126 | QCString str(buf, len); |
119 | outPut->append(str); | 127 | outPut->append(str); |
120 | } | 128 | } |
121 | 129 | ||
122 | void DunDialog::slotProcessExited(OProcess* proc) { | 130 | void DunDialog::slotProcessExited(OProcess* proc) { |
123 | if (m_dunConnect->normalExit()) { | 131 | if (m_dunConnect->normalExit()) { |
124 | outPut->append( tr("Finished with result ") ); | 132 | outPut->append( tr("Finished with result ") ); |
125 | outPut->append( QString::number(proc->exitStatus()) ); | 133 | outPut->append( QString::number(proc->exitStatus()) ); |
126 | } | 134 | } |
127 | else | 135 | else |
128 | outPut->append( tr("Exited abnormally") ); | 136 | outPut->append( tr("Exited abnormally") ); |
129 | delete m_dunConnect; | 137 | delete m_dunConnect; |
130 | m_dunConnect = NULL; | 138 | m_dunConnect = NULL; |
131 | } | 139 | } |
132 | 140 | ||
133 | void DunDialog::closeEvent(QCloseEvent* e) | 141 | void DunDialog::closeEvent(QCloseEvent* e) |
134 | { | 142 | { |
135 | if (m_dunConnect && m_dunConnect->isRunning()) | 143 | if (m_dunConnect && m_dunConnect->isRunning()) |
136 | m_dunConnect->kill(); | 144 | m_dunConnect->kill(); |
137 | QDialog::closeEvent(e); | 145 | QDialog::closeEvent(e); |
138 | } | 146 | } |
139 | 147 | ||
140 | //eof | 148 | //eof |
diff --git a/noncore/net/opietooth/manager/dundialog.h b/noncore/net/opietooth/manager/dundialog.h index 9e219cd..a0d16ad 100644 --- a/noncore/net/opietooth/manager/dundialog.h +++ b/noncore/net/opietooth/manager/dundialog.h | |||
@@ -1,52 +1,53 @@ | |||
1 | /* $Id$ */ | 1 | /* $Id$ */ |
2 | /* DUN connection dialog */ | 2 | /* DUN connection dialog */ |
3 | /*************************************************************************** | 3 | /*************************************************************************** |
4 | * * | 4 | * * |
5 | * This program is free software; you can redistribute it and/or modify * | 5 | * This program is free software; you can redistribute it and/or modify * |
6 | * it under the terms of the GNU General Public License as published by * | 6 | * it under the terms of the GNU General Public License as published by * |
7 | * the Free Software Foundation; either version 2 of the License, or * | 7 | * the Free Software Foundation; either version 2 of the License, or * |
8 | * (at your option) any later version. * | 8 | * (at your option) any later version. * |
9 | * * | 9 | * * |
10 | ***************************************************************************/ | 10 | ***************************************************************************/ |
11 | #ifndef DUNDIALOG_H | 11 | #ifndef DUNDIALOG_H |
12 | #define DUNDIALOG_H | 12 | #define DUNDIALOG_H |
13 | 13 | ||
14 | 14 | ||
15 | #include <qdialog.h> | 15 | #include <qdialog.h> |
16 | #include <opie2/oprocess.h> | 16 | #include <opie2/oprocess.h> |
17 | 17 | ||
18 | class QVBoxLayout; | 18 | class QVBoxLayout; |
19 | class QPushButton; | 19 | class QPushButton; |
20 | class QMultiLineEdit; | 20 | class QMultiLineEdit; |
21 | class QLineEdit; | 21 | class QLineEdit; |
22 | class QCheckBox; | 22 | class QCheckBox; |
23 | 23 | ||
24 | namespace OpieTooth { | 24 | namespace OpieTooth { |
25 | class DunDialog : public QDialog { | 25 | class DunDialog : public QDialog { |
26 | 26 | ||
27 | Q_OBJECT | 27 | Q_OBJECT |
28 | 28 | ||
29 | public: | 29 | public: |
30 | DunDialog(const QString& device = 0, int port = 0, QWidget* parent = 0, const char* name = 0, bool modal = TRUE, WFlags fl = 0); | 30 | DunDialog(const QString& device = 0, int port = 0, QWidget* parent = 0, const char* name = 0, bool modal = TRUE, WFlags fl = 0); |
31 | ~DunDialog(); | 31 | ~DunDialog(); |
32 | 32 | ||
33 | private slots: | 33 | private slots: |
34 | void connectToDevice(); | 34 | void connectToDevice(); |
35 | void fillOutPut( Opie::Core::OProcess* pppDial, char* cha, int len ); | 35 | void fillOutPut( Opie::Core::OProcess* pppDial, char* cha, int len ); |
36 | void fillErr(Opie::Core::OProcess*, char*, int); | 36 | void fillErr(Opie::Core::OProcess*, char*, int); |
37 | void slotProcessExited(Opie::Core::OProcess* proc); | 37 | void slotProcessExited(Opie::Core::OProcess* proc); |
38 | void closeEvent(QCloseEvent* e); | 38 | void closeEvent(QCloseEvent* e); |
39 | protected: | 39 | protected: |
40 | QVBoxLayout* layout; | 40 | QVBoxLayout* layout; |
41 | QLineEdit* cmdLine; | 41 | QLineEdit* cmdLine; |
42 | QPushButton* connectButton; | 42 | QPushButton* connectButton; |
43 | QMultiLineEdit* outPut; | 43 | QMultiLineEdit* outPut; |
44 | QCheckBox* doEncryption; | 44 | QCheckBox* doEncryption; |
45 | QCheckBox* persist; | ||
45 | 46 | ||
46 | private: | 47 | private: |
47 | QString m_device; //device BT address | 48 | QString m_device; //device BT address |
48 | int m_port; //device process | 49 | int m_port; //device process |
49 | Opie::Core::OProcess* m_dunConnect; //DUN process | 50 | Opie::Core::OProcess* m_dunConnect; //DUN process |
50 | }; | 51 | }; |
51 | } | 52 | } |
52 | #endif | 53 | #endif |
diff --git a/noncore/net/opietooth/manager/dunpopup.cpp b/noncore/net/opietooth/manager/dunpopup.cpp index c304b2d..6844988 100644 --- a/noncore/net/opietooth/manager/dunpopup.cpp +++ b/noncore/net/opietooth/manager/dunpopup.cpp | |||
@@ -1,80 +1,83 @@ | |||
1 | /* $Id$ */ | 1 | /* $Id$ */ |
2 | /* DUN context menu */ | 2 | /* DUN context menu */ |
3 | /*************************************************************************** | 3 | /*************************************************************************** |
4 | * * | 4 | * * |
5 | * This program is free software; you can redistribute it and/or modify * | 5 | * This program is free software; you can redistribute it and/or modify * |
6 | * it under the terms of the GNU General Public License as published by * | 6 | * it under the terms of the GNU General Public License as published by * |
7 | * the Free Software Foundation; either version 2 of the License, or * | 7 | * the Free Software Foundation; either version 2 of the License, or * |
8 | * (at your option) any later version. * | 8 | * (at your option) any later version. * |
9 | * * | 9 | * * |
10 | ***************************************************************************/ | 10 | ***************************************************************************/ |
11 | #include <qpe/qcopenvelope_qws.h> | 11 | #include <qpe/qcopenvelope_qws.h> |
12 | #include <qmessagebox.h> | 12 | #include <qmessagebox.h> |
13 | #include <opie2/odebug.h> | 13 | #include <opie2/odebug.h> |
14 | #include <opie2/oprocess.h> | 14 | #include <opie2/oprocess.h> |
15 | #include <qpe/qpeapplication.h> | 15 | #include <qpe/qpeapplication.h> |
16 | using namespace Opie::Core; | 16 | using namespace Opie::Core; |
17 | 17 | ||
18 | #include "dunpopup.h" | 18 | #include "dunpopup.h" |
19 | #include "dundialog.h" | 19 | #include "dundialog.h" |
20 | 20 | ||
21 | using namespace OpieTooth; | 21 | using namespace OpieTooth; |
22 | 22 | ||
23 | /* | 23 | /* |
24 | * c'tor init the QAction | 24 | * c'tor init the QAction |
25 | */ | 25 | */ |
26 | DunPopup::DunPopup( const Services& service, | 26 | DunPopup::DunPopup( const Services& service, |
27 | BTDeviceItem* item ) : QPopupMenu(), m_service(service) { | 27 | BTDeviceItem* item ) : QPopupMenu(), m_service(service) { |
28 | 28 | ||
29 | owarn << "DunPopup c'tor" << oendl; | 29 | owarn << "DunPopup c'tor" << oendl; |
30 | 30 | ||
31 | m_item = item; | 31 | m_item = item; |
32 | QAction *a, *b, *c; | 32 | QAction *a, *b, *c; |
33 | 33 | ||
34 | a = new QAction(); // so it's get deleted | 34 | a = new QAction(); // so it's get deleted |
35 | a->setText( tr("connect") ); | 35 | a->setText( tr("connect") ); |
36 | a->addTo( this ); | 36 | a->addTo( this ); |
37 | connect( a, SIGNAL( activated() ), this, SLOT( slotConnect() ) ); | 37 | connect( a, SIGNAL( activated() ), this, SLOT( slotConnect() ) ); |
38 | 38 | ||
39 | b = new QAction(); | 39 | b = new QAction(); |
40 | b->setText( tr( "connect+conf" ) ); | 40 | b->setText( tr( "connect+conf" ) ); |
41 | b->addTo( this ); | 41 | b->addTo( this ); |
42 | connect( b, SIGNAL( activated() ), this, SLOT( slotConnectAndConfig() ) ); | 42 | connect( b, SIGNAL( activated() ), this, SLOT( slotConnectAndConfig() ) ); |
43 | 43 | ||
44 | c = new QAction(); | 44 | c = new QAction(); |
45 | c->setText( tr( "disconnect" ) ); | 45 | c->setText( tr( "disconnect" ) ); |
46 | c->addTo( this ); | 46 | c->addTo( this ); |
47 | connect( c, SIGNAL( activated() ), this, SLOT( slotDisconnect() ) ); | 47 | connect( c, SIGNAL( activated() ), this, SLOT( slotDisconnect() ) ); |
48 | 48 | ||
49 | }; | 49 | }; |
50 | 50 | ||
51 | DunPopup::~DunPopup() { | 51 | DunPopup::~DunPopup() { |
52 | 52 | ||
53 | } | 53 | } |
54 | 54 | ||
55 | void DunPopup::slotConnect() { | 55 | void DunPopup::slotConnect() { |
56 | odebug << "connect" << oendl; | 56 | odebug << "connect" << oendl; |
57 | DunDialog dundlg(m_item->mac(), | 57 | DunDialog dundlg(m_item->mac(), |
58 | m_service.protocolDescriptorList().last().port()); | 58 | m_service.protocolDescriptorList().last().port()); |
59 | QPEApplication::execDialog( &dundlg ); | 59 | QPEApplication::execDialog( &dundlg ); |
60 | } | 60 | } |
61 | 61 | ||
62 | void DunPopup::slotDisconnect() { | 62 | void DunPopup::slotDisconnect() { |
63 | OProcess dunDis; | 63 | OProcess dunDis; |
64 | OProcess pppDis; | 64 | OProcess pppDis; |
65 | OProcess dunKill; | ||
65 | dunDis << tr("dund") << tr("--kill") << m_item->mac(); | 66 | dunDis << tr("dund") << tr("--kill") << m_item->mac(); |
66 | dunDis.start(OProcess::DontCare, OProcess::NoCommunication); | 67 | dunDis.start(OProcess::DontCare, OProcess::NoCommunication); |
68 | dunKill << tr("killall") << tr("-q") << tr("dund"); | ||
69 | dunKill.start(OProcess::DontCare, OProcess::NoCommunication); | ||
67 | pppDis << tr("killall") << tr("-q") << tr("pppd"); | 70 | pppDis << tr("killall") << tr("-q") << tr("pppd"); |
68 | pppDis.start(OProcess::DontCare, OProcess::NoCommunication); | 71 | pppDis.start(OProcess::DontCare, OProcess::NoCommunication); |
69 | sleep(1); | 72 | sleep(1); |
70 | QMessageBox::information(this, tr("DUN Disconnect"), tr("DUN Disconnected")); | 73 | QMessageBox::information(this, tr("DUN Disconnect"), tr("DUN Disconnected")); |
71 | } | 74 | } |
72 | 75 | ||
73 | 76 | ||
74 | void DunPopup::slotConnectAndConfig() { | 77 | void DunPopup::slotConnectAndConfig() { |
75 | slotConnect(); | 78 | slotConnect(); |
76 | 79 | ||
77 | // more intelligence here later like passing the device ( bnepX ) | 80 | // more intelligence here later like passing the device ( bnepX ) |
78 | QCopEnvelope e( "QPE/System", "execute(QString)" ); | 81 | QCopEnvelope e( "QPE/System", "execute(QString)" ); |
79 | e << QString( "networksettings" ); | 82 | e << QString( "networksettings" ); |
80 | } | 83 | } |