1 /* 2 * This file is part of gtkD. 3 * 4 * gtkD is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU Lesser General Public License 6 * as published by the Free Software Foundation; either version 3 7 * of the License, or (at your option) any later version, with 8 * some exceptions, please read the COPYING file. 9 * 10 * gtkD is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with gtkD; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA 18 */ 19 20 // generated automatically - do not change 21 // find conversion definition on APILookup.txt 22 // implement new conversion functionalities on the wrap.utils pakage 23 24 /* 25 * Conversion parameters: 26 * inFile = GdkDisplay.html 27 * outPack = gdk 28 * outFile = Display 29 * strct = GdkDisplay 30 * realStrct= 31 * ctorStrct= 32 * clss = Display 33 * interf = 34 * class Code: No 35 * interface Code: No 36 * template for: 37 * extend = 38 * implements: 39 * prefixes: 40 * - gdk_display_ 41 * omit structs: 42 * omit prefixes: 43 * omit code: 44 * omit signals: 45 * imports: 46 * - glib.Str 47 * - gdk.Screen 48 * - glib.ListG 49 * - gdk.Event 50 * - gdk.Window 51 * structWrap: 52 * - GList* -> ListG 53 * - GdkDisplay* -> Display 54 * - GdkEvent* -> Event 55 * - GdkScreen* -> Screen 56 * - GdkWindow* -> Window 57 * module aliases: 58 * local aliases: 59 * overrides: 60 */ 61 62 module gdk.Display; 63 64 public import gtkc.gdktypes; 65 66 private import gtkc.gdk; 67 private import glib.ConstructionException; 68 private import gobject.ObjectG; 69 70 private import gobject.Signals; 71 public import gtkc.gdktypes; 72 73 private import glib.Str; 74 private import gdk.Screen; 75 private import glib.ListG; 76 private import gdk.Event; 77 private import gdk.Window; 78 79 80 81 private import gobject.ObjectG; 82 83 /** 84 * Description 85 * GdkDisplay objects purpose are two fold: 86 * To grab/ungrab keyboard focus and mouse pointer 87 * To manage and provide information about the GdkScreen(s) 88 * available for this GdkDisplay 89 * GdkDisplay objects are the GDK representation of the X Display which can be 90 * described as a workstation consisting of a keyboard a pointing 91 * device (such as a mouse) and one or more screens. 92 * It is used to open and keep track of various GdkScreen objects currently 93 * instanciated by the application. It is also used to grab and release the keyboard 94 * and the mouse pointer. 95 */ 96 public class Display : ObjectG 97 { 98 99 /** the main Gtk struct */ 100 protected GdkDisplay* gdkDisplay; 101 102 103 public GdkDisplay* getDisplayStruct() 104 { 105 return gdkDisplay; 106 } 107 108 109 /** the main Gtk struct as a void* */ 110 protected override void* getStruct() 111 { 112 return cast(void*)gdkDisplay; 113 } 114 115 /** 116 * Sets our main struct and passes it to the parent class 117 */ 118 public this (GdkDisplay* gdkDisplay) 119 { 120 super(cast(GObject*)gdkDisplay); 121 this.gdkDisplay = gdkDisplay; 122 } 123 124 protected override void setStruct(GObject* obj) 125 { 126 super.setStruct(obj); 127 gdkDisplay = cast(GdkDisplay*)obj; 128 } 129 130 /** 131 */ 132 int[string] connectedSignals; 133 134 void delegate(gboolean, Display)[] onClosedListeners; 135 /** 136 * The ::closed signal is emitted when the connection to the windowing 137 * system for display is closed. 138 * TRUE if the display was closed due to an error 139 * Since 2.2 140 */ 141 void addOnClosed(void delegate(gboolean, Display) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 142 { 143 if ( !("closed" in connectedSignals) ) 144 { 145 Signals.connectData( 146 getStruct(), 147 "closed", 148 cast(GCallback)&callBackClosed, 149 cast(void*)this, 150 null, 151 connectFlags); 152 connectedSignals["closed"] = 1; 153 } 154 onClosedListeners ~= dlg; 155 } 156 extern(C) static void callBackClosed(GdkDisplay* displayStruct, gboolean isError, Display _display) 157 { 158 foreach ( void delegate(gboolean, Display) dlg ; _display.onClosedListeners ) 159 { 160 dlg(isError, _display); 161 } 162 } 163 164 165 /** 166 * Opens a display. 167 * Since 2.2 168 * Params: 169 * displayName = the name of the display to open 170 * Returns: a GdkDisplay, or NULL if the display could not be opened. 171 */ 172 public static Display open(string displayName) 173 { 174 // GdkDisplay * gdk_display_open (const gchar *display_name); 175 auto p = gdk_display_open(Str.toStringz(displayName)); 176 177 if(p is null) 178 { 179 return null; 180 } 181 182 return ObjectG.getDObject!(Display)(cast(GdkDisplay*) p); 183 } 184 185 /** 186 * Gets the default GdkDisplay. This is a convenience 187 * function for 188 * gdk_display_manager_get_default_display (gdk_display_manager_get()). 189 * Since 2.2 190 * Returns: a GdkDisplay, or NULL if there is no default display. [transfer none] 191 */ 192 public static Display getDefault() 193 { 194 // GdkDisplay * gdk_display_get_default (void); 195 auto p = gdk_display_get_default(); 196 197 if(p is null) 198 { 199 return null; 200 } 201 202 return ObjectG.getDObject!(Display)(cast(GdkDisplay*) p); 203 } 204 205 /** 206 * Gets the name of the display. 207 * Since 2.2 208 * Returns: a string representing the display name. This string is owned by GDK and should not be modified or freed. 209 */ 210 public string getName() 211 { 212 // const gchar * gdk_display_get_name (GdkDisplay *display); 213 return Str.toString(gdk_display_get_name(gdkDisplay)); 214 } 215 216 /** 217 * Gets the number of screen managed by the display. 218 * Since 2.2 219 * Returns: number of screens. 220 */ 221 public int getNScreens() 222 { 223 // gint gdk_display_get_n_screens (GdkDisplay *display); 224 return gdk_display_get_n_screens(gdkDisplay); 225 } 226 227 /** 228 * Returns a screen object for one of the screens of the display. 229 * Since 2.2 230 * Params: 231 * screenNum = the screen number 232 * Returns: the GdkScreen object 233 */ 234 public Screen getScreen(int screenNum) 235 { 236 // GdkScreen * gdk_display_get_screen (GdkDisplay *display, gint screen_num); 237 auto p = gdk_display_get_screen(gdkDisplay, screenNum); 238 239 if(p is null) 240 { 241 return null; 242 } 243 244 return ObjectG.getDObject!(Screen)(cast(GdkScreen*) p); 245 } 246 247 /** 248 * Get the default GdkScreen for display. 249 * Since 2.2 250 * Returns: the default GdkScreen object for display 251 */ 252 public Screen getDefaultScreen() 253 { 254 // GdkScreen * gdk_display_get_default_screen (GdkDisplay *display); 255 auto p = gdk_display_get_default_screen(gdkDisplay); 256 257 if(p is null) 258 { 259 return null; 260 } 261 262 return ObjectG.getDObject!(Screen)(cast(GdkScreen*) p); 263 } 264 265 /** 266 * Release any pointer grab. 267 * Since 2.2 268 * Params: 269 * time = a timestap (e.g. GDK_CURRENT_TIME). 270 */ 271 public void pointerUngrab(uint time) 272 { 273 // void gdk_display_pointer_ungrab (GdkDisplay *display, guint32 time_); 274 gdk_display_pointer_ungrab(gdkDisplay, time); 275 } 276 277 /** 278 * Release any keyboard grab 279 * Since 2.2 280 * Params: 281 * time = a timestap (e.g GDK_CURRENT_TIME). 282 */ 283 public void keyboardUngrab(uint time) 284 { 285 // void gdk_display_keyboard_ungrab (GdkDisplay *display, guint32 time_); 286 gdk_display_keyboard_ungrab(gdkDisplay, time); 287 } 288 289 /** 290 * Test if the pointer is grabbed. 291 * Since 2.2 292 * Returns: TRUE if an active X pointer grab is in effect 293 */ 294 public int pointerIsGrabbed() 295 { 296 // gboolean gdk_display_pointer_is_grabbed (GdkDisplay *display); 297 return gdk_display_pointer_is_grabbed(gdkDisplay); 298 } 299 300 /** 301 * Emits a short beep on display 302 * Since 2.2 303 */ 304 public void beep() 305 { 306 // void gdk_display_beep (GdkDisplay *display); 307 gdk_display_beep(gdkDisplay); 308 } 309 310 /** 311 * Flushes any requests queued for the windowing system and waits until all 312 * requests have been handled. This is often used for making sure that the 313 * display is synchronized with the current state of the program. Calling 314 * gdk_display_sync() before gdk_error_trap_pop() makes sure that any errors 315 * generated from earlier requests are handled before the error trap is 316 * removed. 317 * This is most useful for X11. On windowing systems where requests are 318 * handled synchronously, this function will do nothing. 319 * Since 2.2 320 */ 321 public void sync() 322 { 323 // void gdk_display_sync (GdkDisplay *display); 324 gdk_display_sync(gdkDisplay); 325 } 326 327 /** 328 * Flushes any requests queued for the windowing system; this happens automatically 329 * when the main loop blocks waiting for new events, but if your application 330 * is drawing without returning control to the main loop, you may need 331 * to call this function explicitely. A common case where this function 332 * needs to be called is when an application is executing drawing commands 333 * from a thread other than the thread where the main loop is running. 334 * This is most useful for X11. On windowing systems where requests are 335 * handled synchronously, this function will do nothing. 336 * Since 2.4 337 */ 338 public void flush() 339 { 340 // void gdk_display_flush (GdkDisplay *display); 341 gdk_display_flush(gdkDisplay); 342 } 343 344 /** 345 * Closes the connection to the windowing system for the given display, 346 * and cleans up associated resources. 347 * Since 2.2 348 */ 349 public void close() 350 { 351 // void gdk_display_close (GdkDisplay *display); 352 gdk_display_close(gdkDisplay); 353 } 354 355 /** 356 * Finds out if the display has been closed. 357 * Since 2.22 358 * Returns: TRUE if the display is closed. 359 */ 360 public int isClosed() 361 { 362 // gboolean gdk_display_is_closed (GdkDisplay *display); 363 return gdk_display_is_closed(gdkDisplay); 364 } 365 366 /** 367 * Returns the list of available input devices attached to display. 368 * The list is statically allocated and should not be freed. 369 * Since 2.2 370 * Returns: a list of GdkDevice 371 */ 372 public ListG listDevices() 373 { 374 // GList * gdk_display_list_devices (GdkDisplay *display); 375 auto p = gdk_display_list_devices(gdkDisplay); 376 377 if(p is null) 378 { 379 return null; 380 } 381 382 return ObjectG.getDObject!(ListG)(cast(GList*) p); 383 } 384 385 /** 386 * Gets the next GdkEvent to be processed for display, fetching events from the 387 * windowing system if necessary. 388 * Since 2.2 389 * Returns: the next GdkEvent to be processed, or NULL if no events are pending. The returned GdkEvent should be freed with gdk_event_free(). 390 */ 391 public Event getEvent() 392 { 393 // GdkEvent * gdk_display_get_event (GdkDisplay *display); 394 auto p = gdk_display_get_event(gdkDisplay); 395 396 if(p is null) 397 { 398 return null; 399 } 400 401 return ObjectG.getDObject!(Event)(cast(GdkEvent*) p); 402 } 403 404 /** 405 * Gets a copy of the first GdkEvent in the display's event queue, without 406 * removing the event from the queue. (Note that this function will 407 * not get more events from the windowing system. It only checks the events 408 * that have already been moved to the GDK event queue.) 409 * Since 2.2 410 * Returns: a copy of the first GdkEvent on the event queue, or NULL if no events are in the queue. The returned GdkEvent should be freed with gdk_event_free(). 411 */ 412 public Event peekEvent() 413 { 414 // GdkEvent * gdk_display_peek_event (GdkDisplay *display); 415 auto p = gdk_display_peek_event(gdkDisplay); 416 417 if(p is null) 418 { 419 return null; 420 } 421 422 return ObjectG.getDObject!(Event)(cast(GdkEvent*) p); 423 } 424 425 /** 426 * Appends a copy of the given event onto the front of the event 427 * queue for display. 428 * Since 2.2 429 * Params: 430 * event = a GdkEvent. 431 */ 432 public void putEvent(Event event) 433 { 434 // void gdk_display_put_event (GdkDisplay *display, const GdkEvent *event); 435 gdk_display_put_event(gdkDisplay, (event is null) ? null : event.getEventStruct()); 436 } 437 438 /** 439 * Adds a filter to be called when X ClientMessage events are received. 440 * See gdk_window_add_filter() if you are interested in filtering other 441 * types of events. 442 * Since 2.2 443 * Params: 444 * messageType = the type of ClientMessage events to receive. 445 * This will be checked against the message_type field 446 * of the XClientMessage event struct. 447 * func = the function to call to process the event. 448 * data = user data to pass to func. 449 */ 450 public void addClientMessageFilter(GdkAtom messageType, GdkFilterFunc func, void* data) 451 { 452 // void gdk_display_add_client_message_filter (GdkDisplay *display, GdkAtom message_type, GdkFilterFunc func, gpointer data); 453 gdk_display_add_client_message_filter(gdkDisplay, messageType, func, data); 454 } 455 456 /** 457 * Sets the double click time (two clicks within this time interval 458 * count as a double click and result in a GDK_2BUTTON_PRESS event). 459 * Applications should not set this, it is a global 460 * user-configured setting. 461 * Since 2.2 462 * Params: 463 * msec = double click time in milliseconds (thousandths of a second) 464 */ 465 public void setDoubleClickTime(uint msec) 466 { 467 // void gdk_display_set_double_click_time (GdkDisplay *display, guint msec); 468 gdk_display_set_double_click_time(gdkDisplay, msec); 469 } 470 471 /** 472 * Sets the double click distance (two clicks within this distance 473 * count as a double click and result in a GDK_2BUTTON_PRESS event). 474 * See also gdk_display_set_double_click_time(). 475 * Applications should not set this, it is a global 476 * user-configured setting. 477 * Since 2.4 478 * Params: 479 * distance = distance in pixels 480 */ 481 public void setDoubleClickDistance(uint distance) 482 { 483 // void gdk_display_set_double_click_distance (GdkDisplay *display, guint distance); 484 gdk_display_set_double_click_distance(gdkDisplay, distance); 485 } 486 487 /** 488 * Gets the current location of the pointer and the current modifier 489 * mask for a given display. 490 * Since 2.2 491 * Params: 492 * screen = location to store the screen that the 493 * cursor is on, or NULL. [out][allow-none] 494 * x = location to store root window X coordinate of pointer, or NULL. [out][allow-none] 495 * y = location to store root window Y coordinate of pointer, or NULL. [out][allow-none] 496 * mask = location to store current modifier mask, or NULL. [out][allow-none] 497 */ 498 public void getPointer(out Screen screen, out int x, out int y, out GdkModifierType mask) 499 { 500 // void gdk_display_get_pointer (GdkDisplay *display, GdkScreen **screen, gint *x, gint *y, GdkModifierType *mask); 501 GdkScreen* outscreen = null; 502 503 gdk_display_get_pointer(gdkDisplay, &outscreen, &x, &y, &mask); 504 505 screen = ObjectG.getDObject!(Screen)(outscreen); 506 } 507 508 /** 509 * Obtains the window underneath the mouse pointer, returning the location 510 * of the pointer in that window in win_x, win_y for screen. Returns NULL 511 * if the window under the mouse pointer is not known to GDK (for example, 512 * belongs to another application). 513 * Since 2.2 514 * Params: 515 * winX = return location for x coordinate of the pointer location relative 516 * to the window origin, or NULL. [out][allow-none] 517 * winY = return location for y coordinate of the pointer location relative 518 * to the window origin, or NULL. [out][allow-none] 519 * Returns: the window under the mouse pointer, or NULL. [transfer none] 520 */ 521 public Window getWindowAtPointer(out int winX, out int winY) 522 { 523 // GdkWindow * gdk_display_get_window_at_pointer (GdkDisplay *display, gint *win_x, gint *win_y); 524 auto p = gdk_display_get_window_at_pointer(gdkDisplay, &winX, &winY); 525 526 if(p is null) 527 { 528 return null; 529 } 530 531 return ObjectG.getDObject!(Window)(cast(GdkWindow*) p); 532 } 533 534 /** 535 * Warning 536 * gdk_display_set_pointer_hooks has been deprecated since version 2.24 and should not be used in newly-written code. This function will go away in GTK 3 for lack of use cases. 537 * This function allows for hooking into the operation 538 * of getting the current location of the pointer on a particular 539 * display. This is only useful for such low-level tools as an 540 * event recorder. Applications should never have any 541 * reason to use this facility. 542 * Since 2.2 543 * Params: 544 * newHooks = a table of pointers to functions for getting 545 * quantities related to the current pointer position, 546 * or NULL to restore the default table. 547 * Returns: the previous pointer hook table 548 */ 549 public GdkDisplayPointerHooks* setPointerHooks(GdkDisplayPointerHooks* newHooks) 550 { 551 // GdkDisplayPointerHooks * gdk_display_set_pointer_hooks (GdkDisplay *display, const GdkDisplayPointerHooks *new_hooks); 552 return gdk_display_set_pointer_hooks(gdkDisplay, newHooks); 553 } 554 555 /** 556 * Warps the pointer of display to the point x,y on 557 * the screen screen, unless the pointer is confined 558 * to a window by a grab, in which case it will be moved 559 * as far as allowed by the grab. Warping the pointer 560 * creates events as if the user had moved the mouse 561 * instantaneously to the destination. 562 * Note that the pointer should normally be under the 563 * control of the user. This function was added to cover 564 * some rare use cases like keyboard navigation support 565 * for the color picker in the GtkColorSelectionDialog. 566 * Since 2.8 567 * Params: 568 * screen = the screen of display to warp the pointer to 569 * x = the x coordinate of the destination 570 * y = the y coordinate of the destination 571 */ 572 public void warpPointer(Screen screen, int x, int y) 573 { 574 // void gdk_display_warp_pointer (GdkDisplay *display, GdkScreen *screen, gint x, gint y); 575 gdk_display_warp_pointer(gdkDisplay, (screen is null) ? null : screen.getScreenStruct(), x, y); 576 } 577 578 /** 579 * Returns TRUE if multicolored cursors are supported 580 * on display. Otherwise, cursors have only a forground 581 * and a background color. 582 * Since 2.4 583 * Returns: whether cursors can have multiple colors. 584 */ 585 public int supportsCursorColor() 586 { 587 // gboolean gdk_display_supports_cursor_color (GdkDisplay *display); 588 return gdk_display_supports_cursor_color(gdkDisplay); 589 } 590 591 /** 592 * Returns TRUE if cursors can use an 8bit alpha channel 593 * on display. Otherwise, cursors are restricted to bilevel 594 * alpha (i.e. a mask). 595 * Since 2.4 596 * Returns: whether cursors can have alpha channels. 597 */ 598 public int supportsCursorAlpha() 599 { 600 // gboolean gdk_display_supports_cursor_alpha (GdkDisplay *display); 601 return gdk_display_supports_cursor_alpha(gdkDisplay); 602 } 603 604 /** 605 * Returns the default size to use for cursors on display. 606 * Since 2.4 607 * Returns: the default cursor size. 608 */ 609 public uint getDefaultCursorSize() 610 { 611 // guint gdk_display_get_default_cursor_size (GdkDisplay *display); 612 return gdk_display_get_default_cursor_size(gdkDisplay); 613 } 614 615 /** 616 * Gets the maximal size to use for cursors on display. 617 * Since 2.4 618 * Params: 619 * width = the return location for the maximal cursor width 620 * height = the return location for the maximal cursor height 621 */ 622 public void getMaximalCursorSize(out uint width, out uint height) 623 { 624 // void gdk_display_get_maximal_cursor_size (GdkDisplay *display, guint *width, guint *height); 625 gdk_display_get_maximal_cursor_size(gdkDisplay, &width, &height); 626 } 627 628 /** 629 * Returns the default group leader window for all toplevel windows 630 * on display. This window is implicitly created by GDK. 631 * See gdk_window_set_group(). 632 * Since 2.4 633 * Returns: The default group leader window for display 634 */ 635 public Window getDefaultGroup() 636 { 637 // GdkWindow * gdk_display_get_default_group (GdkDisplay *display); 638 auto p = gdk_display_get_default_group(gdkDisplay); 639 640 if(p is null) 641 { 642 return null; 643 } 644 645 return ObjectG.getDObject!(Window)(cast(GdkWindow*) p); 646 } 647 648 /** 649 * Returns whether GdkEventOwnerChange events will be 650 * sent when the owner of a selection changes. 651 * Since 2.6 652 * Returns: whether GdkEventOwnerChange events will be sent. 653 */ 654 public int supportsSelectionNotification() 655 { 656 // gboolean gdk_display_supports_selection_notification (GdkDisplay *display); 657 return gdk_display_supports_selection_notification(gdkDisplay); 658 } 659 660 /** 661 * Request GdkEventOwnerChange events for ownership changes 662 * of the selection named by the given atom. 663 * Since 2.6 664 * Params: 665 * selection = the GdkAtom naming the selection for which 666 * ownership change notification is requested 667 * Returns: whether GdkEventOwnerChange events will be sent. 668 */ 669 public int requestSelectionNotification(GdkAtom selection) 670 { 671 // gboolean gdk_display_request_selection_notification (GdkDisplay *display, GdkAtom selection); 672 return gdk_display_request_selection_notification(gdkDisplay, selection); 673 } 674 675 /** 676 * Returns whether the speicifed display supports clipboard 677 * persistance; i.e. if it's possible to store the clipboard data after an 678 * application has quit. On X11 this checks if a clipboard daemon is 679 * running. 680 * Since 2.6 681 * Returns: TRUE if the display supports clipboard persistance. 682 */ 683 public int supportsClipboardPersistence() 684 { 685 // gboolean gdk_display_supports_clipboard_persistence (GdkDisplay *display); 686 return gdk_display_supports_clipboard_persistence(gdkDisplay); 687 } 688 689 /** 690 * Issues a request to the clipboard manager to store the 691 * clipboard data. On X11, this is a special program that works 692 * according to the freedesktop clipboard specification, available at 693 * http://www.freedesktop.org/Standards/clipboard-manager-spec. 694 * Since 2.6 695 * Params: 696 * clipboardWindow = a GdkWindow belonging to the clipboard owner 697 * time = a timestamp 698 * targets = an array of targets that should be saved, or NULL 699 * if all available targets should be saved. 700 */ 701 public void storeClipboard(Window clipboardWindow, uint time, GdkAtom[] targets) 702 { 703 // void gdk_display_store_clipboard (GdkDisplay *display, GdkWindow *clipboard_window, guint32 time_, const GdkAtom *targets, gint n_targets); 704 gdk_display_store_clipboard(gdkDisplay, (clipboardWindow is null) ? null : clipboardWindow.getWindowStruct(), time, targets.ptr, cast(int) targets.length); 705 } 706 707 /** 708 * Returns TRUE if gdk_window_shape_combine_mask() can 709 * be used to create shaped windows on display. 710 * Since 2.10 711 * Returns: TRUE if shaped windows are supported 712 */ 713 public int supportsShapes() 714 { 715 // gboolean gdk_display_supports_shapes (GdkDisplay *display); 716 return gdk_display_supports_shapes(gdkDisplay); 717 } 718 719 /** 720 * Returns TRUE if gdk_window_input_shape_combine_mask() can 721 * be used to modify the input shape of windows on display. 722 * Since 2.10 723 * Returns: TRUE if windows with modified input shape are supported 724 */ 725 public int supportsInputShapes() 726 { 727 // gboolean gdk_display_supports_input_shapes (GdkDisplay *display); 728 return gdk_display_supports_input_shapes(gdkDisplay); 729 } 730 731 /** 732 * Returns TRUE if gdk_window_set_composited() can be used 733 * to redirect drawing on the window using compositing. 734 * Currently this only works on X11 with XComposite and 735 * XDamage extensions available. 736 * Since 2.12 737 * Signal Details 738 * The "closed" signal 739 * void user_function (GdkDisplay *display, 740 * gboolean is_error, 741 * gpointer user_data) : Run Last 742 * The ::closed signal is emitted when the connection to the windowing 743 * system for display is closed. 744 * Since 2.2 745 * Returns: TRUE if windows may be composited. 746 */ 747 public int supportsComposite() 748 { 749 // gboolean gdk_display_supports_composite (GdkDisplay *display); 750 return gdk_display_supports_composite(gdkDisplay); 751 } 752 }