Enable event handling for the X extension events
* Randr still needs XCB adjustments * Client::syncEvent needs porting to XCB
This commit is contained in:
parent
59a2da3b1e
commit
ce10105dfc
2 changed files with 19 additions and 12 deletions
4
client.h
4
client.h
|
@ -46,6 +46,8 @@ class QTimer;
|
||||||
class KStartupInfoData;
|
class KStartupInfoData;
|
||||||
class KStartupInfoId;
|
class KStartupInfoId;
|
||||||
|
|
||||||
|
struct xcb_sync_alarm_notify_event_t;
|
||||||
|
|
||||||
namespace KWin
|
namespace KWin
|
||||||
{
|
{
|
||||||
namespace TabBox
|
namespace TabBox
|
||||||
|
@ -315,7 +317,7 @@ public:
|
||||||
bool windowEvent(xcb_generic_event_t *e);
|
bool windowEvent(xcb_generic_event_t *e);
|
||||||
virtual bool eventFilter(QObject* o, QEvent* e);
|
virtual bool eventFilter(QObject* o, QEvent* e);
|
||||||
#ifdef HAVE_XSYNC
|
#ifdef HAVE_XSYNC
|
||||||
void syncEvent(XSyncAlarmNotifyEvent* e);
|
void syncEvent(xcb_sync_alarm_notify_event_t* e);
|
||||||
#endif
|
#endif
|
||||||
NET::WindowType windowType(bool direct = false, int supported_types = 0) const;
|
NET::WindowType windowType(bool direct = false, int supported_types = 0) const;
|
||||||
|
|
||||||
|
|
27
events.cpp
27
events.cpp
|
@ -58,6 +58,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include <X11/extensions/Xrandr.h>
|
#include <X11/extensions/Xrandr.h>
|
||||||
#include <X11/Xatom.h>
|
#include <X11/Xatom.h>
|
||||||
#include <QX11Info>
|
#include <QX11Info>
|
||||||
|
#include <xcb/sync.h>
|
||||||
|
|
||||||
#include "composite.h"
|
#include "composite.h"
|
||||||
#include "killwindow.h"
|
#include "killwindow.h"
|
||||||
|
@ -366,10 +367,12 @@ bool Workspace::workspaceEvent(xcb_generic_event_t *e)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#if KWIN_QT5_PORTING
|
|
||||||
default:
|
default:
|
||||||
if (e->type == Xcb::Extensions::self()->randrNotifyEvent() && Xcb::Extensions::self()->isRandrAvailable()) {
|
if (eventType == Xcb::Extensions::self()->randrNotifyEvent() && Xcb::Extensions::self()->isRandrAvailable()) {
|
||||||
|
#warning Need an XCB replacement for XRRUpdateConfiguration
|
||||||
|
#if KWIN_QT5_PORTING
|
||||||
XRRUpdateConfiguration(e);
|
XRRUpdateConfiguration(e);
|
||||||
|
#endif
|
||||||
if (compositing()) {
|
if (compositing()) {
|
||||||
// desktopResized() should take care of when the size or
|
// desktopResized() should take care of when the size or
|
||||||
// shape of the desktop has changed, but we also want to
|
// shape of the desktop has changed, but we also want to
|
||||||
|
@ -378,18 +381,17 @@ bool Workspace::workspaceEvent(xcb_generic_event_t *e)
|
||||||
m_compositor->setCompositeResetTimer(0);
|
m_compositor->setCompositeResetTimer(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (e->type == Xcb::Extensions::self()->syncAlarmNotifyEvent() && Xcb::Extensions::self()->isSyncAvailable()) {
|
} else if (eventType == Xcb::Extensions::self()->syncAlarmNotifyEvent() && Xcb::Extensions::self()->isSyncAvailable()) {
|
||||||
#ifdef HAVE_XSYNC
|
#ifdef HAVE_XSYNC
|
||||||
foreach (Client * c, clients)
|
for (Client *c : clients)
|
||||||
c->syncEvent(reinterpret_cast< XSyncAlarmNotifyEvent* >(e));
|
c->syncEvent(reinterpret_cast< xcb_sync_alarm_notify_event_t* >(e));
|
||||||
foreach (Client * c, desktops)
|
for (Client *c : desktops)
|
||||||
c->syncEvent(reinterpret_cast< XSyncAlarmNotifyEvent* >(e));
|
c->syncEvent(reinterpret_cast< xcb_sync_alarm_notify_event_t* >(e));
|
||||||
#endif
|
#endif
|
||||||
} else if (e->type == Xcb::Extensions::self()->fixesCursorNotifyEvent() && Xcb::Extensions::self()->isFixesAvailable()) {
|
} else if (eventType == Xcb::Extensions::self()->fixesCursorNotifyEvent() && Xcb::Extensions::self()->isFixesAvailable()) {
|
||||||
Cursor::self()->notifyCursorChanged(reinterpret_cast<XFixesCursorNotifyEvent*>(e)->cursor_serial);
|
Cursor::self()->notifyCursorChanged(reinterpret_cast<xcb_xfixes_cursor_notify_event_t*>(e)->cursor_serial);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1486,8 +1488,10 @@ void Client::keyPressEvent(uint key_code)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_XSYNC
|
#ifdef HAVE_XSYNC
|
||||||
void Client::syncEvent(XSyncAlarmNotifyEvent* e)
|
void Client::syncEvent(xcb_sync_alarm_notify_event_t* e)
|
||||||
{
|
{
|
||||||
|
#warning port XSync to XCB
|
||||||
|
#if KWIN_QT5_PORTING
|
||||||
if (e->alarm == syncRequest.alarm && XSyncValueEqual(e->counter_value, syncRequest.value)) {
|
if (e->alarm == syncRequest.alarm && XSyncValueEqual(e->counter_value, syncRequest.value)) {
|
||||||
setReadyForPainting();
|
setReadyForPainting();
|
||||||
syncRequest.isPending = false;
|
syncRequest.isPending = false;
|
||||||
|
@ -1500,6 +1504,7 @@ void Client::syncEvent(XSyncAlarmNotifyEvent* e)
|
||||||
} else // setReadyForPainting does as well, but there's a small chance for resize syncs after the resize ended
|
} else // setReadyForPainting does as well, but there's a small chance for resize syncs after the resize ended
|
||||||
addRepaintFull();
|
addRepaintFull();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue