diff options
author | Ryan Lortie <desrt@desrt.ca> | 2012-01-05 22:22:06 -0500 |
---|---|---|
committer | Ryan Lortie <desrt@desrt.ca> | 2012-01-09 15:02:06 +0100 |
commit | 88ec007b9858132720cc602ac1a63396f66116bc (patch) | |
tree | 0f82ee7e7fc2d40f80835def27050abc55d5fbc6 /gtk/gtkapplicationwindow.c | |
parent | a3629592d303b4eea920b25746a13d194f08335c (diff) | |
download | gtk+-88ec007b9858132720cc602ac1a63396f66116bc.tar.gz |
Add new GtkActionable interface
This is the interface for GtkWidgets that can be associated with an
action on a GtkAppicationWindow or associated GtkApplication.
It essentially features 'action-name' and 'action-target' properties
with some associated convenience API.
This interface is implemented by GtkButton and GtkToolButton.
https://bugzilla.gnome.org/show_bug.cgi?id=667394
Diffstat (limited to 'gtk/gtkapplicationwindow.c')
-rw-r--r-- | gtk/gtkapplicationwindow.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/gtk/gtkapplicationwindow.c b/gtk/gtkapplicationwindow.c index 5f1d57c83d..341e57709a 100644 --- a/gtk/gtkapplicationwindow.c +++ b/gtk/gtkapplicationwindow.c @@ -182,6 +182,7 @@ struct _GtkApplicationWindowPrivate { GSimpleActionGroup *actions; GActionObservable *muxer; + gboolean muxer_initialised; GtkWidget *menubar; GtkAccelGroup *accels; GSList *accel_closures; @@ -671,14 +672,11 @@ gtk_application_window_real_realize (GtkWidget *widget) g_signal_connect (settings, "notify::gtk-shell-shows-menubar", G_CALLBACK (gtk_application_window_shell_shows_menubar_changed), window); - if (window->priv->muxer == NULL) + if (!window->priv->muxer_initialised) { - GActionMuxer *muxer; - - muxer = g_action_muxer_new (); - g_action_muxer_insert (muxer, "app", G_ACTION_GROUP (application)); - g_action_muxer_insert (muxer, "win", G_ACTION_GROUP (window)); - window->priv->muxer = G_ACTION_OBSERVABLE (muxer); + g_action_muxer_insert (G_ACTION_MUXER (window->priv->muxer), "app", G_ACTION_GROUP (application)); + g_action_muxer_insert (G_ACTION_MUXER (window->priv->muxer), "win", G_ACTION_GROUP (window)); + window->priv->muxer_initialised = TRUE; } gtk_application_window_update_shell_shows_app_menu (window, settings); @@ -875,6 +873,8 @@ gtk_application_window_init (GtkApplicationWindow *window) G_CALLBACK (g_action_group_action_state_changed), window); g_signal_connect_swapped (window->priv->actions, "action-removed", G_CALLBACK (g_action_group_action_removed), window); + + window->priv->muxer = G_ACTION_OBSERVABLE (g_action_muxer_new ()); } static void @@ -982,3 +982,13 @@ gtk_application_window_set_show_menubar (GtkApplicationWindow *window, g_object_notify_by_pspec (G_OBJECT (window), gtk_application_window_properties[PROP_SHOW_MENUBAR]); } } + +GSimpleActionObserver * +gtk_application_window_get_observer (GtkApplicationWindow *window, + const gchar *action_name, + GVariant *target) +{ + g_return_val_if_fail (GTK_IS_APPLICATION_WINDOW (window), NULL); + + return g_simple_action_observer_new (window->priv->muxer, action_name, target); +} |