~compiz-team/compiz-core/oneiric.force_output_detection

« back to all changes in this revision

Viewing changes to unity/unity_window_decorator/src/gtk-window-decorator.h

  • Committer: Sam Spilsbury
  • Date: 2011-08-19 18:23:21 UTC
  • Revision ID: sam.spilsbury@canonical.com-20110819182321-iqbupv0eodx3jlyb
Unmerge the new decorator

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef _GTK_WINDOW_DECORATOR_H
 
2
#define _GTK_WINDOW_DECORATOR_H
 
3
#ifdef HAVE_CONFIG_H
 
4
#include <config.h>
 
5
#endif
 
6
 
 
7
#include <decoration.h>
 
8
 
 
9
#include <X11/Xlib.h>
 
10
#include <X11/Xatom.h>
 
11
#include <X11/cursorfont.h>
 
12
#include <X11/extensions/Xrender.h>
 
13
#include <X11/Xregion.h>
 
14
 
 
15
#ifdef HAVE_GTK_2_24
 
16
 
 
17
#ifndef GDK_DISABLE_DEPRECATED
 
18
#define GDK_DISABLE_DEPRECATED
 
19
#endif
 
20
 
 
21
#define create_foreign_window(xid)                                            \
 
22
    gdk_x11_foreign_new_for_display (gdk_display_get_default (),              \
 
23
                                     xid);
 
24
#else
 
25
 
 
26
#define create_foreign_window(xid)                                            \
 
27
    gdk_window_foreign_new (xid)
 
28
 
 
29
#ifdef GTK_DISABLE_DEPRECATED
 
30
#undef GTK_DISABLE_DEPRECATED
 
31
#endif
 
32
 
 
33
#endif
 
34
 
 
35
#include <gtk/gtk.h>
 
36
#include <gdk/gdkx.h>
 
37
#include <gdk/gdk.h>
 
38
 
 
39
#ifdef USE_GCONF_UNITY_WINDOW_DECORATOR
 
40
#include <gconf/gconf-client.h>
 
41
#endif
 
42
 
 
43
#ifdef USE_DBUS_GLIB
 
44
#define DBUS_API_SUBJECT_TO_CHANGE
 
45
#include <dbus/dbus.h>
 
46
#include <dbus/dbus-glib-lowlevel.h>
 
47
#endif
 
48
 
 
49
#define WNCK_I_KNOW_THIS_IS_UNSTABLE
 
50
#include <libwnck/libwnck.h>
 
51
#include <libwnck/window-action-menu.h>
 
52
 
 
53
#ifndef HAVE_LIBWNCK_2_19_4
 
54
#define wnck_window_get_client_window_geometry wnck_window_get_geometry
 
55
#endif
 
56
 
 
57
#include <cairo.h>
 
58
#include <cairo-xlib.h>
 
59
 
 
60
#if CAIRO_VERSION < CAIRO_VERSION_ENCODE(1, 1, 0)
 
61
#define CAIRO_EXTEND_PAD CAIRO_EXTEND_NONE
 
62
#endif
 
63
 
 
64
#include <pango/pango-context.h>
 
65
#include <pango/pangocairo.h>
 
66
 
 
67
#include <string.h>
 
68
#include <stdlib.h>
 
69
#include <math.h>
 
70
#include <limits.h>
 
71
#include <unistd.h>
 
72
#include <sys/types.h>
 
73
#include <signal.h>
 
74
 
 
75
#include <libintl.h>
 
76
#define _(x)  gettext (x)
 
77
#define N_(x) x
 
78
 
 
79
#ifdef USE_METACITY
 
80
#include <metacity-private/theme.h>
 
81
#endif
 
82
 
 
83
#define METACITY_GCONF_DIR "/apps/metacity/general"
 
84
 
 
85
#define COMPIZ_USE_SYSTEM_FONT_KEY                  \
 
86
METACITY_GCONF_DIR "/titlebar_uses_system_font"
 
87
 
 
88
#define COMPIZ_TITLEBAR_FONT_KEY        \
 
89
METACITY_GCONF_DIR "/titlebar_font"
 
90
 
 
91
#define COMPIZ_DOUBLE_CLICK_TITLEBAR_KEY               \
 
92
METACITY_GCONF_DIR "/action_double_click_titlebar"
 
93
 
 
94
#define COMPIZ_MIDDLE_CLICK_TITLEBAR_KEY               \
 
95
METACITY_GCONF_DIR "/action_middle_click_titlebar"
 
96
 
 
97
#define COMPIZ_RIGHT_CLICK_TITLEBAR_KEY        \
 
98
METACITY_GCONF_DIR "/action_right_click_titlebar"
 
99
 
 
100
#define COMPIZ_GCONF_DIR1 "/apps/compiz/plugins/decoration/allscreens/options"
 
101
 
 
102
#define COMPIZ_SHADOW_RADIUS_KEY \
 
103
COMPIZ_GCONF_DIR1 "/shadow_radius"
 
104
 
 
105
#define COMPIZ_SHADOW_OPACITY_KEY \
 
106
COMPIZ_GCONF_DIR1 "/shadow_opacity"
 
107
 
 
108
#define COMPIZ_SHADOW_COLOR_KEY \
 
109
COMPIZ_GCONF_DIR1 "/shadow_color"
 
110
 
 
111
#define COMPIZ_SHADOW_OFFSET_X_KEY \
 
112
COMPIZ_GCONF_DIR1 "/shadow_x_offset"
 
113
 
 
114
#define COMPIZ_SHADOW_OFFSET_Y_KEY \
 
115
COMPIZ_GCONF_DIR1 "/shadow_y_offset"
 
116
 
 
117
#define META_THEME_KEY          \
 
118
METACITY_GCONF_DIR "/theme"
 
119
 
 
120
#define META_BUTTON_LAYOUT_KEY          \
 
121
METACITY_GCONF_DIR "/button_layout"
 
122
 
 
123
#define GCONF_DIR "/apps/gwd"
 
124
 
 
125
#define USE_META_THEME_KEY          \
 
126
GCONF_DIR "/use_metacity_theme"
 
127
 
 
128
#define META_THEME_OPACITY_KEY          \
 
129
GCONF_DIR "/metacity_theme_opacity"
 
130
 
 
131
#define META_THEME_SHADE_OPACITY_KEY          \
 
132
GCONF_DIR "/metacity_theme_shade_opacity"
 
133
 
 
134
#define META_THEME_ACTIVE_OPACITY_KEY          \
 
135
GCONF_DIR "/metacity_theme_active_opacity"
 
136
 
 
137
#define META_THEME_ACTIVE_SHADE_OPACITY_KEY          \
 
138
GCONF_DIR "/metacity_theme_active_shade_opacity"
 
139
 
 
140
#define BLUR_TYPE_KEY      \
 
141
GCONF_DIR "/blur_type"
 
142
 
 
143
#define WHEEL_ACTION_KEY   \
 
144
GCONF_DIR "/mouse_wheel_action"
 
145
 
 
146
#define DBUS_DEST       "org.freedesktop.compiz"
 
147
#define DBUS_PATH       "/org/freedesktop/compiz/decor/screen0"
 
148
#define DBUS_INTERFACE  "org.freedesktop.compiz"
 
149
#define DBUS_METHOD_GET "get"
 
150
 
 
151
#define STROKE_ALPHA 0.6
 
152
 
 
153
#define ICON_SPACE 20
 
154
 
 
155
#define DOUBLE_CLICK_DISTANCE 8.0
 
156
 
 
157
#define WM_MOVERESIZE_SIZE_TOPLEFT      0
 
158
#define WM_MOVERESIZE_SIZE_TOP          1
 
159
#define WM_MOVERESIZE_SIZE_TOPRIGHT     2
 
160
#define WM_MOVERESIZE_SIZE_RIGHT        3
 
161
#define WM_MOVERESIZE_SIZE_BOTTOMRIGHT  4
 
162
#define WM_MOVERESIZE_SIZE_BOTTOM       5
 
163
#define WM_MOVERESIZE_SIZE_BOTTOMLEFT   6
 
164
#define WM_MOVERESIZE_SIZE_LEFT         7
 
165
#define WM_MOVERESIZE_MOVE              8
 
166
#define WM_MOVERESIZE_SIZE_KEYBOARD     9
 
167
#define WM_MOVERESIZE_MOVE_KEYBOARD    10
 
168
 
 
169
#define SHADOW_RADIUS      8.0
 
170
#define SHADOW_OPACITY     0.5
 
171
#define SHADOW_OFFSET_X    1
 
172
#define SHADOW_OFFSET_Y    1
 
173
#define SHADOW_COLOR_RED   0x0000
 
174
#define SHADOW_COLOR_GREEN 0x0000
 
175
#define SHADOW_COLOR_BLUE  0x0000
 
176
 
 
177
#define SHADOW_TYPE_ACTIVE_NORMAL 1
 
178
#define SHADOW_TYPE_ACTIVE_MAX    2
 
179
#define SHADOW_TYPE_INACTIVE_NORMAL 3
 
180
#define SHADOW_TYPE_INACTIVE_MAX    4
 
181
 
 
182
#define META_OPACITY              0.75
 
183
#define META_SHADE_OPACITY        TRUE
 
184
#define META_ACTIVE_OPACITY       1.0
 
185
#define META_ACTIVE_SHADE_OPACITY TRUE
 
186
 
 
187
#define META_MAXIMIZED (WNCK_WINDOW_STATE_MAXIMIZED_HORIZONTALLY | \
 
188
WNCK_WINDOW_STATE_MAXIMIZED_VERTICALLY)
 
189
 
 
190
#define CMDLINE_OPACITY              (1 << 0)
 
191
#define CMDLINE_OPACITY_SHADE        (1 << 1)
 
192
#define CMDLINE_ACTIVE_OPACITY       (1 << 2)
 
193
#define CMDLINE_ACTIVE_OPACITY_SHADE (1 << 3)
 
194
#define CMDLINE_BLUR                 (1 << 4)
 
195
#define CMDLINE_THEME                (1 << 5)
 
196
 
 
197
#define MWM_HINTS_DECORATIONS (1L << 1)
 
198
 
 
199
#define MWM_DECOR_ALL      (1L << 0)
 
200
#define MWM_DECOR_BORDER   (1L << 1)
 
201
#define MWM_DECOR_HANDLE   (1L << 2)
 
202
#define MWM_DECOR_TITLE    (1L << 3)
 
203
#define MWM_DECOR_MENU     (1L << 4)
 
204
#define MWM_DECOR_MINIMIZE (1L << 5)
 
205
#define MWM_DECOR_MAXIMIZE (1L << 6)
 
206
 
 
207
#define PROP_MOTIF_WM_HINT_ELEMENTS 3
 
208
 
 
209
/* to save some memory, value is specific to current decorations */
 
210
#define TRANSLUCENT_CORNER_SIZE 3
 
211
 
 
212
typedef struct {
 
213
unsigned long flags;
 
214
unsigned long functions;
 
215
unsigned long decorations;
 
216
} MwmHints;
 
217
 
 
218
enum {
 
219
    CLICK_ACTION_NONE,
 
220
    CLICK_ACTION_SHADE,
 
221
    CLICK_ACTION_MAXIMIZE,
 
222
    CLICK_ACTION_MINIMIZE,
 
223
    CLICK_ACTION_RAISE,
 
224
    CLICK_ACTION_LOWER,
 
225
    CLICK_ACTION_MENU
 
226
};
 
227
 
 
228
enum {
 
229
    WHEEL_ACTION_NONE,
 
230
    WHEEL_ACTION_SHADE
 
231
};
 
232
 
 
233
#define DOUBLE_CLICK_ACTION_DEFAULT CLICK_ACTION_MAXIMIZE
 
234
#define MIDDLE_CLICK_ACTION_DEFAULT CLICK_ACTION_LOWER
 
235
#define RIGHT_CLICK_ACTION_DEFAULT  CLICK_ACTION_MENU
 
236
#define WHEEL_ACTION_DEFAULT        WHEEL_ACTION_NONE
 
237
 
 
238
int double_click_action;
 
239
int middle_click_action;
 
240
int right_click_action;
 
241
int wheel_action;
 
242
 
 
243
extern gboolean minimal;
 
244
extern double decoration_alpha;
 
245
 
 
246
#define SWITCHER_SPACE 40
 
247
 
 
248
extern decor_extents_t _shadow_extents;
 
249
extern decor_extents_t _win_extents;
 
250
extern decor_extents_t _max_win_extents;
 
251
extern decor_extents_t _default_win_extents;
 
252
extern decor_extents_t _switcher_extents;
 
253
 
 
254
extern int titlebar_height;
 
255
extern int max_titlebar_height;
 
256
 
 
257
extern decor_context_t window_active_context;
 
258
extern decor_context_t window_inactive_context;
 
259
extern decor_context_t window_context_no_shadow;
 
260
extern decor_context_t max_window_active_context;
 
261
extern decor_context_t max_window_inactive_context;
 
262
extern decor_context_t max_window_context_no_shadow;
 
263
extern decor_context_t switcher_context;
 
264
extern decor_context_t shadow_context;
 
265
 
 
266
extern gdouble shadow_radius;
 
267
extern gdouble shadow_opacity;
 
268
extern gushort shadow_color[3];
 
269
extern gint    shadow_offset_x;
 
270
extern gint    shadow_offset_y;
 
271
 
 
272
#ifdef USE_METACITY
 
273
extern double   meta_opacity;
 
274
extern gboolean meta_shade_opacity;
 
275
extern double   meta_active_opacity;
 
276
extern gboolean meta_active_shade_opacity;
 
277
 
 
278
extern gboolean         meta_button_layout_set;
 
279
extern MetaButtonLayout meta_button_layout;
 
280
#endif
 
281
 
 
282
extern guint cmdline_options;
 
283
 
 
284
extern decor_shadow_t *no_border_shadow;
 
285
extern decor_shadow_t *border_active_shadow;
 
286
extern decor_shadow_t *border_inactive_shadow;
 
287
extern decor_shadow_t *border_no_shadow;
 
288
extern decor_shadow_t *max_border_active_shadow;
 
289
extern decor_shadow_t *max_border_inactive_shadow;
 
290
extern decor_shadow_t *max_border_no_shadow;
 
291
extern decor_shadow_t *switcher_shadow;
 
292
 
 
293
extern GdkPixmap *decor_normal_pixmap;
 
294
extern GdkPixmap *decor_active_pixmap;
 
295
 
 
296
extern Atom frame_input_window_atom;
 
297
extern Atom frame_output_window_atom;
 
298
extern Atom win_decor_atom;
 
299
extern Atom win_blur_decor_atom;
 
300
extern Atom wm_move_resize_atom;
 
301
extern Atom restack_window_atom;
 
302
extern Atom select_window_atom;
 
303
extern Atom mwm_hints_atom;
 
304
extern Atom switcher_fg_atom;
 
305
 
 
306
extern Atom toolkit_action_atom;
 
307
extern Atom toolkit_action_window_menu_atom;
 
308
extern Atom toolkit_action_force_quit_dialog_atom;
 
309
 
 
310
extern Time dm_sn_timestamp;
 
311
 
 
312
#define C(name) { 0, XC_ ## name }
 
313
 
 
314
struct _cursor {
 
315
    Cursor       cursor;
 
316
    unsigned int shape;
 
317
};
 
318
 
 
319
extern struct _cursor cursor[3][3];
 
320
 
 
321
#define BUTTON_CLOSE   0
 
322
#define BUTTON_MAX     1
 
323
#define BUTTON_MIN     2
 
324
#define BUTTON_MENU    3
 
325
#define BUTTON_SHADE   4
 
326
#define BUTTON_ABOVE   5
 
327
#define BUTTON_STICK   6
 
328
#define BUTTON_UNSHADE 7
 
329
#define BUTTON_UNABOVE 8
 
330
#define BUTTON_UNSTICK 9
 
331
#define BUTTON_NUM     10
 
332
 
 
333
struct _pos {
 
334
    int x, y, w, h;
 
335
    int xw, yh, ww, hh, yth, hth;
 
336
};
 
337
 
 
338
extern struct _pos pos[3][3], bpos[];
 
339
 
 
340
typedef struct _decor_color {
 
341
    double r;
 
342
    double g;
 
343
    double b;
 
344
} decor_color_t;
 
345
 
 
346
 
 
347
#define IN_EVENT_WINDOW      (1 << 0)
 
348
#define PRESSED_EVENT_WINDOW (1 << 1)
 
349
 
 
350
typedef struct _decor_event {
 
351
    guint time;
 
352
    guint window;
 
353
    guint x;
 
354
    guint y;
 
355
    guint x_root;
 
356
    guint y_root;
 
357
    guint button;
 
358
} decor_event;
 
359
 
 
360
typedef enum _decor_event_type {
 
361
    GButtonPress = 1,
 
362
    GButtonRelease,
 
363
    GEnterNotify,
 
364
    GLeaveNotify,
 
365
    GMotionNotify
 
366
} decor_event_type;
 
367
 
 
368
typedef void (*event_callback) (WnckWindow       *win,
 
369
                                decor_event      *gtkwd_event,
 
370
                                decor_event_type gtkwd_type);
 
371
 
 
372
typedef struct {
 
373
    Window         window;
 
374
    Box            pos;
 
375
    event_callback callback;
 
376
} event_window;
 
377
 
 
378
typedef struct _decor {
 
379
    WnckWindow        *win;
 
380
    event_window      event_windows[3][3];
 
381
    event_window      button_windows[BUTTON_NUM];
 
382
    Box               *last_pos_entered;
 
383
    guint             button_states[BUTTON_NUM];
 
384
    GdkPixmap         *pixmap;
 
385
    GdkPixmap         *buffer_pixmap;
 
386
    GdkWindow         *frame_window;
 
387
    GtkWidget         *decor_window;
 
388
    GtkWidget         *decor_event_box;
 
389
    GtkWidget         *decor_image;
 
390
    cairo_t           *cr;
 
391
    decor_layout_t    border_layout;
 
392
    decor_context_t   *context;
 
393
    decor_shadow_t    *shadow;
 
394
    Picture           picture;
 
395
    gint              button_width;
 
396
    gint              width;
 
397
    gint              height;
 
398
    gint              client_width;
 
399
    gint              client_height;
 
400
    gboolean          decorated;
 
401
    gboolean          active;
 
402
    PangoLayout       *layout;
 
403
    gchar             *name;
 
404
    cairo_pattern_t   *icon;
 
405
    GdkPixmap         *icon_pixmap;
 
406
    GdkPixbuf         *icon_pixbuf;
 
407
    WnckWindowState   state;
 
408
    WnckWindowActions actions;
 
409
    XID               prop_xid;
 
410
    GtkWidget         *force_quit_dialog;
 
411
    GSList            *transient_windows;
 
412
    WnckWindow        *transient_parent;
 
413
    Bool              created;
 
414
    void              (*draw) (struct _decor *d);
 
415
} decor_t;
 
416
 
 
417
void     (*theme_draw_window_decoration)    (decor_t *d);
 
418
gboolean (*theme_calc_decoration_size)      (decor_t *d,
 
419
                                             int     client_width,
 
420
                                             int     client_height,
 
421
                                             int     text_width,
 
422
                                             int     *width,
 
423
                                             int     *height);
 
424
void     (*theme_update_border_extents)     (gint    text_height);
 
425
void     (*theme_get_event_window_position) (decor_t *d,
 
426
                                             gint    i,
 
427
                                             gint    j,
 
428
                                             gint    width,
 
429
                                             gint    height,
 
430
                                             gint    *x,
 
431
                                             gint    *y,
 
432
                                             gint    *w,
 
433
                                             gint    *h);
 
434
gboolean (*theme_get_button_position)       (decor_t *d,
 
435
                                             gint    i,
 
436
                                             gint    width,
 
437
                                             gint    height,
 
438
                                             gint    *x,
 
439
                                             gint    *y,
 
440
                                             gint    *w,
 
441
                                             gint    *h);
 
442
 
 
443
decor_shadow_t * (*theme_update_shadow) (gint    shadow_type);
 
444
 
 
445
void (*theme_get_shadow) (decor_t *d,
 
446
                          gint    shadow_type);
 
447
 
 
448
void (*theme_get_border_extents) (decor_extents_t *extents,
 
449
                                  decor_extents_t *frame_extents,
 
450
                                  decor_extents_t *extents_max,
 
451
                                  decor_extents_t *frame_extents_max);
 
452
 
 
453
extern char *program_name;
 
454
 
 
455
extern GtkWidget     *style_window_rgba;
 
456
extern GtkWidget     *style_window_rgb;
 
457
extern GtkWidget     *switcher_label;
 
458
 
 
459
extern GHashTable    *frame_table;
 
460
extern GtkWidget     *action_menu;
 
461
extern gboolean      action_menu_mapped;
 
462
extern decor_color_t _title_color[2];
 
463
extern PangoContext  *pango_context;
 
464
extern gint          double_click_timeout;
 
465
 
 
466
extern GSList *draw_list;
 
467
extern guint  draw_idle_id;
 
468
 
 
469
extern PangoFontDescription *titlebar_font;
 
470
extern gboolean             use_system_font;
 
471
extern gint                 text_height;
 
472
 
 
473
#define BLUR_TYPE_NONE     0
 
474
#define BLUR_TYPE_TITLEBAR 1
 
475
#define BLUR_TYPE_ALL      2
 
476
 
 
477
extern gint blur_type;
 
478
 
 
479
extern GdkPixmap *switcher_pixmap;
 
480
extern GdkPixmap *switcher_buffer_pixmap;
 
481
extern gint      switcher_width;
 
482
extern gint      switcher_height;
 
483
extern Window    switcher_selected_window;
 
484
extern decor_t   *switcher_window;
 
485
 
 
486
extern XRenderPictFormat *xformat_rgba;
 
487
extern XRenderPictFormat *xformat_rgb;
 
488
 
 
489
extern Atom compiz_shadow_info_atom;
 
490
extern Atom compiz_shadow_color_atom;
 
491
 
 
492
/* gtk-window-decorator.c */
 
493
 
 
494
double
 
495
dist (double x1, double y1,
 
496
      double x2, double y2);
 
497
 
 
498
/* decorator.c */
 
499
 
 
500
gboolean
 
501
update_window_decoration_size (WnckWindow *win);
 
502
 
 
503
void
 
504
update_window_decoration_name (WnckWindow *win);
 
505
 
 
506
gint
 
507
max_window_name_width (WnckWindow *win);
 
508
 
 
509
void
 
510
update_default_decorations (GdkScreen *screen);
 
511
 
 
512
void
 
513
update_window_decoration_state (WnckWindow *win);
 
514
 
 
515
void
 
516
update_window_decoration_actions (WnckWindow *win);
 
517
 
 
518
void
 
519
update_window_decoration_icon (WnckWindow *win);
 
520
 
 
521
void
 
522
update_event_windows (WnckWindow *win);
 
523
 
 
524
int
 
525
update_shadow (void);
 
526
 
 
527
void
 
528
shadow_property_changed (WnckScreen *screen);
 
529
 
 
530
void
 
531
update_titlebar_font (void);
 
532
 
 
533
void
 
534
update_window_decoration_name (WnckWindow *win);
 
535
 
 
536
void
 
537
update_window_decoration (WnckWindow *win);
 
538
 
 
539
void
 
540
queue_decor_draw (decor_t *d);
 
541
 
 
542
void
 
543
copy_to_front_buffer (decor_t *d);
 
544
 
 
545
void
 
546
draw_border_shape (Display         *xdisplay,
 
547
                   Pixmap          pixmap,
 
548
                   Picture         picture,
 
549
                   int             width,
 
550
                   int             height,
 
551
                   decor_context_t *c,
 
552
                   void            *closure);
 
553
 
 
554
 
 
555
/* wnck.c*/
 
556
 
 
557
void
 
558
decorations_changed (WnckScreen *screen);
 
559
 
 
560
void
 
561
connect_screen (WnckScreen *screen);
 
562
 
 
563
void
 
564
add_frame_window (WnckWindow *win,
 
565
                  Window     frame,
 
566
                  Bool       mode);
 
567
 
 
568
void
 
569
remove_frame_window (WnckWindow *win);
 
570
 
 
571
void
 
572
restack_window (WnckWindow *win,
 
573
                int        stack_mode);
 
574
 
 
575
void connect_window (WnckWindow *win);
 
576
 
 
577
/* blur.c */
 
578
 
 
579
void
 
580
decor_update_blur_property (decor_t *d,
 
581
                            int     width,
 
582
                            int     height,
 
583
                            Region  top_region,
 
584
                            int     top_offset,
 
585
                            Region  bottom_region,
 
586
                            int     bottom_offset,
 
587
                            Region  left_region,
 
588
                            int     left_offset,
 
589
                            Region  right_region,
 
590
                            int     right_offset);
 
591
 
 
592
/* decorprops.c */
 
593
 
 
594
void
 
595
decor_update_window_property (decor_t *d);
 
596
 
 
597
void
 
598
decor_update_switcher_property (decor_t *d);
 
599
 
 
600
/* cairo.c */
 
601
 
 
602
#define CORNER_TOPLEFT     (1 << 0)
 
603
#define CORNER_TOPRIGHT    (1 << 1)
 
604
#define CORNER_BOTTOMRIGHT (1 << 2)
 
605
#define CORNER_BOTTOMLEFT  (1 << 3)
 
606
 
 
607
#define SHADE_LEFT   (1 << 0)
 
608
#define SHADE_RIGHT  (1 << 1)
 
609
#define SHADE_TOP    (1 << 2)
 
610
#define SHADE_BOTTOM (1 << 3)
 
611
 
 
612
void
 
613
draw_shadow_background (decor_t         *d,
 
614
                        cairo_t         *cr,
 
615
                        decor_shadow_t  *s,
 
616
                        decor_context_t *c);
 
617
 
 
618
void
 
619
draw_window_decoration (decor_t *d);
 
620
 
 
621
void
 
622
fill_rounded_rectangle (cairo_t       *cr,
 
623
                        double        x,
 
624
                        double        y,
 
625
                        double        w,
 
626
                        double        h,
 
627
                        double        radius,
 
628
                        int           corner,
 
629
                        decor_color_t *c0,
 
630
                        double        alpha0,
 
631
                        decor_color_t *c1,
 
632
                        double        alpha1,
 
633
                        int           gravity);
 
634
 
 
635
void
 
636
rounded_rectangle (cairo_t *cr,
 
637
                   double  x,
 
638
                   double  y,
 
639
                   double  w,
 
640
                   double  h,
 
641
                   double  radius,
 
642
                   int     corner);
 
643
 
 
644
gboolean
 
645
calc_decoration_size (decor_t *d,
 
646
                      gint    w,
 
647
                      gint    h,
 
648
                      gint    name_width,
 
649
                      gint    *width,
 
650
                      gint    *height);
 
651
 
 
652
void
 
653
update_border_extents (gint text_height);
 
654
 
 
655
void
 
656
get_border_extents (decor_extents_t *extents,
 
657
                    decor_extents_t *frame_extents,
 
658
                    decor_extents_t *extents_max,
 
659
                    decor_extents_t *frame_extents_max);
 
660
 
 
661
gboolean
 
662
get_button_position (decor_t *d,
 
663
                     gint    i,
 
664
                     gint    width,
 
665
                     gint    height,
 
666
                     gint    *x,
 
667
                     gint    *y,
 
668
                     gint    *w,
 
669
                     gint    *h);
 
670
 
 
671
void
 
672
get_event_window_position (decor_t *d,
 
673
                           gint    i,
 
674
                           gint    j,
 
675
                           gint    width,
 
676
                           gint    height,
 
677
                           gint    *x,
 
678
                           gint    *y,
 
679
                           gint    *w,
 
680
                           gint    *h);
 
681
 
 
682
decor_shadow_t *
 
683
cairo_update_shadow (gint shadow_type);
 
684
 
 
685
void
 
686
get_shadow (decor_t *, gint shadow_type);
 
687
 
 
688
/* gdk.c */
 
689
 
 
690
void
 
691
gdk_cairo_set_source_color_alpha (cairo_t  *cr,
 
692
                                  GdkColor *color,
 
693
                                  double   alpha);
 
694
 
 
695
inline GdkWindow *
 
696
create_gdk_window (Window xframe);
 
697
 
 
698
GdkColormap *
 
699
get_colormap_for_drawable (GdkDrawable *d);
 
700
 
 
701
XRenderPictFormat *
 
702
get_format_for_drawable (decor_t *d, GdkDrawable *drawable);
 
703
 
 
704
GdkPixmap *
 
705
create_pixmap (int w,
 
706
               int h,
 
707
               int depth);
 
708
 
 
709
GdkPixmap *
 
710
pixmap_new_from_pixbuf (GdkPixbuf *pixbuf, int depth);
 
711
 
 
712
/* metacity.c */
 
713
#ifdef USE_METACITY
 
714
void
 
715
meta_draw_window_decoration (decor_t *d);
 
716
 
 
717
void
 
718
meta_get_decoration_geometry (decor_t           *d,
 
719
                              MetaTheme         *theme,
 
720
                              MetaFrameFlags    *flags,
 
721
                              MetaFrameGeometry *fgeom,
 
722
                              MetaButtonLayout  *button_layout,
 
723
                              GdkRectangle      *clip);
 
724
 
 
725
void
 
726
meta_calc_button_size (decor_t *d);
 
727
 
 
728
gboolean
 
729
meta_calc_decoration_size (decor_t *d,
 
730
                           gint    w,
 
731
                           gint    h,
 
732
                           gint    name_width,
 
733
                           gint    *width,
 
734
                           gint    *height);
 
735
 
 
736
gboolean
 
737
meta_get_button_position (decor_t *d,
 
738
                          gint    i,
 
739
                          gint    width,
 
740
                          gint    height,
 
741
                          gint    *x,
 
742
                          gint    *y,
 
743
                          gint    *w,
 
744
                          gint    *h);
 
745
 
 
746
gboolean
 
747
meta_button_present (MetaButtonLayout   *button_layout,
 
748
                     MetaButtonFunction function);
 
749
 
 
750
void
 
751
meta_get_event_window_position (decor_t *d,
 
752
                                gint    i,
 
753
                                gint    j,
 
754
                                gint    width,
 
755
                                gint    height,
 
756
                                gint    *x,
 
757
                                gint    *y,
 
758
                                gint    *w,
 
759
                                gint    *h);
 
760
void
 
761
meta_update_border_extents (gint text_height);
 
762
 
 
763
void
 
764
meta_get_border_extents (decor_extents_t *extents,
 
765
                         decor_extents_t *frame_extents,
 
766
                         decor_extents_t *extents_max,
 
767
                         decor_extents_t *frame_extents_max);
 
768
 
 
769
void
 
770
meta_update_button_layout (const char *value);
 
771
 
 
772
decor_shadow_t *
 
773
meta_update_shadow (gint shadow_type);
 
774
 
 
775
void
 
776
meta_get_shadow (decor_t *, gint shadow_type);
 
777
 
 
778
#endif
 
779
/* switcher.c */
 
780
 
 
781
#define SWITCHER_ALPHA 0xa0a0
 
782
 
 
783
void
 
784
draw_switcher_decoration (decor_t *d);
 
785
 
 
786
gboolean
 
787
update_switcher_window (Window     popup,
 
788
                        Window     selected);
 
789
 
 
790
decor_t *
 
791
switcher_window_opened (Window popup, Window selected);
 
792
 
 
793
void
 
794
switcher_window_closed ();
 
795
 
 
796
/* events.c */
 
797
 
 
798
void
 
799
move_resize_window (WnckWindow *win,
 
800
                    int        direction,
 
801
                    decor_event *gtkwd_event);
 
802
 
 
803
void
 
804
common_button_event (WnckWindow *win,
 
805
                     decor_event *gtkwd_event,
 
806
                     decor_event_type gtkwd_type,
 
807
                     int        button,
 
808
                     int        max);
 
809
 
 
810
void
 
811
close_button_event (WnckWindow *win,
 
812
                    decor_event *gtkwd_event,
 
813
                    decor_event_type gtkwd_type);
 
814
 
 
815
void
 
816
max_button_event (WnckWindow *win,
 
817
                  decor_event *gtkwd_event,
 
818
                  decor_event_type gtkwd_type);
 
819
 
 
820
void
 
821
min_button_event (WnckWindow *win,
 
822
                  decor_event *gtkwd_event,
 
823
                  decor_event_type gtkwd_type);
 
824
 
 
825
void
 
826
menu_button_event (WnckWindow *win,
 
827
                   decor_event *gtkwd_event,
 
828
                   decor_event_type gtkwd_type);
 
829
 
 
830
void
 
831
shade_button_event (WnckWindow *win,
 
832
                    decor_event *gtkwd_event,
 
833
                    decor_event_type gtkwd_type);
 
834
 
 
835
void
 
836
above_button_event (WnckWindow *win,
 
837
                    decor_event *gtkwd_event,
 
838
                    decor_event_type gtkwd_type);
 
839
 
 
840
void
 
841
stick_button_event (WnckWindow *win,
 
842
                    decor_event *gtkwd_event,
 
843
                    decor_event_type gtkwd_type);
 
844
void
 
845
unshade_button_event (WnckWindow *win,
 
846
                      decor_event *gtkwd_event,
 
847
                      decor_event_type gtkwd_type);
 
848
 
 
849
void
 
850
unabove_button_event (WnckWindow *win,
 
851
                      decor_event *gtkwd_event,
 
852
                      decor_event_type gtkwd_type);
 
853
 
 
854
void
 
855
unstick_button_event (WnckWindow *win,
 
856
                      decor_event *gtkwd_event,
 
857
                      decor_event_type gtkwd_type);
 
858
 
 
859
void
 
860
handle_title_button_event (WnckWindow   *win,
 
861
                           int          action,
 
862
                           decor_event *gtkwd_event);
 
863
 
 
864
void
 
865
handle_mouse_wheel_title_event (WnckWindow   *win,
 
866
                                unsigned int button);
 
867
 
 
868
void
 
869
title_event (WnckWindow       *win,
 
870
             decor_event      *gtkwd_event,
 
871
             decor_event_type gtkwd_type);
 
872
 
 
873
void
 
874
frame_common_event (WnckWindow       *win,
 
875
                    int              direction,
 
876
                    decor_event      *gtkwd_event,
 
877
                    decor_event_type gtkwd_type);
 
878
 
 
879
void
 
880
top_left_event (WnckWindow       *win,
 
881
                decor_event      *gtkwd_event,
 
882
                decor_event_type gtkwd_type);
 
883
 
 
884
void
 
885
top_event (WnckWindow       *win,
 
886
           decor_event      *gtkwd_event,
 
887
           decor_event_type gtkwd_type);
 
888
 
 
889
void
 
890
top_right_event (WnckWindow       *win,
 
891
                 decor_event      *gtkwd_event,
 
892
                 decor_event_type gtkwd_type);
 
893
 
 
894
void
 
895
left_event (WnckWindow       *win,
 
896
            decor_event      *gtkwd_event,
 
897
            decor_event_type gtkwd_type);
 
898
void
 
899
right_event (WnckWindow       *win,
 
900
             decor_event      *gtkwd_event,
 
901
             decor_event_type gtkwd_type);
 
902
 
 
903
void
 
904
bottom_left_event (WnckWindow *win,
 
905
                   decor_event *gtkwd_event,
 
906
                   decor_event_type gtkwd_type);
 
907
 
 
908
void
 
909
bottom_event (WnckWindow *win,
 
910
              decor_event *gtkwd_event,
 
911
              decor_event_type gtkwd_type);
 
912
void
 
913
bottom_right_event (WnckWindow *win,
 
914
                    decor_event *gtkwd_event,
 
915
                    decor_event_type gtkwd_type);
 
916
 
 
917
void
 
918
frame_window_realized (GtkWidget *widget,
 
919
                       gpointer  data);
 
920
 
 
921
event_callback
 
922
find_event_callback_for_point (decor_t *d,
 
923
                               int     x,
 
924
                               int     y,
 
925
                               Bool    *enter,
 
926
                               Bool    *leave,
 
927
                               BoxPtr  *entered_box);
 
928
 
 
929
event_callback
 
930
find_leave_event_callback (decor_t *d);
 
931
 
 
932
void
 
933
frame_handle_button_press (GtkWidget      *widget,
 
934
                           GdkEventButton *event,
 
935
                           gpointer       user_data);
 
936
 
 
937
void
 
938
frame_handle_button_release (GtkWidget      *widget,
 
939
                             GdkEventButton *event,
 
940
                             gpointer       user_data);
 
941
 
 
942
void
 
943
frame_handle_motion (GtkWidget      *widget,
 
944
                     GdkEventMotion *event,
 
945
                     gpointer       user_data);
 
946
 
 
947
GdkFilterReturn
 
948
selection_event_filter_func (GdkXEvent *gdkxevent,
 
949
                             GdkEvent  *event,
 
950
                             gpointer  data);
 
951
 
 
952
GdkFilterReturn
 
953
event_filter_func (GdkXEvent *gdkxevent,
 
954
                   GdkEvent  *event,
 
955
                   gpointer  data);
 
956
 
 
957
/* forcequit.c */
 
958
 
 
959
void
 
960
show_force_quit_dialog (WnckWindow *win,
 
961
                        Time        timestamp);
 
962
 
 
963
void
 
964
hide_force_quit_dialog (WnckWindow *win);
 
965
 
 
966
/* actionmenu.c */
 
967
 
 
968
void
 
969
action_menu_map (WnckWindow *win,
 
970
                 long        button,
 
971
                 Time        time);
 
972
 
 
973
/* util.c */
 
974
 
 
975
double
 
976
square (double x);
 
977
 
 
978
double
 
979
dist (double x1, double y1,
 
980
      double x2, double y2);
 
981
 
 
982
void
 
983
shade (const decor_color_t *a,
 
984
       decor_color_t       *b,
 
985
       float               k);
 
986
 
 
987
gboolean
 
988
get_window_prop (Window xwindow,
 
989
                 Atom   atom,
 
990
                 Window *val);
 
991
 
 
992
unsigned int
 
993
get_mwm_prop (Window xwindow);
 
994
 
 
995
 
 
996
/* style.c */
 
997
 
 
998
void
 
999
update_style (GtkWidget *widget);
 
1000
 
 
1001
void
 
1002
style_changed (GtkWidget *widget);
 
1003
 
 
1004
/* settings.c */
 
1005
 
 
1006
gboolean
 
1007
init_settings (WnckScreen *screen);
 
1008
 
 
1009
#endif