Index: helper.cpp
===================================================================
--- helper.cpp	（版本 854190）
+++ helper.cpp	（工作副本）
@@ -52,10 +52,14 @@
 {
   int ret = 0;
   // write to the system config file
-  KConfig _config( KDE_CONFDIR "kcmclockrc", KConfig::SimpleConfig);
+  KConfig _config( KDE_CONFDIR "/kcmclockrc", KConfig::SimpleConfig );
   KConfigGroup config(&_config, "NTP");
   config.writeEntry("servers", ntpServers );
   config.writeEntry("enabled", ntpEnabled );
+  config.sync();
+  if ( !QFile::setPermissions( KDE_CONFDIR "/kcmclockrc",
+							  QFile::ReadUser|QFile::WriteUser|QFile::ReadGroup|QFile::ReadOther) )
+	  kDebug() << " set file perm failed";
 
   QString ntpUtility;
   if(!KStandardDirs::findExe("ntpdate").isEmpty()) {
@@ -102,7 +106,7 @@
         tf.setPrefix("kde-tzone");
         tf.open();
         QTextStream ts(&tf);
-
+		
         QFile fTimezoneFile(INITFILE);
         bool updatedFile = false;
 
@@ -193,7 +197,6 @@
 
         setenv("TZ", val.toAscii(), 1);
         tzset();
-
     return ret;
 }
 
Index: tzone.cpp
--- tzone.cpp	（版本 854190）
+++ tzone.cpp	（工作副本）
@@ -57,6 +57,8 @@
 #include <sys/stat.h>
 #endif
 
+#include <QDBusConnection>
+
 #include "helper.h"
 
 Tzone::Tzone(QWidget * parent)
@@ -67,6 +69,7 @@
     QVBoxLayout *lay = new QVBoxLayout(this);
 
     tzonelist = new KTimeZoneWidget(this);
+	tzonelist->setSelectionMode( QAbstractItemView::SingleSelection );
     connect( tzonelist, SIGNAL(itemSelectionChanged()), SLOT(handleZoneChange()) );
 
     m_local = new QLabel(this);
@@ -74,15 +77,20 @@
     lay->addWidget(m_local);
     lay->addWidget(tzonelist);
 
+    QDBusConnection dbus = QDBusConnection::sessionBus();
+#define KTIMEZONED_DBUS_IFACE "org.kde.KTimeZoned"
+    dbus.connect(QString(), QString(), KTIMEZONED_DBUS_IFACE, "configChanged", this, SLOT(currentZone()));
+#undef KTIMEZONED_DBUS_IFACE
+	
     load();
 }
 
 void Tzone::load()
 {
-    currentZone();
-
+	tzonelist->clearSelection();
     // read the currently set time zone
     tzonelist->setSelected(KSystemTimeZones::local().name(), true);
+    currentZone();	
 }
 
 void Tzone::currentZone()
@@ -91,10 +99,18 @@
 
     time_t now = time(0);
     tzset();
+
     strftime(result.data(), result.size(), "%Z", localtime(&now));
-    m_local->setText(i18n("Current local timezone: %1 (%2)",
-                          KTimeZoneWidget::displayName(KSystemTimeZones::local()),
-                          QLatin1String(result)));
+	if ( !tzonelist->selection().isEmpty() ) {
+		KTimeZone curZone = KSystemTimeZones::zone( tzonelist->selection()[0] );
+		m_local->setText(i18n("Current local timezone: %1 (%2)",
+							  KTimeZoneWidget::displayName(curZone),
+							  QLatin1String(result)));
+	} else
+		m_local->setText(i18n("Current local timezone: %1 (%2)",
+							  KTimeZoneWidget::displayName(KSystemTimeZones::local()),
+							  QLatin1String(result)));
+	
 }
 
 // FIXME: Does the logic in this routine actually work correctly? For example,
@@ -111,7 +127,7 @@
       helperargs << "tzreset"; // // make the helper reset the timezone
     }
 
-    currentZone();
+//    currentZone(); // useless, cause timezone not changed at this point
 }
 
 void Tzone::processHelperErrors( int code )
Index: dtime.cpp
--- dtime.cpp	（版本 854190）
+++ dtime.cpp	（工作副本）
@@ -261,8 +261,11 @@
   // since there is nothing writing it.
   KConfig _config( "kcmclockrc", KConfig::NoGlobals );
   KConfigGroup config(&_config, "NTP");
+  // localized string can not be process correctly, and since servers read from file, people can
+  // modify it, so mark i18n for default servers is useless. 
+  timeServerList->clear();
   timeServerList->addItems(config.readEntry("servers",
-    i18n("Public Time Server (pool.ntp.org),\
+    QString("pool.ntp.org,\
 asia.pool.ntp.org,\
 europe.pool.ntp.org,\
 north-america.pool.ntp.org,\
Index: main.cpp
--- main.cpp	（版本 854190）
+++ main.cpp	（工作副本）
@@ -98,6 +98,9 @@
     proc << helperargs;
     error = proc.execute();
   }
+
+//  tzone->currentZone();
+  
   if( error < 0 || error == ERROR_CALL )
     KMessageBox::error( this, i18n( "Failed to set system date/time/timezone."), i18n( "Date/Time Error" ));
   else {
Index: tzone.h
--- tzone.h	（版本 854190）
+++ tzone.h	（工作副本）
@@ -41,6 +41,9 @@
   void processHelperErrors( int code );
   void  load();
 
+public Q_SLOTS:
+  void currentZone(); 
+  
 Q_SIGNALS:
 	void zoneChanged(bool);
 
@@ -48,7 +51,6 @@
   void handleZoneChange() {emit zoneChanged( true );}
 
 private:
-  void currentZone();
   QLabel *m_local;
   KTimeZoneWidget *tzonelist;
 };

