You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.9 KiB
100 lines
2.9 KiB
15 years ago
|
// tests for window gravity
|
||
|
|
||
|
#include <iostream>
|
||
|
#include <stdlib.h>
|
||
|
#include <X11/Xlib.h>
|
||
|
#include <X11/Xutil.h>
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
const int gravities[ 10 ] =
|
||
|
{
|
||
|
NorthWestGravity,
|
||
|
NorthGravity,
|
||
|
NorthEastGravity,
|
||
|
WestGravity,
|
||
|
CenterGravity,
|
||
|
EastGravity,
|
||
|
SouthWestGravity,
|
||
|
SouthGravity,
|
||
|
SouthEastGravity,
|
||
|
StaticGravity
|
||
|
};
|
||
|
|
||
|
const char* const gravity_names[ 10 ] =
|
||
|
{
|
||
|
"NW", "N", "NE", "W", "C", "E", "SW", "S", "SE", "ST"
|
||
|
};
|
||
|
|
||
|
Display* dpy = NULL;
|
||
|
|
||
|
int get_gravity( const char* name )
|
||
|
{
|
||
|
for( int i = 0;
|
||
|
i < 10;
|
||
|
++i )
|
||
|
if( strcmp( name, gravity_names[ i ] ) == 0 )
|
||
|
return gravities[ i ];
|
||
|
cerr << "Wrong gravity name" << endl;
|
||
|
exit( 1 );
|
||
|
}
|
||
|
|
||
|
void test( const char* gravity )
|
||
|
{
|
||
|
XSetWindowAttributes attrs;
|
||
|
XSizeHints hints;
|
||
|
hints.flags = USPosition | PWinGravity;
|
||
|
hints.win_gravity = get_gravity( gravity );
|
||
|
Window w = XCreateWindow( dpy, DefaultRootWindow( dpy ), 100, 100, 200, 100, 0, CopyFromParent, CopyFromParent,
|
||
|
CopyFromParent, 0, &attrs );
|
||
|
XSetWMNormalHints( dpy, w, &hints );
|
||
|
XSelectInput( dpy, w, StructureNotifyMask | ButtonPressMask );
|
||
|
XMapWindow( dpy, w );
|
||
|
for(;;)
|
||
|
{
|
||
|
XEvent ev;
|
||
|
XNextEvent( dpy, &ev );
|
||
|
if( ev.type == ConfigureNotify )
|
||
|
{
|
||
|
cout << "CONFIGURENOTIFY:" << ev.xany.send_event << ":" << ev.xconfigure.x << ":" << ev.xconfigure.y
|
||
|
<< ":" << ev.xconfigure.width << ":" << ev.xconfigure.height << endl;
|
||
|
Window root, child;
|
||
|
int x, x_local, y, y_local;
|
||
|
unsigned int width, height, border, depth;
|
||
|
XGetGeometry( dpy, w, &root, &x_local, &y_local, &width, &height, &border, &depth );
|
||
|
XTranslateCoordinates( dpy, w, root, 0, 0, &x, &y, &child );
|
||
|
cout << "GEOMETRY:" << x << ":" << y << ":" << width << ":" << height << ":(" << x_local << ":" << y_local << ")" << endl;
|
||
|
}
|
||
|
else if( ev.type == ButtonPress )
|
||
|
{
|
||
|
if( ev.xbutton.button == Button1 ) // move
|
||
|
{
|
||
|
cout << "MOVE" << endl;
|
||
|
XMoveWindow( dpy, w, 100, 100 );
|
||
|
}
|
||
|
else if( ev.xbutton.button == Button2 ) // resize
|
||
|
{
|
||
|
cout << "RESIZE" << endl;
|
||
|
XResizeWindow( dpy, w, 200, 100 );
|
||
|
}
|
||
|
else if( ev.xbutton.button == Button3 ) // move and resize
|
||
|
{
|
||
|
cout << "MOVERESIZE" << endl;
|
||
|
XMoveResizeWindow( dpy, w, 100, 100, 200, 100 );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int main( int argc, char* argv[] )
|
||
|
{
|
||
|
dpy = XOpenDisplay( NULL );
|
||
|
if( argc != 2 )
|
||
|
{
|
||
|
cerr << "specify gravity" << endl;
|
||
|
exit( 1 );
|
||
|
}
|
||
|
test( argv[ 1 ] );
|
||
|
XCloseDisplay( dpy );
|
||
|
}
|