mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 15:40:41 -05:00
Be more strict about what is considered a valid region with partial
2006-01-09 Elijah Newren <newren@gmail.com> Be more strict about what is considered a valid region with partial struts. Fixes #322070. * src/boxes.[ch]: (meta_rectangle_expand_region_conditionally): new function behaving like meta_rectangle_expand_region() but which only does so when the width and height of the rectangles meet a certain threshold (replace_rect_with_list): Remove a compiling warning * src/constraints.c: (constrain_partially_onscreen): provide minimum thresholds in each direction for the size of the rectangles to avoid cases where only a single pixel thick layer of a window might be showing
This commit is contained in:
parent
ee54debd6a
commit
d884f9ce8a
20
ChangeLog
20
ChangeLog
@ -1,3 +1,23 @@
|
||||
2006-01-09 Elijah Newren <newren@gmail.com>
|
||||
|
||||
Be more strict about what is considered a valid region with
|
||||
partial struts. Fixes #322070.
|
||||
|
||||
* src/boxes.[ch]:
|
||||
(meta_rectangle_expand_region_conditionally):
|
||||
new function behaving like meta_rectangle_expand_region() but
|
||||
which only does so when the width and height of the rectangles
|
||||
meet a certain threshold
|
||||
|
||||
(replace_rect_with_list):
|
||||
Remove a compiling warning
|
||||
|
||||
* src/constraints.c:
|
||||
(constrain_partially_onscreen):
|
||||
provide minimum thresholds in each direction for the size of the
|
||||
rectangles to avoid cases where only a single pixel thick layer of
|
||||
a window might be showing
|
||||
|
||||
2006-01-09 Elijah Newren <newren@gmail.com>
|
||||
|
||||
* src/bell.c (meta_bell_notify_frame_destroy): Use the right
|
||||
|
36
src/boxes.c
36
src/boxes.c
@ -622,15 +622,38 @@ meta_rectangle_expand_region (GList *region,
|
||||
const int top_expand,
|
||||
const int bottom_expand)
|
||||
{
|
||||
/* Now it's time to do the directional expansion */
|
||||
return meta_rectangle_expand_region_conditionally (region,
|
||||
left_expand,
|
||||
right_expand,
|
||||
top_expand,
|
||||
bottom_expand,
|
||||
0,
|
||||
0);
|
||||
}
|
||||
|
||||
GList*
|
||||
meta_rectangle_expand_region_conditionally (GList *region,
|
||||
const int left_expand,
|
||||
const int right_expand,
|
||||
const int top_expand,
|
||||
const int bottom_expand,
|
||||
const int min_x,
|
||||
const int min_y)
|
||||
{
|
||||
GList *tmp_list = region;
|
||||
while (tmp_list)
|
||||
{
|
||||
MetaRectangle *rect = (MetaRectangle*) tmp_list->data;
|
||||
rect->x -= left_expand;
|
||||
rect->width += (left_expand + right_expand);
|
||||
rect->y -= top_expand;
|
||||
rect->height += (top_expand + bottom_expand);
|
||||
if (rect->width >= min_x)
|
||||
{
|
||||
rect->x -= left_expand;
|
||||
rect->width += (left_expand + right_expand);
|
||||
}
|
||||
if (rect->height >= min_y)
|
||||
{
|
||||
rect->y -= top_expand;
|
||||
rect->height += (top_expand + bottom_expand);
|
||||
}
|
||||
tmp_list = tmp_list->next;
|
||||
}
|
||||
|
||||
@ -1091,8 +1114,7 @@ replace_rect_with_list (GList *old_element,
|
||||
if (!new_list)
|
||||
{
|
||||
/* If there is no new list, just remove the old_element */
|
||||
ret = old_element->next;
|
||||
g_list_remove_link (old_element, old_element);
|
||||
ret = g_list_remove_link (old_element, old_element);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
12
src/boxes.h
12
src/boxes.h
@ -146,11 +146,23 @@ GList* meta_rectangle_get_minimal_spanning_set_for_region (
|
||||
const MetaRectangle *basic_rect,
|
||||
const GSList *all_struts);
|
||||
|
||||
/* Expand all rectangles in region by the given amount on each side */
|
||||
GList* meta_rectangle_expand_region (GList *region,
|
||||
const int left_expand,
|
||||
const int right_expand,
|
||||
const int top_expand,
|
||||
const int bottom_expand);
|
||||
/* Same as for meta_rectangle_expand_region except that rectangles not at
|
||||
* least min_x or min_y in size are not expanded in that direction
|
||||
*/
|
||||
GList* meta_rectangle_expand_region_conditionally (
|
||||
GList *region,
|
||||
const int left_expand,
|
||||
const int right_expand,
|
||||
const int top_expand,
|
||||
const int bottom_expand,
|
||||
const int min_x,
|
||||
const int min_y);
|
||||
|
||||
/* Free the list created by
|
||||
* meta_rectangle_get_minimal_spanning_set_for_region()
|
||||
|
@ -1046,7 +1046,9 @@ constrain_partially_onscreen (MetaWindow *window,
|
||||
gboolean check_only)
|
||||
{
|
||||
gboolean retval;
|
||||
int top_amount, bottom_amount, horiz_amount, vert_amount;
|
||||
int top_amount, bottom_amount;
|
||||
int horiz_amount_offscreen, vert_amount_offscreen;
|
||||
int horiz_amount_onscreen, vert_amount_onscreen;
|
||||
|
||||
if (priority > PRIORITY_PARTIALLY_VISIBLE_ON_WORKAREA)
|
||||
return TRUE;
|
||||
@ -1066,39 +1068,46 @@ constrain_partially_onscreen (MetaWindow *window,
|
||||
* Then, the amount that is allowed off is just the window size minus
|
||||
* this amount.
|
||||
*/
|
||||
horiz_amount = info->current.width / 4;
|
||||
vert_amount = info->current.height / 4;
|
||||
horiz_amount = CLAMP (horiz_amount, 10, 75);
|
||||
vert_amount = CLAMP (vert_amount, 10, 75);
|
||||
horiz_amount = info->current.width - horiz_amount;
|
||||
vert_amount = info->current.height - vert_amount;
|
||||
top_amount = vert_amount;
|
||||
horiz_amount_onscreen = info->current.width / 4;
|
||||
vert_amount_onscreen = info->current.height / 4;
|
||||
horiz_amount_onscreen = CLAMP (horiz_amount_onscreen, 10, 75);
|
||||
vert_amount_onscreen = CLAMP (vert_amount_onscreen, 10, 75);
|
||||
horiz_amount_offscreen = info->current.width - horiz_amount_onscreen;
|
||||
vert_amount_offscreen = info->current.height - vert_amount_onscreen;
|
||||
top_amount = vert_amount_offscreen;
|
||||
/* Allow the titlebar to touch the bottom panel; If there is no titlebar,
|
||||
* require vert_amount to remain on the screen.
|
||||
*/
|
||||
if (window->frame)
|
||||
bottom_amount = info->current.height + info->fgeom->bottom_height;
|
||||
{
|
||||
bottom_amount = info->current.height + info->fgeom->bottom_height;
|
||||
vert_amount_onscreen = info->fgeom->top_height;
|
||||
}
|
||||
else
|
||||
bottom_amount = vert_amount;
|
||||
bottom_amount = vert_amount_offscreen;
|
||||
|
||||
/* Extend the region, have a helper function handle the constraint,
|
||||
* then return the region to its original size.
|
||||
*/
|
||||
meta_rectangle_expand_region (info->usable_screen_region,
|
||||
horiz_amount,
|
||||
horiz_amount,
|
||||
top_amount,
|
||||
bottom_amount);
|
||||
meta_rectangle_expand_region_conditionally (info->usable_screen_region,
|
||||
horiz_amount_offscreen,
|
||||
horiz_amount_offscreen,
|
||||
top_amount,
|
||||
bottom_amount,
|
||||
horiz_amount_onscreen,
|
||||
vert_amount_onscreen);
|
||||
retval =
|
||||
do_screen_and_xinerama_relative_constraints (window,
|
||||
info->usable_screen_region,
|
||||
info,
|
||||
check_only);
|
||||
meta_rectangle_expand_region (info->usable_screen_region,
|
||||
-horiz_amount,
|
||||
-horiz_amount,
|
||||
-top_amount,
|
||||
-bottom_amount);
|
||||
meta_rectangle_expand_region_conditionally (info->usable_screen_region,
|
||||
-horiz_amount_offscreen,
|
||||
-horiz_amount_offscreen,
|
||||
-top_amount,
|
||||
-bottom_amount,
|
||||
horiz_amount_onscreen,
|
||||
vert_amount_onscreen);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user