------------------------------------------------------------------------------ -- -- -- Copyright (C) 1998-2000 E. Briot, J. Brobecker and A. Charlet -- -- Copyright (C) 2000-2014, AdaCore -- -- -- -- This library is free software; you can redistribute it and/or modify it -- -- under terms of the GNU General Public License as published by the Free -- -- Software Foundation; either version 3, or (at your option) any later -- -- version. This library is distributed in the hope that it will be useful, -- -- but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- -- -- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. -- -- -- -- As a special exception under Section 7 of GPL version 3, you are granted -- -- additional permissions described in the GCC Runtime Library Exception, -- -- version 3.1, as published by the Free Software Foundation. -- -- -- -- You should have received a copy of the GNU General Public License and -- -- a copy of the GCC Runtime Library Exception along with this program; -- -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- -- <http://www.gnu.org/licenses/>. -- -- -- ------------------------------------------------------------------------------ -- <description> -- The Gdk.Device.Gdk_Device object represents a single input device, such as -- a keyboard, a mouse, a touchpad, etc. -- -- See the Gdk.Device_Manager.Gdk_Device_Manager documentation for more -- information about the various kinds of master and slave devices, and their -- relationships. -- -- </description> pragma Ada_2005; pragma Warnings (Off, "*is already use-visible*");
with Gdk; use Gdk;
with Gdk.Display; use Gdk.Display;
with Gdk.Event; use Gdk.Event;
with Gdk.Screen; use Gdk.Screen;
with Gdk.Types; use Gdk.Types;
with Glib; use Glib;
with Glib.Generic_Properties; use Glib.Generic_Properties;
with Glib.Glist; use Glib.Glist;
with Glib.Object; use Glib.Object;
with Glib.Properties; use Glib.Properties;
package Gdk.Device is
type Gdk_Device_Record is new GObject_Record with null record;
type Gdk_Device is access all Gdk_Device_Record'Class;
type Gdk_Device_Type is (
Gdk_Device_Type_Master,
Gdk_Device_Type_Slave,
Gdk_Device_Type_Floating);
pragma Convention (C, Gdk_Device_Type);
-- Indicates the device type. See <link -- linkend="GdkDeviceManager.description">above</link> for more information -- about the meaning of these device types. function Convert (R : Gdk.Device.Gdk_Device) return System.Address;
function Convert (R : System.Address) return Gdk.Device.Gdk_Device;
package Device_List is new Generic_List (Gdk.Device.Gdk_Device);
---------------------------- -- Enumeration Properties -- ---------------------------- package Gdk_Device_Type_Properties is
new Generic_Internal_Discrete_Property (Gdk_Device_Type);
type Property_Gdk_Device_Type is new Gdk_Device_Type_Properties.Property;
------------------ -- Constructors -- ------------------ function Get_Type return Glib.GType;
pragma Import (C, Get_Type, "gdk_device_get_type");
------------- -- Methods -- ------------- function Get_Associated_Device
(Self : not null access Gdk_Device_Record) return Gdk_Device;
-- Returns the associated device to Device, if Device is of type -- Gdk.Device.Gdk_Device_Type_Master, it will return the paired pointer or -- keyboard. -- If Device is of type Gdk.Device.Gdk_Device_Type_Slave, it will return -- the master device to which Device is attached to. -- If Device is of type Gdk.Device.Gdk_Device_Type_Floating, null will be -- returned, as there is no associated device. -- Since: gtk+ 3.0 function Get_Axis_Use
(Self : not null access Gdk_Device_Record;
Index : Guint) return Gdk_Axis_Use;
-- Returns the axis use for Index_. -- Since: gtk+ 2.20 -- "index_": the index of the axis. procedure Set_Axis_Use
(Self : not null access Gdk_Device_Record;
Index : Guint;
GUse : Gdk_Axis_Use);
-- Specifies how an axis of a device is used. -- "index_": the index of the axis -- "use": specifies how the axis is used function Get_Device_Type
(Self : not null access Gdk_Device_Record) return Gdk_Device_Type;
-- Returns the device type for Device. -- Since: gtk+ 3.0 function Get_Display
(Self : not null access Gdk_Device_Record)
return Gdk.Display.Gdk_Display;
-- Returns the Gdk.Display.Gdk_Display to which Device pertains. -- Since: gtk+ 3.0 function Get_Has_Cursor
(Self : not null access Gdk_Device_Record) return Boolean;
-- Determines whether the pointer follows device motion. -- Since: gtk+ 2.20 function Get_Mode
(Self : not null access Gdk_Device_Record) return Gdk_Input_Mode;
-- Determines the mode of the device. -- Since: gtk+ 2.20 function Set_Mode
(Self : not null access Gdk_Device_Record;
Mode : Gdk_Input_Mode) return Boolean;
-- Sets a the mode of an input device. The mode controls if the device is -- active and whether the device's range is mapped to the entire screen or -- to a single window. -- "mode": the input mode. function Get_N_Axes
(Self : not null access Gdk_Device_Record) return Gint;
-- Returns the number of axes the device currently has. -- Since: gtk+ 3.0 function Get_N_Keys
(Self : not null access Gdk_Device_Record) return Gint;
-- Returns the number of keys the device currently has. -- Since: gtk+ 2.24 function Get_Name
(Self : not null access Gdk_Device_Record) return UTF8_String;
-- Determines the name of the device. -- Since: gtk+ 2.20 function Get_Source
(Self : not null access Gdk_Device_Record) return Gdk_Input_Source;
-- Determines the type of the device. -- Since: gtk+ 2.20 procedure Get_State
(Self : not null access Gdk_Device_Record;
Window : Gdk.Gdk_Window;
Axes : in out Gdouble;
Mask : in out Gdk.Types.Gdk_Modifier_Type);
-- Gets the current state of a pointer device relative to Window. As a -- slave device coordinates are those of its master pointer, This function -- may not be called on devices of type Gdk.Device.Gdk_Device_Type_Slave, -- unless there is an ongoing grab on them, see Gdk.Device.Grab. -- "window": a Gdk.Gdk_Window. -- "axes": an array of doubles to store the values of the axes of Device -- in, or null. -- "mask": location to store the modifiers, or null. function Grab
(Self : not null access Gdk_Device_Record;
Window : Gdk.Gdk_Window;
Grab_Ownership : Gdk_Grab_Ownership;
Owner_Events : Boolean;
Event_Mask : Gdk.Event.Gdk_Event_Mask;
Cursor : Gdk.Gdk_Cursor;
Time : Guint32) return Gdk_Grab_Status;
-- Grabs the device so that all events coming from this device are passed -- to this application until the device is ungrabbed with -- Gdk.Device.Ungrab, or the window becomes unviewable. This overrides any -- previous grab on the device by this client. -- Device grabs are used for operations which need complete control over -- the given device events (either pointer or keyboard). For example in -- GTK+ this is used for Drag and Drop operations, popup menus and such. -- Note that if the event mask of an X window has selected both button -- press and button release events, then a button press event will cause an -- automatic pointer grab until the button is released. X does this -- automatically since most applications expect to receive button press and -- release events in pairs. It is equivalent to a pointer grab on the -- window with Owner_Events set to True. -- If you set up anything at the time you take the grab that needs to be -- cleaned up when the grab ends, you should handle the -- Gdk.Event.Gdk_Event_Grab_Broken events that are emitted when the grab -- ends unvoluntarily. -- Since: gtk+ 3.0 -- "window": the Gdk.Gdk_Window which will own the grab (the grab window) -- "grab_ownership": specifies the grab ownership. -- "owner_events": if False then all device events are reported with -- respect to Window and are only reported if selected by Event_Mask. If -- True then pointer events for this application are reported as normal, -- but pointer events outside this application are reported with respect to -- Window and only if selected by Event_Mask. In either mode, unreported -- events are discarded. -- "event_mask": specifies the event mask, which is used in accordance -- with Owner_Events. -- "cursor": the cursor to display while the grab is active if the device -- is a pointer. If this is null then the normal cursors are used for -- Window and its descendants, and the cursor for Window is used elsewhere. -- "time_": the timestamp of the event which led to this pointer grab. -- This usually comes from the Gdk.Event.Gdk_Event struct, though -- GDK_CURRENT_TIME can be used if the time isn't known. procedure Set_Key
(Self : not null access Gdk_Device_Record;
Index : Guint;
Keyval : Guint;
Modifiers : Gdk.Types.Gdk_Modifier_Type);
-- Specifies the X key event to generate when a macro button of a device -- is pressed. -- "index_": the index of the macro button to set -- "keyval": the keyval to generate -- "modifiers": the modifiers to set procedure Ungrab
(Self : not null access Gdk_Device_Record;
Time : Guint32);
-- Release any grab on Device. -- Since: gtk+ 3.0 -- "time_": a timestap (e.g. GDK_CURRENT_TIME). procedure Warp
(Self : not null access Gdk_Device_Record;
Screen : not null access Gdk.Screen.Gdk_Screen_Record'Class;
X : Gint;
Y : Gint);
-- Warps Device in Display to the point X,Y on the screen Screen, unless -- the device is confined to a window by a grab, in which case it will be -- moved as far as allowed by the grab. Warping the pointer creates events -- as if the user had moved the mouse instantaneously to the destination. -- Note that the pointer should normally be under the control of the user. -- This function was added to cover some rare use cases like keyboard -- navigation support for the color picker in the -- Gtk.Color_Selection_Dialog.Gtk_Color_Selection_Dialog. -- Since: gtk+ 3.0 -- "screen": the screen to warp Device to. -- "x": the X coordinate of the destination. -- "y": the Y coordinate of the destination. ---------------------- -- GtkAda additions -- ---------------------- procedure Get_Window_At_Position
(Self : not null access Gdk_Device_Record;
Win_X : out Gint;
Win_Y : out Gint;
Window : out Gdk.Gdk_Window);
-- Obtains the window underneath Device, returning the location of the -- device in Win_X and Win_Y. Returns null if the window tree under Device -- is not known to GDK (for example, belongs to another application). -- As a slave device coordinates are those of its master pointer, This -- function may not be called on devices of type -- Gdk.Device.Gdk_Device_Type_Slave, unless there is an ongoing grab on -- them, see Gdk.Device.Grab. -- Since: gtk+ 3.0 -- "win_x": return location for the X coordinate of the device location, -- relative to the window origin, or null. -- "win_y": return location for the Y coordinate of the device location, -- relative to the window origin, or null. procedure Set_Device
(Event : Gdk.Event.Gdk_Event;
Device : not null access Gdk_Device_Record);
-- Sets the device for Event to Device. The event must -- have been allocated by GTK+, for instance, by gdk_event_copy(). procedure Set_Source_Device
(Event : Gdk.Event.Gdk_Event;
Device : not null access Gdk_Device_Record);
-- Sets the slave device for Event to Device. -- The event must have been allocated by GTK+, -- for instance by gdk_event_copy(). ---------------- -- Properties -- ---------------- -- The following properties are defined for this widget. See -- Glib.Properties for more information on properties) Associated_Device_Property : constant Glib.Properties.Property_Boxed;
-- Type: Device -- Associated pointer or keyboard with this device, if any. Devices of -- type GDK_DEVICE_TYPE_MASTER always come in keyboard/pointer pairs. Other -- device types will have a null associated device. Device_Manager_Property : constant Glib.Properties.Property_Boxed;
-- Type: Device_Manager -- The Gdk.Device_Manager.Gdk_Device_Manager the Gdk.Device.Gdk_Device -- pertains to. Display_Property : constant Glib.Properties.Property_Boxed;
-- Type: Display -- The Gdk.Display.Gdk_Display the Gdk.Device.Gdk_Device pertains to. Has_Cursor_Property : constant Glib.Properties.Property_Boolean;
-- Whether the device is represented by a cursor on the screen. Devices of -- type Gdk.Device.Gdk_Device_Type_Master will have True here. Input_Mode_Property : constant Glib.Properties.Property_Boxed;
-- Type: Input_Mode -- Input mode for the device. Input_Source_Property : constant Glib.Properties.Property_Boxed;
-- Type: Input_Source -- Source type for the device. N_Axes_Property : constant Glib.Properties.Property_Uint;
-- Number of axes in the device. Name_Property : constant Glib.Properties.Property_String;
-- The device name. The_Type_Property : constant Glib.Properties.Property_Boxed;
-- Type: Device_Type -- Device role in the device manager. ------------- -- Signals -- ------------- Signal_Changed : constant Glib.Signal_Name := "changed";
-- The ::changed signal is emitted either when the Gdk.Device.Gdk_Device -- has changed the number of either axes or keys. For example In X this -- will normally happen when the slave device routing events through the -- master device changes (for example, user switches from the USB mouse to -- a tablet), in that case the master device will change to reflect the new -- slave device axes and keys. -- procedure Handler (Self : access Gdk_Device_Record'Class) private The_Type_Property : constant Glib.Properties.Property_Boxed :=
Glib.Properties.Build ("type");
Name_Property : constant Glib.Properties.Property_String :=
Glib.Properties.Build ("name");
N_Axes_Property : constant Glib.Properties.Property_Uint :=
Glib.Properties.Build ("n-axes");
Input_Source_Property : constant Glib.Properties.Property_Boxed :=
Glib.Properties.Build ("input-source");
Input_Mode_Property : constant Glib.Properties.Property_Boxed :=
Glib.Properties.Build ("input-mode");
Has_Cursor_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("has-cursor");
Display_Property : constant Glib.Properties.Property_Boxed :=
Glib.Properties.Build ("display");
Device_Manager_Property : constant Glib.Properties.Property_Boxed :=
Glib.Properties.Build ("device-manager");
Associated_Device_Property : constant Glib.Properties.Property_Boxed :=
Glib.Properties.Build ("associated-device");
end Gdk.Device;