[Planner Dev] Taking focus when a group is inserted



Hi Richard!

Another patch that put the focus in the right place when a new group is
added. Also, I have modified the focus when you add a resource, so the
task name cell is selected and in edit mode.

Cheers

-- Alvaro
? group-focus.diff
? intltool-modules
? resource-undo-name.diff
? resource-undo-name.diff2
? resource-undo.diff
? dotnet/Makefile
? dotnet/Makefile.in
? dotnet/libplanner/Makefile
? dotnet/libplanner/Makefile.in
? dotnet/samples/Makefile
? dotnet/samples/Makefile.in
? src/planner-resource-view.c.diff
Index: src/planner-group-dialog.c
===================================================================
RCS file: /cvs/gnome/planner/src/planner-group-dialog.c,v
retrieving revision 1.2
diff -u -b -B -p -r1.2 planner-group-dialog.c
--- src/planner-group-dialog.c	11 Dec 2003 10:52:46 -0000	1.2
+++ src/planner-group-dialog.c	28 Jan 2004 08:22:08 -0000
@@ -42,6 +42,70 @@ typedef struct {
 	GtkWidget   *remove_button;
 } DialogData;
 
+typedef struct {
+	MrpGroup    *group;
+	GtkTreePath *found_path;
+	GtkTreeIter *found_iter;
+} FindGroupData;
+
+static void 
+group_dialog_free_find_group_data (FindGroupData *data)
+{
+	if (data->found_path) {
+		gtk_tree_path_free (data->found_path);
+	}
+	if (data->found_iter) {
+		gtk_tree_iter_free (data->found_iter);
+	}
+	
+	g_free (data);
+}
+
+static gboolean
+group_dialog_foreach_find_group_func (GtkTreeModel     *model,
+				      GtkTreePath      *path,
+				      GtkTreeIter      *iter,
+				      FindGroupData    *data)
+{
+	MrpGroup *group;
+	
+	gtk_tree_model_get (model, iter,
+			    GROUP_COL, &group,
+			    -1);
+	
+	if (group == data->group) {
+		data->found_path = gtk_tree_path_copy (path);
+		data->found_iter = gtk_tree_iter_copy (iter);
+		return TRUE;
+	}
+	
+	return FALSE;
+}
+
+static FindGroupData *
+group_dialog_find_group (GtkTreeView *tree_view, MrpGroup *group)
+{
+	FindGroupData *data;
+	GtkTreeModel  *model;
+	
+	data = g_new0 (FindGroupData, 1);
+	data->group = group;
+	data->found_path = NULL;
+
+	model = gtk_tree_view_get_model (tree_view);
+
+	gtk_tree_model_foreach (model,
+				(GtkTreeModelForeachFunc) group_dialog_foreach_find_group_func,
+				data);
+
+	if (data->found_path) {
+		return data;
+	}
+	
+	g_free (data);
+	return NULL;
+}
+
 
 static GtkWidget * 
 group_dialog_create                       (MrpProject           *project);
@@ -159,6 +223,9 @@ group_dialog_insert_group_cb (GtkWidget 
 {
 	DialogData *data;
 	MrpGroup          *group;
+	FindGroupData  *find_data;
+	GtkTreeModel   *model;
+	GtkTreePath    *path;
 	
 	g_return_if_fail (GTK_IS_DIALOG (dialog));
 
@@ -167,6 +234,24 @@ group_dialog_insert_group_cb (GtkWidget 
 	group = mrp_group_new ();
 
 	mrp_project_add_group (data->project, group);
+
+	if (!GTK_WIDGET_HAS_FOCUS (data->tree_view)) {
+		gtk_widget_grab_focus (GTK_WIDGET (data->tree_view));
+	}
+
+	find_data = group_dialog_find_group (data->tree_view, group);
+	if (find_data) {
+		model = gtk_tree_view_get_model (data->tree_view);
+		path = gtk_tree_model_get_path (model, find_data->found_iter);
+		
+		gtk_tree_view_set_cursor (data->tree_view,
+					  path,
+					  gtk_tree_view_get_column (data->tree_view, 0),
+					  TRUE);	
+		gtk_tree_path_free (path);
+
+		group_dialog_free_find_group_data (find_data);
+	}	
 }
 
 static void
Index: src/planner-group-model.c
===================================================================
RCS file: /cvs/gnome/planner/src/planner-group-model.c,v
retrieving revision 1.2
diff -u -b -B -p -r1.2 planner-group-model.c
--- src/planner-group-model.c	11 Dec 2003 10:52:46 -0000	1.2
+++ src/planner-group-model.c	28 Jan 2004 08:22:08 -0000
@@ -158,6 +158,9 @@ mgm_get_column_type (GtkTreeModel *tree_
         case GROUP_COL_GROUP_DEFAULT:
                 return G_TYPE_BOOLEAN;
 
+	case GROUP_COL:
+		return MRP_TYPE_GROUP;
+
 	default:
 		return G_TYPE_INVALID;
         }
@@ -223,6 +226,12 @@ mgm_get_value (GtkTreeModel *tree_model,
 		
                 break;
 
+	case GROUP_COL:
+                g_value_init (value, MRP_TYPE_GROUP);
+		g_value_set_object (value, group);
+		
+                break;
+
 	default:
                 g_assert_not_reached ();
         }
Index: src/planner-group-model.h
===================================================================
RCS file: /cvs/gnome/planner/src/planner-group-model.h,v
retrieving revision 1.2
diff -u -b -B -p -r1.2 planner-group-model.h
--- src/planner-group-model.h	11 Dec 2003 10:52:46 -0000	1.2
+++ src/planner-group-model.h	28 Jan 2004 08:22:08 -0000
@@ -60,6 +60,7 @@ enum {
         GROUP_COL_MANAGER_NAME,
         GROUP_COL_MANAGER_PHONE,
         GROUP_COL_MANAGER_EMAIL,
+	GROUP_COL,
         NUMBER_OF_GROUP_COLS
 };
 
Index: src/planner-resource-view.c
===================================================================
RCS file: /cvs/gnome/planner/src/planner-resource-view.c,v
retrieving revision 1.6
diff -u -b -B -p -r1.6 planner-resource-view.c
--- src/planner-resource-view.c	28 Jan 2004 06:21:09 -0000	1.6
+++ src/planner-resource-view.c	28 Jan 2004 08:22:13 -0000
@@ -4,7 +4,7 @@
  * Copyright (C) 2002 CodeFactory AB
  * Copyright (C) 2002 Richard Hult <richard imendio com>
  * Copyright (C) 2002 Mikael Hallendal <micke imendio com>
- * Copyright (C) 2002 Alvaro del Castillo <acs barrapunto com>
+ * Copyright (C) 2002-2004 Alvaro del Castillo <acs barrapunto com>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -812,8 +813,8 @@ resource_view_insert_resource_cb (Bonobo
 		
 		gtk_tree_view_set_cursor (priv->tree_view,
 					  path,
-					  NULL,
-					  FALSE);
+					  gtk_tree_view_get_column (priv->tree_view, 0),
+					  TRUE);
 	
 		gtk_tree_path_free (path);
 

Attachment: signature.asc
Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente



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