[gnome-shell] scroll-view: Support GTK_POLICY_EXTERNAL
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] scroll-view: Support GTK_POLICY_EXTERNAL
- Date: Thu, 30 Oct 2014 11:17:42 +0000 (UTC)
commit 5fca85cd28698576ce5ca9aa1ba9adb4f71ffdf9
Author: Florian Müllner <fmuellner gnome org>
Date: Tue Oct 14 13:50:29 2014 +0200
scroll-view: Support GTK_POLICY_EXTERNAL
GTK+ added a new PolicyType which currently triggers compiler warnings
about unhandled values in switch statements. We also have a use case for
it already, so add support for the new policy type.
https://bugzilla.gnome.org/show_bug.cgi?id=739379
src/st/st-scroll-view.c | 31 +++++++++++++++++++++----------
tests/interactive/scroll-view-sizing.js | 3 +++
2 files changed, 24 insertions(+), 10 deletions(-)
---
diff --git a/src/st/st-scroll-view.c b/src/st/st-scroll-view.c
index 9df8173..b34c783 100644
--- a/src/st/st-scroll-view.c
+++ b/src/st/st-scroll-view.c
@@ -373,6 +373,7 @@ st_scroll_view_get_preferred_width (ClutterActor *actor,
break;
case GTK_POLICY_ALWAYS:
case GTK_POLICY_AUTOMATIC:
+ case GTK_POLICY_EXTERNAL:
/* Should theoretically use the min width of the hscrollbar,
* but that's not cleanly defined at the moment */
min_width = 0;
@@ -382,6 +383,7 @@ st_scroll_view_get_preferred_width (ClutterActor *actor,
switch (priv->vscrollbar_policy)
{
case GTK_POLICY_NEVER:
+ case GTK_POLICY_EXTERNAL:
account_for_vscrollbar = FALSE;
break;
case GTK_POLICY_ALWAYS:
@@ -443,6 +445,7 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
switch (priv->vscrollbar_policy)
{
case GTK_POLICY_NEVER:
+ case GTK_POLICY_EXTERNAL:
break;
case GTK_POLICY_ALWAYS:
case GTK_POLICY_AUTOMATIC:
@@ -454,6 +457,7 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
switch (priv->hscrollbar_policy)
{
case GTK_POLICY_NEVER:
+ case GTK_POLICY_EXTERNAL:
account_for_hscrollbar = FALSE;
break;
case GTK_POLICY_ALWAYS:
@@ -480,6 +484,7 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
break;
case GTK_POLICY_ALWAYS:
case GTK_POLICY_AUTOMATIC:
+ case GTK_POLICY_EXTERNAL:
/* Should theoretically use the min height of the vscrollbar,
* but that's not cleanly defined at the moment */
min_height = 0;
@@ -567,7 +572,7 @@ st_scroll_view_allocate (ClutterActor *actor,
}
else
{
- hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER;
+ hscrollbar_visible = priv->hscrollbar_policy == GTK_POLICY_ALWAYS;
/* try without a vertical scrollbar */
clutter_actor_get_preferred_height (priv->child, avail_width, &child_min_height, NULL);
@@ -576,18 +581,20 @@ st_scroll_view_allocate (ClutterActor *actor,
}
else
{
- vscrollbar_visible = priv->vscrollbar_policy != GTK_POLICY_NEVER;
+ vscrollbar_visible = priv->vscrollbar_policy == GTK_POLICY_ALWAYS;
if (priv->hscrollbar_policy == GTK_POLICY_AUTOMATIC)
hscrollbar_visible = child_min_width > avail_height - (vscrollbar_visible ? 0 : sb_width);
else
- hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER;
+ hscrollbar_visible = priv->hscrollbar_policy == GTK_POLICY_ALWAYS;
}
}
else
{
- hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER;
- vscrollbar_visible = priv->vscrollbar_policy != GTK_POLICY_NEVER;
+ hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER &&
+ priv->hscrollbar_policy != GTK_POLICY_EXTERNAL;
+ vscrollbar_visible = priv->vscrollbar_policy != GTK_POLICY_NEVER &&
+ priv->vscrollbar_policy != GTK_POLICY_EXTERNAL;
}
/* Whether or not we show the scrollbars, if the scrollbars are visible
@@ -629,15 +636,19 @@ st_scroll_view_allocate (ClutterActor *actor,
clutter_actor_allocate (priv->hscroll, &child_box, flags);
- /* In case the scrollbar policy is NEVER or scrollbars should be
- * overlayed, we don't trim the content box allocation by the
- * scrollbar size.
+ /* In case the scrollbar policy is NEVER or EXTERNAL or scrollbars
+ * should be overlayed, we don't trim the content box allocation by
+ * the scrollbar size.
* Fold this into the scrollbar sizes to simplify the rest of the
* computations.
*/
- if (priv->hscrollbar_policy == GTK_POLICY_NEVER || priv->overlay_scrollbars)
+ if (priv->hscrollbar_policy == GTK_POLICY_NEVER ||
+ priv->hscrollbar_policy == GTK_POLICY_EXTERNAL ||
+ priv->overlay_scrollbars)
sb_height = 0;
- if (priv->vscrollbar_policy == GTK_POLICY_NEVER || priv->overlay_scrollbars)
+ if (priv->vscrollbar_policy == GTK_POLICY_NEVER ||
+ priv->vscrollbar_policy == GTK_POLICY_EXTERNAL ||
+ priv->overlay_scrollbars)
sb_width = 0;
/* Child */
diff --git a/tests/interactive/scroll-view-sizing.js b/tests/interactive/scroll-view-sizing.js
index 26039d6..a6d09ea 100644
--- a/tests/interactive/scroll-view-sizing.js
+++ b/tests/interactive/scroll-view-sizing.js
@@ -312,6 +312,9 @@ function test() {
button.label = 'NEVER';
break;
case 'NEVER':
+ button.label = 'EXTERNAL';
+ break;
+ case 'EXTERNAL':
button.label = 'AUTOMATIC';
break;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]