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 - [email protected]
http://lists.ximian.com/mailman/listinfo/glade-devel