diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc
index 0e04414b6a4..6d89ee1d06e 100644
--- a/atom/browser/native_window_views.cc
+++ b/atom/browser/native_window_views.cc
@@ -387,6 +387,15 @@ gfx::Size NativeWindowViews::GetContentSize() {
   return web_view_->size();
 }
 
+void NativeWindowViews::SetContentSizeConstraints(
+    const extensions::SizeConstraints& size_constraints) {
+  NativeWindow::SetContentSizeConstraints(size_constraints);
+#if defined(USE_X11)
+  if (resizable_)
+    old_size_constraints_ = size_constraints;
+#endif
+}
+
 void NativeWindowViews::SetResizable(bool resizable) {
 #if defined(OS_WIN)
   // WS_MAXIMIZEBOX => Maximize button
@@ -403,11 +412,13 @@ void NativeWindowViews::SetResizable(bool resizable) {
     // On Linux there is no "resizable" property of a window, we have to set
     // both the minimum and maximum size to the window size to achieve it.
     if (resizable) {
-      SetMaximumSize(gfx::Size());
-      SetMinimumSize(gfx::Size());
+      SetContentSizeConstraints(old_size_constraints_);
     } else {
-      SetMaximumSize(GetSize());
-      SetMinimumSize(GetSize());
+      old_size_constraints_ = GetContentSizeConstraints();
+      resizable_ = false;
+      gfx::Size content_size = GetContentSize();
+      SetContentSizeConstraints(
+          extensions::SizeConstraints(content_size, content_size));
     }
   }
 #endif
diff --git a/atom/browser/native_window_views.h b/atom/browser/native_window_views.h
index 35ca7b63e25..0014acd073c 100644
--- a/atom/browser/native_window_views.h
+++ b/atom/browser/native_window_views.h
@@ -64,6 +64,8 @@ class NativeWindowViews : public NativeWindow,
   void SetBounds(const gfx::Rect& bounds) override;
   gfx::Rect GetBounds() override;
   gfx::Size GetContentSize() override;
+  void SetContentSizeConstraints(
+      const extensions::SizeConstraints& size_constraints) override;
   void SetResizable(bool resizable) override;
   bool IsResizable() override;
   void SetAlwaysOnTop(bool top) override;
@@ -165,6 +167,11 @@ class NativeWindowViews : public NativeWindow,
 
   // Handles window state events.
   scoped_ptr<WindowStateWatcher> window_state_watcher_;
+
+  // The "resizable" flag on Linux is implemented by setting size constraints,
+  // we need to make sure size constraints are restored when window becomes
+  // resizable again.
+  extensions::SizeConstraints old_size_constraints_;
 #elif defined(OS_WIN)
   // Weak ref.
   AtomDesktopWindowTreeHostWin* atom_desktop_window_tree_host_win_;