diff --git a/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java b/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
index 2396222bc7744c3c6597ef5517780061f8f90ea9..c3b5825f5c753dd7d7602e68d743cc46a02f6b6f 100644
--- a/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
@@ -213,9 +213,10 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
         final int pointY = parentKey.mY;
         final int miniKeyboardLeft = pointX - miniKeyboard.getDefaultCoordX()
                 + parentKeyboardView.getPaddingLeft();
-        final int x = Math.max(0, Math.min(miniKeyboardLeft,
+        final int x = wrapUp(Math.max(0, Math.min(miniKeyboardLeft,
                 parentKeyboardView.getWidth() - miniKeyboard.mOccupiedWidth))
-                - container.getPaddingLeft() + mCoordinates[0];
+                - container.getPaddingLeft() + mCoordinates[0],
+                container.getMeasuredWidth(), 0, parentKeyboardView.getWidth());
         final int y = pointY - parentKeyboard.mVerticalGap
                 - (container.getMeasuredHeight() - container.getPaddingBottom())
                 + parentKeyboardView.getPaddingTop() + mCoordinates[1];
@@ -232,6 +233,14 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
         mOriginY = y + container.getPaddingTop() - mCoordinates[1];
     }
 
+    private static int wrapUp(int x, int width, int left, int right) {
+        if (x < left)
+            return left;
+        if (x + width > right)
+            return right - width;
+        return x;
+    }
+
     @Override
     public boolean dismissPopupPanel() {
         return mParentKeyboardView.dismissPopupPanel();