[gtk+/wip/matthiasc/tab-strip: 5/10] tab strip: Support closable tabs
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/matthiasc/tab-strip: 5/10] tab strip: Support closable tabs
- Date: Sat, 21 May 2016 20:18:55 +0000 (UTC)
commit f01d8b105a9b500711df446d5da87dc5b185ac21
Author: Matthias Clasen <mclasen redhat com>
Date: Fri May 20 22:07:38 2016 -0400
tab strip: Support closable tabs
Add a boolean property to instruct GtkTabStrip to use closable
tabs instead of simple tabs.
gtk/gtktabstrip.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
gtk/gtktabstrip.h | 5 ++++
2 files changed, 58 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtktabstrip.c b/gtk/gtktabstrip.c
index db21a3a..253f7e5 100644
--- a/gtk/gtktabstrip.c
+++ b/gtk/gtktabstrip.c
@@ -21,13 +21,24 @@
#include "gtktabstrip.h"
#include "gtktab.h"
#include "gtksimpletab.h"
+#include "gtkclosabletab.h"
#include "gtkintl.h"
#include "gtkprivate.h"
#include "gtkorientable.h"
+/*
+ * TODO:
+ * - custom tabs
+ * - scrolling
+ * - reordering
+ * - dnd
+ * - other edges
+ */
+
typedef struct
{
GtkStack *stack;
+ gboolean closable;
gboolean in_child_changed;
GdkWindow *event_window;
} GtkTabStripPrivate;
@@ -37,6 +48,7 @@ G_DEFINE_TYPE_WITH_PRIVATE (GtkTabStrip, gtk_tab_strip, GTK_TYPE_BOX)
enum {
PROP_0,
PROP_STACK,
+ PROP_CLOSABLE,
N_PROPS
};
@@ -76,6 +88,10 @@ gtk_tab_strip_get_property (GObject *object,
g_value_set_object (value, gtk_tab_strip_get_stack (self));
break;
+ case PROP_CLOSABLE:
+ g_value_set_boolean (value, gtk_tab_strip_get_closable (self));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -95,6 +111,10 @@ gtk_tab_strip_set_property (GObject *object,
gtk_tab_strip_set_stack (self, g_value_get_object (value));
break;
+ case PROP_CLOSABLE:
+ gtk_tab_strip_set_closable (self, g_value_get_boolean (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -308,6 +328,11 @@ gtk_tab_strip_class_init (GtkTabStripClass *klass)
GTK_TYPE_STACK,
GTK_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+ properties[PROP_CLOSABLE] =
+ g_param_spec_boolean ("closable", P_("Closable"), P_("Whether tabs can be closed"),
+ FALSE,
+ GTK_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+
g_object_class_install_properties (object_class, N_PROPS, properties);
gtk_widget_class_set_css_name (widget_class, "tabs");
@@ -413,6 +438,7 @@ gtk_tab_strip_stack_add (GtkTabStrip *self,
GtkWidget *widget,
GtkStack *stack)
{
+ GtkTabStripPrivate *priv = gtk_tab_strip_get_instance_private (self);
GtkTab *tab;
gint position = 0;
@@ -420,7 +446,7 @@ gtk_tab_strip_stack_add (GtkTabStrip *self,
"position", &position,
NULL);
- tab = g_object_new (GTK_TYPE_SIMPLE_TAB,
+ tab = g_object_new (priv->closable ? GTK_TYPE_CLOSABLE_TAB : GTK_TYPE_SIMPLE_TAB,
"widget", widget,
NULL);
@@ -544,3 +570,29 @@ gtk_tab_strip_set_stack (GtkTabStrip *self,
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_STACK]);
}
+
+void
+gtk_tab_strip_set_closable (GtkTabStrip *self,
+ gboolean closable)
+{
+ GtkTabStripPrivate *priv = gtk_tab_strip_get_instance_private (self);
+
+ g_return_if_fail (GTK_IS_TAB_STRIP (self));
+
+ if (priv->closable == closable)
+ return;
+
+ priv->closable = closable;
+
+ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_CLOSABLE]);
+}
+
+gboolean
+gtk_tab_strip_get_closable (GtkTabStrip *self)
+{
+ GtkTabStripPrivate *priv = gtk_tab_strip_get_instance_private (self);
+
+ g_return_val_if_fail (GTK_IS_TAB_STRIP (self), FALSE);
+
+ return priv->closable;
+}
diff --git a/gtk/gtktabstrip.h b/gtk/gtktabstrip.h
index 377ac56..6f41f18 100644
--- a/gtk/gtktabstrip.h
+++ b/gtk/gtktabstrip.h
@@ -59,6 +59,11 @@ GtkStack *gtk_tab_strip_get_stack (GtkTabStrip *self);
GDK_AVAILABLE_IN_3_22
void gtk_tab_strip_set_stack (GtkTabStrip *self,
GtkStack *stack);
+GDK_AVAILABLE_IN_3_22
+gboolean gtk_tab_strip_get_closable (GtkTabStrip *self);
+GDK_AVAILABLE_IN_3_22
+void gtk_tab_strip_set_closable (GtkTabStrip *self,
+ gboolean closable);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]