[libgda/LIBGDA_5.0] GdauiRtEditor: better control cursor position when toolbar is hidden and shown again
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda/LIBGDA_5.0] GdauiRtEditor: better control cursor position when toolbar is hidden and shown again
- Date: Thu, 19 Jan 2012 19:22:25 +0000 (UTC)
commit 73b5a95d2f33e62916a51c60a35c6c7da171ab96
Author: Vivien Malerba <malerba gnome-db org>
Date: Wed Jan 18 19:24:43 2012 +0100
GdauiRtEditor: better control cursor position when toolbar is hidden and shown again
libgda-ui/gdaui-rt-editor.c | 29 +++++++++++++++++++++++++----
1 files changed, 25 insertions(+), 4 deletions(-)
---
diff --git a/libgda-ui/gdaui-rt-editor.c b/libgda-ui/gdaui-rt-editor.c
index cdc0c90..66ceedc 100644
--- a/libgda-ui/gdaui-rt-editor.c
+++ b/libgda-ui/gdaui-rt-editor.c
@@ -69,6 +69,8 @@ typedef struct {
struct _GdauiRtEditorPriv
{
GtkTextView *textview;
+ GtkAdjustment *vadj;
+ gdouble vadj_value;
GtkTextBuffer *textbuffer;
GtkWidget *toolbar;
GtkActionGroup *actions_group;
@@ -299,12 +301,14 @@ static void
gdaui_rt_editor_init (GdauiRtEditor *rte)
{
GtkWidget *sw, *textview, *toolbar;
+ GtkAdjustment *adj;
gtk_orientable_set_orientation (GTK_ORIENTABLE (rte), GTK_ORIENTATION_VERTICAL);
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (sw));
gtk_box_pack_end (GTK_BOX (rte), sw, TRUE, TRUE, 0);
textview = gtk_text_view_new ();
@@ -317,6 +321,8 @@ gdaui_rt_editor_init (GdauiRtEditor *rte)
rte->priv = g_new0 (GdauiRtEditorPriv, 1);
rte->priv->sw = sw;
+ rte->priv->vadj = adj;
+ rte->priv->vadj_value = 0.;
rte->priv->saved_for_help = NULL;
rte->priv->enable_changed_signal = TRUE;
rte->priv->no_background = FALSE;
@@ -1393,8 +1399,15 @@ get_markup_token (GtkTextIter *iter, gint *out_nb_spaces_before, GtkTextIter *ou
else if (c == '/') {
c = get_char_at_iter (&inti, TRUE);
if (c == '/') {
- SET_OUT;
- return MARKUP_ITALIC;
+ GtkTextIter previ;
+ previ = inti;
+ if (gtk_text_iter_backward_char (&previ) &&
+ gtk_text_iter_backward_char (&previ) &&
+ (get_char_at_iter (&previ, FALSE) == ':')) {}
+ else {
+ SET_OUT;
+ return MARKUP_ITALIC;
+ }
}
}
else if (c == '_') {
@@ -1976,10 +1989,18 @@ show_hide_toolbar (GdauiRtEditor *editor)
gtk_widget_has_focus (GTK_WIDGET (editor->priv->textview)))
doshow = TRUE;
- if (doshow)
+ if (doshow) {
gtk_widget_show (editor->priv->toolbar);
- else
+ if (editor->priv->vadj_value != 0.) {
+ while (gtk_events_pending ())
+ gtk_main_iteration ();
+ gtk_adjustment_set_value (editor->priv->vadj, editor->priv->vadj_value);
+ }
+ }
+ else {
+ editor->priv->vadj_value = gtk_adjustment_get_value (editor->priv->vadj);
gtk_widget_hide (editor->priv->toolbar);
+ }
if (editor->priv->show_markup ||
! gtk_text_view_get_editable (editor->priv->textview))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]