[gnome-builder] plugins/buildui: allow selecting auto-discover



commit eb9ac182c4e74cb3ea03b57b56a69e4ae9816af6
Author: Christian Hergert <chergert redhat com>
Date:   Tue Jul 19 22:01:52 2022 -0700

    plugins/buildui: allow selecting auto-discover
    
    Sort of a hack when we should probably just use a AdwExpanderRow, but this
    is a bit easier to wire up to the gsetting.

 src/libide/gui/ide-preferences-window.c            | 11 +++++++++++
 .../buildui/gbp-buildui-preferences-addin.c        | 23 ++++++++++++++++++++--
 2 files changed, 32 insertions(+), 2 deletions(-)
---
diff --git a/src/libide/gui/ide-preferences-window.c b/src/libide/gui/ide-preferences-window.c
index d7ed9eaf7..67968f0cc 100644
--- a/src/libide/gui/ide-preferences-window.c
+++ b/src/libide/gui/ide-preferences-window.c
@@ -285,6 +285,15 @@ search_changed_cb (IdePreferencesWindow *self,
     gtk_list_box_set_filter_func (page->list_box, filter_rows_cb, g_strdup (text), g_free);
 }
 
+static void
+set_page_action (GtkWidget  *widget,
+                 const char *action_name,
+                 GVariant   *param)
+{
+  ide_preferences_window_set_page (IDE_PREFERENCES_WINDOW (widget),
+                                   g_variant_get_string (param, NULL));
+}
+
 static void
 ide_preferences_window_extension_added (IdeExtensionSetAdapter *set,
                                         PeasPluginInfo         *plugin_info,
@@ -492,6 +501,8 @@ ide_preferences_window_class_init (IdePreferencesWindowClass *klass)
   gtk_widget_class_bind_template_callback (widget_class, go_back_cb);
 
   gtk_widget_class_add_binding_action (widget_class, GDK_KEY_w, GDK_CONTROL_MASK, "window.close", NULL);
+
+  gtk_widget_class_install_action (widget_class, "win.page", "s", set_page_action);
 }
 
 static void
diff --git a/src/plugins/buildui/gbp-buildui-preferences-addin.c 
b/src/plugins/buildui/gbp-buildui-preferences-addin.c
index ccefc52e0..060df1767 100644
--- a/src/plugins/buildui/gbp-buildui-preferences-addin.c
+++ b/src/plugins/buildui/gbp-buildui-preferences-addin.c
@@ -134,10 +134,13 @@ list_run_commands_cb (GObject      *object,
                       GAsyncResult *result,
                       gpointer      user_data)
 {
+  static GListStore *empty_model;
   IdeRunManager *run_manager = (IdeRunManager *)object;
+  g_autoptr(GtkFlattenListModel) flatten = NULL;
   g_autoptr(GtkDropDown) drop_down = user_data;
   g_autoptr(GListModel) model = NULL;
   g_autoptr(GError) error = NULL;
+  GListStore *wrapper;
   int command_index = -1;
 
   g_assert (IDE_IS_MAIN_THREAD ());
@@ -166,10 +169,26 @@ list_run_commands_cb (GObject      *object,
         }
     }
 
-  gtk_drop_down_set_model (drop_down, model);
+  if (!empty_model)
+    {
+      g_autoptr(IdeRunCommand) empty = g_object_new (IDE_TYPE_RUN_COMMAND,
+                                                     "id", "",
+                                                     "display-name", _("Automatically Discover"),
+                                                     NULL);
+      empty_model = g_list_store_new (IDE_TYPE_RUN_COMMAND);
+      g_list_store_append (empty_model, empty);
+    }
+
+  wrapper = g_list_store_new (G_TYPE_LIST_MODEL);
+  g_list_store_append (wrapper, empty_model);
+  if (model != NULL)
+    g_list_store_append (wrapper, model);
+  flatten = gtk_flatten_list_model_new (G_LIST_MODEL (wrapper));
+
+  gtk_drop_down_set_model (drop_down, G_LIST_MODEL (flatten));
 
   if (command_index > -1)
-    gtk_drop_down_set_selected (drop_down, command_index);
+    gtk_drop_down_set_selected (drop_down, command_index+1);
 
   g_signal_connect_object (drop_down,
                            "notify::selected-item",


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