summaryrefslogtreecommitdiff
path: root/gtk/gtkaccellabel.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkaccellabel.c')
-rw-r--r--gtk/gtkaccellabel.c260
1 files changed, 2 insertions, 258 deletions
diff --git a/gtk/gtkaccellabel.c b/gtk/gtkaccellabel.c
index b1536eb58f..4fabce26a5 100644
--- a/gtk/gtkaccellabel.c
+++ b/gtk/gtkaccellabel.c
@@ -68,7 +68,6 @@
* set (see #GtkAccelFlags).
* A #GtkAccelLabel can display multiple accelerators and even signal names,
* though it is almost always used to display just one accelerator key.
- * ]|
*
* # CSS nodes
*
@@ -84,8 +83,6 @@
enum {
PROP_0,
- PROP_ACCEL_CLOSURE,
- PROP_ACCEL_WIDGET,
PROP_LABEL,
PROP_USE_UNDERLINE,
LAST_PROP
@@ -112,10 +109,6 @@ struct _GtkAccelLabelPrivate
GtkWidget *text_label;
GtkWidget *accel_label;
- GtkWidget *accel_widget; /* done */
- GClosure *accel_closure; /* has set function */
- GtkAccelGroup *accel_group; /* set by set_accel_closure() */
-
guint accel_key; /* manual accel key specification if != 0 */
GdkModifierType accel_mods;
};
@@ -130,7 +123,6 @@ static void gtk_accel_label_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec);
-static void gtk_accel_label_destroy (GtkWidget *widget);
static void gtk_accel_label_finalize (GObject *object);
G_DEFINE_TYPE_WITH_PRIVATE (GtkAccelLabel, gtk_accel_label, GTK_TYPE_WIDGET)
@@ -145,24 +137,8 @@ gtk_accel_label_class_init (GtkAccelLabelClass *class)
gobject_class->set_property = gtk_accel_label_set_property;
gobject_class->get_property = gtk_accel_label_get_property;
- widget_class->destroy = gtk_accel_label_destroy;
-
gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_ACCEL_LABEL);
- props[PROP_ACCEL_CLOSURE] =
- g_param_spec_boxed ("accel-closure",
- P_("Accelerator Closure"),
- P_("The closure to be monitored for accelerator changes"),
- G_TYPE_CLOSURE,
- GTK_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
-
- props[PROP_ACCEL_WIDGET] =
- g_param_spec_object ("accel-widget",
- P_("Accelerator Widget"),
- P_("The widget to be monitored for accelerator changes"),
- GTK_TYPE_WIDGET,
- GTK_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
-
props[PROP_LABEL] =
g_param_spec_string ("label",
P_("Label"),
@@ -195,12 +171,6 @@ gtk_accel_label_set_property (GObject *object,
switch (prop_id)
{
- case PROP_ACCEL_CLOSURE:
- gtk_accel_label_set_accel_closure (accel_label, g_value_get_boxed (value));
- break;
- case PROP_ACCEL_WIDGET:
- gtk_accel_label_set_accel_widget (accel_label, g_value_get_object (value));
- break;
case PROP_LABEL:
gtk_accel_label_set_label (accel_label, g_value_get_string (value));
break;
@@ -220,16 +190,9 @@ gtk_accel_label_get_property (GObject *object,
GParamSpec *pspec)
{
GtkAccelLabel *accel_label = GTK_ACCEL_LABEL (object);
- GtkAccelLabelPrivate *priv = gtk_accel_label_get_instance_private (accel_label);
switch (prop_id)
{
- case PROP_ACCEL_CLOSURE:
- g_value_set_boxed (value, priv->accel_closure);
- break;
- case PROP_ACCEL_WIDGET:
- g_value_set_object (value, priv->accel_widget);
- break;
case PROP_LABEL:
g_value_set_string (value, gtk_accel_label_get_label (accel_label));
break;
@@ -247,10 +210,6 @@ gtk_accel_label_init (GtkAccelLabel *accel_label)
{
GtkAccelLabelPrivate *priv = gtk_accel_label_get_instance_private (accel_label);
- priv->accel_widget = NULL;
- priv->accel_closure = NULL;
- priv->accel_group = NULL;
-
priv->text_label = gtk_label_new ("");
gtk_widget_set_hexpand (priv->text_label, TRUE);
gtk_label_set_xalign (GTK_LABEL (priv->text_label), 0.0f);
@@ -284,17 +243,6 @@ gtk_accel_label_new (const gchar *string)
}
static void
-gtk_accel_label_destroy (GtkWidget *widget)
-{
- GtkAccelLabel *accel_label = GTK_ACCEL_LABEL (widget);
-
- gtk_accel_label_set_accel_widget (accel_label, NULL);
- gtk_accel_label_set_accel_closure (accel_label, NULL);
-
- GTK_WIDGET_CLASS (gtk_accel_label_parent_class)->destroy (widget);
-}
-
-static void
gtk_accel_label_finalize (GObject *object)
{
GtkAccelLabel *accel_label = GTK_ACCEL_LABEL (object);
@@ -307,26 +255,6 @@ gtk_accel_label_finalize (GObject *object)
}
/**
- * gtk_accel_label_get_accel_widget:
- * @accel_label: a #GtkAccelLabel
- *
- * Fetches the widget monitored by this accelerator label. See
- * gtk_accel_label_set_accel_widget().
- *
- * Returns: (nullable) (transfer none): the widget monitored by @accel_label,
- * or %NULL if it is not monitoring a widget.
- **/
-GtkWidget *
-gtk_accel_label_get_accel_widget (GtkAccelLabel *accel_label)
-{
- GtkAccelLabelPrivate *priv = gtk_accel_label_get_instance_private (accel_label);
-
- g_return_val_if_fail (GTK_IS_ACCEL_LABEL (accel_label), NULL);
-
- return priv->accel_widget;
-}
-
-/**
* gtk_accel_label_get_accel_width:
* @accel_label: a #GtkAccelLabel.
*
@@ -350,175 +278,6 @@ gtk_accel_label_get_accel_width (GtkAccelLabel *accel_label)
return min;
}
-static void
-refetch_widget_accel_closure (GtkAccelLabel *accel_label)
-{
- GtkAccelLabelPrivate *priv = gtk_accel_label_get_instance_private (accel_label);
-
- g_return_if_fail (GTK_IS_ACCEL_LABEL (accel_label));
- g_return_if_fail (GTK_IS_WIDGET (priv->accel_widget));
-
- gtk_accel_label_set_accel_closure (accel_label, NULL);
-}
-
-static void
-accel_widget_weak_ref_cb (GtkAccelLabel *accel_label,
- GtkWidget *old_accel_widget)
-{
- GtkAccelLabelPrivate *priv = gtk_accel_label_get_instance_private (accel_label);
-
- g_return_if_fail (GTK_IS_ACCEL_LABEL (accel_label));
- g_return_if_fail (GTK_IS_WIDGET (priv->accel_widget));
-
- g_signal_handlers_disconnect_by_func (priv->accel_widget,
- refetch_widget_accel_closure,
- accel_label);
- priv->accel_widget = NULL;
- g_object_notify_by_pspec (G_OBJECT (accel_label), props[PROP_ACCEL_WIDGET]);
-}
-
-/**
- * gtk_accel_label_set_accel_widget:
- * @accel_label: a #GtkAccelLabel
- * @accel_widget: (nullable): the widget to be monitored, or %NULL
- *
- * Sets the widget to be monitored by this accelerator label. Passing %NULL for
- * @accel_widget will dissociate @accel_label from its current widget, if any.
- */
-void
-gtk_accel_label_set_accel_widget (GtkAccelLabel *accel_label,
- GtkWidget *accel_widget)
-{
- GtkAccelLabelPrivate *priv = gtk_accel_label_get_instance_private (accel_label);
-
- g_return_if_fail (GTK_IS_ACCEL_LABEL (accel_label));
-
- if (accel_widget)
- g_return_if_fail (GTK_IS_WIDGET (accel_widget));
-
- if (accel_widget != priv->accel_widget)
- {
- if (priv->accel_widget)
- {
- gtk_accel_label_set_accel_closure (accel_label, NULL);
- g_signal_handlers_disconnect_by_func (priv->accel_widget,
- refetch_widget_accel_closure,
- accel_label);
- g_object_weak_unref (G_OBJECT (priv->accel_widget),
- (GWeakNotify) accel_widget_weak_ref_cb, accel_label);
- }
-
- priv->accel_widget = accel_widget;
-
- if (priv->accel_widget)
- {
- g_object_weak_ref (G_OBJECT (priv->accel_widget),
- (GWeakNotify) accel_widget_weak_ref_cb, accel_label);
- g_signal_connect_object (priv->accel_widget, "accel-closures-changed",
- G_CALLBACK (refetch_widget_accel_closure),
- accel_label, G_CONNECT_SWAPPED);
- refetch_widget_accel_closure (accel_label);
- }
-
- g_object_notify_by_pspec (G_OBJECT (accel_label), props[PROP_ACCEL_WIDGET]);
- }
-}
-
-static void
-gtk_accel_label_reset (GtkAccelLabel *accel_label)
-{
- gtk_accel_label_refetch (accel_label);
-}
-
-static void
-check_accel_changed (GtkAccelGroup *accel_group,
- guint keyval,
- GdkModifierType modifier,
- GClosure *accel_closure,
- GtkAccelLabel *accel_label)
-{
- GtkAccelLabelPrivate *priv = gtk_accel_label_get_instance_private (accel_label);
-
- if (accel_closure == priv->accel_closure)
- gtk_accel_label_reset (accel_label);
-}
-
-/**
- * gtk_accel_label_set_accel_closure:
- * @accel_label: a #GtkAccelLabel
- * @accel_closure: (nullable): the closure to monitor for accelerator changes,
- * or %NULL
- *
- * Sets the closure to be monitored by this accelerator label. The closure
- * must be connected to an accelerator group; see gtk_accel_group_connect().
- * Passing %NULL for @accel_closure will dissociate @accel_label from its
- * current closure, if any.
- **/
-void
-gtk_accel_label_set_accel_closure (GtkAccelLabel *accel_label,
- GClosure *accel_closure)
-{
- GtkAccelLabelPrivate *priv = gtk_accel_label_get_instance_private (accel_label);
-
- g_return_if_fail (GTK_IS_ACCEL_LABEL (accel_label));
-
- if (accel_closure)
- g_return_if_fail (gtk_accel_group_from_accel_closure (accel_closure) != NULL);
-
- if (accel_closure != priv->accel_closure)
- {
- if (priv->accel_closure)
- {
- g_signal_handlers_disconnect_by_func (priv->accel_group,
- check_accel_changed,
- accel_label);
- priv->accel_group = NULL;
- g_closure_unref (priv->accel_closure);
- }
-
- priv->accel_closure = accel_closure;
-
- if (priv->accel_closure)
- {
- g_closure_ref (priv->accel_closure);
- priv->accel_group = gtk_accel_group_from_accel_closure (accel_closure);
- g_signal_connect_object (priv->accel_group, "accel-changed", G_CALLBACK (check_accel_changed),
- accel_label, 0);
- }
-
- gtk_accel_label_reset (accel_label);
- g_object_notify_by_pspec (G_OBJECT (accel_label), props[PROP_ACCEL_CLOSURE]);
- }
-}
-
-/**
- * gtk_accel_label_get_accel_closure:
- * @accel_label: a #GtkAccelLabel
- *
- * Fetches the closure monitored by this accelerator label. See
- * gtk_accel_label_set_accel_closure().
- *
- * Returns: (nullable) (transfer none): the closure monitored by @accel_label,
- * or %NULL if it is not monitoring a closure.
- */
-GClosure *
-gtk_accel_label_get_accel_closure (GtkAccelLabel *accel_label)
-{
- GtkAccelLabelPrivate *priv = gtk_accel_label_get_instance_private (accel_label);
-
- g_return_val_if_fail (GTK_IS_ACCEL_LABEL (accel_label), NULL);
-
- return priv->accel_closure;
-}
-
-static gboolean
-find_accel (GtkAccelKey *key,
- GClosure *closure,
- gpointer data)
-{
- return data == (gpointer) closure;
-}
-
/**
* gtk_accel_label_refetch:
* @accel_label: a #GtkAccelLabel.
@@ -542,7 +301,7 @@ gtk_accel_label_refetch (GtkAccelLabel *accel_label)
"gtk-enable-accels", &enable_accels,
NULL);
- if (enable_accels && (priv->accel_closure || priv->accel_key))
+ if (enable_accels && priv->accel_key)
{
gboolean have_accel = FALSE;
guint accel_key;
@@ -556,21 +315,6 @@ gtk_accel_label_refetch (GtkAccelLabel *accel_label)
have_accel = TRUE;
}
- /* If we don't have a hardcoded value, check the accel group */
- if (!have_accel)
- {
- GtkAccelKey *key;
-
- key = gtk_accel_group_find (priv->accel_group, find_accel, priv->accel_closure);
-
- if (key && key->accel_flags & GTK_ACCEL_VISIBLE)
- {
- accel_key = key->accel_key;
- accel_mods = key->accel_mods;
- have_accel = TRUE;
- }
- }
-
/* If we found a key using either method, set it */
if (have_accel)
accel_string = gtk_accelerator_get_label (accel_key, accel_mods);
@@ -615,7 +359,7 @@ gtk_accel_label_set_accel (GtkAccelLabel *accel_label,
priv->accel_key = accelerator_key;
priv->accel_mods = accelerator_mods;
- gtk_accel_label_reset (accel_label);
+ gtk_accel_label_refetch (accel_label);
}
/**