Revision: 1233 http://svn.sourceforge.net/geany/?rev=1233&view=rev Author: eht16 Date: 2007-01-27 10:45:47 -0800 (Sat, 27 Jan 2007)
Log Message: ----------- Fixed some scrolling issues with session files and files remotely open via the socket. Added need_scrolling flag to document struct.
Modified Paths: -------------- trunk/ChangeLog trunk/src/callbacks.c trunk/src/document.c trunk/src/document.h trunk/src/keyfile.c trunk/src/sci_cb.c trunk/src/sciwrappers.c trunk/src/sciwrappers.h
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-01-26 10:43:25 UTC (rev 1232) +++ trunk/ChangeLog 2007-01-27 18:45:47 UTC (rev 1233) @@ -1,3 +1,11 @@ +2007-01-27 Enrico Troeger enrico.troeger@uvena.de + + * src/callbacks.c, src/document.c, src/document.h, src/keyfile.c, + src/sci_cb.c, src/sciwrappers.c, src/sciwrappers.h: + Fixed some scrolling issues with session files and files remotely + open via the socket. Added need_scrolling flag to document struct. + + 2007-01-26 Enrico Tröger enrico.troeger@uvena.de
* src/document.c: Applied patch from Jeff Pohlmeyer to clear the line
Modified: trunk/src/callbacks.c =================================================================== --- trunk/src/callbacks.c 2007-01-26 10:43:25 UTC (rev 1232) +++ trunk/src/callbacks.c 2007-01-27 18:45:47 UTC (rev 1233) @@ -1995,10 +1995,10 @@ line = sci_get_current_line(doc_list[idx].sci, old_pos); ind_pos = sci_get_line_indent_position(doc_list[idx].sci, line);
- sci_set_current_position(doc_list[idx].sci, ind_pos); + sci_set_current_position(doc_list[idx].sci, ind_pos, TRUE); sci_cmd(doc_list[idx].sci, SCI_TAB); sci_set_current_position(doc_list[idx].sci, - (old_pos > ind_pos) ? old_pos + 1 : old_pos); + (old_pos > ind_pos) ? old_pos + 1 : old_pos, TRUE); } }
@@ -2024,10 +2024,10 @@
if (ind_pos == sci_get_position_from_line(doc_list[idx].sci, line)) return; - sci_set_current_position(doc_list[idx].sci, ind_pos); + sci_set_current_position(doc_list[idx].sci, ind_pos, TRUE); sci_cmd(doc_list[idx].sci, SCI_BACKTAB); sci_set_current_position(doc_list[idx].sci, - (old_pos >= ind_pos) ? old_pos - 1 : old_pos); + (old_pos >= ind_pos) ? old_pos - 1 : old_pos, TRUE); } }
Modified: trunk/src/document.c =================================================================== --- trunk/src/document.c 2007-01-26 10:43:25 UTC (rev 1232) +++ trunk/src/document.c 2007-01-27 18:45:47 UTC (rev 1233) @@ -312,6 +312,7 @@ this->line_breaking = app->pref_editor_line_breaking; this->use_auto_indention = app->pref_editor_use_auto_indention; this->has_tags = FALSE; + this->need_scrolling = FALSE;
treeviews_openfiles_add(new_idx); // sets this->iter
@@ -740,19 +741,19 @@ if (cl_options.goto_line >= 0) { // goto line which was specified on command line and then undefine the line sci_goto_line(doc_list[idx].sci, cl_options.goto_line - 1, TRUE); - sci_scroll_to_line(doc_list[idx].sci, cl_options.goto_line - 1, 0.5); + doc_list[idx].need_scrolling = TRUE; cl_options.goto_line = -1; } else if (pos >= 0) { - sci_goto_pos(doc_list[idx].sci, pos, FALSE); - if (reload) - sci_scroll_to_line(doc_list[idx].sci, -1, 0.5); + sci_set_current_position(doc_list[idx].sci, pos, FALSE); + doc_list[idx].need_scrolling = TRUE; } if (cl_options.goto_column >= 0) { // goto column which was specified on command line and then undefine the column gint cur_pos = sci_get_current_position(doc_list[idx].sci); - sci_set_current_position(doc_list[idx].sci, cur_pos + cl_options.goto_column); + sci_set_current_position(doc_list[idx].sci, cur_pos + cl_options.goto_column, FALSE); + doc_list[idx].need_scrolling = TRUE; cl_options.goto_column = -1; }
Modified: trunk/src/document.h =================================================================== --- trunk/src/document.h 2007-01-26 10:43:25 UTC (rev 1232) +++ trunk/src/document.h 2007-01-27 18:45:47 UTC (rev 1233) @@ -64,6 +64,8 @@ gboolean changed; gboolean line_breaking; gboolean use_auto_indention; + // whether the current position in the doc needs to be made visible on a tab switch event + gboolean need_scrolling; time_t last_check; // to remember the last disk check time_t mtime; GTrashStack *undo_actions;
Modified: trunk/src/keyfile.c =================================================================== --- trunk/src/keyfile.c 2007-01-26 10:43:25 UTC (rev 1232) +++ trunk/src/keyfile.c 2007-01-27 18:45:47 UTC (rev 1233) @@ -588,21 +588,6 @@ gtk_paned_set_position(GTK_PANED(lookup_widget(app->window, "vpaned1")), vpan_position); }
- // now the scintilla widget pages may need scrolling in view - if (app->pref_main_load_session) - { - gint idx; - guint tabnum = 0; - - while (tabnum < (guint) gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook))) - { - idx = document_get_n_idx(tabnum); - if (idx < 0) break; - sci_scroll_to_line(doc_list[idx].sci, -1, 0.5F); - tabnum++; - } - } - // set fullscreen after initial draw so that returning to normal view is the right size. // fullscreen mode is disabled by default, so act only if it is true if (app->fullscreen)
Modified: trunk/src/sci_cb.c =================================================================== --- trunk/src/sci_cb.c 2007-01-26 10:43:25 UTC (rev 1232) +++ trunk/src/sci_cb.c 2007-01-27 18:45:47 UTC (rev 1233) @@ -164,6 +164,12 @@ sci_cb_highlight_braces(sci, pos);
ui_update_statusbar(idx, pos); + + if (doc_list[idx].need_scrolling) + { // scroll the document if needed because here it is already realised + sci_scroll_to_line(doc_list[idx].sci, -1, 0.5F); + doc_list[idx].need_scrolling = FALSE; + }
#if 0 /// experimental code for inverting selections @@ -407,7 +413,7 @@ { sci_add_text(sci, "}"); } - sci_set_current_position(sci, pos); + sci_set_current_position(sci, pos, TRUE); }
@@ -1623,7 +1629,7 @@ else if (count_uncommented > 0) { gint eol_len = (sci_get_eol_mode(doc_list[idx].sci) == SC_EOL_CRLF) ? 2 : 1; - sci_set_current_position(doc_list[idx].sci, sel_start - co_len - eol_len); + sci_set_current_position(doc_list[idx].sci, sel_start - co_len - eol_len, TRUE); } }
@@ -2068,7 +2074,7 @@ else pos += strlen(indent);
- sci_set_current_position(doc_list[idx].sci, pos); + sci_set_current_position(doc_list[idx].sci, pos, TRUE); // reset the selection sci_set_anchor(doc_list[idx].sci, pos); }
Modified: trunk/src/sciwrappers.c =================================================================== --- trunk/src/sciwrappers.c 2007-01-26 10:43:25 UTC (rev 1232) +++ trunk/src/sciwrappers.c 2007-01-27 18:45:47 UTC (rev 1233) @@ -380,9 +380,15 @@ }
-void sci_set_current_position(ScintillaObject* sci, gint position ) +void sci_set_current_position(ScintillaObject* sci, gint position, gboolean scroll_to_caret) { - SSM(sci, SCI_GOTOPOS, position, 0); + if (scroll_to_caret) + SSM(sci, SCI_GOTOPOS, position, 0); + else + { + SSM(sci, SCI_SETCURRENTPOS, position, 0); + SSM(sci, SCI_SETANCHOR, position, 0); // to avoid creation of a selection + } }
Modified: trunk/src/sciwrappers.h =================================================================== --- trunk/src/sciwrappers.h 2007-01-26 10:43:25 UTC (rev 1232) +++ trunk/src/sciwrappers.h 2007-01-27 18:45:47 UTC (rev 1233) @@ -69,7 +69,7 @@ gint sci_get_line_from_position (ScintillaObject* sci, gint position); gint sci_get_position_from_line (ScintillaObject* sci, gint line ); gint sci_get_current_position (ScintillaObject* sci); -void sci_set_current_position (ScintillaObject* sci, gint position); +void sci_set_current_position (ScintillaObject* sci, gint position, gboolean scroll_to_caret); void sci_set_current_line (ScintillaObject* sci, gint line);
void sci_cut (ScintillaObject* sci);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.