1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2 
3 /*
4  * Copyright (C) 2008 Iain Holmes
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License as
8  * published by the Free Software Foundation; either version 2 of the
9  * License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef META_WINDOW_H
21 #define META_WINDOW_H
22 
23 #include <glib-object.h>
24 #include <cairo.h>
25 #include <X11/Xlib.h>
26 
27 #include <meta/boxes.h>
28 #include <meta/types.h>
29 
30 /**
31  * MetaWindowType:
32  * @META_WINDOW_NORMAL: Normal
33  * @META_WINDOW_DESKTOP: Desktop
34  * @META_WINDOW_DOCK: Dock
35  * @META_WINDOW_DIALOG: Dialog
36  * @META_WINDOW_MODAL_DIALOG: Modal dialog
37  * @META_WINDOW_TOOLBAR: Toolbar
38  * @META_WINDOW_MENU: Menu
39  * @META_WINDOW_UTILITY: Utility
40  * @META_WINDOW_SPLASHSCREEN: Splashcreen
41  * @META_WINDOW_DROPDOWN_MENU: Dropdown menu
42  * @META_WINDOW_POPUP_MENU: Popup menu
43  * @META_WINDOW_TOOLTIP: Tooltip
44  * @META_WINDOW_NOTIFICATION: Notification
45  * @META_WINDOW_COMBO: Combobox
46  * @META_WINDOW_DND: Drag and drop
47  * @META_WINDOW_OVERRIDE_OTHER: Other override-redirect window type
48  */
49 typedef enum
50 {
51   META_WINDOW_NORMAL,
52   META_WINDOW_DESKTOP,
53   META_WINDOW_DOCK,
54   META_WINDOW_DIALOG,
55   META_WINDOW_MODAL_DIALOG,
56   META_WINDOW_TOOLBAR,
57   META_WINDOW_MENU,
58   META_WINDOW_UTILITY,
59   META_WINDOW_SPLASHSCREEN,
60 
61   /* override redirect window types: */
62   META_WINDOW_DROPDOWN_MENU,
63   META_WINDOW_POPUP_MENU,
64   META_WINDOW_TOOLTIP,
65   META_WINDOW_NOTIFICATION,
66   META_WINDOW_COMBO,
67   META_WINDOW_DND,
68   META_WINDOW_OVERRIDE_OTHER
69 } MetaWindowType;
70 
71 /**
72  * MetaMaximizeFlags:
73  * @META_MAXIMIZE_HORIZONTAL: Horizontal
74  * @META_MAXIMIZE_VERTICAL: Vertical
75  * @META_MAXIMIZE_BOTH: Both
76  */
77 typedef enum
78 {
79   META_MAXIMIZE_HORIZONTAL = 1 << 0,
80   META_MAXIMIZE_VERTICAL   = 1 << 1,
81   META_MAXIMIZE_BOTH       = (1 << 0 | 1 << 1),
82 } MetaMaximizeFlags;
83 
84 /**
85  * MetaWindowClientType:
86  * @META_WINDOW_CLIENT_TYPE_WAYLAND: A Wayland based window
87  * @META_WINDOW_CLIENT_TYPE_X11: An X11 based window
88  */
89 typedef enum
90 {
91   META_WINDOW_CLIENT_TYPE_WAYLAND,
92   META_WINDOW_CLIENT_TYPE_X11
93 } MetaWindowClientType;
94 
95 #define META_TYPE_WINDOW            (meta_window_get_type ())
96 #define META_WINDOW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_WINDOW, MetaWindow))
97 #define META_WINDOW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  META_TYPE_WINDOW, MetaWindowClass))
98 #define META_IS_WINDOW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_WINDOW))
99 #define META_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  META_TYPE_WINDOW))
100 #define META_WINDOW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  META_TYPE_WINDOW, MetaWindowClass))
101 
102 G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaWindow, g_object_unref)
103 
104 typedef struct _MetaWindowClass   MetaWindowClass;
105 
106 META_EXPORT
107 GType meta_window_get_type (void);
108 
109 META_EXPORT
110 MetaFrame *meta_window_get_frame (MetaWindow *window);
111 
112 META_EXPORT
113 gboolean meta_window_has_focus (MetaWindow *window);
114 
115 META_EXPORT
116 gboolean meta_window_appears_focused (MetaWindow *window);
117 
118 META_EXPORT
119 gboolean meta_window_is_shaded (MetaWindow *window);
120 
121 META_EXPORT
122 gboolean meta_window_is_override_redirect (MetaWindow *window);
123 
124 META_EXPORT
125 gboolean meta_window_is_skip_taskbar (MetaWindow *window);
126 
127 META_EXPORT
128 void meta_window_get_buffer_rect (const MetaWindow *window, MetaRectangle *rect);
129 
130 META_EXPORT
131 void meta_window_get_frame_rect (const MetaWindow *window, MetaRectangle *rect);
132 
133 META_EXPORT
134 void meta_window_client_rect_to_frame_rect (MetaWindow    *window,
135                                             MetaRectangle *client_rect,
136                                             MetaRectangle *frame_rect);
137 
138 META_EXPORT
139 void meta_window_frame_rect_to_client_rect (MetaWindow    *window,
140                                             MetaRectangle *frame_rect,
141                                             MetaRectangle *client_rect);
142 
143 META_EXPORT
144 MetaDisplay *meta_window_get_display (MetaWindow *window);
145 
146 META_EXPORT
147 Window meta_window_get_xwindow (MetaWindow *window);
148 
149 META_EXPORT
150 MetaWindowType meta_window_get_window_type (MetaWindow *window);
151 
152 META_EXPORT
153 MetaWorkspace *meta_window_get_workspace (MetaWindow *window);
154 
155 META_EXPORT
156 int      meta_window_get_monitor (MetaWindow *window);
157 
158 META_EXPORT
159 gboolean meta_window_is_on_all_workspaces (MetaWindow *window);
160 
161 META_EXPORT
162 gboolean meta_window_located_on_workspace (MetaWindow    *window,
163                                            MetaWorkspace *workspace);
164 
165 META_EXPORT
166 gboolean meta_window_is_hidden (MetaWindow *window);
167 
168 META_EXPORT
169 void     meta_window_activate  (MetaWindow *window,guint32 current_time);
170 
171 META_EXPORT
172 void     meta_window_activate_with_workspace (MetaWindow    *window,
173                                               guint32        current_time,
174                                               MetaWorkspace *workspace);
175 
176 META_EXPORT
177 const char * meta_window_get_description (MetaWindow *window);
178 
179 META_EXPORT
180 const char * meta_window_get_wm_class (MetaWindow *window);
181 
182 META_EXPORT
183 const char * meta_window_get_wm_class_instance (MetaWindow *window);
184 
185 META_EXPORT
186 gboolean    meta_window_showing_on_its_workspace (MetaWindow *window);
187 
188 META_EXPORT
189 const char * meta_window_get_sandboxed_app_id (MetaWindow *window);
190 
191 META_EXPORT
192 const char * meta_window_get_gtk_theme_variant (MetaWindow *window);
193 
194 META_EXPORT
195 const char * meta_window_get_gtk_application_id (MetaWindow *window);
196 
197 META_EXPORT
198 const char * meta_window_get_gtk_unique_bus_name (MetaWindow *window);
199 
200 META_EXPORT
201 const char * meta_window_get_gtk_application_object_path (MetaWindow *window);
202 
203 META_EXPORT
204 const char * meta_window_get_gtk_window_object_path (MetaWindow *window);
205 
206 META_EXPORT
207 const char * meta_window_get_gtk_app_menu_object_path (MetaWindow *window);
208 
209 META_EXPORT
210 const char * meta_window_get_gtk_menubar_object_path (MetaWindow *window);
211 
212 META_EXPORT
213 void meta_window_move_frame(MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw);
214 
215 META_EXPORT
216 void meta_window_move_resize_frame (MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw, int w, int h);
217 
218 META_EXPORT
219 void meta_window_move_to_monitor (MetaWindow *window, int monitor);
220 
221 META_EXPORT
222 void meta_window_set_demands_attention (MetaWindow *window);
223 
224 META_EXPORT
225 void meta_window_unset_demands_attention (MetaWindow *window);
226 
227 META_EXPORT
228 const char* meta_window_get_startup_id (MetaWindow *window);
229 
230 META_EXPORT
231 void meta_window_change_workspace_by_index (MetaWindow *window,
232                                             gint        space_index,
233                                             gboolean    append);
234 
235 META_EXPORT
236 void meta_window_change_workspace          (MetaWindow  *window,
237                                             MetaWorkspace *workspace);
238 
239 META_EXPORT
240 GObject *meta_window_get_compositor_private (MetaWindow *window);
241 
242 META_EXPORT
243 void meta_window_set_compositor_private (MetaWindow *window, GObject *priv);
244 
245 META_EXPORT
246 const char *meta_window_get_role (MetaWindow *window);
247 
248 META_EXPORT
249 MetaStackLayer meta_window_get_layer (MetaWindow *window);
250 
251 META_EXPORT
252 MetaWindow* meta_window_find_root_ancestor    (MetaWindow *window);
253 
254 META_EXPORT
255 gboolean meta_window_is_ancestor_of_transient (MetaWindow            *window,
256                                                MetaWindow            *transient);
257 
258 typedef gboolean (*MetaWindowForeachFunc) (MetaWindow *window,
259                                            void       *user_data);
260 
261 META_EXPORT
262 void     meta_window_foreach_transient        (MetaWindow            *window,
263                                                MetaWindowForeachFunc  func,
264                                                void                  *user_data);
265 
266 META_EXPORT
267 void     meta_window_foreach_ancestor         (MetaWindow            *window,
268                                                MetaWindowForeachFunc  func,
269                                                void                  *user_data);
270 
271 META_EXPORT
272 MetaMaximizeFlags meta_window_get_maximized (MetaWindow *window);
273 
274 META_EXPORT
275 gboolean          meta_window_is_fullscreen (MetaWindow *window);
276 
277 META_EXPORT
278 gboolean          meta_window_is_screen_sized (MetaWindow *window);
279 
280 META_EXPORT
281 gboolean          meta_window_is_monitor_sized (MetaWindow *window);
282 
283 META_EXPORT
284 gboolean          meta_window_is_on_primary_monitor (MetaWindow *window);
285 
286 META_EXPORT
287 gboolean meta_window_get_icon_geometry (MetaWindow    *window,
288                                         MetaRectangle *rect);
289 
290 META_EXPORT
291 void meta_window_set_icon_geometry (MetaWindow    *window,
292                                     MetaRectangle *rect);
293 
294 META_EXPORT
295 void meta_window_maximize   (MetaWindow        *window,
296                              MetaMaximizeFlags  directions);
297 
298 META_EXPORT
299 void meta_window_unmaximize (MetaWindow        *window,
300                              MetaMaximizeFlags  directions);
301 
302 META_EXPORT
303 void        meta_window_minimize           (MetaWindow  *window);
304 
305 META_EXPORT
306 void        meta_window_unminimize         (MetaWindow  *window);
307 
308 META_EXPORT
309 void        meta_window_raise              (MetaWindow  *window);
310 
311 META_EXPORT
312 void        meta_window_lower              (MetaWindow  *window);
313 
314 META_EXPORT
315 void        meta_window_lower_with_transients (MetaWindow *window,
316                                                uint32_t    timestamp);
317 
318 META_EXPORT
319 const char *meta_window_get_title (MetaWindow *window);
320 
321 META_EXPORT
322 MetaWindow *meta_window_get_transient_for (MetaWindow *window);
323 
324 META_EXPORT
325 void        meta_window_delete             (MetaWindow  *window,
326                                             guint32      timestamp);
327 
328 META_EXPORT
329 guint       meta_window_get_stable_sequence (MetaWindow *window);
330 
331 META_EXPORT
332 guint32     meta_window_get_user_time (MetaWindow *window);
333 
334 META_EXPORT
335 pid_t       meta_window_get_pid (MetaWindow *window);
336 
337 META_EXPORT
338 const char *meta_window_get_client_machine (MetaWindow *window);
339 
340 META_EXPORT
341 gboolean    meta_window_is_remote (MetaWindow *window);
342 
343 META_EXPORT
344 gboolean    meta_window_is_attached_dialog (MetaWindow *window);
345 
346 META_EXPORT
347 const char *meta_window_get_mutter_hints (MetaWindow *window);
348 
349 META_EXPORT
350 MetaFrameType meta_window_get_frame_type (MetaWindow *window);
351 
352 META_EXPORT
353 cairo_region_t *meta_window_get_frame_bounds (MetaWindow *window);
354 
355 META_EXPORT
356 MetaWindow *meta_window_get_tile_match (MetaWindow *window);
357 
358 META_EXPORT
359 void        meta_window_make_fullscreen    (MetaWindow  *window);
360 
361 META_EXPORT
362 void        meta_window_unmake_fullscreen  (MetaWindow  *window);
363 
364 META_EXPORT
365 void        meta_window_make_above         (MetaWindow  *window);
366 
367 META_EXPORT
368 void        meta_window_unmake_above       (MetaWindow  *window);
369 
370 META_EXPORT
371 void        meta_window_shade              (MetaWindow  *window,
372                                             guint32      timestamp);
373 
374 META_EXPORT
375 void        meta_window_unshade            (MetaWindow  *window,
376                                             guint32      timestamp);
377 
378 META_EXPORT
379 void        meta_window_stick              (MetaWindow  *window);
380 
381 META_EXPORT
382 void        meta_window_unstick            (MetaWindow  *window);
383 
384 META_EXPORT
385 void        meta_window_kill               (MetaWindow  *window);
386 
387 META_EXPORT
388 void        meta_window_focus              (MetaWindow  *window,
389                                             guint32      timestamp);
390 
391 META_EXPORT
392 void        meta_window_check_alive        (MetaWindow  *window,
393                                             guint32      timestamp);
394 
395 META_EXPORT
396 void meta_window_get_work_area_current_monitor (MetaWindow    *window,
397                                                 MetaRectangle *area);
398 
399 META_EXPORT
400 void meta_window_get_work_area_for_monitor     (MetaWindow    *window,
401                                                 int            which_monitor,
402                                                 MetaRectangle *area);
403 
404 META_EXPORT
405 void meta_window_get_work_area_all_monitors    (MetaWindow    *window,
406                                                 MetaRectangle *area);
407 
408 META_EXPORT
409 void meta_window_begin_grab_op (MetaWindow *window,
410                                 MetaGrabOp  op,
411                                 gboolean    frame_action,
412                                 guint32     timestamp);
413 
414 META_EXPORT
415 gboolean meta_window_can_maximize (MetaWindow *window);
416 
417 META_EXPORT
418 gboolean meta_window_can_minimize (MetaWindow *window);
419 
420 META_EXPORT
421 gboolean meta_window_can_shade (MetaWindow *window);
422 
423 META_EXPORT
424 gboolean meta_window_can_close (MetaWindow *window);
425 
426 META_EXPORT
427 gboolean meta_window_is_always_on_all_workspaces (MetaWindow *window);
428 
429 META_EXPORT
430 gboolean meta_window_is_above (MetaWindow *window);
431 
432 META_EXPORT
433 gboolean meta_window_allows_move (MetaWindow *window);
434 
435 META_EXPORT
436 gboolean meta_window_allows_resize (MetaWindow *window);
437 
438 META_EXPORT
439 gboolean meta_window_is_client_decorated (MetaWindow *window);
440 
441 META_EXPORT
442 gboolean meta_window_titlebar_is_onscreen    (MetaWindow *window);
443 
444 META_EXPORT
445 void     meta_window_shove_titlebar_onscreen (MetaWindow *window);
446 
447 META_EXPORT
448 uint64_t meta_window_get_id (MetaWindow *window);
449 
450 META_EXPORT
451 MetaWindowClientType meta_window_get_client_type (MetaWindow *window);
452 
453 #endif
454