Changeset 21602 for trunk/src


Ignore:
Timestamp:
Mar 23, 2011, 11:44:45 PM (14 years ago)
Author:
dmik
Message:

shell32: systray: Added support for the "TaskbarCreated" system notificaiton message that Windows broadcasts to all top-level windows when the taskbar (xcenter in case of OS/2) is (re)started. This allows applications supporting this message (including Java applications) recreate their taskbar icons.

Location:
trunk/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/shell32/systray.c

    r21600 r21602  
    190190
    191191            free(*ptrayItem);
     192
    192193            *ptrayItem = next;
    193194
    194195            return TRUE;
    195196        }
     197
    196198        ptrayItem = &((*ptrayItem)->nextTrayItem);
    197199    }
     
    226228
    227229    return NULL; /* not found */
     230}
     231
     232/*************************************************************************
     233 *
     234 */
     235void SYSTRAY_PruneAllItems(void)
     236{
     237    SystrayItem *ptrayItem = systray;
     238
     239    while (ptrayItem)
     240    {
     241        SystrayItem *next = ptrayItem->nextTrayItem;
     242
     243        TRACE("SYSTRAY_PruneAllItems %p: uIdx %u, hWnd 0x%08x, uID %d\n",
     244              ptrayItem, ptrayItem->uIdx, ptrayItem->notifyIcon.hWnd,
     245              ptrayItem->notifyIcon.uID);
     246
     247        SYSTRAY_ItemTerm(ptrayItem);
     248
     249        free(ptrayItem);
     250
     251        ptrayItem = next;
     252    }
     253
     254    systray = NULL;
    228255}
    229256
  • trunk/src/shell32/systray.h

    r21592 r21602  
    1717
    1818SystrayItem *SYSTRAY_FindItem(ULONG uIdx);
     19void SYSTRAY_PruneAllItems(void);
    1920
    2021#endif // __WINE_SYSTRAY_H
  • trunk/src/shell32/systray_os2.c

    r21592 r21602  
    99
    1010#define  INCL_WIN
    11 #include <os2wrap.h>
     11#include <os2wrap.h> // Odin32 OS/2 api wrappers
     12
     13#include <win32api.h>
    1214
    1315#include <string.h>
    14 
    15 #include <odin.h>
    16 #include <winconst.h>
    1716
    1817#include "systray_os2.h"
     
    4443            return (MRESULT)TRUE;
    4544        case WM_BUTTON1DBLCLK|0x2000:
    46             DoWin32PostMessage(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
    47                             (MPARAM)ptrayItem->notifyIcon.uID, (MPARAM)WM_LBUTTONDBLCLK_W);
     45            PostMessageA(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
     46                         (WPARAM)ptrayItem->notifyIcon.uID, (LPARAM)WM_LBUTTONDBLCLK_W);
    4847            return (MRESULT)FALSE;
    4948        case WM_BUTTON2DBLCLK|0x2000:
    50             DoWin32PostMessage(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
    51                             (MPARAM)ptrayItem->notifyIcon.uID, (MPARAM)WM_RBUTTONDBLCLK_W);
     49            PostMessageA(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
     50                         (WPARAM)ptrayItem->notifyIcon.uID, (LPARAM)WM_RBUTTONDBLCLK_W);
    5251            return (MRESULT)FALSE;
    5352        case WM_BUTTON3DBLCLK|0x2000:
    54             DoWin32PostMessage(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
    55                             (MPARAM)ptrayItem->notifyIcon.uID, (MPARAM)WM_MBUTTONDBLCLK_W);
     53            PostMessageA(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
     54                         (WPARAM)ptrayItem->notifyIcon.uID, (LPARAM)WM_MBUTTONDBLCLK_W);
    5655            return (MRESULT)FALSE;
    5756        case WM_BUTTON1UP|0x2000:
    58             DoWin32PostMessage(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
    59                             (MPARAM)ptrayItem->notifyIcon.uID, (MPARAM)WM_LBUTTONUP_W);
     57            PostMessageA(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
     58                         (WPARAM)ptrayItem->notifyIcon.uID, (LPARAM)WM_LBUTTONUP_W);
    6059            return (MRESULT)FALSE;
    6160        case WM_BUTTON2UP|0x2000:
    62             DoWin32PostMessage(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
    63                             (MPARAM)ptrayItem->notifyIcon.uID, (MPARAM)WM_RBUTTONUP_W);
     61            PostMessageA(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
     62                         (WPARAM)ptrayItem->notifyIcon.uID, (LPARAM)WM_RBUTTONUP_W);
    6463            return (MRESULT)FALSE;
    6564        case WM_BUTTON3UP|0x2000:
    66             DoWin32PostMessage(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
    67                             (MPARAM)ptrayItem->notifyIcon.uID, (MPARAM)WM_MBUTTONUP_W);
     65            PostMessageA(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
     66                         (WPARAM)ptrayItem->notifyIcon.uID, (LPARAM)WM_MBUTTONUP_W);
    6867            return (MRESULT)FALSE;
    6968        case WM_BUTTON1DOWN|0x2000:
    70             DoWin32PostMessage(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
    71                             (MPARAM)ptrayItem->notifyIcon.uID, (MPARAM)WM_LBUTTONDOWN_W);
     69            PostMessageA(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
     70                         (WPARAM)ptrayItem->notifyIcon.uID, (LPARAM)WM_LBUTTONDOWN_W);
    7271            return (MRESULT)FALSE;
    7372        case WM_BUTTON2DOWN|0x2000:
    74             DoWin32PostMessage(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
    75                             (MPARAM)ptrayItem->notifyIcon.uID, (MPARAM)WM_RBUTTONDOWN_W);
     73            PostMessageA(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
     74                         (WPARAM)ptrayItem->notifyIcon.uID, (LPARAM)WM_RBUTTONDOWN_W);
    7675            return (MRESULT)FALSE;
    7776        case WM_BUTTON3DOWN|0x2000:
    78             DoWin32PostMessage(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
    79                             (MPARAM)ptrayItem->notifyIcon.uID, (MPARAM)WM_MBUTTONDOWN_W);
     77            PostMessageA(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
     78                         (WPARAM)ptrayItem->notifyIcon.uID, (LPARAM)WM_MBUTTONDOWN_W);
    8079            return (MRESULT)FALSE;
    8180    }
  • trunk/src/shell32/systray_os2.h

    r21600 r21602  
    3636};
    3737
    38 BOOL DoWin32PostMessage(HWND, ULONG, MPARAM, MPARAM);
    39 
    4038BOOL SYSTRAY_Ex_Init(void);
    4139
  • trunk/src/shell32/systray_os2ex.c

    r21600 r21602  
    2626
    2727static ULONG WM_XST_CREATED = 0;
     28static ULONG WM_TASKBARCREATED_W = 0;
    2829
    2930static HWND hwndProxy = NULLHANDLE;
     
    6869            if (winMsg)
    6970            {
    70                 DoWin32PostMessage(ptrayItem->notifyIcon.hWnd,
    71                                    ptrayItem->notifyIcon.uCallbackMessage,
    72                                    (MPARAM)ptrayItem->notifyIcon.uID,
    73                                    (MPARAM)winMsg);
     71                PostMessageA(ptrayItem->notifyIcon.hWnd,
     72                             ptrayItem->notifyIcon.uCallbackMessage,
     73                             (WPARAM)ptrayItem->notifyIcon.uID,
     74                             (LPARAM)winMsg);
    7475                return (MRESULT)TRUE;
    7576            }
     
    7879        case XST_IN_CONTEXT:
    7980        {
    80             DoWin32PostMessage(ptrayItem->notifyIcon.hWnd,
    81                                ptrayItem->notifyIcon.uCallbackMessage,
    82                                (MPARAM)ptrayItem->notifyIcon.uID,
    83                                (MPARAM)WM_CONTEXTMENU_W);
     81            PostMessageA(ptrayItem->notifyIcon.hWnd,
     82                         ptrayItem->notifyIcon.uCallbackMessage,
     83                         (WPARAM)ptrayItem->notifyIcon.uID,
     84                         (LPARAM)WM_CONTEXTMENU_W);
    8485            return (MRESULT)TRUE;
    8586        }
     
    9495        if (msg == WM_XST_CREATED)
    9596        {
     97            // xCenter was restarted, no icons are shown; remove all items
     98            // and broadcast TaskbarCreated to let applications recreate them
     99            SYSTRAY_PruneAllItems();
     100
     101            dprintf(("SHELL32: SYSTRAY: Broadcasting \"TaskbarCreated\" (%x)",
     102                     WM_TASKBARCREATED_W));
     103            PostMessageA(HWND_BROADCAST_W, WM_TASKBARCREATED_W,
     104                         (WPARAM)0, (LPARAM)0);
    96105            return (MRESULT)TRUE;
    97106        }
     
    204213    WM_XST_CREATED = xstGetSysTrayCreatedMsgId();
    205214
     215    WM_TASKBARCREATED_W = RegisterWindowMessageA("TaskbarCreated");
     216
    206217    SYSTRAY_ItemInit = SYSTRAY_Ex_ItemInit;
    207218    SYSTRAY_ItemTerm = SYSTRAY_Ex_ItemTerm;
  • trunk/src/user32/auxthread.cpp

    r21599 r21602  
    3838    {
    3939        AUXMSG *msg = (AUXMSG *)mp1;
     40        dprintf(("USER32: AuxWndProc: pfn %p, arg1 %x, arg2 %x, arg3 %x, "
     41                 "arg4 %x, del %d", msg->pfn, msg->arg1, msg->arg2,
     42                 msg->arg3, msg->arg4, msg->del));
     43
    4044        MRESULT mrc = msg->pfn(msg->arg1, msg->arg2, msg->arg3, msg->arg4);
    4145        if (msg->del)
     
    98102                             PVOID arg3, PVOID arg4, PVOID *ret)
    99103{
     104    dprintf(("USER32: DoRunOnAuxThread: pfn %p, arg1 %x, arg2 %x, arg3 %x, "
     105             "arg4 %x, ret %x", pfn, arg1, arg2, arg3, arg4, ret));
     106
    100107    APIRET arc;
    101108
     
    106113        if (arc != NO_ERROR)
    107114        {
    108             dprintf(("USER32: AuxThread: DosCreateEventSem failed with %d",
     115            dprintf(("USER32: DoRunOnAuxThread: DosCreateEventSem failed with %d",
    109116                     arc));
    110117            return FALSE;
     
    127134            else
    128135            {
    129                 dprintf(("USER32: AuxThread: CreateThread() failed with %x",
     136                dprintf(("USER32: DoRunOnAuxThread: CreateThread() failed with %x",
    130137                         GetLastError()));
    131138
Note: See TracChangeset for help on using the changeset viewer.