This is an automated email from the git hooks/post-receive script.

nomad pushed a commit to branch master
in repository apps/xfdashboard.

commit 78916ca8dda3e6df606aa9fb4c6bc0bdef9e4164
Author: Stephan Haller <no...@froevel.de>
Date:   Fri Jan 15 23:31:00 2016 +0100

    Fix scrolling to ensure a view's child is visible in viewpad especially 
when view changed its size that is will now fits into viewpad completely.
---
 xfdashboard/viewpad.c |   83 ++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 68 insertions(+), 15 deletions(-)

diff --git a/xfdashboard/viewpad.c b/xfdashboard/viewpad.c
index 4efc5a0..813256f 100644
--- a/xfdashboard/viewpad.c
+++ b/xfdashboard/viewpad.c
@@ -53,24 +53,26 @@ G_DEFINE_TYPE_WITH_CODE(XfdashboardViewpad,
 struct _XfdashboardViewpadPrivate
 {
        /* Properties related */
-       gfloat                                  spacing;
-       XfdashboardView                 *activeView;
+       gfloat                                                  spacing;
+       XfdashboardView                                 *activeView;
        XfdashboardVisibilityPolicy             hScrollbarPolicy;
-       gboolean                                hScrollbarVisible;
+       gboolean                                                
hScrollbarVisible;
        XfdashboardVisibilityPolicy             vScrollbarPolicy;
-       gboolean                                vScrollbarVisible;
+       gboolean                                                
vScrollbarVisible;
 
        /* Instance related */
-       XfdashboardViewManager  *viewManager;
+       XfdashboardViewManager                  *viewManager;
 
-       ClutterLayoutManager    *layout;
-       ClutterActor                    *container;
-       ClutterActor                    *hScrollbar;
-       ClutterActor                    *vScrollbar;
+       ClutterLayoutManager                    *layout;
+       ClutterActor                                    *container;
+       ClutterActor                                    *hScrollbar;
+       ClutterActor                                    *vScrollbar;
 
-       guint                                   scrollbarUpdateID;
+       guint                                                   
scrollbarUpdateID;
 
-       gboolean                                doRegisterFocusableViews;
+       gboolean                                                
doRegisterFocusableViews;
+
+       ClutterActorBox                                 *lastAllocation;
 };
 
 /* Properties */
@@ -509,6 +511,7 @@ static gboolean 
_xfdashboard_viewpad_view_needs_scrolling_for_child(XfdashboardV
        ClutterVertex                           transformedUpperLeft;
        ClutterVertex                           transformedLowerRight;
        gfloat                                          x, y, w, h;
+       gboolean                                        viewFitsIntoViewpad;
        gboolean                                        needScrolling;
        gfloat                                          scrollX, scrollY;
 
@@ -517,9 +520,21 @@ static gboolean 
_xfdashboard_viewpad_view_needs_scrolling_for_child(XfdashboardV
        g_return_val_if_fail(CLUTTER_IS_ACTOR(inViewChild), FALSE);
 
        priv=self->priv;
+       viewFitsIntoViewpad=FALSE;
        needScrolling=FALSE;
        scrollX=scrollY=0.0f;
 
+       /* Check if view would fit into this viewpad completely */
+       if(priv->lastAllocation)
+       {
+               clutter_actor_get_size(CLUTTER_ACTOR(inView), &w, &h);
+               if(w<=clutter_actor_box_get_width(priv->lastAllocation) &&
+                       h<=clutter_actor_box_get_height(priv->lastAllocation))
+               {
+                       viewFitsIntoViewpad=TRUE;
+               }
+       }
+
        /* Get position and size of view but respect scrolled position */
        if(inView==priv->activeView)
        {
@@ -541,8 +556,17 @@ static gboolean 
_xfdashboard_viewpad_view_needs_scrolling_for_child(XfdashboardV
                }
 
        /* Check that upper left point of actor is visible otherwise set flag 
for scrolling */
-       origin.x=origin.y=origin.z=0.0f;
-       clutter_actor_apply_relative_transform_to_point(inViewChild, 
CLUTTER_ACTOR(inView), &origin, &transformedUpperLeft);
+       if(!viewFitsIntoViewpad)
+       {
+               origin.x=origin.y=origin.z=0.0f;
+               clutter_actor_apply_relative_transform_to_point(inViewChild, 
CLUTTER_ACTOR(inView), &origin, &transformedUpperLeft);
+       }
+               else
+               {
+                       origin.x=origin.y=origin.z=0.0f;
+                       
clutter_actor_apply_relative_transform_to_point(CLUTTER_ACTOR(inView), 
CLUTTER_ACTOR(self), &origin, &transformedUpperLeft);
+               }
+
        if(transformedUpperLeft.x<x ||
                transformedUpperLeft.x>(x+w) ||
                transformedUpperLeft.y<y ||
@@ -552,8 +576,20 @@ static gboolean 
_xfdashboard_viewpad_view_needs_scrolling_for_child(XfdashboardV
        }
 
        /* Check that lower right point of actor is visible otherwise set flag 
for scrolling */
-       clutter_actor_get_size(inViewChild, &origin.x, &origin.y);
-       clutter_actor_apply_relative_transform_to_point(inViewChild, 
CLUTTER_ACTOR(inView), &origin, &transformedLowerRight);
+       if(!viewFitsIntoViewpad)
+       {
+               origin.z=0.0f;
+               clutter_actor_get_size(inViewChild, &origin.x, &origin.y);
+               clutter_actor_apply_relative_transform_to_point(inViewChild, 
CLUTTER_ACTOR(inView), &origin, &transformedLowerRight);
+       }
+               else
+               {
+                       
origin.x=clutter_actor_box_get_width(priv->lastAllocation);
+                       
origin.y=clutter_actor_box_get_height(priv->lastAllocation);
+                       origin.z=0.0f;
+                       
clutter_actor_apply_relative_transform_to_point(CLUTTER_ACTOR(inView), 
CLUTTER_ACTOR(self), &origin, &transformedLowerRight);
+               }
+
        if(transformedLowerRight.x<x ||
                transformedLowerRight.x>(x+w) ||
                transformedLowerRight.y<y ||
@@ -965,6 +1001,15 @@ static void _xfdashboard_viewpad_allocate(ClutterActor 
*self,
                /* Notify about property change */
                g_object_notify_by_pspec(G_OBJECT(self), 
XfdashboardViewpadProperties[PROP_VSCROLLBAR_VISIBLE]);
        }
+
+       /* Remember this allocation as last one set */
+       if(priv->lastAllocation)
+       {
+               clutter_actor_box_free(priv->lastAllocation);
+               priv->lastAllocation=NULL;
+       }
+
+       priv->lastAllocation=clutter_actor_box_copy(inBox);
 }
 
 /* IMPLEMENTATION: Interface XfdashboardFocusable */
@@ -1058,6 +1103,13 @@ static void _xfdashboard_viewpad_dispose(GObject 
*inObject)
                priv->viewManager=NULL;
        }
 
+       /* Release allocated resources */
+       if(priv->lastAllocation)
+       {
+               clutter_actor_box_free(priv->lastAllocation);
+               priv->lastAllocation=NULL;
+       }
+
        /* Call parent's class dispose method */
        G_OBJECT_CLASS(xfdashboard_viewpad_parent_class)->dispose(inObject);
 }
@@ -1299,6 +1351,7 @@ static void xfdashboard_viewpad_init(XfdashboardViewpad 
*self)
        priv->vScrollbarPolicy=XFDASHBOARD_VISIBILITY_POLICY_AUTOMATIC;
        priv->scrollbarUpdateID=0;
        priv->doRegisterFocusableViews=FALSE;
+       priv->lastAllocation=NULL;
 
        /* Set up this actor */
        clutter_actor_set_reactive(CLUTTER_ACTOR(self), TRUE);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to