Hello, this is the final patch!

greets

Juan Pablo
diff -r -u ../glade3_original/glade3/ChangeLog ./ChangeLog
--- ../glade3_original/glade3/ChangeLog	2005-09-09 01:29:48.000000000 -0300
+++ ./ChangeLog	2005-09-12 11:38:01.000000000 -0300
@@ -1,3 +1,13 @@
+2005-09-12  Juan Pablo Ugarte <[EMAIL PROTECTED]>
+
+	* src/glade-app.[ch]: Added accel_group member in GladeAppPriv.
+	  glade_app_set_accel_group() to handle shortcuts in every window.
+
+	* src/glade-project.[ch]: glade_project_set_accel_group().
+
+	* src/glade-project-window.c: Added UIManager's acceleration group to every
+	  window.
+
 2005-09-08  Tristan Van Berkom <[EMAIL PROTECTED]>
 
 	* src/glade-command.c: Added comment & use glade_widget_show/hide api.
diff -r -u ../glade3_original/glade3/src/glade-app.c ./src/glade-app.c
--- ../glade3_original/glade3/src/glade-app.c	2005-08-24 17:31:29.000000000 -0300
+++ ./src/glade-app.c	2005-09-12 10:56:46.000000000 -0300
@@ -81,6 +81,7 @@
 				      * will be used as the transient parent of all toplevel
 				      * GladeWidgets.
 				      */
+	GtkAccelGroup *accel_group;	/* Default acceleration group for this app */
 };
 
 enum
@@ -179,6 +180,7 @@
 on_palette_button_clicked (GladePalette *palette, GladeApp *app)
 {
 	GladeWidgetClass *class;
+	GladeWidget *widget;
 
 	g_return_if_fail (GLADE_IS_PALETTE (palette));
 	class = palette->current;
@@ -186,7 +188,15 @@
 	/* class may be NULL if the selector was pressed */
 	if (class && g_type_is_a (class->type, GTK_TYPE_WINDOW))
 	{
-		glade_command_create (class, NULL, NULL, app->priv->active_project);
+		widget = glade_command_create (class, NULL, NULL, app->priv->active_project);
+		
+		/* if this is a top level widget set the accel group */
+		if (app->priv->accel_group && GTK_IS_WINDOW (widget->object))
+		{
+			gtk_window_add_accel_group (GTK_WINDOW (widget->object),
+						    app->priv->accel_group);
+		}
+
 		glade_palette_unselect_widget (palette);
 		app->priv->add_class = NULL;
 	}
@@ -242,7 +252,7 @@
 glade_app_config_save (GladeApp *app)
 {
 	GIOChannel *fd;
-	gchar *data, *filename;
+	gchar *data=NULL, *filename;
 	const gchar *config_dir = g_get_user_config_dir ();
 	GError *error = NULL;
 	gsize size;
@@ -266,12 +276,13 @@
 	
 	fd = g_io_channel_new_file (filename, "w", &error);
 
-	if (error == NULL)
+	if (error == NULL){
 		data = g_key_file_to_data (app->priv->config, &size, &error);
+		
+		if (data && error == NULL)
+			g_io_channel_write_chars (fd, data, size, NULL, &error);
+	}
 	
-	if (error == NULL)
-		g_io_channel_write_chars (fd, data, size, NULL, &error);
-
 	/* Free resources */	
 	if (error)
 	{
@@ -351,6 +362,7 @@
 	
 	app->priv->add_class = NULL;
 	app->priv->alt_class = NULL;
+	app->priv->accel_group = NULL;
 	
 	/* Initialize app objects */
 	app->priv->catalogs = glade_catalog_load_all ();
@@ -593,6 +605,9 @@
 			  G_CALLBACK (on_widget_name_changed_cb), app->priv->editor);
 	g_signal_connect (G_OBJECT (project), "selection_changed",
 			  G_CALLBACK (on_project_selection_changed_cb), app);
+
+	/* add acceleration groups to every top level widget */
+	glade_project_set_accel_group (project, app->priv->accel_group);
 	
 	glade_app_set_project (app, project);
 	/* make sure the palette is sensitive */
@@ -742,6 +757,20 @@
 	}
 }
 
+/*
+ * glade_app_set_accel_group:
+ *
+ * Sets @accel_group to @app.
+ * The acceleration group will be atached to every toplevel widget in this application.
+ */
+void
+glade_app_set_accel_group (GladeApp *app, GtkAccelGroup *accel_group)
+{
+	g_return_if_fail(GLADE_IS_APP(app) && GTK_IS_ACCEL_GROUP (accel_group));
+	
+	app->priv->accel_group = accel_group;
+}
+
 /* Default application convinience functions */
 
 static GladeApp *glade_default_app = NULL;
diff -r -u ../glade3_original/glade3/src/glade-app.h ./src/glade-app.h
--- ../glade3_original/glade3/src/glade-app.h	2005-08-11 16:19:55.000000000 -0300
+++ ./src/glade-app.h	2005-09-10 21:57:18.000000000 -0300
@@ -98,6 +98,7 @@
 LIBGLADEUI_API gint               glade_app_config_save (GladeApp *app);
 LIBGLADEUI_API void               glade_app_set_transient_parent (GladeApp *app, GtkWindow *parent);
 LIBGLADEUI_API GtkWindow         *glade_app_get_transient_parent (GladeApp *app);
+LIBGLADEUI_API void               glade_app_set_accel_group (GladeApp *app, GtkAccelGroup *accel_group);
 
 /* Default glade application */
 LIBGLADEUI_API void               glade_default_app_set (GladeApp *app);
diff -r -u ../glade3_original/glade3/src/glade-project.c ./src/glade-project.c
--- ../glade3_original/glade3/src/glade-project.c	2005-08-18 19:03:45.000000000 -0300
+++ ./src/glade-project.c	2005-09-12 10:49:35.000000000 -0300
@@ -886,3 +886,25 @@
 	g_return_val_if_fail (GLADE_IS_PROJECT (project), 0);
 	return GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (project->action), "merge_id"));
 }
+
+/*
+ * glade_project_set_accel_group:
+ *
+ * Set @accel_group to every top level widget in @project.
+ */
+void
+glade_project_set_accel_group (GladeProject *project, GtkAccelGroup *accel_group)
+{
+	GList *objects;
+
+	g_return_if_fail (GLADE_IS_PROJECT (project) && GTK_IS_ACCEL_GROUP (accel_group));
+                
+	objects = project->objects;
+	while (objects)
+	{
+		if(GTK_IS_WINDOW (objects->data))
+			gtk_window_add_accel_group (GTK_WINDOW (objects->data), accel_group);
+
+		objects = objects->next;
+	}
+}
diff -r -u ../glade3_original/glade3/src/glade-project.h ./src/glade-project.h
--- ../glade3_original/glade3/src/glade-project.h	2005-08-18 19:03:45.000000000 -0300
+++ ./src/glade-project.h	2005-09-12 10:33:07.000000000 -0300
@@ -102,8 +102,8 @@
 
 LIBGLADEUI_API GtkWidget    *glade_project_get_menuitem          (GladeProject *project);
 LIBGLADEUI_API guint         glade_project_get_menuitem_merge_id (GladeProject *project);
+LIBGLADEUI_API void          glade_project_set_accel_group (GladeProject *project, GtkAccelGroup *accel_group);
 
 G_END_DECLS
 
 #endif /* __GLADE_PROJECT_H__ */
-
diff -r -u ../glade3_original/glade3/src/glade-project-window.c ./src/glade-project-window.c
--- ../glade3_original/glade3/src/glade-project-window.c	2005-09-01 23:54:48.000000000 -0300
+++ ./src/glade-project-window.c	2005-09-10 21:57:18.000000000 -0300
@@ -37,6 +37,10 @@
 #define CONFIG_RECENT_PROJECTS     "Recent Projects"
 #define CONFIG_RECENT_PROJECTS_MAX "max_recent_projects"
 
+#define GLADE_ACTION_GROUP_MENU "GladeMenu"
+#define GLADE_ACTION_GROUP_PROJECT "GladeProject"
+#define GLADE_ACTION_GROUP_RECENT "GladeRecent"
+
 struct _GladeProjectWindowPriv {
 	/* Application widgets */
 	GtkWidget *window; /* Main window */
@@ -48,9 +52,9 @@
 	
 
 	GtkUIManager *ui;		/* The UIManager */
-	GtkActionGroup *actions;	/* All the static actions */
-	GtkActionGroup *p_actions;	/* Projects actions */
-	GtkActionGroup *rp_actions;	/* Recent projects actions */
+	GtkActionGroup *menu_actions;	/* All the static actions */
+	GtkActionGroup *project_actions;/* Projects actions */
+	GtkActionGroup *recent_actions;	/* Recent projects actions */
 
 	GQueue *recent_projects;	/* A GtkAction queue */
 	gint rp_max;			/* Maximun Recent Projects entries */
@@ -117,7 +121,7 @@
 	gtk_ui_manager_remove_ui(gpw->priv->ui,
 				 glade_project_get_menuitem_merge_id(project));
 
-	gtk_action_group_remove_action (gpw->priv->p_actions,
+	gtk_action_group_remove_action (gpw->priv->project_actions,
 					GTK_ACTION (project->action));
 	
 	g_object_unref (G_OBJECT (project->action));
@@ -141,7 +145,7 @@
 	
 	gtk_ui_manager_remove_ui(gpw->priv->ui,	merge_id);
 
-	gtk_action_group_remove_action (gpw->priv->rp_actions, action);
+	gtk_action_group_remove_action (gpw->priv->recent_actions, action);
 	
 	g_queue_remove (gpw->priv->recent_projects, action);
 	
@@ -187,7 +191,7 @@
 	
 	/* Add action */
 	action = gtk_action_new (action_name, label, NULL, NULL);
-	gtk_action_group_add_action_with_accel (gpw->priv->rp_actions, action, "");
+	gtk_action_group_add_action_with_accel (gpw->priv->recent_actions, action, "");
 	g_signal_connect (G_OBJECT (action), "activate", (GCallback)gpw_recent_project_open_cb, gpw);
 	
 	/* Add menuitem */
@@ -1181,22 +1185,22 @@
 {
 	GError *error = NULL;
 	
-	gpw->priv->actions = gtk_action_group_new ("actions");
-	gtk_action_group_add_actions (gpw->priv->actions, entries, n_entries, gpw);
-	gtk_action_group_add_toggle_actions (gpw->priv->actions, view_entries,
+	gpw->priv->menu_actions = gtk_action_group_new (GLADE_ACTION_GROUP_MENU);
+	gtk_action_group_add_actions (gpw->priv->menu_actions, entries, n_entries, gpw);
+	gtk_action_group_add_toggle_actions (gpw->priv->menu_actions, view_entries,
 						n_view_entries, gpw);
 
-	gpw->priv->p_actions = gtk_action_group_new ("p_actions");
+	gpw->priv->project_actions = gtk_action_group_new (GLADE_ACTION_GROUP_PROJECT);
 
-	gpw->priv->rp_actions = gtk_action_group_new ("rp_actions");
+	gpw->priv->recent_actions = gtk_action_group_new (GLADE_ACTION_GROUP_RECENT);
 	
 	gpw->priv->ui = gtk_ui_manager_new ();
 	g_signal_connect(G_OBJECT(gpw->priv->ui), "connect-proxy",
 			 (GCallback)gpw_ui_connect_proxy_cb, gpw);
 
-	gtk_ui_manager_insert_action_group (gpw->priv->ui, gpw->priv->actions, 0);
-	gtk_ui_manager_insert_action_group (gpw->priv->ui, gpw->priv->p_actions, 1);
-	gtk_ui_manager_insert_action_group (gpw->priv->ui, gpw->priv->rp_actions, 2);
+	gtk_ui_manager_insert_action_group (gpw->priv->ui, gpw->priv->menu_actions, 0);
+	gtk_ui_manager_insert_action_group (gpw->priv->ui, gpw->priv->project_actions, 1);
+	gtk_ui_manager_insert_action_group (gpw->priv->ui, gpw->priv->recent_actions, 2);
 	
 	gtk_window_add_accel_group (GTK_WINDOW (gpw->priv->window), 
 				  gtk_ui_manager_get_accel_group (gpw->priv->ui));
@@ -1361,7 +1365,7 @@
 	g_signal_connect (G_OBJECT (project->action), "activate",
 			  (GCallback) glade_project_window_set_project, project);
 	
-	gtk_action_group_add_action_with_accel (gpw->priv->p_actions,
+	gtk_action_group_add_action_with_accel (gpw->priv->project_actions,
 						GTK_ACTION (project->action), "");
 	
 	/* Add menuitem to menu */
@@ -1631,6 +1635,7 @@
 glade_project_window_new (void)
 {
 	GladeProjectWindow *gpw;
+	GtkAccelGroup *accel_group;
 	
 	gpw = g_object_new (GLADE_TYPE_PROJECT_WINDOW, NULL);
 
@@ -1639,5 +1644,13 @@
 	gpw_create_editor  (gpw);
 
 	glade_app_set_window (GLADE_APP (gpw), gpw->priv->window);
+
+	accel_group = gtk_ui_manager_get_accel_group(gpw->priv->ui);
+	glade_app_set_accel_group (GLADE_APP (gpw), accel_group);
+
+	gtk_window_add_accel_group(gpw->priv->palette_window, accel_group);
+	gtk_window_add_accel_group(gpw->priv->editor_window, accel_group);
+	gtk_window_add_accel_group(GTK_WINDOW (glade_app_get_clipboard_view (GLADE_APP (gpw))), accel_group);
+
 	return gpw;
 }
diff -r -u ../glade3_original/glade3/src/glade-widget.c ./src/glade-widget.c
--- ../glade3_original/glade3/src/glade-widget.c	2005-09-09 01:29:48.000000000 -0300
+++ ./src/glade-widget.c	2005-09-10 21:57:18.000000000 -0300
@@ -1699,27 +1699,6 @@
 }
 
 static gboolean
-glade_widget_key_press (GtkWidget *event_widget,
-			GdkEventKey *event,
-			gpointer unused_data)
-{
-	GladeWidget *glade_widget;
-
-	g_return_val_if_fail (GTK_IS_WIDGET (event_widget), FALSE);
-
-	glade_widget = glade_widget_get_from_gobject (event_widget);
-
-	/* We will delete all the selected items */
-	if (event->keyval == GDK_Delete)
-	{
-		glade_util_delete_selection ();
-		return TRUE;
-	}
-
-	return FALSE;
-}
-
-static gboolean
 glade_widget_event (GtkWidget *widget,
 		    GdkEvent *event,
 		    gpointer unused_data)
@@ -1867,16 +1846,13 @@
 			 */
 			gtk_widget_add_events (GTK_WIDGET(new_object),
 					       GDK_BUTTON_PRESS_MASK   |
-					       GDK_BUTTON_RELEASE_MASK |
-					       GDK_KEY_PRESS_MASK);
+					       GDK_BUTTON_RELEASE_MASK);
 
 			if (GTK_WIDGET_TOPLEVEL (new_object))
 				g_signal_connect (G_OBJECT (new_object), "delete_event",
 						  G_CALLBACK (glade_widget_hide_on_delete), NULL);
 			g_signal_connect (G_OBJECT (new_object), "popup_menu",
 					  G_CALLBACK (glade_widget_popup_menu), NULL);
-			g_signal_connect (G_OBJECT (new_object), "key_press_event",
-					  G_CALLBACK (glade_widget_key_press), NULL);
 
 			glade_widget_connect_signal_handlers (GTK_WIDGET(new_object), NULL);
 		}
_______________________________________________
Glade-devel maillist  -  Glade-devel@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/glade-devel

Reply via email to