[libgda/LIBGDA_4.2] GdauiRtEditor: better control cursor position when toolbar is hidden and shown again



commit f00df5a1695f7517b9d047fe15c61a2cb169ce8e
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 1b10a80..e062ba1 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;
@@ -298,10 +300,12 @@ static void
 gdaui_rt_editor_init (GdauiRtEditor *rte)
 {
 	GtkWidget *sw, *textview, *toolbar;
+	GtkAdjustment *adj;
 
 	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 ();
@@ -314,6 +318,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;
@@ -1383,8 +1389,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 == '_') {
@@ -1966,10 +1979,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]