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 }