break;
case PROP_TEXT_COLUMN:
- gtk_entry_completion_set_text_column (completion,
- g_value_get_int (value));
+ priv->text_column = g_value_get_int (value);
break;
case PROP_INLINE_COMPLETION:
{
completion->priv->inline_completion = inline_completion;
- if (completion->priv->entry)
- {
- disconnect_completion_signals (completion);
- connect_completion_signals (completion);
- }
-
g_object_notify (G_OBJECT (completion), "inline-completion");
}
}
{
completion->priv->popup_completion = popup_completion;
- if (completion->priv->entry)
- {
- disconnect_completion_signals (completion);
- connect_completion_signals (completion);
- }
-
g_object_notify (G_OBJECT (completion), "popup-completion");
}
}
gint matches, actions = 0;
GtkEntryCompletion *completion = GTK_ENTRY_COMPLETION (user_data);
+ if (!completion->priv->popup_completion)
+ return FALSE;
+
if (event->keyval == GDK_KEY_Return ||
event->keyval == GDK_KEY_KP_Enter ||
event->keyval == GDK_KEY_ISO_Enter ||
GtkEntry *entry = GTK_ENTRY (widget);
GdkDevice *device;
+ if (!completion->priv->popup_completion)
+ return;
+
/* (re)install completion timeout */
if (completion->priv->completion_timeout)
g_source_remove (completion->priv->completion_timeout);
clear_completion_callback (GtkEntry *entry,
GParamSpec *pspec)
{
+ GtkEntryCompletion *completion = gtk_entry_get_completion (entry);
+
+ if (!completion->priv->inline_completion)
+ return;
+
if (pspec->name == I_("cursor-position") ||
pspec->name == I_("selection-bound"))
- {
- GtkEntryCompletion *completion = gtk_entry_get_completion (entry);
-
- completion->priv->has_completion = FALSE;
- }
+ completion->priv->has_completion = FALSE;
}
static gboolean
{
GtkEntryCompletion *completion = gtk_entry_get_completion (entry);
+ if (!completion->priv->inline_completion)
+ return FALSE;
+
if (completion->priv->has_completion)
gtk_editable_set_position (GTK_EDITABLE (entry),
gtk_entry_buffer_get_length (gtk_entry_get_buffer (entry)));
gint position,
GtkEntryCompletion *completion)
{
+ if (!completion->priv->inline_completion)
+ return;
+
/* idle to update the selection based on the file list */
if (completion->priv->check_completion_idle == NULL)
{
static void
connect_completion_signals (GtkEntryCompletion *completion)
{
- if (completion->priv->popup_completion)
- {
- completion->priv->changed_id =
- g_signal_connect (completion->priv->entry, "changed",
- G_CALLBACK (gtk_entry_completion_changed), completion);
- g_signal_connect (completion->priv->entry, "key-press-event",
- G_CALLBACK (gtk_entry_completion_key_press), completion);
- }
+ completion->priv->changed_id =
+ g_signal_connect (completion->priv->entry, "changed",
+ G_CALLBACK (gtk_entry_completion_changed), completion);
+ g_signal_connect (completion->priv->entry, "key-press-event",
+ G_CALLBACK (gtk_entry_completion_key_press), completion);
- if (completion->priv->inline_completion)
- {
- completion->priv->insert_text_id =
- g_signal_connect (completion->priv->entry, "insert-text",
- G_CALLBACK (completion_insert_text_callback), completion);
- g_signal_connect (completion->priv->entry, "notify",
- G_CALLBACK (clear_completion_callback), completion);
- g_signal_connect (completion->priv->entry, "activate",
- G_CALLBACK (accept_completion_callback), completion);
- g_signal_connect (completion->priv->entry, "focus-out-event",
- G_CALLBACK (accept_completion_callback), completion);
- }
+ completion->priv->insert_text_id =
+ g_signal_connect (completion->priv->entry, "insert-text",
+ G_CALLBACK (completion_insert_text_callback), completion);
+ g_signal_connect (completion->priv->entry, "notify",
+ G_CALLBACK (clear_completion_callback), completion);
+ g_signal_connect (completion->priv->entry, "activate",
+ G_CALLBACK (accept_completion_callback), completion);
+ g_signal_connect (completion->priv->entry, "focus-out-event",
+ G_CALLBACK (accept_completion_callback), completion);
}
+static void
+set_accessible_relation (GtkWidget *window,
+ GtkWidget *entry)
+{
+ AtkObject *window_accessible;
+ AtkObject *entry_accessible;
+
+ window_accessible = gtk_widget_get_accessible (window);
+ entry_accessible = gtk_widget_get_accessible (entry);
+
+ atk_object_add_relationship (window_accessible,
+ ATK_RELATION_POPUP_FOR,
+ entry_accessible);
+}
+
+static void
+unset_accessible_relation (GtkWidget *window,
+ GtkWidget *entry)
+{
+ AtkObject *window_accessible;
+ AtkObject *entry_accessible;
+
+ window_accessible = gtk_widget_get_accessible (window);
+ entry_accessible = gtk_widget_get_accessible (entry);
+
+ atk_object_remove_relationship (window_accessible,
+ ATK_RELATION_POPUP_FOR,
+ entry_accessible);
+}
static void
disconnect_completion_signals (GtkEntryCompletion *completion)
disconnect_completion_signals (completion);
+ unset_accessible_relation (completion->priv->popup_window,
+ completion->priv->entry);
+
completion->priv->entry = NULL;
}
GtkEntry *entry)
{
completion->priv->entry = GTK_WIDGET (entry);
+
+ set_accessible_relation (completion->priv->popup_window,
+ completion->priv->entry);
+
connect_completion_signals (completion);
}