[gtk/wip/matthiasc/popup4: 19/106] root: Add pointer focus apis
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/matthiasc/popup4: 19/106] root: Add pointer focus apis
- Date: Wed, 24 Apr 2019 11:38:52 +0000 (UTC)
commit 2323e41fb8c5b1c6154cb082925e8f7f3663e48b
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Mar 17 09:24:49 2019 -0400
root: Add pointer focus apis
This copies all the private GtkWindow apis for
handling pointer focus.
gtk/gtkpointerfocus.c | 2 +-
gtk/gtkpointerfocusprivate.h | 4 +--
gtk/gtkroot.c | 86 ++++++++++++++++++++++++++++++++++++++++++++
gtk/gtkroot.h | 29 +++++++++++++++
gtk/gtkrootprivate.h | 25 +++++++++++++
5 files changed, 143 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkpointerfocus.c b/gtk/gtkpointerfocus.c
index c24243d718..2eb68f1d2c 100644
--- a/gtk/gtkpointerfocus.c
+++ b/gtk/gtkpointerfocus.c
@@ -31,7 +31,7 @@ target_destroyed (gpointer data,
}
GtkPointerFocus *
-gtk_pointer_focus_new (GtkWindow *toplevel,
+gtk_pointer_focus_new (GtkRoot *toplevel,
GtkWidget *widget,
GdkDevice *device,
GdkEventSequence *sequence,
diff --git a/gtk/gtkpointerfocusprivate.h b/gtk/gtkpointerfocusprivate.h
index 02ab6e5c82..ac39a33b16 100644
--- a/gtk/gtkpointerfocusprivate.h
+++ b/gtk/gtkpointerfocusprivate.h
@@ -27,13 +27,13 @@ struct _GtkPointerFocus
gint ref_count;
GdkDevice *device;
GdkEventSequence *sequence;
- GtkWindow *toplevel;
+ GtkRoot *toplevel;
GtkWidget *target; /* Unaffected by the implicit grab */
GtkWidget *grab_widget;
gdouble x, y; /* In toplevel coordinates */
};
-GtkPointerFocus * gtk_pointer_focus_new (GtkWindow *toplevel,
+GtkPointerFocus * gtk_pointer_focus_new (GtkRoot *toplevel,
GtkWidget *widget,
GdkDevice *device,
GdkEventSequence *sequence,
diff --git a/gtk/gtkroot.c b/gtk/gtkroot.c
index 48d950151c..bc5f12f076 100644
--- a/gtk/gtkroot.c
+++ b/gtk/gtkroot.c
@@ -89,6 +89,30 @@ gtk_root_default_activate_key (GtkRoot *self,
return FALSE;
}
+static void
+gtk_root_default_update_pointer_focus (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence,
+ GtkWidget *target,
+ double x,
+ double y)
+{
+}
+
+static void
+gtk_root_default_update_pointer_focus_on_state_change (GtkRoot *root,
+ GtkWidget *widget)
+{
+}
+
+static GtkWidget *
+gtk_root_default_lookup_pointer_focus (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence)
+{
+ return NULL;
+}
+
static void
gtk_root_default_init (GtkRootInterface *iface)
{
@@ -99,6 +123,9 @@ gtk_root_default_init (GtkRootInterface *iface)
iface->add_mnemonic = gtk_root_default_add_mnemonic;
iface->remove_mnemonic = gtk_root_default_remove_mnemonic;
iface->activate_key = gtk_root_default_activate_key;
+ iface->update_pointer_focus = gtk_root_default_update_pointer_focus;
+ iface->update_pointer_focus_on_state_change = gtk_root_default_update_pointer_focus_on_state_change;
+ iface->lookup_pointer_focus = gtk_root_default_lookup_pointer_focus;
g_object_interface_install_property (iface,
g_param_spec_object ("focus-widget",
@@ -494,3 +521,62 @@ gtk_root_activate_key (GtkRoot *root,
return GTK_ROOT_GET_IFACE (root)->activate_key (root, event);
}
+
+void
+gtk_root_update_pointer_focus (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence,
+ GtkWidget *target,
+ double x,
+ double y)
+{
+ GTK_ROOT_GET_IFACE (root)->update_pointer_focus (root, device, sequence, target, x, y);
+}
+
+void
+gtk_root_update_pointer_focus_on_state_change (GtkRoot *root,
+ GtkWidget *widget)
+{
+ GTK_ROOT_GET_IFACE (root)->update_pointer_focus_on_state_change (root, widget);
+}
+
+GtkWidget *
+gtk_root_lookup_pointer_focus (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence)
+{
+ return GTK_ROOT_GET_IFACE (root)->lookup_pointer_focus (root, device, sequence);
+}
+
+GtkWidget *
+gtk_root_lookup_pointer_focus_implicit_grab (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence)
+{
+ return GTK_ROOT_GET_IFACE (root)->lookup_pointer_focus_implicit_grab (root, device, sequence);
+}
+
+GtkWidget *
+gtk_root_lookup_effective_pointer_focus (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence)
+{
+ return GTK_ROOT_GET_IFACE (root)->lookup_effective_pointer_focus (root, device, sequence);
+}
+
+void
+gtk_root_set_pointer_focus_grab (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence,
+ GtkWidget *target)
+{
+ GTK_ROOT_GET_IFACE (root)->set_pointer_focus_grab (root, device, sequence, target);
+}
+
+void
+gtk_root_maybe_update_cursor (GtkRoot *root,
+ GtkWidget *widget,
+ GdkDevice *device)
+{
+ GTK_ROOT_GET_IFACE (root)->maybe_update_cursor (root, widget, device);
+}
diff --git a/gtk/gtkroot.h b/gtk/gtkroot.h
index 77ad31f7e5..b045005eea 100644
--- a/gtk/gtkroot.h
+++ b/gtk/gtkroot.h
@@ -51,8 +51,11 @@ struct _GtkRootInterface
void (* get_surface_transform) (GtkRoot *root,
int *x,
int *y);
+
+ /* size allocation */
void (* check_resize) (GtkRoot *root);
+ /* mnemonics */
void (* add_mnemonic) (GtkRoot *root,
guint keyval,
GtkWidget *target);
@@ -61,6 +64,32 @@ struct _GtkRootInterface
GtkWidget *target);
gboolean (* activate_key) (GtkRoot *root,
GdkEventKey *event);
+
+ /* pointer focus */
+ void (* update_pointer_focus) (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence,
+ GtkWidget *target,
+ double x,
+ double y);
+ void (* update_pointer_focus_on_state_change) (GtkRoot *root,
+ GtkWidget *widget);
+ GtkWidget * (* lookup_pointer_focus) (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence);
+ GtkWidget * (* lookup_pointer_focus_implicit_grab) (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence);
+ GtkWidget * (* lookup_effective_pointer_focus) (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence);
+ void (* set_pointer_focus_grab) (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence,
+ GtkWidget *target);
+ void (* maybe_update_cursor) (GtkRoot *root,
+ GtkWidget *widget,
+ GdkDevice *device);
};
GDK_AVAILABLE_IN_ALL
diff --git a/gtk/gtkrootprivate.h b/gtk/gtkrootprivate.h
index 3b583661c0..0e2a43b4e7 100644
--- a/gtk/gtkrootprivate.h
+++ b/gtk/gtkrootprivate.h
@@ -19,6 +19,31 @@ void gtk_root_stop_layout_phase (GtkRoot
gboolean gtk_root_activate_key (GtkRoot *self,
GdkEventKey *event);
+void gtk_root_update_pointer_focus (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence,
+ GtkWidget *target,
+ double x,
+ double y);
+void gtk_root_update_pointer_focus_on_state_change (GtkRoot *root,
+ GtkWidget *widget);
+GtkWidget * gtk_root_lookup_pointer_focus (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence);
+GtkWidget * gtk_root_lookup_pointer_focus_implicit_grab (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence);
+GtkWidget * gtk_root_lookup_effective_pointer_focus (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence);
+void gtk_root_set_pointer_focus_grab (GtkRoot *root,
+ GdkDevice *device,
+ GdkEventSequence *sequence,
+ GtkWidget *target);
+void gtk_root_maybe_update_cursor (GtkRoot *root,
+ GtkWidget *widget,
+ GdkDevice *device);
+
enum {
GTK_ROOT_PROP_FOCUS_WIDGET,
GTK_ROOT_PROP_DEFAULT_WIDGET,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]