printeroptionwidget: Update on combo-entry change

Connect to "changed" signal of the entry displayed with combobox
for some options (e.g. watermark text or passcode). This ensures
that the strings are propagated to the printer backend.

Fixes #6782
This commit is contained in:
Marek Kasik
2024-07-31 16:37:59 +02:00
parent a02d4ba2a1
commit 6435d5083a

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,9 @@ combo_changed_cb (GtkWidget *combo,
if (changed)
{
GtkWidget *entry = gtk_widget_get_first_child (priv->combo);
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);
}
value = filtered_val;
}
@@ -825,6 +826,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 +974,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);