Alexandre Julliard : winex11: Remove support for icon windows, use a default icon instead.

Alexandre Julliard julliard at winehq.org
Mon Sep 10 15:22:11 CDT 2012


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Sep  4 17:14:46 2012 +0200

winex11: Remove support for icon windows, use a default icon instead.

---

 dlls/winex11.drv/window.c |  137 ++++++++++++--------------------------------
 dlls/winex11.drv/x11drv.h |    1 -
 2 files changed, 38 insertions(+), 100 deletions(-)

diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index 16034ea..07f9d26 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -82,7 +82,6 @@ static Window user_time_window;
 
 static const char foreign_window_prop[] = "__wine_x11_foreign_window";
 static const char whole_window_prop[] = "__wine_x11_whole_window";
-static const char icon_window_prop[]  = "__wine_x11_icon_window";
 static const char clip_window_prop[]  = "__wine_x11_clip_window";
 static const char managed_prop[]      = "__wine_x11_managed";
 
@@ -449,48 +448,6 @@ static void sync_window_text( Display *display, Window win, const WCHAR *text )
 
 
 /***********************************************************************
- *              create_icon_window
- */
-static Window create_icon_window( Display *display, struct x11drv_win_data *data )
-{
-    XSetWindowAttributes attr;
-
-    attr.event_mask = (ExposureMask | KeyPressMask | KeyReleaseMask | PointerMotionMask |
-                       ButtonPressMask | ButtonReleaseMask | EnterWindowMask);
-    attr.bit_gravity = NorthWestGravity;
-    attr.backing_store = NotUseful/*WhenMapped*/;
-    attr.colormap      = X11DRV_PALETTE_PaletteXColormap; /* Needed due to our visual */
-
-    data->icon_window = XCreateWindow( display, root_window, 0, 0,
-                                       GetSystemMetrics( SM_CXICON ),
-                                       GetSystemMetrics( SM_CYICON ),
-                                       0, screen_depth,
-                                       InputOutput, visual,
-                                       CWEventMask | CWBitGravity | CWBackingStore | CWColormap, &attr );
-    XSaveContext( display, data->icon_window, winContext, (char *)data->hwnd );
-    XFlush( display );  /* make sure the window exists before we start painting to it */
-
-    TRACE( "created %lx\n", data->icon_window );
-    SetPropA( data->hwnd, icon_window_prop, (HANDLE)data->icon_window );
-    return data->icon_window;
-}
-
-
-
-/***********************************************************************
- *              destroy_icon_window
- */
-static void destroy_icon_window( Display *display, struct x11drv_win_data *data )
-{
-    if (!data->icon_window) return;
-    XDeleteContext( display, data->icon_window, winContext );
-    XDestroyWindow( display, data->icon_window );
-    data->icon_window = 0;
-    RemovePropA( data->hwnd, icon_window_prop );
-}
-
-
-/***********************************************************************
  *              get_bitmap_argb
  *
  * Return the bitmap bits in ARGB format. Helper for setting icon hints.
@@ -624,11 +581,16 @@ static void set_icon_hints( Display *display, struct x11drv_win_data *data,
                             HICON icon_big, HICON icon_small )
 {
     XWMHints *hints = data->wm_hints;
+    ICONINFO ii, ii_small;
+    HDC hDC;
+    unsigned int size;
+    unsigned long *bits;
 
     if (!icon_big)
     {
         icon_big = (HICON)SendMessageW( data->hwnd, WM_GETICON, ICON_BIG, 0 );
         if (!icon_big) icon_big = (HICON)GetClassLongPtrW( data->hwnd, GCLP_HICON );
+        if (!icon_big) icon_big = LoadIconW( 0, (LPWSTR)IDI_WINLOGO );
     }
     if (!icon_small)
     {
@@ -640,63 +602,46 @@ static void set_icon_hints( Display *display, struct x11drv_win_data *data,
     if (data->icon_mask) XFreePixmap( gdi_display, data->icon_mask );
     data->icon_pixmap = data->icon_mask = 0;
 
-    if (!icon_big)
-    {
-        if (!data->icon_window) create_icon_window( display, data );
-        hints->icon_window = data->icon_window;
-        hints->flags = (hints->flags & ~(IconPixmapHint | IconMaskHint)) | IconWindowHint;
-    }
-    else
-    {
-        ICONINFO ii, ii_small;
-        HDC hDC;
-        unsigned int size;
-        unsigned long *bits;
+    if (!GetIconInfo(icon_big, &ii)) return;
 
-        if (!GetIconInfo(icon_big, &ii)) return;
+    hDC = CreateCompatibleDC(0);
+    bits = get_bitmap_argb( hDC, ii.hbmColor, ii.hbmMask, &size );
+    if (bits && GetIconInfo( icon_small, &ii_small ))
+    {
+        unsigned int size_small;
+        unsigned long *bits_small, *new;
 
-        hDC = CreateCompatibleDC(0);
-        bits = get_bitmap_argb( hDC, ii.hbmColor, ii.hbmMask, &size );
-        if (bits && GetIconInfo( icon_small, &ii_small ))
+        if ((bits_small = get_bitmap_argb( hDC, ii_small.hbmColor, ii_small.hbmMask, &size_small )) &&
+            (bits_small[0] != bits[0] || bits_small[1] != bits[1]))  /* size must be different */
         {
-            unsigned int size_small;
-            unsigned long *bits_small, *new;
-
-            if ((bits_small = get_bitmap_argb( hDC, ii_small.hbmColor, ii_small.hbmMask, &size_small )) &&
-                (bits_small[0] != bits[0] || bits_small[1] != bits[1]))  /* size must be different */
+            if ((new = HeapReAlloc( GetProcessHeap(), 0, bits,
+                                    (size + size_small) * sizeof(unsigned long) )))
             {
-                if ((new = HeapReAlloc( GetProcessHeap(), 0, bits,
-                                        (size + size_small) * sizeof(unsigned long) )))
-                {
-                    bits = new;
-                    memcpy( bits + size, bits_small, size_small * sizeof(unsigned long) );
-                    size += size_small;
-                }
+                bits = new;
+                memcpy( bits + size, bits_small, size_small * sizeof(unsigned long) );
+                size += size_small;
             }
-            HeapFree( GetProcessHeap(), 0, bits_small );
-            DeleteObject( ii_small.hbmColor );
-            DeleteObject( ii_small.hbmMask );
         }
-        if (bits)
-            XChangeProperty( display, data->whole_window, x11drv_atom(_NET_WM_ICON),
-                             XA_CARDINAL, 32, PropModeReplace, (unsigned char *)bits, size );
-        else
-            XDeleteProperty( display, data->whole_window, x11drv_atom(_NET_WM_ICON) );
-        HeapFree( GetProcessHeap(), 0, bits );
-
-        if (create_icon_pixmaps( hDC, &ii, data ))
-        {
-            hints->icon_pixmap = data->icon_pixmap;
-            hints->icon_mask = data->icon_mask;
-            hints->flags |= IconPixmapHint | IconMaskHint;
-        }
-        destroy_icon_window( display, data );
-        hints->flags &= ~IconWindowHint;
+        HeapFree( GetProcessHeap(), 0, bits_small );
+        DeleteObject( ii_small.hbmColor );
+        DeleteObject( ii_small.hbmMask );
+    }
+    if (bits)
+        XChangeProperty( display, data->whole_window, x11drv_atom(_NET_WM_ICON),
+                         XA_CARDINAL, 32, PropModeReplace, (unsigned char *)bits, size );
+    else
+        XDeleteProperty( display, data->whole_window, x11drv_atom(_NET_WM_ICON) );
+    HeapFree( GetProcessHeap(), 0, bits );
 
-        DeleteObject( ii.hbmColor );
-        DeleteObject( ii.hbmMask );
-        DeleteDC(hDC);
+    if (create_icon_pixmaps( hDC, &ii, data ))
+    {
+        hints->icon_pixmap = data->icon_pixmap;
+        hints->icon_mask = data->icon_mask;
+        hints->flags |= IconPixmapHint | IconMaskHint;
     }
+    DeleteObject( ii.hbmColor );
+    DeleteObject( ii.hbmMask );
+    DeleteDC(hDC);
 }
 
 
@@ -1518,7 +1463,6 @@ void CDECL X11DRV_DestroyWindow( HWND hwnd )
 
     destroy_gl_drawable( hwnd );
     destroy_whole_window( thread_data->display, data, FALSE );
-    destroy_icon_window( thread_data->display, data );
 
     if (thread_data->last_focus == hwnd) thread_data->last_focus = 0;
     if (thread_data->last_xic_hwnd == hwnd) thread_data->last_xic_hwnd = 0;
@@ -1864,11 +1808,7 @@ void CDECL X11DRV_GetDC( HDC hdc, HWND hwnd, HWND top, const RECT *win_rect,
 
     if (top == hwnd)
     {
-        if (data && IsIconic( hwnd ) && data->icon_window)
-        {
-            escape.drawable = data->icon_window;
-        }
-        else escape.drawable = data ? data->whole_window : X11DRV_get_whole_window( hwnd );
+        escape.drawable = data ? data->whole_window : X11DRV_get_whole_window( hwnd );
 
         /* special case: when repainting the root window, clip out top-level windows */
         if (data && data->whole_window == root_window) escape.mode = ClipByChildren;
@@ -1962,7 +1902,6 @@ void CDECL X11DRV_SetParent( HWND hwnd, HWND parent, HWND old_parent )
         {
             /* destroy the old X windows */
             destroy_whole_window( display, data, FALSE );
-            destroy_icon_window( display, data );
             if (data->managed)
             {
                 data->managed = FALSE;
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 1c4c341..c637a67 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -533,7 +533,6 @@ struct x11drv_win_data
 {
     HWND        hwnd;           /* hwnd that this private data belongs to */
     Window      whole_window;   /* X window for the complete window */
-    Window      icon_window;    /* X window for the icon */
     RECT        window_rect;    /* USER window rectangle relative to parent */
     RECT        whole_rect;     /* X window rectangle for the whole window relative to parent */
     RECT        client_rect;    /* client area relative to parent */




More information about the wine-cvs mailing list