mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-24 10:52:49 +00:00
kdeui: enable KSelectionOwner debug and warning messages
with the QDebug rewrite they no longer cause KWin crashes Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
2e9329f1a1
commit
e8e1d7c908
1 changed files with 18 additions and 12 deletions
|
@ -33,6 +33,7 @@ public:
|
||||||
KSelectionOwnerPrivate();
|
KSelectionOwnerPrivate();
|
||||||
~KSelectionOwnerPrivate();
|
~KSelectionOwnerPrivate();
|
||||||
|
|
||||||
|
QByteArray atomname;
|
||||||
Atom x11atom;
|
Atom x11atom;
|
||||||
Display* x11display;
|
Display* x11display;
|
||||||
int x11screen;
|
int x11screen;
|
||||||
|
@ -65,7 +66,8 @@ KSelectionOwner::KSelectionOwner(const char* const atomname, const int screen, Q
|
||||||
: QObject(parent),
|
: QObject(parent),
|
||||||
d(new KSelectionOwnerPrivate())
|
d(new KSelectionOwnerPrivate())
|
||||||
{
|
{
|
||||||
d->x11atom = XInternAtom(d->x11display, atomname, False);
|
d->atomname = atomname;
|
||||||
|
d->x11atom = XInternAtom(d->x11display, d->atomname.constData(), False);
|
||||||
if (screen >= 0) {
|
if (screen >= 0) {
|
||||||
d->x11screen = screen;
|
d->x11screen = screen;
|
||||||
}
|
}
|
||||||
|
@ -79,7 +81,7 @@ KSelectionOwner::~KSelectionOwner()
|
||||||
|
|
||||||
Window KSelectionOwner::ownerWindow() const
|
Window KSelectionOwner::ownerWindow() const
|
||||||
{
|
{
|
||||||
// kDebug(240) << "Current selection owner is" << d->x11window;
|
kDebug(240) << "Current" << d->atomname << "owner is" << d->x11window;
|
||||||
return d->x11window;
|
return d->x11window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,15 +89,15 @@ bool KSelectionOwner::claim(const bool force)
|
||||||
{
|
{
|
||||||
Window currentowner = XGetSelectionOwner(d->x11display, d->x11atom);
|
Window currentowner = XGetSelectionOwner(d->x11display, d->x11atom);
|
||||||
if (currentowner != None && !force) {
|
if (currentowner != None && !force) {
|
||||||
kDebug(240) << "Selection is owned";
|
kDebug(240) << d->atomname << "is owned";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (currentowner != None) {
|
if (currentowner != None) {
|
||||||
kDebug(240) << "Selection is owned, clearing owner";
|
kDebug(240) << d->atomname << "is owned, clearing owner";
|
||||||
XSetSelectionOwner(d->x11display, d->x11atom, None, CurrentTime);
|
XSetSelectionOwner(d->x11display, d->x11atom, None, CurrentTime);
|
||||||
XFlush(d->x11display);
|
XFlush(d->x11display);
|
||||||
ushort counter = 0;
|
ushort counter = 0;
|
||||||
kDebug(240) << "Waiting for owner";
|
kDebug(240) << "Waiting for" << d->atomname << "owner";
|
||||||
while (currentowner != None && counter < 10) {
|
while (currentowner != None && counter < 10) {
|
||||||
currentowner = XGetSelectionOwner(d->x11display, d->x11atom);
|
currentowner = XGetSelectionOwner(d->x11display, d->x11atom);
|
||||||
QCoreApplication::processEvents(QEventLoop::AllEvents, KSELECTIONOWNER_TIMEOUT);
|
QCoreApplication::processEvents(QEventLoop::AllEvents, KSELECTIONOWNER_TIMEOUT);
|
||||||
|
@ -104,7 +106,7 @@ bool KSelectionOwner::claim(const bool force)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (currentowner != None) {
|
if (currentowner != None) {
|
||||||
kDebug(240) << "Selection is owned, killing owner";
|
kDebug(240) << d->atomname << "is owned, killing owner";
|
||||||
KXErrorHandler kx11errorhandler(d->x11display);
|
KXErrorHandler kx11errorhandler(d->x11display);
|
||||||
XKillClient(d->x11display, currentowner);
|
XKillClient(d->x11display, currentowner);
|
||||||
XFlush(d->x11display);
|
XFlush(d->x11display);
|
||||||
|
@ -113,7 +115,7 @@ bool KSelectionOwner::claim(const bool force)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
kDebug(240) << "Creating selection owner";
|
kDebug(240) << "Creating" << d->atomname << "owner";
|
||||||
KXErrorHandler kx11errorhandler(d->x11display);
|
KXErrorHandler kx11errorhandler(d->x11display);
|
||||||
d->x11window = XCreateSimpleWindow(
|
d->x11window = XCreateSimpleWindow(
|
||||||
d->x11display, RootWindow(d->x11display, d->x11screen),
|
d->x11display, RootWindow(d->x11display, d->x11screen),
|
||||||
|
@ -135,27 +137,31 @@ bool KSelectionOwner::claim(const bool force)
|
||||||
void KSelectionOwner::release()
|
void KSelectionOwner::release()
|
||||||
{
|
{
|
||||||
if (d->x11window == None) {
|
if (d->x11window == None) {
|
||||||
// kDebug(240) << "No owner";
|
kDebug(240) << "No" << d->atomname << "owner";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (d->timerid > 0) {
|
if (d->timerid > 0) {
|
||||||
killTimer(d->timerid);
|
killTimer(d->timerid);
|
||||||
d->timerid = 0;
|
d->timerid = 0;
|
||||||
}
|
}
|
||||||
// kDebug(240) << "Destroying owner window";
|
kDebug(240) << "Destroying" << d->atomname << "owner window";
|
||||||
|
KXErrorHandler kx11errorhandler(d->x11display);
|
||||||
XDestroyWindow(d->x11display, d->x11window);
|
XDestroyWindow(d->x11display, d->x11window);
|
||||||
XFlush(d->x11display);
|
XFlush(d->x11display);
|
||||||
|
if (kx11errorhandler.error(true)) {
|
||||||
|
kWarning(240) << KXErrorHandler::errorMessage(kx11errorhandler.errorEvent());
|
||||||
|
}
|
||||||
d->x11window = None;
|
d->x11window = None;
|
||||||
}
|
}
|
||||||
|
|
||||||
void KSelectionOwner::timerEvent(QTimerEvent *event)
|
void KSelectionOwner::timerEvent(QTimerEvent *event)
|
||||||
{
|
{
|
||||||
if (event->timerId() == d->timerid) {
|
if (event->timerId() == d->timerid) {
|
||||||
// kDebug(240) << "Checking selection owner for" << XGetAtomName(d->x11display, d->x11atom);
|
// kDebug(240) << "Checking owner for" << d->atomname;
|
||||||
Q_ASSERT(d->x11window != None);
|
Q_ASSERT(d->x11window != None);
|
||||||
Window currentowner = XGetSelectionOwner(d->x11display, d->x11atom);
|
Window currentowner = XGetSelectionOwner(d->x11display, d->x11atom);
|
||||||
if (currentowner != d->x11window) {
|
if (currentowner != d->x11window) {
|
||||||
// kDebug(240) << "Selection owner changed";
|
kDebug(240) << d->atomname << "owner changed";
|
||||||
killTimer(d->timerid);
|
killTimer(d->timerid);
|
||||||
d->timerid = 0;
|
d->timerid = 0;
|
||||||
emit lostOwnership();
|
emit lostOwnership();
|
||||||
|
@ -165,7 +171,7 @@ void KSelectionOwner::timerEvent(QTimerEvent *event)
|
||||||
XFlush(d->x11display);
|
XFlush(d->x11display);
|
||||||
d->x11window = None;
|
d->x11window = None;
|
||||||
if (kx11errorhandler.error(true)) {
|
if (kx11errorhandler.error(true)) {
|
||||||
// kDebug(240) << KXErrorHandler::errorMessage(kx11errorhandler.errorEvent());
|
kDebug(240) << KXErrorHandler::errorMessage(kx11errorhandler.errorEvent());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
event->accept();
|
event->accept();
|
||||||
|
|
Loading…
Add table
Reference in a new issue