* Sat Apr 24 2010 Rex Dieter <rdieter@fedoraproject.org> - 6:4.4.2-4

- fix kidletime (kde#231628,kde#227279,kde#218468)
- kate part ignores japanese input from input method (#585242,kde#206455)
This commit is contained in:
Rex Dieter 2010-04-24 20:34:21 +00:00
parent fcab8c27d8
commit bbd6023973
3 changed files with 658 additions and 1 deletions

View File

@ -0,0 +1,35 @@
--- kate/view/kateviewinternal.cpp.orig 2010-03-21 20:57:09.000000000 +0900
+++ kate/view/kateviewinternal.cpp 2010-03-21 21:23:25.000000000 +0900
@@ -3778,13 +3778,6 @@
return;
}
- // if the input method event is text that should be inserted, call KateDocument::typeChars() with
- // the text. that method will handle the input and take care of overwrite mode, etc.
- if ( e->commitString().length() > 0 && doc()->typeChars( m_view, e->commitString() ) ) {
- e->accept();
- return;
- }
-
//kDebug( 13030 ) << "Event: cursor" << m_cursor << "commit" << e->commitString() << "preedit" << e->preeditString() << "replacement start" << e->replacementStart() << "length" << e->replacementLength();
if ( m_view->selection() )
@@ -3812,7 +3805,9 @@
if (start != removeEnd)
doc()->removeText(KTextEditor::Range(start, removeEnd));
if (!e->commitString().isEmpty())
- doc()->insertText(start, e->commitString());
+ // if the input method event is text that should be inserted, call KateDocument::typeChars()
+ // with the text. that method will handle the input and take care of overwrite mode, etc.
+ doc()->typeChars(m_view, e->commitString());
doc()->editEnd();
// Revert to the same range as above
@@ -3838,6 +3833,7 @@
renderer()->setDrawCaret(false);
renderer()->setCaretOverrideColor(QColor());
+ e->accept();
return;
}

View File

@ -0,0 +1,609 @@
Index: widgetbasedpoller.cpp
===================================================================
--- widgetbasedpoller.cpp (.../tags/KDE/4.4.2/kdelibs/kutils/kidletime) (revision 1118483)
+++ widgetbasedpoller.cpp (.../branches/KDE/4.4/kdelibs/kutils/kidletime) (revision 1118483)
@@ -21,10 +21,11 @@
#include <QWidget>
#include <QTimer>
#include <QEvent>
-#include <QDebug>
+
#ifndef WIN32
#include <fixx11h.h>
#endif
+
WidgetBasedPoller::WidgetBasedPoller(QWidget *parent)
: AbstractSystemPoller(parent)
{
Index: kidletime.cpp
===================================================================
--- kidletime.cpp (.../tags/KDE/4.4.2/kdelibs/kutils/kidletime) (revision 1118483)
+++ kidletime.cpp (.../branches/KDE/4.4/kdelibs/kutils/kidletime) (revision 1118483)
@@ -35,8 +35,10 @@
#endif
#endif
+#include <QWeakPointer>
+#include <QSet>
+
#include <kglobal.h>
-#include <QPointer>
class KIdleTimeHelper
{
@@ -61,18 +63,17 @@
class KIdleTimePrivate
{
+ Q_DECLARE_PUBLIC(KIdleTime)
+ KIdleTime *q_ptr;
public:
KIdleTimePrivate() : catchResume(false), currentId(0) {}
- Q_DECLARE_PUBLIC(KIdleTime)
- KIdleTime *q_ptr;
-
void loadSystem();
void unloadCurrentSystem();
void _k_resumingFromIdle();
void _k_timeoutReached(int msec);
- QPointer<AbstractSystemPoller> poller;
+ QWeakPointer<AbstractSystemPoller> poller;
bool catchResume;
int currentId;
@@ -87,16 +88,19 @@
s_globalKIdleTime->q = this;
d_ptr->q_ptr = this;
- d_ptr->loadSystem();
- connect(d_ptr->poller, SIGNAL(resumingFromIdle()), this, SLOT(_k_resumingFromIdle()));
- connect(d_ptr->poller, SIGNAL(timeoutReached(int)), this, SLOT(_k_timeoutReached(int)));
+ Q_D(KIdleTime);
+ d->loadSystem();
+
+ connect(d->poller.data(), SIGNAL(resumingFromIdle()), this, SLOT(_k_resumingFromIdle()));
+ connect(d->poller.data(), SIGNAL(timeoutReached(int)), this, SLOT(_k_timeoutReached(int)));
}
KIdleTime::~KIdleTime()
{
Q_D(KIdleTime);
d->unloadCurrentSystem();
+ delete d_ptr;
}
void KIdleTime::catchNextResumeEvent()
@@ -105,7 +109,7 @@
if (!d->catchResume) {
d->catchResume = true;
- d->poller->catchIdleEvent();
+ d->poller.data()->catchIdleEvent();
}
}
@@ -115,7 +119,7 @@
if (d->catchResume) {
d->catchResume = false;
- d->poller->stopCatchingIdleEvents();
+ d->poller.data()->stopCatchingIdleEvents();
}
}
@@ -123,7 +127,7 @@
{
Q_D(KIdleTime);
- d->poller->addTimeout(msec);
+ d->poller.data()->addTimeout(msec);
++d->currentId;
d->associations[d->currentId] = msec;
@@ -144,7 +148,7 @@
d->associations.remove(identifier);
if (!d->associations.values().contains(msec)) {
- d->poller->removeTimeout(msec);
+ d->poller.data()->removeTimeout(msec);
}
}
@@ -152,14 +156,25 @@
{
Q_D(KIdleTime);
- foreach(int i, d->poller->timeouts()) {
- removeIdleTimeout(i);
+ QHash< int, int >::iterator i = d->associations.begin();
+ QSet< int > removed;
+ removed.reserve(d->associations.size());
+
+ while (i != d->associations.end()) {
+ int msec = d->associations[i.key()];
+
+ i = d->associations.erase(i);
+
+ if (!removed.contains(msec)) {
+ d->poller.data()->removeTimeout(msec);
+ removed.insert(msec);
+ }
}
}
void KIdleTimePrivate::loadSystem()
{
- if (poller) {
+ if (!poller.isNull()) {
unloadCurrentSystem();
}
@@ -169,41 +184,39 @@
#ifdef HAVE_XSYNC
#ifdef HAVE_XSCREENSAVER
if (XSyncBasedPoller::instance()->isAvailable()) {
- XSyncBasedPoller::instance()->setUpPoller();
poller = XSyncBasedPoller::instance();
} else {
poller = new XScreensaverBasedPoller();
- poller->setUpPoller();
}
#else
- XSyncBasedPoller::instance()->setUpPoller();
poller = XSyncBasedPoller::instance();
#endif
#else
#ifdef HAVE_XSCREENSAVER
poller = new XScreensaverBasedPoller();
- poller->setUpPoller();
#endif
#endif
#else
#ifdef Q_WS_MAC
poller = new MacPoller();
- poller->setUpPoller();
#else
poller = new WindowsPoller();
- poller->setUpPoller();
#endif
#endif
+
+ if (!poller.isNull()) {
+ poller.data()->setUpPoller();
+ }
}
void KIdleTimePrivate::unloadCurrentSystem()
{
- if (poller) {
- poller->unloadPoller();
+ if (!poller.isNull()) {
+ poller.data()->unloadPoller();
#ifdef Q_WS_X11
- if (qobject_cast<XSyncBasedPoller*>(poller) == 0) {
+ if (qobject_cast<XSyncBasedPoller*>(poller.data()) == 0) {
#endif
- poller->deleteLater();
+ poller.data()->deleteLater();
#ifdef Q_WS_X11
}
#endif
@@ -216,7 +229,7 @@
if (catchResume) {
emit q->resumingFromIdle();
- catchResume = false;
+ q->stopCatchingResumeEvent();
}
}
@@ -236,14 +249,14 @@
{
Q_D(KIdleTime);
- d->poller->simulateUserActivity();
+ d->poller.data()->simulateUserActivity();
}
int KIdleTime::idleTime() const
{
Q_D(const KIdleTime);
- return d->poller->forcePollRequest();
+ return d->poller.data()->forcePollRequest();
}
QHash<int, int> KIdleTime::idleTimeouts() const
Index: kidletime.h
===================================================================
--- kidletime.h (.../tags/KDE/4.4.2/kdelibs/kutils/kidletime) (revision 1118483)
+++ kidletime.h (.../branches/KDE/4.4/kdelibs/kutils/kidletime) (revision 1118483)
@@ -99,7 +99,7 @@
*
*/
int addIdleTimeout(int msec);
-
+
/**
* Stops catching the idle timeout identified by the token \c identifier,
* if it was registered earlier with addIdleTimeout.
@@ -108,7 +108,7 @@
* @param identifier the token returned from addIdleTimeout of the timeout you want to stop listening to
*/
void removeIdleTimeout(int identifier);
-
+
/**
* Stops catching every set timeout (if any). This means that after calling this method, the signal
* \link timeoutReached won't be called again until you will add another timeout
@@ -117,7 +117,7 @@
* @see addIdleTimeout
*/
void removeAllIdleTimeouts();
-
+
/**
* Catches the next resume from idle event. This means that whenever user activity will be registered, or
* \link simulateUserActivity is called, the signal \link resumingFromIdle will be triggered.
@@ -156,7 +156,7 @@
* @see catchNextResumeEvent
*/
void resumingFromIdle();
-
+
/**
* Triggered when the system has been idle for x milliseconds, identified by the previously set
* timeout.
Index: xsyncbasedpoller.cpp
===================================================================
--- xsyncbasedpoller.cpp (.../tags/KDE/4.4.2/kdelibs/kutils/kidletime) (revision 1118483)
+++ xsyncbasedpoller.cpp (.../branches/KDE/4.4/kdelibs/kutils/kidletime) (revision 1118483)
@@ -23,10 +23,6 @@
#include <klocalizedstring.h>
#include <kglobal.h>
-#ifdef HAVE_XTEST
-#include <X11/keysym.h>
-#include <X11/extensions/XTest.h>
-#endif // HAVE_XTEST
#include <fixx11h.h>
class XSyncBasedPollerHelper
@@ -52,19 +48,17 @@
XSyncBasedPoller::XSyncBasedPoller(QWidget *parent)
: AbstractSystemPoller(parent)
-#ifdef HAVE_XSYNC
, m_display(QX11Info::display())
, m_idleCounter(X::None)
, m_resetAlarm(X::None)
-#endif
, m_available(true)
{
Q_ASSERT(!s_globalXSyncBasedPoller->q);
s_globalXSyncBasedPoller->q = this;
-#ifdef HAVE_XSYNC
int sync_major, sync_minor;
int ncounters;
+ XSyncSystemCounter *counters;
if (!XSyncQueryExtension(m_display, &m_sync_event, &m_sync_error)) {
m_available = false;
@@ -78,33 +72,29 @@
kDebug() << sync_major << sync_minor;
- m_counters = XSyncListSystemCounters(m_display, &ncounters);
+ counters = XSyncListSystemCounters(m_display, &ncounters);
bool idleFound = false;
for (int i = 0; i < ncounters; ++i) {
- if (!strcmp(m_counters[i].name, "IDLETIME")) {
+ if (!strcmp(counters[i].name, "IDLETIME")) {
+ m_idleCounter = counters[i].counter;
idleFound = true;
break;
}
}
- XSyncFreeSystemCounterList(m_counters);
+ XSyncFreeSystemCounterList(counters);
if (!idleFound) {
m_available = false;
}
-#else
- m_available = false;
-#endif
-
if (m_available) {
kDebug() << "XSync seems available and ready";
} else {
kDebug() << "XSync seems not available";
}
-
}
XSyncBasedPoller::~XSyncBasedPoller()
@@ -118,43 +108,21 @@
bool XSyncBasedPoller::setUpPoller()
{
-#ifdef HAVE_XSYNC
- int ncounters;
-
if (!isAvailable()) {
return false;
}
kDebug() << "XSync Inited";
- m_counters = XSyncListSystemCounters(m_display, &ncounters);
-
- bool idleFound = false;
-
- for (int i = 0; i < ncounters && !m_idleCounter; ++i) {
- if (!strcmp(m_counters[i].name, "IDLETIME")) {
- m_idleCounter = m_counters[i].counter;
- idleFound = true;
- }
- }
-
- if (!idleFound) {
- return false;
- }
-
KApplication::kApplication()->installX11EventFilter(this);
kDebug() << "Supported, init completed";
return true;
-#else
- return false;
-#endif
}
void XSyncBasedPoller::unloadPoller()
{
- //XSyncFreeSystemCounterList( m_counters );
}
void XSyncBasedPoller::addTimeout(int nextTimeout)
@@ -162,24 +130,21 @@
/* We need to set the counter to the idle time + the value
* requested for next timeout
*/
-#ifdef HAVE_XSYNC
+
+ // If there's already an alarm for the requested timeout, skip
+ if (m_timeoutAlarm.contains(nextTimeout)) {
+ return;
+ }
+
XSyncValue timeout;
XSyncAlarm newalarm = X::None;
- /*XSyncValue idleTime;
- XSyncValue result;
- int overflow;*/
-// XSyncQueryCounter(m_display, m_idleCounter, &idleTime);
-
XSyncIntToValue(&timeout, nextTimeout);
-// XSyncValueAdd(&result, idleTime, timeout, &overflow);
-
setAlarm(m_display, &newalarm, m_idleCounter,
XSyncPositiveComparison, timeout);
- m_timeoutAlarm[nextTimeout] = newalarm;
-#endif
+ m_timeoutAlarm.insert(nextTimeout, newalarm);
}
int XSyncBasedPoller::forcePollRequest()
@@ -189,25 +154,19 @@
int XSyncBasedPoller::poll()
{
-#ifdef HAVE_XSYNC
XSyncValue idleTime;
-
XSyncQueryCounter(m_display, m_idleCounter, &idleTime);
return XSyncValueLow32(idleTime);
-#endif
- return -1;
}
void XSyncBasedPoller::removeTimeout(int timeout)
{
-#ifdef HAVE_XSYNC
if (m_timeoutAlarm.contains(timeout)) {
XSyncAlarm a = m_timeoutAlarm[timeout];
- m_timeoutAlarm.remove(timeout);
XSyncDestroyAlarm(m_display, a);
+ m_timeoutAlarm.remove(timeout);
}
-#endif
}
QList<int> XSyncBasedPoller::timeouts() const
@@ -217,15 +176,14 @@
void XSyncBasedPoller::stopCatchingIdleEvents()
{
-#ifdef HAVE_XSYNC
- XSyncDestroyAlarm(m_display, m_resetAlarm);
- m_resetAlarm = X::None;
-#endif
+ if (m_resetAlarm != X::None) {
+ XSyncDestroyAlarm(m_display, m_resetAlarm);
+ m_resetAlarm = X::None;
+ }
}
void XSyncBasedPoller::catchIdleEvent()
{
-#ifdef HAVE_XSYNC
XSyncValue idleTime;
XSyncQueryCounter(m_display, m_idleCounter, &idleTime);
@@ -242,25 +200,22 @@
XSyncValueAdd(&plusone, idleTime, add, &overflow);
setAlarm(m_display, &m_resetAlarm, m_idleCounter,
XSyncNegativeComparison, plusone);
-#endif
-
}
void XSyncBasedPoller::reloadAlarms()
{
XSyncValue timeout;
- foreach(int nextTimeout, m_timeoutAlarm.keys()) {
- XSyncIntToValue(&timeout, nextTimeout);
+ for (QHash<int, XSyncAlarm>::iterator i = m_timeoutAlarm.begin(); i != m_timeoutAlarm.end(); ++i) {
+ XSyncIntToValue(&timeout, i.key());
- setAlarm(m_display, &(m_timeoutAlarm[nextTimeout]), m_idleCounter,
+ setAlarm(m_display, &(i.value()), m_idleCounter,
XSyncPositiveComparison, timeout);
}
}
bool XSyncBasedPoller::x11Event(XEvent *event)
{
-#ifdef HAVE_XSYNC
XSyncAlarmNotifyEvent *alarmEvent;
if (event->type != m_sync_event + XSyncAlarmNotify) {
@@ -273,11 +228,11 @@
return false;
}
- foreach(int timeout, m_timeoutAlarm.keys()) {
- if (alarmEvent->alarm == m_timeoutAlarm[timeout]) {
+ for (QHash<int, XSyncAlarm>::const_iterator i = m_timeoutAlarm.constBegin(); i != m_timeoutAlarm.constEnd(); ++i) {
+ if (alarmEvent->alarm == i.value()) {
/* Bling! Caught! */
- emit timeoutReached(timeout);
- // Update back the alarm to fire back if the system gets inactive for the same time
+ emit timeoutReached(i.key());
+ // Update the alarm to fire back if the system gets inactive for the same time
catchIdleEvent();
return false;
}
@@ -291,12 +246,8 @@
}
return false;
-#else
- return false;
-#endif
}
-#ifdef HAVE_XSYNC
void XSyncBasedPoller::setAlarm(Display *dpy, XSyncAlarm *alarm, XSyncCounter counter,
XSyncTestType test, XSyncValue value)
{
@@ -315,22 +266,16 @@
flags = XSyncCACounter | XSyncCAValueType | XSyncCATestType |
XSyncCAValue | XSyncCADelta;
- if (*alarm)
+ if (*alarm) {
XSyncChangeAlarm(dpy, *alarm, flags, &attr);
- else
+ } else {
*alarm = XSyncCreateAlarm(dpy, flags, &attr);
+ }
}
-#endif
void XSyncBasedPoller::simulateUserActivity()
{
-#ifdef HAVE_XTEST
- Display* display = QX11Info::display();
- XTestFakeMotionEvent(display, 0, 1, 2, 0);
- XSync(display, false);
-#endif // HAVE_XTEST
+ XResetScreenSaver(QX11Info::display());
}
#include "xsyncbasedpoller.moc"
-
-
Index: xscreensaverbasedpoller.cpp
===================================================================
--- xscreensaverbasedpoller.cpp (.../tags/KDE/4.4.2/kdelibs/kutils/kidletime) (revision 1118483)
+++ xscreensaverbasedpoller.cpp (.../branches/KDE/4.4/kdelibs/kutils/kidletime) (revision 1118483)
@@ -25,12 +25,6 @@
#include <X11/Xlib.h>
#include <X11/extensions/scrnsaver.h>
-#ifdef HAVE_XTEST
-#include <X11/keysym.h>
-#include <X11/extensions/XTest.h>
-#include <fixx11h.h>
-#endif // HAVE_XTEST
-
XScreensaverBasedPoller::XScreensaverBasedPoller(QWidget *parent)
: WidgetBasedPoller(parent)
{
@@ -72,11 +66,7 @@
void XScreensaverBasedPoller::simulateUserActivity()
{
stopCatchingIdleEvents();
-#ifdef HAVE_XTEST
- Display* display = QX11Info::display();
- XTestFakeMotionEvent(display, 0, 1, 2, 0);
- XSync(display, false);
-#endif // HAVE_XTEST
+ XResetScreenSaver(QX11Info::display());
emit resumingFromIdle();
}
Index: xsyncbasedpoller.h
===================================================================
--- xsyncbasedpoller.h (.../tags/KDE/4.4.2/kdelibs/kutils/kidletime) (revision 1118483)
+++ xsyncbasedpoller.h (.../branches/KDE/4.4/kdelibs/kutils/kidletime) (revision 1118483)
@@ -26,10 +26,8 @@
#include <config-kidletime.h>
-#ifdef HAVE_XSYNC
#include <X11/Xlib.h>
#include <X11/extensions/sync.h>
-#endif
class XSyncBasedPoller : public AbstractSystemPoller
{
@@ -61,22 +59,16 @@
int poll();
void reloadAlarms();
-#ifdef HAVE_XSYNC
private:
void setAlarm(Display *dpy, XSyncAlarm *alarm, XSyncCounter counter,
XSyncTestType test, XSyncValue value);
-#endif
private:
-#ifdef HAVE_XSYNC
Display * m_display;
int m_sync_event, m_sync_error;
- XSyncSystemCounter *m_counters;
XSyncCounter m_idleCounter;
QHash<int, XSyncAlarm> m_timeoutAlarm;
XSyncAlarm m_resetAlarm;
-#endif
- QWidget * m_filterWidget;
bool m_available;
};

View File

@ -8,7 +8,7 @@
Summary: KDE Libraries
Version: 4.4.2
Release: 3%{?dist}
Release: 4%{?dist}
Name: kdelibs
Epoch: 6
@ -87,6 +87,11 @@ Patch27: kdelibs-4.3.98-no_rpath.patch
# upstreamable
## 4.4 upstream
# https://bugzilla.redhat.com/585242
# http://bugs.kde.org/206455
Patch100: kdelibs-4.4.2-kate-inputmethod.patch
# fix kidletime, http://bugs.kde.org/231628, 227279, 218468
Patch101: kdelibs-4.4.2-kidletime.patch
## trunk upstream
Patch110: kdelibs-4.4.1-k3passworddialog_qt47.patch
@ -239,6 +244,10 @@ format for easy browsing.
# upstreamable patches
# upstream patches
%patch100 -p0 -b .kate_inputmethod
pushd kutils/kidletime
%patch101 -p0 -b .kidletime
popd
%{?_qt47:%patch110 -p1 -b .k3passworddialog_qt47}
# security fix
@ -431,6 +440,10 @@ rm -rf %{buildroot}
%changelog
* Sat Apr 24 2010 Rex Dieter <rdieter@fedoraproject.org> - 6:4.4.2-4
- fix kidletime (kde#231628,kde#227279,kde#218468)
- kate part ignores japanese input from input method (#585242,kde#206455)
* Thu Apr 15 2010 Rex Dieter <rdieter@fedoraproject.org> - 6:4.4.2-3
- cleanup/fix webkitkde Obsoletes a bit more (#582469)
- (Build)Requies: cmake >= 2.6.4