Blame gdk/gdkdisplayprivate.h

Packit 496598
/* GDK - The GIMP Drawing Kit
Packit 496598
 * Copyright (C) 2010 Red Hat, Inc.
Packit 496598
 *
Packit 496598
 * This library is free software; you can redistribute it and/or
Packit 496598
 * modify it under the terms of the GNU Lesser General Public
Packit 496598
 * License as published by the Free Software Foundation; either
Packit 496598
 * version 2 of the License, or (at your option) any later version.
Packit 496598
 *
Packit 496598
 * This library is distributed in the hope that it will be useful,
Packit 496598
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 496598
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 496598
 * Lesser General Public License for more details.
Packit 496598
 *
Packit 496598
 * You should have received a copy of the GNU Lesser General Public
Packit 496598
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
Packit 496598
 */
Packit 496598
Packit 496598
#ifndef __GDK_DISPLAY_PRIVATE_H__
Packit 496598
#define __GDK_DISPLAY_PRIVATE_H__
Packit 496598
Packit 496598
#include "gdkdisplay.h"
Packit 496598
#include "gdkwindow.h"
Packit 496598
#include "gdkcursor.h"
Packit 496598
#include "gdkmonitor.h"
Packit 496598
#include "gdkinternals.h"
Packit 496598
Packit 496598
G_BEGIN_DECLS
Packit 496598
Packit 496598
#define GDK_DISPLAY_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_DISPLAY, GdkDisplayClass))
Packit 496598
#define GDK_IS_DISPLAY_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_DISPLAY))
Packit 496598
#define GDK_DISPLAY_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_DISPLAY, GdkDisplayClass))
Packit 496598
Packit 496598
Packit 496598
typedef struct _GdkDisplayClass GdkDisplayClass;
Packit 496598
Packit 496598
/* Tracks information about the device grab on this display */
Packit 496598
typedef struct
Packit 496598
{
Packit 496598
  GdkWindow *window;
Packit 496598
  GdkWindow *native_window;
Packit 496598
  gulong serial_start;
Packit 496598
  gulong serial_end; /* exclusive, i.e. not active on serial_end */
Packit 496598
  guint event_mask;
Packit 496598
  guint32 time;
Packit 496598
  GdkGrabOwnership ownership;
Packit 496598
Packit 496598
  guint activated : 1;
Packit 496598
  guint implicit_ungrab : 1;
Packit 496598
  guint owner_events : 1;
Packit 496598
  guint implicit : 1;
Packit 496598
} GdkDeviceGrabInfo;
Packit 496598
Packit 496598
/* Tracks information about a touch implicit grab on this display */
Packit 496598
typedef struct
Packit 496598
{
Packit 496598
  GdkDevice *device;
Packit 496598
  GdkEventSequence *sequence;
Packit 496598
Packit 496598
  GdkWindow *window;
Packit 496598
  GdkWindow *native_window;
Packit 496598
  gulong serial;
Packit 496598
  guint event_mask;
Packit 496598
  guint32 time;
Packit 496598
} GdkTouchGrabInfo;
Packit 496598
Packit 496598
/* Tracks information about which window and position the pointer last was in.
Packit 496598
 * This is useful when we need to synthesize events later.
Packit 496598
 * Note that we track toplevel_under_pointer using enter/leave events,
Packit 496598
 * so in the case of a grab, either with owner_events==FALSE or with the
Packit 496598
 * pointer in no clients window the x/y coordinates may actually be outside
Packit 496598
 * the window.
Packit 496598
 */
Packit 496598
typedef struct
Packit 496598
{
Packit 496598
  GdkWindow *toplevel_under_pointer; /* toplevel window containing the pointer, */
Packit 496598
                                     /* tracked via native events */
Packit 496598
  GdkWindow *window_under_pointer;   /* window that last got a normal enter event */
Packit 496598
  gdouble toplevel_x, toplevel_y;
Packit 496598
  guint32 state;
Packit 496598
  guint32 button;
Packit 496598
  GdkDevice *last_slave;
Packit 496598
  guint need_touch_press_enter : 1;
Packit 496598
} GdkPointerWindowInfo;
Packit 496598
Packit 496598
typedef struct
Packit 496598
{
Packit 496598
  guint32 button_click_time[2]; /* last 2 button click times */
Packit 496598
  GdkWindow *button_window[2];  /* last 2 windows to receive button presses */
Packit 496598
  gint button_number[2];        /* last 2 buttons to be pressed */
Packit 496598
  gint button_x[2];             /* last 2 button click positions */
Packit 496598
  gint button_y[2];
Packit 496598
  GdkDevice *last_slave;
Packit 496598
} GdkMultipleClickInfo;
Packit 496598
Packit 496598
struct _GdkDisplay
Packit 496598
{
Packit 496598
  GObject parent_instance;
Packit 496598
Packit 496598
  GList *queued_events;
Packit 496598
  GList *queued_tail;
Packit 496598
Packit 496598
  /* Information for determining if the latest button click
Packit 496598
   * is part of a double-click or triple-click
Packit 496598
   */
Packit 496598
  GHashTable *multiple_click_info;
Packit 496598
Packit 496598
  guint event_pause_count;       /* How many times events are blocked */
Packit 496598
Packit 496598
  guint closed             : 1;  /* Whether this display has been closed */
Packit 496598
Packit 496598
  GArray *touch_implicit_grabs;
Packit 496598
  GHashTable *device_grabs;
Packit 496598
  GHashTable *motion_hint_info;
Packit 496598
  GdkDeviceManager *device_manager;
Packit 496598
  GList *input_devices; /* Deprecated, only used to keep gdk_display_list_devices working */
Packit 496598
Packit 496598
  GHashTable *pointers_info;  /* GdkPointerWindowInfo for each device */
Packit 496598
  guint32 last_event_time;    /* Last reported event time from server */
Packit 496598
Packit 496598
  guint double_click_time;  /* Maximum time between clicks in msecs */
Packit 496598
  guint double_click_distance;   /* Maximum distance between clicks in pixels */
Packit 496598
Packit 496598
  guint has_gl_extension_texture_non_power_of_two : 1;
Packit 496598
  guint has_gl_extension_texture_rectangle : 1;
Packit 496598
Packit 496598
  guint debug_updates     : 1;
Packit 496598
  guint debug_updates_set : 1;
Packit 496598
Packit 496598
  GdkRenderingMode rendering_mode;
Packit 496598
Packit 496598
  GList *seats;
Packit 496598
};
Packit 496598
Packit 496598
struct _GdkDisplayClass
Packit 496598
{
Packit 496598
  GObjectClass parent_class;
Packit 496598
Packit 496598
  GType window_type;          /* type for native windows for this display, set in class_init */
Packit 496598
Packit 496598
  const gchar *              (*get_name)           (GdkDisplay *display);
Packit 496598
  GdkScreen *                (*get_default_screen) (GdkDisplay *display);
Packit 496598
  void                       (*beep)               (GdkDisplay *display);
Packit 496598
  void                       (*sync)               (GdkDisplay *display);
Packit 496598
  void                       (*flush)              (GdkDisplay *display);
Packit 496598
  gboolean                   (*has_pending)        (GdkDisplay *display);
Packit 496598
  void                       (*queue_events)       (GdkDisplay *display);
Packit 496598
  void                       (*make_default)       (GdkDisplay *display);
Packit 496598
  GdkWindow *                (*get_default_group)  (GdkDisplay *display);
Packit 496598
  gboolean                   (*supports_selection_notification) (GdkDisplay *display);
Packit 496598
  gboolean                   (*request_selection_notification)  (GdkDisplay *display,
Packit 496598
                                                                 GdkAtom     selection);
Packit 496598
  gboolean                   (*supports_shapes)       (GdkDisplay *display);
Packit 496598
  gboolean                   (*supports_input_shapes) (GdkDisplay *display);
Packit 496598
  gboolean                   (*supports_composite)    (GdkDisplay *display);
Packit 496598
  gboolean                   (*supports_cursor_alpha) (GdkDisplay *display);
Packit 496598
  gboolean                   (*supports_cursor_color) (GdkDisplay *display);
Packit 496598
Packit 496598
  gboolean                   (*supports_clipboard_persistence)  (GdkDisplay *display);
Packit 496598
  void                       (*store_clipboard)    (GdkDisplay    *display,
Packit 496598
                                                    GdkWindow     *clipboard_window,
Packit 496598
                                                    guint32        time_,
Packit 496598
                                                    const GdkAtom *targets,
Packit 496598
                                                    gint           n_targets);
Packit 496598
Packit 496598
  void                       (*get_default_cursor_size) (GdkDisplay *display,
Packit 496598
                                                         guint      *width,
Packit 496598
                                                         guint      *height);
Packit 496598
  void                       (*get_maximal_cursor_size) (GdkDisplay *display,
Packit 496598
                                                         guint      *width,
Packit 496598
                                                         guint      *height);
Packit 496598
  GdkCursor *                (*get_cursor_for_type)     (GdkDisplay    *display,
Packit 496598
                                                         GdkCursorType  type);
Packit 496598
  GdkCursor *                (*get_cursor_for_name)     (GdkDisplay    *display,
Packit 496598
                                                         const gchar   *name);
Packit 496598
  GdkCursor *                (*get_cursor_for_surface)  (GdkDisplay    *display,
Packit 496598
                                                         cairo_surface_t *surface,
Packit 496598
                                                         gdouble          x,
Packit 496598
                                                         gdouble          y);
Packit 496598
Packit 496598
  GdkAppLaunchContext *      (*get_app_launch_context) (GdkDisplay *display);
Packit 496598
Packit 496598
  void                       (*before_process_all_updates) (GdkDisplay *display);
Packit 496598
  void                       (*after_process_all_updates)  (GdkDisplay *display);
Packit 496598
Packit 496598
  gulong                     (*get_next_serial) (GdkDisplay *display);
Packit 496598
Packit 496598
  void                       (*notify_startup_complete) (GdkDisplay  *display,
Packit 496598
                                                         const gchar *startup_id);
Packit 496598
  void                       (*event_data_copy) (GdkDisplay     *display,
Packit 496598
                                                 const GdkEvent *event,
Packit 496598
                                                 GdkEvent       *new_event);
Packit 496598
  void                       (*event_data_free) (GdkDisplay     *display,
Packit 496598
                                                 GdkEvent       *event);
Packit 496598
  void                       (*create_window_impl) (GdkDisplay    *display,
Packit 496598
                                                    GdkWindow     *window,
Packit 496598
                                                    GdkWindow     *real_parent,
Packit 496598
                                                    GdkScreen     *screen,
Packit 496598
                                                    GdkEventMask   event_mask,
Packit 496598
                                                    GdkWindowAttr *attributes,
Packit 496598
                                                    gint           attributes_mask);
Packit 496598
Packit 496598
  GdkKeymap *                (*get_keymap)         (GdkDisplay    *display);
Packit 496598
  void                       (*push_error_trap)    (GdkDisplay    *display);
Packit 496598
  gint                       (*pop_error_trap)     (GdkDisplay    *display,
Packit 496598
                                                    gboolean       ignore);
Packit 496598
Packit 496598
  GdkWindow *                (*get_selection_owner) (GdkDisplay   *display,
Packit 496598
                                                     GdkAtom       selection);
Packit 496598
  gboolean                   (*set_selection_owner) (GdkDisplay   *display,
Packit 496598
                                                     GdkWindow    *owner,
Packit 496598
                                                     GdkAtom       selection,
Packit 496598
                                                     guint32       time,
Packit 496598
                                                     gboolean      send_event);
Packit 496598
  void                       (*send_selection_notify) (GdkDisplay *dispay,
Packit 496598
                                                       GdkWindow        *requestor,
Packit 496598
                                                       GdkAtom          selection,
Packit 496598
                                                       GdkAtom          target,
Packit 496598
                                                       GdkAtom          property,
Packit 496598
                                                       guint32          time);
Packit 496598
  gint                       (*get_selection_property) (GdkDisplay  *display,
Packit 496598
                                                        GdkWindow   *requestor,
Packit 496598
                                                        guchar     **data,
Packit 496598
                                                        GdkAtom     *type,
Packit 496598
                                                        gint        *format);
Packit 496598
  void                       (*convert_selection)      (GdkDisplay  *display,
Packit 496598
                                                        GdkWindow   *requestor,
Packit 496598
                                                        GdkAtom      selection,
Packit 496598
                                                        GdkAtom      target,
Packit 496598
                                                        guint32      time);
Packit 496598
Packit 496598
  gint                   (*text_property_to_utf8_list) (GdkDisplay     *display,
Packit 496598
                                                        GdkAtom         encoding,
Packit 496598
                                                        gint            format,
Packit 496598
                                                        const guchar   *text,
Packit 496598
                                                        gint            length,
Packit 496598
                                                        gchar        ***list);
Packit 496598
  gchar *                (*utf8_to_string_target)      (GdkDisplay     *display,
Packit 496598
                                                        const gchar    *text);
Packit 496598
Packit 496598
  gboolean               (*make_gl_context_current)    (GdkDisplay        *display,
Packit 496598
                                                        GdkGLContext      *context);
Packit 496598
Packit 496598
  GdkSeat *              (*get_default_seat)           (GdkDisplay     *display);
Packit 496598
Packit 496598
  int                    (*get_n_monitors)             (GdkDisplay     *display);
Packit 496598
  GdkMonitor *           (*get_monitor)                (GdkDisplay     *display,
Packit 496598
                                                        int             index);
Packit 496598
  GdkMonitor *           (*get_primary_monitor)        (GdkDisplay     *display);
Packit 496598
  GdkMonitor *           (*get_monitor_at_window)      (GdkDisplay     *display,
Packit 496598
                                                        GdkWindow      *window);
Packit 496598
Packit 496598
  /* Signals */
Packit 496598
  void                   (*opened)                     (GdkDisplay     *display);
Packit 496598
  void (*closed) (GdkDisplay *display,
Packit 496598
                  gboolean    is_error);
Packit 496598
};
Packit 496598
Packit 496598
Packit 496598
typedef void (* GdkDisplayPointerInfoForeach) (GdkDisplay           *display,
Packit 496598
                                               GdkDevice            *device,
Packit 496598
                                               GdkPointerWindowInfo *device_info,
Packit 496598
                                               gpointer              user_data);
Packit 496598
Packit 496598
void                _gdk_display_update_last_event    (GdkDisplay     *display,
Packit 496598
                                                       const GdkEvent *event);
Packit 496598
void                _gdk_display_device_grab_update   (GdkDisplay *display,
Packit 496598
                                                       GdkDevice  *device,
Packit 496598
                                                       GdkDevice  *source_device,
Packit 496598
                                                       gulong      current_serial);
Packit 496598
GdkDeviceGrabInfo * _gdk_display_get_last_device_grab (GdkDisplay *display,
Packit 496598
                                                       GdkDevice  *device);
Packit 496598
GdkDeviceGrabInfo * _gdk_display_add_device_grab      (GdkDisplay       *display,
Packit 496598
                                                       GdkDevice        *device,
Packit 496598
                                                       GdkWindow        *window,
Packit 496598
                                                       GdkWindow        *native_window,
Packit 496598
                                                       GdkGrabOwnership  grab_ownership,
Packit 496598
                                                       gboolean          owner_events,
Packit 496598
                                                       GdkEventMask      event_mask,
Packit 496598
                                                       gulong            serial_start,
Packit 496598
                                                       guint32           time,
Packit 496598
                                                       gboolean          implicit);
Packit 496598
GdkDeviceGrabInfo * _gdk_display_has_device_grab      (GdkDisplay       *display,
Packit 496598
                                                       GdkDevice        *device,
Packit 496598
                                                       gulong            serial);
Packit 496598
gboolean            _gdk_display_end_device_grab      (GdkDisplay       *display,
Packit 496598
                                                       GdkDevice        *device,
Packit 496598
                                                       gulong            serial,
Packit 496598
                                                       GdkWindow        *if_child,
Packit 496598
                                                       gboolean          implicit);
Packit 496598
gboolean            _gdk_display_check_grab_ownership (GdkDisplay       *display,
Packit 496598
                                                       GdkDevice        *device,
Packit 496598
                                                       gulong            serial);
Packit 496598
void                _gdk_display_add_touch_grab       (GdkDisplay       *display,
Packit 496598
                                                       GdkDevice        *device,
Packit 496598
                                                       GdkEventSequence *sequence,
Packit 496598
                                                       GdkWindow        *window,
Packit 496598
                                                       GdkWindow        *native_window,
Packit 496598
                                                       GdkEventMask      event_mask,
Packit 496598
                                                       unsigned long     serial_start,
Packit 496598
                                                       guint32           time);
Packit 496598
GdkTouchGrabInfo *  _gdk_display_has_touch_grab       (GdkDisplay       *display,
Packit 496598
                                                       GdkDevice        *device,
Packit 496598
                                                       GdkEventSequence *sequence,
Packit 496598
                                                       gulong            serial);
Packit 496598
gboolean            _gdk_display_end_touch_grab       (GdkDisplay       *display,
Packit 496598
                                                       GdkDevice        *device,
Packit 496598
                                                       GdkEventSequence *sequence);
Packit 496598
void                _gdk_display_enable_motion_hints  (GdkDisplay       *display,
Packit 496598
                                                       GdkDevice        *device);
Packit 496598
GdkPointerWindowInfo * _gdk_display_get_pointer_info  (GdkDisplay       *display,
Packit 496598
                                                       GdkDevice        *device);
Packit 496598
void                _gdk_display_pointer_info_foreach (GdkDisplay       *display,
Packit 496598
                                                       GdkDisplayPointerInfoForeach func,
Packit 496598
                                                       gpointer          user_data);
Packit 496598
gulong              _gdk_display_get_next_serial      (GdkDisplay       *display);
Packit 496598
void                _gdk_display_pause_events         (GdkDisplay       *display);
Packit 496598
void                _gdk_display_unpause_events       (GdkDisplay       *display);
Packit 496598
void                _gdk_display_event_data_copy      (GdkDisplay       *display,
Packit 496598
                                                       const GdkEvent   *event,
Packit 496598
                                                       GdkEvent         *new_event);
Packit 496598
void                _gdk_display_event_data_free      (GdkDisplay       *display,
Packit 496598
                                                       GdkEvent         *event);
Packit 496598
void                _gdk_display_create_window_impl   (GdkDisplay       *display,
Packit 496598
                                                       GdkWindow        *window,
Packit 496598
                                                       GdkWindow        *real_parent,
Packit 496598
                                                       GdkScreen        *screen,
Packit 496598
                                                       GdkEventMask      event_mask,
Packit 496598
                                                       GdkWindowAttr    *attributes,
Packit 496598
                                                       gint              attributes_mask);
Packit 496598
GdkWindow *         _gdk_display_create_window        (GdkDisplay       *display);
Packit 496598
Packit 496598
gboolean            gdk_display_make_gl_context_current  (GdkDisplay        *display,
Packit 496598
                                                          GdkGLContext      *context);
Packit 496598
Packit 496598
void                gdk_display_add_seat              (GdkDisplay       *display,
Packit 496598
                                                       GdkSeat          *seat);
Packit 496598
void                gdk_display_remove_seat           (GdkDisplay       *display,
Packit 496598
                                                       GdkSeat          *seat);
Packit 496598
void                gdk_display_monitor_added         (GdkDisplay       *display,
Packit 496598
                                                       GdkMonitor       *monitor);
Packit 496598
void                gdk_display_monitor_removed       (GdkDisplay       *display,
Packit 496598
                                                       GdkMonitor       *monitor);
Packit 496598
Packit 496598
G_END_DECLS
Packit 496598
Packit 496598
#endif  /* __GDK_DISPLAY_PRIVATE_H__ */