[planner: 30/61] resource-input-dialog: Port group selector to GtkComboBox




commit a0dc7c9523146b2b10969f7bde3b7ddca4af4e33
Author: Mart Raudsepp <leio gentoo org>
Date:   Sun Dec 27 00:32:19 2020 +0200

    resource-input-dialog: Port group selector to GtkComboBox
    
    GtkOptionMenu (used before) has been deprecated for most of gtk2 times
    and does not exist in gtk3.

 data/ui/resource-input-dialog.ui    |   5 +-
 src/planner-resource-input-dialog.c | 121 ++++++++++++++++++++----------------
 2 files changed, 68 insertions(+), 58 deletions(-)
---
diff --git a/data/ui/resource-input-dialog.ui b/data/ui/resource-input-dialog.ui
index 9cfa36bd..60a566af 100644
--- a/data/ui/resource-input-dialog.ui
+++ b/data/ui/resource-input-dialog.ui
@@ -208,7 +208,7 @@
                 <property name="yalign">0.5</property>
                 <property name="xpad">0</property>
                 <property name="ypad">0</property>
-                <property name="mnemonic_widget">group_optionmenu</property>
+                <property name="mnemonic_widget">group_combobox</property>
               </object>
               <packing>
                 <property name="left_attach">0</property>
@@ -220,10 +220,9 @@
               </packing>
             </child>
             <child>
-              <object class="GtkOptionMenu" id="group_optionmenu">
+              <object class="GtkComboBox" id="group_combobox">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="history">-1</property>
               </object>
               <packing>
                 <property name="left_attach">1</property>
diff --git a/src/planner-resource-input-dialog.c b/src/planner-resource-input-dialog.c
index b1000d00..8c43b2c1 100644
--- a/src/planner-resource-input-dialog.c
+++ b/src/planner-resource-input-dialog.c
@@ -36,7 +36,7 @@ typedef struct {
        GtkWidget     *name_entry;
        GtkWidget     *short_name_entry;
        GtkWidget     *email_entry;
-       GtkWidget     *group_option_menu;
+       GtkWidget     *group_combo_box;
 } DialogData;
 
 static void resource_input_dialog_setup_groups (DialogData *data);
@@ -52,81 +52,84 @@ resource_input_dialog_group_changed (MrpGroup   *group,
 }
 
 static MrpGroup *
-resource_input_dialog_get_selected (GtkWidget *option_menu)
+resource_input_dialog_get_selected (GtkWidget *combo)
 {
-       GtkWidget *menu;
-       GtkWidget *item;
-       MrpGroup  *ret;
-
-       menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (option_menu));
-       if (!menu) {
-               return NULL;
-       }
-
-       item = gtk_menu_get_active (GTK_MENU (menu));
+       GtkTreeIter iter;
+       MrpGroup  *group;
+
+       gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter);
+       gtk_tree_model_get (gtk_combo_box_get_model (GTK_COMBO_BOX (combo)),
+                           &iter,
+                           0, &group,
+                           -1);
+       return group;
+}
 
-       ret = g_object_get_data (G_OBJECT (item), "data");
+static void
+menu_groups_name (GtkCellLayout   *layout,
+                  GtkCellRenderer *cell,
+                  GtkTreeModel    *model,
+                  GtkTreeIter     *iter,
+                  gpointer         user_data)
+{
+       MrpGroup *group;
+       const gchar *name;
 
-       return ret;
+       gtk_tree_model_get (model, iter, 0, &group, -1);
+       if (!group) {
+               name = _("(None)");
+       } else {
+               name = mrp_group_get_name (group);
+               if (!name) {
+                       name = _("(No name)");
+               }
+       }
+       g_object_set (cell,
+                     "text", name,
+                     NULL);
 }
 
 static void
 resource_input_dialog_setup_groups (DialogData *data)
 {
-       MrpGroup  *selected_group;
-       GList     *groups;
-       GtkWidget *option_menu;
-       GtkWidget *menu;
-       GtkWidget *menu_item;
-       gchar     *name;
-       GList     *l;
-       gint       index;
+       MrpGroup     *selected_group;
+       GList        *groups;
+       GtkComboBox  *combo_box;
+       GtkListStore *store;
+       GtkTreeIter   iter;
+       GList        *l;
+       gint          index;
 
-       option_menu = data->group_option_menu;
+       selected_group = resource_input_dialog_get_selected (data->group_combo_box);
 
-       selected_group = resource_input_dialog_get_selected (option_menu);
+       combo_box = GTK_COMBO_BOX (data->group_combo_box);
 
        groups = mrp_project_get_groups (data->project);
 
-       menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (option_menu));
-
-       if (menu) {
-               gtk_widget_destroy (menu);
-       }
-
-       menu = gtk_menu_new ();
+       store = gtk_list_store_new (1, MRP_TYPE_GROUP);
+       gtk_combo_box_set_model (combo_box, GTK_TREE_MODEL (store));
+       g_object_unref (store);
 
        /* Put "no group" at the top. */
-       menu_item = gtk_menu_item_new_with_label (_("(None)"));
-       gtk_widget_show (menu_item);
-       gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+       gtk_list_store_append (store, &iter);
+       gtk_list_store_set (store, &iter,
+                           0, NULL,
+                           -1);
 
        for (l = groups; l; l = l->next) {
-               g_object_get (l->data,
-                             "name", &name,
-                             NULL);
+               MrpGroup *group = l->data;
 
-               if (name == NULL) {
-                       name = g_strdup (_("(No name)"));
-               }
-
-               menu_item = gtk_menu_item_new_with_label (name);
-               gtk_widget_show (menu_item);
-               gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+               gtk_list_store_append (store, &iter);
+               gtk_list_store_set (store, &iter,
+                                   0, group,
+                                   -1);
 
-               g_object_set_data (G_OBJECT (menu_item),
-                                  "data",
-                                  l->data);
-
-               g_signal_connect (l->data,
+               g_signal_connect (group,
                                  "notify::name",
                                  G_CALLBACK (resource_input_dialog_group_changed),
                                  data);
        }
 
-       gtk_widget_show (menu);
-       gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu);
-
        /* Select the right group. +1 is for the empty group at the top. */
        if (groups != NULL && selected_group != NULL) {
                index = g_list_index (groups, selected_group) + 1;
@@ -134,7 +137,7 @@ resource_input_dialog_setup_groups (DialogData *data)
                index = 0;
        }
 
-       gtk_option_menu_set_history (GTK_OPTION_MENU (data->group_option_menu), index);
+       gtk_combo_box_set_active (combo_box, index);
 }
 
 static void
@@ -180,7 +183,7 @@ resource_input_dialog_response_cb (GtkWidget *button,
                short_name = gtk_entry_get_text (GTK_ENTRY (data->short_name_entry));
                email = gtk_entry_get_text (GTK_ENTRY (data->email_entry));
 
-               group = resource_input_dialog_get_selected (data->group_option_menu);
+               group = resource_input_dialog_get_selected (data->group_combo_box);
 
                resource = g_object_new (MRP_TYPE_RESOURCE,
                                         "name", name,
@@ -223,6 +226,7 @@ planner_resource_input_dialog_new (PlannerWindow *main_window)
        DialogData *data;
        GtkBuilder *builder;
        MrpProject *project;
+       GtkCellRenderer *renderer;
 
        project = planner_window_get_project (main_window);
 
@@ -257,9 +261,16 @@ planner_resource_input_dialog_new (PlannerWindow *main_window)
                          G_CALLBACK (resource_input_dialog_activate_cb),
                          dialog);
 
-       data->group_option_menu = GTK_WIDGET (gtk_builder_get_object (builder, "group_optionmenu"));
+       data->group_combo_box = GTK_WIDGET (gtk_builder_get_object (builder, "group_combobox"));
 
        resource_input_dialog_setup_groups (data);
+       renderer = gtk_cell_renderer_text_new ();
+       gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (data->group_combo_box),
+                                   renderer, TRUE);
+       gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (data->group_combo_box),
+                                           renderer,
+                                           menu_groups_name,
+                                           NULL, NULL);
 
        g_signal_connect_object (project,
                                 "group_added",


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