~dbarth/compiz/reworked-fix-744104

« back to all changes in this revision

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

  • Committer: David Barth
  • Date: 2011-04-05 20:20:54 UTC
  • Revision ID: david.barth@canonical.com-20110405202054-fnh0y5t2s228mf4k
re-integrate the unity-window-decorator, for real this time

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