From 7343cec577a91dde6cc985a9ef77a3f8af7426b2 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 16 Oct 2015 16:01:28 -0400 Subject: [PATCH] Finish up help overlay work This commit makes the various types public and adds documentation. --- docs/reference/gtk/Makefile.am | 5 +- docs/reference/gtk/gtk-docs.sgml | 10 +- docs/reference/gtk/gtk3-sections.txt | 64 +++++++ docs/reference/gtk/gtk3.types.in | 7 +- .../gtk/images/builder-shortcuts.png | Bin 0 -> 74526 bytes .../reference/gtk/images/clocks-shortcuts.png | Bin 0 -> 26017 bytes gtk/Makefile.am | 6 +- gtk/gtk.h | 4 + gtk/gtkshortcutsgesture.c | 174 ++++++++++++------ ...gestureprivate.h => gtkshortcutsgesture.h} | 2 +- gtk/gtkshortcutsgroup.c | 76 +++++++- ...cutsgroupprivate.h => gtkshortcutsgroup.h} | 1 + gtk/gtkshortcutssection.c | 68 ++++++- ...sectionprivate.h => gtkshortcutssection.h} | 6 +- gtk/gtkshortcutsshortcut.c | 82 +++++++-- ...ortcutprivate.h => gtkshortcutsshortcut.h} | 1 + gtk/gtkshortcutswindow.c | 100 ++++++++-- gtk/gtkshortcutswindow.h | 1 + 18 files changed, 507 insertions(+), 100 deletions(-) create mode 100644 docs/reference/gtk/images/builder-shortcuts.png create mode 100644 docs/reference/gtk/images/clocks-shortcuts.png rename gtk/{gtkshortcutsgestureprivate.h => gtkshortcutsgesture.h} (98%) rename gtk/{gtkshortcutsgroupprivate.h => gtkshortcutsgroup.h} (98%) rename gtk/{gtkshortcutssectionprivate.h => gtkshortcutssection.h} (96%) rename gtk/{gtkshortcutsshortcutprivate.h => gtkshortcutsshortcut.h} (98%) diff --git a/docs/reference/gtk/Makefile.am b/docs/reference/gtk/Makefile.am index 63cd349c72..ce6d6e2533 100644 --- a/docs/reference/gtk/Makefile.am +++ b/docs/reference/gtk/Makefile.am @@ -470,7 +470,10 @@ HTML_IMAGES = \ $(srcdir)/images/getting-started-app10.png \ $(srcdir)/images/exampleapp.png \ $(srcdir)/images/flow-box.png \ - $(srcdir)/images/inspector.png + $(srcdir)/images/inspector.png \ + $(srcdir)/images/gedit-shortcuts.png \ + $(srcdir)/images/clocks-shortcuts.png \ + $(srcdir)/images/builder-shortcuts.png if ENABLE_DOC_CROSS_REFERENCES # Extra options to supply to gtkdoc-fixref diff --git a/docs/reference/gtk/gtk-docs.sgml b/docs/reference/gtk/gtk-docs.sgml index 8f0402f6ef..3b975641be 100644 --- a/docs/reference/gtk/gtk-docs.sgml +++ b/docs/reference/gtk/gtk-docs.sgml @@ -239,6 +239,15 @@ + + Shortcuts Overview + + + + + + + Miscellaneous @@ -253,7 +262,6 @@ - diff --git a/docs/reference/gtk/gtk3-sections.txt b/docs/reference/gtk/gtk3-sections.txt index 6a4cdca031..f4482e1378 100644 --- a/docs/reference/gtk/gtk3-sections.txt +++ b/docs/reference/gtk/gtk3-sections.txt @@ -8426,6 +8426,70 @@ gtk_gl_area_get_type
gtkshortcutswindow GtkShortcutsWindow + +GTK_TYPE_SHORTCUTS_WINDOW +GTK_SHORTCUTS_WINDOW +GTK_IS_SHORTCUTS_WINDOW +GTK_SHORTCUTS_WINDOW_CLASS +GTK_IS_SHORTCUTS_WINDOW_CLASS +GTK_GET_SHORTCUTS_WINDOW_CLASS gtk_shortcuts_window_get_type
+ +
+gtkshortcutssection +GtkShortcutsSection + +GTK_TYPE_SHORTCUTS_SECTION +GTK_SHORTCUTS_SECTION +GTK_IS_SHORTCUTS_SECTION +GTK_SHORTCUTS_SECTION_CLASS +GTK_IS_SHORTCUTS_SECTION_CLASS +GTK_GET_SHORTCUTS_SECTION_CLASS + +gtk_shortcuts_section_get_type +
+ +
+gtkshortcutsgroup +GtkShortcutsGroup + +GTK_TYPE_SHORTCUTS_GROUP +GTK_SHORTCUTS_GROUP +GTK_IS_SHORTCUTS_GROUP +GTK_SHORTCUTS_GROUP_CLASS +GTK_IS_SHORTCUTS_GROUP_CLASS +GTK_GET_SHORTCUTS_GROUP_CLASS + +gtk_shortcuts_group_get_type +
+ +
+gtkshortcutsshortcut +GtkShortcutsShortcut + +GTK_TYPE_SHORTCUTS_SHORTCUT +GTK_SHORTCUTS_SHORTCUT +GTK_IS_SHORTCUTS_SHORTCUT +GTK_SHORTCUTS_SHORTCUT_CLASS +GTK_IS_SHORTCUTS_SHORTCUT_CLASS +GTK_GET_SHORTCUTS_SHORTCUT_CLASS + + +gtk_shortcuts_shortcut_get_type +
+ +
+gtkshortcutsgesture +GtkShortcutsGesture + +GTK_TYPE_SHORTCUTS_GESTURE +GTK_SHORTCUTS_GESTURE +GTK_IS_SHORTCUTS_GESTURE +GTK_SHORTCUTS_GESTURE_CLASS +GTK_IS_SHORTCUTS_GESTURE_CLASS +GTK_GET_SHORTCUTS_GESTURE_CLASS + +gtk_shortcuts_gesture_get_type +
diff --git a/docs/reference/gtk/gtk3.types.in b/docs/reference/gtk/gtk3.types.in index 4b206223e8..93e42dcc12 100644 --- a/docs/reference/gtk/gtk3.types.in +++ b/docs/reference/gtk/gtk3.types.in @@ -173,12 +173,17 @@ gtk_separator_get_type gtk_separator_menu_item_get_type gtk_separator_tool_item_get_type gtk_settings_get_type -gtk_stack_sidebar_get_type +gtk_shortcuts_window_get_type +gtk_shortcuts_section_get_type +gtk_shortcuts_group_get_type +gtk_shortcuts_shortcut_get_type +gtk_shortcuts_gesture_get_type gtk_size_group_get_type @ENABLE_ON_X11@gtk_socket_get_type gtk_spin_button_get_type gtk_spinner_get_type gtk_stack_get_type +gtk_stack_sidebar_get_type gtk_stack_switcher_get_type gtk_statusbar_get_type gtk_status_icon_get_type diff --git a/docs/reference/gtk/images/builder-shortcuts.png b/docs/reference/gtk/images/builder-shortcuts.png new file mode 100644 index 0000000000000000000000000000000000000000..639a1d3c372812ccf6823cfae08863919812c780 GIT binary patch literal 74526 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 HrI`dv5`t9${ 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Ƿ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

(Y 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≫?@NhJ@kvu5sUbdfR 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 T&u7a*Ze2`B`g!KlS0DceB!WvV literal 0 HcmV?d00001 diff --git a/docs/reference/gtk/images/clocks-shortcuts.png b/docs/reference/gtk/images/clocks-shortcuts.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab2d5a71f3b72bbcac5e6ea67978ce306741c1a GIT binary patch literal 26017 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

B#ZXY4?4Rb;|Q9a7BIb+@vXL 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 literal 0 HcmV?d00001 diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 13ec0ddf36..45af8fbbb2 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -269,6 +269,10 @@ gtk_public_h_sources = \ gtkseparatormenuitem.h \ gtkseparatortoolitem.h \ gtksettings.h \ + gtkshortcutsgesture.h \ + gtkshortcutsgroup.h \ + gtkshortcutssection.h \ + gtkshortcutsshortcut.h \ gtkshortcutswindow.h \ gtkshow.h \ gtkstacksidebar.h \ @@ -507,10 +511,8 @@ gtk_private_h_sources = \ gtksidebarrowprivate.h \ gtksettingsprivate.h \ gtkshortcutsgestureprivate.h \ - gtkshortcutsgrouprivate.h \ gtkshortcutlabelprivate.h \ gtkshortcutsshortcutprivate.h \ - gtkshortcutssectionprivate.h \ gtksizegroup-private.h \ gtksizerequestcacheprivate.h \ gtksocketprivate.h \ diff --git a/gtk/gtk.h b/gtk/gtk.h index 3163d60bb2..ae556d4847 100644 --- a/gtk/gtk.h +++ b/gtk/gtk.h @@ -183,6 +183,10 @@ #include #include #include +#include +#include +#include +#include #include #include #include diff --git a/gtk/gtkshortcutsgesture.c b/gtk/gtkshortcutsgesture.c index c0c7f527cf..0889da66c8 100644 --- a/gtk/gtkshortcutsgesture.c +++ b/gtk/gtkshortcutsgesture.c @@ -18,7 +18,7 @@ #include "config.h" -#include "gtkshortcutsgestureprivate.h" +#include "gtkshortcutsgesture.h" #include "gtkimage.h" #include "gtklabel.h" #include "gtksizegroup.h" @@ -27,6 +27,16 @@ #include "gtkprivate.h" #include "gtkintl.h" +/** + * SECTION:gtkshortcutsgesture + * @Title: GtkShortcutsGesture + * @Short_description: Represents a gesture in a GtkShortcutsWindow + * + * A GtkShortcutsGesture represents a single gesture with an image + * an a short text. + * + * This widget is only meant to be used with #GtkShortcutsWindow. + */ struct _GtkShortcutsGesture { GtkBox parent_instance; @@ -34,9 +44,9 @@ struct _GtkShortcutsGesture GtkImage *image; GtkLabel *title; GtkLabel *subtitle; - GtkBox *desc_box; + GtkBox *title_box; - GtkSizeGroup *desc_size_group; + GtkSizeGroup *title_size_group; GtkSizeGroup *icon_size_group; }; @@ -49,26 +59,26 @@ G_DEFINE_TYPE (GtkShortcutsGesture, gtk_shortcuts_gesture, GTK_TYPE_BOX) enum { PROP_0, - PROP_DESC_SIZE_GROUP, PROP_ICON, - PROP_ICON_SIZE_GROUP, - PROP_SUBTITLE, PROP_TITLE, + PROP_SUBTITLE, + PROP_ICON_SIZE_GROUP, + PROP_TITLE_SIZE_GROUP, LAST_PROP }; static GParamSpec *properties[LAST_PROP]; static void -gtk_shortcuts_gesture_set_desc_size_group (GtkShortcutsGesture *self, - GtkSizeGroup *group) +gtk_shortcuts_gesture_set_title_size_group (GtkShortcutsGesture *self, + GtkSizeGroup *group) { - if (self->desc_size_group) - gtk_size_group_remove_widget (self->desc_size_group, GTK_WIDGET (self->desc_box)); + if (self->title_size_group) + gtk_size_group_remove_widget (self->title_size_group, GTK_WIDGET (self->title_box)); if (group) - gtk_size_group_add_widget (group, GTK_WIDGET (self->desc_box)); + gtk_size_group_add_widget (group, GTK_WIDGET (self->title_box)); - g_set_object (&self->desc_size_group, group); + g_set_object (&self->title_size_group, group); } static void @@ -100,14 +110,6 @@ gtk_shortcuts_gesture_get_property (GObject *object, switch (prop_id) { - case PROP_SUBTITLE: - g_value_set_string (value, gtk_label_get_label (self->subtitle)); - break; - - case PROP_TITLE: - g_value_set_string (value, gtk_label_get_label (self->title)); - break; - case PROP_ICON: { GIcon *icon; @@ -117,6 +119,14 @@ gtk_shortcuts_gesture_get_property (GObject *object, } break; + case PROP_TITLE: + g_value_set_string (value, gtk_label_get_label (self->title)); + break; + + case PROP_SUBTITLE: + g_value_set_string (value, gtk_label_get_label (self->subtitle)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -132,24 +142,24 @@ gtk_shortcuts_gesture_set_property (GObject *object, switch (prop_id) { - case PROP_DESC_SIZE_GROUP: - gtk_shortcuts_gesture_set_desc_size_group (self, GTK_SIZE_GROUP (g_value_get_object (value))); - break; - case PROP_ICON: gtk_shortcuts_gesture_set_icon (self, g_value_get_object (value)); break; - case PROP_ICON_SIZE_GROUP: - gtk_shortcuts_gesture_set_icon_size_group (self, GTK_SIZE_GROUP (g_value_get_object (value))); + case PROP_TITLE: + gtk_label_set_label (self->title, g_value_get_string (value)); break; case PROP_SUBTITLE: gtk_label_set_label (self->subtitle, g_value_get_string (value)); break; - case PROP_TITLE: - gtk_label_set_label (self->title, g_value_get_string (value)); + case PROP_TITLE_SIZE_GROUP: + gtk_shortcuts_gesture_set_title_size_group (self, GTK_SIZE_GROUP (g_value_get_object (value))); + break; + + case PROP_ICON_SIZE_GROUP: + gtk_shortcuts_gesture_set_icon_size_group (self, GTK_SIZE_GROUP (g_value_get_object (value))); break; default: @@ -162,28 +172,43 @@ gtk_shortcuts_gesture_finalize (GObject *object) { GtkShortcutsGesture *self = GTK_SHORTCUTS_GESTURE (object); - g_clear_object (&self->desc_size_group); + g_clear_object (&self->title_size_group); g_clear_object (&self->icon_size_group); G_OBJECT_CLASS (gtk_shortcuts_gesture_parent_class)->finalize (object); } +static void +gtk_shortcuts_gesture_add (GtkContainer *container, + GtkWidget *widget) +{ + g_warning ("Can't add children to %s", G_OBJECT_TYPE_NAME (container)); +} + +static GType +gtk_shortcuts_gesture_child_type (GtkContainer *container) +{ + return G_TYPE_NONE; +} + static void gtk_shortcuts_gesture_class_init (GtkShortcutsGestureClass *klass) { + GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = gtk_shortcuts_gesture_finalize; object_class->get_property = gtk_shortcuts_gesture_get_property; object_class->set_property = gtk_shortcuts_gesture_set_property; - properties[PROP_DESC_SIZE_GROUP] = - g_param_spec_object ("desc-size-group", - P_("Description Size Group"), - P_("Description Size Group"), - GTK_TYPE_SIZE_GROUP, - (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); + container_class->add = gtk_shortcuts_gesture_add; + container_class->child_type = gtk_shortcuts_gesture_child_type; + /** + * GtkShortcutsGesture:icon: + * + * The icon used to represent the gesture. + */ properties[PROP_ICON] = g_param_spec_object ("icon", P_("Icon"), @@ -191,13 +216,29 @@ gtk_shortcuts_gesture_class_init (GtkShortcutsGestureClass *klass) G_TYPE_ICON, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - properties[PROP_ICON_SIZE_GROUP] = - g_param_spec_object ("icon-size-group", - P_("Icon Size Group"), - P_("Icon Size Group"), - GTK_TYPE_SIZE_GROUP, - (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); + /** + * GtkShortcutsGesture:title: + * + * The title for the gesture. + * + * This should be a short, one-line text that describes the action + * associated with the gesture. + */ + properties[PROP_TITLE] = + g_param_spec_string ("title", + P_("Title"), + P_("Title"), + NULL, + (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GtkShortcutsGesture:subtitle: + * + * The subtitle for the gesture. + * + * This should be a short, one-line text that describes the gesture + * itself, e.g. "Two-finger swipe". + */ properties[PROP_SUBTITLE] = g_param_spec_string ("subtitle", P_("Subtitle"), @@ -205,12 +246,33 @@ gtk_shortcuts_gesture_class_init (GtkShortcutsGestureClass *klass) NULL, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - properties[PROP_TITLE] = - g_param_spec_string ("title", - P_("Title"), - P_("Title"), - NULL, - (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GtkShortcutsGesture:title-size-group: + * + * The size group for the textual portion of this gesture. + * + * This is used internally by GTK+, and must not be modified by applications. + */ + properties[PROP_TITLE_SIZE_GROUP] = + g_param_spec_object ("title-size-group", + P_("Title Size Group"), + P_("Title Size Group"), + GTK_TYPE_SIZE_GROUP, + (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); + + /** + * GtkShortcutsShortcut:icon-size-group: + * + * The size group for the image portion of this gesture. + * + * This is used internally by GTK+, and must not be modified by applications. + */ + properties[PROP_ICON_SIZE_GROUP] = + g_param_spec_object ("icon-size-group", + P_("Icon Size Group"), + P_("Icon Size Group"), + GTK_TYPE_SIZE_GROUP, + (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_properties (object_class, LAST_PROP, properties); } @@ -224,20 +286,20 @@ gtk_shortcuts_gesture_init (GtkShortcutsGesture *self) self->image = g_object_new (GTK_TYPE_IMAGE, "visible", TRUE, NULL); - gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->image)); + GTK_CONTAINER_CLASS (gtk_shortcuts_gesture_parent_class)->add (GTK_CONTAINER (self), GTK_WIDGET (self->image)); - self->desc_box = g_object_new (GTK_TYPE_BOX, - "hexpand", TRUE, - "orientation", GTK_ORIENTATION_VERTICAL, - "visible", TRUE, - NULL); - gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->desc_box)); + self->title_box = g_object_new (GTK_TYPE_BOX, + "hexpand", TRUE, + "orientation", GTK_ORIENTATION_VERTICAL, + "visible", TRUE, + NULL); + GTK_CONTAINER_CLASS (gtk_shortcuts_gesture_parent_class)->add (GTK_CONTAINER (self), GTK_WIDGET (self->title_box)); self->title = g_object_new (GTK_TYPE_LABEL, "visible", TRUE, "xalign", 0.0f, NULL); - gtk_container_add (GTK_CONTAINER (self->desc_box), GTK_WIDGET (self->title)); + gtk_container_add (GTK_CONTAINER (self->title_box), GTK_WIDGET (self->title)); self->subtitle = g_object_new (GTK_TYPE_LABEL, "visible", TRUE, @@ -245,5 +307,5 @@ gtk_shortcuts_gesture_init (GtkShortcutsGesture *self) NULL); gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (self->subtitle)), "dim-label"); - gtk_container_add (GTK_CONTAINER (self->desc_box), GTK_WIDGET (self->subtitle)); + gtk_container_add (GTK_CONTAINER (self->title_box), GTK_WIDGET (self->subtitle)); } diff --git a/gtk/gtkshortcutsgestureprivate.h b/gtk/gtkshortcutsgesture.h similarity index 98% rename from gtk/gtkshortcutsgestureprivate.h rename to gtk/gtkshortcutsgesture.h index 63ced78b96..0b60b39840 100644 --- a/gtk/gtkshortcutsgestureprivate.h +++ b/gtk/gtkshortcutsgesture.h @@ -34,7 +34,7 @@ G_BEGIN_DECLS typedef struct _GtkShortcutsGesture GtkShortcutsGesture; typedef struct _GtkShortcutsGestureClass GtkShortcutsGestureClass; - +GDK_AVAILABLE_IN_3_20 GType gtk_shortcuts_gesture_get_type (void) G_GNUC_CONST; G_END_DECLS diff --git a/gtk/gtkshortcutsgroup.c b/gtk/gtkshortcutsgroup.c index a7cb08b319..1ac3fc5276 100644 --- a/gtk/gtkshortcutsgroup.c +++ b/gtk/gtkshortcutsgroup.c @@ -18,16 +18,29 @@ #include "config.h" -#include "gtkshortcutsgroupprivate.h" +#include "gtkshortcutsgroup.h" -#include "gtkshortcutsshortcutprivate.h" -#include "gtkshortcutsgestureprivate.h" +#include "gtkshortcutsshortcut.h" +#include "gtkshortcutsgesture.h" #include "gtklabel.h" #include "gtkorientable.h" #include "gtksizegroup.h" #include "gtkprivate.h" #include "gtkintl.h" +/** + * SECTION:gtkshortcutsgroup + * @Title: GtkShortcutsGroup + * @Short_description: Represents a group of shortcuts in a GtkShortcutsWindow + * + * A GtkShortcutsGroup represents a group of related keyboard shortcuts + * or gestures. The group has a title. It may optionally be associated with + * a view of the application, which can be used to show only relevant shortcuts + * depending on the application context. + * + * This widget is only meant to be used with #GtkShortcutsWindow. + */ + struct _GtkShortcutsGroup { GtkBox parent_instance; @@ -85,7 +98,7 @@ gtk_shortcuts_group_set_title_size_group (GtkShortcutsGroup *group, if (GTK_IS_SHORTCUTS_SHORTCUT (l->data)) g_object_set (l->data, "title-size-group", size_group, NULL); else if (GTK_IS_SHORTCUTS_GESTURE (l->data)) - g_object_set (l->data, "desc-size-group", size_group, NULL); + g_object_set (l->data, "title-size-group", size_group, NULL); } g_list_free (children); } @@ -111,6 +124,19 @@ gtk_shortcuts_group_get_height (GtkShortcutsGroup *group) return height; } +static void +gtk_shortcuts_group_add (GtkContainer *container, + GtkWidget *widget) +{ + if (GTK_IS_SHORTCUTS_SHORTCUT (widget) || + GTK_IS_SHORTCUTS_GESTURE (widget)) + GTK_CONTAINER_CLASS (gtk_shortcuts_group_parent_class)->add (container, widget); + else + g_warning ("Can't add children of type %s to %s", + G_OBJECT_TYPE_NAME (widget), + G_OBJECT_TYPE_NAME (container)); +} + static void gtk_shortcuts_group_get_property (GObject *object, guint prop_id, @@ -183,21 +209,46 @@ gtk_shortcuts_group_finalize (GObject *object) static void gtk_shortcuts_group_class_init (GtkShortcutsGroupClass *klass) { + GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = gtk_shortcuts_group_finalize; object_class->get_property = gtk_shortcuts_group_get_property; object_class->set_property = gtk_shortcuts_group_set_property; + container_class->add = gtk_shortcuts_group_add; + + /** + * GtkShortcutsGroup:title: + * + * The title for this group of shortcuts. + */ properties[PROP_TITLE] = g_param_spec_string ("title", P_("Title"), P_("Title"), NULL, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + /** + * GtkShortcutsGroup:view: + * + * An optional view that the shortcuts in this group are relevant for. + * The group will be hidden if the #GtkShortcutsWindow:view-name property + * does not match the view of this group. + * + * Set this to %NULL to make the group always visible. + */ properties[PROP_VIEW] = g_param_spec_string ("view", P_("View"), P_("View"), NULL, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GtkShortcutsGroup:accel-size-group: + * + * The size group for the accelerator portion of shortcuts in this group. + * + * This is used internally by GTK+, and must not be modified by applications. + */ properties[PROP_ACCEL_SIZE_GROUP] = g_param_spec_object ("accel-size-group", P_("Accelerator Size Group"), @@ -205,6 +256,13 @@ gtk_shortcuts_group_class_init (GtkShortcutsGroupClass *klass) GTK_TYPE_SIZE_GROUP, (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); + /** + * GtkShortcutsGroup:title-size-group: + * + * The size group for the textual portion of shortcuts in this group. + * + * This is used internally by GTK+, and must not be modified by applications. + */ properties[PROP_TITLE_SIZE_GROUP] = g_param_spec_object ("title-size-group", P_("Title Size Group"), @@ -212,6 +270,13 @@ gtk_shortcuts_group_class_init (GtkShortcutsGroupClass *klass) GTK_TYPE_SIZE_GROUP, (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); + /** + * GtkShortcutsGroup:height: + * + * A rough measure for the number of lines in this group. + * + * This is used internally by GTK+, and is not useful for applications. + */ properties[PROP_HEIGHT] = g_param_spec_uint ("height", P_("Height"), P_("Height"), 0, G_MAXUINT, 0, @@ -235,6 +300,7 @@ gtk_shortcuts_group_init (GtkShortcutsGroup *self) "visible", TRUE, "xalign", 0.0f, NULL); - gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->title)); pango_attr_list_unref (attrs); + + GTK_CONTAINER_CLASS (gtk_shortcuts_group_parent_class)->add (GTK_CONTAINER (self), GTK_WIDGET (self->title)); } diff --git a/gtk/gtkshortcutsgroupprivate.h b/gtk/gtkshortcutsgroup.h similarity index 98% rename from gtk/gtkshortcutsgroupprivate.h rename to gtk/gtkshortcutsgroup.h index 4b27ec40a6..790d60a855 100644 --- a/gtk/gtkshortcutsgroupprivate.h +++ b/gtk/gtkshortcutsgroup.h @@ -34,6 +34,7 @@ G_BEGIN_DECLS typedef struct _GtkShortcutsGroup GtkShortcutsGroup; typedef struct _GtkShortcutsGroupClass GtkShortcutsGroupClass; +GDK_AVAILABLE_IN_3_20 GType gtk_shortcuts_group_get_type (void) G_GNUC_CONST; G_END_DECLS diff --git a/gtk/gtkshortcutssection.c b/gtk/gtkshortcutssection.c index fa8662b508..5475f264d2 100644 --- a/gtk/gtkshortcutssection.c +++ b/gtk/gtkshortcutssection.c @@ -18,9 +18,9 @@ #include "config.h" -#include "gtkshortcutssectionprivate.h" +#include "gtkshortcutssection.h" -#include "gtkshortcutsgroupprivate.h" +#include "gtkshortcutsgroup.h" #include "gtktogglebutton.h" #include "gtkstack.h" #include "gtkstackswitcher.h" @@ -31,6 +31,23 @@ #include "gtkprivate.h" #include "gtkintl.h" +/** + * SECTION:gtkshortcutssection + * @Title: GtkShortcutsSection + * @Short_description: Represents an application mode in a GtkShortcutsWindow + * + * A GtkShortcutsSection collects all the keyboard shortcuts and gestures + * for a major application mode. If your application needs multiple sections, + * you should give each section a unique #GtkShortcutsSection:section-name and + * a #GtkShortcutsSection:title that can be shown in the section selector of + * the GtkShortcutsWindow. + * + * The #GtkShortcutsSection:max-height property can be used to influence how + * the groups in the section are distributed over pages and columns. + * + * This widget is only meant to be used with #GtkShortcutsWindow. + */ + struct _GtkShortcutsSection { GtkBox parent_instance; @@ -97,7 +114,9 @@ gtk_shortcuts_section_add (GtkContainer *container, if (GTK_IS_SHORTCUTS_GROUP (child)) gtk_shortcuts_section_add_group (self, GTK_SHORTCUTS_GROUP (child)); else - GTK_CONTAINER_CLASS (gtk_shortcuts_section_parent_class)->add (container, child); + g_warning ("Can't add children of type %s to %s", + G_OBJECT_TYPE_NAME (child), + G_OBJECT_TYPE_NAME (container)); } static void @@ -175,6 +194,12 @@ gtk_shortcuts_section_set_property (GObject *object, } } +static GType +gtk_shortcuts_section_child_type (GtkContainer *container) +{ + return GTK_TYPE_SHORTCUTS_GROUP; +} + static void gtk_shortcuts_section_class_init (GtkShortcutsSectionClass *klass) { @@ -189,22 +214,55 @@ gtk_shortcuts_section_class_init (GtkShortcutsSectionClass *klass) widget_class->map = gtk_shortcuts_section_map; container_class->add = gtk_shortcuts_section_add; + container_class->child_type = gtk_shortcuts_section_child_type; + /** + * GtkShortcutsSection:section-name: + * + * A unique name to identify this section among the sections + * added to the GtkShortcutsWindow. Setting the #GtkShortcutsWindow:section-name + * property to this string will make this section shown in the + * GtkShortcutsWindow. + */ properties[PROP_SECTION_NAME] = g_param_spec_string ("section-name", P_("Section Name"), P_("Section Name"), NULL, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GtkShortcutsSection:view-name: + * + * A view name to filter the groups in this section by. + * See #GtkShortcutsGroup:view. + * + * Applications are expected to use the #GtkShortcutsWindow:view-name + * property for this purpose. + */ properties[PROP_VIEW_NAME] = g_param_spec_string ("view-name", P_("View Name"), P_("View Name"), NULL, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GtkShortcutsSection:title: + * + * The string to show in the section selector of the GtkShortcutsWindow + * for this section. If there is only one section, you don't need to + * set a title, since the section selector will not be shown in this case. + */ properties[PROP_TITLE] = g_param_spec_string ("title", P_("Title"), P_("Title"), NULL, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GtkShortcutsSection:max-height: + * + * The maximum number of lines to allow per column. This property can + * be used to influence how the groups in this section are distributed + * across pages and columns. The default value of 15 should work in + * for most cases. + */ properties[PROP_MAX_HEIGHT] = g_param_spec_uint ("max-height", P_("Maximum Height"), P_("Maximum Height"), 0, G_MAXUINT, 15, @@ -231,7 +289,7 @@ gtk_shortcuts_section_init (GtkShortcutsSection *self) "vexpand", TRUE, "visible", TRUE, NULL); - gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->stack)); + GTK_CONTAINER_CLASS (gtk_shortcuts_section_parent_class)->add (GTK_CONTAINER (self), GTK_WIDGET (self->stack)); self->switcher = g_object_new (GTK_TYPE_STACK_SWITCHER, "halign", GTK_ALIGN_CENTER, @@ -248,7 +306,7 @@ gtk_shortcuts_section_init (GtkShortcutsSection *self) G_CALLBACK (show_all_changed), self); box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 20); - gtk_container_add (GTK_CONTAINER (self), box); + GTK_CONTAINER_CLASS (gtk_shortcuts_section_parent_class)->add (GTK_CONTAINER (self), box); gtk_box_set_center_widget (GTK_BOX (box), GTK_WIDGET (self->switcher)); gtk_box_pack_end (GTK_BOX (box), self->show_all, TRUE, TRUE, 0); diff --git a/gtk/gtkshortcutssectionprivate.h b/gtk/gtkshortcutssection.h similarity index 96% rename from gtk/gtkshortcutssectionprivate.h rename to gtk/gtkshortcutssection.h index f5d48976ee..1f3d33939e 100644 --- a/gtk/gtkshortcutssectionprivate.h +++ b/gtk/gtkshortcutssection.h @@ -1,4 +1,4 @@ -/* gtkshortcutssectionprivate.h +/* gtkshortcutssection.h * * Copyright (C) 2015 Christian Hergert * @@ -20,7 +20,7 @@ #define __GTK_SHORTCUTS_SECTION_H__ #include -#include +#include G_BEGIN_DECLS @@ -35,7 +35,7 @@ G_BEGIN_DECLS typedef struct _GtkShortcutsSection GtkShortcutsSection; typedef struct _GtkShortcutsSectionClass GtkShortcutsSectionClass; - +GDK_AVAILABLE_IN_3_20 GType gtk_shortcuts_section_get_type (void) G_GNUC_CONST; const gchar *gtk_shortcuts_section_get_section_name (GtkShortcutsSection *self); diff --git a/gtk/gtkshortcutsshortcut.c b/gtk/gtkshortcutsshortcut.c index 2a3d0310a8..c14eb0a455 100644 --- a/gtk/gtkshortcutsshortcut.c +++ b/gtk/gtkshortcutsshortcut.c @@ -18,12 +18,21 @@ #include "config.h" -#include "gtkshortcutsshortcutprivate.h" +#include "gtkshortcutsshortcut.h" #include "gtkshortcutlabelprivate.h" #include "gtkprivate.h" #include "gtkintl.h" +/** + * SECTION:gtkshortcutsshortcut + * @Title: GtkShortcutsShortcut + * @Short_description: Represents a keyboard shortcut in a GtkShortcutsWindow + * + * A GtkShortcutsShortcut represents a single keyboard shortcut with + * a short text. This widget is only meant to be used with + * #GtkShortcutsWindow. + */ struct _GtkShortcutsShortcut { @@ -46,8 +55,8 @@ G_DEFINE_TYPE (GtkShortcutsShortcut, gtk_shortcuts_shortcut, GTK_TYPE_BOX) enum { PROP_0, PROP_ACCELERATOR, - PROP_ACCEL_SIZE_GROUP, PROP_TITLE, + PROP_ACCEL_SIZE_GROUP, PROP_TITLE_SIZE_GROUP, LAST_PROP }; @@ -144,15 +153,45 @@ gtk_shortcuts_shortcut_finalize (GObject *object) G_OBJECT_CLASS (gtk_shortcuts_shortcut_parent_class)->finalize (object); } +static void +gtk_shortcuts_shortcut_add (GtkContainer *container, + GtkWidget *widget) +{ + g_warning ("Can't add children to %s", G_OBJECT_TYPE_NAME (container)); +} + +static GType +gtk_shortcuts_shortcut_child_type (GtkContainer *container) +{ + return G_TYPE_NONE; +} + static void gtk_shortcuts_shortcut_class_init (GtkShortcutsShortcutClass *klass) { + GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = gtk_shortcuts_shortcut_finalize; object_class->get_property = gtk_shortcuts_shortcut_get_property; object_class->set_property = gtk_shortcuts_shortcut_set_property; + container_class->add = gtk_shortcuts_shortcut_add; + container_class->child_type = gtk_shortcuts_shortcut_child_type; + + /** + * GtkShortcutsShortcut:accelerator: + * + * The accelerator(s) represented by this object, in the syntax + * understood by gtk_accelerator_parse(). Multiple accelerators + * can be specified by separating them with a space, but keep in + * mind that the available width is limited. + * + * Here is an example: ? F1 + * + * Note that < and > need to escaped as < and > when used + * in .ui files. + */ properties[PROP_ACCELERATOR] = g_param_spec_string ("accelerator", P_("Accelerator"), @@ -160,13 +199,13 @@ gtk_shortcuts_shortcut_class_init (GtkShortcutsShortcutClass *klass) NULL, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - properties[PROP_ACCEL_SIZE_GROUP] = - g_param_spec_object ("accel-size-group", - P_("Accelerator Size Group"), - P_("Accelerator Size Group"), - GTK_TYPE_SIZE_GROUP, - (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); - + /** + * GtkShortcutsShortcut:title: + * + * The textual description for the accelerators represented by + * this object. This should be a short string that can fit in + * a single line. + */ properties[PROP_TITLE] = g_param_spec_string ("title", P_("Title"), @@ -174,6 +213,27 @@ gtk_shortcuts_shortcut_class_init (GtkShortcutsShortcutClass *klass) NULL, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GtkShortcutsShortcut:accel-size-group: + * + * The size group for the accelerator portion of this shortcut. + * + * This is used internally by GTK+, and must not be modified by applications. + */ + properties[PROP_ACCEL_SIZE_GROUP] = + g_param_spec_object ("accel-size-group", + P_("Accelerator Size Group"), + P_("Accelerator Size Group"), + GTK_TYPE_SIZE_GROUP, + (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); + + /** + * GtkShortcutsShortcut:title-size-group: + * + * The size group for the textual portion of this shortcut. + * + * This is used internally by GTK+, and must not be modified by applications. + */ properties[PROP_TITLE_SIZE_GROUP] = g_param_spec_object ("title-size-group", P_("Title Size Group"), @@ -193,12 +253,12 @@ gtk_shortcuts_shortcut_init (GtkShortcutsShortcut *self) self->accelerator = g_object_new (GTK_TYPE_SHORTCUT_LABEL, "visible", TRUE, NULL); - gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->accelerator)); + GTK_CONTAINER_CLASS (gtk_shortcuts_shortcut_parent_class)->add (GTK_CONTAINER (self), GTK_WIDGET (self->accelerator)); self->title = g_object_new (GTK_TYPE_LABEL, "hexpand", TRUE, "visible", TRUE, "xalign", 0.0f, NULL); - gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->title)); + GTK_CONTAINER_CLASS (gtk_shortcuts_shortcut_parent_class)->add (GTK_CONTAINER (self), GTK_WIDGET (self->title)); } diff --git a/gtk/gtkshortcutsshortcutprivate.h b/gtk/gtkshortcutsshortcut.h similarity index 98% rename from gtk/gtkshortcutsshortcutprivate.h rename to gtk/gtkshortcutsshortcut.h index 9c30445c41..57d76ad60e 100644 --- a/gtk/gtkshortcutsshortcutprivate.h +++ b/gtk/gtkshortcutsshortcut.h @@ -35,6 +35,7 @@ typedef struct _GtkShortcutsShortcut GtkShortcutsShortcut; typedef struct _GtkShortcutsShortcutClass GtkShortcutsShortcutClass; +GDK_AVAILABLE_IN_3_20 GType gtk_shortcuts_shortcut_get_type (void) G_GNUC_CONST; G_END_DECLS diff --git a/gtk/gtkshortcutswindow.c b/gtk/gtkshortcutswindow.c index f8305d1505..7a1bc486df 100644 --- a/gtk/gtkshortcutswindow.c +++ b/gtk/gtkshortcutswindow.c @@ -20,24 +20,58 @@ #include "gtkshortcutswindow.h" #include "gtkscrolledwindow.h" -#include "gtkshortcutsgestureprivate.h" -#include "gtkshortcutsgroupprivate.h" -#include "gtkshortcutsshortcutprivate.h" -#include "gtkshortcutssectionprivate.h" +#include "gtkshortcutssection.h" +#include "gtkshortcutsgroup.h" +#include "gtkshortcutsgesture.h" +#include "gtkshortcutsshortcut.h" #include "gtkprivate.h" #include "gtkintl.h" /** * SECTION:gtkshortcutswindow - * @title: GtkShortcutsWindow - * @short_description: Toplevel which shows help for shortcuts + * @Title: GtkShortcutsWindow + * @Short_description: Toplevel which shows help for shortcuts * - * A GtkShortcutsWindow shows brief information about keyboard shortcuts - * and gestures, sorted in pages, columns and groups. + * A GtkShortcutsWindow shows brief information about the keyboard shortcuts + * and gestures of an application. The shortcuts can be grouped, and you can + * have multiple sections in this window, corresponding to the major modes of + * your application. * - * The recommended way to construct a GtkShortcutsWindow is with GtkBuilder: + * Additionally, the shortcuts can be filtered by the current view, to avoid + * showing information that is not relevant in the current application context. * - * [A simple example](https://git.gnome.org/browse/gtk+/tree/demos/gtk-demo/shortcuts.ui) + * The recommended way to construct a GtkShortcutsWindow is with GtkBuilder, + * by populating a #GtkShortcutsWindow with one or more #GtkShortcutsSection + * objects, which contain #GtkShortcutsGroups that in turn contain objects of + * class #GtkShortcutsShortcut or #GtkShortcutsGesture. + * + * # A simple example: + * + * ![](gedit-shortcuts.png) + * + * This example has as single section. As you can see, the shortcut groups + * are arranged in columns, and spread across several pages if there are too + * many to find on a single page. + * + * The .ui file for this example can be found [here](https://git.gnome.org/browse/gtk+/tree/demos/gtk-demo/shortcuts-gedit.ui). + * + * # An example with multiple views: + * + * ![](clocks-shortcuts.png) + * + * This example shows a #GtkShortcutsWindow that has been configured to show only + * the shortcuts relevant to the "stopwatch" view. + * + * The .ui file for this example can be found [here](https://git.gnome.org/browse/gtk+/tree/demos/gtk-demo/shortcuts-clocks.ui). + * + * # An example with multiple sections: + * + * ![](builder-shortcuts.png) + * + * This example shows a #GtkShortcutsWindow with two sections, "Editor Shortcuts" + * and "Terminal Shortcuts". + * + * The .ui file for this example can be found [here](https://git.gnome.org/browse/gtk+/tree/demos/gtk-demo/shortcuts-clocks.ui). */ typedef struct @@ -208,7 +242,7 @@ gtk_shortcuts_window_add_search_item (GtkWidget *child, gpointer data) "subtitle", subtitle, "icon", icon, "icon-size-group", priv->search_image_group, - "desc-size-group", priv->search_text_group, + "title-size-group", priv->search_text_group, NULL); str = g_strdup_printf ("%s %s", title, subtitle); @@ -269,14 +303,16 @@ gtk_shortcuts_window_add_section (GtkShortcutsWindow *self, static void gtk_shortcuts_window_add (GtkContainer *container, - GtkWidget *widget) + GtkWidget *widget) { GtkShortcutsWindow *self = (GtkShortcutsWindow *)container; if (GTK_IS_SHORTCUTS_SECTION (widget)) gtk_shortcuts_window_add_section (self, GTK_SHORTCUTS_SECTION (widget)); else - GTK_CONTAINER_CLASS (gtk_shortcuts_window_parent_class)->add (container, widget); + g_warning ("Can't add children of type %s to %s", + G_OBJECT_TYPE_NAME (widget), + G_OBJECT_TYPE_NAME (container)); } static void @@ -492,6 +528,12 @@ gtk_shortcuts_window_set_property (GObject *object, } } +static GType +gtk_shortcuts_window_child_type (GtkContainer *container) +{ + return GTK_TYPE_SHORTCUTS_SECTION; +} + static void gtk_shortcuts_window_class_init (GtkShortcutsWindowClass *klass) { @@ -505,13 +547,33 @@ gtk_shortcuts_window_class_init (GtkShortcutsWindowClass *klass) object_class->set_property = gtk_shortcuts_window_set_property; container_class->add = gtk_shortcuts_window_add; + container_class->child_type = gtk_shortcuts_window_child_type; klass->close = gtk_shortcuts_window_real_close; + /** + * GtkShortcutsWindow:section-name: + * + * The name of the section to show. + * + * This should be the section-name of one of the #GtkShortcutsSection + * objects that are in this shortcuts window. + */ properties[PROP_SECTION_NAME] = g_param_spec_string ("section-name", P_("Section Name"), P_("Section Name"), NULL, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + /** + * GtkShortcutsWindow:view-name: + * + * The view name by which to filter the contents. + * + * This should correspond to the #GtkShortcutsGroup:view property of some of + * the #GtkShortcutsGroup objects that are inside this shortcuts window. + * + * Set this to %NULL to show all groups. + */ properties[PROP_VIEW_NAME] = g_param_spec_string ("view-name", P_("View Name"), P_("View Name"), NULL, @@ -519,6 +581,16 @@ gtk_shortcuts_window_class_init (GtkShortcutsWindowClass *klass) g_object_class_install_properties (object_class, LAST_PROP, properties); + /** + * GtkShortcutsWindow::close: + * + * The ::close signal is a + * [keybinding signal][GtkBindingSignal] + * which gets emitted when the user uses a keybinding to close + * the window. + * + * The default binding for this signal is the Escape key. + */ signals[CLOSE] = g_signal_new (I_("close"), G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, @@ -589,7 +661,7 @@ gtk_shortcuts_window_init (GtkShortcutsWindow *self) "orientation", GTK_ORIENTATION_VERTICAL, "visible", TRUE, NULL); - gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (main_box)); + GTK_CONTAINER_CLASS (gtk_shortcuts_window_parent_class)->add (GTK_CONTAINER (self), GTK_WIDGET (main_box)); priv->search_bar = g_object_new (GTK_TYPE_SEARCH_BAR, "visible", TRUE, diff --git a/gtk/gtkshortcutswindow.h b/gtk/gtkshortcutswindow.h index 729e3188f7..00a1022d8f 100644 --- a/gtk/gtkshortcutswindow.h +++ b/gtk/gtkshortcutswindow.h @@ -47,6 +47,7 @@ struct _GtkShortcutsWindowClass void (*close) (GtkShortcutsWindow *self); }; +GDK_AVAILABLE_IN_3_20 GType gtk_shortcuts_window_get_type (void) G_GNUC_CONST;