> On Jan. 8, 2013, 11:15 p.m., Xuetian Weng wrote: > > after I apply the patch, I notice that in some random unknnow case > > KWindowSystem will emit the signal, while KSelectionOwner is not. (And I > > think KSelectionOwner is correct since I didn't do anything to kwin), and I > > notice some strange plasma theme change caused by this. > > > > Trying to find you why..
The XFixesSelectionNotify event fires one every selection owner event, usually it'll be the cnp system (when you eg. mark text) The problem should ideally be fixed in Qt instead of working around it in KDE. Untested patch: diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index 3631f1d..644f0ad 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -536,6 +536,7 @@ struct qt_xfixes_selection_event_data { // which selection to filter out. Atom selection; + Window window; }; #if defined(Q_C_CALLBACKS) @@ -548,7 +549,7 @@ static Bool qt_xfixes_scanner(Display*, XEvent *event, XPointer arg) reinterpret_cast<qt_xfixes_selection_event_data*>(arg); if (event->type == X11->xfixes_eventbase + XFixesSelectionNotify) { XFixesSelectionNotifyEvent *xfixes_event = reinterpret_cast<XFixesSelectionNotifyEvent*>(event); - if (xfixes_event->selection == data->selection) + if (xfixes_event->selection == data->selection && xfixes_event->window == data->window) return true; } return false; @@ -3462,6 +3463,7 @@ int QApplication::x11ProcessEvent(XEvent* event) // we don't want to handle old SelectionNotify events. qt_xfixes_selection_event_data xfixes_event; xfixes_event.selection = req->selection; + xfixes_event.window = req->window; for (XEvent ev;;) { if (!XCheckIfEvent(X11->display, &ev, &qt_xfixes_scanner, (XPointer)&xfixes_event)) break; - Thomas ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: http://git.reviewboard.kde.org/r/107983/#review25012 ----------------------------------------------------------- On Jan. 5, 2013, 5:08 p.m., Thomas Lübking wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > http://git.reviewboard.kde.org/r/107983/ > ----------------------------------------------------------- > > (Updated Jan. 5, 2013, 5:08 p.m.) > > > Review request for kdelibs, kwin, Plasma, Aaron J. Seigo, Marco Martin, > Martin Gräßlin, and Fredrik Höglund. > > > Description > ------- > > It works fine here (tested so far KWindowSystem signal, KSelectionWatcher > only with kwin) with kwin (shift+alt+f12), xcompmgr, compiz & "metacity -c" > and e17. > Didn't try xfce nor mutter. > > Technically: > I do not at all understand why KWindowSystem is *not* watching the root > window - KSelectionOwner for one is sending events to the root and this also > seems the case for all other WMs (at least everything now starts to cause the > signal to be emitted) > > The KSelectionWatcher failure seems to be kwin specific (wrote me a cleaner > testcase), there'll be some X11 event processing on top that eats away the > client messages. > So this one can be scratched from the patch, the KWindowSystem issue remains. > > > This addresses bug 179042. > http://bugs.kde.org/show_bug.cgi?id=179042 > > > Diffs > ----- > > kdeui/windowmanagement/kwindowsystem_x11.cpp f9b3cc1 > > Diff: http://git.reviewboard.kde.org/r/107983/diff/ > > > Testing > ------- > > see summary > > > Thanks, > > Thomas Lübking > >