Index: gtkwidget.c
===================================================================
--- gtkwidget.c	(revision 21776)
+++ gtkwidget.c	(working copy)
@@ -53,6 +53,7 @@
 #include "gtkinvisible.h"
 #include "gtkbuildable.h"
 #include "gtkbuilderprivate.h"
+#include "gtkaction.h"
 #include "gtkalias.h"
 
 #define WIDGET_CLASS(w)	 GTK_WIDGET_GET_CLASS (w)
@@ -154,7 +155,8 @@ enum {
   PROP_HAS_TOOLTIP,
   PROP_TOOLTIP_MARKUP,
   PROP_TOOLTIP_TEXT,
-  PROP_WINDOW
+  PROP_WINDOW,
+  PROP_ACTION
 };
 
 typedef	struct	_GtkStateData	 GtkStateData;
@@ -691,6 +693,22 @@ gtk_widget_class_init (GtkWidgetClass *k
 							GDK_TYPE_WINDOW,
 							GTK_PARAM_READABLE));
 
+
+  /**
+   * GtkWidget:action-controller:
+   *
+   * The action this widget is a proxy for
+   *
+   * Since: 2.16
+   */
+  g_object_class_install_property (gobject_class,
+				   PROP_ACTION,
+				   g_param_spec_object ("action-controller",
+ 							P_("Action Controller"),
+							P_("The action this widget is a proxy for"),
+							GTK_TYPE_ACTION,
+							GTK_PARAM_READWRITE));
+
   widget_signals[SHOW] =
     g_signal_new (I_("show"),
 		  G_TYPE_FROM_CLASS (gobject_class),
@@ -2516,6 +2534,10 @@ gtk_widget_set_property (GObject        
       gtk_widget_real_set_has_tooltip (widget, tmp, FALSE);
       gtk_widget_trigger_tooltip_query (widget);
       break;
+    case PROP_ACTION:
+      if (g_value_get_object (value))
+	gtk_widget_set_action (widget, (GtkAction *)g_value_get_object (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -2623,6 +2645,9 @@ gtk_widget_get_property (GObject        
     case PROP_WINDOW:
       g_value_set_object (value, gtk_widget_get_window (widget));
       break;
+    case PROP_ACTION:
+      g_value_set_object (value, gtk_widget_get_action (widget));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
Index: gtkaction.c
===================================================================
--- gtkaction.c	(revision 21776)
+++ gtkaction.c	(working copy)
@@ -1060,6 +1060,15 @@ gtk_action_get_proxies (GtkAction *actio
   return action->private_data->proxies;
 }
 
+/**
+ * gtk_widget_get_action:
+ * @widget: a #GtkWidget
+ * @action: the #GtkAction to register widget as a proxy of.
+ *
+ * Connects @widget to @action's proxy list
+ *
+ * Since: 2.16
+ */
 
 /**
  * gtk_widget_get_action:
Index: gtkaction.h
===================================================================
--- gtkaction.h	(revision 21776)
+++ gtkaction.h	(working copy)
@@ -110,12 +110,17 @@ void         gtk_action_connect_proxy   
 void         gtk_action_disconnect_proxy       (GtkAction     *action,
 						GtkWidget     *proxy);
 GSList *     gtk_action_get_proxies            (GtkAction     *action);
-GtkAction *  gtk_widget_get_action             (GtkWidget     *widget);
 void         gtk_action_connect_accelerator    (GtkAction     *action);
 void         gtk_action_disconnect_accelerator (GtkAction     *action);
 G_CONST_RETURN gchar *gtk_action_get_accel_path (GtkAction     *action);
 GClosure    *gtk_action_get_accel_closure      (GtkAction     *action);
 
+/* special case handling of gtkwidget api */
+#define      gtk_widget_set_action(widget, action) \
+             gtk_action_connect_proxy((action), (widget))
+GtkAction *  gtk_widget_get_action             (GtkWidget     *widget);
+
+
 /* protected ... for use by child actions */
 void         gtk_action_block_activate_from    (GtkAction     *action,
 						GtkWidget     *proxy);
