[anjuta] project-manager: Select a valid default node in ProjectChooser button
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] project-manager: Select a valid default node in ProjectChooser button
- Date: Wed, 11 Jan 2012 21:44:31 +0000 (UTC)
commit ea6a12597530cec650e54091e1ab35202876e384
Author: SÃbastien Granjoux <seb sfo free fr>
Date: Wed Jan 11 22:38:00 2012 +0100
project-manager: Select a valid default node in ProjectChooser button
plugins/project-manager/project-chooser.c | 50 ++++++++++++++++++++++++++++-
1 files changed, 49 insertions(+), 1 deletions(-)
---
diff --git a/plugins/project-manager/project-chooser.c b/plugins/project-manager/project-chooser.c
index e4ff86a..bbd77b7 100644
--- a/plugins/project-manager/project-chooser.c
+++ b/plugins/project-manager/project-chooser.c
@@ -245,6 +245,32 @@ anjuta_pm_chooser_button_new (void)
/* Implement IAnjutaProjectChooser interface
*---------------------------------------------------------------------------*/
+typedef struct
+{
+ GtkTreeIter iter;
+ gboolean found;
+ AnjutaPmChooserButton *button;
+} SearchPacket;
+
+static gboolean
+anjuta_pm_chooser_is_node_valid (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ SearchPacket *packet = (SearchPacket *)data;
+
+ if (is_node_valid (model, iter, packet->button))
+ {
+ packet->iter = *iter;
+ packet->found = TRUE;
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static gboolean
anjuta_pm_chooser_set_project_model (IAnjutaProjectChooser *iface, IAnjutaProjectManager *manager, AnjutaProjectNodeType child_type, GError **error)
{
@@ -252,6 +278,7 @@ anjuta_pm_chooser_set_project_model (IAnjutaProjectChooser *iface, IAnjutaProjec
gboolean found;
GtkTreeModelFilterVisibleFunc func;
const gchar *label;
+ GbfProjectModel *model;
ANJUTA_PM_CHOOSER_BUTTON (iface)->priv->child = child_type & ANJUTA_PROJECT_TYPE_MASK;
@@ -295,13 +322,34 @@ anjuta_pm_chooser_set_project_model (IAnjutaProjectChooser *iface, IAnjutaProjec
anjuta_tree_combo_box_set_invalid_text (ANJUTA_TREE_COMBO_BOX (iface), label);
anjuta_tree_combo_box_set_valid_function (ANJUTA_TREE_COMBO_BOX (iface), (GtkTreeModelFilterVisibleFunc)is_node_valid, iface, NULL);
+ /* Find a default node */
+ model = gbf_project_view_get_model(ANJUTA_PLUGIN_PROJECT_MANAGER (manager)->view);
found = gbf_project_view_get_first_selected (ANJUTA_PLUGIN_PROJECT_MANAGER (manager)->view, &selected) != NULL;
+ while (found && !is_node_valid (GTK_TREE_MODEL (model), &selected, ANJUTA_PM_CHOOSER_BUTTON (iface)))
+ {
+ GtkTreeIter iter;
+
+ found = gtk_tree_model_iter_parent (GTK_TREE_MODEL (model), &iter, &selected);
+ selected = iter;
+ }
+ if (!found)
+ {
+ SearchPacket packet;
+ packet.found = FALSE;
+ packet.button = ANJUTA_PM_CHOOSER_BUTTON (iface);
+ gtk_tree_model_foreach (GTK_TREE_MODEL (model), anjuta_pm_chooser_is_node_valid, &packet);
+ if (packet.found)
+ {
+ found = packet.found;
+ selected = packet.iter;
+ }
+ }
/* Add combo node selection */
setup_nodes_combo_box (ANJUTA_PM_CHOOSER_BUTTON (iface),
- gbf_project_view_get_model(ANJUTA_PLUGIN_PROJECT_MANAGER (manager)->view),
+ model,
NULL,
func,
NULL,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]