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