mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-25 13:11:13 +00:00
Moved gtk_text_view_update_im_spot_location() calls into an idle, fixes
2007-11-11 Yevgen Muntyan <muntyan@tamu.edu> * gtk/gtktextview.c: Moved gtk_text_view_update_im_spot_location() calls into an idle, fixes #494776. GtkTextViewPrivate:im_spot_idle, do_update_im_spot_location(), queue_update_im_spot_location(), flush_update_im_spot_location(): new field and functions to queue the call; (changed_handler): call queue_update_im_spot_location() instead of gtk_text_view_update_im_spot_location(); (gtk_text_view_key_press_event): flush the idle here. svn path=/trunk/; revision=18984
This commit is contained in:
parent
d65049378b
commit
c9371f873b
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
|||||||
|
2007-11-11 Yevgen Muntyan <muntyan@tamu.edu>
|
||||||
|
|
||||||
|
* gtk/gtktextview.c: Moved gtk_text_view_update_im_spot_location()
|
||||||
|
calls into an idle, fixes #494776.
|
||||||
|
GtkTextViewPrivate:im_spot_idle, do_update_im_spot_location(),
|
||||||
|
queue_update_im_spot_location(), flush_update_im_spot_location(): new
|
||||||
|
field and functions to queue the call;
|
||||||
|
(changed_handler): call queue_update_im_spot_location() instead of
|
||||||
|
gtk_text_view_update_im_spot_location();
|
||||||
|
(gtk_text_view_key_press_event): flush the idle here.
|
||||||
|
|
||||||
2007-11-10 Ryan Lortie <desrt@desrt.ca>
|
2007-11-10 Ryan Lortie <desrt@desrt.ca>
|
||||||
|
|
||||||
* gtk/gtkbuilder.c: Convert delayed_properties hashtable to linked
|
* gtk/gtkbuilder.c: Convert delayed_properties hashtable to linked
|
||||||
|
@ -107,6 +107,7 @@ typedef struct _GtkTextViewPrivate GtkTextViewPrivate;
|
|||||||
struct _GtkTextViewPrivate
|
struct _GtkTextViewPrivate
|
||||||
{
|
{
|
||||||
guint blink_time; /* time in msec the cursor has blinked since last user event */
|
guint blink_time; /* time in msec the cursor has blinked since last user event */
|
||||||
|
guint im_spot_idle;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -1991,6 +1992,49 @@ gtk_text_view_update_im_spot_location (GtkTextView *text_view)
|
|||||||
gtk_im_context_set_cursor_location (text_view->im_context, &area);
|
gtk_im_context_set_cursor_location (text_view->im_context, &area);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
do_update_im_spot_location (gpointer text_view)
|
||||||
|
{
|
||||||
|
GtkTextViewPrivate *priv;
|
||||||
|
|
||||||
|
priv = GTK_TEXT_VIEW_GET_PRIVATE (text_view);
|
||||||
|
priv->im_spot_idle = 0;
|
||||||
|
|
||||||
|
gtk_text_view_update_im_spot_location (text_view);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
queue_update_im_spot_location (GtkTextView *text_view)
|
||||||
|
{
|
||||||
|
GtkTextViewPrivate *priv;
|
||||||
|
|
||||||
|
priv = GTK_TEXT_VIEW_GET_PRIVATE (text_view);
|
||||||
|
|
||||||
|
/* Use priority a little higher than GTK_TEXT_VIEW_PRIORITY_VALIDATE,
|
||||||
|
* so we don't wait until the entire buffer has been validated. */
|
||||||
|
if (!priv->im_spot_idle)
|
||||||
|
priv->im_spot_idle = gdk_threads_add_idle_full (GTK_TEXT_VIEW_PRIORITY_VALIDATE - 1,
|
||||||
|
do_update_im_spot_location,
|
||||||
|
text_view,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
flush_update_im_spot_location (GtkTextView *text_view)
|
||||||
|
{
|
||||||
|
GtkTextViewPrivate *priv;
|
||||||
|
|
||||||
|
priv = GTK_TEXT_VIEW_GET_PRIVATE (text_view);
|
||||||
|
|
||||||
|
if (priv->im_spot_idle)
|
||||||
|
{
|
||||||
|
g_source_remove (priv->im_spot_idle);
|
||||||
|
priv->im_spot_idle = 0;
|
||||||
|
gtk_text_view_update_im_spot_location (text_view);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gtk_text_view_scroll_to_mark:
|
* gtk_text_view_scroll_to_mark:
|
||||||
* @text_view: a #GtkTextView
|
* @text_view: a #GtkTextView
|
||||||
@ -2699,8 +2743,10 @@ static void
|
|||||||
gtk_text_view_destroy (GtkObject *object)
|
gtk_text_view_destroy (GtkObject *object)
|
||||||
{
|
{
|
||||||
GtkTextView *text_view;
|
GtkTextView *text_view;
|
||||||
|
GtkTextViewPrivate *priv;
|
||||||
|
|
||||||
text_view = GTK_TEXT_VIEW (object);
|
text_view = GTK_TEXT_VIEW (object);
|
||||||
|
priv = GTK_TEXT_VIEW_GET_PRIVATE (text_view);
|
||||||
|
|
||||||
gtk_text_view_remove_validate_idles (text_view);
|
gtk_text_view_remove_validate_idles (text_view);
|
||||||
gtk_text_view_set_buffer (text_view, NULL);
|
gtk_text_view_set_buffer (text_view, NULL);
|
||||||
@ -2712,6 +2758,12 @@ gtk_text_view_destroy (GtkObject *object)
|
|||||||
text_view->scroll_timeout = 0;
|
text_view->scroll_timeout = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (priv->im_spot_idle)
|
||||||
|
{
|
||||||
|
g_source_remove (priv->im_spot_idle);
|
||||||
|
priv->im_spot_idle = 0;
|
||||||
|
}
|
||||||
|
|
||||||
(* GTK_OBJECT_CLASS (gtk_text_view_parent_class)->destroy) (object);
|
(* GTK_OBJECT_CLASS (gtk_text_view_parent_class)->destroy) (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3529,7 +3581,7 @@ changed_handler (GtkTextLayout *layout,
|
|||||||
text_window_invalidate_rect (text_view->bottom_window,
|
text_window_invalidate_rect (text_view->bottom_window,
|
||||||
&redraw_rect);
|
&redraw_rect);
|
||||||
|
|
||||||
gtk_text_view_update_im_spot_location (text_view);
|
queue_update_im_spot_location (text_view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4025,6 +4077,9 @@ gtk_text_view_key_press_event (GtkWidget *widget, GdkEventKey *event)
|
|||||||
get_buffer (text_view) == NULL)
|
get_buffer (text_view) == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
/* Make sure input method knows where it is */
|
||||||
|
flush_update_im_spot_location (text_view);
|
||||||
|
|
||||||
insert = gtk_text_buffer_get_insert (get_buffer (text_view));
|
insert = gtk_text_buffer_get_insert (get_buffer (text_view));
|
||||||
gtk_text_buffer_get_iter_at_mark (get_buffer (text_view), &iter, insert);
|
gtk_text_buffer_get_iter_at_mark (get_buffer (text_view), &iter, insert);
|
||||||
can_insert = gtk_text_iter_can_insert (&iter, text_view->editable);
|
can_insert = gtk_text_iter_can_insert (&iter, text_view->editable);
|
||||||
|
Loading…
Reference in New Issue
Block a user