[gtk/columnview-reordering: 45/48] columnview: Add a GtkColumnView:reorderable property



commit 11b4e0d4c01f695e876664685ddd07d3f4c5f1df
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Jun 3 12:57:38 2020 -0400

    columnview: Add a GtkColumnView:reorderable property
    
    This property controls if users can reorder columns
    by drag-and-drop. It defaults to TRUE.

 docs/reference/gtk/gtk4-sections.txt |  2 ++
 gtk/gtkcolumnview.c                  | 62 ++++++++++++++++++++++++++++++++++++
 gtk/gtkcolumnview.h                  |  7 ++++
 3 files changed, 71 insertions(+)
---
diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt
index a43604c216..20f8352592 100644
--- a/docs/reference/gtk/gtk4-sections.txt
+++ b/docs/reference/gtk/gtk4-sections.txt
@@ -507,6 +507,8 @@ gtk_column_view_set_show_separators
 gtk_column_view_sort_by_column
 gtk_column_view_set_single_click_activate
 gtk_column_view_get_single_click_activate
+gtk_column_view_set_reorderable
+gtk_column_view_get_reorderable
 <SUBSECTION Standard>
 GTK_COLUMN_VIEW
 GTK_COLUMN_VIEW_CLASS
diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c
index bda7cdbc61..414ca0d83d 100644
--- a/gtk/gtkcolumnview.c
+++ b/gtk/gtkcolumnview.c
@@ -70,6 +70,8 @@ struct _GtkColumnView
 
   GtkAdjustment *hadjustment;
 
+  gboolean reorderable;
+
   gboolean in_column_resize;
   int drag_pos;
   int drag_x;
@@ -92,6 +94,7 @@ enum
   PROP_VADJUSTMENT,
   PROP_VSCROLL_POLICY,
   PROP_SINGLE_CLICK_ACTIVATE,
+  PROP_REORDERABLE,
 
   N_PROPS
 };
@@ -361,6 +364,10 @@ gtk_column_view_get_property (GObject    *object,
       g_value_set_boolean (value, gtk_column_view_get_single_click_activate (self));
       break;
 
+    case PROP_REORDERABLE:
+      g_value_set_boolean (value, gtk_column_view_get_reorderable (self));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -432,6 +439,10 @@ gtk_column_view_set_property (GObject      *object,
       gtk_column_view_set_single_click_activate (self, g_value_get_boolean (value));
       break;
 
+    case PROP_REORDERABLE:
+      gtk_column_view_set_reorderable (self, g_value_get_boolean (value));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -528,6 +539,18 @@ gtk_column_view_class_init (GtkColumnViewClass *klass)
                           FALSE,
                           G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
 
+  /**
+   * GtkColumnView:reorderable:
+   *
+   * Whether columns are reorderable
+   */
+  properties[PROP_REORDERABLE] =
+    g_param_spec_boolean ("reorderable",
+                          P_("Reorderable"),
+                          P_("Whether columns are reorderable"),
+                          TRUE,
+                          G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
   g_object_class_install_properties (gobject_class, N_PROPS, properties);
 
   /**
@@ -726,6 +749,8 @@ gtk_column_view_init (GtkColumnView *self)
                           g_quark_from_static_string (I_("view")));
 
   gtk_widget_set_overflow (GTK_WIDGET (self), GTK_OVERFLOW_HIDDEN);
+
+  self->reorderable = TRUE;
 }
 
 /**
@@ -1081,3 +1106,40 @@ gtk_column_view_get_single_click_activate (GtkColumnView *self)
 
   return gtk_list_view_get_single_click_activate (self->listview);
 }
+
+/**
+ * gtk_column_view_set_reorderable:
+ * @self: a #GtkColumnView
+ * @reorderable: whether columns should be reorderable
+ *
+ * Sets whether columns should be reorderable by dragging.
+ */
+void
+gtk_column_view_set_reorderable (GtkColumnView *self,
+                                 gboolean       reorderable)
+{
+  g_return_if_fail (GTK_IS_COLUMN_VIEW (self));
+
+  if (self->reorderable == reorderable)
+    return;
+
+  self->reorderable = reorderable;
+
+  g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_REORDERABLE]);
+}
+
+/**
+ * gtk_column_view_get_reorderable:
+ * @self: a #GtkColumnView
+ *
+ * Returns whether columns are reorderable.
+ *
+ * Returns: %TRUE if columns are reorderable
+ */
+gboolean
+gtk_column_view_get_reorderable (GtkColumnView *self)
+{
+  g_return_val_if_fail (GTK_IS_COLUMN_VIEW (self), TRUE);
+
+  return self->reorderable;
+}
diff --git a/gtk/gtkcolumnview.h b/gtk/gtkcolumnview.h
index 0866b6449c..5cff5d73dc 100644
--- a/gtk/gtkcolumnview.h
+++ b/gtk/gtkcolumnview.h
@@ -92,6 +92,13 @@ void            gtk_column_view_set_single_click_activate       (GtkColumnView
 GDK_AVAILABLE_IN_ALL
 gboolean        gtk_column_view_get_single_click_activate       (GtkColumnView          *self);
 
+GDK_AVAILABLE_IN_ALL
+void            gtk_column_view_set_reorderable                 (GtkColumnView          *self,
+                                                                 gboolean                reorderable);
+GDK_AVAILABLE_IN_ALL
+gboolean        gtk_column_view_get_reorderable                 (GtkColumnView          *self);
+
+
 G_END_DECLS
 
 #endif  /* __GTK_COLUMN_VIEW_H__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]