summaryrefslogtreecommitdiff
path: root/gtk/gtkwindow.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkwindow.c')
-rw-r--r--gtk/gtkwindow.c40
1 files changed, 28 insertions, 12 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 49b3df3aa8..55adc582ae 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -54,6 +54,7 @@
#include "gtkbutton.h"
#include "gtkheaderbar.h"
#include "a11y/gtkwindowaccessible.h"
+#include "gtkapplicationprivate.h"
#include "deprecated/gtkstyle.h"
@@ -463,7 +464,6 @@ static void resize_grip_destroy_window (GtkWindow *window);
static void update_grip_visibility (GtkWindow *window);
static void update_window_buttons (GtkWindow *window);
-static void gtk_window_notify_keys_changed (GtkWindow *window);
static GtkKeyHash *gtk_window_get_key_hash (GtkWindow *window);
static void gtk_window_free_key_hash (GtkWindow *window);
static void gtk_window_on_composited_changed (GdkScreen *screen,
@@ -2163,8 +2163,8 @@ handle_keys_changed (gpointer data)
return FALSE;
}
-static void
-gtk_window_notify_keys_changed (GtkWindow *window)
+void
+_gtk_window_notify_keys_changed (GtkWindow *window)
{
GtkWindowPrivate *priv = window->priv;
@@ -2190,9 +2190,9 @@ gtk_window_add_accel_group (GtkWindow *window,
_gtk_accel_group_attach (accel_group, G_OBJECT (window));
g_signal_connect_object (accel_group, "accel-changed",
- G_CALLBACK (gtk_window_notify_keys_changed),
+ G_CALLBACK (_gtk_window_notify_keys_changed),
window, G_CONNECT_SWAPPED);
- gtk_window_notify_keys_changed (window);
+ _gtk_window_notify_keys_changed (window);
}
/**
@@ -2210,10 +2210,10 @@ gtk_window_remove_accel_group (GtkWindow *window,
g_return_if_fail (GTK_IS_ACCEL_GROUP (accel_group));
g_signal_handlers_disconnect_by_func (accel_group,
- gtk_window_notify_keys_changed,
+ _gtk_window_notify_keys_changed,
window);
_gtk_accel_group_detach (accel_group, G_OBJECT (window));
- gtk_window_notify_keys_changed (window);
+ _gtk_window_notify_keys_changed (window);
}
static GtkMnemonicHash *
@@ -2246,7 +2246,7 @@ gtk_window_add_mnemonic (GtkWindow *window,
_gtk_mnemonic_hash_add (gtk_window_get_mnemonic_hash (window, TRUE),
keyval, target);
- gtk_window_notify_keys_changed (window);
+ _gtk_window_notify_keys_changed (window);
}
/**
@@ -2267,7 +2267,7 @@ gtk_window_remove_mnemonic (GtkWindow *window,
_gtk_mnemonic_hash_remove (gtk_window_get_mnemonic_hash (window, TRUE),
keyval, target);
- gtk_window_notify_keys_changed (window);
+ _gtk_window_notify_keys_changed (window);
}
/**
@@ -2321,7 +2321,7 @@ gtk_window_set_mnemonic_modifier (GtkWindow *window,
priv = window->priv;
priv->mnemonic_modifier = modifier;
- gtk_window_notify_keys_changed (window);
+ _gtk_window_notify_keys_changed (window);
}
/**
@@ -2951,6 +2951,8 @@ gtk_window_set_application (GtkWindow *window,
_gtk_widget_update_parent_muxer (GTK_WIDGET (window));
+ _gtk_window_notify_keys_changed (window);
+
g_object_notify (G_OBJECT (window), "application");
}
}
@@ -10660,6 +10662,9 @@ _gtk_window_keys_foreach (GtkWindow *window,
groups = groups->next;
}
+
+ if (window->priv->application)
+ gtk_application_foreach_accel_keys (window->priv->application, window, func, func_data);
}
static void
@@ -10811,8 +10816,19 @@ gtk_window_activate_key (GtkWindow *window,
else
{
if (enable_accels)
- return gtk_accel_groups_activate (G_OBJECT (window), found_entry->keyval,
- found_entry->modifiers);
+ {
+ if (gtk_accel_groups_activate (G_OBJECT (window), found_entry->keyval, found_entry->modifiers))
+ return TRUE;
+
+ if (window->priv->application)
+ {
+ GtkActionMuxer *muxer = _gtk_widget_get_action_muxer (GTK_WIDGET (window));
+
+ return gtk_application_activate_accel (window->priv->application,
+ G_ACTION_GROUP (muxer),
+ found_entry->keyval, found_entry->modifiers);
+ }
+ }
}
}