mirror of
https://bitbucket.org/smil3y/kde-workspace.git
synced 2025-02-24 10:52:51 +00:00
63 lines
2 KiB
C++
63 lines
2 KiB
C++
#include <X11/Xlib.h>
|
|
#include <X11/extensions/Xrandr.h>
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
|
|
int main( int argc, char* argv[] )
|
|
{
|
|
Display* dpy = XOpenDisplay( NULL );
|
|
XSetWindowAttributes attrs;
|
|
Window w = XCreateWindow( dpy, DefaultRootWindow( dpy ), 0, 0, 100, 100, 0, CopyFromParent, CopyFromParent,
|
|
CopyFromParent, 0, &attrs );
|
|
// XMapWindow( dpy, w );
|
|
int base, error;
|
|
if( !XRRQueryExtension( dpy, &base, &error ))
|
|
return 1;
|
|
int major = 1;
|
|
int minor = 2;
|
|
if( !XRRQueryVersion( dpy, &major, &minor ) || major < 1 || (major == 1 && minor < 2 ))
|
|
return 2;
|
|
XRRSelectInput( dpy, w,
|
|
RRScreenChangeNotifyMask | RRCrtcChangeNotifyMask | RROutputChangeNotifyMask | RROutputPropertyNotifyMask );
|
|
for(;;)
|
|
{
|
|
XEvent ev;
|
|
int a, b, c, d;
|
|
static int cnt = 0;
|
|
if( ++cnt % 30 == 0 )
|
|
{
|
|
// XRRFreeScreenResources(XRRGetScreenResources( dpy, w ));
|
|
XRRGetScreenSizeRange( dpy, w, &a, &b, &c, &d );
|
|
// XSync( dpy, False );
|
|
printf( "Poll\n" );
|
|
}
|
|
sleep( 1 );
|
|
if( !XPending( dpy ))
|
|
continue;
|
|
XNextEvent( dpy, &ev );
|
|
if( ev.xany.type == base + RRScreenChangeNotify )
|
|
{
|
|
printf( "Screen Change\n" );
|
|
}
|
|
if( ev.xany.type == base + RRNotify )
|
|
{
|
|
XRRNotifyEvent* e = reinterpret_cast< XRRNotifyEvent* >( &ev );
|
|
switch( e->subtype )
|
|
{
|
|
case RRNotify_CrtcChange:
|
|
printf( "Crtc Change\n" );
|
|
break;
|
|
case RRNotify_OutputChange:
|
|
printf( "Output Change\n" );
|
|
break;
|
|
case RRNotify_OutputProperty:
|
|
printf( "Output Property Change\n" );
|
|
break;
|
|
default:
|
|
printf( "Unknown Notify\n" );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
XCloseDisplay( dpy );
|
|
}
|