Alexandre Julliard : winex11: Get rid of support for reigstering Win32 formats without a corresponding atom.

Alexandre Julliard julliard at winehq.org
Thu Sep 22 10:00:02 CDT 2016


Module: wine
Branch: master
Commit: 4415406020440bb088ff76898d6f51bf1c6d8b6e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4415406020440bb088ff76898d6f51bf1c6d8b6e

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Sep 22 15:28:13 2016 +0900

winex11: Get rid of support for reigstering Win32 formats without a corresponding atom.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winex11.drv/clipboard.c | 105 +++----------------------------------------
 1 file changed, 6 insertions(+), 99 deletions(-)

diff --git a/dlls/winex11.drv/clipboard.c b/dlls/winex11.drv/clipboard.c
index caa0348..0850448 100644
--- a/dlls/winex11.drv/clipboard.c
+++ b/dlls/winex11.drv/clipboard.c
@@ -464,106 +464,18 @@ void X11DRV_InitClipboard(void)
 
 
 /**************************************************************************
- *                intern_atoms
- *
- * Intern atoms for formats that don't have one yet.
- */
-static void intern_atoms(void)
-{
-    LPWINE_CLIPFORMAT format;
-    int i, count, len;
-    char **names;
-    Atom *atoms;
-    Display *display;
-    WCHAR buffer[256];
-
-    count = 0;
-    LIST_FOR_EACH_ENTRY( format, &format_list, WINE_CLIPFORMAT, entry )
-        if (!format->atom) count++;
-    if (!count) return;
-
-    display = thread_init_display();
-
-    names = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*names) );
-    atoms = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*atoms) );
-
-    i = 0;
-    LIST_FOR_EACH_ENTRY( format, &format_list, WINE_CLIPFORMAT, entry )
-        if (!format->atom) {
-            if (GetClipboardFormatNameW( format->id, buffer, 256 ) > 0)
-            {
-                /* use defined format name */
-                len = WideCharToMultiByte(CP_UNIXCP, 0, buffer, -1, NULL, 0, NULL, NULL);
-            }
-            else
-            {
-                /* create a name in the same way as ntdll/atom.c:integral_atom_name
-                 * which is normally used by GetClipboardFormatNameW
-                 */
-                static const WCHAR fmt[] = {'#','%','u',0};
-                len = sprintfW(buffer, fmt, format->id) + 1;
-            }
-            names[i] = HeapAlloc(GetProcessHeap(), 0, len);
-            WideCharToMultiByte(CP_UNIXCP, 0, buffer, -1, names[i++], len, NULL, NULL);
-        }
-
-    XInternAtoms( display, names, count, False, atoms );
-
-    i = 0;
-    LIST_FOR_EACH_ENTRY( format, &format_list, WINE_CLIPFORMAT, entry )
-        if (!format->atom) {
-            HeapFree(GetProcessHeap(), 0, names[i]);
-            format->atom = atoms[i++];
-        }
-
-    HeapFree( GetProcessHeap(), 0, names );
-    HeapFree( GetProcessHeap(), 0, atoms );
-}
-
-
-/**************************************************************************
- *		register_format
- *
- * Register a custom X clipboard format.
- */
-static struct clipboard_format *register_format( UINT id, Atom prop )
-{
-    struct clipboard_format *format = find_win32_format( id );
-
-    if (format) return format;
-
-    if (!(format = HeapAlloc( GetProcessHeap(), 0, sizeof(*format) ))) return NULL;
-    format->id     = id;
-    format->atom   = prop;
-    format->import = import_data;
-    format->export = export_data;
-    list_add_tail( &format_list, &format->entry );
-
-    TRACE( "Registering format %s atom %ld\n", debugstr_format(id), prop );
-    return format;
-}
-
-
-/**************************************************************************
  *                X11DRV_CLIPBOARD_LookupProperty
  */
 static struct clipboard_format *X11DRV_CLIPBOARD_LookupProperty( struct clipboard_format *current, Atom prop )
 {
-    for (;;)
-    {
-        struct list *ptr = current ? &current->entry : &format_list;
-        BOOL need_intern = FALSE;
+    struct list *ptr = current ? &current->entry : &format_list;
 
-        while ((ptr = list_next( &format_list, ptr )))
-        {
-            struct clipboard_format *format = LIST_ENTRY( ptr, struct clipboard_format, entry );
-            if (format->atom == prop) return format;
-            if (!format->atom) need_intern = TRUE;
-        }
-        if (!need_intern) return NULL;
-        intern_atoms();
-        /* restart the search for the new atoms */
+    while ((ptr = list_next( &format_list, ptr )))
+    {
+        struct clipboard_format *format = LIST_ENTRY( ptr, struct clipboard_format, entry );
+        if (format->atom == prop) return format;
     }
+    return NULL;
 }
 
 
@@ -635,9 +547,6 @@ static BOOL X11DRV_CLIPBOARD_InsertClipboardData(UINT wFormatID, HANDLE hData,
     TRACE("format=%04x lpData=%p hData=%p lpFormat=%p override=%d\n",
         wFormatID, lpData, hData, lpFormat, override);
 
-    /* make sure the format exists */
-    if (!lpFormat) register_format( wFormatID, 0 );
-
     if (lpData && !override)
         return TRUE;
 
@@ -1851,8 +1760,6 @@ static BOOL export_targets( Display *display, Window win, Atom prop, Atom target
     UINT pos, count, *formats;
     Atom *targets;
 
-    intern_atoms();
-
     if (!(formats = get_clipboard_formats( &count ))) return FALSE;
 
     /* the builtin formats contain duplicates, so allocate some extra space */




More information about the wine-cvs mailing list