aboutsummaryrefslogtreecommitdiff
path: root/src/FbWinFrame.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/FbWinFrame.cc')
-rw-r--r--src/FbWinFrame.cc67
1 files changed, 60 insertions, 7 deletions
diff --git a/src/FbWinFrame.cc b/src/FbWinFrame.cc
index 36d2942..c7eaef3 100644
--- a/src/FbWinFrame.cc
+++ b/src/FbWinFrame.cc
@@ -85,7 +85,6 @@ FbWinFrame::FbWinFrame(BScreen &screen,
85 m_visible(false), 85 m_visible(false),
86 m_button_pm(0), 86 m_button_pm(0),
87 m_tabmode(screen.getDefaultInternalTabs()?INTERNAL:EXTERNAL), 87 m_tabmode(screen.getDefaultInternalTabs()?INTERNAL:EXTERNAL),
88 m_active_gravity(0),
89 m_active_orig_client_bw(0), 88 m_active_orig_client_bw(0),
90 m_need_render(true), 89 m_need_render(true),
91 m_button_size(1), 90 m_button_size(1),
@@ -846,7 +845,7 @@ void FbWinFrame::reconfigure() {
846 845
847 int grav_x=0, grav_y=0; 846 int grav_x=0, grav_y=0;
848 // negate gravity 847 // negate gravity
849 gravityTranslate(grav_x, grav_y, -m_active_gravity, m_active_orig_client_bw, false); 848 gravityTranslate(grav_x, grav_y, -sizeHints().win_gravity, m_active_orig_client_bw, false);
850 849
851 m_bevel = theme()->bevelWidth(); 850 m_bevel = theme()->bevelWidth();
852 setBorderWidth(); 851 setBorderWidth();
@@ -941,7 +940,7 @@ void FbWinFrame::reconfigure() {
941 m_window.width(), client_height); 940 m_window.width(), client_height);
942 } 941 }
943 942
944 gravityTranslate(grav_x, grav_y, m_active_gravity, m_active_orig_client_bw, false); 943 gravityTranslate(grav_x, grav_y, sizeHints().win_gravity, m_active_orig_client_bw, false);
945 // if the location changes, shift it 944 // if the location changes, shift it
946 if (grav_x != 0 || grav_y != 0) 945 if (grav_x != 0 || grav_y != 0)
947 move(grav_x + x(), grav_y + y()); 946 move(grav_x + x(), grav_y + y());
@@ -1456,7 +1455,7 @@ bool FbWinFrame::useHandle() const {
1456void FbWinFrame::applyDecorations() { 1455void FbWinFrame::applyDecorations() {
1457 int grav_x=0, grav_y=0; 1456 int grav_x=0, grav_y=0;
1458 // negate gravity 1457 // negate gravity
1459 gravityTranslate(grav_x, grav_y, -m_active_gravity, m_active_orig_client_bw, 1458 gravityTranslate(grav_x, grav_y, -sizeHints().win_gravity, m_active_orig_client_bw,
1460 false); 1459 false);
1461 1460
1462 bool client_move = setBorderWidth(false); 1461 bool client_move = setBorderWidth(false);
@@ -1488,7 +1487,7 @@ void FbWinFrame::applyDecorations() {
1488 client_move |= hideHandle(); 1487 client_move |= hideHandle();
1489 1488
1490 // apply gravity once more 1489 // apply gravity once more
1491 gravityTranslate(grav_x, grav_y, m_active_gravity, m_active_orig_client_bw, 1490 gravityTranslate(grav_x, grav_y, sizeHints().win_gravity, m_active_orig_client_bw,
1492 false); 1491 false);
1493 1492
1494 // if the location changes, shift it 1493 // if the location changes, shift it
@@ -1523,7 +1522,7 @@ bool FbWinFrame::setBorderWidth(bool do_move) {
1523 int grav_x=0, grav_y=0; 1522 int grav_x=0, grav_y=0;
1524 // negate gravity 1523 // negate gravity
1525 if (do_move) 1524 if (do_move)
1526 gravityTranslate(grav_x, grav_y, -m_active_gravity, 1525 gravityTranslate(grav_x, grav_y, -sizeHints().win_gravity,
1527 m_active_orig_client_bw, false); 1526 m_active_orig_client_bw, false);
1528 1527
1529 int bw_changes = 0; 1528 int bw_changes = 0;
@@ -1551,7 +1550,7 @@ bool FbWinFrame::setBorderWidth(bool do_move) {
1551 1550
1552 if (do_move) { 1551 if (do_move) {
1553 frameExtentSig().notify(); 1552 frameExtentSig().notify();
1554 gravityTranslate(grav_x, grav_y, m_active_gravity, 1553 gravityTranslate(grav_x, grav_y, sizeHints().win_gravity,
1555 m_active_orig_client_bw, false); 1554 m_active_orig_client_bw, false);
1556 // if the location changes, shift it 1555 // if the location changes, shift it
1557 if (grav_x != 0 || grav_y != 0) 1556 if (grav_x != 0 || grav_y != 0)
@@ -1725,6 +1724,60 @@ void FbWinFrame::displaySize(unsigned int width, unsigned int height) const {
1725 m_screen.showGeometry(i, j); 1724 m_screen.showGeometry(i, j);
1726} 1725}
1727 1726
1727void FbWinFrame::SizeHints::reset(const XSizeHints &sizehint) {
1728 if (sizehint.flags & PMinSize) {
1729 min_width = sizehint.min_width;
1730 min_height = sizehint.min_height;
1731 } else
1732 min_width = min_height = 1;
1733
1734 if (sizehint.flags & PBaseSize) {
1735 base_width = sizehint.base_width;
1736 base_height = sizehint.base_height;
1737 if (!(sizehint.flags & PMinSize)) {
1738 min_width = base_width;
1739 min_height = base_height;
1740 }
1741 } else
1742 base_width = base_height = 0;
1743
1744 if (sizehint.flags & PMaxSize) {
1745 max_width = sizehint.max_width;
1746 max_height = sizehint.max_height;
1747 } else
1748 max_width = max_height = 0; // unbounded
1749
1750 if (sizehint.flags & PResizeInc) {
1751 width_inc = sizehint.width_inc;
1752 height_inc = sizehint.height_inc;
1753 } else
1754 width_inc = height_inc = 1;
1755
1756 if (sizehint.flags & PAspect) {
1757 min_aspect_x = sizehint.min_aspect.x;
1758 min_aspect_y = sizehint.min_aspect.y;
1759 max_aspect_x = sizehint.max_aspect.x;
1760 max_aspect_y = sizehint.max_aspect.y;
1761 } else
1762 min_aspect_x = min_aspect_y = max_aspect_x = max_aspect_y = 0;
1763
1764 if (sizehint.flags & PWinGravity)
1765 win_gravity = sizehint.win_gravity;
1766 else
1767 win_gravity = NorthWestGravity;
1768
1769 // some sanity checks
1770 if (width_inc == 0)
1771 width_inc = 1;
1772 if (height_inc == 0)
1773 height_inc = 1;
1774
1775 if (base_width > min_width)
1776 min_width = base_width;
1777 if (base_height > min_height)
1778 min_height = base_height;
1779}
1780
1728/* For aspect ratios 1781/* For aspect ratios
1729 Note that its slightly simplified in that only the 1782 Note that its slightly simplified in that only the
1730 line gradient is given - this is because for aspect 1783 line gradient is given - this is because for aspect