--- workspace/kcontrol/randr/krandrtray.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/kcontrol/randr/krandrtray.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -20,7 +20,7 @@ GenericName[ar]=إعادة تحجيم ودوران الشاشة GenericName[be]=Змена памераў экрана і перагортванне GenericName[be@latin]=Aplet dla źmieny pamieraŭ i pavarotu ekrana -GenericName[bg]=Размер и ротация на екрана +GenericName[bg]=Големина и завъртане на екрана GenericName[bn]=পর্দা মাপবদল ও আবর্তন GenericName[bn_IN]=পর্দা মাপবদল ও আবর্তন GenericName[br]=Adventañ ha treiñ ar skramm --- workspace/kcontrol/randr/randr.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/kcontrol/randr/randr.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -16,7 +16,7 @@ Name[ar]=الحجم والاتجاه Name[be]=Памеры і арыентацыя Name[be@latin]=Pamiery j pavarot -Name[bg]=Размер и завъртане на екрана +Name[bg]=Големина и завъртане на екрана Name[bn]=আকৃতি এবং দিশা Name[bn_IN]=মাপ ও দিশা Name[br]=Ment ha reteradur @@ -97,7 +97,7 @@ Comment[ar]=غيّر حجم العرض وأدِره Comment[be]=Змяняе памеры і перагортвае ваш экран Comment[be@latin]=Źmianieńnie pamieraŭ i pavarot ekrana -Comment[bg]=Настройване на размера и завъртането на екрана +Comment[bg]=Настройване на големината и завъртането на екрана Comment[bn]=আপনার ডিসপ্লের আকৃতি এবং দিশা পরিবর্তন করুন Comment[bn_IN]=আপনার ডিসপ্লের আকৃতি এবং দিশা পরিবর্তন করুন Comment[br]=Adventañ ha treiñ ho skramm --- workspace/kcontrol/keys/keys.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/kcontrol/keys/keys.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -60,7 +60,7 @@ Name[pt]=Atalhos Globais do Teclado Name[pt_BR]=Atalhos de teclado globais Name[ro]=Acceleratori de tastatură globali -Name[ru]=Комбинации клавиш +Name[ru]=Основные действия Name[si]=ගෝලීය යතුරුපුවරු කෙටිමං Name[sk]=Globálne klávesové skratky Name[sl]=Globalne tipkovnične bližnjice --- workspace/solid/kcm/kcm_solid.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/solid/kcm/kcm_solid.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -12,6 +12,7 @@ Name[ar]=العتاد Name[be]=Прылады Name[be@latin]=Aparatura +Name[bg]=Хардуер Name[bn]=হার্ডওয়্যার Name[bn_IN]=হার্ডওয়্যার Name[br]=Periantel --- workspace/powerdevil/daemon/PollSystemLoader.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/powerdevil/daemon/PollSystemLoader.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -58,20 +58,21 @@ tpl->deleteLater(); } -QMap PollSystemLoader::getAvailableSystems() +QHash PollSystemLoader::getAvailableSystems() { // Cached return m_availableSystems; } -QMap PollSystemLoader::getAvailableSystemsAsInt() +QHash PollSystemLoader::getAvailableSystemsAsInt() { // Cached - QMap retlist; + QHash retlist; - foreach(const AbstractSystemPoller::PollingType &ent, m_availableSystems.keys()) { - retlist[(int) ent] = m_availableSystems[ent]; + QHash::const_iterator i; + for (i = m_availableSystems.constBegin(); i != m_availableSystems.constEnd(); ++i) { + retlist[(int) i.key()] = i.value(); } return retlist; --- workspace/powerdevil/daemon/PowerDevilDaemon.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/powerdevil/daemon/PowerDevilDaemon.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -63,8 +63,7 @@ #include #include #include -extern "C" -{ +extern "C" { #include int __kde_do_not_unload = 1; @@ -102,7 +101,8 @@ : notifier(Solid::Control::PowerManager::notifier()) , battery(0) , currentConfig(0) - , status(PowerDevilDaemon::NoAction) {}; + , status(PowerDevilDaemon::NoAction) + , ckSessionInterface(0) {}; Solid::Control::PowerManager::Notifier * notifier; QPointer battery; @@ -128,6 +128,10 @@ int batteryPercent; bool isPlugged; + + // ConsoleKit stuff + QDBusInterface *ckSessionInterface; + bool ckAvailable; }; PowerDevilDaemon::PowerDevilDaemon(QObject *parent, const QList&) @@ -165,6 +169,9 @@ return; } + // First things first: let's set up PowerDevil to be aware of active session + setUpConsoleKit(); + d->profilesConfig = KSharedConfig::openConfig("powerdevilprofilesrc", KConfig::SimpleConfig); setAvailableProfiles(d->profilesConfig->groupList()); @@ -176,7 +183,7 @@ d->ksmServerIface = new OrgKdeKSMServerInterfaceInterface("org.kde.ksmserver", "/KSMServer", QDBusConnection::sessionBus(), this); - /* Not needed anymore; I am not sure if we will need that in a future, so I leave it here + /* Not needed anymore; I am not sure if we will need that in a future, so I leave it here * just in case. * * d->kscreenSaverIface = new OrgKdeScreensaverInterface("org.freedesktop.ScreenSaver", "/ScreenSaver", @@ -196,7 +203,7 @@ if (PowerDevilSettings::pollingSystem() == -1) { // Ok, new configuration... so let's see what we've got!! - QMap pList = d->pollLoader->getAvailableSystems(); + QHash pList = d->pollLoader->getAvailableSystems(); if (pList.contains(AbstractSystemPoller::XSyncBased)) { PowerDevilSettings::setPollingSystem(AbstractSystemPoller::XSyncBased); @@ -224,6 +231,7 @@ PowerDevilDaemon::~PowerDevilDaemon() { + delete d->ckSessionInterface; delete d; } @@ -327,7 +335,7 @@ bool PowerDevilDaemon::loadPollingSystem(AbstractSystemPoller::PollingType type) { - QMap pList = d->pollLoader->getAvailableSystems(); + QHash pList = d->pollLoader->getAvailableSystems(); if (!pList.contains(type)) { return false; @@ -351,10 +359,11 @@ { QVariantMap map; - QMap pmap = d->pollLoader->getAvailableSystemsAsInt(); + QHash pmap = d->pollLoader->getAvailableSystemsAsInt(); - foreach(int ent, pmap.keys()) { - map[pmap[ent]] = ent; + QHash::const_iterator i; + for (i = pmap.constBegin(); i != pmap.constEnd(); ++i) { + map[i.value()] = i.key(); } return map; @@ -364,10 +373,14 @@ { KConfigGroup * settings = getCurrentProfile(); - Solid::Control::PowerManager::setBrightness(settings->readEntry("brightness").toInt()); - POLLER_CALL(d->pollLoader->poller(), stopCatchingIdleEvents()); POLLER_CALL(d->pollLoader->poller(), forcePollRequest()); + + if (!checkIfCurrentSessionActive()) { + return; + } + + Solid::Control::PowerManager::setBrightness(settings->readEntry("brightness").toInt()); } void PowerDevilDaemon::refreshStatus() @@ -404,15 +417,15 @@ emitNotification("unplugged", i18n("The power adaptor has been unplugged")); } - if (!forced) + if (!forced) { reloadProfile(state); + } applyProfile(); } #ifdef HAVE_DPMS -extern "C" -{ +extern "C" { int dropError(Display *, XErrorEvent *); typedef int (*XErrFunc)(Display *, XErrorEvent *); } @@ -425,10 +438,15 @@ void PowerDevilDaemon::applyProfile() { + if (!checkIfCurrentSessionActive()) { + return; + } + KConfigGroup * settings = getCurrentProfile(); - if (!settings) + if (!settings) { return; + } Solid::Control::PowerManager::setBrightness(settings->readEntry("brightness").toInt()); Solid::Control::PowerManager::setCpuFreqPolicy((Solid::Control::PowerManager::CpuFreqPolicy) @@ -459,10 +477,15 @@ void PowerDevilDaemon::setUpDPMS() { + if (!checkIfCurrentSessionActive()) { + return; + } + KConfigGroup * settings = getCurrentProfile(); - if (!settings) + if (!settings) { return; + } #ifdef HAVE_DPMS @@ -535,9 +558,14 @@ setBatteryPercent(charge); - if (Solid::Control::PowerManager::acAdapterState() == Solid::Control::PowerManager::Plugged) + if (Solid::Control::PowerManager::acAdapterState() == Solid::Control::PowerManager::Plugged) { return; + } + if (!checkIfCurrentSessionActive()) { + return; + } + if (charge <= PowerDevilSettings::batteryCriticalLevel()) { switch (PowerDevilSettings::batLowAction()) { case Shutdown: @@ -600,6 +628,10 @@ void PowerDevilDaemon::buttonPressed(int but) { + if (!checkIfCurrentSessionActive() || d->screenSaverIface->GetActive()) { + return; + } + KConfigGroup * settings = getCurrentProfile(); if (!settings) @@ -681,18 +713,30 @@ void PowerDevilDaemon::decreaseBrightness() { + if (!checkIfCurrentSessionActive()) { + return; + } + int currentBrightness = qMax(0, (int)(Solid::Control::PowerManager::brightness() - 10)); Solid::Control::PowerManager::setBrightness(currentBrightness); } void PowerDevilDaemon::increaseBrightness() { + if (!checkIfCurrentSessionActive()) { + return; + } + int currentBrightness = qMin(100, (int)(Solid::Control::PowerManager::brightness() + 10)); Solid::Control::PowerManager::setBrightness(currentBrightness); } void PowerDevilDaemon::shutdownNotification(bool automated) { + if (!checkIfCurrentSessionActive()) { + return; + } + if (!d->lockHandler->setNotificationLock(automated)) { return; } @@ -709,6 +753,10 @@ void PowerDevilDaemon::suspendToDiskNotification(bool automated) { + if (!checkIfCurrentSessionActive()) { + return; + } + if (!d->lockHandler->setNotificationLock(automated)) { return; } @@ -725,6 +773,10 @@ void PowerDevilDaemon::suspendToRamNotification(bool automated) { + if (!checkIfCurrentSessionActive()) { + return; + } + if (!d->lockHandler->setNotificationLock(automated)) { return; } @@ -741,6 +793,10 @@ void PowerDevilDaemon::standbyNotification(bool automated) { + if (!checkIfCurrentSessionActive()) { + return; + } + if (!d->lockHandler->setNotificationLock(automated)) { return; } @@ -757,6 +813,10 @@ void PowerDevilDaemon::shutdown(bool automated) { + if (!checkIfCurrentSessionActive()) { + return; + } + if (!d->lockHandler->setJobLock(automated)) { return; } @@ -775,6 +835,10 @@ void PowerDevilDaemon::suspendToDisk(bool automated) { + if (!checkIfCurrentSessionActive()) { + return; + } + if (!d->lockHandler->setJobLock(automated)) { return; } @@ -795,6 +859,10 @@ void PowerDevilDaemon::suspendToRam(bool automated) { + if (!checkIfCurrentSessionActive()) { + return; + } + if (!d->lockHandler->setJobLock(automated)) { return; } @@ -814,6 +882,10 @@ void PowerDevilDaemon::standby(bool automated) { + if (!checkIfCurrentSessionActive()) { + return; + } + if (!d->lockHandler->setJobLock(automated)) { return; } @@ -856,8 +928,12 @@ * We make an intensive use of qMin/qMax here to determine the minimum time. */ - // kDebug() << "Polling started, idle time is" << idle << "seconds"; + // kDebug() << "Polling started, idle time is" << idle << "seconds"; + if (!checkIfCurrentSessionActive()) { + return; + } + KConfigGroup * settings = getCurrentProfile(); if (!settings) { @@ -866,7 +942,7 @@ if (!settings->readEntry("dimOnIdle", false) && !settings->readEntry("turnOffIdle", false) && settings->readEntry("idleAction").toInt() == None) { - // kDebug() << "Stopping timer"; + // kDebug() << "Stopping timer"; POLLER_CALL(d->pollLoader->poller(), stopCatchingTimeouts()); return; } @@ -891,13 +967,13 @@ minTime = qMin(minTime, minDimTime); } - // kDebug() << "Minimum time is" << minTime << "seconds"; + // kDebug() << "Minimum time is" << minTime << "seconds"; if (idle < minTime) { d->status = NoAction; int remaining = minTime - idle; POLLER_CALL(d->pollLoader->poller(), setNextTimeout(remaining * 1000)); - // kDebug() << "Nothing to do, next event in" << remaining << "seconds"; + // kDebug() << "Nothing to do, next event in" << remaining << "seconds"; return; } @@ -1009,6 +1085,10 @@ void PowerDevilDaemon::lockScreen() { + if (!checkIfCurrentSessionActive()) { + return; + } + emitNotification("doingjob", i18n("The screen is being locked")); d->screenSaverIface->Lock(); } @@ -1136,6 +1216,10 @@ void PowerDevilDaemon::reloadProfile(int state) { + if (!checkIfCurrentSessionActive()) { + return; + } + if (!recacheBatteryPointer()) { setCurrentProfile(PowerDevilSettings::aCProfile()); } else { @@ -1186,6 +1270,10 @@ void PowerDevilDaemon::setProfile(const QString & profile) { + if (!checkIfCurrentSessionActive()) { + return; + } + setCurrentProfile(profile); /* Don't call refreshStatus() here, since we don't want the predefined profile @@ -1202,6 +1290,10 @@ void PowerDevilDaemon::reloadAndStream() { + if (!checkIfCurrentSessionActive()) { + return; + } + reloadProfile(); setAvailableProfiles(d->profilesConfig->groupList()); @@ -1274,16 +1366,28 @@ void PowerDevilDaemon::setPowersavingScheme(const QString &scheme) { + if (!checkIfCurrentSessionActive()) { + return; + } + Solid::Control::PowerManager::setScheme(scheme); } void PowerDevilDaemon::setGovernor(int governor) { + if (!checkIfCurrentSessionActive()) { + return; + } + Solid::Control::PowerManager::setCpuFreqPolicy((Solid::Control::PowerManager::CpuFreqPolicy) governor); } void PowerDevilDaemon::suspend(int method) { + if (!checkIfCurrentSessionActive()) { + return; + } + switch ((IdleAction) method) { case S2Disk: QTimer::singleShot(100, this, SLOT(suspendToDisk())); @@ -1301,6 +1405,10 @@ void PowerDevilDaemon::setBrightness(int value) { + if (!checkIfCurrentSessionActive()) { + return; + } + if (value == -2) { // Then set brightness to half the current brightness. @@ -1332,6 +1440,10 @@ void PowerDevilDaemon::profileFirstLoad() { + if (!checkIfCurrentSessionActive()) { + return; + } + KConfigGroup * settings = getCurrentProfile(); if (!settings) @@ -1411,6 +1523,10 @@ void PowerDevilDaemon::setCurrentProfile(const QString &profile) { + if (!checkIfCurrentSessionActive()) { + return; + } + if (profile != d->currentProfile) { d->currentProfile = profile; profileFirstLoad(); @@ -1424,4 +1540,62 @@ emit profileChanged(d->currentProfile, d->availableProfiles); } +bool PowerDevilDaemon::checkIfCurrentSessionActive() +{ + if (!d->ckAvailable) { + // No way to determine if we are on the current session, simply suppose we are + kDebug() << "Can't contact ck"; + return true; + } + + QDBusReply rp = d->ckSessionInterface->call("IsActive"); + + return rp.value(); +} + +void PowerDevilDaemon::setUpConsoleKit() +{ + // Let's cache the needed information to check if our session is actually active + + if (!QDBusConnection::systemBus().interface()->isServiceRegistered("org.freedesktop.ConsoleKit")) { + // No way to determine if we are on the current session, simply suppose we are + kDebug() << "Can't contact ck"; + d->ckAvailable = false; + return; + } else { + d->ckAvailable = true; + } + + // Otherwise, let's ask ConsoleKit + QDBusInterface ckiface("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", + "org.freedesktop.ConsoleKit.Manager", QDBusConnection::systemBus()); + + QDBusReply sessionPath = ckiface.call("GetCurrentSession"); + + if (!sessionPath.isValid() || sessionPath.value().path().isEmpty()) { + kDebug() << "The session is not registered with ck"; + d->ckAvailable = false; + return; + } + + d->ckSessionInterface = new QDBusInterface("org.freedesktop.ConsoleKit", sessionPath.value().path(), + "org.freedesktop.ConsoleKit.Session", QDBusConnection::systemBus()); + + if (!d->ckSessionInterface->isValid()) { + // As above + kDebug() << "Can't contact iface"; + d->ckAvailable = false; + return; + } + + /* If everything's fine, let's attach ourself to the ActiveChanged signal. + * You'll see we're attaching to refreshStatus without any further checks. You know why? + * refreshStatus already checks if the console is active, so the check is already happening + * in the underhood + */ + + QDBusConnection::systemBus().connect("org.freedesktop.ConsoleKit", sessionPath.value().path(), + "org.freedesktop.ConsoleKit.Session", "ActiveChanged", this, SLOT(refreshStatus())); +} + #include "PowerDevilDaemon.moc" --- workspace/powerdevil/daemon/PollSystemLoader.h (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/powerdevil/daemon/PollSystemLoader.h (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -21,7 +21,7 @@ #define POLLSYSTEMLOADER_H #include -#include +#include #include #include "AbstractSystemPoller.h" @@ -34,8 +34,8 @@ PollSystemLoader(QObject *parent = 0); virtual ~PollSystemLoader(); - QMap getAvailableSystems(); - QMap getAvailableSystemsAsInt(); + QHash getAvailableSystems(); + QHash getAvailableSystemsAsInt(); bool loadSystem(AbstractSystemPoller::PollingType type); bool unloadCurrentSystem(); @@ -48,7 +48,7 @@ private: QPointer m_poller; - QMap m_availableSystems; + QHash m_availableSystems; }; #endif /* POLLSYSTEMLOADER_H */ --- workspace/powerdevil/daemon/PowerDevilDaemon.h (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/powerdevil/daemon/PowerDevilDaemon.h (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -34,9 +34,6 @@ class PollSystemLoader; class SuspensionLockHandler; class KNotification; -class OrgFreedesktopScreenSaverInterface; -class OrgKdeKSMServerInterfaceInterface; -class OrgKdeScreensaverInterface; class KDE_EXPORT PowerDevilDaemon : public KDEDModule { @@ -128,8 +125,8 @@ private: void lockScreen(); - void setUpDPMS(); - + void setUpDPMS(); + KConfigGroup *getCurrentProfile(bool forcereload = false); void applyProfile(); @@ -143,6 +140,10 @@ bool recacheBatteryPointer(bool force = false); + void setUpConsoleKit(); + + bool checkIfCurrentSessionActive(); + public: enum IdleAction { None = 0, @@ -151,7 +152,8 @@ S2Disk = 4, Shutdown = 8, Lock = 16, - ShutdownDialog = 32 + ShutdownDialog = 32, + TurnOffScreen = 64 }; enum IdleStatus { --- workspace/powerdevil/kcmodule/PowerDevilKCM.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/powerdevil/kcmodule/PowerDevilKCM.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -82,8 +82,8 @@ if (iface.isValid()) { QDBusConnection conn = QDBusConnection::systemBus(); - if (conn.interface()->isServiceRegistered("org.freedesktop.PowerManagement") || - conn.interface()->isServiceRegistered("org.freedesktop.Policy.Power")) { + if (conn.interface()->isServiceRegistered("org.freedesktop.PowerManagement") || ( + conn.interface()->isServiceRegistered("org.freedesktop.Policy.Power") && !QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.powerdevilsystem"))){ initError(i18n("Another power manager has been detected. PowerDevil will not start if " "other power managers are active. If you want to use PowerDevil as your primary " "power manager, please remove the existing one and restart PowerDevil service.")); --- workspace/powerdevil/kcmodule/powerdevilconfig.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/powerdevil/kcmodule/powerdevilconfig.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -61,8 +61,8 @@ Name[ru]=Управление питанием Name[sk]=Správa napájania Name[sl]=Upravljanje z energijo -Name[sr]=управљање енергијом -Name[sr@latin]=upravljanje energijom +Name[sr]=Управљање енергијом +Name[sr@latin]=Upravljanje energijom Name[sv]=Strömsparhantering Name[tg]=Идоракунии барқ Name[th]=การจัดการพลังงาน --- workspace/powerdevil/powerdevil.notifyrc (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/powerdevil/powerdevil.notifyrc (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -50,8 +50,8 @@ Name[ru]=Управление питанием Name[sk]=Správa napájania Name[sl]=Upravljanje z energijo -Name[sr]=управљање енергијом -Name[sr@latin]=upravljanje energijom +Name[sr]=Управљање енергијом +Name[sr@latin]=Upravljanje energijom Name[sv]=Strömsparhantering Name[tg]=Идоракунии барқ Name[th]=การจัดการพลังงาน --- workspace/krunner/interfaces/default/interface.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/krunner/interfaces/default/interface.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -114,6 +114,7 @@ m_layout->addWidget(m_buttonContainer); m_searchTerm = new KHistoryComboBox(false, w); + m_searchTerm->setPalette(QApplication::palette()); m_searchTerm->setDuplicatesEnabled(false); KLineEdit *lineEdit = new KLineEdit(m_searchTerm); @@ -400,7 +401,6 @@ kDebug() << item->name() << item->id(); m_delayedRun = false; - m_searchTerm->addToHistory(m_searchTerm->currentText()); if (item->group() == Plasma::QueryMatch::InformationalMatch) { QString info = item->data(); @@ -416,6 +416,9 @@ close(); m_resultsScene->run(item); m_running = false; + + //TODO: check if run succesful before adding the term to history + m_searchTerm->addToHistory(m_searchTerm->currentText().trimmed()); resetInterface(); } --- workspace/krunner/interfaces/default/resultscene.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/krunner/interfaces/default/resultscene.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -323,14 +323,14 @@ bool ResultScene::launchQuery(const QString &term) { - bool temp = !(term.isEmpty() || m_runnerManager->query() == term); + bool temp = !(term.trimmed().isEmpty() || m_runnerManager->query() == term.trimmed()); m_runnerManager->launchQuery(term); return temp; } bool ResultScene::launchQuery(const QString &term, const QString &runner) { - bool temp = !(term.isEmpty() || m_runnerManager->query() == term); + bool temp = !(term.trimmed().isEmpty() || m_runnerManager->query() == term.trimmed()); m_runnerManager->launchQuery(term, runner); return temp; } --- workspace/libs/kephal/xrandr12/randrcrtc.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/libs/kephal/xrandr12/randrcrtc.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -282,7 +282,10 @@ { QRect r = QRect(0,0,0,0).united(m_proposedRect); if (r.width() > m_screen->maxSize().width() || r.height() > m_screen->maxSize().height()) + { + delete[] outputs; return false; + } // if the desired mode is bigger than the current screen size, first change the // screen size, and then the crtc size @@ -290,7 +293,10 @@ { // try to adjust the screen size if (!m_screen->adjustSize(r)) + { + delete[] outputs; return false; + } } } @@ -303,12 +309,18 @@ // check if the rotated rect is smaller than the max screen size r = m_screen->rect().united(r); if (r.width() > m_screen->maxSize().width() || r.height() > m_screen->maxSize().height()) + { + delete[] outputs; return false; + } // adjust the screen size r = r.united(m_currentRect); if (!m_screen->adjustSize(r)) + { + delete[] outputs; return false; + } } } } --- workspace/libs/taskmanager/task.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/libs/taskmanager/task.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -293,7 +293,7 @@ bool Task::demandsAttention() const { - return (d->info.valid() && (d->info.state() & NET::DemandsAttention)) || + return (d->info.valid(true) && (d->info.state() & NET::DemandsAttention)) || !d->transientsDemandingAttention.isEmpty(); } --- workspace/kscreensaver/libkscreensaver/kscreensaver.h (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/kscreensaver/libkscreensaver/kscreensaver.h (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -64,7 +64,11 @@ bool event( QEvent* event ); private: - KScreenSaverPrivate *d; + //Note: To keep binary compatibility this class must have only one member, which is a pointer. + // If more members are needed, use the d-pointer technique. + // See http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C%2B%2B + //KScreenSaverPrivate *d; + QWidget *embeddedWidget; }; /** --- workspace/kscreensaver/libkscreensaver/kscreensaver.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/kscreensaver/libkscreensaver/kscreensaver.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -33,7 +33,7 @@ //----------------------------------------------------------------------------- -KScreenSaver::KScreenSaver( WId id ) : QWidget() +KScreenSaver::KScreenSaver( WId id ) : QWidget(), embeddedWidget(0) { if ( id ) { @@ -51,16 +51,20 @@ bool r = QWidget::event(e); if (e->type() == QEvent::Polish) setAttribute(Qt::WA_StyledBackground, false); + if ((e->type() == QEvent::Resize) && embeddedWidget) + embeddedWidget->resize( size() ); return r; } void KScreenSaver::embed( QWidget *w ) { + w->resize( size() ); QApplication::sendPostedEvents(); #ifdef Q_WS_X11 //FIXME XReparentWindow(QX11Info::display(), w->winId(), winId(), 0, 0); #endif w->setGeometry( 0, 0, width(), height() ); + embeddedWidget = w; QApplication::sendPostedEvents(); } --- workspace/khotkeys/data/kde32b1.khotkeys (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/khotkeys/data/kde32b1.khotkeys (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -490,7 +490,7 @@ 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 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 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 -Comment[ru]=При нажатии комбинации клавиш Alt+Ctrl+H будет эмулирован ввод слова "Hello" как будто бы вы набивали его вручную с клавиатуры. +Comment[ru]=При нажатии комбинации клавиш Alt+Ctrl+H будет эмулирован ввод слова «Hello» как будто бы вы набивали его вручную с клавиатуры. 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 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 Comment[sr]=Притисак на Ctrl+Alt+H симулираће унос „Hello“ као да сте га укуцали тастатуром. Врло корисно када сте исувише лењи да стално уносите „unsigned“ и томе слично. Сваки притисак тастера у уносу раздваја се двотачком (:). Пазите да под притиском на тастер заиста то и мислимо, тј. морате унети тачно оно што бисте притиснули на тастатури. У табели испод, лева колона приказује унос, а десна шта за треба да се притисне.\n\n„enter“ (тј. нов ред) Enter или Return\na (тј. мало a) A\nA (тј. велико a) Shift+A\n: (двотачка) Shift+;\n' ' (размак) Space --- workspace/kwin/effects/taskbarthumbnail.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/kwin/effects/taskbarthumbnail.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -107,7 +107,7 @@ Comment[sv]=Visa miniatyrbilder av fönster när pekaren hålls över deras post i aktivitetsfältet Comment[th]=แสดงภาพย่อของหน้าต่างเมื่อเคลื่อนเมาส์มาอยู่เหนือรายการในแถบงาน Comment[tr]=Bir pencerenin görev çubuğundaki girdisi üzerine gelindiğinde o pencerenin küçük resmini gösterir -Comment[uk]=Показує мініатюри вікон, коли курсор знаходиться над елементом панелі задач +Comment[uk]=Показує мініатюри вікон, коли вказівник знаходиться над елементом панелі задач Comment[x-test]=xxDisplay window thumbnails when hovering over taskbar entriesxx Comment[zh_CN]=当鼠标悬停在任务栏时显示窗口缩略图 Comment[zh_TW]=當游標停在工作列的按鈕上面時,顯示視窗的縮圖 --- workspace/kwin/effects/magiclamp.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/kwin/effects/magiclamp.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -26,12 +26,17 @@ { KWIN_EFFECT( magiclamp, MagicLampEffect ) +KWIN_EFFECT_SUPPORTED( magiclamp, MagicLampEffect::supported() ) MagicLampEffect::MagicLampEffect() { mActiveAnimations = 0; } +bool MagicLampEffect::supported() + { + return effects->compositingType() == OpenGLCompositing; + } void MagicLampEffect::prePaintScreen( ScreenPrePaintData& data, int time ) { --- workspace/kwin/effects/magiclamp.h (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/kwin/effects/magiclamp.h (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -40,6 +40,8 @@ virtual void windowMinimized( EffectWindow* c ); virtual void windowUnminimized( EffectWindow* c ); + static bool supported(); + private: QHash< EffectWindow*, TimeLine > mTimeLineWindows; int mActiveAnimations; --- workspace/kwin/effects/desktopgrid.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/kwin/effects/desktopgrid.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -71,6 +71,7 @@ Name[zh_TW]=桌面格 Icon=preferences-system-windows-effect-desktop-grid Comment=Zoom out so all desktops are displayed side-by-side in a grid +Comment[bg]=Работните плотове да се показват един до друг в мрежа Comment[ca]=Redueix tots els escriptoris per a visualitzar-los un al costat de l'altre en una graella Comment[cs]=Oddálí plochy a zobrazí je v mřížce Comment[da]=Zoom ud så alle desktoppe vises side om side i et gitter --- workspace/kwin/main.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/kwin/main.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -177,7 +177,7 @@ return 0; //fprintf( stderr, "kwin: X Error (%s)\n", KXErrorHandler::errorMessage( *e, d ).data()); - fprintf( stderr, "kwin: X Error (%s)\n", errorMessage( *e, d ).data() ); + kWarning( 1212 ) << "kwin: X Error (" << errorMessage( *e, d ) << ")"; if( kwin_sync ) fprintf( stderr, "%s\n", kBacktrace().toLocal8Bit().data() ); --- workspace/kdm/kfrontend/sessions/icewm.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/kdm/kfrontend/sessions/icewm.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -18,7 +18,7 @@ Comment[ar]=مدير نوافذ يشبه نوافذ 95-OS/2 Comment[be]=Кіраўнік вокнаў, падобны на Windows 95-OS/2-Motif Comment[be@latin]=Akońnik, jaki vyhladaje, jak spałučeńnie systemaŭ „Windows 95”, „OS/2” i „Motif” -Comment[bg]=Мениждър, приличащ на Windows 95-OS/2-Motif +Comment[bg]=Мениджър, приличащ на Windows 95-OS/2-Motif Comment[bn]=Windows 95-OS/2-Motif-এর অনুরূপ একটি উইণ্ডো ম্যানেজার Comment[bn_IN]=Windows 95-OS/2-Motif-এর অনুরূপ একটি উইণ্ডো ম্যানেজার Comment[ca]=Un gestor de finestres com els de Windows 95-OS/2-Motif --- workspace/ksysguard/ksysguardd/Command.c (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/ksysguard/ksysguardd/Command.c (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -126,6 +126,7 @@ Command* cmd = (Command*)malloc( sizeof( Command ) ); if(!cmd || !(cmd->command = (char*)malloc( strlen( command ) + 1 ))) { print_error("Out of memory"); + free(cmd); return; } strcpy( cmd->command, command ); @@ -166,6 +167,7 @@ Command* cmd = (Command*)malloc( sizeof( Command ) ); if(!cmd || !(cmd->command = (char*)malloc( strlen( command ) + 1 ))) { print_error("Out of memory"); + free(cmd); return; } @@ -174,6 +176,7 @@ cmd->type = (char*)malloc( strlen( type ) + 1 ); if(!cmd->type ) { print_error("Out of memory"); + free(cmd); return; } @@ -192,6 +195,7 @@ cmd->command = (char*)malloc( strlen( command ) + 2 ); if(!cmd->command ) { print_error("Out of memory"); + free(cmd); return; } --- workspace/plasma/dataengines/powermanagement/plasma-dataengine-powermanagement.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/plasma/dataengines/powermanagement/plasma-dataengine-powermanagement.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -50,8 +50,8 @@ Name[ru]=Управление питанием Name[sk]=Správa napájania Name[sl]=Upravljanje z energijo -Name[sr]=управљање енергијом -Name[sr@latin]=upravljanje energijom +Name[sr]=Управљање енергијом +Name[sr@latin]=Upravljanje energijom Name[sv]=Strömsparhantering Name[tg]=Идоракунии барқ Name[th]=การจัดการพลังงาน --- workspace/plasma/shells/desktop/panelview.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/plasma/shells/desktop/panelview.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -60,6 +60,10 @@ KWindowSystem::setType(winId(), NET::Dock); m_svg->setImagePath("widgets/glowbar"); + QPalette pal = palette(); + pal.setColor(backgroundRole(), Qt::transparent); + setPalette(pal); + QRect glowGeom = triggerZone; QSize s = sizeHint(); switch (m_direction) { --- workspace/plasma/runners/locations/locationrunner.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/plasma/runners/locations/locationrunner.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -93,7 +93,6 @@ match.setText(i18n("Open %1", term)); match.setIcon(KIcon("system-help")); match.setRelevance(1); - match.setRelevance(1); match.setType(Plasma::QueryMatch::ExactMatch); match.setId("help"); context.addMatch(term, match); --- workspace/plasma/tools/desktopthemedetails/desktopthemedetails.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/plasma/tools/desktopthemedetails/desktopthemedetails.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -11,6 +11,7 @@ Name=Desktop Theme Details Name[ar]=تفاصيل سمة سطح المكتب Name[be@latin]=Detali matyva dla rabočaha stała +Name[bg]=Детайли на темите Name[ca]=Detalls del tema d'escriptori Name[cs]=Detaily motivu plochy Name[csb]=Wëdowiédzô ò témie pùltu --- workspace/plasma/applets/calendar/calendar.h (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/plasma/applets/calendar/calendar.h (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -45,12 +45,9 @@ */ QGraphicsWidget *graphicsWidget(); - protected: - void updateDate(); - void timerEvent(QTimerEvent *event); - protected slots: void configAccepted(); + void updateDate(); private: void paintIcon(); @@ -58,7 +55,6 @@ Plasma::Calendar *m_calendarDialog; Plasma::Svg *m_theme; int m_date; - int m_updateTimerId; }; K_EXPORT_PLASMA_APPLET(calendar, CalendarTest) --- workspace/plasma/applets/calendar/calendar.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/plasma/applets/calendar/calendar.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -34,8 +35,7 @@ : Plasma::PopupApplet(parent, args), m_calendarDialog(0), m_theme(0), - m_date(0), - m_updateTimerId(0) + m_date(0) { setAspectRatioMode(Plasma::IgnoreAspectRatio); setCacheMode(DeviceCoordinateCache); @@ -116,18 +116,9 @@ QDateTime d = QDateTime::currentDateTime(); m_date = d.date().day(); int updateIn = (24 * 60 * 60) - (d.toTime_t() + KSystemTimeZones::local().currentOffset()) % (24 * 60 * 60); - m_updateTimerId = startTimer(updateIn * 1000); + QTimer::singleShot(updateIn * 1000, this, SLOT(updateDate())); constraintsEvent(Plasma::FormFactorConstraint); } -void CalendarTest::timerEvent(QTimerEvent *event) -{ - if (event->timerId() != m_updateTimerId) { - return; - } - killTimer(m_updateTimerId); - updateDate(); -} - #include "calendar.moc" --- workspace/plasma/applets/system-monitor/net.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/plasma/applets/system-monitor/net.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -89,7 +89,7 @@ plotter->addPlot(QColor(((color.red() - 128) * 0.90) + 128, 0, 0, color.alpha())); plotter->setUseAutoRange(true); plotter->setThinFrame(false); - plotter->setShowLabels(false); + plotter->setShowLabels(true); plotter->setShowTopBar(false); plotter->setShowVerticalLines(false); plotter->setShowHorizontalLines(false); --- workspace/plasma/applets/battery/battery.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/plasma/applets/battery/battery.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -818,13 +818,6 @@ m_theme->paint(p, scaleRectF(m_acAlpha, contentsRect), "AcAdapter"); } - // For small FormFactors, we're drawing a shadow - if (formFactor() == Plasma::Vertical || - formFactor() == Plasma::Horizontal) { - if (plugState) { - m_theme->paint(p, contentsRect, "Shadow"); - } - } if (plugState && m_theme->hasElement("Overlay")) { m_theme->paint(p, scaleRectF(m_batteryAlpha, contentsRect), "Overlay"); } --- workspace/plasma/applets/kickoff/ui/launcher.cpp (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/plasma/applets/kickoff/ui/launcher.cpp (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -765,21 +765,34 @@ if (d->placement != placement) { d->placement = placement; + Private::TabOrder normalOrder; + Private::TabOrder reverseOrder; + + //QTabBar attempts to be smart and flips what we say in rtl mode so say the opposite when the tabbar is horizontal + if (QApplication::layoutDirection() == Qt::RightToLeft) { + normalOrder = Private::ReverseTabOrder; + reverseOrder = Private::NormalTabOrder; + } else { + normalOrder = Private::NormalTabOrder; + reverseOrder = Private::ReverseTabOrder; + } + switch (placement) { case Plasma::TopPosedRightAlignedPopup: - d->setSouthLayout(Private::ReverseTabOrder); + d->setSouthLayout(reverseOrder); break; case Plasma::LeftPosedTopAlignedPopup: + //when the tabbar is vertical it's fine d->setEastLayout(Private::NormalTabOrder); break; case Plasma::LeftPosedBottomAlignedPopup: d->setEastLayout(Private::ReverseTabOrder); break; case Plasma::BottomPosedLeftAlignedPopup: - d->setNorthLayout(Private::NormalTabOrder); + d->setNorthLayout(normalOrder); break; case Plasma::BottomPosedRightAlignedPopup: - d->setNorthLayout(Private::ReverseTabOrder); + d->setNorthLayout(reverseOrder); break; case Plasma::RightPosedTopAlignedPopup: d->setWestLayout(Private::NormalTabOrder); @@ -789,7 +802,7 @@ break; case Plasma::TopPosedLeftAlignedPopup: default: - d->setSouthLayout(Private::NormalTabOrder); + d->setSouthLayout(normalOrder); break; } } --- workspace/plasma/scriptengines/webkit/plasma-packagestructure-dashboard.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/plasma/scriptengines/webkit/plasma-packagestructure-dashboard.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -49,7 +49,7 @@ Name[uk]=Віджети панелі приладів MacOS Name[x-test]=xxMacOS Dashboard Widgetsxx Name[zh_CN]=MacOS 部件板部件 -Name[zh_TW]=MacOS 儀表板元件 +Name[zh_TW]=MacOS 資訊看板元件 Comment=MacOS dashboard widget Comment[ar]=ودجة لوحة MacOS Comment[be@latin]=Widžet „Dashboard” dla systemy „MacOS” @@ -104,7 +104,7 @@ Comment[uk]=Віджет панелі приладів MacOS Comment[x-test]=xxMacOS dashboard widgetxx Comment[zh_CN]=MacOS 部件板 -Comment[zh_TW]=MacOS 儀表板元件 +Comment[zh_TW]=MacOS 資訊看板元件 Type=Service ServiceTypes=Plasma/PackageStructure --- workspace/plasma/scriptengines/webkit/plasma-scriptengine-applet-dashboard.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/plasma/scriptengines/webkit/plasma-scriptengine-applet-dashboard.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -38,7 +38,7 @@ Name[uk]=Панель приладів Name[x-test]=xxDashboardxx Name[zh_CN]=部件板 -Name[zh_TW]=儀表板 +Name[zh_TW]=資訊看板 Comment=MacOS X dashboard widget Comment[ar]=لوحة ودجات MacOS Comment[be@latin]=Widžet „Dashboard” systemy „MacOS X”. @@ -93,7 +93,7 @@ Comment[uk]=Віджет панелі приладів MacOS X Comment[x-test]=xxMacOS X dashboard widgetxx Comment[zh_CN]=MacOS X 部件板 -Comment[zh_TW]=MacOS X 儀表板元件 +Comment[zh_TW]=MacOS X 資訊看板元件 Type=Service ServiceTypes=Plasma/ScriptEngine Icon=internet-web-browser --- workspace/plasma/scriptengines/javascript/tests/script-digital-clock/metadata.desktop (.../tags/KDE/4.2.2/kdebase) (wersja 956244) +++ workspace/plasma/scriptengines/javascript/tests/script-digital-clock/metadata.desktop (.../branches/KDE/4.2/kdebase) (wersja 956244) @@ -16,6 +16,7 @@ Name[x-test]=xxscript-digital-clockxx Name[zh_CN]=脚本-数字钟 Comment=Javascript digital clock +Comment[bg]=Цифров часовник (JavaScript) Comment[ca]=Rellotge digital en Javascript Comment[cs]=Digitální hodiny v JavaScriptu Comment[da]=Digitalt ur i Javascript