From 8fc9626a13da0ac80f39039a877a3e626d88c35c Mon Sep 17 00:00:00 2001 From: Michael B. Trausch Date: Fri, 29 May 2009 22:47:57 -0400 Subject: [PATCH] Fix X11 bindings and provide enhancements to them This commit provides more complete Xlib bindings and fixes the X.Event binding so that it yields a pointer in generated C code. Signed-off-by: Michael B. Trausch --- vapi/x11.vapi | 225 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 221 insertions(+), 4 deletions(-) diff --git a/vapi/x11.vapi b/vapi/x11.vapi index de67932..8c57d1a 100644 --- a/vapi/x11.vapi +++ b/vapi/x11.vapi @@ -22,87 +22,202 @@ [CCode (cprefix = "", lower_case_cprefix = "", cheader_filename = "X11/Xlib.h,X11/Xatom.h,X11/Xutil.h")] namespace X { + // Note: must be called before opening a display or calling any other Xlib function, + // see http://tronche.com/gui/x/xlib/display/XInitThreads.html + [CCode (cname = "XInitThreads")] + public Status init_threads (); + [Compact] [CCode (cname = "Display", ref_function = "", unref_function = "")] public class Display { + [CCode (cname = "XOpenDisplay")] + public Display (string? name = null); + + [CCode (cname = "XAllPlanes")] + public static ulong get_all_planes (); + [CCode (cname = "XAddToSaveSet")] public int add_to_save_set (Window w); + [CCode (cname = "XAllowEvents")] public int allow_events (int event_mode, int time); + + [CCode (cname = "XBitmapBitOrder")] + public int bitmap_bit_order (); + + [CCode (cname = "XBitmapUnit")] + public int bitmap_scanline_unit (); + + [CCode (cname = "XBitmapPad")] + public int bitmap_scanline_padding (); + [CCode (cname = "XChangeProperty")] public int change_property (Window w, Atom property, Atom type, int format, int mode, [CCode (array_length = false)] uchar[] data, int nelements); + [CCode (cname = "XChangeWindowAttributes")] public int change_window_attributes (Window w, ulong valuemask, SetWindowAttributes attributes); + [CCode (cname = "XConfigureWindow")] public int configure_window (Window w, uint value_mask, WindowChanges values); + [CCode (cname = "ConnectionNumber")] public int connection_number (); + [CCode (cname = "DefaultRootWindow")] public Window default_root_window (); + + [CCode (cname = "XDefaultScreenOfDisplay")] + public unowned Screen default_screen (); + + [CCode (cname = "XScreenOfDisplay")] + public unowned Screen screen_by_id (int screen_number); + [CCode (cname = "DisplayString")] public string display_string (); + + [CCode (cname = "XQLength")] + public int event_queue_length (); + [CCode (cname = "XFlush")] public int flush (); + [CCode (cname = "XGetKeyboardMapping", array_length = false)] public weak uint[] get_keyboard_mapping (uint first_keycode, int keycode_count, ref int keysyms_per_keycode_return); + [CCode (cname = "XGetModifierMapping")] public ModifierKeymap get_modifier_mapping (); + [CCode (cname = "XGetSelectionOwner")] public Window get_selection_owner (Atom selection); + [CCode (cname = "XGetWindowAttributes")] public void get_window_attributes (Window w, out WindowAttributes window_attributes_return); + [CCode (cname = "XGetWindowProperty")] public int get_window_property (Window w, Atom property, long long_offset, long long_length, bool delete, Atom req_type, out Atom actual_type_return, out int actual_format_return, out ulong nitems_return, out ulong bytes_after_return, out void* prop_return); + [CCode (cname = "XGrabButton")] public int grab_button (uint button, uint modifiers, Window grab_window, bool owner_events, uint event_mask, int pointer_mode, int keyboard_mode, Window confine_to, uint cursor); + [CCode (cname = "XGrabPointer")] public int grab_pointer (Window grab_window, bool owner_events, uint event_mask, int pointer_mode, int keyboard_mode, Window confine_to, uint cursor, int time); + [CCode (cname = "XGrabServer")] public int grab_server (); + + [CCode (cname = "XImageByteOrder")] + public int image_byte_order (); + [CCode (cname = "XInternAtom")] public Atom intern_atom (string atom_name, bool only_if_exists); + [CCode (cname = "XInternAtoms")] public void intern_atoms (string[] names, bool only_if_exists, [CCode (array_length = false)] Atom[] atoms_return); + + [CCode (cname = "XInternalConnectionNumbers")] + public Status internal_connection_numbers (ref int[] fd_return); + [CCode (cname = "XDisplayKeycodes")] public int keycodes (ref int min_keycodes_return, ref int max_keycodes_return); + + [CCode (cname = "XLastKnownRequestProcessed")] + public ulong last_known_request_processed (); + + [CCode (cname = "XLockDisplay")] + public void lock_display (); + [CCode (cname = "XMapWindow")] public int map_window (Window w); + + [CCode (cname = "XMaxRequestSize")] + public long max_request_size (); + + [CCode (cname = "XExtendedMaxRequestSize")] + public long max_extended_request_size (); + [CCode (cname = "XNextEvent")] public int next_event (ref Event event_return); + + [CCode (cname = "XNextRequest")] + public ulong next_request (); + + [CCode (cname = "XNoOp")] + public void no_operation (); + + [CCode (cname = "XScreenCount")] + public int number_of_screens (); + [CCode (cname = "XPending")] public int pending (); + + [CCode (cname = "XProcessInternalConnection")] + public void process_internal_connection (int fd); + + [CCode (cname = "XProtocolVersion")] + public int protocol_version (); + + [CCode (cname = "XProtocolRevision")] + public int protocol_revision (); + [CCode (cname = "XRaiseWindow")] public int raise_window (Window w); + [CCode (cname = "XReparentWindow")] public int reparent_window (Window w, Window parent, int x, int y); + [CCode (cname = "XResizeWindow")] public int resize_window (Window w, uint width, uint height); + [CCode (cname = "XRootWindow")] public Window root_window (int screen_number); + [CCode (cname = "ScreenCount")] public int screen_count (); + [CCode (cname = "XScreenOfDisplay")] public weak Screen screen_of_display (int screen_number); + [CCode (cname = "XSelectInput")] public int select_input (Window w, long event_mask); + [CCode (cname = "XSendEvent")] public void send_event (Window w, bool prpagate, long event_mask, ref Event event_send); + + [CCode (cname = "XSetCloseDownMode")] + public void set_close_down_mode (int close_mode); + [CCode (cname = "XSetSelectionOwner")] public Window set_selection_owner (Atom selection, Window owner, int time); + [CCode (cname = "XSetInputFocus")] public int set_input_focus (Window focus, int revert_to, int time); + [CCode (cname = "XUngrabButton")] public int ungrab_button (uint button, uint modifiers, Window grab_window); + [CCode (cname = "XUngrabPointer")] public int ungrab_pointer (int time); + [CCode (cname = "XUngrabServer")] public int ungrab_server (); + + [CCode (cname = "XUnlockDisplay")] + public void unlock_display (); + [CCode (cname = "XUnmapWindow")] public int unmap_window (Window w); + [CCode (cname = "XQueryTree")] public void query_tree (Window w, out Window root_return, out Window parent_return, out Window[] children_return); + [CCode (cname = "XWindowEvent")] public int window_event (Window w, EventMask event_mask, out Event event_return); + + [CCode (cname = "XServerVendor")] + public string xserver_vendor_name (); + + [CCode (cname = "XVendorRelease")] + public string xserver_vendor_release (); } [Compact] @@ -122,6 +237,23 @@ namespace X { [SimpleType] [IntegerType (rank = 9)] + [CCode (cname = "Colormap")] + public struct Colormap { + } + + [SimpleType] + [CCode (cname = "GC")] + public struct GC { + } + + [SimpleType] + [IntegerType (rank = 9)] + [CCode (cname = "Status")] + public struct Status { + } + + [SimpleType] + [IntegerType (rank = 9)] [CCode (cname = "Window")] public struct Window { } @@ -207,13 +339,28 @@ namespace X { [CCode (cprefix = "CW")] public enum CW { - OverrideRedirect, - EventMask, + BackPixmap, + BackPixel, + BackingStore, + BackingPlanes, + BackingPixel, + BitGravity, + BorderPixmap, + BorderPixel, BorderWidth, + Colormap, + Cursor, + DontPropagate, + EventMask, + Height, + OverrideRedirect, + SaveUnder, + Sibling, + StackMode, X, Y, Width, - Height + WinGravity } [CCode (cprefix = "GrabMode")] @@ -301,9 +448,16 @@ namespace X { MappingNotify } + /* + * This is actually a union in the header, but events are typically passed + * as pointers, so we use it as a compact class. The other events can be + * pass-by-value types, but this one should always be handled with a pointer + * in C code, and thus be pass-by-reference. + */ // union + [Compact] [CCode (cname = "XEvent")] - public struct Event { + public class Event { public int type; public AnyEvent xany; public KeyEvent xkey; @@ -636,6 +790,69 @@ namespace X { public Window root; public int width; public int height; + + [CCode (cname = "XScreenOfDisplay")] + public static unowned Screen get_screen (Display disp, int screen_number); + + [CCode (cname = "XBlackPixelOfScreen")] + public ulong black_pixel_of_screen (); + + [CCode (cname = "XCellsOfScreen")] + public int cells_of_screen (); + + [CCode (cname = "XDefaultColormapOfScreen")] + public Colormap default_colormap_of_screen (); + + [CCode (cname = "XDefaultDepthOfScreen")] + public int default_depth_of_screen (); + + [CCode (cname = "XDefaultGCOfScreen")] + public GC default_gc_of_screen (); + + [CCode (cname = "XDefaultVisualOfScreen")] + public Visual default_visual_of_screen (); + + [CCode (cname = "XDisplayOfScreen")] + public unowned Display display_of_screen (); + + [CCode (cname = "XDoesBackingStore")] + public int does_backing_store (); + + [CCode (cname = "XDoesSaveUnders")] + public bool does_save_unders (); + + [CCode (cname = "XEventMaskOfScreen")] + public long event_mask_of_Screen (); + + [CCode (cname = "XHeightMMOfScreen")] + public int height_in_mm_of_screen (); + + [CCode (cname = "XHeightOfScreen")] + public int height_of_screen (); + + [CCode (cname = "XMaxCmapsOfScreen")] + public int max_colormaps_of_screen (); + + [CCode (cname = "XMinCmapsOfScreen")] + public int min_colormaps_of_screen (); + + [CCode (cname = "XPlanesOfScreen")] + public int planes_of_screen (); + + [CCode (cname = "XRootWindowOfScreen")] + public Window root_window_of_screen (); + + [CCode (cname = "XScreenNumberOfScreen")] + public int screen_number_of_screen (); + + [CCode (cname = "XWhitePixelOfScreen")] + public ulong white_pixel_of_screen (); + + [CCode (cname = "XWidthMMOfScreen")] + public int width_in_mm_of_screen (); + + [CCode (cname = "XWidthOfScreen")] + public int width_of_screen (); } public const X.Atom XA_ATOM; -- 1.6.0.4