annotate src/w32select.c @ 91327:606f2d163a64

Merge from emacs--devo--0 Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-312
author Miles Bader <miles@gnu.org>
date Wed, 09 Jan 2008 01:21:15 +0000
parents f55f9811f5d7 fc2bcd2a8aad
children 8971ddf55736
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16884
36babc489b0c Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents: 16588
diff changeset
1 /* Selection processing for Emacs on the Microsoft W32 API.
75227
e90d04cd455a Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents: 68651
diff changeset
2 Copyright (C) 1993, 1994, 2001, 2002, 2003, 2004,
79759
fc2bcd2a8aad Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78260
diff changeset
3 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
4
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
5 This file is part of GNU Emacs.
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
6
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
8 it under the terms of the GNU General Public License as published by
78260
922696f363b0 Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 75227
diff changeset
9 the Free Software Foundation; either version 3, or (at your option)
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
10 any later version.
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
11
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
15 GNU General Public License for more details.
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
16
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
17 You should have received a copy of the GNU General Public License
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13434
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
64084
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 60092
diff changeset
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 60092
diff changeset
20 Boston, MA 02110-1301, USA. */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
21
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
22 /* Written by Kevin Gallo, Benjamin Riefenstahl */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
23
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
24
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
25 /*
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
26 * Notes on usage of selection-coding-system and
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
27 * next-selection-coding-system on MS Windows:
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
28 *
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
29 * The selection coding system variables apply only to the version of
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
30 * the clipboard data that is closest in type, i.e. when a 16-bit
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
31 * Unicode coding system is given, they apply to he Unicode clipboard
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
32 * (CF_UNICODETEXT), when a well-known console codepage is given, they
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
33 * apply to the console version of the clipboard data (CF_OEMTEXT),
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
34 * else they apply to the normal 8-bit text clipboard (CF_TEXT).
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
35 *
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
36 * When pasting (getting data from the OS), the clipboard format that
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
37 * matches the {next-}selection-coding-system is retrieved. If
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
38 * Unicode is requested, but not available, 8-bit text (CF_TEXT) is
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
39 * used. In all other cases the OS will transparently convert
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
40 * formats, so no other fallback is needed.
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
41 *
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
42 * When copying or cutting (sending data to the OS), the data is
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
43 * announced and stored internally, but only actually rendered on
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
44 * request. The requester determines the format provided. The
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
45 * {next-}selection-coding-system is only used, when its corresponding
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
46 * clipboard type matches the type requested.
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
47 *
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
48 * Scenarios to use the facilities for customizing the selection
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
49 * coding system are:
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
50 *
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
51 * ;; Generally use KOI8-R instead of the russian MS codepage for
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
52 * ;; the 8-bit clipboard.
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
53 * (set-selection-coding-system 'koi8-r-dos)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
54 *
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
55 * Or
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
56 *
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
57 * ;; Create a special clipboard copy function that uses codepage
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
58 * ;; 1253 (Greek) to copy Greek text to a specific non-Unicode
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
59 * ;; application.
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
60 * (defun greek-copy (beg end)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
61 * (interactive "r")
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
62 * (set-next-selection-coding-system 'cp1253-dos)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
63 * (copy-region-as-kill beg end))
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
64 * (global-set-key "\C-c\C-c" 'greek-copy)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
65 */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
66
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
67 /*
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
68 * Ideas for further directions:
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
69 *
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
70 * The encoding and decoding routines could be moved to Lisp code
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
71 * similar to how xselect.c does it (using well-known routine names
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
72 * for the delayed rendering). If the definition of which clipboard
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
73 * types should be supported is also moved to Lisp, functionality
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
74 * could be expanded to CF_HTML, CF_RTF and maybe other types.
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
75 */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
76
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
77 #include <config.h>
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
78 #include "lisp.h"
16588
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15235
diff changeset
79 #include "w32term.h" /* for all of the w32 includes */
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
80 #include "w32heap.h" /* os_subtype */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
81 #include "blockinput.h"
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
82 #include "keyboard.h" /* cmd_error_internal() */
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
83 #include "charset.h"
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
84 #include "coding.h"
90930
218b1814ca2e Include character.h
Jason Rumney <jasonr@gnu.org>
parents: 90922
diff changeset
85 #include "character.h"
45988
37913830a881 Include composite.h
Juanma Barranquero <lekktu@gmail.com>
parents: 45984
diff changeset
86 #include "composite.h"
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
87
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
88
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
89 static HGLOBAL convert_to_handle_as_ascii (void);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
90 static HGLOBAL convert_to_handle_as_coded (Lisp_Object coding_system);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
91 static Lisp_Object render (Lisp_Object oformat);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
92 static Lisp_Object render_locale (void);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
93 static Lisp_Object render_all (void);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
94 static void run_protected (Lisp_Object (*code) (), Lisp_Object arg);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
95 static Lisp_Object lisp_error_handler (Lisp_Object error);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
96 static LRESULT CALLBACK owner_callback (HWND win, UINT msg,
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
97 WPARAM wp, LPARAM lp);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
98 static HWND create_owner (void);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
99
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
100 static void setup_config (void);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
101 static BOOL WINAPI enum_locale_callback (/*const*/ char* loc_string);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
102 static UINT cp_from_locale (LCID lcid, UINT format);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
103 static Lisp_Object coding_from_cp (UINT codepage);
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
104 static Lisp_Object validate_coding_system (Lisp_Object coding_system);
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
105 static void setup_windows_coding_system (Lisp_Object coding_system,
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
106 struct coding_system * coding);
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
107
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
108
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
109 /* A remnant from X11: Symbol for the CLIPBORD selection type. Other
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
110 selections are not used on Windows, so we don't need symbols for
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
111 PRIMARY and SECONDARY. */
15235
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
112 Lisp_Object QCLIPBOARD;
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
113
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
114 /* Coding system for communicating with other programs via the
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
115 clipboard. */
22914
4d4e775cf6f7 (Vselection_coding_system): Renamed from Vclipboard_coding_system.
Richard M. Stallman <rms@gnu.org>
parents: 22745
diff changeset
116 static Lisp_Object Vselection_coding_system;
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
117
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
118 /* Coding system for the next communication with other programs. */
23562
5f3243813b18 (Vnext_selection_coding_system): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 23422
diff changeset
119 static Lisp_Object Vnext_selection_coding_system;
5f3243813b18 (Vnext_selection_coding_system): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 23422
diff changeset
120
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
121 /* Internal pseudo-constants, initialized in globals_of_w32select()
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
122 based on current system parameters. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
123 static LCID DEFAULT_LCID;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
124 static UINT ANSICP, OEMCP;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
125 static Lisp_Object QUNICODE, QANSICP, QOEMCP;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
126
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
127 /* A hidden window just for the clipboard management. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
128 static HWND clipboard_owner;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
129 /* A flag to tell WM_DESTROYCLIPBOARD who is to blame this time (just
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
130 checking GetClipboardOwner() doesn't work, sadly). */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
131 static int modifying_clipboard = 0;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
132
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
133 /* Configured transfer parameters, based on the last inspection of
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
134 selection-coding-system. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
135 static Lisp_Object cfg_coding_system;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
136 static UINT cfg_codepage;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
137 static LCID cfg_lcid;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
138 static UINT cfg_clipboard_type;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
139
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
140 /* The current state for delayed rendering. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
141 static Lisp_Object current_text;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
142 static Lisp_Object current_coding_system;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
143 static int current_requires_encoding, current_num_nls;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
144 static UINT current_clipboard_type;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
145 static LCID current_lcid;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
146
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
147 #if TRACE
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
148 #define ONTRACE(stmt) stmt
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
149 #else
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
150 #define ONTRACE(stmt) /*stmt*/
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
151 #endif
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
152
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
153
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
154 /* This function assumes that there is no multibyte character in
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
155 current_text, so we can short-cut encoding. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
156
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
157 static HGLOBAL
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
158 convert_to_handle_as_ascii (void)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
159 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
160 HGLOBAL htext = NULL;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
161 int nbytes;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
162 int truelen;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
163 unsigned char *src;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
164 unsigned char *dst;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
165
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
166 ONTRACE (fprintf (stderr, "convert_to_handle_as_ascii\n"));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
167
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
168 nbytes = SBYTES (current_text) + 1;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
169 src = SDATA (current_text);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
170
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
171 /* We need to add to the size the number of LF chars where we have
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
172 to insert CR chars (the standard CF_TEXT clipboard format uses
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
173 CRLF line endings, while Emacs uses just LF internally). */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
174
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
175 truelen = nbytes + current_num_nls;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
176
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
177 if ((htext = GlobalAlloc (GMEM_MOVEABLE | GMEM_DDESHARE, truelen)) == NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
178 return NULL;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
179
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
180 if ((dst = (unsigned char *) GlobalLock (htext)) == NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
181 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
182 GlobalFree (htext);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
183 return NULL;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
184 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
185
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
186 /* convert to CRLF line endings expected by clipboard */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
187 while (1)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
188 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
189 unsigned char *next;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
190 /* copy next line or remaining bytes including '\0' */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
191 next = _memccpy (dst, src, '\n', nbytes);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
192 if (next)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
193 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
194 /* copied one line ending with '\n' */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
195 int copied = next - dst;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
196 nbytes -= copied;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
197 src += copied;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
198 /* insert '\r' before '\n' */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
199 next[-1] = '\r';
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
200 next[0] = '\n';
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
201 dst = next + 1;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
202 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
203 else
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
204 /* copied remaining partial line -> now finished */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
205 break;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
206 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
207
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
208 GlobalUnlock (htext);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
209
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
210 return htext;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
211 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
212
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
213 /* This function assumes that there are multibyte or NUL characters in
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
214 current_text, or that we need to construct Unicode. It runs the
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
215 text through the encoding machinery. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
216
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
217 static HGLOBAL
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
218 convert_to_handle_as_coded (Lisp_Object coding_system)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
219 {
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
220 HGLOBAL htext;
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
221 unsigned char *dst = NULL;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
222 struct coding_system coding;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
223
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
224 ONTRACE (fprintf (stderr, "convert_to_handle_as_coded: %s\n",
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
225 SDATA (SYMBOL_NAME (coding_system))));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
226
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
227 setup_windows_coding_system (coding_system, &coding);
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
228 coding.dst_bytes = SBYTES(current_text) * 2;
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
229 coding.destination = (unsigned char *) xmalloc (coding.dst_bytes);
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
230 encode_coding_object (&coding, current_text, 0, 0,
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
231 SCHARS (current_text), SBYTES (current_text), Qnil);
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
232
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
233 htext = GlobalAlloc (GMEM_MOVEABLE | GMEM_DDESHARE, coding.produced +2);
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
234
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
235 if (htext != NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
236 dst = (unsigned char *) GlobalLock (htext);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
237
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
238 if (dst != NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
239 {
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
240 memcpy (dst, coding.destination, coding.produced);
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
241 /* Add the string terminator. Add two NULs in case we are
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
242 producing Unicode here. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
243 dst[coding.produced] = dst[coding.produced+1] = '\0';
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
244
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
245 GlobalUnlock (htext);
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
246 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
247
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
248 xfree (coding.destination);
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
249
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
250 return htext;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
251 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
252
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
253 static Lisp_Object
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
254 render (Lisp_Object oformat)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
255 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
256 HGLOBAL htext = NULL;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
257 UINT format = XFASTINT (oformat);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
258
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
259 ONTRACE (fprintf (stderr, "render\n"));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
260
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
261 if (NILP (current_text))
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
262 return Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
263
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
264 if (current_requires_encoding || format == CF_UNICODETEXT)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
265 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
266 if (format == current_clipboard_type)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
267 htext = convert_to_handle_as_coded (current_coding_system);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
268 else
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
269 switch (format)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
270 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
271 case CF_UNICODETEXT:
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
272 htext = convert_to_handle_as_coded (QUNICODE);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
273 break;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
274 case CF_TEXT:
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
275 case CF_OEMTEXT:
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
276 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
277 Lisp_Object cs;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
278 cs = coding_from_cp (cp_from_locale (current_lcid, format));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
279 htext = convert_to_handle_as_coded (cs);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
280 break;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
281 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
282 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
283 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
284 else
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
285 htext = convert_to_handle_as_ascii ();
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
286
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
287 ONTRACE (fprintf (stderr, "render: htext = 0x%08X\n", (unsigned) htext));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
288
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
289 if (htext == NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
290 return Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
291
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
292 if (SetClipboardData (format, htext) == NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
293 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
294 GlobalFree(htext);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
295 return Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
296 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
297
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
298 return Qt;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
299 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
300
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
301 static Lisp_Object
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
302 render_locale (void)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
303 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
304 HANDLE hlocale = NULL;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
305 LCID * lcid_ptr;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
306
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
307 ONTRACE (fprintf (stderr, "render_locale\n"));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
308
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
309 if (current_lcid == LOCALE_NEUTRAL || current_lcid == DEFAULT_LCID)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
310 return Qt;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
311
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
312 hlocale = GlobalAlloc (GMEM_MOVEABLE | GMEM_DDESHARE, sizeof (current_lcid));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
313 if (hlocale == NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
314 return Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
315
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
316 if ((lcid_ptr = (LCID *) GlobalLock (hlocale)) == NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
317 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
318 GlobalFree(hlocale);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
319 return Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
320 }
33697
e7765cb122c3 (Fw32_set_clipboard_data): Save a copy of what is put on the clipboard.
Jason Rumney <jasonr@gnu.org>
parents: 31117
diff changeset
321
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
322 *lcid_ptr = current_lcid;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
323 GlobalUnlock (hlocale);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
324
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
325 if (SetClipboardData (CF_LOCALE, hlocale) == NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
326 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
327 GlobalFree(hlocale);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
328 return Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
329 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
330
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
331 return Qt;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
332 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
333
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
334 /* At the end of the program, we want to ensure that our clipboard
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
335 data survives us. This code will do that. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
336
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
337 static Lisp_Object
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
338 render_all (void)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
339 {
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
340 ONTRACE (fprintf (stderr, "render_all\n"));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
341
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
342 /* According to the docs we should not call OpenClipboard() here,
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
343 but testing on W2K and working code in other projects shows that
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
344 it is actually necessary. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
345
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
346 OpenClipboard (NULL);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
347
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
348 /* There is no usefull means to report errors here, there are none
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
349 expected anyway, and even if there were errors, they wouldn't do
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
350 any harm. So we just go ahead and do what has to be done without
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
351 bothering with error handling. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
352
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
353 ++modifying_clipboard;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
354 EmptyClipboard ();
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
355 --modifying_clipboard;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
356
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
357 /* For text formats that we don't render here, the OS can use its
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
358 own translation rules instead, so we don't really need to offer
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
359 everything. To minimize memory consumption we cover three
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
360 possible situations based on our primary format as detected from
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
361 selection-coding-system (see setup_config()):
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
362
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
363 - Post CF_TEXT only. Let the OS convert to CF_OEMTEXT and the OS
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
364 (on NT) or the application (on 9x/Me) convert to
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
365 CF_UNICODETEXT.
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
366
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
367 - Post CF_OEMTEXT only. Similar automatic conversions happen as
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
368 for CF_TEXT.
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
369
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
370 - Post CF_UNICODETEXT + CF_TEXT. 9x itself ignores
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
371 CF_UNICODETEXT, even though some applications can still handle
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
372 it.
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
373
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
374 Note 1: We render the less capable CF_TEXT *before* the more
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
375 capable CF_UNICODETEXT, to prevent clobbering through automatic
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
376 conversions, just in case.
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
377
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
378 Note 2: We could check os_subtype here and only render the
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
379 additional CF_TEXT on 9x/Me. But OTOH with
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
380 current_clipboard_type == CF_UNICODETEXT we don't involve the
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
381 automatic conversions anywhere else, so to get consistent
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
382 results, we probably don't want to rely on it here either. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
383
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
384 render_locale();
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
385
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
386 if (current_clipboard_type == CF_UNICODETEXT)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
387 render (make_number (CF_TEXT));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
388 render (make_number (current_clipboard_type));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
389
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
390 CloseClipboard ();
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
391
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
392 return Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
393 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
394
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
395 static void
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
396 run_protected (Lisp_Object (*code) (), Lisp_Object arg)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
397 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
398 /* FIXME: This works but it doesn't feel right. Too much fiddling
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
399 with global variables and calling strange looking functions. Is
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
400 this really the right way to run Lisp callbacks? */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
401
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
402 extern int waiting_for_input;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
403 int owfi;
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
404
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
405 BLOCK_INPUT;
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
406
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
407 /* Fsignal calls abort() if it sees that waiting_for_input is
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
408 set. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
409 owfi = waiting_for_input;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
410 waiting_for_input = 0;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
411
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
412 internal_condition_case_1 (code, arg, Qt, lisp_error_handler);
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
413
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
414 waiting_for_input = owfi;
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
415
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
416 UNBLOCK_INPUT;
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
417 }
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
418
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
419 static Lisp_Object
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
420 lisp_error_handler (Lisp_Object error)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
421 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
422 Vsignaling_function = Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
423 cmd_error_internal (error, "Error in delayed clipboard rendering: ");
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
424 Vinhibit_quit = Qt;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
425 return Qt;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
426 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
427
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
428
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
429 static LRESULT CALLBACK
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
430 owner_callback (HWND win, UINT msg, WPARAM wp, LPARAM lp)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
431 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
432 switch (msg)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
433 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
434 case WM_RENDERFORMAT:
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
435 ONTRACE (fprintf (stderr, "WM_RENDERFORMAT\n"));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
436 run_protected (render, make_number (wp));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
437 return 0;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
438
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
439 case WM_RENDERALLFORMATS:
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
440 ONTRACE (fprintf (stderr, "WM_RENDERALLFORMATS\n"));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
441 run_protected (render_all, Qnil);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
442 return 0;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
443
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
444 case WM_DESTROYCLIPBOARD:
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
445 if (!modifying_clipboard)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
446 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
447 ONTRACE (fprintf (stderr, "WM_DESTROYCLIPBOARD (other)\n"));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
448 current_text = Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
449 current_coding_system = Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
450 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
451 else
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
452 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
453 ONTRACE (fprintf (stderr, "WM_DESTROYCLIPBOARD (self)\n"));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
454 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
455 return 0;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
456
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
457 case WM_DESTROY:
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
458 if (win == clipboard_owner)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
459 clipboard_owner = NULL;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
460 break;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
461 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
462
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
463 return DefWindowProc (win, msg, wp, lp);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
464 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
465
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
466 static HWND
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
467 create_owner (void)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
468 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
469 static const char CLASSNAME[] = "Emacs Clipboard";
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
470 WNDCLASS wc;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
471
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
472 memset (&wc, 0, sizeof (wc));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
473 wc.lpszClassName = CLASSNAME;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
474 wc.lpfnWndProc = owner_callback;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
475 RegisterClass (&wc);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
476
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
477 return CreateWindow (CLASSNAME, CLASSNAME, 0, 0, 0, 0, 0, NULL, NULL,
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
478 NULL, NULL);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
479 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
480
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
481 /* Called on exit by term_ntproc() in w32.c */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
482
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
483 void
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
484 term_w32select (void)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
485 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
486 /* This is needed to trigger WM_RENDERALLFORMATS. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
487 if (clipboard_owner != NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
488 DestroyWindow (clipboard_owner);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
489 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
490
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
491 static void
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
492 setup_config (void)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
493 {
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
494 const char *coding_name;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
495 const char *cp;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
496 char *end;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
497 int slen;
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
498 Lisp_Object coding_system;
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
499 Lisp_Object dos_coding_system;
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
500
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
501 CHECK_SYMBOL (Vselection_coding_system);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
502
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
503 coding_system = NILP (Vnext_selection_coding_system) ?
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
504 Vselection_coding_system : Vnext_selection_coding_system;
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
505
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
506 dos_coding_system = validate_coding_system (coding_system);
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
507 if (NILP (dos_coding_system))
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
508 Fsignal (Qerror,
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
509 list2 (build_string ("Coding system is invalid or doesn't have "
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
510 "an eol variant for dos line ends"),
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
511 coding_system));
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
512
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
513 /* Check if we have it cached */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
514 if (!NILP (cfg_coding_system)
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
515 && EQ (cfg_coding_system, dos_coding_system))
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
516 return;
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
517 cfg_coding_system = dos_coding_system;
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
518
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
519 /* Set some sensible fallbacks */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
520 cfg_codepage = ANSICP;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
521 cfg_lcid = LOCALE_NEUTRAL;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
522 cfg_clipboard_type = CF_TEXT;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
523
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
524 /* Interpret the coding system symbol name */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
525 coding_name = SDATA (SYMBOL_NAME (cfg_coding_system));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
526
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
527 /* "(.*-)?utf-16.*" -> CF_UNICODETEXT */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
528 cp = strstr (coding_name, "utf-16");
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
529 if (cp != NULL && (cp == coding_name || cp[-1] == '-'))
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
530 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
531 cfg_clipboard_type = CF_UNICODETEXT;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
532 return;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
533 }
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
534
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
535 /* "cp[0-9]+.*" or "windows-[0-9]+.*" -> CF_TEXT or CF_OEMTEXT */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
536 slen = strlen (coding_name);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
537 if (slen >= 4 && coding_name[0] == 'c' && coding_name[1] == 'p')
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
538 cp = coding_name + 2;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
539 else if (slen >= 10 && memcmp (coding_name, "windows-", 8) == 0)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
540 cp = coding_name + 8;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
541 else
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
542 return;
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
543
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
544 end = (char*)cp;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
545 cfg_codepage = strtol (cp, &end, 10);
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
546
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
547 /* Error return from strtol() or number of digits < 2 -> Restore the
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
548 default and drop it. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
549 if (cfg_codepage == 0 || (end-cp) < 2 )
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
550 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
551 cfg_codepage = ANSICP;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
552 return;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
553 }
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
554
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
555 /* Is it the currently active system default? */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
556 if (cfg_codepage == ANSICP)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
557 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
558 /* cfg_clipboard_type = CF_TEXT; */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
559 return;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
560 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
561 if (cfg_codepage == OEMCP)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
562 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
563 cfg_clipboard_type = CF_OEMTEXT;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
564 return;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
565 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
566
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
567 /* Else determine a suitable locale the hard way. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
568 EnumSystemLocales (enum_locale_callback, LCID_INSTALLED);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
569 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
570
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
571 static BOOL WINAPI
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
572 enum_locale_callback (/*const*/ char* loc_string)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
573 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
574 LCID lcid;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
575 UINT codepage;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
576
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
577 lcid = strtoul (loc_string, NULL, 16);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
578
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
579 /* Is the wanted codepage the "ANSI" codepage for this locale? */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
580 codepage = cp_from_locale (lcid, CF_TEXT);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
581 if (codepage == cfg_codepage)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
582 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
583 cfg_lcid = lcid;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
584 cfg_clipboard_type = CF_TEXT;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
585 return FALSE; /* Stop enumeration */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
586 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
587
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
588 /* Is the wanted codepage the OEM codepage for this locale? */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
589 codepage = cp_from_locale (lcid, CF_OEMTEXT);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
590 if (codepage == cfg_codepage)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
591 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
592 cfg_lcid = lcid;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
593 cfg_clipboard_type = CF_OEMTEXT;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
594 return FALSE; /* Stop enumeration */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
595 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
596
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
597 return TRUE; /* Continue enumeration */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
598 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
599
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
600 static UINT
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
601 cp_from_locale (LCID lcid, UINT format)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
602 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
603 char buffer[20] = "";
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
604 UINT variant, cp;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
605
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
606 variant =
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
607 format == CF_TEXT ? LOCALE_IDEFAULTANSICODEPAGE : LOCALE_IDEFAULTCODEPAGE;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
608
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
609 GetLocaleInfo (lcid, variant, buffer, sizeof (buffer));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
610 cp = strtoul (buffer, NULL, 10);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
611
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
612 if (cp == CP_ACP)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
613 return ANSICP;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
614 else if (cp == CP_OEMCP)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
615 return OEMCP;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
616 else
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
617 return cp;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
618 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
619
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
620 static Lisp_Object
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
621 coding_from_cp (UINT codepage)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
622 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
623 char buffer[30];
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
624 sprintf (buffer, "cp%d-dos", (int) codepage);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
625 return intern (buffer);
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
626 /* We don't need to check that this coding system actually exists
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
627 right here, because that is done later for all coding systems
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
628 used, regardless of where they originate. */
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
629 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
630
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
631 static Lisp_Object
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
632 validate_coding_system (Lisp_Object coding_system)
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
633 {
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
634 Lisp_Object eol_type;
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
635
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
636 /* Make sure the input is valid. */
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
637 if (NILP (Fcoding_system_p (coding_system)))
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
638 return Qnil;
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
639
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
640 /* Make sure we use a DOS coding system as mandated by the system
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
641 specs. */
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
642 eol_type = Fcoding_system_eol_type (coding_system);
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
643
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
644 /* Already a DOS coding system? */
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
645 if (EQ (eol_type, make_number (1)))
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
646 return coding_system;
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
647
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
648 /* Get EOL_TYPE vector of the base of CODING_SYSTEM. */
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
649 if (!VECTORP (eol_type))
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
650 {
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
651 eol_type = Fcoding_system_eol_type (Fcoding_system_base (coding_system));
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
652 if (!VECTORP (eol_type))
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
653 return Qnil;
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
654 }
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
655
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
656 return AREF (eol_type, 1);
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
657 }
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
658
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
659 static void
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
660 setup_windows_coding_system (Lisp_Object coding_system,
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
661 struct coding_system * coding)
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
662 {
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
663 memset (coding, 0, sizeof (*coding));
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
664 setup_coding_system (coding_system, coding);
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
665
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
666 /* Unset CODING_ANNOTATE_COMPOSITION_MASK. Previous code had
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
667 comments about crashes in encode_coding_iso2022 trying to
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
668 dereference a null pointer when composition was on. Selection
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
669 data should not contain any composition sequence on Windows.
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
670
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
671 CODING_ANNOTATION_MASK also includes
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
672 CODING_ANNOTATE_DIRECTION_MASK and CODING_ANNOTATE_CHARSET_MASK,
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
673 which both apply to ISO6429 only. We don't know if these really
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
674 need to be unset on Windows, but it probably doesn't hurt
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
675 either. */
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
676 coding->mode &= ~CODING_ANNOTATION_MASK;
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
677 coding->mode |= CODING_MODE_LAST_BLOCK | CODING_MODE_SAFE_ENCODING;
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
678 }
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
679
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
680
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
681
40962
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
682 DEFUN ("w32-set-clipboard-data", Fw32_set_clipboard_data,
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
683 Sw32_set_clipboard_data, 1, 2, 0,
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
684 doc: /* This sets the clipboard data to the given text. */)
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
685 (string, ignored)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
686 Lisp_Object string, ignored;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
687 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
688 BOOL ok = TRUE;
15150
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
689 int nbytes;
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
690 unsigned char *src;
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
691 unsigned char *dst;
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
692 unsigned char *end;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
693
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
694 /* This parameter used to be the current frame, but we don't use
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
695 that any more. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
696 (void) ignored;
24518
a0423d2b9302 (Fw32_set_clipboard_data): Take into account line
Andrew Innes <andrewi@gnu.org>
parents: 23874
diff changeset
697
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 33697
diff changeset
698 CHECK_STRING (string);
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
699
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
700 setup_config ();
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
701
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
702 current_text = string;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
703 current_coding_system = cfg_coding_system;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
704 current_clipboard_type = cfg_clipboard_type;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
705 current_lcid = cfg_lcid;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
706 current_num_nls = 0;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
707 current_requires_encoding = 0;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
708
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
709 BLOCK_INPUT;
15150
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
710
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
711 /* Check for non-ASCII characters. While we are at it, count the
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
712 number of LFs, so we know how many CRs we will have to add later
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
713 (just in the case where we can use our internal ASCII rendering,
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
714 see code and comment in convert_to_handle_as_ascii() above). */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
715 nbytes = SBYTES (string);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45988
diff changeset
716 src = SDATA (string);
24518
a0423d2b9302 (Fw32_set_clipboard_data): Take into account line
Andrew Innes <andrewi@gnu.org>
parents: 23874
diff changeset
717
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
718 for (dst = src, end = src+nbytes; dst < end; dst++)
24518
a0423d2b9302 (Fw32_set_clipboard_data): Take into account line
Andrew Innes <andrewi@gnu.org>
parents: 23874
diff changeset
719 {
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
720 if (*dst == '\n')
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
721 current_num_nls++;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
722 else if (*dst >= 0x80 || *dst == 0)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
723 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
724 current_requires_encoding = 1;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
725 break;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
726 }
24518
a0423d2b9302 (Fw32_set_clipboard_data): Take into account line
Andrew Innes <andrewi@gnu.org>
parents: 23874
diff changeset
727 }
15150
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
728
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
729 if (!current_requires_encoding)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
730 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
731 /* If all we have is ASCII we don't need to pretend we offer
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
732 anything fancy. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
733 current_coding_system = Qraw_text;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
734 current_clipboard_type = CF_TEXT;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
735 current_lcid = LOCALE_NEUTRAL;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
736 }
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
737
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
738 if (!OpenClipboard (clipboard_owner))
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
739 goto error;
33697
e7765cb122c3 (Fw32_set_clipboard_data): Save a copy of what is put on the clipboard.
Jason Rumney <jasonr@gnu.org>
parents: 31117
diff changeset
740
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
741 ++modifying_clipboard;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
742 ok = EmptyClipboard ();
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
743 --modifying_clipboard;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
744
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
745 /* If we have something non-ASCII we may want to set a locale. We
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
746 do that directly (non-delayed), as it's just a small bit. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
747 if (ok)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
748 ok = !NILP(render_locale());
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
749
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
750 if (ok)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
751 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
752 if (clipboard_owner == NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
753 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
754 /* If for some reason we don't have a clipboard_owner, we
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
755 just set the text format as chosen by the configuration
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
756 and than forget about the whole thing. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
757 ok = !NILP(render (make_number (current_clipboard_type)));
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
758 current_text = Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
759 current_coding_system = Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
760 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
761 else
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
762 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
763 /* Advertise all supported formats so that whatever the
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
764 requester chooses, only one encoding step needs to be
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
765 made. This is intentionally different from what we do in
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
766 the handler for WM_RENDERALLFORMATS. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
767 SetClipboardData (CF_UNICODETEXT, NULL);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
768 SetClipboardData (CF_TEXT, NULL);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
769 SetClipboardData (CF_OEMTEXT, NULL);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
770 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
771 }
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
772
54974
64d01f3f16e5 (Fw32_set_clipboard_data): Get sequence number after closing the clipboard.
Jason Rumney <jasonr@gnu.org>
parents: 53798
diff changeset
773 CloseClipboard ();
64d01f3f16e5 (Fw32_set_clipboard_data): Get sequence number after closing the clipboard.
Jason Rumney <jasonr@gnu.org>
parents: 53798
diff changeset
774
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
775 /* With delayed rendering we haven't really "used" this coding
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
776 system yet, and it's even unclear if we ever will. But this is a
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
777 way to tell the upper level what we *would* use under ideal
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
778 circumstances.
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
779
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
780 We don't signal the actually used coding-system later when we
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
781 finally render, because that can happen at any time and we don't
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
782 want to disturb the "foreground" action. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
783 if (ok)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
784 Vlast_coding_system_used = current_coding_system;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
785
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
786 Vnext_selection_coding_system = Qnil;
51777
940c7de274a2 (last_clipboard_sequence_number): New variable.
Jason Rumney <jasonr@gnu.org>
parents: 47879
diff changeset
787
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
788 if (ok) goto done;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
789
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
790 error:
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
791
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
792 ok = FALSE;
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
793 current_text = Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
794 current_coding_system = Qnil;
51777
940c7de274a2 (last_clipboard_sequence_number): New variable.
Jason Rumney <jasonr@gnu.org>
parents: 47879
diff changeset
795
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
796 done:
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
797 UNBLOCK_INPUT;
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
798
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
799 return (ok ? string : Qnil);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
800 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
801
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
802
40962
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
803 DEFUN ("w32-get-clipboard-data", Fw32_get_clipboard_data,
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
804 Sw32_get_clipboard_data, 0, 1, 0,
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
805 doc: /* This gets the clipboard data in text format. */)
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
806 (ignored)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
807 Lisp_Object ignored;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
808 {
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
809 HGLOBAL htext;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
810 Lisp_Object ret = Qnil;
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
811 UINT actual_clipboard_type;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
812 int use_configured_coding_system = 1;
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
813
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
814 /* This parameter used to be the current frame, but we don't use
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
815 that any more. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
816 (void) ignored;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
817
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
818 /* Don't pass our own text from the clipboard (which might be
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
819 troublesome if the killed text includes null characters). */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
820 if (!NILP (current_text))
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
821 return ret;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
822
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
823 setup_config ();
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
824 actual_clipboard_type = cfg_clipboard_type;
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
825
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
826 BLOCK_INPUT;
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
827
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
828 if (!OpenClipboard (clipboard_owner))
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
829 goto done;
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
830
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
831 if ((htext = GetClipboardData (actual_clipboard_type)) == NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
832 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
833 /* If we want CF_UNICODETEXT but can't get it, the current
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
834 coding system is useless. OTOH we can still try and decode
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
835 CF_TEXT based on the locale that the system gives us and that
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
836 we get down below. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
837 if (actual_clipboard_type == CF_UNICODETEXT)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
838 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
839 htext = GetClipboardData (CF_TEXT);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
840 if (htext != NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
841 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
842 actual_clipboard_type = CF_TEXT;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
843 use_configured_coding_system = 0;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
844 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
845 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
846 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
847 if (htext == NULL)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
848 goto closeclip;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
849
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
850 {
15150
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
851 unsigned char *src;
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
852 unsigned char *dst;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
853 int nbytes;
15150
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
854 int truelen;
23835
ad04307ef465 (Fw32_get_clipboard_data): Do not delete isolated CR
Geoff Voelker <voelker@cs.washington.edu>
parents: 23562
diff changeset
855 int require_decoding = 0;
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
856
15150
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
857 if ((src = (unsigned char *) GlobalLock (htext)) == NULL)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
858 goto closeclip;
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
859
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
860 /* If the clipboard data contains any non-ascii code, we need to
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
861 decode it with a coding system. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
862 if (actual_clipboard_type == CF_UNICODETEXT)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
863 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
864 nbytes = lstrlenW ((WCHAR *)src) * 2;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
865 require_decoding = 1;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
866 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
867 else
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
868 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
869 int i;
33697
e7765cb122c3 (Fw32_set_clipboard_data): Save a copy of what is put on the clipboard.
Jason Rumney <jasonr@gnu.org>
parents: 31117
diff changeset
870
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
871 nbytes = strlen (src);
23562
5f3243813b18 (Vnext_selection_coding_system): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 23422
diff changeset
872
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
873 for (i = 0; i < nbytes; i++)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
874 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
875 if (src[i] >= 0x80)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
876 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
877 require_decoding = 1;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
878 break;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
879 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
880 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
881 }
43483
dcb45a76827f (Fw32_set_clipboard_data): Run pre-write-conversion
Jason Rumney <jasonr@gnu.org>
parents: 40962
diff changeset
882
23835
ad04307ef465 (Fw32_get_clipboard_data): Do not delete isolated CR
Geoff Voelker <voelker@cs.washington.edu>
parents: 23562
diff changeset
883 if (require_decoding)
15150
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
884 {
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
885 struct coding_system coding;
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
886 Lisp_Object coding_system = Qnil;
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
887 Lisp_Object dos_coding_system;
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
888
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
889 /* `next-selection-coding-system' should override everything,
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
890 even when the locale passed by the system disagrees. The
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
891 only exception is when `next-selection-coding-system'
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
892 requested CF_UNICODETEXT and we couldn't get that. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
893 if (use_configured_coding_system
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
894 && !NILP (Vnext_selection_coding_system))
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
895 coding_system = Vnext_selection_coding_system;
15150
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
896
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
897 /* If we have CF_TEXT or CF_OEMTEXT, we want to check out
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
898 CF_LOCALE, too. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
899 else if (actual_clipboard_type != CF_UNICODETEXT)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
900 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
901 HGLOBAL hlocale;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
902 LCID lcid = DEFAULT_LCID;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
903 UINT cp;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
904
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
905 /* Documentation says that the OS always generates
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
906 CF_LOCALE info automatically, so the locale handle
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
907 should always be present. Fact is that this is not
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
908 always true on 9x ;-(. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
909 hlocale = GetClipboardData (CF_LOCALE);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
910 if (hlocale != NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
911 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
912 const LCID * lcid_ptr;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
913 lcid_ptr = (const LCID *) GlobalLock (hlocale);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
914 if (lcid_ptr != NULL)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
915 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
916 lcid = *lcid_ptr;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
917 GlobalUnlock (hlocale);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
918 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
919
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
920 /* 9x has garbage as the sort order (to be exact there
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
921 is another instance of the language id in the upper
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
922 word). We don't care about sort order anyway, so
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
923 we just filter out the unneeded mis-information to
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
924 avoid irritations. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
925 lcid = MAKELCID (LANGIDFROMLCID (lcid), SORT_DEFAULT);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
926 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
927
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
928 /* If we are using fallback from CF_UNICODETEXT, we can't
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
929 use the configured coding system. Also we don't want
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
930 to use it, if the system has supplied us with a locale
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
931 and it is not just the system default. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
932 if (!use_configured_coding_system || lcid != DEFAULT_LCID)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
933 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
934 cp = cp_from_locale (lcid, actual_clipboard_type);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
935 /* If it's just our current standard setting anyway,
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
936 use the coding system that the user has selected.
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
937 Otherwise create a new spec to match the locale
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
938 that was specified by the other side or the
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
939 system. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
940 if (!use_configured_coding_system || cp != cfg_codepage)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
941 coding_system = coding_from_cp (cp);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
942 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
943 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
944
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
945 if (NILP (coding_system))
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
946 coding_system = Vselection_coding_system;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
947 Vnext_selection_coding_system = Qnil;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
948
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
949 dos_coding_system = validate_coding_system (coding_system);
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
950 if (!NILP (dos_coding_system))
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
951 {
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
952 setup_windows_coding_system (dos_coding_system, &coding);
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
953 coding.source = src;
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
954 decode_coding_object (&coding, Qnil, 0, 0, nbytes, nbytes, Qt);
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
955 ret = coding.dst_object;
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
956
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
957 Vlast_coding_system_used = CODING_ID_NAME (coding.id);
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
958 }
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
959 }
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
960 else
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
961 {
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
962 /* FIXME: We may want to repeat the code in this branch for
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
963 the Unicode case. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
964
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
965 /* Need to know final size after CR chars are removed because
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
966 we can't change the string size manually, and doing an
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
967 extra copy is silly. We only remove CR when it appears as
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
968 part of CRLF. */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
969
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
970 truelen = nbytes;
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
971 dst = src;
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
972 /* avoid using strchr because it recomputes the length everytime */
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
973 while ((dst = memchr (dst, '\r', nbytes - (dst - src))) != NULL)
15150
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
974 {
23835
ad04307ef465 (Fw32_get_clipboard_data): Do not delete isolated CR
Geoff Voelker <voelker@cs.washington.edu>
parents: 23562
diff changeset
975 if (dst[1] == '\n') /* safe because of trailing '\0' */
ad04307ef465 (Fw32_get_clipboard_data): Do not delete isolated CR
Geoff Voelker <voelker@cs.washington.edu>
parents: 23562
diff changeset
976 truelen--;
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
977 dst++;
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
978 }
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
979
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
980 ret = make_uninit_string (truelen);
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
981
23835
ad04307ef465 (Fw32_get_clipboard_data): Do not delete isolated CR
Geoff Voelker <voelker@cs.washington.edu>
parents: 23562
diff changeset
982 /* Convert CRLF line endings (the standard CF_TEXT clipboard
ad04307ef465 (Fw32_get_clipboard_data): Do not delete isolated CR
Geoff Voelker <voelker@cs.washington.edu>
parents: 23562
diff changeset
983 format) to LF endings as used internally by Emacs. */
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
984
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45988
diff changeset
985 dst = SDATA (ret);
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
986 while (1)
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
987 {
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
988 unsigned char *next;
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
989 /* copy next line or remaining bytes excluding '\0' */
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
990 next = _memccpy (dst, src, '\r', nbytes);
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
991 if (next)
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
992 {
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
993 /* copied one line ending with '\r' */
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
994 int copied = next - dst;
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
995 nbytes -= copied;
23835
ad04307ef465 (Fw32_get_clipboard_data): Do not delete isolated CR
Geoff Voelker <voelker@cs.washington.edu>
parents: 23562
diff changeset
996 dst += copied;
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
997 src += copied;
23835
ad04307ef465 (Fw32_get_clipboard_data): Do not delete isolated CR
Geoff Voelker <voelker@cs.washington.edu>
parents: 23562
diff changeset
998 if (*src == '\n')
ad04307ef465 (Fw32_get_clipboard_data): Do not delete isolated CR
Geoff Voelker <voelker@cs.washington.edu>
parents: 23562
diff changeset
999 dst--; /* overwrite '\r' with '\n' */
ad04307ef465 (Fw32_get_clipboard_data): Do not delete isolated CR
Geoff Voelker <voelker@cs.washington.edu>
parents: 23562
diff changeset
1000 }
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
1001 else
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
1002 /* copied remaining partial line -> now finished */
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
1003 break;
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
1004 }
22745
ef9607e709bc (Fw32_set_clipboard_data): Set Vlast_coding_system_used.
Andrew Innes <andrewi@gnu.org>
parents: 22545
diff changeset
1005
ef9607e709bc (Fw32_set_clipboard_data): Set Vlast_coding_system_used.
Andrew Innes <andrewi@gnu.org>
parents: 22545
diff changeset
1006 Vlast_coding_system_used = Qraw_text;
15150
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
1007 }
e37489592e27 (Fwin32_set_clipboard_data, Fwin32_get_clipboard_data):
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
1008
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1009 GlobalUnlock (htext);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1010 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1011
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1012 closeclip:
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1013 CloseClipboard ();
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
1014
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1015 done:
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1016 UNBLOCK_INPUT;
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
1017
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1018 return (ret);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1019 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1020
15235
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1021 /* Support checking for a clipboard selection. */
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1022
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1023 DEFUN ("x-selection-exists-p", Fx_selection_exists_p, Sx_selection_exists_p,
40962
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
1024 0, 1, 0,
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
1025 doc: /* Whether there is an owner for the given X Selection.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
1026 The arg should be the name of the selection in question, typically one of
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
1027 the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
1028 \(Those are literal upper-case symbol names, since that's what X expects.)
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
1029 For convenience, the symbol nil is the same as `PRIMARY',
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
1030 and t is the same as `SECONDARY'. */)
15235
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1031 (selection)
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1032 Lisp_Object selection;
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1033 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 33697
diff changeset
1034 CHECK_SYMBOL (selection);
15235
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1035
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1036 /* Return nil for PRIMARY and SECONDARY selections; for CLIPBOARD, check
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1037 if the clipboard currently has valid text format contents. */
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1038
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1039 if (EQ (selection, QCLIPBOARD))
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1040 {
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1041 Lisp_Object val = Qnil;
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1042
90157
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
1043 setup_config ();
a1ee5124bb20 (validate_coding_system)
Kenichi Handa <handa@m17n.org>
parents: 90105
diff changeset
1044
15235
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1045 if (OpenClipboard (NULL))
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1046 {
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1047 UINT format = 0;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1048 while ((format = EnumClipboardFormats (format)))
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1049 /* Check CF_TEXT in addition to cfg_clipboard_type,
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1050 because we can fall back on that if CF_UNICODETEXT is
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1051 not available. Actually a check for CF_TEXT only
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1052 should be enough. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1053 if (format == cfg_clipboard_type || format == CF_TEXT)
15235
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1054 {
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1055 val = Qt;
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1056 break;
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1057 }
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1058 CloseClipboard ();
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1059 }
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1060 return val;
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1061 }
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1062 return Qnil;
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1063 }
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1064
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1065 /* One-time init. Called in the un-dumped Emacs, but not in the
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1066 dumped version. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1067
47879
4ef507bc376e (syms_of_win32select): Fix docstring for `selection-coding-system'.
Juanma Barranquero <lekktu@gmail.com>
parents: 47280
diff changeset
1068 void
16588
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15235
diff changeset
1069 syms_of_w32select ()
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1070 {
16588
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15235
diff changeset
1071 defsubr (&Sw32_set_clipboard_data);
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15235
diff changeset
1072 defsubr (&Sw32_get_clipboard_data);
15235
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1073 defsubr (&Sx_selection_exists_p);
440d937a60f7 (QCLIPBOARD): New symbol.
Karl Heuer <kwzh@gnu.org>
parents: 15150
diff changeset
1074
22914
4d4e775cf6f7 (Vselection_coding_system): Renamed from Vclipboard_coding_system.
Richard M. Stallman <rms@gnu.org>
parents: 22745
diff changeset
1075 DEFVAR_LISP ("selection-coding-system", &Vselection_coding_system,
40962
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
1076 doc: /* Coding system for communicating with other programs.
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1077 When sending or receiving text via cut_buffer, selection, and
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1078 clipboard, the text is encoded or decoded by this coding system.
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1079 The default value is the current system default encoding on 9x/Me and
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1080 `utf-16le-dos' (Unicode) on NT/W2K/XP. */);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1081 /* The actual value is set dynamically in the dumped Emacs, see
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1082 below. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1083 Vselection_coding_system = Qnil;
22545
5d3f50b4c8d2 Include buffer.h, charset.h, and coding.h.
Andrew Innes <andrewi@gnu.org>
parents: 16884
diff changeset
1084
23562
5f3243813b18 (Vnext_selection_coding_system): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 23422
diff changeset
1085 DEFVAR_LISP ("next-selection-coding-system", &Vnext_selection_coding_system,
40962
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
1086 doc: /* Coding system for the next communication with other programs.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
1087 Usually, `selection-coding-system' is used for communicating with
47280
7e81df5e2e1a (syms_of_w32select): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents: 46370
diff changeset
1088 other programs. But, if this variable is set, it is used for the
7e81df5e2e1a (syms_of_w32select): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents: 46370
diff changeset
1089 next communication only. After the communication, this variable is
40962
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
1090 set to nil. */);
23562
5f3243813b18 (Vnext_selection_coding_system): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 23422
diff changeset
1091 Vnext_selection_coding_system = Qnil;
5f3243813b18 (Vnext_selection_coding_system): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 23422
diff changeset
1092
90922
a4f75e39ca14 (syms_of_w32select): Use DEFSYM macro.
Jason Rumney <jasonr@gnu.org>
parents: 90737
diff changeset
1093 DEFSYM (QCLIPBOARD, "CLIPBOARD");
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1094
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1095 cfg_coding_system = Qnil; staticpro (&cfg_coding_system);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1096 current_text = Qnil; staticpro (&current_text);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1097 current_coding_system = Qnil; staticpro (&current_coding_system);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1098
90922
a4f75e39ca14 (syms_of_w32select): Use DEFSYM macro.
Jason Rumney <jasonr@gnu.org>
parents: 90737
diff changeset
1099 DEFSYM (QUNICODE, "utf-16le-dos");
60092
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1100 QANSICP = Qnil; staticpro (&QANSICP);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1101 QOEMCP = Qnil; staticpro (&QOEMCP);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1102 }
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1103
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1104 /* One-time init. Called in the dumped Emacs, but not in the
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1105 un-dumped version. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1106
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1107 void
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1108 globals_of_w32select ()
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1109 {
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1110 DEFAULT_LCID = GetUserDefaultLCID ();
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1111 /* Drop the sort order from the LCID, so we can compare this with
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1112 CF_LOCALE objects that have the same fix on 9x. */
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1113 DEFAULT_LCID = MAKELCID (LANGIDFROMLCID (DEFAULT_LCID), SORT_DEFAULT);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1114
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1115 ANSICP = GetACP ();
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1116 OEMCP = GetOEMCP ();
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1117
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1118 QANSICP = coding_from_cp (ANSICP);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1119 QOEMCP = coding_from_cp (OEMCP);
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1120
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1121 if (os_subtype == OS_NT)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1122 Vselection_coding_system = QUNICODE;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1123 else if (inhibit_window_system)
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1124 Vselection_coding_system = QOEMCP;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1125 else
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1126 Vselection_coding_system = QANSICP;
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1127
04686828d0da 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents: 56299
diff changeset
1128 clipboard_owner = create_owner ();
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1129 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51777
diff changeset
1130
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51777
diff changeset
1131 /* arch-tag: c96e9724-5eb1-4dad-be07-289f092fd2af
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51777
diff changeset
1132 (do not change this comment) */