window: Add meta_window_get_client_area_rect

This commit is contained in:
Jasper St. Pierre 2014-02-26 19:33:43 -05:00
parent 682d6f9ee2
commit ad43cbd70b
3 changed files with 35 additions and 10 deletions

View File

@ -2084,21 +2084,12 @@ static void
check_needs_reshape (MetaWindowActor *self) check_needs_reshape (MetaWindowActor *self)
{ {
MetaWindowActorPrivate *priv = self->priv; MetaWindowActorPrivate *priv = self->priv;
MetaFrameBorders borders;
cairo_rectangle_int_t client_area; cairo_rectangle_int_t client_area;
if (!priv->needs_reshape) if (!priv->needs_reshape)
return; return;
meta_frame_calc_borders (priv->window->frame, &borders); meta_window_get_client_area_rect (window, &client_area);
client_area.x = borders.total.left;
client_area.y = borders.total.top;
client_area.width = priv->window->rect.width;
if (priv->window->shaded)
client_area.height = 0;
else
client_area.height = priv->window->rect.height;
meta_window_actor_update_shape_region (self, &client_area); meta_window_actor_update_shape_region (self, &client_area);
meta_window_actor_update_input_region (self, &client_area); meta_window_actor_update_input_region (self, &client_area);

View File

@ -698,4 +698,7 @@ void meta_window_set_opacity (MetaWindow *window,
Window meta_window_get_toplevel_xwindow (MetaWindow *window); Window meta_window_get_toplevel_xwindow (MetaWindow *window);
void meta_window_get_client_area_rect (const MetaWindow *window,
cairo_rectangle_int_t *rect);
#endif #endif

View File

@ -5832,6 +5832,37 @@ meta_window_get_outer_rect (const MetaWindow *window,
meta_window_get_frame_rect (window, rect); meta_window_get_frame_rect (window, rect);
} }
/**
* meta_window_get_client_area_rect:
* @window: a #MetaWindow
* @rect: (out): pointer to a cairo rectangle
*
* Gets the rectangle for the boundaries of the client area, relative
* to the frame. If the window is shaded, the height of the rectangle
* is 0.
*/
void
meta_window_get_client_area_rect (const MetaWindow *window,
cairo_rectangle_int_t *rect)
{
if (window->frame)
{
rect->x = window->frame->child_x;
rect->y = window->frame->child_y;
}
else
{
rect->x = 0;
rect->y = 0;
}
rect->width = window->rect.width;
if (window->shaded)
rect->height = window->rect.height;
else
rect->height = 0;
}
const char* const char*
meta_window_get_startup_id (MetaWindow *window) meta_window_get_startup_id (MetaWindow *window)
{ {