diff -urN gtk+-3.22.3-orig/gtk/gtkdialog.c gtk+-3.22.3/gtk/gtkdialog.c
--- gtk+-3.22.3-orig/gtk/gtkdialog.c	2016-10-27 03:31:18 +0900
+++ gtk+-3.22.3/gtk/gtkdialog.c	2016-11-12 15:42:45 +0900
@@ -248,6 +248,11 @@
                     gint       use_header_bar)
 {
   GtkDialogPrivate *priv = dialog->priv;
+  const gchar *csd_env;
+
+  csd_env = g_getenv ("GTK_CSD");
+  if (g_strcmp0 (csd_env, "0") == 0)
+    use_header_bar = FALSE;
 
   if (use_header_bar == -1)
     return;
@@ -260,6 +265,11 @@
 gtk_dialog_set_use_header_bar_from_setting (GtkDialog *dialog)
 {
   GtkDialogPrivate *priv = dialog->priv;
+  const gchar *csd_env;
+
+  csd_env = g_getenv ("GTK_CSD");
+  if (g_strcmp0 (csd_env, "0") == 0)
+    return;
 
   g_assert (!priv->constructed);
 
diff -urN gtk+-3.22.3-orig/gtk/gtkheaderbar.c gtk+-3.22.3/gtk/gtkheaderbar.c
--- gtk+-3.22.3-orig/gtk/gtkheaderbar.c	2016-10-27 03:31:18 +0900
+++ gtk+-3.22.3/gtk/gtkheaderbar.c	2016-11-12 15:42:45 +0900
@@ -2242,11 +2242,16 @@
                                       gboolean      setting)
 {
   GtkHeaderBarPrivate *priv;
+  const char *csd_env;
 
   g_return_if_fail (GTK_IS_HEADER_BAR (bar));
 
   priv = gtk_header_bar_get_instance_private (bar);
 
+  csd_env = g_getenv ("GTK_CSD");
+  if (g_strcmp0 (csd_env, "0") == 0)
+    setting = FALSE;
+
   setting = setting != FALSE;
 
   if (priv->shows_wm_decorations == setting)
diff -urN gtk+-3.22.3-orig/gtk/gtkwindow.c gtk+-3.22.3/gtk/gtkwindow.c
--- gtk+-3.22.3-orig/gtk/gtkwindow.c	2016-10-27 03:31:18 +0900
+++ gtk+-3.22.3/gtk/gtkwindow.c	2016-11-12 15:42:45 +0900
@@ -4080,6 +4080,11 @@
   GdkDisplay *display;
   GdkScreen *screen;
   GdkVisual *visual;
+  const gchar *csd_env;
+
+  csd_env = g_getenv ("GTK_CSD");
+  if (g_strcmp0 (csd_env, "0") == 0)
+    return FALSE;
 
   screen = _gtk_window_get_screen (window);
   display = gdk_screen_get_display (screen);
@@ -4172,6 +4177,7 @@
 {
   GtkWidget *widget = GTK_WIDGET (window);
   GtkWindowPrivate *priv = window->priv;
+  const gchar *csd_env;
   gboolean was_mapped;
 
   g_return_if_fail (GTK_IS_WINDOW (window));
@@ -4200,7 +4206,10 @@
 
   priv->use_client_shadow = gtk_window_supports_client_shadow (window);
 
-  gtk_window_enable_csd (window);
+  csd_env = g_getenv ("GTK_CSD");
+  if (g_strcmp0 (csd_env, "0") != 0)
+    gtk_window_enable_csd (window);
+
   priv->title_box = titlebar;
   gtk_widget_set_parent (priv->title_box, widget);
   if (GTK_IS_HEADER_BAR (titlebar))
@@ -6069,6 +6078,11 @@
   GtkWindowPrivate *priv = window->priv;
   const gchar *csd_env;
 
+  csd_env = g_getenv ("GTK_CSD");
+
+  if (g_strcmp0 (csd_env, "0") == 0)
+    return FALSE;
+
   if (priv->csd_requested)
     return TRUE;
 
@@ -6078,8 +6092,6 @@
   if (priv->type == GTK_WINDOW_POPUP)
     return FALSE;
 
-  csd_env = g_getenv ("GTK_CSD");
-
 #ifdef GDK_WINDOWING_BROADWAY
   if (GDK_IS_BROADWAY_DISPLAY (gtk_widget_get_display (GTK_WIDGET (window))))
     return TRUE;
