Merge branch 'update-on-print-comboentry-change' into 'main'

printeroptionwidget: Update on combo-entry change

Closes #6782

See merge request GNOME/gtk!7532
This commit is contained in:
Matthias Clasen
2024-08-30 11:11:55 +00:00

View File

@@ -44,6 +44,7 @@ struct GtkPrinterOptionWidgetPrivate
{
GtkPrinterOption *source;
gulong source_changed_handler;
gulong comboentry_changed_handler_id;
GtkWidget *check;
GtkWidget *combo;
@@ -765,9 +766,7 @@ filter_numeric (const char *val,
}
static void
combo_changed_cb (GtkWidget *combo,
GParamSpec *pspec,
GtkPrinterOptionWidget *widget)
handle_combo_entry_change (GtkPrinterOptionWidget *widget)
{
GtkPrinterOptionWidgetPrivate *priv = widget->priv;
char *value;
@@ -813,7 +812,21 @@ combo_changed_cb (GtkWidget *combo,
if (changed)
{
GtkWidget *entry = gtk_widget_get_first_child (priv->combo);
gssize buffer_length, filtered_buffer_length;
gint position;
position = gtk_editable_get_position (GTK_EDITABLE (entry));
buffer_length = gtk_entry_buffer_get_length (gtk_entry_get_buffer (GTK_ENTRY (entry)));
g_signal_handler_block (entry, priv->comboentry_changed_handler_id);
gtk_editable_set_text (GTK_EDITABLE (entry), filtered_val);
g_signal_handler_unblock (entry, priv->comboentry_changed_handler_id);
filtered_buffer_length = gtk_entry_buffer_get_length (gtk_entry_get_buffer (GTK_ENTRY (entry)));
/* Maintain position of the cursor with respect to the end of the buffer. */
if (position > 0 && filtered_buffer_length < buffer_length)
gtk_editable_set_position (GTK_EDITABLE (entry), position - (buffer_length - filtered_buffer_length));
}
value = filtered_val;
}
@@ -825,6 +838,21 @@ combo_changed_cb (GtkWidget *combo,
emit_changed (widget);
}
static void
combo_changed_cb (GtkWidget *combo,
GParamSpec *pspec,
GtkPrinterOptionWidget *widget)
{
handle_combo_entry_change (widget);
}
static void
comboentry_changed_cb (GtkEditable *editable,
GtkPrinterOptionWidget *widget)
{
handle_combo_entry_change (widget);
}
static void
entry_changed_cb (GtkWidget *entry,
GtkPrinterOptionWidget *widget)
@@ -958,9 +986,15 @@ construct_widgets (GtkPrinterOptionWidget *widget)
source->choices[i]);
gtk_box_append (GTK_BOX (widget), priv->combo);
if (GTK_IS_DROP_DOWN (priv->combo))
g_signal_connect (priv->combo, "notify::selected", G_CALLBACK (combo_changed_cb),widget);
{
g_signal_connect (priv->combo, "notify::selected", G_CALLBACK (combo_changed_cb),widget);
}
else
g_signal_connect (gtk_widget_get_last_child (priv->combo), "notify::selected",G_CALLBACK (combo_changed_cb), widget);
{
g_signal_connect (gtk_widget_get_last_child (priv->combo), "notify::selected", G_CALLBACK (combo_changed_cb), widget);
priv->comboentry_changed_handler_id = g_signal_connect (gtk_widget_get_first_child (priv->combo), "changed", G_CALLBACK (comboentry_changed_cb), widget);
}
text = g_strdup_printf ("%s:", source->display_text);
priv->label = gtk_label_new_with_mnemonic (text);