components/vim/vim72-patches/7.2.442
changeset 379 c6a17bba1da3
parent 378 f0b61ed1d10d
child 380 e92b3b4a1c66
equal deleted inserted replaced
378:f0b61ed1d10d 379:c6a17bba1da3
     1 To: [email protected]
       
     2 Subject: Patch 7.2.442
       
     3 Fcc: outbox
       
     4 From: Bram Moolenaar <[email protected]>
       
     5 Mime-Version: 1.0
       
     6 Content-Type: text/plain; charset=UTF-8
       
     7 Content-Transfer-Encoding: 8bit
       
     8 ------------
       
     9 
       
    10 Patch 7.2.442 (after 7.2.201)
       
    11 Problem:    Copy/paste with OpenOffice doesn't work.
       
    12 Solution:   Do not offer the HTML target when it is not supported. (James
       
    13 	    Vega)
       
    14 Files:	    src/gui_gtk_x11.c, src/option.c, src/proto/gui_gtk_x11.pro
       
    15 
       
    16 
       
    17 *** ../vim-7.2.441/src/gui_gtk_x11.c	2010-02-11 18:19:32.000000000 +0100
       
    18 --- src/gui_gtk_x11.c	2010-06-05 12:42:23.000000000 +0200
       
    19 ***************
       
    20 *** 1433,1438 ****
       
    21 --- 1433,1442 ----
       
    22       }
       
    23   #endif /* !HAVE_GTK2 */
       
    24   
       
    25 +     /* Chop off any traiing NUL bytes.  OpenOffice sends these. */
       
    26 +     while (len > 0 && text[len - 1] == NUL)
       
    27 + 	--len;
       
    28 + 
       
    29       clip_yank_selection(motion_type, text, (long)len, cbd);
       
    30       received_selection = RS_OK;
       
    31       vim_free(tmpbuf);
       
    32 ***************
       
    33 *** 3463,3468 ****
       
    34 --- 3467,3532 ----
       
    35   #endif /* FEAT_GUI_TABLINE */
       
    36   
       
    37   /*
       
    38 +  * Add selection targets for PRIMARY and CLIPBOARD selections.
       
    39 +  */
       
    40 +     void
       
    41 + gui_gtk_set_selection_targets(void)
       
    42 + {
       
    43 +     int		    i, j = 0;
       
    44 +     int		    n_targets = N_SELECTION_TARGETS;
       
    45 +     GtkTargetEntry  targets[N_SELECTION_TARGETS];
       
    46 + 
       
    47 +     for (i = 0; i < (int)N_SELECTION_TARGETS; ++i)
       
    48 +     {
       
    49 + #ifdef FEAT_MBYTE
       
    50 + 	/* OpenOffice tries to use TARGET_HTML and fails when it doesn't
       
    51 + 	 * return something, instead of trying another target. Therefore only
       
    52 + 	 * offer TARGET_HTML when it works. */
       
    53 + 	if (!clip_html && selection_targets[i].info == TARGET_HTML)
       
    54 + 	    n_targets--;
       
    55 + 	else
       
    56 + #endif
       
    57 + 	    targets[j++] = selection_targets[i];
       
    58 +     }
       
    59 + 
       
    60 +     gtk_selection_clear_targets(gui.drawarea, (GdkAtom)GDK_SELECTION_PRIMARY);
       
    61 +     gtk_selection_clear_targets(gui.drawarea, (GdkAtom)clip_plus.gtk_sel_atom);
       
    62 +     gtk_selection_add_targets(gui.drawarea,
       
    63 + 			      (GdkAtom)GDK_SELECTION_PRIMARY,
       
    64 + 			      targets, n_targets);
       
    65 +     gtk_selection_add_targets(gui.drawarea,
       
    66 + 			      (GdkAtom)clip_plus.gtk_sel_atom,
       
    67 + 			      targets, n_targets);
       
    68 + }
       
    69 + 
       
    70 + /*
       
    71 +  * Set up for receiving DND items.
       
    72 +  */
       
    73 +     void
       
    74 + gui_gtk_set_dnd_targets(void)
       
    75 + {
       
    76 +     int		    i, j = 0;
       
    77 +     int		    n_targets = N_DND_TARGETS;
       
    78 +     GtkTargetEntry  targets[N_DND_TARGETS];
       
    79 + 
       
    80 +     for (i = 0; i < (int)N_DND_TARGETS; ++i)
       
    81 +     {
       
    82 + #ifdef FEAT_MBYTE
       
    83 + 	if (!clip_html && selection_targets[i].info == TARGET_HTML)
       
    84 + 	    n_targets--;
       
    85 + 	else
       
    86 + #endif
       
    87 + 	    targets[j++] = dnd_targets[i];
       
    88 +     }
       
    89 + 
       
    90 +     gtk_drag_dest_unset(gui.drawarea);
       
    91 +     gtk_drag_dest_set(gui.drawarea,
       
    92 + 		      GTK_DEST_DEFAULT_ALL,
       
    93 + 		      targets, n_targets,
       
    94 + 		      GDK_ACTION_COPY);
       
    95 + }
       
    96 + 
       
    97 + /*
       
    98    * Initialize the GUI.	Create all the windows, set up all the callbacks etc.
       
    99    * Returns OK for success, FAIL when the GUI can't be started.
       
   100    */
       
   101 ***************
       
   102 *** 3925,3939 ****
       
   103       gtk_signal_connect(GTK_OBJECT(gui.drawarea), "selection_received",
       
   104   		       GTK_SIGNAL_FUNC(selection_received_cb), NULL);
       
   105   
       
   106 !     /*
       
   107 !      * Add selection targets for PRIMARY and CLIPBOARD selections.
       
   108 !      */
       
   109 !     gtk_selection_add_targets(gui.drawarea,
       
   110 ! 			      (GdkAtom)GDK_SELECTION_PRIMARY,
       
   111 ! 			      selection_targets, N_SELECTION_TARGETS);
       
   112 !     gtk_selection_add_targets(gui.drawarea,
       
   113 ! 			      (GdkAtom)clip_plus.gtk_sel_atom,
       
   114 ! 			      selection_targets, N_SELECTION_TARGETS);
       
   115   
       
   116       gtk_signal_connect(GTK_OBJECT(gui.drawarea), "selection_get",
       
   117   		       GTK_SIGNAL_FUNC(selection_get_cb), NULL);
       
   118 --- 3989,3995 ----
       
   119       gtk_signal_connect(GTK_OBJECT(gui.drawarea), "selection_received",
       
   120   		       GTK_SIGNAL_FUNC(selection_received_cb), NULL);
       
   121   
       
   122 !     gui_gtk_set_selection_targets();
       
   123   
       
   124       gtk_signal_connect(GTK_OBJECT(gui.drawarea), "selection_get",
       
   125   		       GTK_SIGNAL_FUNC(selection_get_cb), NULL);
       
   126 ***************
       
   127 *** 4057,4063 ****
       
   128       return TRUE;
       
   129   }
       
   130   
       
   131 - 
       
   132   /*
       
   133    * Open the GUI window which was created by a call to gui_mch_init().
       
   134    */
       
   135 --- 4113,4118 ----
       
   136 ***************
       
   137 *** 4225,4237 ****
       
   138   		       GTK_SIGNAL_FUNC(form_configure_event), NULL);
       
   139   
       
   140   #ifdef FEAT_DND
       
   141 !     /*
       
   142 !      * Set up for receiving DND items.
       
   143 !      */
       
   144 !     gtk_drag_dest_set(gui.drawarea,
       
   145 ! 		      GTK_DEST_DEFAULT_ALL,
       
   146 ! 		      dnd_targets, N_DND_TARGETS,
       
   147 ! 		      GDK_ACTION_COPY);
       
   148   
       
   149       gtk_signal_connect(GTK_OBJECT(gui.drawarea), "drag_data_received",
       
   150   		       GTK_SIGNAL_FUNC(drag_data_received_cb), NULL);
       
   151 --- 4280,4287 ----
       
   152   		       GTK_SIGNAL_FUNC(form_configure_event), NULL);
       
   153   
       
   154   #ifdef FEAT_DND
       
   155 !     /* Set up for receiving DND items. */
       
   156 !     gui_gtk_set_dnd_targets();
       
   157   
       
   158       gtk_signal_connect(GTK_OBJECT(gui.drawarea), "drag_data_received",
       
   159   		       GTK_SIGNAL_FUNC(drag_data_received_cb), NULL);
       
   160 ***************
       
   161 *** 4428,4434 ****
       
   162       /* this will cause the proper resizement to happen too */
       
   163       update_window_manager_hints(0, 0);
       
   164   
       
   165 ! #else  /* HAVE_GTK2 */
       
   166       /* this will cause the proper resizement to happen too */
       
   167       if (gtk_socket_id == 0)
       
   168   	update_window_manager_hints(0, 0);
       
   169 --- 4478,4484 ----
       
   170       /* this will cause the proper resizement to happen too */
       
   171       update_window_manager_hints(0, 0);
       
   172   
       
   173 ! #else
       
   174       /* this will cause the proper resizement to happen too */
       
   175       if (gtk_socket_id == 0)
       
   176   	update_window_manager_hints(0, 0);
       
   177 ***************
       
   178 *** 4444,4457 ****
       
   179       else
       
   180   	update_window_manager_hints(width, height);
       
   181   
       
   182 ! #if 0
       
   183       if (!resize_idle_installed)
       
   184       {
       
   185   	g_idle_add_full(GDK_PRIORITY_EVENTS + 10,
       
   186   			&force_shell_resize_idle, NULL, NULL);
       
   187   	resize_idle_installed = TRUE;
       
   188       }
       
   189 ! #endif
       
   190       /*
       
   191        * Wait until all events are processed to prevent a crash because the
       
   192        * real size of the drawing area doesn't reflect Vim's internal ideas.
       
   193 --- 4494,4507 ----
       
   194       else
       
   195   	update_window_manager_hints(width, height);
       
   196   
       
   197 ! # if 0
       
   198       if (!resize_idle_installed)
       
   199       {
       
   200   	g_idle_add_full(GDK_PRIORITY_EVENTS + 10,
       
   201   			&force_shell_resize_idle, NULL, NULL);
       
   202   	resize_idle_installed = TRUE;
       
   203       }
       
   204 ! # endif
       
   205       /*
       
   206        * Wait until all events are processed to prevent a crash because the
       
   207        * real size of the drawing area doesn't reflect Vim's internal ideas.
       
   208 *** ../vim-7.2.441/src/option.c	2010-05-14 17:32:53.000000000 +0200
       
   209 --- src/option.c	2010-06-05 12:19:38.000000000 +0200
       
   210 ***************
       
   211 *** 7112,7117 ****
       
   212 --- 7112,7124 ----
       
   213   	clip_html = new_html;
       
   214   	vim_free(clip_exclude_prog);
       
   215   	clip_exclude_prog = new_exclude_prog;
       
   216 + #ifdef FEAT_GUI_GTK
       
   217 + 	if (gui.in_use)
       
   218 + 	{
       
   219 + 	    gui_gtk_set_selection_targets();
       
   220 + 	    gui_gtk_set_dnd_targets();
       
   221 + 	}
       
   222 + #endif
       
   223       }
       
   224       else
       
   225   	vim_free(new_exclude_prog);
       
   226 *** ../vim-7.2.441/src/proto/gui_gtk_x11.pro	2009-09-23 18:14:13.000000000 +0200
       
   227 --- src/proto/gui_gtk_x11.pro	2010-06-05 12:31:22.000000000 +0200
       
   228 ***************
       
   229 *** 9,14 ****
       
   230 --- 9,16 ----
       
   231   int gui_mch_showing_tabline __ARGS((void));
       
   232   void gui_mch_update_tabline __ARGS((void));
       
   233   void gui_mch_set_curtab __ARGS((int nr));
       
   234 + void gui_gtk_set_selection_targets __ARGS((void));
       
   235 + void gui_gtk_set_dnd_targets __ARGS((void));
       
   236   int gui_mch_init __ARGS((void));
       
   237   void gui_mch_forked __ARGS((void));
       
   238   void gui_mch_new_colors __ARGS((void));
       
   239 *** ../vim-7.2.441/src/version.c	2010-05-30 16:55:17.000000000 +0200
       
   240 --- src/version.c	2010-06-05 12:48:01.000000000 +0200
       
   241 ***************
       
   242 *** 683,684 ****
       
   243 --- 683,686 ----
       
   244   {   /* Add new patch number below this line */
       
   245 + /**/
       
   246 +     442,
       
   247   /**/
       
   248 
       
   249 -- 
       
   250 hundred-and-one symptoms of being an internet addict:
       
   251 158. You get a tuner card so you can watch TV while surfing.
       
   252 
       
   253  /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
       
   254 ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
       
   255 \\\        download, build and distribute -- http://www.A-A-P.org        ///
       
   256  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///