[gtk/blink-later: 2/3] textview: Delay initial cursor blinking
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/blink-later: 2/3] textview: Delay initial cursor blinking
- Date: Wed, 24 Jul 2019 01:53:18 +0000 (UTC)
commit 19ad4d67efc404ab0158f0b1d313265a98ebb102
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Jul 23 21:17:05 2019 -0400
textview: Delay initial cursor blinking
These changes follow the same changes for
gtktext.c in the previous commit.
gtk/gtktextview.c | 29 +++++++++++++++++------------
1 file changed, 17 insertions(+), 12 deletions(-)
---
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index db358cef01..66b8fb1274 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -5674,7 +5674,8 @@ static gboolean blink_cb (GtkWidget *widget,
static void
-add_blink_timeout (GtkTextView *self)
+add_blink_timeout (GtkTextView *self,
+ gboolean delay)
{
GtkTextViewPrivate *priv = self->priv;
BlinkData *data;
@@ -5687,6 +5688,8 @@ add_blink_timeout (GtkTextView *self)
data = g_new (BlinkData, 1);
data->start = priv->blink_start_time;
+ if (delay)
+ data->start += blink_time * 1000 / 2;
data->end = data->start + blink_time * 1000;
priv->blink_tick = gtk_widget_add_tick_callback (GTK_WIDGET (self),
@@ -5728,16 +5731,14 @@ blink_cb (GtkWidget *widget,
GdkFrameClock *clock,
gpointer user_data)
{
- GtkTextView *text_view;
- GtkTextViewPrivate *priv;
+ GtkTextView *text_view = GTK_TEXT_VIEW (widget);
+ GtkTextViewPrivate *priv = text_view->priv;
+ BlinkData *data = user_data;
gint blink_timeout;
gint blink_time;
guint64 now;
float phase;
- BlinkData *data = user_data;
-
- text_view = GTK_TEXT_VIEW (widget);
- priv = text_view->priv;
+ float alpha;
if (!gtk_widget_has_focus (GTK_WIDGET (text_view)))
{
@@ -5769,15 +5770,19 @@ blink_cb (GtkWidget *widget,
phase = (now - data->start) / (float) (data->end - data->start);
- priv->cursor_alpha = blink_alpha (phase);
-
if (now >= data->end)
{
data->start = data->end;
data->end = data->start + blink_time * 1000;
}
- gtk_widget_queue_draw (widget);
+ alpha = blink_alpha (phase);
+
+ if (priv->cursor_alpha != alpha)
+ {
+ priv->cursor_alpha = alpha;
+ gtk_widget_queue_draw (widget);
+ }
return G_SOURCE_CONTINUE;
}
@@ -5797,7 +5802,7 @@ gtk_text_view_check_cursor_blink (GtkTextView *text_view)
if (cursor_blinks (text_view))
{
if (!priv->blink_tick)
- add_blink_timeout (text_view);
+ add_blink_timeout (text_view, FALSE);
}
else
{
@@ -5812,7 +5817,7 @@ gtk_text_view_pend_cursor_blink (GtkTextView *text_view)
if (cursor_blinks (text_view))
{
remove_blink_timeout (text_view);
- add_blink_timeout (text_view);
+ add_blink_timeout (text_view, TRUE);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]