summaryrefslogtreecommitdiff
path: root/src/compositor/compositor-private.h
blob: 558344403014d4930b064085506f9120e762fa8a (plain)
1
2
3
4
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */

#ifndef META_COMPOSITOR_PRIVATE_H
#define META_COMPOSITOR_PRIVATE_H

#include <X11/extensions/Xfixes.h>

#include "clutter/clutter-mutter.h"
#include "clutter/clutter.h"
#include "compositor/meta-compositor-view.h"
#include "compositor/meta-plugin-manager.h"
#include "compositor/meta-window-actor-private.h"
#include "compositor/meta-window-drag.h"
#include "meta/compositor.h"
#include "meta/display.h"

/* Wait 2ms after vblank before starting to draw next frame */
#define META_SYNC_DELAY 2

typedef struct _MetaLaters MetaLaters;

struct _MetaCompositorClass
{
  GObjectClass parent_class;

  gboolean (* manage) (MetaCompositor  *compositor,
                       GError         **error);
  void (* unmanage) (MetaCompositor *compositor);
  void (* before_paint) (MetaCompositor     *compositor,
                         MetaCompositorView *compositor_view);
  void (* after_paint) (MetaCompositor     *compositor,
                        MetaCompositorView *compositor_view);
  void (* remove_window) (MetaCompositor *compositor,
                          MetaWindow     *window);
  int64_t (* monotonic_to_high_res_xserver_time) (MetaCompositor *compositor,
                                                  int64_t         time_us);
  void (* grab_begin) (MetaCompositor *compositor);
  void (* grab_end) (MetaCompositor *compositor);

  MetaCompositorView * (* create_view) (MetaCompositor   *compositor,
                                        ClutterStageView *stage_view);
};

gboolean meta_compositor_do_manage (MetaCompositor  *compositor,
                                    GError         **error);

void meta_compositor_remove_window_actor (MetaCompositor  *compositor,
                                          MetaWindowActor *window_actor);

void meta_compositor_window_actor_stage_views_changed (MetaCompositor *compositor);

void meta_switch_workspace_completed (MetaCompositor *compositor);

MetaPluginManager * meta_compositor_get_plugin_manager (MetaCompositor *compositor);

int64_t meta_compositor_monotonic_to_high_res_xserver_time (MetaCompositor *compositor,
                                                            int64_t         monotonic_time_us);

void meta_compositor_flash_window (MetaCompositor *compositor,
                                   MetaWindow     *window);

MetaCloseDialog * meta_compositor_create_close_dialog (MetaCompositor *compositor,
                                                       MetaWindow     *window);

MetaInhibitShortcutsDialog * meta_compositor_create_inhibit_shortcuts_dialog (MetaCompositor *compositor,
                                                                              MetaWindow     *window);

void meta_compositor_locate_pointer (MetaCompositor *compositor);

void meta_compositor_redirect_x11_windows (MetaCompositor *compositor);

gboolean meta_compositor_is_unredirect_inhibited (MetaCompositor *compositor);

MetaDisplay * meta_compositor_get_display (MetaCompositor *compositor);

MetaBackend * meta_compositor_get_backend (MetaCompositor *compositor);

MetaWindowActor * meta_compositor_get_top_window_actor (MetaCompositor *compositor);

ClutterStage * meta_compositor_get_stage (MetaCompositor *compositor);

gboolean meta_compositor_is_switching_workspace (MetaCompositor *compositor);

gboolean meta_compositor_drag_window (MetaCompositor       *compositor,
                                      MetaWindow           *window,
                                      MetaGrabOp            grab_op,
                                      ClutterInputDevice   *device,
                                      ClutterEventSequence *sequence,
                                      uint32_t              timestamp);

MetaWindowDrag * meta_compositor_get_current_window_drag (MetaCompositor *compositor);

void meta_compositor_grab_begin (MetaCompositor *compositor);

void meta_compositor_grab_end (MetaCompositor *compositor);

void meta_compositor_destroy (MetaCompositor *compositor);

void meta_compositor_manage   (MetaCompositor *compositor);

void meta_compositor_unmanage (MetaCompositor *compositor);

void meta_compositor_window_shape_changed (MetaCompositor *compositor,
                                           MetaWindow     *window);

void meta_compositor_window_opacity_changed (MetaCompositor *compositor,
                                             MetaWindow     *window);

gboolean meta_compositor_filter_keybinding (MetaCompositor *compositor,
                                            MetaKeyBinding *binding);

void meta_compositor_add_window (MetaCompositor      *compositor,
                                 MetaWindow          *window);

void meta_compositor_remove_window (MetaCompositor      *compositor,
                                    MetaWindow          *window);

void meta_compositor_show_window (MetaCompositor      *compositor,
                                  MetaWindow          *window,
                                  MetaCompEffect       effect);

void meta_compositor_hide_window (MetaCompositor      *compositor,
                                  MetaWindow          *window,
                                  MetaCompEffect       effect);

void meta_compositor_switch_workspace (MetaCompositor      *compositor,
                                       MetaWorkspace       *from,
                                       MetaWorkspace       *to,
                                       MetaMotionDirection  direction);

void meta_compositor_size_change_window (MetaCompositor      *compositor,
                                         MetaWindow          *window,
                                         MetaSizeChange       which_change,
                                         MetaRectangle       *old_frame_rect,
                                         MetaRectangle       *old_buffer_rect);

void meta_compositor_sync_window_geometry (MetaCompositor *compositor,
                                           MetaWindow     *window,
                                           gboolean        did_placement);

void meta_compositor_sync_updates_frozen (MetaCompositor *compositor,
                                          MetaWindow     *window);

void meta_compositor_queue_frame_drawn (MetaCompositor *compositor,
                                        MetaWindow     *window,
                                        gboolean        no_delay_frame);

void meta_compositor_sync_stack (MetaCompositor *compositor,
                                 GList          *stack);

void meta_compositor_flash_display (MetaCompositor *compositor,
                                    MetaDisplay    *display);

void meta_compositor_show_tile_preview (MetaCompositor *compositor,
                                        MetaWindow     *window,
                                        MetaRectangle  *tile_rect,
                                        int             tile_monitor_number);

void meta_compositor_hide_tile_preview (MetaCompositor *compositor);

void meta_compositor_show_window_menu (MetaCompositor     *compositor,
                                       MetaWindow         *window,
				       MetaWindowMenuType  menu,
                                       int                 x,
                                       int                 y);

void meta_compositor_show_window_menu_for_rect (MetaCompositor     *compositor,
                                                MetaWindow         *window,
				                MetaWindowMenuType  menu,
                                                MetaRectangle      *rect);

/*
 * This function takes a 64 bit time stamp from the monotonic clock, and clamps
 * it to the scope of the X server clock, without losing the granularity.
 */
static inline int64_t
meta_translate_to_high_res_xserver_time (int64_t time_us)
{
  int64_t us;
  int64_t ms;

  us = time_us % 1000;
  ms = time_us / 1000;

  return ms2us (ms & 0xffffffff) + us;
}

#endif /* META_COMPOSITOR_PRIVATE_H */