]> git.saurik.com Git - wxWidgets.git/commitdiff
Make wxWindow::HasScrollbar() respect wxScrolled::ShowScrollbars().
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 27 Aug 2013 13:12:38 +0000 (13:12 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 27 Aug 2013 13:12:38 +0000 (13:12 +0000)
Override CanScroll() in wxScrolled to return the real state of the scrollbar
instead of just relying on the wx[HV]SCROLL styles.

Closes #15440.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74714 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/scrolwin.h
include/wx/gtk/scrolwin.h
include/wx/gtk1/scrolwin.h
include/wx/scrolwin.h
src/generic/scrlwing.cpp
src/gtk/scrolwin.cpp
src/gtk1/scrolwin.cpp

index ca51c09146497e5713ebcf3bcb2e97bedfb0c3f0..863cdf923e9f8673a9d13930ff34acde914c8b7b 100644 (file)
@@ -21,6 +21,7 @@ public:
 
     // implement base class pure virtuals
     virtual void AdjustScrollbars();
+    virtual bool IsScrollbarShown(int orient) const;
 
 protected:
     virtual void DoScroll(int x, int y);
index c2fcbfd411a5b26130d666557814221da242b20d..c36040ce8843385eb1cefa282e9c055ff5117e1f 100644 (file)
@@ -29,6 +29,8 @@ public:
                                bool noRefresh = false);
     virtual void AdjustScrollbars();
 
+    virtual bool IsScrollbarShown(int orient) const;
+
 protected:
     virtual void DoScroll(int x, int y);
     virtual void DoShowScrollbars(wxScrollbarVisibility horz,
index d64333e41ece31f153cfdae1772610de356a1f14..28fe92640f61eb950f9093adbb8d8c9a00f71475 100644 (file)
@@ -25,6 +25,7 @@ public:
                                int noUnitsX, int noUnitsY,
                                int xPos = 0, int yPos = 0,
                                bool noRefresh = false);
+    virtual bool IsScrollbarShown(int orient) const;
     virtual void AdjustScrollbars();
 
 protected:
index 637d63b320c03f48f0fda1f204e295e7de5689c1..9c3f1eebbf3151a42fdef917153f567b28099248 100644 (file)
@@ -100,6 +100,9 @@ public:
         DoShowScrollbars(horz, vert);
     }
 
+    // Test whether the specified scrollbar is shown.
+    virtual bool IsScrollbarShown(int orient) const = 0;
+
     // Enable/disable Windows scrolling in either direction. If true, wxWidgets
     // scrolls the canvas and only a bit of the canvas is invalidated; no
     // Clear() is necessary. If false, the whole canvas is invalidated and a
@@ -315,6 +318,8 @@ protected:
 public:                                                                       \
     virtual void PrepareDC(wxDC& dc) { DoPrepareDC(dc); }                     \
     virtual bool Layout() { return ScrollLayout(); }                          \
+    virtual bool CanScroll(int orient) const                                  \
+        { return IsScrollbarShown(orient); }                                  \
     virtual void DoSetVirtualSize(int x, int y)                               \
         { ScrollDoSetVirtualSize(x, y); }                                     \
     virtual wxSize GetBestVirtualSize() const                                 \
index ed7d288d7ea96b31eba93e15936c045eabccb560..ee49a9c6a1cd793c0482fef7ae51bf11978871fd 100644 (file)
@@ -1201,6 +1201,14 @@ wxScrollHelper::wxScrollHelper(wxWindow *winToScroll)
     m_yVisibility = wxSHOW_SB_DEFAULT;
 }
 
+bool wxScrollHelper::IsScrollbarShown(int orient) const
+{
+    wxScrollbarVisibility visibility = orient == wxHORIZONTAL ? m_xVisibility
+                                                              : m_yVisibility;
+
+    return visibility != wxSHOW_SB_NEVER;
+}
+
 void wxScrollHelper::DoShowScrollbars(wxScrollbarVisibility horz,
                                       wxScrollbarVisibility vert)
 {
index 37cf570e1374587d47cf20ba3ab6fb164c25bf4b..9b39077a3dbcaa465dc06c2c63609c6803509be1 100644 (file)
@@ -181,6 +181,23 @@ GtkPolicyType GtkPolicyFromWX(wxScrollbarVisibility visibility)
 
 } // anonymous namespace
 
+bool wxScrollHelper::IsScrollbarShown(int orient) const
+{
+    GtkScrolledWindow * const scrolled = GTK_SCROLLED_WINDOW(m_win->m_widget);
+    if ( !scrolled )
+    {
+        // By default, all windows are scrollable.
+        return true;
+    }
+
+    GtkPolicyType hpolicy, vpolicy;
+    gtk_scrolled_window_get_policy(scrolled, &hpolicy, &vpolicy);
+
+    GtkPolicyType policy = orient == wxHORIZONTAL ? hpolicy : vpolicy;
+
+    return policy != GTK_POLICY_NEVER;
+}
+
 void wxScrollHelper::DoShowScrollbars(wxScrollbarVisibility horz,
                                       wxScrollbarVisibility vert)
 {
index 2c2179cf78646e08c38209b04199e8a46aaef3cf..4d4586697a3cfce6af84a050d752c4c843db1f3a 100644 (file)
@@ -178,6 +178,11 @@ void wxScrollHelper::DoScroll( int x_pos, int y_pos )
                 &m_yScrollPosition);
 }
 
+bool wxScrollHelper::IsScrollbarShown(int WXUNUSED(orient)) const
+{
+    return true;
+}
+
 void wxScrollHelper::DoShowScrollbars(wxScrollbarVisibility WXUNUSED(horz),
                                       wxScrollbarVisibility WXUNUSED(vert))
 {