mirror of
https://github.com/brl/mutter.git
synced 2024-11-24 17:10:40 -05:00
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:
parent
9acaa50f59
commit
922749e5b3
@ -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):
|
||||||
|
20
src/window.c
20
src/window.c
@ -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;
|
||||||
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
|
else
|
||||||
frame_extents = window->frame->rect;
|
{
|
||||||
|
if (window->frame == NULL)
|
||||||
|
frame_extents = window->rect;
|
||||||
|
else
|
||||||
|
frame_extents = window->frame->rect;
|
||||||
|
}
|
||||||
|
|
||||||
x = frame_extents.x;
|
x = frame_extents.x;
|
||||||
y = frame_extents.y;
|
y = frame_extents.y;
|
||||||
|
@ -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@
|
110
src/wm-tester/test-gravity.c
Normal file
110
src/wm-tester/test-gravity.c
Normal 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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user