Merge lp:~cimi/overlay-scrollbar/proximity-separate-function into lp:overlay-scrollbar

Proposed by Ted Gould
Status: Merged
Approved by: Ted Gould
Approved revision: 254
Merged at revision: 254
Proposed branch: lp:~cimi/overlay-scrollbar/proximity-separate-function
Merge into: lp:overlay-scrollbar
Prerequisite: lp:~cimi/overlay-scrollbar/various-namings-and-refactoring
Diff against target: 175 lines (+53/-34)
1 file modified
os/os-scrollbar.c (+53/-34)
To merge this branch: bzr merge lp:~cimi/overlay-scrollbar/proximity-separate-function
Reviewer Review Type Date Requested Status
Ted Gould (community) Approve
Review via email: mp+64689@code.launchpad.net

This proposal supersedes a proposal from 2011-06-15.

Description of the change

fork of lp:~cimi/ayatana-scrollbar/various-namings-and-refactoring, this branch contains a separate proximity function that can be easily extended to support scrollbars on other sides of the scrolled window

To post a comment you must log in.
Revision history for this message
Ted Gould (ted) wrote :

Resubmitted to make that a prereq. branch.

Revision history for this message
Ted Gould (ted) wrote :

+1, love this. Makes the code much easier to read.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'os/os-scrollbar.c'
--- os/os-scrollbar.c 2011-06-15 13:38:57 +0000
+++ os/os-scrollbar.c 2011-06-15 13:38:57 +0000
@@ -50,6 +50,14 @@
50/* Timeout before hiding in ms, after leaving the toplevel. */50/* Timeout before hiding in ms, after leaving the toplevel. */
51#define TIMEOUT_TOPLEVEL_HIDE 20051#define TIMEOUT_TOPLEVEL_HIDE 200
5252
53typedef enum
54{
55 OS_SIDE_TOP,
56 OS_SIDE_BOTTOM,
57 OS_SIDE_LEFT,
58 OS_SIDE_RIGHT
59} OsSide;
60
53struct _OsScrollbarPrivate61struct _OsScrollbarPrivate
54{62{
55 GdkRectangle trough;63 GdkRectangle trough;
@@ -1535,6 +1543,41 @@
1535 return FALSE;1543 return FALSE;
1536}1544}
15371545
1546/* checks if the pointer is in the proximity area. */
1547static gboolean
1548check_proximity (OsScrollbar *scrollbar,
1549 gint x,
1550 gint y,
1551 OsSide side)
1552{
1553 OsScrollbarPrivate *priv;
1554
1555 priv = scrollbar->priv;
1556
1557 switch (side)
1558 {
1559 case OS_SIDE_RIGHT:
1560 return (x >= priv->pager_all.x + priv->pager_all.width - PROXIMITY_SIZE &&
1561 x <= priv->pager_all.x + priv->pager_all.width) &&
1562 (y >= priv->pager_all.y + priv->overlay.y &&
1563 y <= priv->pager_all.y + priv->overlay.y + priv->overlay.height);
1564 break;
1565 case OS_SIDE_BOTTOM:
1566 return (y >= priv->pager_all.y + priv->pager_all.height - PROXIMITY_SIZE &&
1567 y <= priv->pager_all.y + priv->pager_all.height) &&
1568 (x >= priv->pager_all.x + priv->overlay.x &&
1569 x <= priv->pager_all.x + priv->overlay.x + priv->overlay.width);
1570 break;
1571 case OS_SIDE_LEFT:
1572 case OS_SIDE_TOP:
1573 /* FIXME not implemented yet.
1574 * Add support for different scrollbar positions here. */
1575 break;
1576 }
1577
1578 return FALSE;
1579}
1580
1538/* filter function applied to the toplevel window */1581/* filter function applied to the toplevel window */
1539#ifdef USE_GTK31582#ifdef USE_GTK3
1540static GdkFilterReturn1583static GdkFilterReturn
@@ -1549,8 +1592,8 @@
1549 g_return_val_if_fail (OS_SCROLLBAR (user_data), GDK_FILTER_CONTINUE);1592 g_return_val_if_fail (OS_SCROLLBAR (user_data), GDK_FILTER_CONTINUE);
15501593
1551 scrollbar = OS_SCROLLBAR (user_data);1594 scrollbar = OS_SCROLLBAR (user_data);
1552
1553 priv = scrollbar->priv;1595 priv = scrollbar->priv;
1596
1554 xev = gdkxevent;1597 xev = gdkxevent;
15551598
1556 g_return_val_if_fail (priv->pager != NULL, GDK_FILTER_CONTINUE);1599 g_return_val_if_fail (priv->pager != NULL, GDK_FILTER_CONTINUE);
@@ -1577,10 +1620,7 @@
1577 /* proximity area */1620 /* proximity area */
1578 if (priv->orientation == GTK_ORIENTATION_VERTICAL)1621 if (priv->orientation == GTK_ORIENTATION_VERTICAL)
1579 {1622 {
1580 if ((xiev->event_x >= priv->pager_all.x + priv->pager_all.width - PROXIMITY_SIZE &&1623 if (check_proximity (scrollbar, xiev->event_x, xiev->event_y, OS_SIDE_RIGHT))
1581 xiev->event_x <= priv->pager_all.x + priv->pager_all.width) &&
1582 (xiev->event_y >= priv->pager_all.y + priv->overlay.y &&
1583 xiev->event_y <= priv->pager_all.y + priv->overlay.y + priv->overlay.height))
1584 {1624 {
1585 priv->can_hide = FALSE;1625 priv->can_hide = FALSE;
15861626
@@ -1610,10 +1650,7 @@
1610 }1650 }
1611 else1651 else
1612 {1652 {
1613 if ((xiev->event_y >= priv->pager_all.y + priv->pager_all.height - PROXIMITY_SIZE &&1653 if (check_proximity (scrollbar, xiev->event_x, xiev->event_y, OS_SIDE_BOTTOM))
1614 xiev->event_y <= priv->pager_all.y + priv->pager_all.height) &&
1615 (xiev->event_x >= priv->pager_all.x + priv->overlay.x &&
1616 xiev->event_x <= priv->pager_all.x + priv->overlay.x + priv->overlay.width))
1617 {1654 {
1618 priv->can_hide = FALSE;1655 priv->can_hide = FALSE;
16191656
@@ -1704,10 +1741,7 @@
1704 /* proximity area */1741 /* proximity area */
1705 if (priv->orientation == GTK_ORIENTATION_VERTICAL)1742 if (priv->orientation == GTK_ORIENTATION_VERTICAL)
1706 {1743 {
1707 if ((xiev->event_x >= priv->pager_all.x + priv->pager_all.width - PROXIMITY_SIZE &&1744 if (check_proximity (scrollbar, xiev->event_x, xiev->event_y, OS_SIDE_RIGHT))
1708 xiev->event_x <= priv->pager_all.x + priv->pager_all.width) &&
1709 (xiev->event_y >= priv->pager_all.y + priv->overlay.y &&
1710 xiev->event_y <= priv->pager_all.y + priv->overlay.y + priv->overlay.height))
1711 {1745 {
1712 priv->can_hide = FALSE;1746 priv->can_hide = FALSE;
17131747
@@ -1745,10 +1779,7 @@
1745 }1779 }
1746 else1780 else
1747 {1781 {
1748 if ((xiev->event_y >= priv->pager_all.y + priv->pager_all.height - PROXIMITY_SIZE &&1782 if (check_proximity (scrollbar, xiev->event_x, xiev->event_y, OS_SIDE_BOTTOM))
1749 xiev->event_y <= priv->pager_all.y + priv->pager_all.height) &&
1750 (xiev->event_x >= priv->pager_all.x + priv->overlay.x &&
1751 xiev->event_x <= priv->pager_all.x + priv->overlay.x + priv->overlay.width))
1752 {1783 {
1753 priv->can_hide = FALSE;1784 priv->can_hide = FALSE;
17541785
@@ -1803,8 +1834,8 @@
1803 g_return_val_if_fail (OS_SCROLLBAR (user_data), GDK_FILTER_CONTINUE);1834 g_return_val_if_fail (OS_SCROLLBAR (user_data), GDK_FILTER_CONTINUE);
18041835
1805 scrollbar = OS_SCROLLBAR (user_data);1836 scrollbar = OS_SCROLLBAR (user_data);
1806
1807 priv = scrollbar->priv;1837 priv = scrollbar->priv;
1838
1808 xev = gdkxevent;1839 xev = gdkxevent;
18091840
1810 g_return_val_if_fail (priv->pager != NULL, GDK_FILTER_CONTINUE);1841 g_return_val_if_fail (priv->pager != NULL, GDK_FILTER_CONTINUE);
@@ -1825,10 +1856,7 @@
1825 /* proximity area */1856 /* proximity area */
1826 if (priv->orientation == GTK_ORIENTATION_VERTICAL)1857 if (priv->orientation == GTK_ORIENTATION_VERTICAL)
1827 {1858 {
1828 if ((xev->xbutton.x >= priv->pager_all.x + priv->pager_all.width - PROXIMITY_SIZE &&1859 if (check_proximity (scrollbar, xev->xbutton.x, xev->xbutton.y, OS_SIDE_RIGHT))
1829 xev->xbutton.x <= priv->pager_all.x + priv->pager_all.width) &&
1830 (xev->xbutton.y >= priv->pager_all.y + priv->overlay.y &&
1831 xev->xbutton.y <= priv->pager_all.y + priv->overlay.y + priv->overlay.height))
1832 {1860 {
1833 priv->can_hide = FALSE;1861 priv->can_hide = FALSE;
18341862
@@ -1858,10 +1886,7 @@
1858 }1886 }
1859 else1887 else
1860 {1888 {
1861 if ((xev->xbutton.y >= priv->pager_all.y + priv->pager_all.height - PROXIMITY_SIZE &&1889 if (check_proximity (scrollbar, xev->xbutton.x, xev->xbutton.y, OS_SIDE_BOTTOM))
1862 xev->xbutton.y <= priv->pager_all.y + priv->pager_all.height) &&
1863 (xev->xbutton.x >= priv->pager_all.x + priv->overlay.x &&
1864 xev->xbutton.x <= priv->pager_all.x + priv->overlay.x + priv->overlay.width))
1865 {1890 {
1866 priv->can_hide = FALSE;1891 priv->can_hide = FALSE;
18671892
@@ -1949,10 +1974,7 @@
1949 /* proximity area */1974 /* proximity area */
1950 if (priv->orientation == GTK_ORIENTATION_VERTICAL)1975 if (priv->orientation == GTK_ORIENTATION_VERTICAL)
1951 {1976 {
1952 if ((xev->xmotion.x >= priv->pager_all.x + priv->pager_all.width - PROXIMITY_SIZE &&1977 if (check_proximity (scrollbar, xev->xmotion.x, xev->xmotion.y, OS_SIDE_RIGHT))
1953 xev->xmotion.x <= priv->pager_all.x + priv->pager_all.width) &&
1954 (xev->xmotion.y >= priv->pager_all.y + priv->overlay.y &&
1955 xev->xmotion.y <= priv->pager_all.y + priv->overlay.y + priv->overlay.height))
1956 {1978 {
1957 priv->can_hide = FALSE;1979 priv->can_hide = FALSE;
19581980
@@ -1990,10 +2012,7 @@
1990 }2012 }
1991 else2013 else
1992 {2014 {
1993 if ((xev->xmotion.y >= priv->pager_all.y + priv->pager_all.height - PROXIMITY_SIZE &&2015 if (check_proximity (scrollbar, xev->xmotion.x, xev->xmotion.y, OS_SIDE_BOTTOM))
1994 xev->xmotion.y <= priv->pager_all.y + priv->pager_all.height) &&
1995 (xev->xmotion.x >= priv->pager_all.x + priv->overlay.x &&
1996 xev->xmotion.x <= priv->pager_all.x + priv->overlay.x + priv->overlay.width))
1997 {2016 {
1998 priv->can_hide = FALSE;2017 priv->can_hide = FALSE;
19992018

Subscribers

People subscribed via source and target branches