[planner: 27/61] new-property: Port property type selector to GtkComboBox
- From: Mart Raudsepp <mraudsepp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [planner: 27/61] new-property: Port property type selector to GtkComboBox
- Date: Sat, 12 Jun 2021 17:30:25 +0000 (UTC)
commit 960054670c72ac43d7fd86eb68b6c7c5a515326f
Author: Mart Raudsepp <leio gentoo org>
Date: Sat Dec 26 21:53:27 2020 +0200
new-property: Port property type selector to GtkComboBox
GtkOptionMenu (used before) has been deprecated for most of gtk2 times
and does not exist in gtk3.
data/ui/new-property.ui | 7 +--
src/planner-project-properties.c | 101 +++++++++++++++++------------------
src/planner-property-dialog.c | 110 ++++++++++++++++++---------------------
3 files changed, 99 insertions(+), 119 deletions(-)
---
diff --git a/data/ui/new-property.ui b/data/ui/new-property.ui
index de5d0ee2..b159cf3f 100644
--- a/data/ui/new-property.ui
+++ b/data/ui/new-property.ui
@@ -168,14 +168,9 @@
</packing>
</child>
<child>
- <object class="GtkOptionMenu" id="type_menu">
+ <object class="GtkComboBox" id="type_menu">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="history">-1</property>
- <child>
- <object class="GtkMenu" id="menu1">
- </object>
- </child>
</object>
<packing>
<property name="left_attach">1</property>
diff --git a/src/planner-project-properties.c b/src/planner-project-properties.c
index d82cffd2..36ae5d09 100644
--- a/src/planner-project-properties.c
+++ b/src/planner-project-properties.c
@@ -1206,75 +1206,72 @@ mpp_property_dialog_label_changed_cb (GtkWidget *label_entry,
}
static void
-mpp_property_dialog_setup_option_menu (GtkWidget *option_menu,
- GCallback func,
- gpointer user_data,
- gconstpointer str1, ...)
+type_combo_get_name (GtkCellLayout *layout,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
{
- GtkWidget *menu;
- GtkWidget *menu_item;
- gint i;
- va_list args;
- gconstpointer str;
- gint type;
-
- menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (option_menu));
- if (menu) {
- gtk_widget_destroy (menu);
- }
+ gchar *name;
+ gtk_tree_model_get (model, iter, 0, &name, -1);
+ g_object_set (cell, "text", name, NULL);
+}
+
+static void
+mpp_property_dialog_setup_combobox (GtkWidget *combo,
+ gconstpointer str1,
+ ...)
+{
+ GtkListStore *store;
+ GtkTreeIter iter;
+ gint i;
+ va_list args;
+ gconstpointer str;
+ gint type;
+ GtkCellRenderer *renderer;
- menu = gtk_menu_new ();
+ store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
+ gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL (store));
+ g_object_unref (store);
va_start (args, str1);
for (str = str1, i = 0; str != NULL; str = va_arg (args, gpointer), i++) {
- menu_item = gtk_menu_item_new_with_label (str);
- gtk_widget_show (menu_item);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
-
type = va_arg (args, gint);
- g_object_set_data (G_OBJECT (menu_item),
- "data",
- GINT_TO_POINTER (type));
- if (func) {
- g_signal_connect (menu_item,
- "activate",
- func,
- user_data);
- }
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ 0, str,
+ 1, type,
+ -1);
}
va_end (args);
- gtk_widget_show (menu);
- gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo),
+ renderer, TRUE);
+ gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
+ renderer,
+ type_combo_get_name,
+ NULL, NULL);
}
static gint
-mpp_property_dialog_get_selected (GtkWidget *option_menu)
+mpp_property_dialog_get_selected (GtkWidget *combo)
{
- GtkWidget *menu;
- GtkWidget *item;
- gint ret;
+ GtkTreeIter iter;
+ gint ret;
- menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (option_menu));
-
- item = gtk_menu_get_active (GTK_MENU (menu));
-
- ret = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "data"));
+ 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,
+ 1, &ret,
+ -1);
return ret;
}
-static void
-mpp_property_dialog_type_selected_cb (GtkWidget *widget, GtkWidget *dialog)
-{
- gint type;
-
- type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "data"));
-
- g_object_set_data (G_OBJECT (dialog), "type", GINT_TO_POINTER (type));
-}
-
static void
mpp_add_property_button_clicked_cb (GtkButton *button, GtkWidget *dialog)
{
@@ -1303,10 +1300,8 @@ mpp_add_property_button_clicked_cb (GtkButton *button, GtkWidget *dialog)
G_CALLBACK (mpp_property_dialog_label_changed_cb),
name_entry);
- mpp_property_dialog_setup_option_menu (
+ mpp_property_dialog_setup_combobox (
GTK_WIDGET (gtk_builder_get_object (builder, "type_menu")),
- G_CALLBACK (mpp_property_dialog_type_selected_cb),
- add_dialog,
mrp_property_type_as_string (MRP_PROPERTY_TYPE_STRING),
MRP_PROPERTY_TYPE_STRING,
mrp_property_type_as_string (MRP_PROPERTY_TYPE_INT),
diff --git a/src/planner-property-dialog.c b/src/planner-property-dialog.c
index 772d6013..fac90fc5 100644
--- a/src/planner-property-dialog.c
+++ b/src/planner-property-dialog.c
@@ -90,16 +90,12 @@ typedef struct {
} PropertyCmdLabelEdited;
-static void property_dialog_setup_option_menu (GtkWidget *option_menu,
- GCallback func,
- gpointer user_data,
+static void property_dialog_setup_combobox (GtkWidget *combo,
gconstpointer str1,
...);
-static gint property_dialog_get_selected (GtkWidget *option_menu);
+static gint property_dialog_get_selected (GtkWidget *combo);
static void property_dialog_close_cb (GtkWidget *button,
GtkWidget *dialog);
-static void property_dialog_type_selected_cb (GtkWidget *widget,
- GtkWidget *dialog);
static gboolean property_dialog_label_changed_cb (GtkWidget *label_entry,
GdkEvent *event,
GtkWidget *name_entry);
@@ -143,61 +139,68 @@ static void property_cmd_label_edited_free (PlannerCmd *cm
static void
-property_dialog_setup_option_menu (GtkWidget *option_menu,
- GCallback func,
- gpointer user_data,
- gconstpointer str1, ...)
+type_combo_get_name (GtkCellLayout *layout,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
{
- GtkWidget *menu;
- GtkWidget *menu_item;
- gint i;
- va_list args;
- gconstpointer str;
- gint type;
-
- menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (option_menu));
- if (menu) {
- gtk_widget_destroy (menu);
- }
+ gchar *name;
+ gtk_tree_model_get (model, iter, 0, &name, -1);
+ g_object_set (cell, "text", name, NULL);
+}
- menu = gtk_menu_new ();
+static void
+property_dialog_setup_combobox (GtkWidget *combo,
+ gconstpointer str1,
+ ...)
+{
+ GtkListStore *store;
+ GtkTreeIter iter;
+ gint i;
+ va_list args;
+ gconstpointer str;
+ gint type;
+ GtkCellRenderer *renderer;
+
+ store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
+ gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL (store));
+ g_object_unref (store);
va_start (args, str1);
for (str = str1, i = 0; str != NULL; str = va_arg (args, gpointer), i++) {
- menu_item = gtk_menu_item_new_with_label (str);
- gtk_widget_show (menu_item);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
-
type = va_arg (args, gint);
- g_object_set_data (G_OBJECT (menu_item),
- "data",
- GINT_TO_POINTER (type));
- if (func) {
- g_signal_connect (menu_item,
- "activate",
- func,
- user_data);
- }
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ 0, str,
+ 1, type,
+ -1);
}
va_end (args);
- gtk_widget_show (menu);
- gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo),
+ renderer, TRUE);
+ gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
+ renderer,
+ type_combo_get_name,
+ NULL, NULL);
}
static gint
-property_dialog_get_selected (GtkWidget *option_menu)
+property_dialog_get_selected (GtkWidget *combo)
{
- GtkWidget *menu;
- GtkWidget *item;
- gint ret;
-
- menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (option_menu));
+ GtkTreeIter iter;
+ gint ret;
- item = gtk_menu_get_active (GTK_MENU (menu));
-
- ret = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "data"));
+ 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,
+ 1, &ret,
+ -1);
return ret;
}
@@ -209,17 +212,6 @@ property_dialog_close_cb (GtkWidget *button,
gtk_widget_destroy (dialog);
}
-static void
-property_dialog_type_selected_cb (GtkWidget *widget,
- GtkWidget *dialog)
-{
- gint type;
-
- type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "data"));
-
- g_object_set_data (G_OBJECT (dialog), "type", GINT_TO_POINTER (type));
-}
-
static gboolean
property_dialog_label_changed_cb (GtkWidget *label_entry,
GdkEvent *event,
@@ -269,10 +261,8 @@ property_dialog_add_cb (GtkWidget *button,
G_CALLBACK (property_dialog_label_changed_cb),
name_entry);
- property_dialog_setup_option_menu (
+ property_dialog_setup_combobox (
GTK_WIDGET (gtk_builder_get_object (builder, "type_menu")),
- G_CALLBACK (property_dialog_type_selected_cb),
- add_dialog,
mrp_property_type_as_string (MRP_PROPERTY_TYPE_STRING),
MRP_PROPERTY_TYPE_STRING,
mrp_property_type_as_string (MRP_PROPERTY_TYPE_INT),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]