1 --- workspace/kcontrol/randr/krandrtray.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
2 +++ workspace/kcontrol/randr/krandrtray.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
4 GenericName[ar]=إعادة تحجيم ودوران الشاشة
5 GenericName[be]=Змена памераў экрана і перагортванне
6 GenericName[be@latin]=Aplet dla źmieny pamieraŭ i pavarotu ekrana
7 -GenericName[bg]=Размер и ротация на екрана
8 +GenericName[bg]=Големина и завъртане на екрана
9 GenericName[bn]=পর্দা মাপবদল ও আবর্তন
10 GenericName[bn_IN]=পর্দা মাপবদল ও আবর্তন
11 GenericName[br]=Adventañ ha treiñ ar skramm
12 --- workspace/kcontrol/randr/randr.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
13 +++ workspace/kcontrol/randr/randr.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
15 Name[ar]=الحجم والاتجاه
16 Name[be]=Памеры і арыентацыя
17 Name[be@latin]=Pamiery j pavarot
18 -Name[bg]=Размер и завъртане на екрана
19 +Name[bg]=Големина и завъртане на екрана
20 Name[bn]=আকৃতি এবং দিশা
21 Name[bn_IN]=মাপ ও দিশা
22 Name[br]=Ment ha reteradur
24 Comment[ar]=غيّر حجم العرض وأدِره
25 Comment[be]=Змяняе памеры і перагортвае ваш экран
26 Comment[be@latin]=Źmianieńnie pamieraŭ i pavarot ekrana
27 -Comment[bg]=Настройване на размера и завъртането на екрана
28 +Comment[bg]=Настройване на големината и завъртането на екрана
29 Comment[bn]=আপনার ডিসপ্লের আকৃতি এবং দিশা পরিবর্তন করুন
30 Comment[bn_IN]=আপনার ডিসপ্লের আকৃতি এবং দিশা পরিবর্তন করুন
31 Comment[br]=Adventañ ha treiñ ho skramm
32 --- workspace/kcontrol/keys/keys.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
33 +++ workspace/kcontrol/keys/keys.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
35 Name[pt]=Atalhos Globais do Teclado
36 Name[pt_BR]=Atalhos de teclado globais
37 Name[ro]=Acceleratori de tastatură globali
38 -Name[ru]=Комбинации клавиш
39 +Name[ru]=Основные действия
40 Name[si]=ගෝලීය යතුරුපුවරු කෙටිමං
41 Name[sk]=Globálne klávesové skratky
42 Name[sl]=Globalne tipkovnične bližnjice
43 --- workspace/solid/kcm/kcm_solid.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
44 +++ workspace/solid/kcm/kcm_solid.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
48 Name[be@latin]=Aparatura
51 Name[bn_IN]=হার্ডওয়্যার
53 --- workspace/powerdevil/daemon/PollSystemLoader.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
54 +++ workspace/powerdevil/daemon/PollSystemLoader.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
59 -QMap<AbstractSystemPoller::PollingType, QString> PollSystemLoader::getAvailableSystems()
60 +QHash<AbstractSystemPoller::PollingType, QString> PollSystemLoader::getAvailableSystems()
63 return m_availableSystems;
66 -QMap<int, QString> PollSystemLoader::getAvailableSystemsAsInt()
67 +QHash<int, QString> PollSystemLoader::getAvailableSystemsAsInt()
71 - QMap<int, QString> retlist;
72 + QHash<int, QString> retlist;
74 - foreach(const AbstractSystemPoller::PollingType &ent, m_availableSystems.keys()) {
75 - retlist[(int) ent] = m_availableSystems[ent];
76 + QHash<AbstractSystemPoller::PollingType, QString>::const_iterator i;
77 + for (i = m_availableSystems.constBegin(); i != m_availableSystems.constEnd(); ++i) {
78 + retlist[(int) i.key()] = i.value();
82 --- workspace/powerdevil/daemon/PowerDevilDaemon.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
83 +++ workspace/powerdevil/daemon/PowerDevilDaemon.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
85 #include <X11/Xatom.h>
86 #include <X11/Xutil.h>
91 #include <X11/extensions/dpms.h>
92 int __kde_do_not_unload = 1;
95 : notifier(Solid::Control::PowerManager::notifier())
98 - , status(PowerDevilDaemon::NoAction) {};
99 + , status(PowerDevilDaemon::NoAction)
100 + , ckSessionInterface(0) {};
102 Solid::Control::PowerManager::Notifier * notifier;
103 QPointer<Solid::Battery> battery;
109 + // ConsoleKit stuff
110 + QDBusInterface *ckSessionInterface;
114 PowerDevilDaemon::PowerDevilDaemon(QObject *parent, const QList<QVariant>&)
119 + // First things first: let's set up PowerDevil to be aware of active session
122 d->profilesConfig = KSharedConfig::openConfig("powerdevilprofilesrc", KConfig::SimpleConfig);
123 setAvailableProfiles(d->profilesConfig->groupList());
126 d->ksmServerIface = new OrgKdeKSMServerInterfaceInterface("org.kde.ksmserver", "/KSMServer",
127 QDBusConnection::sessionBus(), this);
129 - /* Not needed anymore; I am not sure if we will need that in a future, so I leave it here
130 + /* Not needed anymore; I am not sure if we will need that in a future, so I leave it here
133 * d->kscreenSaverIface = new OrgKdeScreensaverInterface("org.freedesktop.ScreenSaver", "/ScreenSaver",
135 if (PowerDevilSettings::pollingSystem() == -1) {
136 // Ok, new configuration... so let's see what we've got!!
138 - QMap<AbstractSystemPoller::PollingType, QString> pList = d->pollLoader->getAvailableSystems();
139 + QHash<AbstractSystemPoller::PollingType, QString> pList = d->pollLoader->getAvailableSystems();
141 if (pList.contains(AbstractSystemPoller::XSyncBased)) {
142 PowerDevilSettings::setPollingSystem(AbstractSystemPoller::XSyncBased);
145 PowerDevilDaemon::~PowerDevilDaemon()
147 + delete d->ckSessionInterface;
153 bool PowerDevilDaemon::loadPollingSystem(AbstractSystemPoller::PollingType type)
155 - QMap<AbstractSystemPoller::PollingType, QString> pList = d->pollLoader->getAvailableSystems();
156 + QHash<AbstractSystemPoller::PollingType, QString> pList = d->pollLoader->getAvailableSystems();
158 if (!pList.contains(type)) {
160 @@ -351,10 +359,11 @@
164 - QMap<int, QString> pmap = d->pollLoader->getAvailableSystemsAsInt();
165 + QHash<int, QString> pmap = d->pollLoader->getAvailableSystemsAsInt();
167 - foreach(int ent, pmap.keys()) {
168 - map[pmap[ent]] = ent;
169 + QHash<int, QString>::const_iterator i;
170 + for (i = pmap.constBegin(); i != pmap.constEnd(); ++i) {
171 + map[i.value()] = i.key();
175 @@ -364,10 +373,14 @@
177 KConfigGroup * settings = getCurrentProfile();
179 - Solid::Control::PowerManager::setBrightness(settings->readEntry("brightness").toInt());
181 POLLER_CALL(d->pollLoader->poller(), stopCatchingIdleEvents());
182 POLLER_CALL(d->pollLoader->poller(), forcePollRequest());
184 + if (!checkIfCurrentSessionActive()) {
188 + Solid::Control::PowerManager::setBrightness(settings->readEntry("brightness").toInt());
191 void PowerDevilDaemon::refreshStatus()
192 @@ -404,15 +417,15 @@
193 emitNotification("unplugged", i18n("The power adaptor has been unplugged"));
198 reloadProfile(state);
208 int dropError(Display *, XErrorEvent *);
209 typedef int (*XErrFunc)(Display *, XErrorEvent *);
211 @@ -425,10 +438,15 @@
213 void PowerDevilDaemon::applyProfile()
215 + if (!checkIfCurrentSessionActive()) {
219 KConfigGroup * settings = getCurrentProfile();
226 Solid::Control::PowerManager::setBrightness(settings->readEntry("brightness").toInt());
227 Solid::Control::PowerManager::setCpuFreqPolicy((Solid::Control::PowerManager::CpuFreqPolicy)
228 @@ -459,10 +477,15 @@
230 void PowerDevilDaemon::setUpDPMS()
232 + if (!checkIfCurrentSessionActive()) {
236 KConfigGroup * settings = getCurrentProfile();
247 setBatteryPercent(charge);
249 - if (Solid::Control::PowerManager::acAdapterState() == Solid::Control::PowerManager::Plugged)
250 + if (Solid::Control::PowerManager::acAdapterState() == Solid::Control::PowerManager::Plugged) {
254 + if (!checkIfCurrentSessionActive()) {
258 if (charge <= PowerDevilSettings::batteryCriticalLevel()) {
259 switch (PowerDevilSettings::batLowAction()) {
263 void PowerDevilDaemon::buttonPressed(int but)
265 + if (!checkIfCurrentSessionActive() || d->screenSaverIface->GetActive()) {
269 KConfigGroup * settings = getCurrentProfile();
272 @@ -681,18 +713,30 @@
274 void PowerDevilDaemon::decreaseBrightness()
276 + if (!checkIfCurrentSessionActive()) {
280 int currentBrightness = qMax(0, (int)(Solid::Control::PowerManager::brightness() - 10));
281 Solid::Control::PowerManager::setBrightness(currentBrightness);
284 void PowerDevilDaemon::increaseBrightness()
286 + if (!checkIfCurrentSessionActive()) {
290 int currentBrightness = qMin(100, (int)(Solid::Control::PowerManager::brightness() + 10));
291 Solid::Control::PowerManager::setBrightness(currentBrightness);
294 void PowerDevilDaemon::shutdownNotification(bool automated)
296 + if (!checkIfCurrentSessionActive()) {
300 if (!d->lockHandler->setNotificationLock(automated)) {
305 void PowerDevilDaemon::suspendToDiskNotification(bool automated)
307 + if (!checkIfCurrentSessionActive()) {
311 if (!d->lockHandler->setNotificationLock(automated)) {
316 void PowerDevilDaemon::suspendToRamNotification(bool automated)
318 + if (!checkIfCurrentSessionActive()) {
322 if (!d->lockHandler->setNotificationLock(automated)) {
327 void PowerDevilDaemon::standbyNotification(bool automated)
329 + if (!checkIfCurrentSessionActive()) {
333 if (!d->lockHandler->setNotificationLock(automated)) {
338 void PowerDevilDaemon::shutdown(bool automated)
340 + if (!checkIfCurrentSessionActive()) {
344 if (!d->lockHandler->setJobLock(automated)) {
349 void PowerDevilDaemon::suspendToDisk(bool automated)
351 + if (!checkIfCurrentSessionActive()) {
355 if (!d->lockHandler->setJobLock(automated)) {
360 void PowerDevilDaemon::suspendToRam(bool automated)
362 + if (!checkIfCurrentSessionActive()) {
366 if (!d->lockHandler->setJobLock(automated)) {
371 void PowerDevilDaemon::standby(bool automated)
373 + if (!checkIfCurrentSessionActive()) {
377 if (!d->lockHandler->setJobLock(automated)) {
381 * We make an intensive use of qMin/qMax here to determine the minimum time.
384 - // kDebug() << "Polling started, idle time is" << idle << "seconds";
385 + // kDebug() << "Polling started, idle time is" << idle << "seconds";
387 + if (!checkIfCurrentSessionActive()) {
391 KConfigGroup * settings = getCurrentProfile();
396 if (!settings->readEntry("dimOnIdle", false) && !settings->readEntry("turnOffIdle", false) &&
397 settings->readEntry("idleAction").toInt() == None) {
398 - // kDebug() << "Stopping timer";
399 + // kDebug() << "Stopping timer";
400 POLLER_CALL(d->pollLoader->poller(), stopCatchingTimeouts());
403 @@ -891,13 +967,13 @@
404 minTime = qMin(minTime, minDimTime);
407 - // kDebug() << "Minimum time is" << minTime << "seconds";
408 + // kDebug() << "Minimum time is" << minTime << "seconds";
410 if (idle < minTime) {
411 d->status = NoAction;
412 int remaining = minTime - idle;
413 POLLER_CALL(d->pollLoader->poller(), setNextTimeout(remaining * 1000));
414 - // kDebug() << "Nothing to do, next event in" << remaining << "seconds";
415 + // kDebug() << "Nothing to do, next event in" << remaining << "seconds";
419 @@ -1009,6 +1085,10 @@
421 void PowerDevilDaemon::lockScreen()
423 + if (!checkIfCurrentSessionActive()) {
427 emitNotification("doingjob", i18n("The screen is being locked"));
428 d->screenSaverIface->Lock();
430 @@ -1136,6 +1216,10 @@
432 void PowerDevilDaemon::reloadProfile(int state)
434 + if (!checkIfCurrentSessionActive()) {
438 if (!recacheBatteryPointer()) {
439 setCurrentProfile(PowerDevilSettings::aCProfile());
441 @@ -1186,6 +1270,10 @@
443 void PowerDevilDaemon::setProfile(const QString & profile)
445 + if (!checkIfCurrentSessionActive()) {
449 setCurrentProfile(profile);
451 /* Don't call refreshStatus() here, since we don't want the predefined profile
452 @@ -1202,6 +1290,10 @@
454 void PowerDevilDaemon::reloadAndStream()
456 + if (!checkIfCurrentSessionActive()) {
462 setAvailableProfiles(d->profilesConfig->groupList());
463 @@ -1274,16 +1366,28 @@
465 void PowerDevilDaemon::setPowersavingScheme(const QString &scheme)
467 + if (!checkIfCurrentSessionActive()) {
471 Solid::Control::PowerManager::setScheme(scheme);
474 void PowerDevilDaemon::setGovernor(int governor)
476 + if (!checkIfCurrentSessionActive()) {
480 Solid::Control::PowerManager::setCpuFreqPolicy((Solid::Control::PowerManager::CpuFreqPolicy) governor);
483 void PowerDevilDaemon::suspend(int method)
485 + if (!checkIfCurrentSessionActive()) {
489 switch ((IdleAction) method) {
491 QTimer::singleShot(100, this, SLOT(suspendToDisk()));
492 @@ -1301,6 +1405,10 @@
494 void PowerDevilDaemon::setBrightness(int value)
496 + if (!checkIfCurrentSessionActive()) {
501 // Then set brightness to half the current brightness.
503 @@ -1332,6 +1440,10 @@
505 void PowerDevilDaemon::profileFirstLoad()
507 + if (!checkIfCurrentSessionActive()) {
511 KConfigGroup * settings = getCurrentProfile();
514 @@ -1411,6 +1523,10 @@
516 void PowerDevilDaemon::setCurrentProfile(const QString &profile)
518 + if (!checkIfCurrentSessionActive()) {
522 if (profile != d->currentProfile) {
523 d->currentProfile = profile;
525 @@ -1424,4 +1540,62 @@
526 emit profileChanged(d->currentProfile, d->availableProfiles);
529 +bool PowerDevilDaemon::checkIfCurrentSessionActive()
531 + if (!d->ckAvailable) {
532 + // No way to determine if we are on the current session, simply suppose we are
533 + kDebug() << "Can't contact ck";
537 + QDBusReply<bool> rp = d->ckSessionInterface->call("IsActive");
542 +void PowerDevilDaemon::setUpConsoleKit()
544 + // Let's cache the needed information to check if our session is actually active
546 + if (!QDBusConnection::systemBus().interface()->isServiceRegistered("org.freedesktop.ConsoleKit")) {
547 + // No way to determine if we are on the current session, simply suppose we are
548 + kDebug() << "Can't contact ck";
549 + d->ckAvailable = false;
552 + d->ckAvailable = true;
555 + // Otherwise, let's ask ConsoleKit
556 + QDBusInterface ckiface("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager",
557 + "org.freedesktop.ConsoleKit.Manager", QDBusConnection::systemBus());
559 + QDBusReply<QDBusObjectPath> sessionPath = ckiface.call("GetCurrentSession");
561 + if (!sessionPath.isValid() || sessionPath.value().path().isEmpty()) {
562 + kDebug() << "The session is not registered with ck";
563 + d->ckAvailable = false;
567 + d->ckSessionInterface = new QDBusInterface("org.freedesktop.ConsoleKit", sessionPath.value().path(),
568 + "org.freedesktop.ConsoleKit.Session", QDBusConnection::systemBus());
570 + if (!d->ckSessionInterface->isValid()) {
572 + kDebug() << "Can't contact iface";
573 + d->ckAvailable = false;
577 + /* If everything's fine, let's attach ourself to the ActiveChanged signal.
578 + * You'll see we're attaching to refreshStatus without any further checks. You know why?
579 + * refreshStatus already checks if the console is active, so the check is already happening
583 + QDBusConnection::systemBus().connect("org.freedesktop.ConsoleKit", sessionPath.value().path(),
584 + "org.freedesktop.ConsoleKit.Session", "ActiveChanged", this, SLOT(refreshStatus()));
587 #include "PowerDevilDaemon.moc"
588 --- workspace/powerdevil/daemon/PollSystemLoader.h (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
589 +++ workspace/powerdevil/daemon/PollSystemLoader.h (.../branches/KDE/4.2/kdebase) (wersja 956244)
591 #define POLLSYSTEMLOADER_H
598 #include "AbstractSystemPoller.h"
600 PollSystemLoader(QObject *parent = 0);
601 virtual ~PollSystemLoader();
603 - QMap<AbstractSystemPoller::PollingType, QString> getAvailableSystems();
604 - QMap<int, QString> getAvailableSystemsAsInt();
605 + QHash<AbstractSystemPoller::PollingType, QString> getAvailableSystems();
606 + QHash<int, QString> getAvailableSystemsAsInt();
608 bool loadSystem(AbstractSystemPoller::PollingType type);
609 bool unloadCurrentSystem();
613 QPointer<AbstractSystemPoller> m_poller;
614 - QMap<AbstractSystemPoller::PollingType, QString> m_availableSystems;
615 + QHash<AbstractSystemPoller::PollingType, QString> m_availableSystems;
618 #endif /* POLLSYSTEMLOADER_H */
619 --- workspace/powerdevil/daemon/PowerDevilDaemon.h (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
620 +++ workspace/powerdevil/daemon/PowerDevilDaemon.h (.../branches/KDE/4.2/kdebase) (wersja 956244)
622 class PollSystemLoader;
623 class SuspensionLockHandler;
625 -class OrgFreedesktopScreenSaverInterface;
626 -class OrgKdeKSMServerInterfaceInterface;
627 -class OrgKdeScreensaverInterface;
629 class KDE_EXPORT PowerDevilDaemon : public KDEDModule
639 KConfigGroup *getCurrentProfile(bool forcereload = false);
644 bool recacheBatteryPointer(bool force = false);
646 + void setUpConsoleKit();
648 + bool checkIfCurrentSessionActive();
657 - ShutdownDialog = 32
658 + ShutdownDialog = 32,
663 --- workspace/powerdevil/kcmodule/PowerDevilKCM.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
664 +++ workspace/powerdevil/kcmodule/PowerDevilKCM.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
666 if (iface.isValid()) {
667 QDBusConnection conn = QDBusConnection::systemBus();
669 - if (conn.interface()->isServiceRegistered("org.freedesktop.PowerManagement") ||
670 - conn.interface()->isServiceRegistered("org.freedesktop.Policy.Power")) {
671 + if (conn.interface()->isServiceRegistered("org.freedesktop.PowerManagement") || (
672 + conn.interface()->isServiceRegistered("org.freedesktop.Policy.Power") && !QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.powerdevilsystem"))){
673 initError(i18n("Another power manager has been detected. PowerDevil will not start if "
674 "other power managers are active. If you want to use PowerDevil as your primary "
675 "power manager, please remove the existing one and restart PowerDevil service."));
676 --- workspace/powerdevil/kcmodule/powerdevilconfig.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
677 +++ workspace/powerdevil/kcmodule/powerdevilconfig.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
679 Name[ru]=Управление питанием
680 Name[sk]=Správa napájania
681 Name[sl]=Upravljanje z energijo
682 -Name[sr]=управљање енергијом
683 -Name[sr@latin]=upravljanje energijom
684 +Name[sr]=Управљање енергијом
685 +Name[sr@latin]=Upravljanje energijom
686 Name[sv]=Strömsparhantering
687 Name[tg]=Идоракунии барқ
688 Name[th]=การจัดการพลังงาน
689 --- workspace/powerdevil/powerdevil.notifyrc (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
690 +++ workspace/powerdevil/powerdevil.notifyrc (.../branches/KDE/4.2/kdebase) (wersja 956244)
692 Name[ru]=Управление питанием
693 Name[sk]=Správa napájania
694 Name[sl]=Upravljanje z energijo
695 -Name[sr]=управљање енергијом
696 -Name[sr@latin]=upravljanje energijom
697 +Name[sr]=Управљање енергијом
698 +Name[sr@latin]=Upravljanje energijom
699 Name[sv]=Strömsparhantering
700 Name[tg]=Идоракунии барқ
701 Name[th]=การจัดการพลังงาน
702 --- workspace/krunner/interfaces/default/interface.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
703 +++ workspace/krunner/interfaces/default/interface.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
705 m_layout->addWidget(m_buttonContainer);
707 m_searchTerm = new KHistoryComboBox(false, w);
708 + m_searchTerm->setPalette(QApplication::palette());
709 m_searchTerm->setDuplicatesEnabled(false);
711 KLineEdit *lineEdit = new KLineEdit(m_searchTerm);
714 kDebug() << item->name() << item->id();
715 m_delayedRun = false;
716 - m_searchTerm->addToHistory(m_searchTerm->currentText());
718 if (item->group() == Plasma::QueryMatch::InformationalMatch) {
719 QString info = item->data();
722 m_resultsScene->run(item);
725 + //TODO: check if run succesful before adding the term to history
726 + m_searchTerm->addToHistory(m_searchTerm->currentText().trimmed());
730 --- workspace/krunner/interfaces/default/resultscene.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
731 +++ workspace/krunner/interfaces/default/resultscene.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
732 @@ -323,14 +323,14 @@
734 bool ResultScene::launchQuery(const QString &term)
736 - bool temp = !(term.isEmpty() || m_runnerManager->query() == term);
737 + bool temp = !(term.trimmed().isEmpty() || m_runnerManager->query() == term.trimmed());
738 m_runnerManager->launchQuery(term);
742 bool ResultScene::launchQuery(const QString &term, const QString &runner)
744 - bool temp = !(term.isEmpty() || m_runnerManager->query() == term);
745 + bool temp = !(term.trimmed().isEmpty() || m_runnerManager->query() == term.trimmed());
746 m_runnerManager->launchQuery(term, runner);
749 --- workspace/libs/kephal/xrandr12/randrcrtc.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
750 +++ workspace/libs/kephal/xrandr12/randrcrtc.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
753 QRect r = QRect(0,0,0,0).united(m_proposedRect);
754 if (r.width() > m_screen->maxSize().width() || r.height() > m_screen->maxSize().height())
760 // if the desired mode is bigger than the current screen size, first change the
761 // screen size, and then the crtc size
764 // try to adjust the screen size
765 if (!m_screen->adjustSize(r))
773 @@ -303,12 +309,18 @@
774 // check if the rotated rect is smaller than the max screen size
775 r = m_screen->rect().united(r);
776 if (r.width() > m_screen->maxSize().width() || r.height() > m_screen->maxSize().height())
782 // adjust the screen size
783 r = r.united(m_currentRect);
784 if (!m_screen->adjustSize(r))
792 --- workspace/libs/taskmanager/task.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
793 +++ workspace/libs/taskmanager/task.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
796 bool Task::demandsAttention() const
798 - return (d->info.valid() && (d->info.state() & NET::DemandsAttention)) ||
799 + return (d->info.valid(true) && (d->info.state() & NET::DemandsAttention)) ||
800 !d->transientsDemandingAttention.isEmpty();
803 --- workspace/kscreensaver/libkscreensaver/kscreensaver.h (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
804 +++ workspace/kscreensaver/libkscreensaver/kscreensaver.h (.../branches/KDE/4.2/kdebase) (wersja 956244)
806 bool event( QEvent* event );
809 - KScreenSaverPrivate *d;
810 + //Note: To keep binary compatibility this class must have only one member, which is a pointer.
811 + // If more members are needed, use the d-pointer technique.
812 + // See http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C%2B%2B
813 + //KScreenSaverPrivate *d;
814 + QWidget *embeddedWidget;
818 --- workspace/kscreensaver/libkscreensaver/kscreensaver.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
819 +++ workspace/kscreensaver/libkscreensaver/kscreensaver.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
822 //-----------------------------------------------------------------------------
824 -KScreenSaver::KScreenSaver( WId id ) : QWidget()
825 +KScreenSaver::KScreenSaver( WId id ) : QWidget(), embeddedWidget(0)
830 bool r = QWidget::event(e);
831 if (e->type() == QEvent::Polish)
832 setAttribute(Qt::WA_StyledBackground, false);
833 + if ((e->type() == QEvent::Resize) && embeddedWidget)
834 + embeddedWidget->resize( size() );
838 void KScreenSaver::embed( QWidget *w )
840 + w->resize( size() );
841 QApplication::sendPostedEvents();
842 #ifdef Q_WS_X11 //FIXME
843 XReparentWindow(QX11Info::display(), w->winId(), winId(), 0, 0);
845 w->setGeometry( 0, 0, width(), height() );
846 + embeddedWidget = w;
847 QApplication::sendPostedEvents();
850 --- workspace/khotkeys/data/kde32b1.khotkeys (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
851 +++ workspace/khotkeys/data/kde32b1.khotkeys (.../branches/KDE/4.2/kdebase) (wersja 956244)
853 Comment[pt]=Depois carregar em Alt+Ctrl+H, será simulada a escrita de 'Olá', tal como se tivesse escrito de facto. É especialmente útil se você não quiser estar a escrever coisas do tipo 'unsigned'. Sempre que carregar numa tecla do campo de texto será separado por dois-pontos ':'. Repare que o carregar de teclas é mesmo o carregar de teclas, pelo que terá de escrever realmente o que deseja no teclado. Na tabela abaixo, a coluna esquerda mostra o texto introduzido e a coluna à direita mostra o que é necessário escrever.\n\n"enter" (i.e. mudança de linha) Enter ou Return\na (i.e. 'a' minúsculo) A\nA (i.e. 'a' maiúsculo) Shift+A\n: (dois-pontos) Shift+;\n' ' (espaço) Espaço
854 Comment[pt_BR]=Após pressionar Alt+Ctrl+H, a entrada 'Hello' será simulada como se você a tivesse digitado. Especialmente útil se você está com preguiça de digitar coisas como 'unsigned'. Cada tecla pressionada na entrada é separada por dois-pontos ':' . Note que teclas pressionadas significa realmente teclas pressionadas, então você tem que escrever o que queria pressionar realmente no teclado. Na tabela abaixo, a coluna da esquerda mostra a entrada e a coluna da direita mostra o que você digitou.\n\n"enter" (i.e. nova linha) Enter ou Return\na (i.e. a minúsculo) A\nA (i.e. a maiúsculo) Shift+A\n: (dois-pontos) Shift+;\n' ' (espaço) Espaço
855 Comment[ro]=După apăsarea Alt+Ctrl+H, intrarea „Salut” va fi simulată ca și cînd ați fi tastat-o dumneavoastră. Este deosebit de utilă dacă vă e lene să tastați cuvinte ca „unsigned”. Fiecare tastare în intrare este despărțită de „:”. Luați aminte că tastările înseamnă chiar apăsări de taste, deci trebuie să scrieți exact ceea ce ați apăsa pe tastatură. În tabelul de mai jos, coloana stîngă arată intrarea iar cea dreptă - ce trebuie să scrieți.\n\n"enter" (linie nouă) Enter sau Retur\na („a” mic) A\nA (A majuscul) Shift+A\n: (două puncte) Shift+;\n' ' (spațiu) Spațiu
856 -Comment[ru]=При нажатии комбинации клавиш Alt+Ctrl+H будет эмулирован ввод слова "Hello" как будто бы вы набивали его вручную с клавиатуры.
857 +Comment[ru]=При нажатии комбинации клавиш Alt+Ctrl+H будет эмулирован ввод слова «Hello» как будто бы вы набивали его вручную с клавиатуры.
858 Comment[sk]=Po stlačení Alt+Ctrl+H bude simulovaný vstup 'Hello' presne tak, ako keby ste ho napísali. Mimoriadne užitočné, ak ste lenivý písať veci ako 'unsigned'. Každé stlačenie klávesu je oddelené dvojbodkou ':'. Všimnite si, že stlačenia klávesu znamenajú skutočné stlačenie, takže musíte napísať, čo v skutočnosti na klávesnici stláčate. V tabuľke nižšie ukazuje ľavý stĺpec vstup a pravý stĺpec, čo treba napísať.\n\n"enter" (t.j. nový riadok) Enter alebo Return\na (t.j. malé a) A\nA (t.j. veľké a) Shift+A\n: (dvojbodka) Shift+;\n' ' (medzera) Medzera
859 Comment[sl]=Po pritisku Alt+Ctrl+H se bo vnesla beseda »Hello«, kot da bi jo vtipkali. Uporabno, če se vam ne da tipkati dolgih besed ali nizov besed. Pritiski tipk so v polju ločeni z dvopičjem »:«. Pomnite, da pritiski tipk pomenijo prav to. Zato morate vnesti točno to, kar bi pritisnili na tipkovnici. V spodnji razpredelnici je v levem stolpcu prikazan vnos, v desnem pa, kaj je zanj potrebno pritisniti na tipkovnici.\n\n"vnos" (nova vrstica) Vnos ali Vračalka\na (mali a) A\nA (veliki a) Shift+A\n: (dvopičje) Shift+.\n' ' (presledek) Preslednica
860 Comment[sr]=Притисак на Ctrl+Alt+H симулираће унос „Hello“ као да сте га укуцали тастатуром. Врло корисно када сте исувише лењи да стално уносите „unsigned“ и томе слично. Сваки притисак тастера у уносу раздваја се двотачком (:). Пазите да под притиском на тастер заиста то и мислимо, тј. морате унети тачно оно што бисте притиснули на тастатури. У табели испод, лева колона приказује унос, а десна шта за треба да се притисне.\n\n„enter“ (тј. нов ред) Enter или Return\na (тј. мало a) A\nA (тј. велико a) Shift+A\n: (двотачка) Shift+;\n' ' (размак) Space
861 --- workspace/kwin/effects/taskbarthumbnail.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
862 +++ workspace/kwin/effects/taskbarthumbnail.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
864 Comment[sv]=Visa miniatyrbilder av fönster när pekaren hålls över deras post i aktivitetsfältet
865 Comment[th]=แสดงภาพย่อของหน้าต่างเมื่อเคลื่อนเมาส์มาอยู่เหนือรายการในแถบงาน
866 Comment[tr]=Bir pencerenin görev çubuğundaki girdisi üzerine gelindiğinde o pencerenin küçük resmini gösterir
867 -Comment[uk]=Показує мініатюри вікон, коли курсор знаходиться над елементом панелі задач
868 +Comment[uk]=Показує мініатюри вікон, коли вказівник знаходиться над елементом панелі задач
869 Comment[x-test]=xxDisplay window thumbnails when hovering over taskbar entriesxx
870 Comment[zh_CN]=当鼠标悬停在任务栏时显示窗口缩略图
871 Comment[zh_TW]=當游標停在工作列的按鈕上面時,顯示視窗的縮圖
872 --- workspace/kwin/effects/magiclamp.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
873 +++ workspace/kwin/effects/magiclamp.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
877 KWIN_EFFECT( magiclamp, MagicLampEffect )
878 +KWIN_EFFECT_SUPPORTED( magiclamp, MagicLampEffect::supported() )
880 MagicLampEffect::MagicLampEffect()
882 mActiveAnimations = 0;
885 +bool MagicLampEffect::supported()
887 + return effects->compositingType() == OpenGLCompositing;
890 void MagicLampEffect::prePaintScreen( ScreenPrePaintData& data, int time )
892 --- workspace/kwin/effects/magiclamp.h (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
893 +++ workspace/kwin/effects/magiclamp.h (.../branches/KDE/4.2/kdebase) (wersja 956244)
895 virtual void windowMinimized( EffectWindow* c );
896 virtual void windowUnminimized( EffectWindow* c );
898 + static bool supported();
901 QHash< EffectWindow*, TimeLine > mTimeLineWindows;
902 int mActiveAnimations;
903 --- workspace/kwin/effects/desktopgrid.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
904 +++ workspace/kwin/effects/desktopgrid.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
907 Icon=preferences-system-windows-effect-desktop-grid
908 Comment=Zoom out so all desktops are displayed side-by-side in a grid
909 +Comment[bg]=Работните плотове да се показват един до друг в мрежа
910 Comment[ca]=Redueix tots els escriptoris per a visualitzar-los un al costat de l'altre en una graella
911 Comment[cs]=Oddálí plochy a zobrazí je v mřížce
912 Comment[da]=Zoom ud så alle desktoppe vises side om side i et gitter
913 --- workspace/kwin/main.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
914 +++ workspace/kwin/main.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
918 //fprintf( stderr, "kwin: X Error (%s)\n", KXErrorHandler::errorMessage( *e, d ).data());
919 - fprintf( stderr, "kwin: X Error (%s)\n", errorMessage( *e, d ).data() );
920 + kWarning( 1212 ) << "kwin: X Error (" << errorMessage( *e, d ) << ")";
923 fprintf( stderr, "%s\n", kBacktrace().toLocal8Bit().data() );
924 --- workspace/kdm/kfrontend/sessions/icewm.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
925 +++ workspace/kdm/kfrontend/sessions/icewm.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
927 Comment[ar]=مدير نوافذ يشبه نوافذ 95-OS/2
928 Comment[be]=Кіраўнік вокнаў, падобны на Windows 95-OS/2-Motif
929 Comment[be@latin]=Akońnik, jaki vyhladaje, jak spałučeńnie systemaŭ „Windows 95”, „OS/2” i „Motif”
930 -Comment[bg]=Мениждър, приличащ на Windows 95-OS/2-Motif
931 +Comment[bg]=Мениджър, приличащ на Windows 95-OS/2-Motif
932 Comment[bn]=Windows 95-OS/2-Motif-এর অনুরূপ একটি উইণ্ডো ম্যানেজার
933 Comment[bn_IN]=Windows 95-OS/2-Motif-এর অনুরূপ একটি উইণ্ডো ম্যানেজার
934 Comment[ca]=Un gestor de finestres com els de Windows 95-OS/2-Motif
935 --- workspace/ksysguard/ksysguardd/Command.c (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
936 +++ workspace/ksysguard/ksysguardd/Command.c (.../branches/KDE/4.2/kdebase) (wersja 956244)
938 Command* cmd = (Command*)malloc( sizeof( Command ) );
939 if(!cmd || !(cmd->command = (char*)malloc( strlen( command ) + 1 ))) {
940 print_error("Out of memory");
944 strcpy( cmd->command, command );
946 Command* cmd = (Command*)malloc( sizeof( Command ) );
947 if(!cmd || !(cmd->command = (char*)malloc( strlen( command ) + 1 ))) {
948 print_error("Out of memory");
954 cmd->type = (char*)malloc( strlen( type ) + 1 );
956 print_error("Out of memory");
962 cmd->command = (char*)malloc( strlen( command ) + 2 );
964 print_error("Out of memory");
969 --- workspace/plasma/dataengines/powermanagement/plasma-dataengine-powermanagement.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
970 +++ workspace/plasma/dataengines/powermanagement/plasma-dataengine-powermanagement.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
972 Name[ru]=Управление питанием
973 Name[sk]=Správa napájania
974 Name[sl]=Upravljanje z energijo
975 -Name[sr]=управљање енергијом
976 -Name[sr@latin]=upravljanje energijom
977 +Name[sr]=Управљање енергијом
978 +Name[sr@latin]=Upravljanje energijom
979 Name[sv]=Strömsparhantering
980 Name[tg]=Идоракунии барқ
981 Name[th]=การจัดการพลังงาน
982 --- workspace/plasma/shells/desktop/panelview.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
983 +++ workspace/plasma/shells/desktop/panelview.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
985 KWindowSystem::setType(winId(), NET::Dock);
986 m_svg->setImagePath("widgets/glowbar");
988 + QPalette pal = palette();
989 + pal.setColor(backgroundRole(), Qt::transparent);
992 QRect glowGeom = triggerZone;
993 QSize s = sizeHint();
994 switch (m_direction) {
995 --- workspace/plasma/runners/locations/locationrunner.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
996 +++ workspace/plasma/runners/locations/locationrunner.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
998 match.setText(i18n("Open %1", term));
999 match.setIcon(KIcon("system-help"));
1000 match.setRelevance(1);
1001 - match.setRelevance(1);
1002 match.setType(Plasma::QueryMatch::ExactMatch);
1003 match.setId("help");
1004 context.addMatch(term, match);
1005 --- workspace/plasma/tools/desktopthemedetails/desktopthemedetails.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
1006 +++ workspace/plasma/tools/desktopthemedetails/desktopthemedetails.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
1008 Name=Desktop Theme Details
1009 Name[ar]=تفاصيل سمة سطح المكتب
1010 Name[be@latin]=Detali matyva dla rabočaha stała
1011 +Name[bg]=Детайли на темите
1012 Name[ca]=Detalls del tema d'escriptori
1013 Name[cs]=Detaily motivu plochy
1014 Name[csb]=Wëdowiédzô ò témie pùltu
1015 --- workspace/plasma/applets/calendar/calendar.h (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
1016 +++ workspace/plasma/applets/calendar/calendar.h (.../branches/KDE/4.2/kdebase) (wersja 956244)
1019 QGraphicsWidget *graphicsWidget();
1022 - void updateDate();
1023 - void timerEvent(QTimerEvent *event);
1026 void configAccepted();
1027 + void updateDate();
1032 Plasma::Calendar *m_calendarDialog;
1033 Plasma::Svg *m_theme;
1035 - int m_updateTimerId;
1038 K_EXPORT_PLASMA_APPLET(calendar, CalendarTest)
1039 --- workspace/plasma/applets/calendar/calendar.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
1040 +++ workspace/plasma/applets/calendar/calendar.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
1043 #include <QGraphicsLayout>
1050 : Plasma::PopupApplet(parent, args),
1051 m_calendarDialog(0),
1054 - m_updateTimerId(0)
1057 setAspectRatioMode(Plasma::IgnoreAspectRatio);
1058 setCacheMode(DeviceCoordinateCache);
1059 @@ -116,18 +116,9 @@
1060 QDateTime d = QDateTime::currentDateTime();
1061 m_date = d.date().day();
1062 int updateIn = (24 * 60 * 60) - (d.toTime_t() + KSystemTimeZones::local().currentOffset()) % (24 * 60 * 60);
1063 - m_updateTimerId = startTimer(updateIn * 1000);
1064 + QTimer::singleShot(updateIn * 1000, this, SLOT(updateDate()));
1065 constraintsEvent(Plasma::FormFactorConstraint);
1068 -void CalendarTest::timerEvent(QTimerEvent *event)
1070 - if (event->timerId() != m_updateTimerId) {
1074 - killTimer(m_updateTimerId);
1078 #include "calendar.moc"
1079 --- workspace/plasma/applets/system-monitor/net.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
1080 +++ workspace/plasma/applets/system-monitor/net.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
1082 plotter->addPlot(QColor(((color.red() - 128) * 0.90) + 128, 0, 0, color.alpha()));
1083 plotter->setUseAutoRange(true);
1084 plotter->setThinFrame(false);
1085 - plotter->setShowLabels(false);
1086 + plotter->setShowLabels(true);
1087 plotter->setShowTopBar(false);
1088 plotter->setShowVerticalLines(false);
1089 plotter->setShowHorizontalLines(false);
1090 --- workspace/plasma/applets/battery/battery.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
1091 +++ workspace/plasma/applets/battery/battery.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
1092 @@ -818,13 +818,6 @@
1093 m_theme->paint(p, scaleRectF(m_acAlpha, contentsRect), "AcAdapter");
1096 - // For small FormFactors, we're drawing a shadow
1097 - if (formFactor() == Plasma::Vertical ||
1098 - formFactor() == Plasma::Horizontal) {
1100 - m_theme->paint(p, contentsRect, "Shadow");
1103 if (plugState && m_theme->hasElement("Overlay")) {
1104 m_theme->paint(p, scaleRectF(m_batteryAlpha, contentsRect), "Overlay");
1106 --- workspace/plasma/applets/kickoff/ui/launcher.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
1107 +++ workspace/plasma/applets/kickoff/ui/launcher.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244)
1108 @@ -765,21 +765,34 @@
1109 if (d->placement != placement) {
1110 d->placement = placement;
1112 + Private::TabOrder normalOrder;
1113 + Private::TabOrder reverseOrder;
1115 + //QTabBar attempts to be smart and flips what we say in rtl mode so say the opposite when the tabbar is horizontal
1116 + if (QApplication::layoutDirection() == Qt::RightToLeft) {
1117 + normalOrder = Private::ReverseTabOrder;
1118 + reverseOrder = Private::NormalTabOrder;
1120 + normalOrder = Private::NormalTabOrder;
1121 + reverseOrder = Private::ReverseTabOrder;
1124 switch (placement) {
1125 case Plasma::TopPosedRightAlignedPopup:
1126 - d->setSouthLayout(Private::ReverseTabOrder);
1127 + d->setSouthLayout(reverseOrder);
1129 case Plasma::LeftPosedTopAlignedPopup:
1130 + //when the tabbar is vertical it's fine
1131 d->setEastLayout(Private::NormalTabOrder);
1133 case Plasma::LeftPosedBottomAlignedPopup:
1134 d->setEastLayout(Private::ReverseTabOrder);
1136 case Plasma::BottomPosedLeftAlignedPopup:
1137 - d->setNorthLayout(Private::NormalTabOrder);
1138 + d->setNorthLayout(normalOrder);
1140 case Plasma::BottomPosedRightAlignedPopup:
1141 - d->setNorthLayout(Private::ReverseTabOrder);
1142 + d->setNorthLayout(reverseOrder);
1144 case Plasma::RightPosedTopAlignedPopup:
1145 d->setWestLayout(Private::NormalTabOrder);
1148 case Plasma::TopPosedLeftAlignedPopup:
1150 - d->setSouthLayout(Private::NormalTabOrder);
1151 + d->setSouthLayout(normalOrder);
1155 --- workspace/plasma/scriptengines/webkit/plasma-packagestructure-dashboard.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
1156 +++ workspace/plasma/scriptengines/webkit/plasma-packagestructure-dashboard.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
1158 Name[uk]=Віджети панелі приладів MacOS
1159 Name[x-test]=xxMacOS Dashboard Widgetsxx
1160 Name[zh_CN]=MacOS 部件板部件
1161 -Name[zh_TW]=MacOS 儀表板元件
1162 +Name[zh_TW]=MacOS 資訊看板元件
1163 Comment=MacOS dashboard widget
1164 Comment[ar]=ودجة لوحة MacOS
1165 Comment[be@latin]=Widžet „Dashboard” dla systemy „MacOS”
1167 Comment[uk]=Віджет панелі приладів MacOS
1168 Comment[x-test]=xxMacOS dashboard widgetxx
1169 Comment[zh_CN]=MacOS 部件板
1170 -Comment[zh_TW]=MacOS 儀表板元件
1171 +Comment[zh_TW]=MacOS 資訊看板元件
1173 ServiceTypes=Plasma/PackageStructure
1175 --- workspace/plasma/scriptengines/webkit/plasma-scriptengine-applet-dashboard.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
1176 +++ workspace/plasma/scriptengines/webkit/plasma-scriptengine-applet-dashboard.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
1178 Name[uk]=Панель приладів
1179 Name[x-test]=xxDashboardxx
1183 Comment=MacOS X dashboard widget
1184 Comment[ar]=لوحة ودجات MacOS
1185 Comment[be@latin]=Widžet „Dashboard” systemy „MacOS X”.
1187 Comment[uk]=Віджет панелі приладів MacOS X
1188 Comment[x-test]=xxMacOS X dashboard widgetxx
1189 Comment[zh_CN]=MacOS X 部件板
1190 -Comment[zh_TW]=MacOS X 儀表板元件
1191 +Comment[zh_TW]=MacOS X 資訊看板元件
1193 ServiceTypes=Plasma/ScriptEngine
1194 Icon=internet-web-browser
1195 --- workspace/plasma/scriptengines/javascript/tests/script-digital-clock/metadata.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244)
1196 +++ workspace/plasma/scriptengines/javascript/tests/script-digital-clock/metadata.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244)
1198 Name[x-test]=xxscript-digital-clockxx
1200 Comment=Javascript digital clock
1201 +Comment[bg]=Цифров часовник (JavaScript)
1202 Comment[ca]=Rellotge digital en Javascript
1203 Comment[cs]=Digitální hodiny v JavaScriptu
1204 Comment[da]=Digitalt ur i Javascript