diff -r c40cd9aad546 src/gui_gtk_x11.c
--- a/src/gui_gtk_x11.c	Thu Jun 03 21:17:25 2010 +0200
+++ b/src/gui_gtk_x11.c	Fri Jun 04 16:55:48 2010 -0400
@@ -3473,6 +3473,36 @@
 
 #endif /* FEAT_GUI_TABLINE */
 
+    void
+gui_gtk_set_selection_targets(void)
+{
+    int i=0, j=0, n_targets = N_SELECTION_TARGETS;
+    GtkTargetEntry targets[N_SELECTION_TARGETS];
+
+    while (i < N_SELECTION_TARGETS)
+    {
+	if (!clip_html && STRCMP(selection_targets[i].target, "text/html") == 0)
+	{
+	    i++;
+	    n_targets--;
+	    continue;
+	}
+	targets[j++] = selection_targets[i++];
+    }
+
+    /*
+     * Add selection targets for PRIMARY and CLIPBOARD selections.
+     */
+    gtk_selection_clear_targets(gui.drawarea, (GdkAtom)GDK_SELECTION_PRIMARY);
+    gtk_selection_clear_targets(gui.drawarea, (GdkAtom)clip_plus.gtk_sel_atom);
+    gtk_selection_add_targets(gui.drawarea,
+			      (GdkAtom)GDK_SELECTION_PRIMARY,
+			      targets, n_targets);
+    gtk_selection_add_targets(gui.drawarea,
+			      (GdkAtom)clip_plus.gtk_sel_atom,
+			      targets, n_targets);
+}
+
 /*
  * Initialize the GUI.	Create all the windows, set up all the callbacks etc.
  * Returns OK for success, FAIL when the GUI can't be started.
@@ -3936,15 +3966,7 @@
     gtk_signal_connect(GTK_OBJECT(gui.drawarea), "selection_received",
 		       GTK_SIGNAL_FUNC(selection_received_cb), NULL);
 
-    /*
-     * Add selection targets for PRIMARY and CLIPBOARD selections.
-     */
-    gtk_selection_add_targets(gui.drawarea,
-			      (GdkAtom)GDK_SELECTION_PRIMARY,
-			      selection_targets, N_SELECTION_TARGETS);
-    gtk_selection_add_targets(gui.drawarea,
-			      (GdkAtom)clip_plus.gtk_sel_atom,
-			      selection_targets, N_SELECTION_TARGETS);
+    gui_gtk_set_selection_targets();
 
     gtk_signal_connect(GTK_OBJECT(gui.drawarea), "selection_get",
 		       GTK_SIGNAL_FUNC(selection_get_cb), NULL);
@@ -4068,6 +4090,29 @@
     return TRUE;
 }
 
+    void
+gui_gtk_set_dnd_targets(void)
+{
+    int i=0, j=0, n_targets=N_DND_TARGETS;
+    GtkTargetEntry targets[N_DND_TARGETS];
+
+    while (i < N_DND_TARGETS)
+    {
+	if (!clip_html && STRCMP(dnd_targets[i].target, "text/html") == 0)
+	{
+	    i++;
+	    n_targets--;
+	    continue;
+	}
+	targets[j++] = dnd_targets[i++];
+    }
+
+    gtk_drag_dest_unset(gui.drawarea);
+    gtk_drag_dest_set(gui.drawarea,
+		      GTK_DEST_DEFAULT_ALL,
+		      targets, n_targets,
+		      GDK_ACTION_COPY);
+}
 
 /*
  * Open the GUI window which was created by a call to gui_mch_init().
@@ -4239,10 +4284,7 @@
     /*
      * Set up for receiving DND items.
      */
-    gtk_drag_dest_set(gui.drawarea,
-		      GTK_DEST_DEFAULT_ALL,
-		      dnd_targets, N_DND_TARGETS,
-		      GDK_ACTION_COPY);
+    gui_gtk_set_dnd_targets();
 
     gtk_signal_connect(GTK_OBJECT(gui.drawarea), "drag_data_received",
 		       GTK_SIGNAL_FUNC(drag_data_received_cb), NULL);
diff -r c40cd9aad546 src/option.c
--- a/src/option.c	Thu Jun 03 21:17:25 2010 +0200
+++ b/src/option.c	Fri Jun 04 16:55:48 2010 -0400
@@ -7149,6 +7149,13 @@
 	clip_html = new_html;
 	vim_free(clip_exclude_prog);
 	clip_exclude_prog = new_exclude_prog;
+#ifdef FEAT_GUI_GTK
+	if (gui.in_use)
+	{
+	    gui_gtk_set_selection_targets();
+	    gui_gtk_set_dnd_targets();
+	}
+#endif
     }
     else
 	vim_free(new_exclude_prog);
diff -r c40cd9aad546 src/proto/gui_gtk_x11.pro
--- a/src/proto/gui_gtk_x11.pro	Thu Jun 03 21:17:25 2010 +0200
+++ b/src/proto/gui_gtk_x11.pro	Fri Jun 04 16:55:48 2010 -0400
@@ -9,9 +9,11 @@
 int gui_mch_showing_tabline __ARGS((void));
 void gui_mch_update_tabline __ARGS((void));
 void gui_mch_set_curtab __ARGS((int nr));
+void gui_gtk_set_selection_targets __ARGS((void));
 int gui_mch_init __ARGS((void));
 void gui_mch_forked __ARGS((void));
 void gui_mch_new_colors __ARGS((void));
+void gui_gtk_set_dnd_targets __ARGS((void));
 int gui_mch_open __ARGS((void));
 void gui_mch_exit __ARGS((int rc));
 int gui_mch_get_winpos __ARGS((int *x, int *y));
