Index: app/widgets/gimpactiongroup.c
===================================================================
--- app/widgets/gimpactiongroup.c	(revision 22972)
+++ app/widgets/gimpactiongroup.c	(working copy)
@@ -633,6 +633,27 @@ gimp_action_group_add_plug_in_actions (G
 }
 
 void
+gimp_action_group_activate_action (GimpActionGroup *group,
+                                   const gchar     *action_name)
+{
+  GtkAction *action;
+
+  g_return_if_fail (GIMP_IS_ACTION_GROUP (group));
+  g_return_if_fail (action_name != NULL);
+
+  action = gtk_action_group_get_action (GTK_ACTION_GROUP (group), action_name);
+
+  if (! action)
+    {
+      g_warning ("%s: Unable to activate action which doesn't exist: %s",
+                 G_STRFUNC, action_name);
+      return;
+    }
+
+  gtk_action_activate (action);
+}
+
+void
 gimp_action_group_set_action_visible (GimpActionGroup *group,
                                       const gchar     *action_name,
                                       gboolean         visible)
Index: app/widgets/gimpactiongroup.h
===================================================================
--- app/widgets/gimpactiongroup.h	(revision 22972)
+++ app/widgets/gimpactiongroup.h	(working copy)
@@ -171,6 +171,9 @@ void   gimp_action_group_add_plug_in_act
                                                guint                        n_entries,
                                                GCallback                    callback);
 
+void   gimp_action_group_activate_action      (GimpActionGroup     *group,
+                                               const gchar         *action_name);
+
 void   gimp_action_group_set_action_visible   (GimpActionGroup     *group,
                                                const gchar         *action_name,
                                                gboolean             visible);
Index: app/widgets/gimplayertreeview.c
===================================================================
--- app/widgets/gimplayertreeview.c	(revision 22972)
+++ app/widgets/gimplayertreeview.c	(working copy)
@@ -1324,25 +1324,34 @@ gimp_layer_tree_view_layer_clicked (Gimp
 
   if (gtk_tree_model_get_iter (tree_view->model, &iter, path))
     {
-      GimpViewRenderer *renderer;
-      GimpUIManager    *ui_manager;
-      GimpActionGroup  *group;
-
-      ui_manager = GIMP_EDITOR (tree_view)->ui_manager;
-      group      = gimp_ui_manager_get_action_group (ui_manager, "layers");
+      GimpUIManager   *ui_manager = GIMP_EDITOR (tree_view)->ui_manager;
+      GimpActionGroup *group;
 
-      gtk_tree_model_get (tree_view->model, &iter,
-                          layer_view->model_column_mask, &renderer,
-                          -1);
+      group = gimp_ui_manager_get_action_group (ui_manager, "layers");
 
-      if (renderer)
+      if (state & GDK_CONTROL_MASK)
         {
-          GimpLayerMask *mask = GIMP_LAYER_MASK (renderer->viewable);
+          gimp_action_group_activate_action (group,
+                                             "layers-alpha-selection-replace");
+        }
+      else
+        {
+          GimpViewRenderer *renderer;
 
-          if (gimp_layer_mask_get_edit (mask))
-            gimp_action_group_set_action_active (group,
-                                                 "layers-mask-edit", FALSE);
-          g_object_unref (renderer);
+          gtk_tree_model_get (tree_view->model, &iter,
+                              layer_view->model_column_mask, &renderer,
+                              -1);
+
+          if (renderer)
+            {
+              GimpLayerMask *mask = GIMP_LAYER_MASK (renderer->viewable);
+
+              if (gimp_layer_mask_get_edit (mask))
+                gimp_action_group_set_action_active (group,
+                                                     "layers-mask-edit", FALSE);
+
+              g_object_unref (renderer);
+            }
         }
     }
 
Index: app/widgets/gimpchanneltreeview.c
===================================================================
--- app/widgets/gimpchanneltreeview.c	(revision 22972)
+++ app/widgets/gimpchanneltreeview.c	(working copy)
@@ -36,12 +36,14 @@
 #include "core/gimplayer.h"
 #include "core/gimplayermask.h"
 
+#include "gimpactiongroup.h"
 #include "gimpchanneltreeview.h"
 #include "gimpcomponenteditor.h"
 #include "gimpcontainerview.h"
 #include "gimpdnd.h"
 #include "gimpdocked.h"
 #include "gimphelp-ids.h"
+#include "gimpuimanager.h"
 #include "gimpwidgets-utils.h"
 
 #include "gimp-intl.h"
@@ -69,6 +71,11 @@ static void   gimp_channel_tree_view_set
                                                        GimpContext       *context);
 static void   gimp_channel_tree_view_set_view_size    (GimpContainerView *view);
 
+static void   gimp_channel_tree_view_channel_clicked  (GimpCellRendererViewable *cell,
+                                                       const gchar              *path_str,
+                                                       GdkModifierType           state,
+                                                       GimpContainerTreeView    *tree_view);
+
 
 G_DEFINE_TYPE_WITH_CODE (GimpChannelTreeView, gimp_channel_tree_view,
                          GIMP_TYPE_DRAWABLE_TREE_VIEW,
@@ -149,6 +156,10 @@ gimp_channel_tree_view_constructor (GTyp
   view      = GIMP_CHANNEL_TREE_VIEW (object);
   tree_view = GIMP_CONTAINER_TREE_VIEW (object);
 
+  g_signal_connect (tree_view->renderer_cell, "clicked",
+                    G_CALLBACK (gimp_channel_tree_view_channel_clicked),
+                    view);
+
   gimp_dnd_viewable_dest_add  (GTK_WIDGET (tree_view->view), GIMP_TYPE_LAYER,
                                NULL, tree_view);
   gimp_dnd_viewable_dest_add  (GTK_WIDGET (tree_view->view), GIMP_TYPE_LAYER_MASK,
@@ -357,3 +368,24 @@ gimp_channel_tree_view_set_view_size (Gi
     gimp_component_editor_set_view_size (GIMP_COMPONENT_EDITOR (channel_view->component_editor),
                                          view_size);
 }
+
+
+/*  signal handlers  */
+
+static void
+gimp_channel_tree_view_channel_clicked (GimpCellRendererViewable *cell,
+                                        const gchar              *path_str,
+                                        GdkModifierType           state,
+                                        GimpContainerTreeView    *tree_view)
+{
+  if (state & GDK_CONTROL_MASK)
+    {
+      GimpUIManager   *ui_manager = GIMP_EDITOR (tree_view)->ui_manager;
+      GimpActionGroup *group;
+
+      group = gimp_ui_manager_get_action_group (ui_manager, "channels");
+
+      gimp_action_group_activate_action (group, "channels-selection-replace");
+    }
+}
+
