diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/constraints.c | 105 | ||||
| -rw-r--r-- | src/core/constraints.h | 2 | ||||
| -rw-r--r-- | src/core/display.c | 21 | ||||
| -rw-r--r-- | src/core/frame-private.h | 29 | ||||
| -rw-r--r-- | src/core/frame.c | 20 | ||||
| -rw-r--r-- | src/core/place.c | 136 | ||||
| -rw-r--r-- | src/core/place.h | 12 | ||||
| -rw-r--r-- | src/core/window.c | 69 | ||||
| -rw-r--r-- | src/include/common.h | 12 | ||||
| -rw-r--r-- | src/include/ui.h | 18 | ||||
| -rw-r--r-- | src/ui/frames.c | 35 | ||||
| -rw-r--r-- | src/ui/frames.h | 7 | ||||
| -rw-r--r-- | src/ui/preview-widget.c | 47 | ||||
| -rw-r--r-- | src/ui/preview-widget.h | 6 | ||||
| -rw-r--r-- | src/ui/theme-viewer.c | 11 | ||||
| -rw-r--r-- | src/ui/theme.c | 83 | ||||
| -rw-r--r-- | src/ui/theme.h | 10 | ||||
| -rw-r--r-- | src/ui/ui.c | 30 | 
18 files changed, 295 insertions, 358 deletions
| diff --git a/src/core/constraints.c b/src/core/constraints.c index 2c56c780..1eaed498 100644 --- a/src/core/constraints.c +++ b/src/core/constraints.c @@ -117,7 +117,7 @@ typedef struct  {    MetaRectangle        orig;    MetaRectangle        current; -  MetaFrameGeometry   *fgeom; +  MetaFrameBorders    *borders;    ActionType           action_type;    gboolean             is_user_action; @@ -189,7 +189,7 @@ static gboolean constrain_partially_onscreen (MetaWindow         *window,  static void setup_constraint_info        (ConstraintInfo      *info,                                            MetaWindow          *window, -                                          MetaFrameGeometry   *orig_fgeom, +                                          MetaFrameBorders    *orig_borders,                                            MetaMoveResizeFlags  flags,                                            int                  resize_gravity,                                            const MetaRectangle *orig, @@ -200,12 +200,12 @@ static void update_onscreen_requirements (MetaWindow     *window,                                            ConstraintInfo *info);  static void extend_by_frame              (MetaWindow              *window,                                            MetaRectangle           *rect, -                                          const MetaFrameGeometry *fgeom); +                                          const MetaFrameBorders  *borders);  static void unextend_by_frame            (MetaWindow              *window,                                            MetaRectangle           *rect, -                                          const MetaFrameGeometry *fgeom); +                                          const MetaFrameBorders  *borders);  static inline void get_size_limits       (const MetaWindow        *window, -                                          const MetaFrameGeometry *fgeom, +                                          const MetaFrameBorders  *borders,                                            gboolean include_frame,                                            MetaRectangle *min_size,                                            MetaRectangle *max_size); @@ -281,7 +281,7 @@ do_all_constraints (MetaWindow         *window,  void  meta_window_constrain (MetaWindow          *window, -                       MetaFrameGeometry   *orig_fgeom, +                       MetaFrameBorders    *orig_borders,                         MetaMoveResizeFlags  flags,                         int                  resize_gravity,                         const MetaRectangle *orig, @@ -304,7 +304,7 @@ meta_window_constrain (MetaWindow          *window,    setup_constraint_info (&info,                           window, -                         orig_fgeom, +                         orig_borders,                           flags,                           resize_gravity,                           orig, @@ -339,14 +339,14 @@ meta_window_constrain (MetaWindow          *window,     * not gobject-style--gobject would be more pain than it's worth) or     * smart pointers would be so much nicer here.  *shrug*     */ -  if (!orig_fgeom) -    g_free (info.fgeom); +  if (!orig_borders) +    g_free (info.borders);  }  static void  setup_constraint_info (ConstraintInfo      *info,                         MetaWindow          *window, -                       MetaFrameGeometry   *orig_fgeom, +                       MetaFrameBorders    *orig_borders,                         MetaMoveResizeFlags  flags,                         int                  resize_gravity,                         const MetaRectangle *orig, @@ -359,10 +359,10 @@ setup_constraint_info (ConstraintInfo      *info,    info->current = *new;    /* Create a fake frame geometry if none really exists */ -  if (orig_fgeom && !window->fullscreen) -    info->fgeom = orig_fgeom; +  if (orig_borders && !window->fullscreen) +    info->borders = orig_borders;    else -    info->fgeom = g_new0 (MetaFrameGeometry, 1); +    info->borders = g_new0 (MetaFrameBorders, 1);    if (flags & META_IS_MOVE_ACTION && flags & META_IS_RESIZE_ACTION)      info->action_type = ACTION_MOVE_AND_RESIZE; @@ -469,7 +469,6 @@ setup_constraint_info (ConstraintInfo      *info,                "Setting up constraint info:\n"                "  orig: %d,%d +%d,%d\n"                "  new : %d,%d +%d,%d\n" -              "  fgeom: %d,%d,%d,%d\n"                "  action_type     : %s\n"                "  is_user_action  : %s\n"                "  resize_gravity  : %s\n" @@ -479,8 +478,6 @@ setup_constraint_info (ConstraintInfo      *info,                info->orig.x, info->orig.y, info->orig.width, info->orig.height,                info->current.x, info->current.y,                  info->current.width, info->current.height, -              info->fgeom->left_width, info->fgeom->right_width, -                info->fgeom->top_height, info->fgeom->bottom_height,                (info->action_type == ACTION_MOVE) ? "Move" :                  (info->action_type == ACTION_RESIZE) ? "Resize" :                  (info->action_type == ACTION_MOVE_AND_RESIZE) ? "Move&Resize" : @@ -521,7 +518,7 @@ place_window_if_needed(MetaWindow     *window,        MetaWorkspace *cur_workspace;        const MetaXineramaScreenInfo *xinerama_info; -      meta_window_place (window, info->fgeom, info->orig.x, info->orig.y, +      meta_window_place (window, info->borders, info->orig.x, info->orig.y,                           &placed_rect.x, &placed_rect.y);        did_placement = TRUE; @@ -581,7 +578,7 @@ place_window_if_needed(MetaWindow     *window,            /* maximization may have changed frame geometry */            if (window->frame && !window->fullscreen) -            meta_frame_calc_geometry (window->frame, info->fgeom); +            meta_frame_calc_borders (window->frame, info->borders);            if (window->fullscreen_after_placement)              { @@ -639,7 +636,7 @@ update_onscreen_requirements (MetaWindow     *window,    /* The require onscreen/on-single-xinerama and titlebar_visible     * stuff is relative to the outer window, not the inner     */ -  extend_by_frame (window, &info->current, info->fgeom); +  extend_by_frame (window, &info->current, info->borders);    /* Update whether we want future constraint runs to require the     * window to be on fully onscreen. @@ -675,7 +672,7 @@ update_onscreen_requirements (MetaWindow     *window,        MetaRectangle titlebar_rect;        titlebar_rect = info->current; -      titlebar_rect.height = info->fgeom->top_height; +      titlebar_rect.height = info->borders->visible.top;        old = window->require_titlebar_visible;        window->require_titlebar_visible =          meta_rectangle_overlaps_with_region (info->usable_screen_region, @@ -688,20 +685,20 @@ update_onscreen_requirements (MetaWindow     *window,      }    /* Don't forget to restore the position of the window */ -  unextend_by_frame (window, &info->current, info->fgeom); +  unextend_by_frame (window, &info->current, info->borders);  }  static void  extend_by_frame (MetaWindow             *window,                   MetaRectangle          *rect, -                 const MetaFrameGeometry *fgeom) +                 const MetaFrameBorders *borders)  {    if (window->frame)      { -      rect->x -= fgeom->left_width; -      rect->y -= fgeom->top_height; -      rect->width  += fgeom->left_width + fgeom->right_width; -      rect->height += fgeom->top_height + fgeom->bottom_height; +      rect->x -= borders->visible.left; +      rect->y -= borders->visible.top; +      rect->width  += borders->visible.left + borders->visible.right; +      rect->height += borders->visible.top + borders->visible.bottom;      }    else      { @@ -715,14 +712,14 @@ extend_by_frame (MetaWindow             *window,  static void  unextend_by_frame (MetaWindow             *window,                     MetaRectangle          *rect, -                   const MetaFrameGeometry *fgeom) +                   const MetaFrameBorders *borders)  {    if (window->frame)      { -      rect->x += fgeom->left_width; -      rect->y += fgeom->top_height; -      rect->width  -= fgeom->left_width + fgeom->right_width; -      rect->height -= fgeom->top_height + fgeom->bottom_height; +      rect->x += borders->visible.left; +      rect->y += borders->visible.top; +      rect->width  -= borders->visible.left + borders->visible.right; +      rect->height -= borders->visible.top + borders->visible.bottom;      }    else      { @@ -735,7 +732,7 @@ unextend_by_frame (MetaWindow             *window,  static inline void  get_size_limits (const MetaWindow        *window, -                 const MetaFrameGeometry *fgeom, +                 const MetaFrameBorders *borders,                   gboolean                 include_frame,                   MetaRectangle *min_size,                   MetaRectangle *max_size) @@ -755,8 +752,8 @@ get_size_limits (const MetaWindow        *window,        if (window->frame)          { -          fw = fgeom->left_width + fgeom->right_width; -          fh = fgeom->top_height + fgeom->bottom_height; +          fw = borders->visible.left + borders->visible.right; +          fh = borders->visible.top + borders->visible.bottom;            min_size->width += fw;            min_size->height += fh; @@ -807,18 +804,18 @@ constrain_modal_dialog (MetaWindow         *window,    y = 0;    if (parent->frame)      { -      MetaFrameGeometry fgeom; +      MetaFrameBorders borders;        x += parent->frame->rect.x;        y += parent->frame->rect.y; -      meta_frame_calc_geometry (parent->frame, &fgeom); -      y += fgeom.top_height; +      meta_frame_calc_borders (parent->frame, &borders); +      y += borders.visible.top; -      y += info->fgeom->top_height; +      y += info->borders->visible.top;     }    else -    y = parent->rect.y + info->fgeom->top_height; +    y = parent->rect.y + info->borders->visible.top;    constraint_already_satisfied = (x == info->current.x) && (y == info->current.y); @@ -874,19 +871,19 @@ constrain_maximization (MetaWindow         *window,        active_workspace_struts = window->screen->active_workspace->all_struts;        target_size = info->current; -      extend_by_frame (window, &target_size, info->fgeom); +      extend_by_frame (window, &target_size, info->borders);        meta_rectangle_expand_to_avoiding_struts (&target_size,                                                  &info->entire_xinerama,                                                  direction,                                                  active_workspace_struts);     }    /* Now make target_size = maximized size of client window */ -  unextend_by_frame (window, &target_size, info->fgeom); +  unextend_by_frame (window, &target_size, info->borders);    /* Check min size constraints; max size constraints are ignored for maximized     * windows, as per bug 327543.     */ -  get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size); +  get_size_limits (window, info->borders, FALSE, &min_size, &max_size);    hminbad = target_size.width < min_size.width && window->maximized_horizontally;    vminbad = target_size.height < min_size.height && window->maximized_vertically;    if (hminbad || vminbad) @@ -942,12 +939,12 @@ constrain_tiling (MetaWindow         *window,     * use an external function for the actual calculation     */    meta_window_get_current_tile_area (window, &target_size); -  unextend_by_frame (window, &target_size, info->fgeom); +  unextend_by_frame (window, &target_size, info->borders);    /* Check min size constraints; max size constraints are ignored as for     * maximized windows.     */ -  get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size); +  get_size_limits (window, info->borders, FALSE, &min_size, &max_size);    hminbad = target_size.width < min_size.width;    vminbad = target_size.height < min_size.height;    if (hminbad || vminbad) @@ -1095,7 +1092,7 @@ constrain_fullscreen (MetaWindow         *window,    xinerama = info->entire_xinerama; -  get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size); +  get_size_limits (window, info->borders, FALSE, &min_size, &max_size);    too_big =   !meta_rectangle_could_fit_rect (&xinerama, &min_size);    too_small = !meta_rectangle_could_fit_rect (&max_size, &xinerama);    if (too_big || too_small) @@ -1203,7 +1200,7 @@ constrain_size_limits (MetaWindow         *window,      return TRUE;    /* Determine whether constraint is already satisfied; exit if it is */ -  get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size); +  get_size_limits (window, info->borders, FALSE, &min_size, &max_size);    /* We ignore max-size limits for maximized windows; see #327543 */    if (window->maximized_horizontally)      max_size.width = MAX (max_size.width, info->current.width); @@ -1394,8 +1391,8 @@ do_screen_and_xinerama_relative_constraints (    /* Determine whether constraint applies; exit if it doesn't */    how_far_it_can_be_smushed = info->current; -  get_size_limits (window, info->fgeom, TRUE, &min_size, &max_size); -  extend_by_frame (window, &info->current, info->fgeom); +  get_size_limits (window, info->borders, TRUE, &min_size, &max_size); +  extend_by_frame (window, &info->current, info->borders);    if (info->action_type != ACTION_MOVE)      { @@ -1415,7 +1412,7 @@ do_screen_and_xinerama_relative_constraints (                                          &info->current);    if (exit_early || constraint_satisfied || check_only)      { -      unextend_by_frame (window, &info->current, info->fgeom); +      unextend_by_frame (window, &info->current, info->borders);        return constraint_satisfied;      } @@ -1439,7 +1436,7 @@ do_screen_and_xinerama_relative_constraints (                                        info->fixed_directions,                                        &info->current); -  unextend_by_frame (window, &info->current, info->fgeom); +  unextend_by_frame (window, &info->current, info->borders);    return TRUE;  } @@ -1551,8 +1548,8 @@ constrain_titlebar_visible (MetaWindow         *window,     */    if (window->frame)      { -      bottom_amount = info->current.height + info->fgeom->bottom_height; -      vert_amount_onscreen = info->fgeom->top_height; +      bottom_amount = info->current.height + info->borders->visible.bottom; +      vert_amount_onscreen = info->borders->visible.top;      }    else      bottom_amount = vert_amount_offscreen; @@ -1626,8 +1623,8 @@ constrain_partially_onscreen (MetaWindow         *window,     */    if (window->frame)      { -      bottom_amount = info->current.height + info->fgeom->bottom_height; -      vert_amount_onscreen = info->fgeom->top_height; +      bottom_amount = info->current.height + info->borders->visible.bottom; +      vert_amount_onscreen = info->borders->visible.top;      }    else      bottom_amount = vert_amount_offscreen; diff --git a/src/core/constraints.h b/src/core/constraints.h index dfe9122c..9e72d9d8 100644 --- a/src/core/constraints.h +++ b/src/core/constraints.h @@ -39,7 +39,7 @@ typedef enum  } MetaMoveResizeFlags;  void meta_window_constrain (MetaWindow          *window, -                            MetaFrameGeometry   *orig_fgeom, +                            MetaFrameBorders    *orig_borders,                              MetaMoveResizeFlags  flags,                              int                  resize_gravity,                              const MetaRectangle *orig, diff --git a/src/core/display.c b/src/core/display.c index 216688ec..e25300d0 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -4470,11 +4470,7 @@ process_request_frame_extents (MetaDisplay    *display,                                           &hints);    if ((hints_set && hints->decorations) || !hints_set)      { -      int top = 0; -      int bottom = 0; -      int left = 0; -      int right = 0; - +      MetaFrameBorders borders;        MetaScreen *screen;        screen = meta_display_screen_for_xwindow (display, @@ -4492,15 +4488,12 @@ process_request_frame_extents (MetaDisplay    *display,        meta_ui_theme_get_frame_borders (screen->ui,                                         META_FRAME_TYPE_NORMAL,                                         0, -                                       &top, -                                       &bottom, -                                       &left, -                                       &right); - -      data[0] = left; -      data[1] = right; -      data[2] = top; -      data[3] = bottom; +                                       &borders); + +      data[0] = borders.visible.left; +      data[1] = borders.visible.right; +      data[2] = borders.visible.top; +      data[3] = borders.visible.bottom;      }    meta_topic (META_DEBUG_GEOMETRY, diff --git a/src/core/frame-private.h b/src/core/frame-private.h index 24ec3cc1..a5c01995 100644 --- a/src/core/frame-private.h +++ b/src/core/frame-private.h @@ -27,17 +27,6 @@  #include "frame.h"  #include "window-private.h" -typedef struct _MetaFrameGeometry MetaFrameGeometry; - -struct _MetaFrameGeometry -{ -  /* border sizes (space between frame and child) */ -  int left_width; -  int right_width; -  int top_height; -  int bottom_height; -}; -  struct _MetaFrame  {    /* window we frame */ @@ -71,15 +60,15 @@ void     meta_frame_queue_draw              (MetaFrame  *frame);  MetaFrameFlags meta_frame_get_flags (MetaFrame *frame);  /* These should ONLY be called from meta_window_move_resize_internal */ -void meta_frame_calc_geometry      (MetaFrame         *frame, -                                    MetaFrameGeometry *geomp); -void meta_frame_sync_to_window     (MetaFrame         *frame, -                                    int                gravity, -                                    gboolean           need_move, -                                    gboolean           need_resize); - -void meta_frame_set_screen_cursor (MetaFrame	*frame, -				   MetaCursor	cursor); +void meta_frame_calc_borders      (MetaFrame        *frame, +                                   MetaFrameBorders *borders); +void meta_frame_sync_to_window    (MetaFrame        *frame, +                                   int               gravity, +                                   gboolean          need_move, +                                   gboolean          need_resize); + +void meta_frame_set_screen_cursor (MetaFrame        *frame, +                                   MetaCursor        cursor);  #endif diff --git a/src/core/frame.c b/src/core/frame.c index d47be374..f2405922 100644 --- a/src/core/frame.c +++ b/src/core/frame.c @@ -295,22 +295,12 @@ meta_frame_get_flags (MetaFrame *frame)  }  void -meta_frame_calc_geometry (MetaFrame         *frame, -                          MetaFrameGeometry *geomp) +meta_frame_calc_borders (MetaFrame        *frame, +                         MetaFrameBorders *borders)  { -  MetaFrameGeometry geom; -  MetaWindow *window; - -  window = frame->window; - -  meta_ui_get_frame_geometry (window->screen->ui, -                              frame->xwindow, -                              &geom.top_height, -                              &geom.bottom_height, -                              &geom.left_width, -                              &geom.right_width); - -  *geomp = geom; +  meta_ui_get_frame_borders (frame->window->screen->ui, +                             frame->xwindow, +                             borders);  }  static void diff --git a/src/core/place.c b/src/core/place.c index bcfafe42..b3fa6569 100644 --- a/src/core/place.c +++ b/src/core/place.c @@ -88,8 +88,8 @@ northwestcmp (gconstpointer a, gconstpointer b)  }  static gboolean -place_by_pointer(MetaWindow *window, -                 MetaFrameGeometry *fgeom, +place_by_pointer(MetaWindow       *window, +                 MetaFrameBorders *borders,                   MetaPlacementMode placement_mode,                   int *new_x,                   int *new_y) @@ -113,9 +113,9 @@ place_by_pointer(MetaWindow *window,    window_width = window->frame ? window->frame->rect.width : window->rect.width;    window_height = window->frame ? window->frame->rect.height : window->rect.height; -  if (fgeom) { -    *new_x = root_x_return + fgeom->left_width - window_width / 2; -    *new_y = root_y_return + fgeom->top_height - window_height / 2; +  if (borders) { +    *new_x = root_x_return + borders->visible.left - window_width / 2; +    *new_y = root_y_return + borders->visible.top - window_height / 2;    }    else {      *new_x = root_x_return - window_width / 2; @@ -129,14 +129,14 @@ place_by_pointer(MetaWindow *window,  }  static void -find_next_cascade (MetaWindow *window, -                   MetaFrameGeometry *fgeom, +find_next_cascade (MetaWindow       *window, +                   MetaFrameBorders *borders,                     /* visible windows on relevant workspaces */ -                   GList      *windows, -                   int         x, -                   int         y, -                   int        *new_x, -                   int        *new_y) +                   GList            *windows, +                   int               x, +                   int               y, +                   int              *new_x, +                   int              *new_y)  {    GList *tmp;    GList *sorted; @@ -160,10 +160,10 @@ find_next_cascade (MetaWindow *window,     * manually cascade.     */  #define CASCADE_FUZZ 15 -  if (fgeom) +  if (borders)      { -      x_threshold = MAX (fgeom->left_width, CASCADE_FUZZ); -      y_threshold = MAX (fgeom->top_height, CASCADE_FUZZ); +      x_threshold = MAX (borders->visible.left, CASCADE_FUZZ); +      y_threshold = MAX (borders->visible.top, CASCADE_FUZZ);      }    else      { @@ -264,27 +264,27 @@ find_next_cascade (MetaWindow *window,    g_list_free (sorted);    /* Convert coords to position of window, not position of frame. */ -  if (fgeom == NULL) +  if (borders == NULL)      {        *new_x = cascade_x;        *new_y = cascade_y;      }    else      { -      *new_x = cascade_x + fgeom->left_width; -      *new_y = cascade_y + fgeom->top_height; +      *new_x = cascade_x + borders->visible.left; +      *new_y = cascade_y + borders->visible.top;      }  }  static void -find_most_freespace (MetaWindow *window, -                     MetaFrameGeometry *fgeom, +find_most_freespace (MetaWindow       *window, +                     MetaFrameBorders *borders,                       /* visible windows on relevant workspaces */ -                     MetaWindow *focus_window, -                     int         x, -                     int         y, -                     int        *new_x, -                     int        *new_y) +                     MetaWindow       *focus_window, +                     int               x, +                     int               y, +                     int              *new_x, +                     int              *new_y)  {    MetaWindowDirection side;    int max_area; @@ -295,8 +295,8 @@ find_most_freespace (MetaWindow *window,    MetaRectangle avoid;    MetaRectangle outer; -  frame_size_left = fgeom ? fgeom->left_width : 0; -  frame_size_top  = fgeom ? fgeom->top_height : 0; +  frame_size_left = borders ? borders->visible.left : 0; +  frame_size_top  = borders ? borders->visible.top : 0;    meta_window_get_work_area_current_xinerama (focus_window, &work_area);    meta_window_get_outer_rect (focus_window, &avoid); @@ -375,10 +375,10 @@ find_most_freespace (MetaWindow *window,  }  static void -avoid_being_obscured_as_second_modal_dialog (MetaWindow *window, -                                             MetaFrameGeometry *fgeom, -                                             int        *x, -                                             int        *y) +avoid_being_obscured_as_second_modal_dialog (MetaWindow       *window, +                                             MetaFrameBorders *borders, +                                             int              *x, +                                             int              *y)  {    /* We can't center this dialog if it was denied focus and it     * overlaps with the focus window and this dialog is modal and this @@ -406,7 +406,7 @@ avoid_being_obscured_as_second_modal_dialog (MetaWindow *window,                                  &focus_window->rect,                                  &overlap))      { -      find_most_freespace (window, fgeom, focus_window, *x, *y, x, y); +      find_most_freespace (window, borders, focus_window, *x, *y, x, y);        meta_topic (META_DEBUG_PLACEMENT,                    "Dialog window %s was denied focus but may be modal "                    "to the focus window; had to move it to avoid the " @@ -545,15 +545,15 @@ center_rect_in_area (MetaRectangle *rect,   * don't want to create a 1x1 Emacs.   */  static gboolean -find_first_fit (MetaWindow *window, -                MetaFrameGeometry *fgeom, +find_first_fit (MetaWindow       *window, +                MetaFrameBorders *borders,                  /* visible windows on relevant workspaces */ -                GList      *windows, -		int         xinerama, -                int         x, -                int         y, -                int        *new_x, -                int        *new_y) +                GList            *windows, +		int               xinerama, +                int               x, +                int               y, +                int              *new_x, +                int              *new_y)  {    /* This algorithm is limited - it just brute-force tries     * to fit the window in a small number of locations that are aligned @@ -584,10 +584,10 @@ find_first_fit (MetaWindow *window,    rect.width = window->rect.width;    rect.height = window->rect.height; -  if (fgeom) +  if (borders)      { -      rect.width += fgeom->left_width + fgeom->right_width; -      rect.height += fgeom->top_height + fgeom->bottom_height; +      rect.width += borders->visible.left + borders->visible.right; +      rect.height += borders->visible.top + borders->visible.bottom;      }  #ifdef WITH_VERBOSE_MODE @@ -614,10 +614,10 @@ find_first_fit (MetaWindow *window,        {          *new_x = rect.x;          *new_y = rect.y; -        if (fgeom) +        if (borders)            { -            *new_x += fgeom->left_width; -            *new_y += fgeom->top_height; +            *new_x += borders->visible.left; +            *new_y += borders->visible.top;            }          retval = TRUE; @@ -642,10 +642,10 @@ find_first_fit (MetaWindow *window,            {              *new_x = rect.x;              *new_y = rect.y; -            if (fgeom) +            if (borders)                { -                *new_x += fgeom->left_width; -                *new_y += fgeom->top_height; +                *new_x += borders->visible.left; +                *new_y += borders->visible.top;                }              retval = TRUE; @@ -673,10 +673,10 @@ find_first_fit (MetaWindow *window,            {              *new_x = rect.x;              *new_y = rect.y; -            if (fgeom) +            if (borders)                { -                *new_x += fgeom->left_width; -                *new_y += fgeom->top_height; +                *new_x += borders->visible.left; +                *new_y += borders->visible.top;                }              retval = TRUE; @@ -695,19 +695,19 @@ find_first_fit (MetaWindow *window,  }  void -meta_window_place (MetaWindow        *window, -                   MetaFrameGeometry *fgeom, -                   int                x, -                   int                y, -                   int               *new_x, -                   int               *new_y) +meta_window_place (MetaWindow       *window, +                   MetaFrameBorders *borders, +                   int               x, +                   int               y, +                   int              *new_x, +                   int              *new_y)  {    GList *windows;    const MetaXineramaScreenInfo *xi;    MetaPlacementMode placement_mode;    /* frame member variables should NEVER be used in here, only -   * MetaFrameGeometry. But remember fgeom == NULL +   * MetaFrameBorders. But remember borders == NULL     * for undecorated windows. Also, this function should     * NEVER have side effects other than computing the     * placement coordinates. @@ -785,7 +785,7 @@ meta_window_place (MetaWindow        *window,          {            meta_topic (META_DEBUG_PLACEMENT,                        "Not placing window with PPosition or USPosition set\n"); -          avoid_being_obscured_as_second_modal_dialog (window, fgeom, &x, &y); +          avoid_being_obscured_as_second_modal_dialog (window, borders, &x, &y);            goto done_no_constraints;          }      } @@ -820,13 +820,13 @@ meta_window_place (MetaWindow        *window,            y += (parent->rect.height - window->rect.height)/3;            /* put top of child's frame, not top of child's client */ -          if (fgeom) -            y += fgeom->top_height; +          if (borders) +            y += borders->visible.top;            meta_topic (META_DEBUG_PLACEMENT, "Centered window %s over transient parent\n",                        window->desc); -          avoid_being_obscured_as_second_modal_dialog (window, fgeom, &x, &y); +          avoid_being_obscured_as_second_modal_dialog (window, borders, &x, &y);            goto done;          } @@ -901,11 +901,11 @@ meta_window_place (MetaWindow        *window,    if (placement_mode == META_PLACEMENT_MODE_POINTER ||        placement_mode == META_PLACEMENT_MODE_MANUAL)      { -      if (place_by_pointer (window, fgeom, placement_mode, &x, &y)) +      if (place_by_pointer (window, borders, placement_mode, &x, &y))          goto done_check_denied_focus;      } -  if (find_first_fit (window, fgeom, windows, +  if (find_first_fit (window, borders, windows,                        xi->number,                        x, y, &x, &y))      goto done_check_denied_focus; @@ -939,7 +939,7 @@ meta_window_place (MetaWindow        *window,     * fully overlapping window (e.g. starting multiple terminals)     * */    if (!meta_prefs_get_center_new_windows() && (x == xi->rect.x && y == xi->rect.y)) -    find_next_cascade (window, fgeom, windows, x, y, &x, &y); +    find_next_cascade (window, borders, windows, x, y, &x, &y);   done_check_denied_focus:    /* If the window is being denied focus and isn't a transient of the @@ -973,7 +973,7 @@ meta_window_place (MetaWindow        *window,            x = xi->rect.x;            y = xi->rect.y; -          found_fit = find_first_fit (window, fgeom, focus_window_list, +          found_fit = find_first_fit (window, borders, focus_window_list,                                        xi->number,                                        x, y, &x, &y);            g_list_free (focus_window_list); @@ -983,7 +983,7 @@ meta_window_place (MetaWindow        *window,         * as possible.         */        if (!found_fit) -        find_most_freespace (window, fgeom, focus_window, x, y, &x, &y); +        find_most_freespace (window, borders, focus_window, x, y, &x, &y);      }   done: diff --git a/src/core/place.h b/src/core/place.h index 9f58c417..468e3a39 100644 --- a/src/core/place.h +++ b/src/core/place.h @@ -27,11 +27,11 @@  #include "window-private.h"  #include "frame-private.h" -void meta_window_place (MetaWindow *window, -                        MetaFrameGeometry *fgeom, -                        int         x, -                        int         y, -                        int        *new_x, -                        int        *new_y); +void meta_window_place (MetaWindow       *window, +                        MetaFrameBorders *borders, +                        int               x, +                        int               y, +                        int              *new_x, +                        int              *new_y);  #endif diff --git a/src/core/window.c b/src/core/window.c index 620b3a2d..7c8a19a9 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -2771,12 +2771,12 @@ meta_window_can_tile (MetaWindow *window)    if (window->frame)      { -      MetaFrameGeometry fgeom; +      MetaFrameBorders borders; -      meta_frame_calc_geometry (window->frame, &fgeom); +      meta_frame_calc_borders (window->frame, &borders); -      tile_area.width  -= (fgeom.left_width + fgeom.right_width); -      tile_area.height -= (fgeom.top_height + fgeom.bottom_height); +      tile_area.width  -= (borders.visible.left + borders.visible.right); +      tile_area.height -= (borders.visible.top + borders.visible.bottom);      }    return tile_area.width >= window->size_hints.min_width && @@ -3241,11 +3241,11 @@ meta_window_activate_with_workspace (MetaWindow     *window,   * internal or client window).   */  static void -adjust_for_gravity (MetaWindow        *window, -                    MetaFrameGeometry *fgeom, -                    gboolean           coords_assume_border, -                    int                gravity, -                    MetaRectangle     *rect) +adjust_for_gravity (MetaWindow       *window, +                    MetaFrameBorders *borders, +                    gboolean          coords_assume_border, +                    int               gravity, +                    MetaRectangle    *rect)  {    int ref_x, ref_y;    int bw; @@ -3257,12 +3257,12 @@ adjust_for_gravity (MetaWindow        *window,    else      bw = 0; -  if (fgeom) +  if (borders)      { -      child_x = fgeom->left_width; -      child_y = fgeom->top_height; -      frame_width = child_x + rect->width + fgeom->right_width; -      frame_height = child_y + rect->height + fgeom->bottom_height; +      child_x = borders->visible.left; +      child_y = borders->visible.top; +      frame_width = child_x + rect->width + borders->visible.right; +      frame_height = child_y + rect->height + borders->visible.bottom;      }    else      { @@ -3470,7 +3470,7 @@ meta_window_move_resize_internal (MetaWindow          *window,    XWindowChanges values;    unsigned int mask;    gboolean need_configure_notify; -  MetaFrameGeometry fgeom; +  MetaFrameBorders borders;    gboolean need_move_client = FALSE;    gboolean need_move_frame = FALSE;    gboolean need_resize_client = FALSE; @@ -3516,8 +3516,7 @@ meta_window_move_resize_internal (MetaWindow          *window,                old_rect.x, old_rect.y, old_rect.width, old_rect.height);    if (have_window_frame) -    meta_frame_calc_geometry (window->frame, -                              &fgeom); +    meta_frame_calc_borders (window->frame, &borders);    new_rect.x = root_x_nw;    new_rect.y = root_y_nw; @@ -3544,7 +3543,7 @@ meta_window_move_resize_internal (MetaWindow          *window,    else if (is_configure_request || do_gravity_adjust)      {        adjust_for_gravity (window, -                          have_window_frame ? &fgeom : NULL, +                          have_window_frame ? &borders : NULL,                            /* configure request coords assume                             * the border width existed                             */ @@ -3559,7 +3558,7 @@ meta_window_move_resize_internal (MetaWindow          *window,      }    meta_window_constrain (window, -                         have_window_frame ? &fgeom : NULL, +                         have_window_frame ? &borders : NULL,                           flags,                           gravity,                           &old_rect, @@ -3581,12 +3580,12 @@ meta_window_move_resize_internal (MetaWindow          *window,      {        int frame_size_dx, frame_size_dy, new_w, new_h; -      new_w = window->rect.width + fgeom.left_width + fgeom.right_width; +      new_w = window->rect.width + borders.visible.left + borders.visible.right;        if (window->shaded) -        new_h = fgeom.top_height; +        new_h = borders.visible.top;        else -        new_h = window->rect.height + fgeom.top_height + fgeom.bottom_height; +        new_h = window->rect.height + borders.visible.top + borders.visible.bottom;        frame_size_dx = new_w - window->frame->rect.width;        frame_size_dy = new_h - window->frame->rect.height; @@ -3623,8 +3622,8 @@ meta_window_move_resize_internal (MetaWindow          *window,        int frame_pos_dx, frame_pos_dy;        /* Compute new frame coords */ -      new_x = root_x_nw - fgeom.left_width; -      new_y = root_y_nw - fgeom.top_height; +      new_x = root_x_nw - borders.visible.left; +      new_y = root_y_nw - borders.visible.top;        frame_pos_dx = new_x - window->frame->rect.x;        frame_pos_dy = new_y - window->frame->rect.y; @@ -3647,8 +3646,8 @@ meta_window_move_resize_internal (MetaWindow          *window,         * remember they are the server coords         */ -      new_x = fgeom.left_width; -      new_y = fgeom.top_height; +      new_x = borders.visible.left; +      new_y = borders.visible.top;        if (need_resize_frame && need_move_frame &&            static_gravity_works (window->display)) @@ -3719,15 +3718,15 @@ meta_window_move_resize_internal (MetaWindow          *window,    /* If frame extents have changed, fill in other frame fields and       change frame's extents property. */    if (have_window_frame && -      (window->frame->child_x != fgeom.left_width || -       window->frame->child_y != fgeom.top_height || -       window->frame->right_width != fgeom.right_width || -       window->frame->bottom_height != fgeom.bottom_height)) -    { -      window->frame->child_x = fgeom.left_width; -      window->frame->child_y = fgeom.top_height; -      window->frame->right_width = fgeom.right_width; -      window->frame->bottom_height = fgeom.bottom_height; +      (window->frame->child_x != borders.visible.left || +       window->frame->child_y != borders.visible.top || +       window->frame->right_width != borders.visible.right || +       window->frame->bottom_height != borders.visible.bottom)) +    { +      window->frame->child_x = borders.visible.left; +      window->frame->child_y = borders.visible.top; +      window->frame->right_width = borders.visible.right; +      window->frame->bottom_height = borders.visible.bottom;        update_net_frame_extents (window);      } diff --git a/src/include/common.h b/src/include/common.h index 9468d1dd..c49ad5de 100644 --- a/src/include/common.h +++ b/src/include/common.h @@ -25,9 +25,10 @@  #ifndef META_COMMON_H  #define META_COMMON_H -/* Don't include GTK or core headers here */ +/* Don't include core headers here */  #include <X11/Xlib.h>  #include <glib.h> +#include <gtk/gtk.h>  typedef struct _MetaResizePopup MetaResizePopup; @@ -300,6 +301,15 @@ struct _MetaButtonLayout    gboolean right_buttons_has_spacer[MAX_BUTTONS_PER_CORNER];  }; +typedef struct _MetaFrameBorders MetaFrameBorders; +struct _MetaFrameBorders +{ +  /* The frame border is made up of two pieces - an inner visible portion +   * and an outer portion that is invisible but responds to events. +   */ +  GtkBorder visible; +}; +  /* should investigate changing these to whatever most apps use */  #define META_DEFAULT_ICON_SIZE 48  #define META_MIN_ICON_SIZE 6 diff --git a/src/include/ui.h b/src/include/ui.h index ba9b1696..bbfaf287 100644 --- a/src/include/ui.h +++ b/src/include/ui.h @@ -62,17 +62,13 @@ MetaUI* meta_ui_new (Display *xdisplay,                       Screen  *screen);  void    meta_ui_free (MetaUI *ui); -void meta_ui_theme_get_frame_borders (MetaUI *ui, -                                      MetaFrameType      type, -                                      MetaFrameFlags     flags, -                                      int               *top_height, -                                      int               *bottom_height, -                                      int               *left_width, -                                      int               *right_width); -void meta_ui_get_frame_geometry (MetaUI *ui, -                                 Window frame_xwindow, -                                 int *top_height, int *bottom_height, -                                 int *left_width, int *right_width); +void meta_ui_theme_get_frame_borders (MetaUI           *ui, +                                      MetaFrameType     type, +                                      MetaFrameFlags    flags, +                                      MetaFrameBorders *borders); +void meta_ui_get_frame_borders (MetaUI           *ui, +                                Window            frame_xwindow, +                                MetaFrameBorders *borders);  Window meta_ui_create_frame_window (MetaUI *ui,                                      Display *xdisplay,                                      Visual *xvisual, diff --git a/src/ui/frames.c b/src/ui/frames.c index 5d76f42a..1adb3ccf 100644 --- a/src/ui/frames.c +++ b/src/ui/frames.c @@ -668,10 +668,9 @@ meta_frames_lookup_window (MetaFrames *frames,  }  void -meta_frames_get_geometry (MetaFrames *frames, -                          Window xwindow, -                          int *top_height, int *bottom_height, -                          int *left_width, int *right_width) +meta_frames_get_borders (MetaFrames       *frames, +                         Window            xwindow, +                         MetaFrameBorders *borders)  {    MetaFrameFlags flags;    MetaUIFrame *frame; @@ -702,14 +701,13 @@ meta_frames_get_geometry (MetaFrames *frames,                                  type,                                  frame->text_height,                                  flags, -                                top_height, bottom_height, -                                left_width, right_width); +                                borders);    /* Scale frame geometry to ensure proper frame position */ -  *top_height *= scale; -  *bottom_height *= scale; -  *left_width *= scale; -  *right_width *= scale; +  borders->visible.top *= scale; +  borders->visible.bottom *= scale; +  borders->visible.left *= scale; +  borders->visible.right *= scale;  }  #ifdef HAVE_SHAPE @@ -2060,6 +2058,7 @@ populate_cache (MetaFrames *frames,                  MetaUIFrame *frame)  {    int top, bottom, left, right; +  MetaFrameBorders borders;    int width, height;    int frame_width, frame_height, screen_width, screen_height;    gint scale; @@ -2090,7 +2089,12 @@ populate_cache (MetaFrames *frames,                                  frame_type,                                  frame->text_height,                                  frame_flags, -                                &top, &bottom, &left, &right); +                                &borders); + +  top = borders.visible.top; +  left = borders.visible.left; +  right = borders.visible.right; +  bottom = borders.visible.bottom;    pixels = get_cache (frames, frame);    scale = gdk_window_get_scale_factor (frame->window); @@ -2195,6 +2199,7 @@ subtract_client_area (cairo_region_t *region, MetaUIFrame *frame)    GdkRectangle area;    MetaFrameFlags flags;    MetaFrameType type; +  MetaFrameBorders borders;    cairo_region_t *tmp_region;    Display *display;    gint scale; @@ -2210,13 +2215,13 @@ subtract_client_area (cairo_region_t *region, MetaUIFrame *frame)                   META_CORE_GET_END);    meta_theme_get_frame_borders (meta_theme_get_current (), -                         type, frame->text_height, flags, -                         &area.x, NULL, &area.y, NULL); +                                type, frame->text_height, flags, +                                &borders);    area.width /= scale;    area.height /= scale; -  area.x /= scale; -  area.y /= scale; +  area.x = borders.visible.left / scale; +  area.y = borders.visible.top / scale;    tmp_region = cairo_region_create_rectangle (&area);    cairo_region_subtract (region, tmp_region); diff --git a/src/ui/frames.h b/src/ui/frames.h index 736c37ca..1262f148 100644 --- a/src/ui/frames.h +++ b/src/ui/frames.h @@ -127,10 +127,9 @@ void meta_frames_set_title (MetaFrames *frames,  void meta_frames_repaint_frame (MetaFrames *frames,                                  Window      xwindow); -void meta_frames_get_geometry (MetaFrames *frames, -                               Window xwindow, -                               int *top_height, int *bottom_height, -                               int *left_width, int *right_width); +void meta_frames_get_borders (MetaFrames       *frames, +                              Window            xwindow, +                              MetaFrameBorders *borders);  void meta_frames_apply_shapes (MetaFrames *frames,                                 Window      xwindow, diff --git a/src/ui/preview-widget.c b/src/ui/preview-widget.c index 50f42b61..6c819707 100644 --- a/src/ui/preview-widget.c +++ b/src/ui/preview-widget.c @@ -98,10 +98,10 @@ meta_preview_init (MetaPreview *preview)      META_FRAME_ALLOWS_SHADE |      META_FRAME_ALLOWS_MOVE; -  preview->left_width = -1; -  preview->right_width = -1; -  preview->top_height = -1; -  preview->bottom_height = -1; +  preview->borders.visible.left = -1; +  preview->borders.visible.right = -1; +  preview->borders.visible.top = -1; +  preview->borders.visible.bottom = -1;  }  GtkWidget* @@ -172,7 +172,7 @@ ensure_info (MetaPreview *preview)        pango_font_description_free (font_desc);      } -  if (preview->top_height < 0) +  if (preview->borders.visible.top < 0)      {        if (preview->theme)          { @@ -180,17 +180,14 @@ ensure_info (MetaPreview *preview)                                          preview->type,                                          preview->text_height,                                          preview->flags, -                                        &preview->top_height, -                                        &preview->bottom_height, -                                        &preview->left_width, -                                        &preview->right_width); +                                        &preview->borders);          }        else          { -          preview->top_height = 0; -          preview->bottom_height = 0; -          preview->left_width = 0; -          preview->right_width = 0; +          preview->borders.visible.top = 0; +          preview->borders.visible.bottom = 0; +          preview->borders.visible.left = 0; +          preview->borders.visible.right = 0;          }      }  } @@ -223,8 +220,8 @@ meta_preview_draw (GtkWidget *widget,    border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));    gtk_widget_get_allocation (widget, &allocation); -  client_width = allocation.width - preview->left_width - preview->right_width - border_width * 2; -  client_height = allocation.height - preview->top_height - preview->bottom_height - border_width * 2; +  client_width = allocation.width - preview->borders.visible.left - preview->borders.visible.right - border_width * 2; +  client_height = allocation.height - preview->borders.visible.top - preview->borders.visible.bottom - border_width * 2;    if (client_width < 0)      client_width = 1; @@ -266,7 +263,7 @@ meta_preview_get_preferred_width (GtkWidget *widget,    ensure_info (preview); -  *minimum = *natural = preview->left_width + preview->right_width; +  *minimum = *natural = preview->borders.visible.left + preview->borders.visible.right;    child = gtk_bin_get_child (GTK_BIN (preview));    if (child && gtk_widget_get_visible (child)) @@ -302,7 +299,7 @@ meta_preview_get_preferred_height (GtkWidget *widget,    ensure_info (preview); -  *minimum = *natural = preview->top_height + preview->bottom_height; +  *minimum = *natural = preview->borders.visible.top + preview->borders.visible.bottom;    child = gtk_bin_get_child (GTK_BIN (preview));    if (child && gtk_widget_get_visible (child)) @@ -347,11 +344,11 @@ meta_preview_size_allocate (GtkWidget         *widget,        gtk_widget_get_visible (child))      {        gtk_widget_get_allocation (widget, &widget_allocation); -      child_allocation.x = widget_allocation.x + border_width + preview->left_width; -      child_allocation.y = widget_allocation.y + border_width + preview->top_height; +      child_allocation.x = widget_allocation.x + border_width + preview->borders.visible.left; +      child_allocation.y = widget_allocation.y + border_width + preview->borders.visible.top; -      child_allocation.width = MAX (1, widget_allocation.width - border_width * 2 - preview->left_width - preview->right_width); -      child_allocation.height = MAX (1, widget_allocation.height - border_width * 2 - preview->top_height - preview->bottom_height); +      child_allocation.width = MAX (1, widget_allocation.width - border_width * 2 - preview->borders.visible.left - preview->borders.visible.right); +      child_allocation.height = MAX (1, widget_allocation.height - border_width * 2 - preview->borders.visible.top - preview->borders.visible.bottom);        gtk_widget_size_allocate (gtk_bin_get_child (GTK_BIN (widget)), &child_allocation);      }  } @@ -365,10 +362,10 @@ clear_cache (MetaPreview *preview)        preview->layout = NULL;      } -  preview->left_width = -1; -  preview->right_width = -1; -  preview->top_height = -1; -  preview->bottom_height = -1; +  preview->borders.visible.left = -1; +  preview->borders.visible.right = -1; +  preview->borders.visible.top = -1; +  preview->borders.visible.bottom = -1;  }  void diff --git a/src/ui/preview-widget.h b/src/ui/preview-widget.h index 1bbd97e7..11818588 100644 --- a/src/ui/preview-widget.h +++ b/src/ui/preview-widget.h @@ -50,11 +50,7 @@ struct _MetaPreview    PangoLayout *layout;    int text_height; -  int left_width; -  int right_width; -  int top_height; -  int bottom_height; - +  MetaFrameBorders borders;    MetaButtonLayout button_layout;  }; diff --git a/src/ui/theme-viewer.c b/src/ui/theme-viewer.c index d4331b8e..5903f990 100644 --- a/src/ui/theme-viewer.c +++ b/src/ui/theme-viewer.c @@ -1020,7 +1020,7 @@ run_theme_benchmark (void)    GtkWidget* widget;    cairo_surface_t *pixmap;    cairo_t *cr; -  int top_height, bottom_height, left_width, right_width; +  MetaFrameBorders borders;    MetaButtonState button_states[META_BUTTON_TYPE_LAST] =    {      META_BUTTON_STATE_NORMAL, @@ -1046,10 +1046,7 @@ run_theme_benchmark (void)                                  META_FRAME_TYPE_NORMAL,                                  get_text_height (widget),                                  get_flags (widget), -                                &top_height, -                                &bottom_height, -                                &left_width, -                                &right_width); +                                &borders);    layout = create_title_layout (widget); @@ -1084,8 +1081,8 @@ run_theme_benchmark (void)         */        pixmap = gdk_window_create_similar_surface (gtk_widget_get_window (widget),                                                    CAIRO_CONTENT_COLOR, -                                                  client_width + left_width + right_width, -                                                  client_height + top_height + bottom_height); +                                                  client_width + borders.visible.left + borders.visible.right, +                                                  client_height + borders.visible.top + borders.visible.bottom);        cr = cairo_create (pixmap);        meta_theme_draw_frame (global_theme, diff --git a/src/ui/theme.c b/src/ui/theme.c index d7932e67..37298e42 100644 --- a/src/ui/theme.c +++ b/src/ui/theme.c @@ -405,10 +405,7 @@ void  meta_frame_layout_get_borders (const MetaFrameLayout *layout,                                 int                    text_height,                                 MetaFrameFlags         flags, -                               int                   *top_height, -                               int                   *bottom_height, -                               int                   *left_width, -                               int                   *right_width) +                               MetaFrameBorders      *borders)  {    int buttons_height, title_height; @@ -423,34 +420,20 @@ meta_frame_layout_get_borders (const MetaFrameLayout *layout,      layout->title_vertical_pad +      layout->title_border.top + layout->title_border.bottom; -  if (top_height) -    { -      *top_height = MAX (buttons_height, title_height); -    } - -  if (left_width) -    *left_width = layout->left_width; -  if (right_width) -    *right_width = layout->right_width; - -  if (bottom_height) -    { -      if (flags & META_FRAME_SHADED) -        *bottom_height = 0; -      else -        *bottom_height = layout->bottom_height; -    } +  borders->visible.top = MAX (buttons_height, title_height); +  borders->visible.left = layout->left_width; +  borders->visible.right = layout->right_width; +  if (flags & META_FRAME_SHADED) +    borders->visible.bottom = 0; +  else +    borders->visible.bottom = layout->bottom_height;    if (flags & META_FRAME_FULLSCREEN)      { -      if (top_height) -        *top_height = 0; -      if (bottom_height) -        *bottom_height = 0; -      if (left_width) -        *left_width = 0; -      if (right_width) -        *right_width = 0; +      borders->visible.top = 0; +      borders->visible.bottom = 0; +      borders->visible.left = 0; +      borders->visible.right = 0;      }  } @@ -647,12 +630,16 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout  *layout,    GdkRectangle *right_bg_rects[MAX_BUTTONS_PER_CORNER];    gboolean right_buttons_has_spacer[MAX_BUTTONS_PER_CORNER]; +  MetaFrameBorders borders; +    meta_frame_layout_get_borders (layout, text_height,                                   flags, -                                 &fgeom->top_height, -                                 &fgeom->bottom_height, -                                 &fgeom->left_width, -                                 &fgeom->right_width); +                                 &borders); + +  fgeom->left_width = borders.visible.left; +  fgeom->right_width = borders.visible.right; +  fgeom->top_height = borders.visible.top; +  fgeom->bottom_height = borders.visible.bottom;    width = client_width + fgeom->left_width + fgeom->right_width; @@ -5657,30 +5644,23 @@ meta_theme_draw_frame_by_name (MetaTheme              *theme,  }  void -meta_theme_get_frame_borders (MetaTheme      *theme, -                              MetaFrameType   type, -                              int             text_height, -                              MetaFrameFlags  flags, -                              int            *top_height, -                              int            *bottom_height, -                              int            *left_width, -                              int            *right_width) +meta_theme_get_frame_borders (MetaTheme        *theme, +                              MetaFrameType     type, +                              int               text_height, +                              MetaFrameFlags    flags, +                              MetaFrameBorders *borders)  {    MetaFrameStyle *style;    g_return_if_fail (type < META_FRAME_TYPE_LAST); -  if (top_height) -    *top_height = 0; -  if (bottom_height) -    *bottom_height = 0; -  if (left_width) -    *left_width = 0; -  if (right_width) -    *right_width = 0; -    style = theme_get_style (theme, type, flags); +  borders->visible.top = 0; +  borders->visible.left = 0; +  borders->visible.right = 0; +  borders->visible.bottom = 0; +    /* Parser is not supposed to allow this currently */    if (style == NULL)      return; @@ -5688,8 +5668,7 @@ meta_theme_get_frame_borders (MetaTheme      *theme,    meta_frame_layout_get_borders (style->layout,                                   text_height,                                   flags, -                                 top_height, bottom_height, -                                 left_width, right_width); +                                 borders);  }  void diff --git a/src/ui/theme.h b/src/ui/theme.h index ef6af363..2e4a425c 100644 --- a/src/ui/theme.h +++ b/src/ui/theme.h @@ -877,10 +877,7 @@ void             meta_frame_layout_unref         (MetaFrameLayout       *layout)  void             meta_frame_layout_get_borders   (const MetaFrameLayout *layout,                                                    int                    text_height,                                                    MetaFrameFlags         flags, -                                                  int                   *top_height, -                                                  int                   *bottom_height, -                                                  int                   *left_width, -                                                  int                   *right_width); +                                                  MetaFrameBorders      *borders);  void             meta_frame_layout_calc_geometry (const MetaFrameLayout  *layout,                                                    int                     text_height,                                                    MetaFrameFlags          flags, @@ -1080,10 +1077,7 @@ void meta_theme_get_frame_borders (MetaTheme         *theme,                                     MetaFrameType      type,                                     int                text_height,                                     MetaFrameFlags     flags, -                                   int               *top_height, -                                   int               *bottom_height, -                                   int               *left_width, -                                   int               *right_width); +                                   MetaFrameBorders  *borders);  void meta_theme_calc_geometry (MetaTheme              *theme,                                 MetaFrameType           type,                                 int                     text_height, diff --git a/src/ui/ui.c b/src/ui/ui.c index 20e7546b..e7993625 100644 --- a/src/ui/ui.c +++ b/src/ui/ui.c @@ -295,14 +295,11 @@ meta_ui_free (MetaUI *ui)  }  void -meta_ui_get_frame_geometry (MetaUI *ui, -                            Window frame_xwindow, -                            int *top_height, int *bottom_height, -                            int *left_width, int *right_width) +meta_ui_get_frame_borders (MetaUI *ui, +                           Window frame_xwindow, +                           MetaFrameBorders *borders)  { -  meta_frames_get_geometry (ui->frames, frame_xwindow, -                            top_height, bottom_height, -                            left_width, right_width); +  meta_frames_get_borders (ui->frames, frame_xwindow, borders);  }  static void @@ -637,13 +634,10 @@ meta_ui_window_should_not_cause_focus (Display *xdisplay,  }  void -meta_ui_theme_get_frame_borders (MetaUI *ui, -                                 MetaFrameType      type, -                                 MetaFrameFlags     flags, -                                 int               *top_height, -                                 int               *bottom_height, -                                 int               *left_width, -                                 int               *right_width) +meta_ui_theme_get_frame_borders (MetaUI           *ui, +                                 MetaFrameType     type, +                                 MetaFrameFlags    flags, +                                 MetaFrameBorders *borders)  {    int text_height;    GtkStyleContext *style = NULL; @@ -684,15 +678,17 @@ meta_ui_theme_get_frame_borders (MetaUI *ui,        meta_theme_get_frame_borders (meta_theme_get_current (),                                      type, text_height, flags, -                                    top_height, bottom_height, -                                    left_width, right_width); +                                    borders);        if (free_font_desc)          pango_font_description_free (free_font_desc);      }    else      { -      *top_height = *bottom_height = *left_width = *right_width = 0; +      borders->visible.top = 0; +      borders->visible.bottom = 0; +      borders->visible.left = 0; +      borders->visible.right = 0;      }    if (style != NULL) | 
