[Xfce4-commits] [apps/xfdashboard] 01/03: Make XfdashboardDynamicTableLayout stylable and add a new (stylable) property "fixed-columns" to disable dynamic allocation of columns depending on largest width of a visible child and enforce a fixed number of columns. Setting this property to 0 (default) will disable this feature.
noreply at xfce.org
noreply at xfce.org
Fri May 18 11:17:13 CEST 2018
This is an automated email from the git hooks/post-receive script.
n o m a d p u s h e d a c o m m i t t o b r a n c h m a s t e r
in repository apps/xfdashboard.
commit 9c352b2d269862452f26496470455c637c5867fd
Author: Stephan Haller <nomad at froevel.de>
Date: Fri May 18 08:44:49 2018 +0200
Make XfdashboardDynamicTableLayout stylable and add a new (stylable) property "fixed-columns" to disable dynamic allocation of columns depending on largest width of a visible child and enforce a fixed number of columns. Setting this property to 0 (default) will disable this feature.
This commit addresses issue GH #168
---
libxfdashboard/dynamic-table-layout.c | 429 ++++++++++++++++++++++++++++++++--
libxfdashboard/dynamic-table-layout.h | 3 +
2 files changed, 409 insertions(+), 23 deletions(-)
diff --git a/libxfdashboard/dynamic-table-layout.c b/libxfdashboard/dynamic-table-layout.c
index 99a9a9e..84abd8f 100644
--- a/libxfdashboard/dynamic-table-layout.c
+++ b/libxfdashboard/dynamic-table-layout.c
@@ -34,13 +34,18 @@
#include <clutter/clutter.h>
#include <math.h>
+#include <libxfdashboard/stylable.h>
#include <libxfdashboard/compat.h>
/* Define this class in GObject system */
-G_DEFINE_TYPE(XfdashboardDynamicTableLayout,
- xfdashboard_dynamic_table_layout,
- CLUTTER_TYPE_LAYOUT_MANAGER)
+static void _xfdashboard_dynamic_table_layout_stylable_iface_init(XfdashboardStylableInterface *inInterface);
+
+G_DEFINE_TYPE_WITH_CODE(XfdashboardDynamicTableLayout,
+ xfdashboard_dynamic_table_layout,
+ CLUTTER_TYPE_LAYOUT_MANAGER,
+ G_IMPLEMENT_INTERFACE(XFDASHBOARD_TYPE_STYLABLE, _xfdashboard_dynamic_table_layout_stylable_iface_init));
+
/* Private structure - access only by public API if needed */
#define XFDASHBOARD_DYNAMIC_TABLE_LAYOUT_GET_PRIVATE(obj) \
@@ -49,16 +54,19 @@ G_DEFINE_TYPE(XfdashboardDynamicTableLayout,
struct _XfdashboardDynamicTableLayoutPrivate
{
/* Properties related */
- gfloat rowSpacing;
- gfloat columnSpacing;
+ gfloat rowSpacing;
+ gfloat columnSpacing;
/* Instance related */
- gint rows;
- gint columns;
- gint numberChildren;
+ gint numberChildren;
+ gint rows;
+ gint columns;
+ gint fixedColumns;
+
+ GArray *columnCoords;
+ GArray *rowCoords;
- GArray *columnCoords;
- GArray *rowCoords;
+ gpointer container;
};
/* Properties */
@@ -72,6 +80,11 @@ enum
PROP_NUMBER_CHILDREN,
PROP_ROWS,
PROP_COLUMNS,
+ PROP_FIXED_COLUMNS,
+
+ /* From interface: XfdashboardStylable */
+ PROP_STYLE_CLASSES,
+ PROP_STYLE_PSEUDO_CLASSES,
PROP_LAST
};
@@ -80,11 +93,11 @@ static GParamSpec* XfdashboardDynamicTableLayoutProperties[PROP_LAST]={ 0, };
/* IMPLEMENTATION: Private variables and methods */
-/* Updates data needed for layout */
-static void _xfdashboard_dynamic_table_layout_update_layout_data(XfdashboardDynamicTableLayout *self,
- ClutterContainer *inContainer,
- gfloat inWidth,
- gfloat inHeight)
+/* Updates data needed for layout in dynamic mode (dynamic number of columns) */
+static void _xfdashboard_dynamic_table_layout_update_layout_data_dynamic(XfdashboardDynamicTableLayout *self,
+ ClutterContainer *inContainer,
+ gfloat inWidth,
+ gfloat inHeight)
{
XfdashboardDynamicTableLayoutPrivate *priv;
ClutterActorIter iter;
@@ -191,7 +204,7 @@ static void _xfdashboard_dynamic_table_layout_update_layout_data(XfdashboardDyna
g_object_notify_by_pspec(G_OBJECT(self), XfdashboardDynamicTableLayoutProperties[PROP_COLUMNS]);
}
- /* Step four: Determine column and row coordinates */
+ /* Step four: Determine column coordinates */
if(priv->columnCoords)
{
g_array_free(priv->columnCoords, TRUE);
@@ -260,6 +273,202 @@ static void _xfdashboard_dynamic_table_layout_update_layout_data(XfdashboardDyna
g_object_thaw_notify(G_OBJECT(self));
}
+/* Updates data needed for layout in fixed mode (fixed number of columns) */
+static void _xfdashboard_dynamic_table_layout_update_layout_data_fixed(XfdashboardDynamicTableLayout *self,
+ ClutterContainer *inContainer,
+ gfloat inWidth,
+ gfloat inHeight)
+{
+ XfdashboardDynamicTableLayoutPrivate *priv;
+ ClutterActorIter iter;
+ ClutterActor *child;
+ gint numberChildren;
+ gint rows, columns;
+ gfloat childHeight;
+ gfloat fixedWidth;
+ gfloat largestHeight;
+ gint i;
+ gfloat x, y;
+ ClutterRequestMode requestMode;
+
+ g_return_if_fail(XFDASHBOARD_IS_DYNAMIC_TABLE_LAYOUT(self));
+ g_return_if_fail(CLUTTER_IS_CONTAINER(inContainer));
+ g_return_if_fail(CLUTTER_IS_ACTOR(inContainer));
+
+ priv=self->priv;
+
+ /* Freeze notification */
+ g_object_freeze_notify(G_OBJECT(self));
+
+ /* Step one: Get number of visible child actors */
+ numberChildren=0;
+ clutter_actor_iter_init(&iter, CLUTTER_ACTOR(inContainer));
+ while(clutter_actor_iter_next(&iter, &child))
+ {
+ /* Handle only visible actors */
+ if(clutter_actor_is_visible(child))
+ {
+ /* Count visible children */
+ numberChildren++;
+ }
+ }
+
+ if(numberChildren!=priv->numberChildren)
+ {
+ priv->numberChildren=numberChildren;
+ g_object_notify_by_pspec(G_OBJECT(self), XfdashboardDynamicTableLayoutProperties[PROP_NUMBER_CHILDREN]);
+ }
+
+ /* Step two: Get request mode of container to layout. The request will be
+ * overriden if any of given width or height is not set (< 0)
+ */
+ requestMode=clutter_actor_get_request_mode(CLUTTER_ACTOR(inContainer));
+
+ if(inWidth<0.0f) requestMode=CLUTTER_REQUEST_WIDTH_FOR_HEIGHT;
+ else if(inHeight<0.0f) requestMode=CLUTTER_REQUEST_HEIGHT_FOR_WIDTH;
+
+
+ /* Step three: Determine number of rows as number of columns is fixed */
+ rows=0;
+ columns=0;
+ rows=columns=0;
+ if(inWidth<0.0f && inHeight<0.0f)
+ {
+ columns=priv->numberChildren;
+ rows=1;
+ }
+ else if(requestMode==CLUTTER_REQUEST_HEIGHT_FOR_WIDTH)
+ {
+ columns=priv->fixedColumns;
+ rows=ceil((double)priv->numberChildren / (double)columns);
+ }
+ else if(requestMode==CLUTTER_REQUEST_WIDTH_FOR_HEIGHT)
+ {
+ rows=priv->fixedColumns;
+ columns=ceil((double)priv->numberChildren / (double)rows);
+ }
+ else
+ {
+ g_assert_not_reached();
+ }
+
+
+ if(rows!=priv->rows)
+ {
+ priv->rows=rows;
+ g_object_notify_by_pspec(G_OBJECT(self), XfdashboardDynamicTableLayoutProperties[PROP_ROWS]);
+ }
+
+ if(columns!=priv->columns)
+ {
+ priv->columns=columns;
+ g_object_notify_by_pspec(G_OBJECT(self), XfdashboardDynamicTableLayoutProperties[PROP_COLUMNS]);
+ }
+
+ /* Step four: Determine column coordinates */
+ if(priv->columnCoords)
+ {
+ g_array_free(priv->columnCoords, TRUE);
+ priv->columnCoords=NULL;
+ }
+
+ priv->columnCoords=g_array_new(FALSE, FALSE, sizeof(gfloat));
+ x=0.0f;
+ i=0;
+ fixedWidth=(inWidth>0.0f ? inWidth/priv->columns : 0.0f);
+ clutter_actor_iter_init(&iter, CLUTTER_ACTOR(inContainer));
+ while(clutter_actor_iter_next(&iter, &child))
+ {
+ /* Handle only visible actors */
+ if(clutter_actor_is_visible(child))
+ {
+ g_array_append_val(priv->columnCoords, x);
+ x+=(fixedWidth+priv->columnSpacing);
+
+ /* Increase counter for visible children */
+ i++;
+ }
+ }
+
+ g_array_append_val(priv->columnCoords, x);
+
+ /* Step five: Determine row coordinates */
+ if(priv->rowCoords)
+ {
+ g_array_free(priv->rowCoords, TRUE);
+ priv->rowCoords=NULL;
+ }
+
+ priv->rowCoords=g_array_new(FALSE, FALSE, sizeof(gfloat));
+ largestHeight=0.0f;
+ y=-priv->rowSpacing;
+ i=0;
+ clutter_actor_iter_init(&iter, CLUTTER_ACTOR(inContainer));
+ while(clutter_actor_iter_next(&iter, &child))
+ {
+ /* Handle only visible actors */
+ if(clutter_actor_is_visible(child))
+ {
+ /* If it is the first columns in row, calculate y-coordinate
+ * and append it to array.
+ */
+ if((i % priv->columns)==0)
+ {
+ y+=largestHeight+priv->rowSpacing;
+ g_array_append_val(priv->rowCoords, y);
+ largestHeight=0.0f;
+ }
+
+ /* Determine largest height in row */
+ clutter_actor_get_preferred_size(child, NULL, NULL, NULL, &childHeight);
+ largestHeight=MAX(largestHeight, childHeight);
+
+ /* Increase counter for visible children */
+ i++;
+ }
+ }
+
+ y+=largestHeight;
+ g_array_append_val(priv->rowCoords, y);
+
+ /* Thaw notification */
+ g_object_thaw_notify(G_OBJECT(self));
+}
+
+/* Switch to updates data needed for layout in dynamic or fixed mode */
+static void _xfdashboard_dynamic_table_layout_update_layout_data(XfdashboardDynamicTableLayout *self,
+ ClutterContainer *inContainer,
+ gfloat inWidth,
+ gfloat inHeight)
+{
+ XfdashboardDynamicTableLayoutPrivate *priv;
+
+ g_return_if_fail(XFDASHBOARD_IS_DYNAMIC_TABLE_LAYOUT(self));
+ g_return_if_fail(CLUTTER_IS_CONTAINER(inContainer));
+ g_return_if_fail(CLUTTER_IS_ACTOR(inContainer));
+
+ priv=self->priv;
+
+ /* If a fixed number of column is set call the update data function for fixed
+ * mode otherwise the one for dynamic mode.
+ */
+ if(priv->fixedColumns>0)
+ {
+ _xfdashboard_dynamic_table_layout_update_layout_data_fixed(self,
+ inContainer,
+ inWidth,
+ inHeight);
+ }
+ else
+ {
+ _xfdashboard_dynamic_table_layout_update_layout_data_dynamic(self,
+ inContainer,
+ inWidth,
+ inHeight);
+ }
+}
+
+
/* IMPLEMENTATION: ClutterLayoutManager */
/* Get preferred width/height */
@@ -385,6 +594,107 @@ static void _xfdashboard_dynamic_table_layout_allocate(ClutterLayoutManager *sel
}
}
+/* Container was set at this layout manager */
+static void _xfdashboard_dynamic_table_layout_set_container(ClutterLayoutManager *self,
+ ClutterContainer *inContainer)
+{
+ XfdashboardDynamicTableLayoutPrivate *priv;
+
+ g_return_if_fail(XFDASHBOARD_IS_DYNAMIC_TABLE_LAYOUT(self));
+ g_return_if_fail(inContainer==NULL || CLUTTER_IS_CONTAINER(inContainer));
+
+ priv=XFDASHBOARD_DYNAMIC_TABLE_LAYOUT(self)->priv;
+
+ /* Remove weak reference at old container */
+ if(priv->container)
+ {
+ g_object_remove_weak_pointer(G_OBJECT(priv->container), &priv->container);
+ priv->container=NULL;
+ }
+
+ /* Add weak reference at new container */
+ if(inContainer)
+ {
+ priv->container=inContainer;
+ g_object_add_weak_pointer(G_OBJECT(priv->container), &priv->container);
+ }
+
+ /* Invalidate style to get new possible styles applied */
+ xfdashboard_stylable_invalidate(XFDASHBOARD_STYLABLE(self));
+}
+
+
+/* IMPLEMENTATION: Interface XfdashboardStylable */
+
+/* Get stylable properties of this stylable object */
+static void _xfdashboard_dynamic_table_layout_stylable_get_stylable_properties(XfdashboardStylable *inStylable,
+ GHashTable *ioStylableProperties)
+{
+ g_return_if_fail(XFDASHBOARD_IS_STYLABLE(inStylable));
+
+ /* Add stylable properties to hashtable */
+ xfdashboard_stylable_add_stylable_property(inStylable, ioStylableProperties, "fixed-columns");
+}
+
+/* Get parent stylable actor of this stylable object */
+static XfdashboardStylable* _xfdashboard_dynamic_table_layout_stylable_get_parent(XfdashboardStylable *inStylable)
+{
+ XfdashboardDynamicTableLayoutPrivate *priv;
+
+ g_return_val_if_fail(XFDASHBOARD_IS_STYLABLE(inStylable), NULL);
+ g_return_val_if_fail(XFDASHBOARD_IS_DYNAMIC_TABLE_LAYOUT(inStylable), NULL);
+
+ priv=XFDASHBOARD_DYNAMIC_TABLE_LAYOUT(inStylable)->priv;
+
+ /* Check if container set in this layout manager is stylable and return the container as parent */
+ if(priv->container &&
+ XFDASHBOARD_IS_STYLABLE(priv->container))
+ {
+ return(XFDASHBOARD_STYLABLE(priv->container));
+ }
+
+ /* If we get here either no container was set or it is not stylable */
+ return(NULL);
+}
+
+/* Get/set style classes of this stylable object */
+static const gchar* _xfdashboard_dynamic_table_layout_stylable_get_classes(XfdashboardStylable *inStylable)
+{
+ /* Not implemented */
+ return(NULL);
+}
+
+static void _xfdashboard_dynamic_table_layout_stylable_set_classes(XfdashboardStylable *inStylable, const gchar *inStyleClasses)
+{
+ /* Not implemented */
+}
+
+/* Get/set style pseudo-classes of this stylable object */
+static const gchar* _xfdashboard_dynamic_table_layout_stylable_get_pseudo_classes(XfdashboardStylable *inStylable)
+{
+ /* Not implemented */
+ return(NULL);
+}
+
+static void _xfdashboard_dynamic_table_layout_stylable_set_pseudo_classes(XfdashboardStylable *inStylable, const gchar *inStylePseudoClasses)
+{
+ /* Not implemented */
+}
+
+/* Interface initialization
+ * Set up default functions
+ */
+void _xfdashboard_dynamic_table_layout_stylable_iface_init(XfdashboardStylableInterface *iface)
+{
+ iface->get_stylable_properties=_xfdashboard_dynamic_table_layout_stylable_get_stylable_properties;
+ iface->get_parent=_xfdashboard_dynamic_table_layout_stylable_get_parent;
+ iface->get_classes=_xfdashboard_dynamic_table_layout_stylable_get_classes;
+ iface->set_classes=_xfdashboard_dynamic_table_layout_stylable_set_classes;
+ iface->get_pseudo_classes=_xfdashboard_dynamic_table_layout_stylable_get_pseudo_classes;
+ iface->set_pseudo_classes=_xfdashboard_dynamic_table_layout_stylable_set_pseudo_classes;
+}
+
+
/* IMPLEMENTATION: GObject */
/* Dispose this object */
@@ -406,6 +716,12 @@ static void _xfdashboard_dynamic_table_layout_dispose(GObject *inObject)
priv->rowCoords=NULL;
}
+ if(priv->container)
+ {
+ g_object_remove_weak_pointer(G_OBJECT(priv->container), &priv->container);
+ priv->container=NULL;
+ }
+
/* Call parent's class dispose method */
G_OBJECT_CLASS(xfdashboard_dynamic_table_layout_parent_class)->dispose(inObject);
}
@@ -428,6 +744,10 @@ static void _xfdashboard_dynamic_table_layout_set_property(GObject *inObject,
xfdashboard_dynamic_table_layout_set_column_spacing(self, g_value_get_float(inValue));
break;
+ case PROP_FIXED_COLUMNS:
+ xfdashboard_dynamic_table_layout_set_fixed_columns(self, g_value_get_int(inValue));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
break;
@@ -463,6 +783,10 @@ static void _xfdashboard_dynamic_table_layout_get_property(GObject *inObject,
g_value_set_int(outValue, self->priv->columns);
break;
+ case PROP_FIXED_COLUMNS:
+ g_value_set_int(outValue, self->priv->fixedColumns);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
break;
@@ -475,10 +799,13 @@ static void _xfdashboard_dynamic_table_layout_get_property(GObject *inObject,
*/
static void xfdashboard_dynamic_table_layout_class_init(XfdashboardDynamicTableLayoutClass *klass)
{
- ClutterLayoutManagerClass *layoutClass=CLUTTER_LAYOUT_MANAGER_CLASS(klass);
- GObjectClass *gobjectClass=G_OBJECT_CLASS(klass);
+ ClutterLayoutManagerClass *layoutClass=CLUTTER_LAYOUT_MANAGER_CLASS(klass);
+ GObjectClass *gobjectClass=G_OBJECT_CLASS(klass);
+ XfdashboardStylableInterface *stylableIface;
+ GParamSpec *paramSpec;
/* Override functions */
+ layoutClass->set_container=_xfdashboard_dynamic_table_layout_set_container;
layoutClass->get_preferred_width=_xfdashboard_dynamic_table_layout_get_preferred_width;
layoutClass->get_preferred_height=_xfdashboard_dynamic_table_layout_get_preferred_height;
layoutClass->allocate=_xfdashboard_dynamic_table_layout_allocate;
@@ -487,6 +814,8 @@ static void xfdashboard_dynamic_table_layout_class_init(XfdashboardDynamicTableL
gobjectClass->set_property=_xfdashboard_dynamic_table_layout_set_property;
gobjectClass->get_property=_xfdashboard_dynamic_table_layout_get_property;
+ stylableIface=g_type_default_interface_ref(XFDASHBOARD_TYPE_STYLABLE);
+
/* Set up private structure */
g_type_class_add_private(klass, sizeof(XfdashboardDynamicTableLayoutPrivate));
@@ -510,7 +839,7 @@ static void xfdashboard_dynamic_table_layout_class_init(XfdashboardDynamicTableL
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
XfdashboardDynamicTableLayoutProperties[PROP_NUMBER_CHILDREN]=
- g_param_spec_float("number-children",
+ g_param_spec_int("number-children",
_("Number children"),
_("Current number of child actors in this layout"),
0,
@@ -519,7 +848,7 @@ static void xfdashboard_dynamic_table_layout_class_init(XfdashboardDynamicTableL
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
XfdashboardDynamicTableLayoutProperties[PROP_ROWS]=
- g_param_spec_float("rows",
+ g_param_spec_int("rows",
_("Rows"),
_("Current number of rows in this layout"),
0,
@@ -528,15 +857,35 @@ static void xfdashboard_dynamic_table_layout_class_init(XfdashboardDynamicTableL
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
XfdashboardDynamicTableLayoutProperties[PROP_COLUMNS]=
- g_param_spec_float("columns",
+ g_param_spec_int("columns",
_("Columns"),
_("Current number of columns in this layout"),
0,
G_MAXINT,
0,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
-
+
+ XfdashboardDynamicTableLayoutProperties[PROP_FIXED_COLUMNS]=
+ g_param_spec_int("fixed-columns",
+ _("Fixed columns"),
+ _("Fixed number of columns to use in this layout"),
+ 0,
+ G_MAXINT,
+ 0,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ paramSpec=g_object_interface_find_property(stylableIface, "style-classes");
+ XfdashboardDynamicTableLayoutProperties[PROP_STYLE_CLASSES]=
+ g_param_spec_override("style-classes", paramSpec);
+
+ paramSpec=g_object_interface_find_property(stylableIface, "style-pseudo-classes");
+ XfdashboardDynamicTableLayoutProperties[PROP_STYLE_PSEUDO_CLASSES]=
+ g_param_spec_override("style-pseudo-classes", paramSpec);
+
g_object_class_install_properties(gobjectClass, PROP_LAST, XfdashboardDynamicTableLayoutProperties);
+
+ /* Release allocated resources */
+ g_type_default_interface_unref(stylableIface);
}
/* Object initialization
@@ -552,11 +901,16 @@ static void xfdashboard_dynamic_table_layout_init(XfdashboardDynamicTableLayout
priv->rowSpacing=0.0f;
priv->columnSpacing=0.0f;
+ priv->numberChildren=0;
priv->rows=0;
priv->columns=0;
- priv->numberChildren=0;
+ priv->fixedColumns=0;
priv->columnCoords=NULL;
priv->rowCoords=NULL;
+ priv->container=NULL;
+
+ /* Style content */
+ xfdashboard_stylable_invalidate(XFDASHBOARD_STYLABLE(self));
}
/* IMPLEMENTATION: Public API */
@@ -673,3 +1027,32 @@ void xfdashboard_dynamic_table_layout_set_column_spacing(XfdashboardDynamicTable
clutter_layout_manager_layout_changed(CLUTTER_LAYOUT_MANAGER(self));
}
}
+
+/* Get/set fixed number of columns */
+gint xfdashboard_dynamic_table_layout_get_fixed_columns(XfdashboardDynamicTableLayout *self)
+{
+ g_return_val_if_fail(XFDASHBOARD_IS_DYNAMIC_TABLE_LAYOUT(self), 0.0f);
+
+ return(self->priv->fixedColumns);
+}
+
+void xfdashboard_dynamic_table_layout_set_fixed_columns(XfdashboardDynamicTableLayout *self, gint inColumns)
+{
+ XfdashboardDynamicTableLayoutPrivate *priv;
+
+ g_return_if_fail(XFDASHBOARD_IS_DYNAMIC_TABLE_LAYOUT(self));
+ g_return_if_fail(inColumns>=0);
+
+ priv=self->priv;
+
+ /* Set new value if changed */
+ if(priv->fixedColumns!=inColumns)
+ {
+ /* Set new value and notify about property change */
+ priv->fixedColumns=inColumns;
+ g_object_notify_by_pspec(G_OBJECT(self), XfdashboardDynamicTableLayoutProperties[PROP_FIXED_COLUMNS]);
+
+ /* Notify for upcoming layout changes */
+ clutter_layout_manager_layout_changed(CLUTTER_LAYOUT_MANAGER(self));
+ }
+}
diff --git a/libxfdashboard/dynamic-table-layout.h b/libxfdashboard/dynamic-table-layout.h
index b414601..508ed8b 100644
--- a/libxfdashboard/dynamic-table-layout.h
+++ b/libxfdashboard/dynamic-table-layout.h
@@ -80,6 +80,9 @@ void xfdashboard_dynamic_table_layout_set_row_spacing(XfdashboardDynamicTableLay
gfloat xfdashboard_dynamic_table_layout_get_column_spacing(XfdashboardDynamicTableLayout *self);
void xfdashboard_dynamic_table_layout_set_column_spacing(XfdashboardDynamicTableLayout *self, gfloat inSpacing);
+gint xfdashboard_dynamic_table_layout_get_fixed_columns(XfdashboardDynamicTableLayout *self);
+void xfdashboard_dynamic_table_layout_set_fixed_columns(XfdashboardDynamicTableLayout *self, gint inColumns);
+
G_END_DECLS
#endif /* __LIBXFDASHBOARD_DYNAMIC_TABLE_LAYOUT__ */
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list