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