You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tde-packaging/opensuse/core/tdebase/clock-suse-integrate.diff

289 lines
8.1 KiB

Index: kcontrol/clock/tzone.cpp
===================================================================
--- kcontrol/clock/tzone.cpp.orig
+++ kcontrol/clock/tzone.cpp
@@ -27,12 +27,16 @@
#include <qlabel.h>
#include <qfile.h>
+#include <qregexp.h>
#include <kdebug.h>
#include <klocale.h>
#include <kmessagebox.h>
#include <kdialog.h>
#include <kio/netaccess.h>
+#include <kprocess.h>
+#include <ksavefile.h>
+#include <kstandarddirs.h>
//#include "xpm/world.xpm"
#include "tzone.h"
@@ -55,6 +59,8 @@ Tzone::Tzone(QWidget * parent, const cha
connect( tzonelist, SIGNAL(selectionChanged()), SLOT(handleZoneChange()) );
m_local = new QLabel(this);
+
+ setupSuseTimezone();
load();
@@ -158,28 +164,38 @@ void Tzone::save()
QString val = selectedzone;
#else
- QFile fTimezoneFile("/etc/timezone");
+ QString tz = "/usr/share/zoneinfo/" + selectedzone;
- if (fTimezoneFile.open(IO_WriteOnly | IO_Truncate) )
+ kdDebug() << "Set time zone " << tz << endl;
+
+ writeSuseTimezone( selectedzone );
+
+ if( !KStandardDirs::findExe( "zic" ).isEmpty())
{
- QTextStream t(&fTimezoneFile);
- t << selectedzone;
- fTimezoneFile.close();
+ KProcess proc;
+ proc << "zic" << "-l" << selectedzone;
+ proc.start( KProcess::Block );
}
+ else
+ {
+ QFile fTimezoneFile("/etc/timezone");
- QString tz = "/usr/share/zoneinfo/" + selectedzone;
-
- kdDebug() << "Set time zone " << tz << endl;
+ if (fTimezoneFile.open(IO_WriteOnly | IO_Truncate) )
+ {
+ QTextStream t(&fTimezoneFile);
+ t << selectedzone;
+ fTimezoneFile.close();
+ }
- if (!QFile::remove("/etc/localtime"))
- {
+ if (!QFile::remove("/etc/localtime"))
+ {
//After the KDE 3.2 release, need to add an error message
- }
- else
+ }
+ else
if (!KIO::NetAccess::file_copy(KURL(tz),KURL("/etc/localtime")))
KMessageBox::error( 0, i18n("Error setting new timezone."),
i18n("Timezone Error"));
-
+ }
QString val = ":" + tz;
#endif // !USE_SOLARIS
@@ -198,3 +214,58 @@ void Tzone::save()
currentZone();
}
+
+// read the configured timezone from /etc/sysconfig/clock
+// and simply set it as $TZ, KDE code then will take it as the timezone
+void Tzone::setupSuseTimezone()
+{
+ QFile f( "/etc/sysconfig/clock" );
+ if( !f.open( IO_ReadOnly ))
+ return;
+ QTextStream str( &f );
+ while( !str.atEnd())
+ {
+ QString line = str.readLine();
+ if( line.startsWith( "TIMEZONE=" ))
+ {
+ QRegExp r( "\\s*TIMEZONE=\"(.*)\"\\s*" );
+ if( r.exactMatch( line ))
+ {
+ QString tz = r.cap( 1 );
+ setenv( "TZ", tz.ascii(), 1 );
+ }
+ }
+ }
+}
+
+void Tzone::writeSuseTimezone( QString zone )
+{
+ QFile f( "/etc/sysconfig/clock" );
+ if( !f.open( IO_ReadOnly ))
+ return;
+ KSaveFile out( "/etc/sysconfig/clock", 0644 );
+ QFile* fout = out.file();
+ if( fout == NULL )
+ return;
+ QTextStream str( &f );
+ QTextStream strout( fout );
+ while( !str.atEnd())
+ {
+ QString line = str.readLine();
+ if( line.startsWith( "TIMEZONE=" ))
+ {
+ QRegExp r( "\\s*TIMEZONE=\"(.*)\"\\s*" );
+ if( r.exactMatch( line ))
+ {
+ QString tz = r.cap( 1 );
+ if( tz == zone ) // not changed, abort
+ {
+ out.abort();
+ return;
+ }
+ line = "TIMEZONE=\"" + zone + "\"";
+ }
+ }
+ strout << line << '\n';
+ }
+}
Index: kcontrol/clock/tzone.h
===================================================================
--- kcontrol/clock/tzone.h.orig
+++ kcontrol/clock/tzone.h
@@ -47,6 +47,8 @@ protected slots:
private:
void currentZone();
+ void setupSuseTimezone();
+ void writeSuseTimezone( QString timezone );
KTimezones m_zoneDb;
QLabel *m_local;
KTimezoneWidget *tzonelist;
Index: kcontrol/clock/dtime.h
===================================================================
--- kcontrol/clock/dtime.h.orig
+++ kcontrol/clock/dtime.h
@@ -65,6 +65,9 @@ signals:
void timeout();
void set_time();
void changeDate(QDate);
+#if 1
+ void configureTimeServer();
+#endif
private:
void findNTPutility();
@@ -72,7 +75,11 @@ private:
QWidget* privateLayoutWidget;
QCheckBox *setDateTimeAuto;
+#if 1
+ QPushButton *timeServerConfigure;
+#else
QComboBox *timeServerList;
+#endif
KDatePicker *cal;
QComboBox *month;
Index: kcontrol/clock/dtime.cpp
===================================================================
--- kcontrol/clock/dtime.cpp.orig
+++ kcontrol/clock/dtime.cpp
@@ -38,6 +38,7 @@
#include <kmessagebox.h>
#include <kdialog.h>
#include <kconfig.h>
+#include <kstandarddirs.h>
#include "dtime.h"
#include "dtime.moc"
@@ -74,6 +75,18 @@ Dtime::Dtime(QWidget * parent, const cha
connect(setDateTimeAuto, SIGNAL(toggled(bool)), SLOT(configChanged()));
layout1->addWidget( setDateTimeAuto );
+#if 1
+ // simply add a pushbutton that'll invoke the yast module
+ ntpUtility = KStandardDirs::findExe( "rcntp");
+ timeServerConfigure = new QPushButton( i18n( "Configure" ), privateLayoutWidget, "timeServerConfigure" );
+ connect(timeServerConfigure, SIGNAL(clicked()), SLOT(configChanged()));
+ connect(timeServerConfigure, SIGNAL(clicked()), SLOT(configureTimeServer()));
+ connect(setDateTimeAuto, SIGNAL(toggled(bool)), timeServerConfigure, SLOT(setEnabled(bool)));
+ timeServerConfigure->setEnabled(false);
+ layout1->addWidget( timeServerConfigure );
+ if( ntpUtility.isEmpty())
+ privateLayoutWidget->hide();
+#else
timeServerList = new QComboBox( false, privateLayoutWidget, "timeServerList" );
connect(timeServerList, SIGNAL(activated(int)), SLOT(configChanged()));
connect(timeServerList, SIGNAL(textChanged(const QString &)), SLOT(configChanged()));
@@ -82,6 +95,7 @@ Dtime::Dtime(QWidget * parent, const cha
timeServerList->setEditable(true);
layout1->addWidget( timeServerList );
findNTPutility();
+#endif
// Date box
QGroupBox* dateBox = new QGroupBox( this, "dateBox" );
@@ -179,7 +193,11 @@ Dtime::Dtime(QWidget * parent, const cha
hour->setEnabled(false);
minute->setEnabled(false);
second->setEnabled(false);
+#if 1
+ timeServerConfigure->setEnabled(false);
+#else
timeServerList->setEnabled(false);
+#endif
setDateTimeAuto->setEnabled(false);
}
kclock->setEnabled(false);
@@ -241,6 +259,15 @@ void Dtime::configChanged(){
void Dtime::load()
{
KConfig config("kcmclockrc", true, false);
+#if 1
+ if( !ntpUtility.isEmpty())
+ {
+ KProcess proc;
+ proc << ntpUtility << "status";
+ proc.start( KProcess::Block );
+ setDateTimeAuto->setChecked( proc.exitStatus() == 0 );
+ }
+#else
config.setGroup("NTP");
timeServerList->insertStringList(QStringList::split(',', config.readEntry("servers",
i18n("Public Time Server (pool.ntp.org),\
@@ -249,6 +276,7 @@ europe.pool.ntp.org,\
north-america.pool.ntp.org,\
oceania.pool.ntp.org"))));
setDateTimeAuto->setChecked(config.readBoolEntry("enabled", false));
+#endif
// Reset to the current date and time
time = QTime::currentTime();
@@ -264,6 +292,7 @@ oceania.pool.ntp.org"))));
void Dtime::save()
{
KConfig config("kcmclockrc", false, false);
+#if 0
config.setGroup("NTP");
// Save the order, but don't duplicate!
@@ -301,7 +330,9 @@ void Dtime::save()
kdDebug() << "Set date from time server " << timeServer.latin1() << " success!" << endl;
}
}
- else {
+ else
+#endif
+ {
// User time setting
KProcess c_proc;
@@ -356,6 +387,13 @@ void Dtime::timeout()
kclock->setTime( time );
}
+void Dtime::configureTimeServer()
+{
+ KProcess proc;
+ proc << "/sbin/yast2" << "ntp-client";
+ proc.start( KProcess::DontCare );
+}
+
QString Dtime::quickHelp() const
{
return i18n("<h1>Date & Time</h1> This control module can be used to set the system date and"