Index: app/tools/gimprectangletool.c
===================================================================
--- app/tools/gimprectangletool.c	(revision 25383)
+++ app/tools/gimprectangletool.c	(working copy)
@@ -180,6 +180,11 @@ struct _GimpRectangleToolPrivate
    */
   gboolean                narrow_mode;
 
+  /* Wether or not to force the rectangle to always be in narrow
+   * mode.
+   */
+  gboolean                force_narrow;
+
   /* For what scale the handle sizes is calculated. We must cache this so that
    * we can differentiate between when the tool is resumed because of zoom level
    * just has changed or because the highlight has just been updated.
@@ -457,7 +462,9 @@ gimp_rectangle_tool_get_private (GimpRec
 void
 gimp_rectangle_tool_init (GimpRectangleTool *rect_tool)
 {
-  /* No need to initialize anything yet. */
+  GimpRectangleToolPrivate *private = GIMP_RECTANGLE_TOOL_GET_PRIVATE (rect_tool);
+
+  private->always_narrow = FALSE;
 }
 
 /**
@@ -882,8 +889,11 @@ gimp_rectangle_tool_button_press (GimpTo
 
       gimp_rectangle_tool_update_handle_sizes (rect_tool);
 
-      /* Created rectangles should not be started in narrow-mode */
-      private->narrow_mode = FALSE;
+      if (! private->force_narrow)
+        {
+          /* Created rectangles should not be started in narrow-mode */
+          private->narrow_mode = FALSE;
+        }
 
       /* If the rectangle is being modified we want the center on fixed_center to be
        * at the center of the currently existing rectangle, otherwise we want the
@@ -1834,10 +1844,12 @@ gimp_rectangle_tool_update_handle_sizes 
                               &visible_rectangle_width,
                               &visible_rectangle_height);
 
-    /* Determine if we are in narrow-mode or not. */
-    private->narrow_mode = visible_rectangle_width  < NARROW_MODE_THRESHOLD ||
-                           visible_rectangle_height < NARROW_MODE_THRESHOLD;
-
+    if (! private->force_narrow)
+      {
+        /* Determine if we are in narrow-mode or not. */
+        private->narrow_mode = (visible_rectangle_width  < NARROW_MODE_THRESHOLD ||
+                                visible_rectangle_height < NARROW_MODE_THRESHOLD);
+      }        
   }
 
   if (private->narrow_mode)
@@ -4128,3 +4140,25 @@ gimp_rectangle_tool_rectangle_is_narrow 
 {
   return GIMP_RECTANGLE_TOOL_GET_PRIVATE (rect_tool)->narrow_mode;
 }
+
+/**
+ * gimp_rectangle_tool_set_always_narrow:
+ *
+ * Makes sure that the rectangle is always shown with handles outside.
+ * Mainly intended for use in the text tool, where handles inside
+ * interfere with the text. Does not handle GimpDrawTool pause/resume.
+ */
+void
+gimp_rectangle_tool_set_force_narrow (GimpRectangleTool *rect_tool,
+                                      gboolean           force_narrow)
+ {
+  GimpRectangleToolPrivate *private = GIMP_RECTANGLE_TOOL_GET_PRIVATE (rect_tool);
+
+  private->force_narrow = force_narrow ? TRUE : FALSE;
+
+  if (force_narrow  && ! private->narrow_mode)
+    {
+      private->narrow_mode = TRUE;
+    }
+}
+
Index: app/tools/gimprectangletool.h
===================================================================
--- app/tools/gimprectangletool.h	(revision 25383)
+++ app/tools/gimprectangletool.h	(working copy)
@@ -143,7 +143,8 @@ gboolean    gimp_rectangle_tool_rectangl
 gboolean    gimp_rectangle_tool_point_in_rectangle  (GimpRectangleTool       *rect_tool,
                                                      gdouble                  x,
                                                      gdouble                  y);
-
+void        gimp_rectangle_tool_set_force_narrow    (GimpRectangleTool       *rect_tool,
+                                                     gboolean                 always_narrow);
 /*  convenience functions  */
 
 void        gimp_rectangle_tool_install_properties  (GObjectClass *klass);
