[planner: 30/61] resource-input-dialog: Port group selector to GtkComboBox
- From: Mart Raudsepp <mraudsepp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [planner: 30/61] resource-input-dialog: Port group selector to GtkComboBox
- Date: Sat, 12 Jun 2021 17:30:25 +0000 (UTC)
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]