summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-02-28 16:27:42 -0500
committerMatthias Clasen <mclasen@redhat.com>2020-02-28 16:27:42 -0500
commit0ffb35c9e74462a4c91f71aacdeeeb58225cb25c (patch)
tree2cd3a65ea292c0d0a7109a774ed8213901c82a80
parentd60097f8fea8d1a437f0de75eee12c9a242b0ab9 (diff)
downloadgtk+-0ffb35c9e74462a4c91f71aacdeeeb58225cb25c.tar.gz
Drop device grabs
We were not using this api at all, so lets drop it.
-rw-r--r--docs/reference/gtk/gtk4-sections.txt3
-rw-r--r--gtk/gtkmain.c84
-rw-r--r--gtk/gtkmain.h8
-rw-r--r--gtk/gtkwidget.c9
-rw-r--r--gtk/gtkwindow.c6
-rw-r--r--gtk/gtkwindowgroup.c152
-rw-r--r--gtk/gtkwindowgroup.h3
7 files changed, 6 insertions, 259 deletions
diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt
index 08f27b2a7d..35524158ff 100644
--- a/docs/reference/gtk/gtk4-sections.txt
+++ b/docs/reference/gtk/gtk4-sections.txt
@@ -4369,7 +4369,6 @@ gtk_window_group_add_window
gtk_window_group_remove_window
gtk_window_group_list_windows
gtk_window_group_get_current_grab
-gtk_window_group_get_current_device_grab
<SUBSECTION Standard>
GTK_IS_WINDOW_GROUP
GTK_IS_WINDOW_GROUP_CLASS
@@ -4395,8 +4394,6 @@ gtk_init_check
gtk_grab_add
gtk_grab_get_current
gtk_grab_remove
-gtk_device_grab_add
-gtk_device_grab_remove
<SUBSECTION>
GTK_PRIORITY_RESIZE
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index 01e2f246cc..6eb078a7da 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -1657,7 +1657,6 @@ gtk_main_do_event (GdkEvent *event)
GtkWidget *grab_widget = NULL;
GtkWindowGroup *window_group;
GdkEvent *rewritten_event = NULL;
- GdkDevice *device;
GList *tmp_list;
if (gtk_inspector_handle_event (event))
@@ -1712,14 +1711,9 @@ gtk_main_do_event (GdkEvent *event)
goto cleanup;
window_group = gtk_main_get_window_group (target_widget);
- device = gdk_event_get_device (event);
-
- /* check whether there is a (device) grab in effect... */
- if (device)
- grab_widget = gtk_window_group_get_current_device_grab (window_group, device);
- if (!grab_widget)
- grab_widget = gtk_window_group_get_current_grab (window_group);
+ /* check whether there is a grab in effect... */
+ grab_widget = gtk_window_group_get_current_grab (window_group);
/* If the grab widget is an ancestor of the event widget
* then we send the event to the original event widget.
@@ -1738,13 +1732,6 @@ gtk_main_do_event (GdkEvent *event)
if (check_event_in_child_popover (target_widget, grab_widget))
grab_widget = target_widget;
- /* If the widget receiving events is actually blocked by another
- * device GTK grab
- */
- if (device &&
- _gtk_window_group_widget_is_blocked_for_device (window_group, grab_widget, device))
- goto cleanup;
-
/* Not all events get sent to the grabbing widget.
* The delete, destroy, expose, focus change and resize
* events still get sent to the event widget because
@@ -2109,64 +2096,6 @@ gtk_grab_remove (GtkWidget *widget)
}
/**
- * gtk_device_grab_add:
- * @widget: a #GtkWidget
- * @device: a #GdkDevice to grab on.
- * @block_others: %TRUE to prevent other devices to interact with @widget.
- *
- * Adds a GTK grab on @device, so all the events on @device and its
- * associated pointer or keyboard (if any) are delivered to @widget.
- * If the @block_others parameter is %TRUE, any other devices will be
- * unable to interact with @widget during the grab.
- */
-void
-gtk_device_grab_add (GtkWidget *widget,
- GdkDevice *device,
- gboolean block_others)
-{
- GtkWindowGroup *group;
- GtkWidget *old_grab_widget;
-
- g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (GDK_IS_DEVICE (device));
-
- group = gtk_main_get_window_group (widget);
- old_grab_widget = gtk_window_group_get_current_device_grab (group, device);
-
- if (old_grab_widget != widget)
- _gtk_window_group_add_device_grab (group, widget, device, block_others);
-
- gtk_grab_notify (group, device, old_grab_widget, widget, TRUE);
-}
-
-/**
- * gtk_device_grab_remove:
- * @widget: a #GtkWidget
- * @device: a #GdkDevice
- *
- * Removes a device grab from the given widget.
- *
- * You have to pair calls to gtk_device_grab_add() and
- * gtk_device_grab_remove().
- */
-void
-gtk_device_grab_remove (GtkWidget *widget,
- GdkDevice *device)
-{
- GtkWindowGroup *group;
- GtkWidget *new_grab_widget;
-
- g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (GDK_IS_DEVICE (device));
-
- group = gtk_main_get_window_group (widget);
- _gtk_window_group_remove_device_grab (group, widget, device);
- new_grab_widget = gtk_window_group_get_current_device_grab (group, device);
-
- gtk_grab_notify (group, device, widget, new_grab_widget, FALSE);
-}
-
-/**
* gtk_get_current_event:
*
* Obtains a reference of the event currently being processed by GTK.
@@ -2408,20 +2337,15 @@ gtk_propagate_event (GtkWidget *widget,
{
GtkWindowGroup *window_group;
GtkWidget *event_widget, *topmost = NULL;
- GdkDevice *device;
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
event_widget = gtk_get_event_widget (event);
window_group = gtk_main_get_window_group (event_widget);
- device = gdk_event_get_device (event);
- /* check whether there is a (device) grab in effect... */
- if (device)
- topmost = gtk_window_group_get_current_device_grab (window_group, device);
- if (!topmost)
- topmost = gtk_window_group_get_current_grab (window_group);
+ /* check whether there is a grab in effect... */
+ topmost = gtk_window_group_get_current_grab (window_group);
return gtk_propagate_event_internal (widget, event, topmost);
}
diff --git a/gtk/gtkmain.h b/gtk/gtkmain.h
index f6e8ae2b04..8c5ebdfd55 100644
--- a/gtk/gtkmain.h
+++ b/gtk/gtkmain.h
@@ -115,14 +115,6 @@ GDK_AVAILABLE_IN_ALL
void gtk_grab_remove (GtkWidget *widget);
GDK_AVAILABLE_IN_ALL
-void gtk_device_grab_add (GtkWidget *widget,
- GdkDevice *device,
- gboolean block_others);
-GDK_AVAILABLE_IN_ALL
-void gtk_device_grab_remove (GtkWidget *widget,
- GdkDevice *device);
-
-GDK_AVAILABLE_IN_ALL
GdkEvent * gtk_get_current_event (void);
GDK_AVAILABLE_IN_ALL
guint32 gtk_get_current_event_time (void);
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 65ced5f895..736bc8df15 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -5526,7 +5526,6 @@ gtk_widget_device_is_shadowed (GtkWidget *widget,
GtkRoot *root;
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
- g_return_val_if_fail (GDK_IS_DEVICE (device), FALSE);
if (!_gtk_widget_get_realized (widget))
return TRUE;
@@ -5538,14 +5537,6 @@ gtk_widget_device_is_shadowed (GtkWidget *widget,
else
group = gtk_window_get_group (NULL);
- grab_widget = gtk_window_group_get_current_device_grab (group, device);
-
- /* Widget not inside the hierarchy of grab_widget */
- if (grab_widget &&
- widget != grab_widget &&
- !gtk_widget_is_ancestor (widget, grab_widget))
- return TRUE;
-
grab_widget = gtk_window_group_get_current_grab (group);
if (grab_widget && widget != grab_widget &&
!gtk_widget_is_ancestor (widget, grab_widget))
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index b1943221b0..58fd464912 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -9494,10 +9494,8 @@ gtk_window_maybe_update_cursor (GtkWindow *window,
continue;
group = gtk_window_get_group (window);
- grab_widget = gtk_window_group_get_current_device_grab (group,
- focus->device);
- if (!grab_widget)
- grab_widget = gtk_window_group_get_current_grab (group);
+
+ grab_widget = gtk_window_group_get_current_grab (group);
if (!grab_widget)
grab_widget = gtk_pointer_focus_get_implicit_grab (focus);
diff --git a/gtk/gtkwindowgroup.c b/gtk/gtkwindowgroup.c
index b81c407362..aeadd467af 100644
--- a/gtk/gtkwindowgroup.c
+++ b/gtk/gtkwindowgroup.c
@@ -62,7 +62,6 @@ struct _GtkDeviceGrabInfo
struct _GtkWindowGroupPrivate
{
GSList *grabs;
- GSList *device_grabs;
};
G_DEFINE_TYPE_WITH_PRIVATE (GtkWindowGroup, gtk_window_group, G_TYPE_OBJECT)
@@ -98,7 +97,6 @@ window_group_cleanup_grabs (GtkWindowGroup *group,
GtkWindow *window)
{
GtkWindowGroupPrivate *priv;
- GtkDeviceGrabInfo *info;
GSList *tmp_list;
GSList *to_remove = NULL;
@@ -118,26 +116,6 @@ window_group_cleanup_grabs (GtkWindowGroup *group,
g_object_unref (to_remove->data);
to_remove = g_slist_delete_link (to_remove, to_remove);
}
-
- tmp_list = priv->device_grabs;
-
- while (tmp_list)
- {
- info = tmp_list->data;
-
- if (gtk_widget_get_root (info->widget) == (GtkRoot *) window)
- to_remove = g_slist_prepend (to_remove, info);
-
- tmp_list = tmp_list->next;
- }
-
- while (to_remove)
- {
- info = to_remove->data;
-
- gtk_device_grab_remove (info->widget, info->device);
- to_remove = g_slist_delete_link (to_remove, to_remove);
- }
}
/**
@@ -289,133 +267,3 @@ _gtk_window_group_remove_grab (GtkWindowGroup *window_group,
priv = window_group->priv;
priv->grabs = g_slist_remove (priv->grabs, widget);
}
-
-void
-_gtk_window_group_add_device_grab (GtkWindowGroup *window_group,
- GtkWidget *widget,
- GdkDevice *device,
- gboolean block_others)
-{
- GtkWindowGroupPrivate *priv;
- GtkDeviceGrabInfo *info;
-
- priv = window_group->priv;
-
- info = g_slice_new0 (GtkDeviceGrabInfo);
- info->widget = widget;
- info->device = device;
- info->block_others = block_others;
-
- priv->device_grabs = g_slist_prepend (priv->device_grabs, info);
-
- revoke_implicit_grabs (window_group, device, widget);
-}
-
-void
-_gtk_window_group_remove_device_grab (GtkWindowGroup *window_group,
- GtkWidget *widget,
- GdkDevice *device)
-{
- GtkWindowGroupPrivate *priv;
- GtkDeviceGrabInfo *info;
- GSList *list, *node = NULL;
- GdkDevice *other_device;
-
- priv = window_group->priv;
- other_device = gdk_device_get_associated_device (device);
- list = priv->device_grabs;
-
- while (list)
- {
- info = list->data;
-
- if (info->widget == widget &&
- (info->device == device ||
- info->device == other_device))
- {
- node = list;
- break;
- }
-
- list = list->next;
- }
-
- if (node)
- {
- info = node->data;
-
- priv->device_grabs = g_slist_delete_link (priv->device_grabs, node);
- g_slice_free (GtkDeviceGrabInfo, info);
- }
-}
-
-/**
- * gtk_window_group_get_current_device_grab:
- * @window_group: a #GtkWindowGroup
- * @device: a #GdkDevice
- *
- * Returns the current grab widget for @device, or %NULL if none.
- *
- * Returns: (nullable) (transfer none): The grab widget, or %NULL
- */
-GtkWidget *
-gtk_window_group_get_current_device_grab (GtkWindowGroup *window_group,
- GdkDevice *device)
-{
- GtkWindowGroupPrivate *priv;
- GtkDeviceGrabInfo *info;
- GdkDevice *other_device;
- GSList *list;
-
- g_return_val_if_fail (GTK_IS_WINDOW_GROUP (window_group), NULL);
- g_return_val_if_fail (GDK_IS_DEVICE (device), NULL);
-
- priv = window_group->priv;
- list = priv->device_grabs;
- other_device = gdk_device_get_associated_device (device);
-
- while (list)
- {
- info = list->data;
- list = list->next;
-
- if (info->device == device ||
- info->device == other_device)
- return info->widget;
- }
-
- return NULL;
-}
-
-gboolean
-_gtk_window_group_widget_is_blocked_for_device (GtkWindowGroup *window_group,
- GtkWidget *widget,
- GdkDevice *device)
-{
- GtkWindowGroupPrivate *priv;
- GtkDeviceGrabInfo *info;
- GdkDevice *other_device;
- GSList *list;
-
- priv = window_group->priv;
- other_device = gdk_device_get_associated_device (device);
- list = priv->device_grabs;
-
- while (list)
- {
- info = list->data;
- list = list->next;
-
- /* Look for blocking grabs on other device pairs
- * that have the passed widget within the GTK+ grab.
- */
- if (info->block_others &&
- info->device != device &&
- info->device != other_device &&
- (info->widget == widget ||
- gtk_widget_is_ancestor (widget, info->widget)))
- return TRUE;
- }
-
- return FALSE;
-}
diff --git a/gtk/gtkwindowgroup.h b/gtk/gtkwindowgroup.h
index a7c53f0c35..80910751ea 100644
--- a/gtk/gtkwindowgroup.h
+++ b/gtk/gtkwindowgroup.h
@@ -78,9 +78,6 @@ GList * gtk_window_group_list_windows (GtkWindowGroup *window_grou
GDK_AVAILABLE_IN_ALL
GtkWidget * gtk_window_group_get_current_grab (GtkWindowGroup *window_group);
-GDK_AVAILABLE_IN_ALL
-GtkWidget * gtk_window_group_get_current_device_grab (GtkWindowGroup *window_group,
- GdkDevice *device);
G_END_DECLS