From bd67e0807d9ac74b725d5d7a39dc978a098eba4d Mon Sep 17 00:00:00 2001 From: lukefromdc Date: Tue, 11 Jun 2019 00:49:11 -0400 Subject: [PATCH 2/6] gtk-window-decorator: allow building against older versions of marco Autodetect marco 1.23 or later, build against the correct version --- configure.ac | 15 ++ gtk-window-decorator/gtk-window-decorator.c | 200 +++++++++++++++++--- 2 files changed, 190 insertions(+), 25 deletions(-) diff --git a/configure.ac b/configure.ac index 08ecba7d..d7f5e85b 100644 --- a/configure.ac +++ b/configure.ac @@ -384,6 +384,14 @@ else use_marco="no" fi +# Check if we are building against marco 1.23.1 or later +if test "x$use_marco" = "xyes"; then + PKG_CHECK_EXISTS(libmarco-private >= 1.23.1, + [have_marco_1_23_1=yes], [have_marco_1_23_1=no]) +else + have_marco_1_23_1="no" +fi + if test "x$use_gtk" = "xyes"; then if test "x$use_gsettings" = "xyes"; then PKG_CHECK_MODULES(GSETTINGS, [glib-2.0 >= 2.32 gio-2.0 >= 2.25.0]) @@ -410,6 +418,12 @@ if test "$use_marco" = yes; then AC_DEFINE(USE_MARCO, 1, [Build marco theme support]) fi +AM_CONDITIONAL(HAVE_MARCO_1_23_1, test "x$have_marco_1_23_1" = "xyes") +if test "$have_marco_1_23_1" = yes; then + AC_DEFINE(HAVE_MARCO_1_23_1, 1, + [Build against marco 1.23.1 o later]) +fi + AM_CONDITIONAL(USE_MATE, test "x$use_mate" = "xyes") if test "$use_mate" = yes; then AC_DEFINE(USE_MATE, 1, [Build basic mate compatibility]) @@ -499,6 +513,7 @@ echo "and the following optional features will be used:" echo "and the following optional features will be used:" echo " gtk: $use_gtk ($with_gtk)" echo " marco: $use_marco" +echo " marco >=1.23.1 support: $have_marco_1_23_1" echo " gwd gsettings support: $use_gsettings" echo " desktop menu entries: $use_menu_entries" echo "" diff --git a/gtk-window-decorator/gtk-window-decorator.c b/gtk-window-decorator/gtk-window-decorator.c index bc34e964..1b8979cf 100644 --- a/gtk-window-decorator/gtk-window-decorator.c +++ b/gtk-window-decorator/gtk-window-decorator.c @@ -1634,8 +1634,11 @@ meta_get_top_border_region (const MetaFrameGeometry *fgeom, xrect.x = 0; xrect.y = 0; xrect.width = width; +#ifdef HAVE_MARCO_1_23_1 xrect.height = fgeom->height; - +#else + xrect.height = fgeom->top_height; +#endif XUnionRectWithRegion (&xrect, border_xregion, border_xregion); XSubtractRegion (border_xregion, corners_xregion, border_xregion); @@ -1672,7 +1675,11 @@ meta_get_bottom_border_region (const MetaFrameGeometry *fgeom, w = radius_to_width (bottom_left_radius, i); xrect.x = 0; +#ifdef HAVE_MARCO_1_23_1 xrect.y = fgeom->height - i - 1; +#else + xrect.y = fgeom->bottom_height - i - 1; +#endif xrect.width = w; xrect.height = 1; @@ -1687,7 +1694,11 @@ meta_get_bottom_border_region (const MetaFrameGeometry *fgeom, w = radius_to_width (bottom_right_radius, i); xrect.x = width - w; +#ifdef HAVE_MARCO_1_23_1 xrect.y = fgeom->height - i - 1; +#else + xrect.y = fgeom->bottom_height - i - 1; +#endif xrect.width = w; xrect.height = 1; @@ -1700,7 +1711,11 @@ meta_get_bottom_border_region (const MetaFrameGeometry *fgeom, xrect.x = 0; xrect.y = 0; xrect.width = width; +#ifdef HAVE_MARCO_1_23_1 xrect.height = fgeom->height; +#else + xrect.height = fgeom->bottom_height; +#endif XUnionRectWithRegion (&xrect, border_xregion, border_xregion); @@ -1722,9 +1737,13 @@ meta_get_left_border_region (const MetaFrameGeometry *fgeom, xrect.x = 0; xrect.y = 0; +#ifdef HAVE_MARCO_1_23_1 xrect.width = fgeom->borders.total.left; xrect.height = fgeom->height - fgeom->borders.total.top - fgeom->borders.total.bottom; - +#else + xrect.width = fgeom->left_width; + xrect.height = height - fgeom->top_height - fgeom->bottom_height; +#endif XUnionRectWithRegion (&xrect, border_xregion, border_xregion); return border_xregion; @@ -1741,8 +1760,13 @@ meta_get_right_border_region (const MetaFrameGeometry *fgeom, xrect.x = 0; xrect.y = 0; +#ifdef HAVE_MARCO_1_23_1 xrect.width = fgeom->borders.total.right; xrect.height = fgeom->height - fgeom->borders.total.top - fgeom->borders.total.bottom; +#else + xrect.width = fgeom->right_width; + xrect.height = height - fgeom->top_height - fgeom->bottom_height; +#endif XUnionRectWithRegion (&xrect, border_xregion, border_xregion); @@ -1858,9 +1882,9 @@ meta_get_decoration_geometry (decor_t *d, MetaButtonLayout *button_layout, GdkRectangle *clip) { -/*#ifdef HAVE_MARCO_3_23_0 */ +#ifdef HAVE_MARCO_1_23_1 MetaFrameBorders borders; -/*#endif */ +#endif gint left_width, right_width, top_height, bottom_height; if (meta_button_layout_set) @@ -1934,7 +1958,7 @@ meta_get_decoration_geometry (decor_t *d, if (d->state & WNCK_WINDOW_STATE_ABOVE) *flags |= META_FRAME_ABOVE; -/*#ifdef HAVE_MARCO_1_22_0*/ +#ifdef HAVE_MARCO_1_23_1 meta_theme_get_frame_borders (theme, META_FRAME_TYPE_NORMAL, text_height, @@ -1945,7 +1969,7 @@ meta_get_decoration_geometry (decor_t *d, bottom_height = borders.total.bottom; left_width = borders.total.left; right_width = borders.total.right; -/* +#else meta_theme_get_frame_borders (theme, META_FRAME_TYPE_NORMAL, text_height, @@ -1954,7 +1978,7 @@ meta_get_decoration_geometry (decor_t *d, &bottom_height, &left_width, &right_width); -/*#endif*/ +#endif clip->x = d->context->left_space - left_width; clip->y = d->context->top_space - top_height; @@ -2111,13 +2135,14 @@ meta_draw_window_decoration (decor_t *d) cairo_paint (cr); -/*#ifdef HAVE_MARCO_1_22_0*/ +#ifdef HAVE_MARCO_1_23_1 meta_theme_draw_frame (theme, context, -/*else +#else meta_theme_draw_frame (theme, style_window, - *endif*/ +#endif + #if GTK_CHECK_VERSION (3, 0, 0) cr, #else @@ -2127,24 +2152,36 @@ meta_draw_window_decoration (decor_t *d) #endif META_FRAME_TYPE_NORMAL, flags, +#ifdef HAVE_MARCO_1_23_1 fgeom.width - fgeom.borders.total.left - fgeom.borders.total.right, fgeom.height - fgeom.borders.total.top - fgeom.borders.total.bottom, +#else + clip.width - fgeom.left_width - fgeom.right_width, + clip.height - fgeom.top_height - fgeom.bottom_height, +#endif d->layout, text_height, &button_layout, button_states, d->icon_pixbuf, NULL); - +#ifdef HAVE_MARCO_1_23_1 if (fgeom.borders.visible.top) +#else + if (fgeom.top_height) +#endif { top_region = meta_get_top_border_region (&fgeom, clip.width); decor_blend_border_picture (xdisplay, d->context, src, +#ifdef HAVE_MARCO_1_23_1 fgeom.borders.invisible.left, fgeom.borders.invisible.top, +#else + 0, 0, +#endif d->picture, &d->border_layout, BORDER_TOP, @@ -2153,16 +2190,23 @@ meta_draw_window_decoration (decor_t *d) shade_alpha, 0); } - +#ifdef HAVE_MARCO_1_23_1 if (fgeom.borders.visible.bottom ) +#else + if (fgeom.bottom_height) +#endif { bottom_region = meta_get_bottom_border_region (&fgeom, clip.width); decor_blend_border_picture (xdisplay, d->context, src, +#ifdef HAVE_MARCO_1_23_1 fgeom.borders.invisible.left, fgeom.height - fgeom.borders.total.bottom, +#else + 0, clip.height - fgeom.bottom_height, +#endif d->picture, &d->border_layout, BORDER_BOTTOM, @@ -2171,16 +2215,23 @@ meta_draw_window_decoration (decor_t *d) shade_alpha, 0); } - +#ifdef HAVE_MARCO_1_23_1 if (fgeom.borders.visible.left) +#else + if (fgeom.left_width) +#endif { left_region = meta_get_left_border_region (&fgeom, clip.height); decor_blend_border_picture (xdisplay, d->context, src, +#ifdef HAVE_MARCO_1_23_1 fgeom.borders.invisible.left, fgeom.borders.total.top, +#else + 0, fgeom.top_height, +#endif d->picture, &d->border_layout, BORDER_LEFT, @@ -2189,16 +2240,23 @@ meta_draw_window_decoration (decor_t *d) shade_alpha, 0); } - +#ifdef HAVE_MARCO_1_23_1 if (fgeom.borders.visible.right) +#else + if (fgeom.right_width) +#endif { right_region = meta_get_right_border_region (&fgeom, clip.height); decor_blend_border_picture (xdisplay, d->context, src, +#ifdef HAVE_MARCO_1_23_1 fgeom.width - fgeom.borders.total.right, fgeom.borders.total.top, +#else + clip.width - fgeom.right_width, fgeom.top_height, +#endif d->picture, &d->border_layout, BORDER_RIGHT, @@ -2224,12 +2282,21 @@ meta_draw_window_decoration (decor_t *d) if (d->prop_xid) { /* translate from frame to client window space */ +#ifdef HAVE_MARCO_1_23_1 if (top_region) XOffsetRegion (top_region, -fgeom.borders.total.left, -fgeom.borders.total.top); if (bottom_region) XOffsetRegion (bottom_region, -fgeom.borders.total.left, 0); if (left_region) XOffsetRegion (left_region, -fgeom.borders.total.left, 0); +#else + if (top_region) + XOffsetRegion (top_region, -fgeom.left_width, -fgeom.top_height); + if (bottom_region) + XOffsetRegion (bottom_region, -fgeom.left_width, 0); + if (left_region) + XOffsetRegion (left_region, -fgeom.left_width, 0); +#endif decor_update_meta_window_property (d, theme, flags, top_region, @@ -2980,10 +3047,12 @@ meta_get_event_window_position (decor_t *d, MetaButtonLayout button_layout; MetaFrameGeometry fgeom; MetaFrameFlags flags; +#ifdef HAVE_MARCO_1_23_1 GtkBorder visible; GtkBorder resize; GtkBorder total; gint top_border; +#endif MetaTheme *theme; GdkRectangle clip; @@ -2991,7 +3060,7 @@ meta_get_event_window_position (decor_t *d, meta_get_decoration_geometry (d, theme, &flags, &fgeom, &button_layout, &clip); - +#ifdef HAVE_MARCO_1_23_1 visible = fgeom.borders.visible; resize = fgeom.borders.total; @@ -3102,6 +3171,86 @@ meta_get_event_window_position (decor_t *d, } #undef TOP_RESIZE_HEIGHT #undef RESIZE_EXTENDS +#else + width += fgeom.right_width + fgeom.left_width; + height += fgeom.top_height + fgeom.bottom_height; + + switch (i) { + case 2: /* bottom */ + switch (j) { + case 2: /* bottom right */ + *x = width - fgeom.right_width - RESIZE_EXTENDS; + *y = height - fgeom.bottom_height - RESIZE_EXTENDS; + *w = fgeom.right_width + RESIZE_EXTENDS; + *h = fgeom.bottom_height + RESIZE_EXTENDS; + break; + case 1: /* bottom */ + *x = fgeom.left_width + RESIZE_EXTENDS; + *y = height - fgeom.bottom_height; + *w = width - fgeom.left_width - fgeom.right_width - + (2 * RESIZE_EXTENDS); + *h = fgeom.bottom_height; + break; + case 0: /* bottom left */ + default: + *x = 0; + *y = height - fgeom.bottom_height - RESIZE_EXTENDS; + *w = fgeom.left_width + RESIZE_EXTENDS; + *h = fgeom.bottom_height + RESIZE_EXTENDS; + break; + } + break; + case 1: /* middle */ + switch (j) { + case 2: /* right */ + *x = width - fgeom.right_width; + *y = fgeom.top_height + RESIZE_EXTENDS; + *w = fgeom.right_width; + *h = height - fgeom.top_height - fgeom.bottom_height - + (2 * RESIZE_EXTENDS); + break; + case 1: /* middle */ + *x = fgeom.left_width; + *y = fgeom.title_rect.y + TOP_RESIZE_HEIGHT; + *w = width - fgeom.left_width - fgeom.right_width; + *h = height - fgeom.top_titlebar_edge - fgeom.bottom_height; + break; + case 0: /* left */ + default: + *x = 0; + *y = fgeom.top_height + RESIZE_EXTENDS; + *w = fgeom.left_width; + *h = height - fgeom.top_height - fgeom.bottom_height - + (2 * RESIZE_EXTENDS); + break; + } + break; + case 0: /* top */ + default: + switch (j) { + case 2: /* top right */ + *x = width - fgeom.right_width - RESIZE_EXTENDS; + *y = 0; + *w = fgeom.right_width + RESIZE_EXTENDS; + *h = fgeom.top_height + RESIZE_EXTENDS; + break; + case 1: /* top */ + *x = fgeom.left_width + RESIZE_EXTENDS; + *y = 0; + *w = width - fgeom.left_width - fgeom.right_width - + (2 * RESIZE_EXTENDS); + *h = fgeom.title_rect.y + TOP_RESIZE_HEIGHT; + break; + case 0: /* top left */ + default: + *x = 0; + *y = 0; + *w = fgeom.left_width + RESIZE_EXTENDS; + *h = fgeom.top_height + RESIZE_EXTENDS; + break; + } + } +#endif } static gboolean @@ -6293,13 +6442,14 @@ static void meta_update_border_extents (gint text_height) { MetaTheme *theme; -/*#ifdef HAVE_MARCO_1_22_0 */ +#ifdef HAVE_MARCO_1_23_1 MetaFrameBorders borders; -/*#else +#else gint top_height, bottom_height, left_width, right_width; - #endif*/ +#endif theme = meta_theme_get_current (); -/*#ifdef HAVE_MARCO_1_22_0 */ + +#ifdef HAVE_MARCO_1_23_1 meta_theme_get_frame_borders (theme, META_FRAME_TYPE_NORMAL, text_height, @@ -6313,8 +6463,7 @@ meta_update_border_extents (gint text_height) titlebar_height = borders.visible.top - _win_extents.top; -/*#else*/ -/* +#else meta_theme_get_frame_borders (theme, META_FRAME_TYPE_NORMAL, text_height, @@ -6330,8 +6479,9 @@ meta_update_border_extents (gint text_height) _win_extents.right = right_width; titlebar_height = top_height - _win_extents.top; -#endif*/ -/*#ifdef HAVE_MARCO_1_22_0 */ +#endif + +#ifdef HAVE_MARCO_1_23_1 meta_theme_get_frame_borders (theme, META_FRAME_TYPE_NORMAL, text_height, @@ -6345,7 +6495,7 @@ meta_update_border_extents (gint text_height) max_titlebar_height = borders.visible.top - _max_win_extents.top; -/*#else +#else meta_theme_get_frame_borders (theme, META_FRAME_TYPE_NORMAL, text_height, @@ -6361,7 +6511,7 @@ meta_update_border_extents (gint text_height) _max_win_extents.right = right_width; max_titlebar_height = top_height - _max_win_extents.top; -*/ +#endif } #endif -- 2.21.0