--- a/pidgin/pidginapplication.c Tue May 03 00:53:26 2022 -0500
+++ b/pidgin/pidginapplication.c Tue May 03 01:54:18 2022 -0500
@@ -56,6 +56,8 @@
struct _PidginApplication {
+ GHashTable *action_groups; /******************************************************************************
@@ -615,6 +617,27 @@
/******************************************************************************
+ * GtkApplication Implementation + *****************************************************************************/ +pidgin_application_window_added(GtkApplication *application, + PidginApplication *pidgin_application = PIDGIN_APPLICATION(application); + g_hash_table_iter_init(&iter, pidgin_application->action_groups); + while(g_hash_table_iter_next(&iter, &key, &value)) { + GActionGroup *action_group = value; + gtk_widget_insert_action_group(GTK_WIDGET(window), prefix, +/****************************************************************************** * GApplication Implementation
*****************************************************************************/
@@ -824,11 +847,23 @@
*****************************************************************************/
+pidgin_application_dispose(GObject *obj) { + PidginApplication *application = PIDGIN_APPLICATION(obj); + g_clear_pointer(&application->action_groups, g_hash_table_destroy); + G_OBJECT_CLASS(pidgin_application_parent_class)->dispose(obj); pidgin_application_init(PidginApplication *application) {
GApplication *gapp = G_APPLICATION(application);
+ application->action_groups = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, g_object_unref); g_application_add_main_option_entries(gapp, option_entries);
g_application_add_option_group(gapp, purple_get_option_group());
g_application_add_option_group(gapp, gplugin_get_option_group());
@@ -860,12 +895,18 @@
pidgin_application_class_init(PidginApplicationClass *klass) {
+ GObjectClass *obj_class = G_OBJECT_CLASS(klass); GApplicationClass *app_class = G_APPLICATION_CLASS(klass);
+ GtkApplicationClass *gtk_app_class = GTK_APPLICATION_CLASS(klass); + obj_class->dispose = pidgin_application_dispose; app_class->startup = pidgin_application_startup;
app_class->activate = pidgin_application_activate;
app_class->command_line = pidgin_application_command_line;
app_class->handle_local_options = pidgin_application_handle_local_options;
+ gtk_app_class->window_added = pidgin_application_window_added; /******************************************************************************
@@ -881,3 +922,33 @@
"register-session", TRUE,
+pidgin_application_add_action_group(PidginApplication *application, + GActionGroup *action_group) + g_return_if_fail(prefix != NULL); + if(G_IS_ACTION_GROUP(action_group)) { + /* If action_group is valid, we need to create new references to the + * prefix and action_group when inserting them into the hash table. + g_hash_table_insert(application->action_groups, g_strdup(prefix), + g_object_ref(action_group)); + g_hash_table_remove(application->action_groups, prefix); + /* Now walk through the windows and add/remove the action group. */ + windows = gtk_application_get_windows(GTK_APPLICATION(application)); + while(windows != NULL) { + GtkWidget *window = GTK_WIDGET(windows->data); + gtk_widget_insert_action_group(window, prefix, action_group); + windows = windows->next; --- a/pidgin/pidginapplication.h Tue May 03 00:53:26 2022 -0500
+++ b/pidgin/pidginapplication.h Tue May 03 01:54:18 2022 -0500
@@ -56,6 +56,23 @@
GApplication *pidgin_application_new(void);
+ * pidgin_application_add_action_group: + * @application: The [class@Application] instance. + * @prefix: The action prefix. + * @action_group: The [iface@Gio.ActionGroup] to add. + * Adds @action_group to all of the windows that @application knows about and + * will automatically add @action_group to any newly created application + * To remove @action_group from every window, call this function with the same + * prefix, but %NULL for @action_group. +void pidgin_application_add_action_group(PidginApplication *application, const gchar *prefix, GActionGroup *action_group); #endif /* PIDGIN_APPLICATION_H */