[tepl] AmtkFactory: add functions to create GtkCheckMenuItem's



commit 0b6a5bde1e5708bcbddda3e5e678c0b8680e6dce
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Thu Aug 10 17:44:22 2017 +0200

    AmtkFactory: add functions to create GtkCheckMenuItem's

 amtk/amtk-factory.c                  |  149 +++++++++++++++++++++++++---------
 amtk/amtk-factory.h                  |    7 ++
 docs/reference/tepl-3.0-sections.txt |    2 +
 3 files changed, 118 insertions(+), 40 deletions(-)
---
diff --git a/amtk/amtk-factory.c b/amtk/amtk-factory.c
index 2b1b9dd..cc9caa9 100644
--- a/amtk/amtk-factory.c
+++ b/amtk/amtk-factory.c
@@ -441,6 +441,60 @@ common_create (AmtkFactory       *factory,
 }
 
 static AmtkActionInfo *
+common_create_menu_item (AmtkFactory       *factory,
+                        const gchar       *action_name,
+                        AmtkFactoryFlags   flags,
+                        GtkMenuItem      **menu_item)
+{
+       AmtkActionInfo *action_info;
+       const gchar * const *accels;
+       const gchar *tooltip;
+
+       action_info = common_create (factory, action_name, flags, (GtkWidget **)menu_item);
+       if (action_info == NULL)
+       {
+               return NULL;
+       }
+
+       if ((flags & AMTK_FACTORY_IGNORE_LABEL) == 0)
+       {
+               gtk_menu_item_set_use_underline (*menu_item, TRUE);
+               gtk_menu_item_set_label (*menu_item, amtk_action_info_get_label (action_info));
+       }
+
+       accels = amtk_action_info_get_accels (action_info);
+       if ((flags & AMTK_FACTORY_IGNORE_ACCELS) == 0 &&
+           (flags & AMTK_FACTORY_IGNORE_ACCELS_FOR_DOC) == 0 &&
+           accels != NULL && accels[0] != NULL)
+       {
+               guint accel_key;
+               GdkModifierType accel_mods;
+
+               gtk_accelerator_parse (accels[0], &accel_key, &accel_mods);
+
+               if (accel_key != 0 || accel_mods != 0)
+               {
+                       GtkWidget *child;
+
+                       child = gtk_bin_get_child (GTK_BIN (*menu_item));
+
+                       gtk_accel_label_set_accel (GTK_ACCEL_LABEL (child),
+                                                  accel_key,
+                                                  accel_mods);
+               }
+       }
+
+       tooltip = amtk_action_info_get_tooltip (action_info);
+       if ((flags & AMTK_FACTORY_IGNORE_TOOLTIP) == 0 &&
+           tooltip != NULL)
+       {
+               amtk_menu_item_set_long_description (*menu_item, tooltip);
+       }
+
+       return action_info;
+}
+
+static AmtkActionInfo *
 common_create_tool_button (AmtkFactory       *factory,
                           const gchar       *action_name,
                           AmtkFactoryFlags   flags,
@@ -519,71 +573,86 @@ amtk_factory_create_menu_item_full (AmtkFactory      *factory,
                                    const gchar      *action_name,
                                    AmtkFactoryFlags  flags)
 {
-       GtkWidget *widget;
        GtkMenuItem *menu_item;
        AmtkActionInfo *action_info;
-       const gchar * const *accels;
        const gchar *icon_name;
-       const gchar *tooltip;
 
        g_return_val_if_fail (AMTK_IS_FACTORY (factory), NULL);
        g_return_val_if_fail (action_name != NULL, NULL);
 
-       widget = gtk_menu_item_new ();
-       menu_item = GTK_MENU_ITEM (widget);
+       menu_item = GTK_MENU_ITEM (gtk_menu_item_new ());
 
-       action_info = common_create (factory, action_name, flags, &widget);
+       action_info = common_create_menu_item (factory, action_name, flags, &menu_item);
        if (action_info == NULL)
        {
                return NULL;
        }
 
-       if ((flags & AMTK_FACTORY_IGNORE_LABEL) == 0)
+       icon_name = amtk_action_info_get_icon_name (action_info);
+       if ((flags & AMTK_FACTORY_IGNORE_ICON) == 0 &&
+           icon_name != NULL)
        {
-               gtk_menu_item_set_use_underline (menu_item, TRUE);
-               gtk_menu_item_set_label (menu_item, amtk_action_info_get_label (action_info));
+               amtk_menu_item_set_icon_name (menu_item, icon_name);
        }
 
-       /* Set accel before setting icon, because
-        * amtk_menu_item_set_icon_name() adds a GtkBox.
-        */
-       accels = amtk_action_info_get_accels (action_info);
-       if ((flags & AMTK_FACTORY_IGNORE_ACCELS) == 0 &&
-           (flags & AMTK_FACTORY_IGNORE_ACCELS_FOR_DOC) == 0 &&
-           accels != NULL && accels[0] != NULL)
-       {
-               guint accel_key;
-               GdkModifierType accel_mods;
+       return GTK_WIDGET (menu_item);
+}
 
-               gtk_accelerator_parse (accels[0], &accel_key, &accel_mods);
+/**
+ * amtk_factory_create_check_menu_item:
+ * @factory: an #AmtkFactory.
+ * @action_name: an action name.
+ *
+ * Creates a new #GtkCheckMenuItem for @action_name with the
+ * #AmtkFactory:default-flags.
+ *
+ * Returns: (transfer floating): a new #GtkCheckMenuItem for @action_name.
+ * Since: 3.0
+ */
+GtkWidget *
+amtk_factory_create_check_menu_item (AmtkFactory *factory,
+                                    const gchar *action_name)
+{
+       g_return_val_if_fail (AMTK_IS_FACTORY (factory), NULL);
+       g_return_val_if_fail (action_name != NULL, NULL);
 
-               if (accel_key != 0 || accel_mods != 0)
-               {
-                       GtkWidget *child;
+       return amtk_factory_create_check_menu_item_full (factory,
+                                                        action_name,
+                                                        factory->priv->default_flags);
+}
 
-                       child = gtk_bin_get_child (GTK_BIN (menu_item));
+/**
+ * amtk_factory_create_check_menu_item_full:
+ * @factory: an #AmtkFactory.
+ * @action_name: an action name.
+ * @flags: #AmtkFactoryFlags.
+ *
+ * This function ignores the #AmtkFactory:default-flags property and takes the
+ * @flags argument instead.
+ *
+ * Returns: (transfer floating): a new #GtkCheckMenuItem for @action_name.
+ * Since: 3.0
+ */
+GtkWidget *
+amtk_factory_create_check_menu_item_full (AmtkFactory      *factory,
+                                         const gchar      *action_name,
+                                         AmtkFactoryFlags  flags)
+{
+       GtkMenuItem *check_menu_item;
+       AmtkActionInfo *action_info;
 
-                       gtk_accel_label_set_accel (GTK_ACCEL_LABEL (child),
-                                                  accel_key,
-                                                  accel_mods);
-               }
-       }
+       g_return_val_if_fail (AMTK_IS_FACTORY (factory), NULL);
+       g_return_val_if_fail (action_name != NULL, NULL);
 
-       icon_name = amtk_action_info_get_icon_name (action_info);
-       if ((flags & AMTK_FACTORY_IGNORE_ICON) == 0 &&
-           icon_name != NULL)
-       {
-               amtk_menu_item_set_icon_name (menu_item, icon_name);
-       }
+       check_menu_item = GTK_MENU_ITEM (gtk_check_menu_item_new ());
 
-       tooltip = amtk_action_info_get_tooltip (action_info);
-       if ((flags & AMTK_FACTORY_IGNORE_TOOLTIP) == 0 &&
-           tooltip != NULL)
+       action_info = common_create_menu_item (factory, action_name, flags, &check_menu_item);
+       if (action_info == NULL)
        {
-               amtk_menu_item_set_long_description (menu_item, tooltip);
+               return NULL;
        }
 
-       return widget;
+       return GTK_WIDGET (check_menu_item);
 }
 
 /**
diff --git a/amtk/amtk-factory.h b/amtk/amtk-factory.h
index b2494b8..bf2c4a8 100644
--- a/amtk/amtk-factory.h
+++ b/amtk/amtk-factory.h
@@ -104,6 +104,13 @@ GtkWidget *                amtk_factory_create_menu_item_full              (AmtkFactory  
    *factory,
                                                                         const gchar      *action_name,
                                                                         AmtkFactoryFlags  flags);
 
+GtkWidget *            amtk_factory_create_check_menu_item             (AmtkFactory *factory,
+                                                                        const gchar *action_name);
+
+GtkWidget *            amtk_factory_create_check_menu_item_full        (AmtkFactory      *factory,
+                                                                        const gchar      *action_name,
+                                                                        AmtkFactoryFlags  flags);
+
 GtkToolItem *          amtk_factory_create_tool_button                 (AmtkFactory *factory,
                                                                         const gchar *action_name);
 
diff --git a/docs/reference/tepl-3.0-sections.txt b/docs/reference/tepl-3.0-sections.txt
index 91ae96e..c446504 100644
--- a/docs/reference/tepl-3.0-sections.txt
+++ b/docs/reference/tepl-3.0-sections.txt
@@ -109,6 +109,8 @@ amtk_factory_get_default_flags
 amtk_factory_set_default_flags
 amtk_factory_create_menu_item
 amtk_factory_create_menu_item_full
+amtk_factory_create_check_menu_item
+amtk_factory_create_check_menu_item_full
 amtk_factory_create_tool_button
 amtk_factory_create_tool_button_full
 amtk_factory_create_menu_tool_button


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