[libgda/LIBGDA_4.2] 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_4.2] GdauiRtEditor: better control cursor position when toolbar is hidden and shown again
- Date: Wed, 18 Jan 2012 20:03:38 +0000 (UTC)
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]