[gtk+/wip/matthiasc/help-overlay] Improve the section name handling
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/matthiasc/help-overlay] Improve the section name handling
- Date: Tue, 13 Oct 2015 12:18:07 +0000 (UTC)
commit a281a6f1595c4f99abceaba87dce8ede7254865f
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Oct 13 08:13:04 2015 -0400
Improve the section name handling
Make it so that you don't have to explicitly specify the initial
section in the ui file - the first one will be shown initially in
that case.
Also fix the case where the section-name property is specified
before the sections are added.
gtk/gtkshortcutswindow.c | 110 ++++++++++++++++++++++++++-------------------
1 files changed, 63 insertions(+), 47 deletions(-)
---
diff --git a/gtk/gtkshortcutswindow.c b/gtk/gtkshortcutswindow.c
index e0104d5..00d7115 100644
--- a/gtk/gtkshortcutswindow.c
+++ b/gtk/gtkshortcutswindow.c
@@ -97,6 +97,48 @@ enum {
static GParamSpec *properties[LAST_PROP];
static guint signals[LAST_SIGNAL];
+
+static gint
+number_of_children (GtkContainer *container)
+{
+ GList *children;
+ gint n;
+
+ children = gtk_container_get_children (container);
+ n = g_list_length (children);
+ g_list_free (children);
+
+ return n;
+}
+
+static void
+update_title_stack (GtkShortcutsWindow *self)
+{
+ GtkShortcutsWindowPrivate *priv = gtk_shortcuts_window_get_instance_private (self);
+ GtkWidget *visible_child;
+
+ visible_child = gtk_stack_get_visible_child (priv->stack);
+
+ if (GTK_IS_SHORTCUTS_SECTION (visible_child))
+ {
+ if (number_of_children (GTK_CONTAINER (priv->stack)) > 3)
+ {
+ const gchar *title;
+ gtk_stack_set_visible_child_name (priv->title_stack, "sections");
+ title = gtk_shortcuts_section_get_title (GTK_SHORTCUTS_SECTION (visible_child));
+ gtk_label_set_label (priv->menu_label, title);
+ }
+ else
+ {
+ gtk_stack_set_visible_child_name (priv->title_stack, "title");
+ }
+ }
+ else if (visible_child != NULL)
+ {
+ gtk_stack_set_visible_child_name (priv->title_stack, "search");
+ }
+}
+
static void
gtk_shortcuts_window_add_section (GtkShortcutsWindow *self,
GtkShortcutsSection *section)
@@ -105,14 +147,19 @@ gtk_shortcuts_window_add_section (GtkShortcutsWindow *self,
GtkListBoxRow *row;
const gchar *title;
const gchar *name;
+ const gchar *visible_section;
GtkWidget *label;
name = gtk_shortcuts_section_get_section_name (section);
title = gtk_shortcuts_section_get_title (section);
- gtk_shortcuts_section_set_view_name (section, priv->view_name);
gtk_stack_add_titled (priv->stack, GTK_WIDGET (section), name, title);
+ visible_section = gtk_stack_get_visible_child_name (priv->stack);
+ if (strcmp (visible_section, "internal-search") == 0 ||
+ (priv->initial_section && strcmp (priv->initial_section, visible_section) == 0))
+ gtk_stack_set_visible_child (priv->stack, GTK_WIDGET (section));
+
row = g_object_new (GTK_TYPE_LIST_BOX_ROW,
"visible", TRUE,
NULL);
@@ -125,6 +172,8 @@ gtk_shortcuts_window_add_section (GtkShortcutsWindow *self,
NULL);
gtk_container_add (GTK_CONTAINER (row), GTK_WIDGET (label));
gtk_container_add (GTK_CONTAINER (priv->list_box), GTK_WIDGET (row));
+
+ update_title_stack (self);
}
static void
@@ -160,47 +209,19 @@ gtk_shortcuts_window_set_view_name (GtkShortcutsWindow *self,
g_list_free (sections);
}
-static gint
-number_of_children (GtkContainer *container)
-{
- GList *children;
- gint n;
-
- children = gtk_container_get_children (container);
- n = g_list_length (children);
- g_list_free (children);
-
- return n;
-}
-
static void
-gtk_shortcuts_window__stack__notify_visible_child (GtkShortcutsWindow *self,
- GParamSpec *pspec,
- GtkStack *stack)
+gtk_shortcuts_window_set_section_name (GtkShortcutsWindow *self,
+ const gchar *section_name)
{
GtkShortcutsWindowPrivate *priv = gtk_shortcuts_window_get_instance_private (self);
- GtkWidget *visible_child;
+ GtkWidget *section;
- visible_child = gtk_stack_get_visible_child (stack);
+ g_free (priv->initial_section);
+ priv->initial_section = g_strdup (section_name);
- if (GTK_IS_SHORTCUTS_SECTION (visible_child))
- {
- if (number_of_children (GTK_CONTAINER (stack)) > 3)
- {
- const gchar *title;
- gtk_stack_set_visible_child_name (priv->title_stack, "sections");
- title = gtk_shortcuts_section_get_title (GTK_SHORTCUTS_SECTION (visible_child));
- gtk_label_set_label (priv->menu_label, title);
- }
- else
- {
- gtk_stack_set_visible_child_name (priv->title_stack, "title");
- }
- }
- else if (visible_child != NULL)
- {
- gtk_stack_set_visible_child_name (priv->title_stack, "search");
- }
+ section = gtk_stack_get_child_by_name (priv->stack, section_name);
+ if (section)
+ gtk_stack_set_visible_child (priv->stack, section);
}
static void
@@ -413,6 +434,7 @@ sections_parser_start_element (GMarkupParseContext *context,
GError **error)
{
ViewsParserData *parser_data = user_data;
+ GtkShortcutsWindowPrivate *priv = gtk_shortcuts_window_get_instance_private (parser_data->self);
GtkWidget *item;
if (g_strcmp0 (element_name, "sections") == 0)
@@ -433,8 +455,8 @@ sections_parser_start_element (GMarkupParseContext *context,
item = g_object_new (GTK_TYPE_SHORTCUTS_SECTION,
"section-name", name,
"visible", TRUE,
+ "view-name", priv->view_name,
NULL);
-
g_queue_push_head (parser_data->stack, g_object_ref_sink (item));
}
else if (g_strcmp0 (element_name, "page") == 0)
@@ -834,14 +856,11 @@ gtk_shortcuts_window_set_property (GObject *object,
GParamSpec *pspec)
{
GtkShortcutsWindow *self = (GtkShortcutsWindow *)object;
- GtkShortcutsWindowPrivate *priv = gtk_shortcuts_window_get_instance_private (self);
switch (prop_id)
{
case PROP_SECTION_NAME:
- g_free (priv->initial_section);
- priv->initial_section = g_value_dup_string (value);
- gtk_stack_set_visible_child_name (priv->stack, g_value_get_string (value));
+ gtk_shortcuts_window_set_section_name (self, g_value_get_string (value));
break;
case PROP_VIEW_NAME:
@@ -1048,11 +1067,8 @@ gtk_shortcuts_window_init (GtkShortcutsWindow *self)
self,
G_CONNECT_SWAPPED);
- g_signal_connect_object (priv->stack,
- "notify::visible-child",
- G_CALLBACK (gtk_shortcuts_window__stack__notify_visible_child),
- self,
- G_CONNECT_SWAPPED);
+ g_signal_connect_object (priv->stack, "notify::visible-child",
+ G_CALLBACK (update_title_stack), self, G_CONNECT_SWAPPED);
scroller = g_object_new (GTK_TYPE_SCROLLED_WINDOW,
"visible", TRUE,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]