]> Pileus Git - ~andy/gtk/blobdiff - gdk/gdkdisplayprivate.h
stylecontext: Do invalidation on first resize container
[~andy/gtk] / gdk / gdkdisplayprivate.h
index 4b1530243d3ad9a11df4a682b9990239e4b6882a..b4559eb4cb3634247019ef0466fae4bbd1d5d5d6 100644 (file)
@@ -12,9 +12,7 @@
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
 #ifndef __GDK_DISPLAY_PRIVATE_H__
 
 G_BEGIN_DECLS
 
+#define GDK_DISPLAY_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_DISPLAY, GdkDisplayClass))
+#define GDK_IS_DISPLAY_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_DISPLAY))
+#define GDK_DISPLAY_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_DISPLAY, GdkDisplayClass))
+
+
 typedef struct _GdkDisplayClass GdkDisplayClass;
 
 /* Tracks information about the keyboard grab on this display */
@@ -45,16 +48,29 @@ typedef struct
   GdkWindow *native_window;
   gulong serial_start;
   gulong serial_end; /* exclusive, i.e. not active on serial_end */
-  gboolean owner_events;
   guint event_mask;
-  gboolean implicit;
   guint32 time;
   GdkGrabOwnership ownership;
 
   guint activated : 1;
   guint implicit_ungrab : 1;
+  guint owner_events : 1;
+  guint implicit : 1;
 } GdkDeviceGrabInfo;
 
+/* Tracks information about a touch implicit grab on this display */
+typedef struct
+{
+  GdkDevice *device;
+  GdkEventSequence *sequence;
+
+  GdkWindow *window;
+  GdkWindow *native_window;
+  gulong serial;
+  guint event_mask;
+  guint32 time;
+} GdkTouchGrabInfo;
+
 /* Tracks information about which window and position the pointer last was in.
  * This is useful when we need to synthesize events later.
  * Note that we track toplevel_under_pointer using enter/leave events,
@@ -70,6 +86,8 @@ typedef struct
   gdouble toplevel_x, toplevel_y;
   guint32 state;
   guint32 button;
+  GdkDevice *last_slave;
+  guint need_touch_press_enter : 1;
 } GdkPointerWindowInfo;
 
 typedef struct
@@ -95,27 +113,29 @@ struct _GdkDisplay
   guint double_click_time;  /* Maximum time between clicks in msecs */
   GdkDevice *core_pointer;  /* Core pointer device */
 
-  const GdkDisplayDeviceHooks *device_hooks; /* Hooks for querying pointer */
+  guint event_pause_count;       /* How many times events are blocked */
 
   guint closed             : 1;  /* Whether this display has been closed */
-  guint ignore_core_events : 1;  /* Don't send core motion and button event */
-
-  guint double_click_distance;   /* Maximum distance between clicks in pixels */
+  guint flushing_events    : 1;  /* Inside gdk_display_flush_events */
 
+  GArray *touch_implicit_grabs;
   GHashTable *device_grabs;
   GHashTable *motion_hint_info;
+  GdkDeviceManager *device_manager;
 
   GHashTable *pointers_info;  /* GdkPointerWindowInfo for each device */
   guint32 last_event_time;    /* Last reported event time from server */
 
-  GdkDeviceManager *device_manager;
+  guint double_click_distance;   /* Maximum distance between clicks in pixels */
 };
 
 struct _GdkDisplayClass
 {
   GObjectClass parent_class;
 
-  G_CONST_RETURN gchar *     (*get_name)           (GdkDisplay *display);
+  GType window_type;          /* type for native windows for this display, set in class_init */
+
+  const gchar *              (*get_name)           (GdkDisplay *display);
   gint                       (*get_n_screens)      (GdkDisplay *display);
   GdkScreen *                (*get_screen)         (GdkDisplay *display,
                                                     gint        screen_num);
@@ -158,18 +178,7 @@ struct _GdkDisplayClass
                                                          gint           y);
 
   GList *                    (*list_devices)       (GdkDisplay *display);
-  gboolean                   (*send_client_message) (GdkDisplay     *display,
-                                                     GdkEvent       *event,
-                                                     GdkNativeWindow winid);
-  void                       (*add_client_message_filter) (GdkDisplay   *display,
-                                                           GdkAtom       message_type,
-                                                           GdkFilterFunc func,
-                                                           gpointer      data);
   GdkAppLaunchContext *      (*get_app_launch_context) (GdkDisplay *display);
-  GdkNativeWindow            (*get_drag_protocol)      (GdkDisplay      *display,
-                                                        GdkNativeWindow  winid,
-                                                        GdkDragProtocol *protocol,
-                                                        guint           *version);
 
   void                       (*before_process_all_updates) (GdkDisplay *display);
   void                       (*after_process_all_updates)  (GdkDisplay *display);
@@ -191,6 +200,44 @@ struct _GdkDisplayClass
                                                     GdkWindowAttr *attributes,
                                                     gint           attributes_mask);
 
+  GdkKeymap *                (*get_keymap)         (GdkDisplay    *display);
+  void                       (*push_error_trap)    (GdkDisplay    *display);
+  gint                       (*pop_error_trap)     (GdkDisplay    *display,
+                                                    gboolean       ignore);
+
+  GdkWindow *                (*get_selection_owner) (GdkDisplay   *display,
+                                                     GdkAtom       selection);
+  gboolean                   (*set_selection_owner) (GdkDisplay   *display,
+                                                     GdkWindow    *owner,
+                                                     GdkAtom       selection,
+                                                     guint32       time,
+                                                     gboolean      send_event);
+  void                       (*send_selection_notify) (GdkDisplay *dispay,
+                                                       GdkWindow        *requestor,
+                                                       GdkAtom          selection,
+                                                       GdkAtom          target,
+                                                       GdkAtom          property,
+                                                       guint32          time);
+  gint                       (*get_selection_property) (GdkDisplay  *display,
+                                                        GdkWindow   *requestor,
+                                                        guchar     **data,
+                                                        GdkAtom     *type,
+                                                        gint        *format);
+  void                       (*convert_selection)      (GdkDisplay  *display,
+                                                        GdkWindow   *requestor,
+                                                        GdkAtom      selection,
+                                                        GdkAtom      target,
+                                                        guint32      time);
+
+  gint                   (*text_property_to_utf8_list) (GdkDisplay     *display,
+                                                        GdkAtom         encoding,
+                                                        gint            format,
+                                                        const guchar   *text,
+                                                        gint            length,
+                                                        gchar        ***list);
+  gchar *                (*utf8_to_string_target)      (GdkDisplay     *display,
+                                                        const gchar    *text);
+
   /* Signals */
   void (*closed) (GdkDisplay *display,
                   gboolean    is_error);
@@ -229,6 +276,21 @@ gboolean            _gdk_display_end_device_grab      (GdkDisplay       *display
 gboolean            _gdk_display_check_grab_ownership (GdkDisplay       *display,
                                                        GdkDevice        *device,
                                                        gulong            serial);
+void                _gdk_display_add_touch_grab       (GdkDisplay       *display,
+                                                       GdkDevice        *device,
+                                                       GdkEventSequence *sequence,
+                                                       GdkWindow        *window,
+                                                       GdkWindow        *native_window,
+                                                       GdkEventMask      event_mask,
+                                                       unsigned long     serial_start,
+                                                       guint32           time);
+GdkTouchGrabInfo *  _gdk_display_has_touch_grab       (GdkDisplay       *display,
+                                                       GdkDevice        *device,
+                                                       GdkEventSequence *sequence,
+                                                       gulong            serial);
+gboolean            _gdk_display_end_touch_grab       (GdkDisplay       *display,
+                                                       GdkDevice        *device,
+                                                       GdkEventSequence *sequence);
 void                _gdk_display_enable_motion_hints  (GdkDisplay       *display,
                                                        GdkDevice        *device);
 GdkPointerWindowInfo * _gdk_display_get_pointer_info  (GdkDisplay       *display,
@@ -237,6 +299,9 @@ void                _gdk_display_pointer_info_foreach (GdkDisplay       *display
                                                        GdkDisplayPointerInfoForeach func,
                                                        gpointer          user_data);
 gulong              _gdk_display_get_next_serial      (GdkDisplay       *display);
+void                _gdk_display_pause_events         (GdkDisplay       *display);
+void                _gdk_display_unpause_events       (GdkDisplay       *display);
+void                _gdk_display_flush_events         (GdkDisplay       *display);
 void                _gdk_display_event_data_copy      (GdkDisplay       *display,
                                                        const GdkEvent   *event,
                                                        GdkEvent         *new_event);
@@ -249,6 +314,7 @@ void                _gdk_display_create_window_impl   (GdkDisplay       *display
                                                        GdkEventMask      event_mask,
                                                        GdkWindowAttr    *attributes,
                                                        gint              attributes_mask);
+GdkWindow *         _gdk_display_create_window        (GdkDisplay       *display);
 
 G_END_DECLS