[gtk/matthiasc/for-master: 8/8] entrycompletion: Various fixes
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/matthiasc/for-master: 8/8] entrycompletion: Various fixes
- Date: Wed, 24 Jun 2020 04:29:52 +0000 (UTC)
commit 9c2eda2d2a21fda15fff2c622ae08daa166a4d3a
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Jun 24 00:26:27 2020 -0400
entrycompletion: Various fixes
Fix various issues that prevented inline completion
and inline selection from working reliably.
gtk/gtkentrycompletion.c | 50 ++++++++++++++++++++++++------------------------
1 file changed, 25 insertions(+), 25 deletions(-)
---
diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c
index cfb4430ebf..3977d6bf51 100644
--- a/gtk/gtkentrycompletion.c
+++ b/gtk/gtkentrycompletion.c
@@ -1351,23 +1351,24 @@ gtk_entry_completion_insert_completion_text (GtkEntryCompletion *completion,
{
gint len;
GtkText *text = gtk_entry_get_text_widget (GTK_ENTRY (completion->entry));
+ GtkEntryBuffer *buffer = gtk_text_get_buffer (text);
if (completion->changed_id > 0)
g_signal_handler_block (text, completion->changed_id);
if (completion->insert_text_id > 0)
- g_signal_handler_block (text, completion->insert_text_id);
+ g_signal_handler_block (buffer, completion->insert_text_id);
gtk_editable_set_text (GTK_EDITABLE (completion->entry), new_text);
- len = strlen (completion->completion_prefix);
+ len = g_utf8_strlen (completion->completion_prefix, -1);
gtk_editable_select_region (GTK_EDITABLE (completion->entry), len, -1);
if (completion->changed_id > 0)
g_signal_handler_unblock (text, completion->changed_id);
if (completion->insert_text_id > 0)
- g_signal_handler_unblock (text, completion->insert_text_id);
+ g_signal_handler_unblock (buffer, completion->insert_text_id);
}
static gboolean
@@ -1403,9 +1404,10 @@ gtk_entry_completion_insert_prefix (GtkEntryCompletion *completion)
gboolean done;
gchar *prefix;
GtkText *text = gtk_entry_get_text_widget (GTK_ENTRY (completion->entry));
+ GtkEntryBuffer *buffer = gtk_text_get_buffer (text);
if (completion->insert_text_id > 0)
- g_signal_handler_block (text, completion->insert_text_id);
+ g_signal_handler_block (buffer, completion->insert_text_id);
prefix = gtk_entry_completion_compute_prefix (completion,
gtk_editable_get_text (GTK_EDITABLE (completion->entry)));
@@ -1418,7 +1420,7 @@ gtk_entry_completion_insert_prefix (GtkEntryCompletion *completion)
}
if (completion->insert_text_id > 0)
- g_signal_handler_unblock (text, completion->insert_text_id);
+ g_signal_handler_unblock (buffer, completion->insert_text_id);
}
/**
@@ -1859,10 +1861,7 @@ gtk_entry_completion_key_pressed (GtkEventControllerKey *controller,
keypress_completion_out:
if (completion->inline_selection)
- {
- g_free (completion->completion_prefix);
- completion->completion_prefix = NULL;
- }
+ g_clear_pointer (&completion->completion_prefix, g_free);
return retval;
}
@@ -1873,8 +1872,7 @@ keypress_completion_out:
gtk_entry_reset_im_context (GTK_ENTRY (widget));
_gtk_entry_completion_popdown (completion);
- g_free (completion->completion_prefix);
- completion->completion_prefix = NULL;
+ g_clear_pointer (&completion->completion_prefix, g_free);
return FALSE;
}
@@ -1925,12 +1923,13 @@ keypress_completion_out:
retval = FALSE;
}
- g_free (completion->completion_prefix);
- completion->completion_prefix = NULL;
+ g_clear_pointer (&completion->completion_prefix, g_free);
return retval;
}
+ g_clear_pointer (&completion->completion_prefix, g_free);
+
return FALSE;
}
@@ -2014,11 +2013,11 @@ text_focus_out (GtkEntryCompletion *completion)
}
static void
-completion_insert_text_callback (GtkText *entry,
- const gchar *text,
- gint length,
- gint position,
- GtkEntryCompletion *completion)
+completion_inserted_text_callback (GtkEntryBuffer *buffer,
+ guint position,
+ const char *text,
+ guint length,
+ GtkEntryCompletion *completion)
{
if (!completion->inline_completion)
return;
@@ -2041,6 +2040,7 @@ connect_completion_signals (GtkEntryCompletion *completion)
{
GtkEventController *controller;
GtkText *text = gtk_entry_get_text_widget (GTK_ENTRY (completion->entry));
+ GtkEntryBuffer *buffer = gtk_text_get_buffer (text);
controller = completion->entry_key_controller = gtk_event_controller_key_new ();
gtk_event_controller_set_name (controller, "gtk-entry-completion");
@@ -2055,10 +2055,10 @@ connect_completion_signals (GtkEntryCompletion *completion)
completion->changed_id =
g_signal_connect (text, "changed", G_CALLBACK (gtk_entry_completion_changed), completion);
- completion->insert_text_id =
- g_signal_connect (text, "insert-text", G_CALLBACK (completion_insert_text_callback), completion);
- g_signal_connect (text, "notify", G_CALLBACK (clear_completion_callback), completion);
- g_signal_connect_swapped (text, "activate", G_CALLBACK (accept_completion_callback), completion);
+ completion->insert_text_id =
+ g_signal_connect (buffer, "inserted-text", G_CALLBACK (completion_inserted_text_callback), completion);
+ g_signal_connect (text, "notify", G_CALLBACK (clear_completion_callback), completion);
+ g_signal_connect_swapped (text, "activate", G_CALLBACK (accept_completion_callback), completion);
}
static void
@@ -2095,6 +2095,7 @@ static void
disconnect_completion_signals (GtkEntryCompletion *completion)
{
GtkText *text = gtk_entry_get_text_widget (GTK_ENTRY (completion->entry));
+ GtkEntryBuffer *buffer = gtk_text_get_buffer (text);
gtk_widget_remove_controller (GTK_WIDGET (text), completion->entry_key_controller);
gtk_widget_remove_controller (GTK_WIDGET (text), completion->entry_focus_controller);
@@ -2106,12 +2107,11 @@ disconnect_completion_signals (GtkEntryCompletion *completion)
completion->changed_id = 0;
}
if (completion->insert_text_id > 0 &&
- g_signal_handler_is_connected (text, completion->insert_text_id))
+ g_signal_handler_is_connected (buffer, completion->insert_text_id))
{
- g_signal_handler_disconnect (text, completion->insert_text_id);
+ g_signal_handler_disconnect (buffer, completion->insert_text_id);
completion->insert_text_id = 0;
}
- g_signal_handlers_disconnect_by_func (text, G_CALLBACK (completion_insert_text_callback), completion);
g_signal_handlers_disconnect_by_func (text, G_CALLBACK (clear_completion_callback), completion);
g_signal_handlers_disconnect_by_func (text, G_CALLBACK (accept_completion_callback), completion);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]