diff --git a/debian/changelog b/debian/changelog index 13efead012e7bf7a6de0bf4b2faed524d359f2b3..f2fbc551d662d7120fdc61be845c39ecc0a0ebd3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +metacity (1:3.14.3-1+hypra1) UNRELEASED; urgency=medium + + * Add patch to fix buttons background when some buttons are hidden. + + -- Colomban Wendling Wed, 14 Nov 2018 16:58:45 +0100 + metacity (1:3.14.3-1) unstable; urgency=medium * New upstream bugfix release. diff --git a/debian/patches/0001-Fix-buttons-background-when-some-buttons-are-hidden.patch b/debian/patches/0001-Fix-buttons-background-when-some-buttons-are-hidden.patch new file mode 100644 index 0000000000000000000000000000000000000000..1979f82da069620c5e2a2a61ed8bfe7e31fa12da --- /dev/null +++ b/debian/patches/0001-Fix-buttons-background-when-some-buttons-are-hidden.patch @@ -0,0 +1,111 @@ +From 966e091376e2cade8bd0c494577589a7be2bb4a9 Mon Sep 17 00:00:00 2001 +From: Colomban Wendling +Date: Wed, 14 Nov 2018 18:57:47 +0100 +Subject: [PATCH] Fix buttons background when some buttons are hidden + +Properly save the actual button layout in the frame geometry instead of +the actual number of buttons but the configured layout, which might +include hidden buttons. +This fixes later lookup in the frame geometry so it uses the actually +displayed buttons. +--- + src/ui/theme.c | 29 ++++++++++++++++++----------- + 1 file changed, 18 insertions(+), 11 deletions(-) + +diff --git a/src/ui/theme.c b/src/ui/theme.c +index 5763851..aa58579 100644 +--- a/src/ui/theme.c ++++ b/src/ui/theme.c +@@ -618,9 +618,7 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout, + MetaButtonSpace *left_func_rects[MAX_BUTTONS_PER_CORNER]; + MetaButtonSpace *right_func_rects[MAX_BUTTONS_PER_CORNER]; + GdkRectangle *left_bg_rects[MAX_BUTTONS_PER_CORNER]; +- gboolean left_buttons_has_spacer[MAX_BUTTONS_PER_CORNER]; + GdkRectangle *right_bg_rects[MAX_BUTTONS_PER_CORNER]; +- gboolean right_buttons_has_spacer[MAX_BUTTONS_PER_CORNER]; + + MetaFrameBorders borders; + +@@ -680,6 +678,14 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout, + n_left_spacers = 0; + n_right_spacers = 0; + ++ for (i = 0; i < MAX_BUTTONS_PER_CORNER; i++) ++ { ++ fgeom->button_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST; ++ fgeom->button_layout.left_buttons_has_spacer[i] = FALSE; ++ fgeom->button_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST; ++ fgeom->button_layout.right_buttons_has_spacer[i] = FALSE; ++ } ++ + if (!layout->hide_buttons) + { + /* Try to fill in rects */ +@@ -690,8 +696,9 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout, + theme); + if (left_func_rects[n_left] != NULL) + { +- left_buttons_has_spacer[n_left] = button_layout->left_buttons_has_spacer[i]; +- if (button_layout->left_buttons_has_spacer[i]) ++ fgeom->button_layout.left_buttons[n_left] = button_layout->left_buttons[i]; ++ fgeom->button_layout.left_buttons_has_spacer[n_left] = button_layout->left_buttons_has_spacer[i]; ++ if (fgeom->button_layout.left_buttons_has_spacer[n_left]) + ++n_left_spacers; + + ++n_left; +@@ -705,8 +712,9 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout, + theme); + if (right_func_rects[n_right] != NULL) + { +- right_buttons_has_spacer[n_right] = button_layout->right_buttons_has_spacer[i]; +- if (button_layout->right_buttons_has_spacer[i]) ++ fgeom->button_layout.right_buttons[n_right] = button_layout->right_buttons[i]; ++ fgeom->button_layout.right_buttons_has_spacer[n_right] = button_layout->right_buttons_has_spacer[i]; ++ if (fgeom->button_layout.right_buttons_has_spacer[n_right]) + ++n_right_spacers; + + ++n_right; +@@ -770,12 +778,12 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout, + /* First try to remove separators */ + if (n_left_spacers > 0) + { +- left_buttons_has_spacer[--n_left_spacers] = FALSE; ++ fgeom->button_layout.left_buttons_has_spacer[--n_left_spacers] = FALSE; + continue; + } + else if (n_right_spacers > 0) + { +- right_buttons_has_spacer[--n_right_spacers] = FALSE; ++ fgeom->button_layout.right_buttons_has_spacer[--n_right_spacers] = FALSE; + continue; + } + +@@ -839,7 +847,6 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout, + } + + /* Save the button layout */ +- fgeom->button_layout = *button_layout; + fgeom->n_left_buttons = n_left; + fgeom->n_right_buttons = n_right; + +@@ -860,7 +867,7 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout, + + rect = right_func_rects[i]; + rect->visible.x = x - layout->button_border.right - button_width; +- if (right_buttons_has_spacer[i]) ++ if (fgeom->button_layout.right_buttons_has_spacer[i]) + rect->visible.x -= (button_width * 0.75); + + rect->visible.y = button_y; +@@ -919,7 +926,7 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout, + g_memmove (&(rect->clickable), &(rect->visible), sizeof(rect->clickable)); + + x = rect->visible.x + rect->visible.width + layout->button_border.right; +- if (left_buttons_has_spacer[i]) ++ if (fgeom->button_layout.left_buttons_has_spacer[i]) + x += (button_width * 0.75); + + *(left_bg_rects[i]) = rect->visible; +-- +2.1.4 + diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000000000000000000000000000000000000..a93b00c2eea585618fe9e7cbbfef1f46c85a07cb --- /dev/null +++ b/debian/patches/series @@ -0,0 +1 @@ +0001-Fix-buttons-background-when-some-buttons-are-hidden.patch