mirror of
https://github.com/brl/mutter.git
synced 2024-11-22 08:00:42 -05:00
Patch from Jens Granseuer to fix build with gcc 2.95. #322622.
2006-01-02 Elijah Newren <newren@gmail.com> Patch from Jens Granseuer to fix build with gcc 2.95. #322622. * src/boxes.c (meta_rectangle_region_to_string, meta_rectangle_edge_list_to_string, fix_up_edges): * src/constraints.c (meta_window_constrain, setup_constraint_info, place_window_if_needed, constrain_maximization, constrain_fullscreen, constrain_size_increments, constrain_size_limits, constrain_aspect_ratio, do_screen_and_xinerama_relative_constrai, constrain_to_single_xinerama, constrain_fully_onscreen, constrain_partially_onscreen): * src/edge-resistance.c (find_nearest_position, apply_edge_resistance, apply_edge_resistance_to_each_side): * src/testboxes.c (test_clamping_to_region, test_clipping_to_region, test_shoving_into_region): * src/window.c (meta_window_new_with_attrs, meta_window_apply_session_info, meta_window_resize, meta_window_resize_with_gravity, meta_window_configure_request): Remove C99 style variable initiailization
This commit is contained in:
parent
d530c3e405
commit
ebd0c7e9a6
23
ChangeLog
23
ChangeLog
@ -1,3 +1,26 @@
|
|||||||
|
2006-01-02 Elijah Newren <newren@gmail.com>
|
||||||
|
|
||||||
|
Patch from Jens Granseuer to fix build with gcc 2.95. #322622.
|
||||||
|
|
||||||
|
* src/boxes.c (meta_rectangle_region_to_string,
|
||||||
|
meta_rectangle_edge_list_to_string, fix_up_edges):
|
||||||
|
* src/constraints.c (meta_window_constrain, setup_constraint_info,
|
||||||
|
place_window_if_needed, constrain_maximization,
|
||||||
|
constrain_fullscreen, constrain_size_increments,
|
||||||
|
constrain_size_limits, constrain_aspect_ratio,
|
||||||
|
do_screen_and_xinerama_relative_constrai,
|
||||||
|
constrain_to_single_xinerama, constrain_fully_onscreen,
|
||||||
|
constrain_partially_onscreen):
|
||||||
|
* src/edge-resistance.c (find_nearest_position,
|
||||||
|
apply_edge_resistance, apply_edge_resistance_to_each_side):
|
||||||
|
* src/testboxes.c (test_clamping_to_region,
|
||||||
|
test_clipping_to_region, test_shoving_into_region):
|
||||||
|
* src/window.c (meta_window_new_with_attrs,
|
||||||
|
meta_window_apply_session_info, meta_window_resize,
|
||||||
|
meta_window_resize_with_gravity, meta_window_configure_request):
|
||||||
|
|
||||||
|
Remove C99 style variable initiailization
|
||||||
|
|
||||||
2006-01-02 Elijah Newren <newren@gmail.com>
|
2006-01-02 Elijah Newren <newren@gmail.com>
|
||||||
|
|
||||||
* configure.in: post-release version bump to 2.13.13
|
* configure.in: post-release version bump to 2.13.13
|
||||||
|
13
src/boxes.c
13
src/boxes.c
@ -55,11 +55,12 @@ meta_rectangle_region_to_string (GList *region,
|
|||||||
*/
|
*/
|
||||||
char rect_string[RECT_LENGTH];
|
char rect_string[RECT_LENGTH];
|
||||||
|
|
||||||
|
GList *tmp = region;
|
||||||
|
char *cur = output;
|
||||||
|
|
||||||
if (region == NULL)
|
if (region == NULL)
|
||||||
snprintf (output, 10, "(EMPTY)");
|
snprintf (output, 10, "(EMPTY)");
|
||||||
|
|
||||||
char *cur = output;
|
|
||||||
GList *tmp = region;
|
|
||||||
while (tmp)
|
while (tmp)
|
||||||
{
|
{
|
||||||
MetaRectangle *rect = tmp->data;
|
MetaRectangle *rect = tmp->data;
|
||||||
@ -107,11 +108,12 @@ meta_rectangle_edge_list_to_string (GList *edge_list,
|
|||||||
*/
|
*/
|
||||||
char rect_string[EDGE_LENGTH];
|
char rect_string[EDGE_LENGTH];
|
||||||
|
|
||||||
|
char *cur = output;
|
||||||
|
GList *tmp = edge_list;
|
||||||
|
|
||||||
if (edge_list == NULL)
|
if (edge_list == NULL)
|
||||||
snprintf (output, 10, "(EMPTY)");
|
snprintf (output, 10, "(EMPTY)");
|
||||||
|
|
||||||
char *cur = output;
|
|
||||||
GList *tmp = edge_list;
|
|
||||||
while (tmp)
|
while (tmp)
|
||||||
{
|
{
|
||||||
MetaEdge *edge = tmp->data;
|
MetaEdge *edge = tmp->data;
|
||||||
@ -1453,11 +1455,12 @@ fix_up_edges (MetaRectangle *strut, MetaEdge *edge,
|
|||||||
/* If this is the edge that overlaps, then we need to split it */
|
/* If this is the edge that overlaps, then we need to split it */
|
||||||
if (edges_overlap (cur, &overlap))
|
if (edges_overlap (cur, &overlap))
|
||||||
{
|
{
|
||||||
|
GList *delete_me = tmp;
|
||||||
|
|
||||||
/* Split this edge into some new ones */
|
/* Split this edge into some new ones */
|
||||||
*strut_edges = split_edge (*strut_edges, cur, &overlap);
|
*strut_edges = split_edge (*strut_edges, cur, &overlap);
|
||||||
|
|
||||||
/* Delete the old one */
|
/* Delete the old one */
|
||||||
GList *delete_me = tmp;
|
|
||||||
tmp = tmp->next;
|
tmp = tmp->next;
|
||||||
g_free (cur);
|
g_free (cur);
|
||||||
*strut_edges = g_list_delete_link (*strut_edges, delete_me);
|
*strut_edges = g_list_delete_link (*strut_edges, delete_me);
|
||||||
|
@ -261,6 +261,8 @@ meta_window_constrain (MetaWindow *window,
|
|||||||
MetaRectangle *new)
|
MetaRectangle *new)
|
||||||
{
|
{
|
||||||
ConstraintInfo info;
|
ConstraintInfo info;
|
||||||
|
ConstraintPriority priority = PRIORITY_MINIMUM;
|
||||||
|
gboolean satisfied = FALSE;
|
||||||
|
|
||||||
/* WARNING: orig and new specify positions and sizes of the inner window,
|
/* WARNING: orig and new specify positions and sizes of the inner window,
|
||||||
* not the outer. This is a common gotcha since half the constraints
|
* not the outer. This is a common gotcha since half the constraints
|
||||||
@ -282,8 +284,6 @@ meta_window_constrain (MetaWindow *window,
|
|||||||
new);
|
new);
|
||||||
place_window_if_needed (window, &info);
|
place_window_if_needed (window, &info);
|
||||||
|
|
||||||
ConstraintPriority priority = PRIORITY_MINIMUM;
|
|
||||||
gboolean satisfied = FALSE;
|
|
||||||
while (!satisfied && priority <= PRIORITY_MAXIMUM) {
|
while (!satisfied && priority <= PRIORITY_MAXIMUM) {
|
||||||
gboolean check_only = TRUE;
|
gboolean check_only = TRUE;
|
||||||
|
|
||||||
@ -325,6 +325,9 @@ setup_constraint_info (ConstraintInfo *info,
|
|||||||
const MetaRectangle *orig,
|
const MetaRectangle *orig,
|
||||||
MetaRectangle *new)
|
MetaRectangle *new)
|
||||||
{
|
{
|
||||||
|
const MetaXineramaScreenInfo *xinerama_info;
|
||||||
|
MetaWorkspace *cur_workspace;
|
||||||
|
|
||||||
info->orig = *orig;
|
info->orig = *orig;
|
||||||
info->current = *new;
|
info->current = *new;
|
||||||
|
|
||||||
@ -364,11 +367,11 @@ setup_constraint_info (ConstraintInfo *info,
|
|||||||
|
|
||||||
meta_window_get_work_area_current_xinerama (window, &info->work_area_xinerama);
|
meta_window_get_work_area_current_xinerama (window, &info->work_area_xinerama);
|
||||||
|
|
||||||
const MetaXineramaScreenInfo *xinerama_info =
|
xinerama_info =
|
||||||
meta_screen_get_xinerama_for_window (window->screen, window);
|
meta_screen_get_xinerama_for_window (window->screen, window);
|
||||||
info->entire_xinerama = xinerama_info->rect;
|
info->entire_xinerama = xinerama_info->rect;
|
||||||
|
|
||||||
MetaWorkspace *cur_workspace = window->screen->active_workspace;
|
cur_workspace = window->screen->active_workspace;
|
||||||
info->usable_screen_region =
|
info->usable_screen_region =
|
||||||
meta_workspace_get_onscreen_region (cur_workspace);
|
meta_workspace_get_onscreen_region (cur_workspace);
|
||||||
info->usable_xinerama_region =
|
info->usable_xinerama_region =
|
||||||
@ -427,6 +430,8 @@ place_window_if_needed(MetaWindow *window,
|
|||||||
!window->fullscreen)
|
!window->fullscreen)
|
||||||
{
|
{
|
||||||
MetaRectangle placed_rect = info->orig;
|
MetaRectangle placed_rect = info->orig;
|
||||||
|
MetaWorkspace *cur_workspace;
|
||||||
|
const MetaXineramaScreenInfo *xinerama_info;
|
||||||
|
|
||||||
meta_window_place (window, info->fgeom, info->orig.x, info->orig.y,
|
meta_window_place (window, info->fgeom, info->orig.x, info->orig.y,
|
||||||
&placed_rect.x, &placed_rect.y);
|
&placed_rect.x, &placed_rect.y);
|
||||||
@ -435,13 +440,13 @@ place_window_if_needed(MetaWindow *window,
|
|||||||
/* placing the window may have changed the xinerama. Find the
|
/* placing the window may have changed the xinerama. Find the
|
||||||
* new xinerama and update the ConstraintInfo
|
* new xinerama and update the ConstraintInfo
|
||||||
*/
|
*/
|
||||||
const MetaXineramaScreenInfo *xinerama_info =
|
xinerama_info =
|
||||||
meta_screen_get_xinerama_for_rect (window->screen, &placed_rect);
|
meta_screen_get_xinerama_for_rect (window->screen, &placed_rect);
|
||||||
info->entire_xinerama = xinerama_info->rect;
|
info->entire_xinerama = xinerama_info->rect;
|
||||||
meta_window_get_work_area_for_xinerama (window,
|
meta_window_get_work_area_for_xinerama (window,
|
||||||
xinerama_info->number,
|
xinerama_info->number,
|
||||||
&info->work_area_xinerama);
|
&info->work_area_xinerama);
|
||||||
MetaWorkspace *cur_workspace = window->screen->active_workspace;
|
cur_workspace = window->screen->active_workspace;
|
||||||
info->usable_xinerama_region =
|
info->usable_xinerama_region =
|
||||||
meta_workspace_get_onxinerama_region (cur_workspace,
|
meta_workspace_get_onxinerama_region (cur_workspace,
|
||||||
xinerama_info->number);
|
xinerama_info->number);
|
||||||
@ -620,6 +625,11 @@ constrain_maximization (MetaWindow *window,
|
|||||||
ConstraintPriority priority,
|
ConstraintPriority priority,
|
||||||
gboolean check_only)
|
gboolean check_only)
|
||||||
{
|
{
|
||||||
|
MetaRectangle min_size, max_size, work_area;
|
||||||
|
gboolean hminbad, vminbad, hmaxbad, vmaxbad;
|
||||||
|
gboolean horiz_equal, vert_equal;
|
||||||
|
gboolean constraint_already_satisfied;
|
||||||
|
|
||||||
if (priority > PRIORITY_MAXIMIZATION)
|
if (priority > PRIORITY_MAXIMIZATION)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
@ -627,12 +637,10 @@ constrain_maximization (MetaWindow *window,
|
|||||||
if (!window->maximized_horizontally && !window->maximized_vertically)
|
if (!window->maximized_horizontally && !window->maximized_vertically)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
MetaRectangle min_size, max_size;
|
work_area = info->work_area_xinerama;
|
||||||
MetaRectangle work_area = info->work_area_xinerama;
|
|
||||||
unextend_by_frame (&work_area, info->fgeom);
|
unextend_by_frame (&work_area, info->fgeom);
|
||||||
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
||||||
|
|
||||||
gboolean hminbad, vminbad, hmaxbad, vmaxbad;
|
|
||||||
hminbad = work_area.width < min_size.width && window->maximized_horizontally;
|
hminbad = work_area.width < min_size.width && window->maximized_horizontally;
|
||||||
vminbad = work_area.height < min_size.height && window->maximized_vertically;
|
vminbad = work_area.height < min_size.height && window->maximized_vertically;
|
||||||
hmaxbad = work_area.width > max_size.width && window->maximized_horizontally;
|
hmaxbad = work_area.width > max_size.width && window->maximized_horizontally;
|
||||||
@ -641,12 +649,11 @@ constrain_maximization (MetaWindow *window,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Determine whether constraint is already satisfied; exit if it is */
|
/* Determine whether constraint is already satisfied; exit if it is */
|
||||||
gboolean horiz_equal, vert_equal;
|
|
||||||
horiz_equal = work_area.x == info->current.x &&
|
horiz_equal = work_area.x == info->current.x &&
|
||||||
work_area.width == info->current.width;
|
work_area.width == info->current.width;
|
||||||
vert_equal = work_area.y == info->current.y &&
|
vert_equal = work_area.y == info->current.y &&
|
||||||
work_area.height == info->current.height;
|
work_area.height == info->current.height;
|
||||||
gboolean constraint_already_satisfied =
|
constraint_already_satisfied =
|
||||||
(horiz_equal || !window->maximized_horizontally) &&
|
(horiz_equal || !window->maximized_horizontally) &&
|
||||||
(vert_equal || !window->maximized_vertically);
|
(vert_equal || !window->maximized_vertically);
|
||||||
if (check_only || constraint_already_satisfied)
|
if (check_only || constraint_already_satisfied)
|
||||||
@ -672,22 +679,24 @@ constrain_fullscreen (MetaWindow *window,
|
|||||||
ConstraintPriority priority,
|
ConstraintPriority priority,
|
||||||
gboolean check_only)
|
gboolean check_only)
|
||||||
{
|
{
|
||||||
|
MetaRectangle min_size, max_size, xinerama;
|
||||||
|
gboolean too_big, too_small, constraint_already_satisfied;
|
||||||
|
|
||||||
if (priority > PRIORITY_FULLSCREEN)
|
if (priority > PRIORITY_FULLSCREEN)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Determine whether constraint applies; exit if it doesn't */
|
/* Determine whether constraint applies; exit if it doesn't */
|
||||||
if (!window->fullscreen)
|
if (!window->fullscreen)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
MetaRectangle min_size, max_size;
|
xinerama = info->entire_xinerama;
|
||||||
MetaRectangle xinerama = info->entire_xinerama;
|
|
||||||
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
||||||
gboolean too_big = !meta_rectangle_could_fit_rect (&xinerama, &min_size);
|
too_big = !meta_rectangle_could_fit_rect (&xinerama, &min_size);
|
||||||
gboolean too_small = !meta_rectangle_could_fit_rect (&max_size, &xinerama);
|
too_small = !meta_rectangle_could_fit_rect (&max_size, &xinerama);
|
||||||
if (too_big || too_small)
|
if (too_big || too_small)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Determine whether constraint is already satisfied; exit if it is */
|
/* Determine whether constraint is already satisfied; exit if it is */
|
||||||
gboolean constraint_already_satisfied =
|
constraint_already_satisfied =
|
||||||
meta_rectangle_equal (&info->current, &xinerama);
|
meta_rectangle_equal (&info->current, &xinerama);
|
||||||
if (check_only || constraint_already_satisfied)
|
if (check_only || constraint_already_satisfied)
|
||||||
return constraint_already_satisfied;
|
return constraint_already_satisfied;
|
||||||
@ -703,6 +712,9 @@ constrain_size_increments (MetaWindow *window,
|
|||||||
ConstraintPriority priority,
|
ConstraintPriority priority,
|
||||||
gboolean check_only)
|
gboolean check_only)
|
||||||
{
|
{
|
||||||
|
int bh, hi, bw, wi, extra_height, extra_width;
|
||||||
|
gboolean constraint_already_satisfied;
|
||||||
|
|
||||||
if (priority > PRIORITY_SIZE_HINTS_INCREMENTS)
|
if (priority > PRIORITY_SIZE_HINTS_INCREMENTS)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
@ -712,7 +724,6 @@ constrain_size_increments (MetaWindow *window,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Determine whether constraint is already satisfied; exit if it is */
|
/* Determine whether constraint is already satisfied; exit if it is */
|
||||||
int bh, hi, bw, wi, extra_height, extra_width;
|
|
||||||
bh = window->size_hints.base_height;
|
bh = window->size_hints.base_height;
|
||||||
hi = window->size_hints.height_inc;
|
hi = window->size_hints.height_inc;
|
||||||
bw = window->size_hints.base_width;
|
bw = window->size_hints.base_width;
|
||||||
@ -723,7 +734,7 @@ constrain_size_increments (MetaWindow *window,
|
|||||||
extra_width *= 0;
|
extra_width *= 0;
|
||||||
if (window->maximized_vertically)
|
if (window->maximized_vertically)
|
||||||
extra_height *= 0;
|
extra_height *= 0;
|
||||||
gboolean constraint_already_satisfied =
|
constraint_already_satisfied =
|
||||||
(extra_height == 0 && extra_width == 0);
|
(extra_height == 0 && extra_width == 0);
|
||||||
|
|
||||||
if (check_only || constraint_already_satisfied)
|
if (check_only || constraint_already_satisfied)
|
||||||
@ -745,6 +756,10 @@ constrain_size_limits (MetaWindow *window,
|
|||||||
ConstraintPriority priority,
|
ConstraintPriority priority,
|
||||||
gboolean check_only)
|
gboolean check_only)
|
||||||
{
|
{
|
||||||
|
MetaRectangle min_size, max_size;
|
||||||
|
gboolean too_big, too_small, constraint_already_satisfied;
|
||||||
|
int new_width, new_height;
|
||||||
|
|
||||||
if (priority > PRIORITY_SIZE_HINTS_LIMITS)
|
if (priority > PRIORITY_SIZE_HINTS_LIMITS)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
@ -757,18 +772,14 @@ constrain_size_limits (MetaWindow *window,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Determine whether constraint is already satisfied; exit if it is */
|
/* Determine whether constraint is already satisfied; exit if it is */
|
||||||
MetaRectangle min_size, max_size;
|
|
||||||
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
||||||
gboolean too_big =
|
too_big = !meta_rectangle_could_fit_rect (&info->current, &min_size);
|
||||||
!meta_rectangle_could_fit_rect (&info->current, &min_size);
|
too_small = !meta_rectangle_could_fit_rect (&max_size, &info->current);
|
||||||
gboolean too_small =
|
constraint_already_satisfied = !too_big && !too_small;
|
||||||
!meta_rectangle_could_fit_rect (&max_size, &info->current);
|
|
||||||
gboolean constraint_already_satisfied = !too_big && !too_small;
|
|
||||||
if (check_only || constraint_already_satisfied)
|
if (check_only || constraint_already_satisfied)
|
||||||
return constraint_already_satisfied;
|
return constraint_already_satisfied;
|
||||||
|
|
||||||
/*** Enforce constraint ***/
|
/*** Enforce constraint ***/
|
||||||
int new_width, new_height;
|
|
||||||
new_width = CLAMP (info->current.width, min_size.width, max_size.width);
|
new_width = CLAMP (info->current.width, min_size.width, max_size.width);
|
||||||
new_height = CLAMP (info->current.height, min_size.height, max_size.height);
|
new_height = CLAMP (info->current.height, min_size.height, max_size.height);
|
||||||
meta_rectangle_resize_with_gravity (&info->orig,
|
meta_rectangle_resize_with_gravity (&info->orig,
|
||||||
@ -785,16 +796,21 @@ constrain_aspect_ratio (MetaWindow *window,
|
|||||||
ConstraintPriority priority,
|
ConstraintPriority priority,
|
||||||
gboolean check_only)
|
gboolean check_only)
|
||||||
{
|
{
|
||||||
|
double minr, maxr;
|
||||||
|
gboolean constraints_are_inconsistent, constraint_already_satisfied;
|
||||||
|
int fudge, new_width, new_height;
|
||||||
|
double best_width, best_height;
|
||||||
|
double alt_width, alt_height;
|
||||||
|
|
||||||
if (priority > PRIORITY_ASPECT_RATIO)
|
if (priority > PRIORITY_ASPECT_RATIO)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Determine whether constraint applies; exit if it doesn't. */
|
/* Determine whether constraint applies; exit if it doesn't. */
|
||||||
double minr, maxr;
|
|
||||||
minr = window->size_hints.min_aspect.x /
|
minr = window->size_hints.min_aspect.x /
|
||||||
(double)window->size_hints.min_aspect.y;
|
(double)window->size_hints.min_aspect.y;
|
||||||
maxr = window->size_hints.max_aspect.x /
|
maxr = window->size_hints.max_aspect.x /
|
||||||
(double)window->size_hints.max_aspect.y;
|
(double)window->size_hints.max_aspect.y;
|
||||||
gboolean constraints_are_inconsistent = minr > maxr;
|
constraints_are_inconsistent = minr > maxr;
|
||||||
if (constraints_are_inconsistent ||
|
if (constraints_are_inconsistent ||
|
||||||
META_WINDOW_MAXIMIZED (window) || window->fullscreen ||
|
META_WINDOW_MAXIMIZED (window) || window->fullscreen ||
|
||||||
info->action_type == ACTION_MOVE)
|
info->action_type == ACTION_MOVE)
|
||||||
@ -816,7 +832,6 @@ constrain_aspect_ratio (MetaWindow *window,
|
|||||||
* being a resize increment (FIXME: I should handle real resize
|
* being a resize increment (FIXME: I should handle real resize
|
||||||
* increments better here...)
|
* increments better here...)
|
||||||
*/
|
*/
|
||||||
int fudge;
|
|
||||||
switch (info->resize_gravity)
|
switch (info->resize_gravity)
|
||||||
{
|
{
|
||||||
case WestGravity:
|
case WestGravity:
|
||||||
@ -836,16 +851,13 @@ constrain_aspect_ratio (MetaWindow *window,
|
|||||||
fudge = 1;
|
fudge = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
gboolean constraint_already_satisfied =
|
constraint_already_satisfied =
|
||||||
info->current.width - (info->current.height * minr ) > -minr*fudge &&
|
info->current.width - (info->current.height * minr ) > -minr*fudge &&
|
||||||
info->current.width - (info->current.height * maxr ) < maxr*fudge;
|
info->current.width - (info->current.height * maxr ) < maxr*fudge;
|
||||||
if (check_only || constraint_already_satisfied)
|
if (check_only || constraint_already_satisfied)
|
||||||
return constraint_already_satisfied;
|
return constraint_already_satisfied;
|
||||||
|
|
||||||
/*** Enforce constraint ***/
|
/*** Enforce constraint ***/
|
||||||
int new_width, new_height;
|
|
||||||
double best_width, best_height;
|
|
||||||
double alt_width, alt_height;
|
|
||||||
new_width = info->current.width;
|
new_width = info->current.width;
|
||||||
new_height = info->current.height;
|
new_height = info->current.height;
|
||||||
|
|
||||||
@ -910,7 +922,8 @@ do_screen_and_xinerama_relative_constraints (
|
|||||||
ConstraintInfo *info,
|
ConstraintInfo *info,
|
||||||
gboolean check_only)
|
gboolean check_only)
|
||||||
{
|
{
|
||||||
gboolean exit_early = FALSE;
|
gboolean exit_early = FALSE, constraint_satisfied;
|
||||||
|
MetaRectangle how_far_it_can_be_smushed, min_size, max_size;
|
||||||
|
|
||||||
/* First, log some debugging information */
|
/* First, log some debugging information */
|
||||||
char spanning_region[1 + 28 * g_list_length (region_spanning_rectangles)];
|
char spanning_region[1 + 28 * g_list_length (region_spanning_rectangles)];
|
||||||
@ -921,7 +934,6 @@ do_screen_and_xinerama_relative_constraints (
|
|||||||
spanning_region));
|
spanning_region));
|
||||||
|
|
||||||
/* Determine whether constraint applies; exit if it doesn't */
|
/* Determine whether constraint applies; exit if it doesn't */
|
||||||
MetaRectangle how_far_it_can_be_smushed, min_size, max_size;
|
|
||||||
how_far_it_can_be_smushed = info->current;
|
how_far_it_can_be_smushed = info->current;
|
||||||
get_size_limits (window, info->fgeom, TRUE, &min_size, &max_size);
|
get_size_limits (window, info->fgeom, TRUE, &min_size, &max_size);
|
||||||
extend_by_frame (&info->current, info->fgeom);
|
extend_by_frame (&info->current, info->fgeom);
|
||||||
@ -939,7 +951,7 @@ do_screen_and_xinerama_relative_constraints (
|
|||||||
exit_early = TRUE;
|
exit_early = TRUE;
|
||||||
|
|
||||||
/* Determine whether constraint is already satisfied; exit if it is */
|
/* Determine whether constraint is already satisfied; exit if it is */
|
||||||
gboolean constraint_satisfied =
|
constraint_satisfied =
|
||||||
meta_rectangle_contained_in_region (region_spanning_rectangles,
|
meta_rectangle_contained_in_region (region_spanning_rectangles,
|
||||||
&info->current);
|
&info->current);
|
||||||
if (exit_early || constraint_satisfied || check_only)
|
if (exit_early || constraint_satisfied || check_only)
|
||||||
@ -995,14 +1007,10 @@ constrain_to_single_xinerama (MetaWindow *window,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Have a helper function handle the constraint for us */
|
/* Have a helper function handle the constraint for us */
|
||||||
gboolean retval =
|
return do_screen_and_xinerama_relative_constraints (window,
|
||||||
do_screen_and_xinerama_relative_constraints (window,
|
|
||||||
info->usable_xinerama_region,
|
info->usable_xinerama_region,
|
||||||
info,
|
info,
|
||||||
check_only);
|
check_only);
|
||||||
|
|
||||||
/* Free up the data we allocated */
|
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -1025,13 +1033,10 @@ constrain_fully_onscreen (MetaWindow *window,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Have a helper function handle the constraint for us */
|
/* Have a helper function handle the constraint for us */
|
||||||
gboolean retval =
|
return do_screen_and_xinerama_relative_constraints (window,
|
||||||
do_screen_and_xinerama_relative_constraints (window,
|
|
||||||
info->usable_screen_region,
|
info->usable_screen_region,
|
||||||
info,
|
info,
|
||||||
check_only);
|
check_only);
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -1040,6 +1045,9 @@ constrain_partially_onscreen (MetaWindow *window,
|
|||||||
ConstraintPriority priority,
|
ConstraintPriority priority,
|
||||||
gboolean check_only)
|
gboolean check_only)
|
||||||
{
|
{
|
||||||
|
gboolean retval;
|
||||||
|
int top_amount, bottom_amount, horiz_amount, vert_amount;
|
||||||
|
|
||||||
if (priority > PRIORITY_PARTIALLY_VISIBLE_ON_WORKAREA)
|
if (priority > PRIORITY_PARTIALLY_VISIBLE_ON_WORKAREA)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
@ -1058,9 +1066,8 @@ constrain_partially_onscreen (MetaWindow *window,
|
|||||||
* Then, the amount that is allowed off is just the window size minus
|
* Then, the amount that is allowed off is just the window size minus
|
||||||
* this amount.
|
* this amount.
|
||||||
*/
|
*/
|
||||||
int top_amount, bottom_amount;
|
horiz_amount = info->current.width / 4;
|
||||||
int horiz_amount = info->current.width / 4;
|
vert_amount = info->current.height / 4;
|
||||||
int vert_amount = info->current.height / 4;
|
|
||||||
horiz_amount = CLAMP (horiz_amount, 10, 75);
|
horiz_amount = CLAMP (horiz_amount, 10, 75);
|
||||||
vert_amount = CLAMP (vert_amount, 10, 75);
|
vert_amount = CLAMP (vert_amount, 10, 75);
|
||||||
horiz_amount = info->current.width - horiz_amount;
|
horiz_amount = info->current.width - horiz_amount;
|
||||||
@ -1082,7 +1089,7 @@ constrain_partially_onscreen (MetaWindow *window,
|
|||||||
horiz_amount,
|
horiz_amount,
|
||||||
top_amount,
|
top_amount,
|
||||||
bottom_amount);
|
bottom_amount);
|
||||||
gboolean retval =
|
retval =
|
||||||
do_screen_and_xinerama_relative_constraints (window,
|
do_screen_and_xinerama_relative_constraints (window,
|
||||||
info->usable_screen_region,
|
info->usable_screen_region,
|
||||||
info,
|
info,
|
||||||
|
@ -187,6 +187,7 @@ find_nearest_position (const GArray *edges,
|
|||||||
int compare;
|
int compare;
|
||||||
MetaEdge *edge;
|
MetaEdge *edge;
|
||||||
int best, best_dist, i;
|
int best, best_dist, i;
|
||||||
|
gboolean edges_align;
|
||||||
|
|
||||||
/* Initialize mid, edge, & compare in the off change that the array only
|
/* Initialize mid, edge, & compare in the off change that the array only
|
||||||
* has one element.
|
* has one element.
|
||||||
@ -223,7 +224,7 @@ find_nearest_position (const GArray *edges,
|
|||||||
/* Start the search at mid */
|
/* Start the search at mid */
|
||||||
edge = g_array_index (edges, MetaEdge*, mid);
|
edge = g_array_index (edges, MetaEdge*, mid);
|
||||||
compare = horizontal ? edge->rect.x : edge->rect.y;
|
compare = horizontal ? edge->rect.x : edge->rect.y;
|
||||||
gboolean edges_align = horizontal ?
|
edges_align = horizontal ?
|
||||||
meta_rectangle_vert_overlap (&edge->rect, new_rect) :
|
meta_rectangle_vert_overlap (&edge->rect, new_rect) :
|
||||||
meta_rectangle_horiz_overlap (&edge->rect, new_rect);
|
meta_rectangle_horiz_overlap (&edge->rect, new_rect);
|
||||||
if (edges_align &&
|
if (edges_align &&
|
||||||
@ -243,7 +244,7 @@ find_nearest_position (const GArray *edges,
|
|||||||
edge = g_array_index (edges, MetaEdge*, i);
|
edge = g_array_index (edges, MetaEdge*, i);
|
||||||
compare = horizontal ? edge->rect.x : edge->rect.y;
|
compare = horizontal ? edge->rect.x : edge->rect.y;
|
||||||
|
|
||||||
gboolean edges_align = horizontal ?
|
edges_align = horizontal ?
|
||||||
meta_rectangle_vert_overlap (&edge->rect, new_rect) :
|
meta_rectangle_vert_overlap (&edge->rect, new_rect) :
|
||||||
meta_rectangle_horiz_overlap (&edge->rect, new_rect);
|
meta_rectangle_horiz_overlap (&edge->rect, new_rect);
|
||||||
|
|
||||||
@ -267,7 +268,7 @@ find_nearest_position (const GArray *edges,
|
|||||||
edge = g_array_index (edges, MetaEdge*, i);
|
edge = g_array_index (edges, MetaEdge*, i);
|
||||||
compare = horizontal ? edge->rect.x : edge->rect.y;
|
compare = horizontal ? edge->rect.x : edge->rect.y;
|
||||||
|
|
||||||
gboolean edges_align = horizontal ?
|
edges_align = horizontal ?
|
||||||
meta_rectangle_vert_overlap (&edge->rect, new_rect) :
|
meta_rectangle_vert_overlap (&edge->rect, new_rect) :
|
||||||
meta_rectangle_horiz_overlap (&edge->rect, new_rect);
|
meta_rectangle_horiz_overlap (&edge->rect, new_rect);
|
||||||
|
|
||||||
@ -398,6 +399,8 @@ apply_edge_resistance (MetaWindow *window,
|
|||||||
/* Rest is easier to read if we split on keyboard vs. mouse op */
|
/* Rest is easier to read if we split on keyboard vs. mouse op */
|
||||||
if (keyboard_op)
|
if (keyboard_op)
|
||||||
{
|
{
|
||||||
|
int resistance, threshold;
|
||||||
|
|
||||||
/* KEYBOARD ENERGY BUILDUP RESISTANCE: If the user has is moving
|
/* KEYBOARD ENERGY BUILDUP RESISTANCE: If the user has is moving
|
||||||
* fast enough or has already built up enough "energy", then let
|
* fast enough or has already built up enough "energy", then let
|
||||||
* the user past the edge, otherwise stop at this edge. If the
|
* the user past the edge, otherwise stop at this edge. If the
|
||||||
@ -406,7 +409,7 @@ apply_edge_resistance (MetaWindow *window,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* First, determine the amount of the resistance */
|
/* First, determine the amount of the resistance */
|
||||||
int resistance = 0;
|
resistance = 0;
|
||||||
switch (edge->edge_type)
|
switch (edge->edge_type)
|
||||||
{
|
{
|
||||||
case META_EDGE_WINDOW:
|
case META_EDGE_WINDOW:
|
||||||
@ -441,7 +444,7 @@ apply_edge_resistance (MetaWindow *window,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Determine the threshold */
|
/* Determine the threshold */
|
||||||
int threshold = resistance - resistance_data->keyboard_buildup;
|
threshold = resistance - resistance_data->keyboard_buildup;
|
||||||
|
|
||||||
/* See if threshold hasn't been met yet or not */
|
/* See if threshold hasn't been met yet or not */
|
||||||
if (ABS (compare - new_pos) < threshold)
|
if (ABS (compare - new_pos) < threshold)
|
||||||
@ -466,6 +469,8 @@ apply_edge_resistance (MetaWindow *window,
|
|||||||
}
|
}
|
||||||
else /* mouse op */
|
else /* mouse op */
|
||||||
{
|
{
|
||||||
|
int threshold;
|
||||||
|
|
||||||
/* INFINITE RESISTANCE for screen edges under certain cases; If
|
/* INFINITE RESISTANCE for screen edges under certain cases; If
|
||||||
* the edge is relevant and we're moving towards it and it's a
|
* the edge is relevant and we're moving towards it and it's a
|
||||||
* screen edge and infinite resistance has been requested for
|
* screen edge and infinite resistance has been requested for
|
||||||
@ -529,7 +534,7 @@ apply_edge_resistance (MetaWindow *window,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* First, determine the threshold */
|
/* First, determine the threshold */
|
||||||
int threshold = 0;
|
threshold = 0;
|
||||||
switch (edge->edge_type)
|
switch (edge->edge_type)
|
||||||
{
|
{
|
||||||
case META_EDGE_WINDOW:
|
case META_EDGE_WINDOW:
|
||||||
@ -750,9 +755,10 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
|
|||||||
void
|
void
|
||||||
meta_display_cleanup_edges (MetaDisplay *display)
|
meta_display_cleanup_edges (MetaDisplay *display)
|
||||||
{
|
{
|
||||||
MetaEdgeResistanceData *edge_data = display->grab_edge_resistance_data;
|
|
||||||
g_assert (edge_data != NULL);
|
|
||||||
guint i,j;
|
guint i,j;
|
||||||
|
MetaEdgeResistanceData *edge_data = display->grab_edge_resistance_data;
|
||||||
|
|
||||||
|
g_assert (edge_data != NULL);
|
||||||
|
|
||||||
/* We first need to clean out any window edges */
|
/* We first need to clean out any window edges */
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
|
@ -706,11 +706,11 @@ test_clamping_to_region ()
|
|||||||
MetaRectangle rect;
|
MetaRectangle rect;
|
||||||
MetaRectangle min_size;
|
MetaRectangle min_size;
|
||||||
FixedDirections fixed_directions;
|
FixedDirections fixed_directions;
|
||||||
|
int i;
|
||||||
|
|
||||||
min_size.height = min_size.width = 1;
|
min_size.height = min_size.width = 1;
|
||||||
fixed_directions = 0;
|
fixed_directions = 0;
|
||||||
|
|
||||||
int i;
|
|
||||||
region = get_screen_region (3);
|
region = get_screen_region (3);
|
||||||
for (i = 0; i < NUM_RANDOM_RUNS; i++)
|
for (i = 0; i < NUM_RANDOM_RUNS; i++)
|
||||||
{
|
{
|
||||||
@ -817,11 +817,9 @@ test_clipping_to_region ()
|
|||||||
{
|
{
|
||||||
GList* region;
|
GList* region;
|
||||||
MetaRectangle rect, temp;
|
MetaRectangle rect, temp;
|
||||||
FixedDirections fixed_directions;
|
FixedDirections fixed_directions = 0;
|
||||||
|
|
||||||
fixed_directions = 0;
|
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
region = get_screen_region (3);
|
region = get_screen_region (3);
|
||||||
for (i = 0; i < NUM_RANDOM_RUNS; i++)
|
for (i = 0; i < NUM_RANDOM_RUNS; i++)
|
||||||
{
|
{
|
||||||
@ -881,11 +879,9 @@ test_shoving_into_region ()
|
|||||||
{
|
{
|
||||||
GList* region;
|
GList* region;
|
||||||
MetaRectangle rect, temp;
|
MetaRectangle rect, temp;
|
||||||
FixedDirections fixed_directions;
|
FixedDirections fixed_directions = 0;
|
||||||
|
|
||||||
fixed_directions = 0;
|
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
region = get_screen_region (3);
|
region = get_screen_region (3);
|
||||||
for (i = 0; i < NUM_RANDOM_RUNS; i++)
|
for (i = 0; i < NUM_RANDOM_RUNS; i++)
|
||||||
{
|
{
|
||||||
|
19
src/window.c
19
src/window.c
@ -231,6 +231,7 @@ meta_window_new_with_attrs (MetaDisplay *display,
|
|||||||
MetaWorkspace *space;
|
MetaWorkspace *space;
|
||||||
gulong existing_wm_state;
|
gulong existing_wm_state;
|
||||||
gulong event_mask;
|
gulong event_mask;
|
||||||
|
MetaMoveResizeFlags flags;
|
||||||
#define N_INITIAL_PROPS 13
|
#define N_INITIAL_PROPS 13
|
||||||
Atom initial_props[N_INITIAL_PROPS];
|
Atom initial_props[N_INITIAL_PROPS];
|
||||||
int i;
|
int i;
|
||||||
@ -698,7 +699,7 @@ meta_window_new_with_attrs (MetaDisplay *display,
|
|||||||
* passing TRUE for is_configure_request, ICCCM says
|
* passing TRUE for is_configure_request, ICCCM says
|
||||||
* initial map is handled same as configure request
|
* initial map is handled same as configure request
|
||||||
*/
|
*/
|
||||||
MetaMoveResizeFlags flags =
|
flags =
|
||||||
META_IS_CONFIGURE_REQUEST | META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION;
|
META_IS_CONFIGURE_REQUEST | META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION;
|
||||||
meta_window_move_resize_internal (window,
|
meta_window_move_resize_internal (window,
|
||||||
flags,
|
flags,
|
||||||
@ -862,6 +863,7 @@ meta_window_apply_session_info (MetaWindow *window,
|
|||||||
if (info->geometry_set)
|
if (info->geometry_set)
|
||||||
{
|
{
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
|
MetaMoveResizeFlags flags;
|
||||||
|
|
||||||
window->placed = TRUE; /* don't do placement algorithms later */
|
window->placed = TRUE; /* don't do placement algorithms later */
|
||||||
|
|
||||||
@ -880,8 +882,7 @@ meta_window_apply_session_info (MetaWindow *window,
|
|||||||
"Restoring pos %d,%d size %d x %d for %s\n",
|
"Restoring pos %d,%d size %d x %d for %s\n",
|
||||||
x, y, w, h, window->desc);
|
x, y, w, h, window->desc);
|
||||||
|
|
||||||
MetaMoveResizeFlags flags =
|
flags = META_DO_GRAVITY_ADJUST | META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION;
|
||||||
META_DO_GRAVITY_ADJUST | META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION;
|
|
||||||
meta_window_move_resize_internal (window,
|
meta_window_move_resize_internal (window,
|
||||||
flags,
|
flags,
|
||||||
window->size_hints.win_gravity,
|
window->size_hints.win_gravity,
|
||||||
@ -2989,11 +2990,11 @@ meta_window_resize (MetaWindow *window,
|
|||||||
int h)
|
int h)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
|
MetaMoveResizeFlags flags;
|
||||||
|
|
||||||
meta_window_get_position (window, &x, &y);
|
meta_window_get_position (window, &x, &y);
|
||||||
|
|
||||||
MetaMoveResizeFlags flags =
|
flags = (user_op ? META_IS_USER_ACTION : 0) | META_IS_RESIZE_ACTION;
|
||||||
(user_op ? META_IS_USER_ACTION : 0) | META_IS_RESIZE_ACTION;
|
|
||||||
meta_window_move_resize_internal (window,
|
meta_window_move_resize_internal (window,
|
||||||
flags,
|
flags,
|
||||||
NorthWestGravity,
|
NorthWestGravity,
|
||||||
@ -3042,11 +3043,11 @@ meta_window_resize_with_gravity (MetaWindow *window,
|
|||||||
int gravity)
|
int gravity)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
|
MetaMoveResizeFlags flags;
|
||||||
|
|
||||||
meta_window_get_position (window, &x, &y);
|
meta_window_get_position (window, &x, &y);
|
||||||
|
|
||||||
MetaMoveResizeFlags flags =
|
flags = (user_op ? META_IS_USER_ACTION : 0) | META_IS_RESIZE_ACTION;
|
||||||
(user_op ? META_IS_USER_ACTION : 0) | META_IS_RESIZE_ACTION;
|
|
||||||
meta_window_move_resize_internal (window,
|
meta_window_move_resize_internal (window,
|
||||||
flags,
|
flags,
|
||||||
gravity,
|
gravity,
|
||||||
@ -3916,6 +3917,7 @@ meta_window_configure_request (MetaWindow *window,
|
|||||||
gboolean only_resize;
|
gboolean only_resize;
|
||||||
gboolean allow_position_change;
|
gboolean allow_position_change;
|
||||||
gboolean in_grab_op;
|
gboolean in_grab_op;
|
||||||
|
MetaMoveResizeFlags flags;
|
||||||
|
|
||||||
/* We ignore configure requests while the user is moving/resizing
|
/* We ignore configure requests while the user is moving/resizing
|
||||||
* the window, since these represent the app sucking and fighting
|
* the window, since these represent the app sucking and fighting
|
||||||
@ -4055,8 +4057,7 @@ meta_window_configure_request (MetaWindow *window,
|
|||||||
* have a different setup for meta_window_move_resize_internal()...
|
* have a different setup for meta_window_move_resize_internal()...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
MetaMoveResizeFlags flags =
|
flags = META_IS_CONFIGURE_REQUEST;
|
||||||
META_IS_CONFIGURE_REQUEST;
|
|
||||||
if (event->xconfigurerequest.value_mask & (CWX | CWY))
|
if (event->xconfigurerequest.value_mask & (CWX | CWY))
|
||||||
flags |= META_IS_MOVE_ACTION;
|
flags |= META_IS_MOVE_ACTION;
|
||||||
if (event->xconfigurerequest.value_mask & (CWWidth | CWHeight))
|
if (event->xconfigurerequest.value_mask & (CWWidth | CWHeight))
|
||||||
|
Loading…
Reference in New Issue
Block a user