macdrv_cocoa.h 19.6 KB
Newer Older
1 2 3
/*
 * MACDRV Cocoa interface declarations
 *
4
 * Copyright 2011, 2012, 2013 Ken Thomases for CodeWeavers Inc.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

/* This header serves as a C interface between the Wine parts of MACDRV
 * and the Objective-C parts.  It should restrict itself to C and the C-based
 * Mac APIs, avoiding both Wine and Objective-C/Cocoa features, so that it can
 * be included by both sides without contaminating either.
 */

#ifndef __WINE_MACDRV_COCOA_H
#define __WINE_MACDRV_COCOA_H


#define GetCurrentProcess MacGetCurrentProcess
#define GetCurrentThread MacGetCurrentThread
#define LoadResource MacLoadResource
#define AnimatePalette MacAnimatePalette
#define EqualRgn MacEqualRgn
#define FillRgn MacFillRgn
#define FrameRgn MacFrameRgn
#define GetPixel MacGetPixel
#define InvertRgn MacInvertRgn
#define LineTo MacLineTo
#define OffsetRgn MacOffsetRgn
#define PaintRgn MacPaintRgn
#define Polygon MacPolygon
#define ResizePalette MacResizePalette
#define SetRectRgn MacSetRectRgn
#define EqualRect MacEqualRect
#define FillRect MacFillRect
#define FrameRect MacFrameRect
#define GetCursor MacGetCursor
#define InvertRect MacInvertRect
#define OffsetRect MacOffsetRect
#define PtInRect MacPtInRect
#define SetCursor MacSetCursor
#define SetRect MacSetRect
#define ShowCursor MacShowCursor
#define UnionRect MacUnionRect

#include <ApplicationServices/ApplicationServices.h>

#undef GetCurrentProcess
#undef GetCurrentThread
#undef LoadResource
#undef AnimatePalette
#undef EqualRgn
#undef FillRgn
#undef FrameRgn
#undef GetPixel
#undef InvertRgn
#undef LineTo
#undef OffsetRgn
#undef PaintRgn
#undef Polygon
#undef ResizePalette
#undef SetRectRgn
#undef EqualRect
#undef FillRect
#undef FrameRect
#undef GetCursor
#undef InvertRect
#undef OffsetRect
#undef PtInRect
#undef SetCursor
#undef SetRect
#undef ShowCursor
#undef UnionRect
#undef DPRINTF

88 89
#include <pthread.h>

90 91

#ifndef DECLSPEC_HIDDEN
92
# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
93 94 95 96 97 98 99 100 101
#  define DECLSPEC_HIDDEN
# elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
#  define DECLSPEC_HIDDEN __attribute__((visibility ("hidden")))
# else
#  define DECLSPEC_HIDDEN
# endif
#endif


102 103 104
#include "macdrv_res.h"


105 106 107 108 109 110 111 112 113 114 115 116
/* Must match the values of Cocoa's NSDragOperation enum. */
enum {
    DRAG_OP_NONE    = 0,
    DRAG_OP_COPY    = 1,
    DRAG_OP_LINK    = 2,
    DRAG_OP_GENERIC = 4,
    DRAG_OP_PRIVATE = 8,
    DRAG_OP_MOVE    = 16,
    DRAG_OP_DELETE  = 32,
    DRAG_OP_EVERY   = UINT32_MAX
};

117 118 119 120 121 122
enum {
    TOPMOST_FLOAT_INACTIVE_NONE,
    TOPMOST_FLOAT_INACTIVE_NONFULLSCREEN,
    TOPMOST_FLOAT_INACTIVE_ALL,
};

123 124 125 126 127 128
enum {
    GL_SURFACE_IN_FRONT_OPAQUE,
    GL_SURFACE_IN_FRONT_TRANSPARENT,
    GL_SURFACE_BEHIND,
};

129 130 131 132 133 134
enum {
    MACDRV_HOTKEY_SUCCESS,
    MACDRV_HOTKEY_ALREADY_REGISTERED,
    MACDRV_HOTKEY_FAILURE,
};

135
typedef struct __TISInputSource *TISInputSourceRef;
136

137
typedef struct macdrv_opaque_window* macdrv_window;
138
typedef struct macdrv_opaque_event_queue* macdrv_event_queue;
139 140
typedef struct macdrv_opaque_view* macdrv_view;
typedef struct macdrv_opaque_opengl_context* macdrv_opengl_context;
141
typedef struct macdrv_opaque_status_item* macdrv_status_item;
142
struct macdrv_event;
143
struct macdrv_query;
144

145 146 147 148 149 150 151
struct macdrv_display {
    CGDirectDisplayID displayID;
    CGRect frame;
    CGRect work_frame;
};


152
/* main */
153
extern int macdrv_err_on;
154
extern int topmost_float_inactive DECLSPEC_HIDDEN;
155
extern int capture_displays_for_fullscreen DECLSPEC_HIDDEN;
156 157
extern int left_option_is_alt DECLSPEC_HIDDEN;
extern int right_option_is_alt DECLSPEC_HIDDEN;
158
extern int allow_immovable_windows DECLSPEC_HIDDEN;
159
extern int cursor_clipping_locks_windows DECLSPEC_HIDDEN;
160
extern int use_precise_scrolling DECLSPEC_HIDDEN;
161
extern int gl_surface_mode DECLSPEC_HIDDEN;
162
extern CFDictionaryRef localized_strings DECLSPEC_HIDDEN;
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
extern int retina_enabled DECLSPEC_HIDDEN;  /* Whether Retina mode is enabled via registry setting. */
extern int retina_on DECLSPEC_HIDDEN;       /* Whether Retina mode is currently active (enabled and display is in default mode). */

static inline CGRect cgrect_mac_from_win(CGRect rect)
{
    if (retina_on)
    {
        rect.origin.x /= 2;
        rect.origin.y /= 2;
        rect.size.width /= 2;
        rect.size.height /= 2;
    }

    return rect;
}

static inline CGRect cgrect_win_from_mac(CGRect rect)
{
    if (retina_on)
    {
        rect.origin.x *= 2;
        rect.origin.y *= 2;
        rect.size.width *= 2;
        rect.size.height *= 2;
    }

    return rect;
}

static inline CGSize cgsize_mac_from_win(CGSize size)
{
    if (retina_on)
    {
        size.width /= 2;
        size.height /= 2;
    }

    return size;
}

static inline CGSize cgsize_win_from_mac(CGSize size)
{
    if (retina_on)
    {
        size.width *= 2;
        size.height *= 2;
    }

    return size;
}

static inline CGPoint cgpoint_mac_from_win(CGPoint point)
{
    if (retina_on)
    {
        point.x /= 2;
        point.y /= 2;
    }

    return point;
}

static inline CGPoint cgpoint_win_from_mac(CGPoint point)
{
    if (retina_on)
    {
        point.x *= 2;
        point.y *= 2;
    }

    return point;
}
235

236
extern int macdrv_start_cocoa_app(unsigned long long tickcount) DECLSPEC_HIDDEN;
237
extern void macdrv_window_rejected_focus(const struct macdrv_event *event) DECLSPEC_HIDDEN;
238
extern void macdrv_beep(void) DECLSPEC_HIDDEN;
239
extern void macdrv_set_application_icon(CFArrayRef images) DECLSPEC_HIDDEN;
240
extern void macdrv_quit_reply(int reply) DECLSPEC_HIDDEN;
241
extern int macdrv_using_input_method(void) DECLSPEC_HIDDEN;
242
extern void macdrv_set_mouse_capture_window(macdrv_window window) DECLSPEC_HIDDEN;
243
extern void macdrv_set_cocoa_retina_mode(int new_mode) DECLSPEC_HIDDEN;
244 245


246 247
/* cursor */
extern void macdrv_set_cursor(CFStringRef name, CFArrayRef frames) DECLSPEC_HIDDEN;
248
extern int macdrv_get_cursor_position(CGPoint *pos) DECLSPEC_HIDDEN;
249
extern int macdrv_set_cursor_position(CGPoint pos) DECLSPEC_HIDDEN;
250
extern int macdrv_clip_cursor(CGRect rect) DECLSPEC_HIDDEN;
251 252


253 254 255
/* display */
extern int macdrv_get_displays(struct macdrv_display** displays, int* count) DECLSPEC_HIDDEN;
extern void macdrv_free_displays(struct macdrv_display* displays) DECLSPEC_HIDDEN;
256 257
extern int macdrv_set_display_mode(const struct macdrv_display* display,
                                   CGDisplayModeRef display_mode) DECLSPEC_HIDDEN;
258

259

260
/* event */
261
enum {
262
    APP_DEACTIVATED,
263
    APP_QUIT_REQUESTED,
264
    DISPLAYS_CHANGED,
265
    HOTKEY_PRESS,
266
    IM_SET_TEXT,
267 268
    KEY_PRESS,
    KEY_RELEASE,
269
    KEYBOARD_CHANGED,
270
    MOUSE_BUTTON,
271 272
    MOUSE_MOVED,
    MOUSE_MOVED_ABSOLUTE,
273
    MOUSE_SCROLL,
274
    QUERY_EVENT,
275
    QUERY_EVENT_NO_PREEMPT_WAIT,
276
    REASSERT_WINDOW_POSITION,
277
    RELEASE_CAPTURE,
278
    SENT_TEXT_INPUT,
279 280
    STATUS_ITEM_MOUSE_BUTTON,
    STATUS_ITEM_MOUSE_MOVE,
281
    WINDOW_BROUGHT_FORWARD,
282
    WINDOW_CLOSE_REQUESTED,
283
    WINDOW_DID_UNMINIMIZE,
284 285
    WINDOW_DRAG_BEGIN,
    WINDOW_DRAG_END,
286
    WINDOW_FRAME_CHANGED,
287
    WINDOW_GOT_FOCUS,
288
    WINDOW_LOST_FOCUS,
289
    WINDOW_MAXIMIZE_REQUESTED,
290
    WINDOW_MINIMIZE_REQUESTED,
291
    WINDOW_RESIZE_ENDED,
292
    WINDOW_RESTORE_REQUESTED,
293 294 295
    NUM_EVENT_TYPES
};

296 297 298 299 300 301 302
enum {
    QUIT_REASON_NONE,
    QUIT_REASON_LOGOUT,
    QUIT_REASON_RESTART,
    QUIT_REASON_SHUTDOWN,
};

303 304 305
typedef uint32_t macdrv_event_mask;

typedef struct macdrv_event {
306
    int                 refs;
307
    int                 deliver;
308 309
    int                 type;
    macdrv_window       window;
310
    union {
311 312 313
        struct {
            int reason;
        }                                           app_quit_requested;
314 315 316
        struct {
            int activating;
        }                                           displays_changed;
317 318 319 320 321 322
        struct {
            unsigned int    vkey;
            unsigned int    mod_flags;
            unsigned int    keycode;
            unsigned long   time_ms;
        }                                           hotkey_press;
323 324 325
        struct {
            void           *data;
            CFStringRef     text;       /* new text or NULL if just completing existing text */
326
            unsigned int    cursor_pos;
327 328
            unsigned int    complete;   /* is completing text? */
        }                                           im_set_text;
329 330 331 332 333
        struct {
            CGKeyCode                   keycode;
            CGEventFlags                modifiers;
            unsigned long               time_ms;
        }                                           key;
334 335 336 337
        struct {
            CFDataRef                   uchr;
            CGEventSourceKeyboardType   keyboard_type;
            int                         iso_keyboard;
338
            TISInputSourceRef           input_source;
339
        }                                           keyboard_changed;
340 341 342 343 344 345 346
        struct {
            int             button;
            int             pressed;
            int             x;
            int             y;
            unsigned long   time_ms;
        }                                           mouse_button;
347 348 349
        struct {
            int             x;
            int             y;
350
            int             drag;
351 352
            unsigned long   time_ms;
        }                                           mouse_moved;
353 354 355 356 357 358 359
        struct {
            int             x_scroll;
            int             y_scroll;
            int             x;
            int             y;
            unsigned long   time_ms;
        }                                           mouse_scroll;
360 361 362
        struct {
            struct macdrv_query *query;
        }                                           query_event;
363 364 365 366
        struct {
            int handled;
            int *done;
        }                                           sent_text_input;
367 368
        struct {
            macdrv_status_item  item;
369 370
            int                 button;
            int                 down;
371
            int                 count;
372 373 374 375
        }                                           status_item_mouse_button;
        struct {
            macdrv_status_item  item;
        }                                           status_item_mouse_move;
376
        struct {
377 378
            CGRect  frame;
            int     fullscreen;
379
            int     in_resize;
380
        }                                           window_frame_changed;
381 382 383 384
        struct {
            unsigned long   serial;
            void           *tried_windows;
        }                                           window_got_focus;
385 386 387 388
        struct {
            int     keep_frame;
            CGRect  frame;
        }                                           window_restore_requested;
389
    };
390 391
} macdrv_event;

392
enum {
393 394 395
    QUERY_DRAG_DROP,
    QUERY_DRAG_EXITED,
    QUERY_DRAG_OPERATION,
396
    QUERY_IME_CHAR_RECT,
397
    QUERY_PASTEBOARD_DATA,
398
    QUERY_RESIZE_SIZE,
399
    QUERY_RESIZE_START,
400
    QUERY_MIN_MAX_INFO,
401 402 403 404 405 406 407 408 409
    NUM_QUERY_TYPES
};

typedef struct macdrv_query {
    int                 refs;
    int                 type;
    macdrv_window       window;
    int                 status;
    int                 done;
410
    union {
411 412 413 414 415 416 417 418 419 420 421 422 423
        struct {
            int                 x;
            int                 y;
            uint32_t            op;
            CFTypeRef           pasteboard;
        }                                           drag_drop;
        struct {
            int                 x;
            int                 y;
            uint32_t            offered_ops;
            uint32_t            accepted_op;
            CFTypeRef           pasteboard;
        }                                           drag_operation;
424 425 426 427 428
        struct {
            void   *data;
            CFRange range;
            CGRect  rect;
        }                                           ime_char_rect;
429 430 431
        struct {
            CFStringRef type;
        }                                           pasteboard_data;
432 433 434 435 436
        struct {
            CGRect          rect;
            unsigned int    from_left : 1;
            unsigned int    from_top : 1;
        }                                           resize_size;
437
    };
438 439
} macdrv_query;

440 441 442 443 444
static inline macdrv_event_mask event_mask_for_type(int type)
{
    return ((macdrv_event_mask)1 << type);
}

445
typedef void (*macdrv_event_handler)(const macdrv_event *event);
446 447

extern macdrv_event_queue macdrv_create_event_queue(macdrv_event_handler handler) DECLSPEC_HIDDEN;
448 449 450
extern void macdrv_destroy_event_queue(macdrv_event_queue queue) DECLSPEC_HIDDEN;
extern int macdrv_get_event_queue_fd(macdrv_event_queue queue) DECLSPEC_HIDDEN;

451 452 453
extern int macdrv_copy_event_from_queue(macdrv_event_queue queue,
        macdrv_event_mask mask, macdrv_event **event) DECLSPEC_HIDDEN;
extern void macdrv_release_event(macdrv_event *event) DECLSPEC_HIDDEN;
454

455 456 457 458
extern macdrv_query* macdrv_create_query(void) DECLSPEC_HIDDEN;
extern macdrv_query* macdrv_retain_query(macdrv_query *query) DECLSPEC_HIDDEN;
extern void macdrv_release_query(macdrv_query *query) DECLSPEC_HIDDEN;
extern void macdrv_set_query_done(macdrv_query *query) DECLSPEC_HIDDEN;
459 460 461
extern int macdrv_register_hot_key(macdrv_event_queue q, unsigned int vkey, unsigned int mod_flags,
                                   unsigned int keycode, unsigned int modifiers) DECLSPEC_HIDDEN;
extern void macdrv_unregister_hot_key(macdrv_event_queue q, unsigned int vkey, unsigned int mod_flags) DECLSPEC_HIDDEN;
462

463

464 465 466 467 468 469
/* window */
struct macdrv_window_features {
    unsigned int    title_bar:1;
    unsigned int    close_button:1;
    unsigned int    minimize_button:1;
    unsigned int    resizable:1;
470
    unsigned int    maximize_button:1;
471 472 473 474
    unsigned int    utility:1;
    unsigned int    shadow:1;
};

475 476
struct macdrv_window_state {
    unsigned int    disabled:1;
477
    unsigned int    no_activate:1;
478
    unsigned int    floating:1;
479 480
    unsigned int    excluded_by_expose:1;
    unsigned int    excluded_by_cycle:1;
481
    unsigned int    minimized:1;
482
    unsigned int    minimized_valid:1;
483
    unsigned int    maximized:1;
484 485
};

486
extern macdrv_window macdrv_create_cocoa_window(const struct macdrv_window_features* wf,
487
        CGRect frame, void* hwnd, macdrv_event_queue queue) DECLSPEC_HIDDEN;
488
extern void macdrv_destroy_cocoa_window(macdrv_window w) DECLSPEC_HIDDEN;
489
extern void* macdrv_get_window_hwnd(macdrv_window w) DECLSPEC_HIDDEN;
490 491
extern void macdrv_set_cocoa_window_features(macdrv_window w,
        const struct macdrv_window_features* wf) DECLSPEC_HIDDEN;
492 493
extern void macdrv_set_cocoa_window_state(macdrv_window w,
        const struct macdrv_window_state* state) DECLSPEC_HIDDEN;
494 495
extern void macdrv_set_cocoa_window_title(macdrv_window w, const UniChar* title,
        size_t length) DECLSPEC_HIDDEN;
496
extern void macdrv_order_cocoa_window(macdrv_window w, macdrv_window prev,
497
        macdrv_window next, int activate) DECLSPEC_HIDDEN;
498
extern void macdrv_hide_cocoa_window(macdrv_window w) DECLSPEC_HIDDEN;
499
extern void macdrv_set_cocoa_window_frame(macdrv_window w, const CGRect* new_frame) DECLSPEC_HIDDEN;
500
extern void macdrv_get_cocoa_window_frame(macdrv_window w, CGRect* out_frame) DECLSPEC_HIDDEN;
501
extern void macdrv_set_cocoa_parent_window(macdrv_window w, macdrv_window parent) DECLSPEC_HIDDEN;
502 503
extern void macdrv_set_window_surface(macdrv_window w, void *surface, pthread_mutex_t *mutex) DECLSPEC_HIDDEN;
extern CGImageRef create_surface_image(void *window_surface, CGRect *rect, int copy_data) DECLSPEC_HIDDEN;
504
extern int get_surface_blit_rects(void *window_surface, const CGRect **rects, int *count) DECLSPEC_HIDDEN;
505
extern void macdrv_window_needs_display(macdrv_window w, CGRect rect) DECLSPEC_HIDDEN;
506
extern void macdrv_set_window_shape(macdrv_window w, const CGRect *rects, int count) DECLSPEC_HIDDEN;
507 508 509 510 511
extern void macdrv_set_window_alpha(macdrv_window w, CGFloat alpha) DECLSPEC_HIDDEN;
extern void macdrv_set_window_color_key(macdrv_window w, CGFloat keyRed, CGFloat keyGreen,
                                        CGFloat keyBlue) DECLSPEC_HIDDEN;
extern void macdrv_clear_window_color_key(macdrv_window w) DECLSPEC_HIDDEN;
extern void macdrv_window_use_per_pixel_alpha(macdrv_window w, int use_per_pixel_alpha) DECLSPEC_HIDDEN;
512
extern void macdrv_give_cocoa_window_focus(macdrv_window w, int activate) DECLSPEC_HIDDEN;
513
extern void macdrv_set_window_min_max_sizes(macdrv_window w, CGSize min_size, CGSize max_size) DECLSPEC_HIDDEN;
514
extern macdrv_view macdrv_create_view(CGRect rect) DECLSPEC_HIDDEN;
515
extern void macdrv_dispose_view(macdrv_view v) DECLSPEC_HIDDEN;
516
extern void macdrv_set_view_frame(macdrv_view v, CGRect rect) DECLSPEC_HIDDEN;
517
extern void macdrv_set_view_superview(macdrv_view v, macdrv_view s, macdrv_window w, macdrv_view p, macdrv_view n) DECLSPEC_HIDDEN;
518
extern void macdrv_set_view_hidden(macdrv_view v, int hidden) DECLSPEC_HIDDEN;
519 520
extern void macdrv_add_view_opengl_context(macdrv_view v, macdrv_opengl_context c) DECLSPEC_HIDDEN;
extern void macdrv_remove_view_opengl_context(macdrv_view v, macdrv_opengl_context c) DECLSPEC_HIDDEN;
521 522
extern int macdrv_get_view_backing_size(macdrv_view v, int backing_size[2]) DECLSPEC_HIDDEN;
extern void macdrv_set_view_backing_size(macdrv_view v, const int backing_size[2]) DECLSPEC_HIDDEN;
523
extern uint32_t macdrv_window_background_color(void) DECLSPEC_HIDDEN;
524 525
extern void macdrv_send_text_input_event(int pressed, unsigned int flags, int repeat, int keyc,
                                         void* data, int* done) DECLSPEC_HIDDEN;
526

527 528

/* keyboard */
529 530
extern void macdrv_get_input_source_info(CFDataRef* uchr,CGEventSourceKeyboardType* keyboard_type, int* is_iso,
                                         TISInputSourceRef* input_source) DECLSPEC_HIDDEN;
531
extern CFArrayRef macdrv_create_input_source_list(void) DECLSPEC_HIDDEN;
532
extern int macdrv_select_input_source(TISInputSourceRef input_source) DECLSPEC_HIDDEN;
533 534 535
extern const CFStringRef macdrv_input_source_input_key DECLSPEC_HIDDEN;
extern const CFStringRef macdrv_input_source_type_key DECLSPEC_HIDDEN;
extern const CFStringRef macdrv_input_source_lang_key DECLSPEC_HIDDEN;
536
extern int macdrv_layout_list_needs_update DECLSPEC_HIDDEN;
537

538

539
/* clipboard */
540 541
extern CFArrayRef macdrv_copy_pasteboard_types(CFTypeRef pasteboard) DECLSPEC_HIDDEN;
extern CFDataRef macdrv_copy_pasteboard_data(CFTypeRef pasteboard, CFStringRef type) DECLSPEC_HIDDEN;
542 543
extern int macdrv_is_pasteboard_owner(void) DECLSPEC_HIDDEN;
extern void macdrv_clear_pasteboard(void) DECLSPEC_HIDDEN;
544
extern int macdrv_set_pasteboard_data(CFStringRef type, CFDataRef data, macdrv_window w) DECLSPEC_HIDDEN;
545 546


547 548 549
/* opengl */
extern macdrv_opengl_context macdrv_create_opengl_context(void* cglctx) DECLSPEC_HIDDEN;
extern void macdrv_dispose_opengl_context(macdrv_opengl_context c) DECLSPEC_HIDDEN;
550
extern void macdrv_make_context_current(macdrv_opengl_context c, macdrv_view v, CGRect r) DECLSPEC_HIDDEN;
551 552 553
extern void macdrv_update_opengl_context(macdrv_opengl_context c) DECLSPEC_HIDDEN;
extern void macdrv_flush_opengl_context(macdrv_opengl_context c) DECLSPEC_HIDDEN;

554 555 556 557 558 559 560

/* systray / status item */
extern macdrv_status_item macdrv_create_status_item(macdrv_event_queue q) DECLSPEC_HIDDEN;
extern void macdrv_destroy_status_item(macdrv_status_item s) DECLSPEC_HIDDEN;
extern void macdrv_set_status_item_image(macdrv_status_item s, CGImageRef cgimage) DECLSPEC_HIDDEN;
extern void macdrv_set_status_item_tooltip(macdrv_status_item s, CFStringRef cftip) DECLSPEC_HIDDEN;

561
#endif  /* __WINE_MACDRV_COCOA_H */