[PATCH 3/3] winemac.drv: Implement adding and deleting taskbar buttons.

Zebediah Figura zfigura at codeweavers.com
Thu Jul 13 13:14:34 CDT 2017


This uses the same mechanism as the previous patch. It is however
completely untested.

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 dlls/winemac.drv/macdrv.h         |  2 ++
 dlls/winemac.drv/systray.c        | 33 +++++++++++++++++++++++++++++++++
 dlls/winemac.drv/window.c         |  2 ++
 dlls/winemac.drv/winemac.drv.spec |  1 +
 4 files changed, 38 insertions(+)

diff --git a/dlls/winemac.drv/macdrv.h b/dlls/winemac.drv/macdrv.h
index bb0e8ed13f2..639761703af 100644
--- a/dlls/winemac.drv/macdrv.h
+++ b/dlls/winemac.drv/macdrv.h
@@ -144,6 +144,8 @@ static inline RECT rect_from_cgrect(CGRect cgrect)
     unsigned int        per_pixel_alpha : 1;    /* is window using per-pixel alpha? */
     unsigned int        minimized : 1;          /* is window minimized? */
     unsigned int        swap_interval : 1;      /* GL swap interval for window */
+    unsigned int        taskbar_added : 1;      /* does window have a manually added taskbar button? */
+    unsigned int        taskbar_deleted : 1;    /* does window have a manually deleted taskbar button? */
     struct window_surface *surface;
     struct window_surface *unminimized_surface;
 };
diff --git a/dlls/winemac.drv/systray.c b/dlls/winemac.drv/systray.c
index 9351d7796f5..e233a44f1a5 100644
--- a/dlls/winemac.drv/systray.c
+++ b/dlls/winemac.drv/systray.c
@@ -381,3 +381,36 @@ void macdrv_status_item_mouse_move(const macdrv_event *event)
         }
     }
 }
+
+
+/***********************************************************************
+ *              SetTaskbarState   (MACDRV.@)
+ *
+ * Driver-side implementation of ITaskbarList operations.
+ */
+HRESULT CDECL macdrv_SetTaskbarState( HWND hwnd, taskbar_state state )
+{
+    struct macdrv_win_data *data;
+    HRESULT res = E_NOTIMPL;
+
+    if (!(data = get_win_data( hwnd ))) return E_FAIL;
+
+    switch (state)
+    {
+    case TASKBAR_ADDED:
+        data->taskbar_added = TRUE;
+        data->taskbar_deleted = FALSE;
+        res = S_OK;
+        break;
+    case TASKBAR_DELETED:
+        data->taskbar_added = FALSE;
+        data->taskbar_deleted = TRUE;
+        res = S_OK;
+        break;
+    }
+
+    set_cocoa_window_properties( data );
+
+    release_win_data( data );
+    return res;
+}
diff --git a/dlls/winemac.drv/window.c b/dlls/winemac.drv/window.c
index 2e244050625..72cb55ebf37 100644
--- a/dlls/winemac.drv/window.c
+++ b/dlls/winemac.drv/window.c
@@ -108,7 +108,9 @@ static void get_cocoa_window_state(struct macdrv_win_data *data,
     state->no_activate = !can_activate_window(data->hwnd);
     state->floating = (ex_style & WS_EX_TOPMOST) != 0;
     state->excluded_by_expose = state->excluded_by_cycle =
+        data->taskbar_deleted ||
         (!(ex_style & WS_EX_APPWINDOW) &&
+         !data->taskbar_added &&
          (GetWindow(data->hwnd, GW_OWNER) || (ex_style & (WS_EX_TOOLWINDOW | WS_EX_NOACTIVATE))));
     if (IsRectEmpty(&data->window_rect))
         state->excluded_by_expose = TRUE;
diff --git a/dlls/winemac.drv/winemac.drv.spec b/dlls/winemac.drv/winemac.drv.spec
index 6fa723a6904..99c5e2ff542 100644
--- a/dlls/winemac.drv/winemac.drv.spec
+++ b/dlls/winemac.drv/winemac.drv.spec
@@ -47,6 +47,7 @@
 
 # System tray
 @ cdecl wine_notify_icon(long ptr)
+@ cdecl SetTaskbarState(ptr long) macdrv_SetTaskbarState
 
 # IME
 @ stdcall ImeConfigure(long long long ptr)
-- 
2.13.2




More information about the wine-patches mailing list