hrm, I fixed this wrong the other day. Fixes static gravity when moving

2001-08-18  Havoc Pennington  <hp@pobox.com>

	* src/window.c (meta_window_get_gravity_position): hrm, I fixed
	this wrong the other day. Fixes static gravity when moving
	windows.
This commit is contained in:
Havoc Pennington 2001-08-19 02:29:38 +00:00 committed by Havoc Pennington
parent 9acaa50f59
commit 922749e5b3
4 changed files with 137 additions and 7 deletions

View File

@ -1,10 +1,16 @@
2001-08-18 Havoc Pennington <hp@pobox.com>
* src/window.c (meta_window_get_gravity_position): hrm, I fixed
this wrong the other day. Fixes static gravity when moving
windows.
2001-08-18 Havoc Pennington <hp@pobox.com> 2001-08-18 Havoc Pennington <hp@pobox.com>
* src/ui.c (meta_image_window_set_position): also set the current * src/ui.c (meta_image_window_set_position): also set the current
size. Lame hack of the day. size. Lame hack of the day.
* src/effects.c (effects_draw_box_animation_timeout): use the * src/effects.c (effects_draw_box_animation_timeout): use the
delay exposes feature to avoid the scren dirt delay exposes feature to avoid the screen dirt
* src/ui.c * src/ui.c
(meta_ui_push_delay_exposes): (meta_ui_push_delay_exposes):

View File

@ -1616,12 +1616,22 @@ meta_window_get_gravity_position (MetaWindow *window,
w = window->rect.width; w = window->rect.width;
h = window->rect.height; h = window->rect.height;
if (window->frame == NULL || if (window->size_hints.win_gravity == StaticGravity)
/* ignore frame for static gravity */ {
window->size_hints.win_gravity == StaticGravity) frame_extents = window->rect;
if (window->frame)
{
frame_extents.x = window->frame->rect.x + window->frame->child_x;
frame_extents.y = window->frame->rect.y + window->frame->child_y;
}
}
else
{
if (window->frame == NULL)
frame_extents = window->rect; frame_extents = window->rect;
else else
frame_extents = window->frame->rect; frame_extents = window->frame->rect;
}
x = frame_extents.x; x = frame_extents.x;
y = frame_extents.y; y = frame_extents.y;

View File

@ -4,6 +4,10 @@ INCLUDES=@METACITY_CFLAGS@
wm_tester_SOURCES= \ wm_tester_SOURCES= \
main.c main.c
bin_PROGRAMS=wm-tester test_gravity_SOURCES= \
test-gravity.c
bin_PROGRAMS=wm-tester test-gravity
wm_tester_LDADD= @METACITY_LIBS@ wm_tester_LDADD= @METACITY_LIBS@
test_gravity_LDADD= @METACITY_LIBS@

View File

@ -0,0 +1,110 @@
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdio.h>
int gravities[10] = {
NorthWestGravity,
NorthGravity,
NorthEastGravity,
WestGravity,
CenterGravity,
EastGravity,
SouthWestGravity,
SouthGravity,
SouthEastGravity,
StaticGravity
};
Window windows[10];
int x_offset[3] = { 0, -50, -100 };
int y_offset[3] = { 0, -50, -100 };
double screen_x_fraction[3] = { 0, 0.5, 1.0 };
double screen_y_fraction[3] = { 0, 0.5, 1.0 };
int screen_width;
int screen_height;
void calculate_position (int i, int *x, int *y)
{
if (i == 9)
{
*x = 150;
*y = 150;
}
else
{
*x = screen_x_fraction[i % 3] * screen_width + x_offset[i % 3];
*y = screen_y_fraction[i / 3] * screen_height + y_offset[i / 3];
}
}
int main (int argc, char **argv)
{
Display *d;
Window w;
XSizeHints hints;
int i;
int screen;
XEvent ev;
d = XOpenDisplay (NULL);
screen = DefaultScreen (d);
screen_width = DisplayWidth (d, screen);
screen_height = DisplayHeight (d, screen);
for (i=0; i<10; i++)
{
int x, y;
calculate_position (i, &x, &y);
w = XCreateSimpleWindow(d, RootWindow(d, screen),
x, y, 100, 100, 0,
WhitePixel(d, screen), WhitePixel(d, screen));
windows[i] = w;
XSelectInput (d, w, ButtonPressMask);
hints.flags = USPosition | PMinSize | PMaxSize | PWinGravity;
hints.min_width = 100;
hints.min_height = 100;
hints.max_width = 200;
hints.max_height = 200;
hints.win_gravity = gravities[i];
XSetWMNormalHints (d, w, &hints);
XMapWindow (d, w);
}
while (1)
{
XNextEvent (d, &ev);
if (ev.xany.type == ButtonPress)
{
for (i=0; i<10; i++)
{
if (windows[i] == ev.xbutton.window)
{
if (ev.xbutton.button == Button1)
{
int x, y;
calculate_position (i, &x, &y);
w = XMoveWindow (d, windows[i], x, y);
}
else
{
w = XResizeWindow (d, windows[i], 200, 200);
}
}
}
}
}
return 0;
}