Emit word_click even as long as user is not selecting any text when releasing button
This fixes the need to do pixel-perfect clicks to open links in chat
This commit is contained in:
parent
edd57fdc86
commit
971e5cf4fe
|
@ -113,6 +113,7 @@ char *nocasestrstr (const char *text, const char *tofind); /* util.c */
|
||||||
int xtext_get_stamp_str (time_t, char **);
|
int xtext_get_stamp_str (time_t, char **);
|
||||||
static void gtk_xtext_render_page (GtkXText * xtext);
|
static void gtk_xtext_render_page (GtkXText * xtext);
|
||||||
static void gtk_xtext_calc_lines (xtext_buffer *buf, int);
|
static void gtk_xtext_calc_lines (xtext_buffer *buf, int);
|
||||||
|
static gboolean gtk_xtext_is_selecting (GtkXText *xtext);
|
||||||
static char *gtk_xtext_selection_get_text (GtkXText *xtext, int *len_ret);
|
static char *gtk_xtext_selection_get_text (GtkXText *xtext, int *len_ret);
|
||||||
static textentry *gtk_xtext_nth (GtkXText *xtext, int line, int *subline);
|
static textentry *gtk_xtext_nth (GtkXText *xtext, int line, int *subline);
|
||||||
static void gtk_xtext_adjustment_changed (GtkAdjustment * adj,
|
static void gtk_xtext_adjustment_changed (GtkAdjustment * adj,
|
||||||
|
@ -1772,7 +1773,6 @@ gtk_xtext_motion_notify (GtkWidget * widget, GdkEventMotion * event)
|
||||||
xtext->select_end_x = x;
|
xtext->select_end_x = x;
|
||||||
xtext->select_end_y = y;
|
xtext->select_end_y = y;
|
||||||
gtk_xtext_selection_update (xtext, event, y, !redraw);
|
gtk_xtext_selection_update (xtext, event, y, !redraw);
|
||||||
xtext->hilighting = TRUE;
|
|
||||||
|
|
||||||
/* user has pressed or released SHIFT, must redraw entire selection */
|
/* user has pressed or released SHIFT, must redraw entire selection */
|
||||||
if (redraw)
|
if (redraw)
|
||||||
|
@ -1973,13 +1973,10 @@ gtk_xtext_button_release (GtkWidget * widget, GdkEventButton * event)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!xtext->hilighting)
|
if (!gtk_xtext_is_selecting (xtext))
|
||||||
{
|
{
|
||||||
word = gtk_xtext_get_word (xtext, event->x, event->y, 0, 0, 0, 0);
|
word = gtk_xtext_get_word (xtext, event->x, event->y, 0, 0, 0, 0);
|
||||||
g_signal_emit (G_OBJECT (xtext), xtext_signals[WORD_CLICK], 0, word ? word : NULL, event);
|
g_signal_emit (G_OBJECT (xtext), xtext_signals[WORD_CLICK], 0, word ? word : NULL, event);
|
||||||
} else
|
|
||||||
{
|
|
||||||
xtext->hilighting = FALSE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2078,6 +2075,28 @@ gtk_xtext_selection_kill (GtkXText *xtext, GdkEventSelection *event)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_xtext_is_selecting (GtkXText *xtext)
|
||||||
|
{
|
||||||
|
textentry *ent;
|
||||||
|
xtext_buffer *buf;
|
||||||
|
|
||||||
|
buf = xtext->selection_buffer;
|
||||||
|
if (!buf)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
for (ent = buf->last_ent_start; ent; ent = ent->next)
|
||||||
|
{
|
||||||
|
if (ent->mark_start != -1 && ent->mark_end - ent->mark_start > 0)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
if (ent == buf->last_ent_end)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
gtk_xtext_selection_get_text (GtkXText *xtext, int *len_ret)
|
gtk_xtext_selection_get_text (GtkXText *xtext, int *len_ret)
|
||||||
{
|
{
|
||||||
|
|
|
@ -219,7 +219,6 @@ struct _GtkXText
|
||||||
unsigned int word_select:1;
|
unsigned int word_select:1;
|
||||||
unsigned int line_select:1;
|
unsigned int line_select:1;
|
||||||
unsigned int button_down:1;
|
unsigned int button_down:1;
|
||||||
unsigned int hilighting:1;
|
|
||||||
unsigned int dont_render:1;
|
unsigned int dont_render:1;
|
||||||
unsigned int dont_render2:1;
|
unsigned int dont_render2:1;
|
||||||
unsigned int cursor_hand:1;
|
unsigned int cursor_hand:1;
|
||||||
|
|
Loading…
Reference in New Issue