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.
99 lines
2.9 KiB
99 lines
2.9 KiB
// 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 ); |
|
}
|
|
|