[gtk+] GtkSidebar: not a listbox anymore
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkSidebar: not a listbox anymore
- Date: Thu, 2 Oct 2014 02:46:30 +0000 (UTC)
commit a2da26de04cefa871b5ab1a81fb4b946bfa42749
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Oct 1 22:45:30 2014 -0400
GtkSidebar: not a listbox anymore
Applications are not expected to call GtkListBox API on a
sidebar, so don't make it one. Instead, make it have a
listbox.
gtk/gtksidebar.c | 36 +++++++++++++++++++++++-------------
gtk/gtksidebar.h | 7 +++----
2 files changed, 26 insertions(+), 17 deletions(-)
---
diff --git a/gtk/gtksidebar.c b/gtk/gtksidebar.c
index aafdfe9..6c29550 100644
--- a/gtk/gtksidebar.c
+++ b/gtk/gtksidebar.c
@@ -46,12 +46,13 @@
struct _GtkSidebarPrivate
{
+ GtkListBox *list;
GtkStack *stack;
GHashTable *rows;
gboolean in_child_changed;
};
-G_DEFINE_TYPE_WITH_PRIVATE (GtkSidebar, gtk_sidebar, GTK_TYPE_LIST_BOX)
+G_DEFINE_TYPE_WITH_PRIVATE (GtkSidebar, gtk_sidebar, GTK_TYPE_BIN)
enum
{
@@ -154,9 +155,10 @@ sort_list (GtkListBoxRow *row1,
static void
gtk_sidebar_row_selected (GtkListBox *box,
- GtkListBoxRow *row)
+ GtkListBoxRow *row,
+ gpointer userdata)
{
- GtkSidebar *sidebar = GTK_SIDEBAR (box);
+ GtkSidebar *sidebar = GTK_SIDEBAR (userdata);
GtkSidebarPrivate *priv = gtk_sidebar_get_instance_private (sidebar);
GtkWidget *item;
GtkWidget *widget;
@@ -180,13 +182,22 @@ gtk_sidebar_init (GtkSidebar *sidebar)
priv = gtk_sidebar_get_instance_private (sidebar);
- gtk_list_box_set_header_func (GTK_LIST_BOX (sidebar), update_header, sidebar, NULL);
- gtk_list_box_set_sort_func (GTK_LIST_BOX (sidebar), sort_list, sidebar, NULL);
+ priv->list = GTK_LIST_BOX (gtk_list_box_new ());
+
+ _gtk_bin_set_child (GTK_BIN (sidebar), GTK_WIDGET (priv->list));
+ gtk_widget_set_parent (GTK_WIDGET (priv->list), GTK_WIDGET (sidebar));
+ gtk_widget_show (GTK_WIDGET (priv->list));
+ gtk_widget_set_no_show_all (GTK_WIDGET (priv->list), TRUE);
+
+ gtk_list_box_set_header_func (priv->list, update_header, sidebar, NULL);
+ gtk_list_box_set_sort_func (priv->list, sort_list, sidebar, NULL);
+
+ g_signal_connect (priv->list, "row-selected",
+ G_CALLBACK (gtk_sidebar_row_selected), sidebar);
style = gtk_widget_get_style_context (GTK_WIDGET (sidebar));
gtk_style_context_add_class (style, "sidebar");
- /* Store this for later use */
priv->rows = g_hash_table_new (NULL, NULL);
}
@@ -225,7 +236,9 @@ on_position_updated (GtkWidget *widget,
GParamSpec *pspec,
GtkSidebar *sidebar)
{
- gtk_list_box_invalidate_sort (GTK_LIST_BOX (sidebar));
+ GtkSidebarPrivate *priv = gtk_sidebar_get_instance_private (sidebar);
+
+ gtk_list_box_invalidate_sort (priv->list);
}
static void
@@ -279,7 +292,7 @@ add_child (GtkWidget *widget,
g_object_set_data (G_OBJECT (item), "stack-child", widget);
g_hash_table_insert (priv->rows, widget, row);
- gtk_container_add (GTK_CONTAINER (sidebar), row);
+ gtk_container_add (GTK_CONTAINER (priv->list), row);
}
static void
@@ -296,7 +309,7 @@ remove_child (GtkWidget *widget,
g_signal_handlers_disconnect_by_func (widget, on_child_updated, sidebar);
g_signal_handlers_disconnect_by_func (widget, on_position_updated, sidebar);
- gtk_container_remove (GTK_CONTAINER (sidebar), row);
+ gtk_container_remove (GTK_CONTAINER (priv->list), row);
g_hash_table_remove (priv->rows, widget);
}
@@ -330,7 +343,7 @@ on_child_changed (GtkWidget *widget,
if (row != NULL)
{
priv->in_child_changed = TRUE;
- gtk_list_box_select_row (GTK_LIST_BOX (sidebar), GTK_LIST_BOX_ROW (row));
+ gtk_list_box_select_row (priv->list, GTK_LIST_BOX_ROW (row));
priv->in_child_changed = FALSE;
}
}
@@ -402,15 +415,12 @@ static void
gtk_sidebar_class_init (GtkSidebarClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkListBoxClass *list_box_class = GTK_LIST_BOX_CLASS (klass);
object_class->dispose = gtk_sidebar_dispose;
object_class->finalize = gtk_sidebar_finalize;
object_class->set_property = gtk_sidebar_set_property;
object_class->get_property = gtk_sidebar_get_property;
- list_box_class->row_selected = gtk_sidebar_row_selected;
-
obj_properties[PROP_STACK] =
g_param_spec_pointer ("stack", P_("Stack"),
P_("Associated stack for this GtkSidebar"),
diff --git a/gtk/gtksidebar.h b/gtk/gtksidebar.h
index 2f076a6..a2c4d8c 100644
--- a/gtk/gtksidebar.h
+++ b/gtk/gtksidebar.h
@@ -26,8 +26,7 @@
#error "Only <gtk/gtk.h> can be included directly."
#endif
-#include <gtk/gtkwidget.h>
-#include <gtk/gtklistbox.h>
+#include <gtk/gtkbin.h>
#include <gtk/gtkstack.h>
G_BEGIN_DECLS
@@ -45,12 +44,12 @@ typedef struct _GtkSidebarClass GtkSidebarClass;
struct _GtkSidebar
{
- GtkListBox parent;
+ GtkBin parent;
};
struct _GtkSidebarClass
{
- GtkListBoxClass parent_class;
+ GtkBinClass parent_class;
/* Padding for future expansion */
void (*_gtk_reserved1) (void);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]