patch 8.1.2034: dark them of GTK 3 not supported

Problem:    Dark them of GTK 3 not supported.
Solution:   Add the "d" flag in 'guioptions'. (Jonathan Conder, closes #4934)
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 9fa2bfb..4890a98 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -856,6 +856,8 @@
 		:set background&
 <	Vim will guess the value.  In the GUI this should work correctly,
 	in other cases Vim might not be able to guess the right value.
+	If the GUI supports a dark them, you can use the "d" flag in
+	'guioptions', see 'go-d'.
 
 	When the |t_RB| option is set, Vim will use it to request the background
 	color from the terminal.  If the returned RGB value is dark/light and
@@ -3740,6 +3742,9 @@
 								*'go-c'*
 	  'c'	Use console dialogs instead of popup dialogs for simple
 		choices.
+								*'go-d'*
+	  'd'	Use dark theme variant if available. Currently only works for
+		GTK+ GUI.
 								*'go-e'*
 	  'e'	Add tab pages when indicated with 'showtabline'.
 		'guitablabel' can be used to change the text in the labels.
diff --git a/src/feature.h b/src/feature.h
index c4ccd21..dc5accc 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -647,6 +647,13 @@
 #endif
 
 /*
+ * GUI dark theme variant
+ */
+#if defined(FEAT_GUI_GTK) && defined(USE_GTK3)
+# define FEAT_GUI_DARKTHEME
+#endif
+
+/*
  * GUI tabline
  */
 #if defined(FEAT_NORMAL) \
diff --git a/src/gui.c b/src/gui.c
index d9e7e47..860add2 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -3425,6 +3425,10 @@
     void
 gui_init_which_components(char_u *oldval UNUSED)
 {
+#ifdef FEAT_GUI_DARKTHEME
+    static int	prev_dark_theme = -1;
+    int		using_dark_theme = FALSE;
+#endif
 #ifdef FEAT_MENU
     static int	prev_menu_is_active = -1;
 #endif
@@ -3495,6 +3499,11 @@
 	    case GO_BOT:
 		gui.which_scrollbars[SBAR_BOTTOM] = TRUE;
 		break;
+#ifdef FEAT_GUI_DARKTHEME
+	    case GO_DARKTHEME:
+		using_dark_theme = TRUE;
+		break;
+#endif
 #ifdef FEAT_MENU
 	    case GO_MENUS:
 		gui.menu_is_active = TRUE;
@@ -3528,6 +3537,14 @@
 	need_set_size = 0;
 	fix_size = FALSE;
 
+#ifdef FEAT_GUI_DARKTHEME
+	if (using_dark_theme != prev_dark_theme)
+	{
+	    gui_mch_set_dark_theme(using_dark_theme);
+	    prev_dark_theme = using_dark_theme;
+	}
+#endif
+
 #ifdef FEAT_GUI_TABLINE
 	/* Update the GUI tab line, it may appear or disappear.  This may
 	 * cause the non-GUI tab line to disappear or appear. */
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 4940b87..1bf836f 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -3130,6 +3130,19 @@
     }
 }
 
+#if defined(FEAT_GUI_DARKTHEME) || defined(PROTO)
+    void
+gui_mch_set_dark_theme(int dark)
+{
+# if GTK_CHECK_VERSION(3,0,0)
+    GtkSettings *gtk_settings;
+
+    gtk_settings = gtk_settings_get_for_screen(gdk_screen_get_default());
+    g_object_set(gtk_settings, "gtk-application-prefer-dark-theme", (gboolean)dark, NULL);
+# endif
+}
+#endif /* FEAT_GUI_DARKTHEME */
+
 #ifdef FEAT_TOOLBAR
 
 /*
diff --git a/src/option.h b/src/option.h
index bb68d5a..1d85843 100644
--- a/src/option.h
+++ b/src/option.h
@@ -213,6 +213,7 @@
 #define GO_ASELML	'A'		// autoselect modeless selection
 #define GO_BOT		'b'		// use bottom scrollbar
 #define GO_CONDIALOG	'c'		// use console dialog
+#define GO_DARKTHEME	'd'		// use dark theme variant
 #define GO_TABLINE	'e'		// may show tabline
 #define GO_FORG		'f'		// start GUI in foreground
 #define GO_GREY		'g'		// use grey menu items
@@ -231,7 +232,7 @@
 #define GO_FOOTER	'F'		// add footer
 #define GO_VERTICAL	'v'		// arrange dialog buttons vertically
 #define GO_KEEPWINSIZE	'k'		// keep GUI window size
-#define GO_ALL		"!aAbcefFghilmMprtTvk" // all possible flags for 'go'
+#define GO_ALL		"!aAbcdefFghilmMprtTvk" // all possible flags for 'go'
 
 // flags for 'comments' option
 #define COM_NEST	'n'		// comments strings nest
diff --git a/src/proto/gui_gtk_x11.pro b/src/proto/gui_gtk_x11.pro
index 708e68d..3f26044 100644
--- a/src/proto/gui_gtk_x11.pro
+++ b/src/proto/gui_gtk_x11.pro
@@ -8,6 +8,7 @@
 void gui_mch_start_blink(void);
 int gui_mch_early_init_check(int give_message);
 int gui_mch_init_check(void);
+void gui_mch_set_dark_theme(int dark);
 void gui_mch_show_tabline(int showit);
 int gui_mch_showing_tabline(void);
 void gui_mch_update_tabline(void);
diff --git a/src/testdir/test_gui.vim b/src/testdir/test_gui.vim
index f2d82e4..0f2a962 100644
--- a/src/testdir/test_gui.vim
+++ b/src/testdir/test_gui.vim
@@ -643,6 +643,15 @@
       call assert_equal('aegi', &guioptions)
     endif
 
+    if has('gui_gtk3')
+      set guioptions+=d
+      exec 'sleep' . duration
+      call assert_equal('aegid', &guioptions)
+      set guioptions-=d
+      exec 'sleep' . duration
+      call assert_equal('aegi', &guioptions)
+    endif
+
     " Restore GUI ornaments to the default state.
     set guioptions+=m
     exec 'sleep' . duration
diff --git a/src/version.c b/src/version.c
index 9eb5db7..69c77d8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2034,
+/**/
     2033,
 /**/
     2032,