SF.net SVN: geany-plugins:[1884] trunk/geany-plugins/geanycfp/src/geanycfp. c
wfraser at users.sourceforge.net
wfraser at xxxxx
Fri Jan 28 22:58:32 UTC 2011
Revision: 1884
http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1884&view=rev
Author: wfraser
Date: 2011-01-28 22:58:32 +0000 (Fri, 28 Jan 2011)
Log Message:
-----------
Fixed bug so that folds are always reinstated when a file is loaded.
Modified Paths:
--------------
trunk/geany-plugins/geanycfp/src/geanycfp.c
Modified: trunk/geany-plugins/geanycfp/src/geanycfp.c
===================================================================
--- trunk/geany-plugins/geanycfp/src/geanycfp.c 2011-01-28 22:19:32 UTC (rev 1883)
+++ trunk/geany-plugins/geanycfp/src/geanycfp.c 2011-01-28 22:58:32 UTC (rev 1884)
@@ -102,7 +102,6 @@
static GtkWidget *Edit_Macro_menu_item=NULL;
static Macro *RecordingMacro=NULL;
static GSList *mList=NULL;
-static GSList *foldingToReApply=NULL;
static gboolean bMacrosHaveChanged=FALSE;
/* default config file */
@@ -568,67 +567,8 @@
static gboolean Notification_Handler(GObject *obj, GeanyEditor *editor, SCNotification *nt,
gpointer user_data)
{
- gchar *cFoldData=NULL;
- MacroEvent *me;
- ScintillaObject* sci=document_get_current()->editor->sci;
- gint i,iBits,iFlags,iBitCounter,iLineCount;
- FileData* fdTemp;
- GSList * gslTemp=foldingToReApply;
+ MacroEvent *me;
- /* setting fold states may have been delayed until after folding points were calculated before
- * paint so wait for a re-paint and check to see if any folding data needs applying
- */
- if(nt->nmhdr.code==SCN_PAINTED)
- {
- /* step through foldingToReApply list looking for current document */
- while(gslTemp!=NULL)
- {
- fdTemp=(FileData*)(gslTemp->data);
- if(utils_str_equal(document_get_current()->file_name,fdTemp->pcFileName)==TRUE)
- {
- /* get fold data */
- cFoldData=fdTemp->pcFolding;
-
- /* remove FileData from list needing folds re-applying */
- foldingToReApply=g_slist_delete_link(foldingToReApply,gslTemp);
- break;
- }
-
- /* move onto next item in foldingToReApply */
- gslTemp=g_slist_next(gslTemp);
- }
-
- /* if there is folding data then set folds */
- if(cFoldData!=NULL)
- {
- iLineCount=scintilla_send_message(sci,SCI_GETLINECOUNT,0,0);
-
- /* go through lines setting fold status */
- for(i=0,iBitCounter=6;i<iLineCount;i++)
- {
- iFlags=scintilla_send_message(sci,SCI_GETFOLDLEVEL,i,0);
- /* ignore non-folding lines */
- if((iFlags & SC_FOLDLEVELHEADERFLAG)==0)
- continue;
-
- /* get next 6 fold states if needed */
- if(iBitCounter==6)
- {
- iBitCounter=0;
- iBits=base64_char_to_int[(gint)(*cFoldData)];
- cFoldData++;
- }
-
- /* set fold if needed */
- if(((iBits>>iBitCounter)&1)==0)
- scintilla_send_message(sci,SCI_TOGGLEFOLD,i,0);
-
- /* increment counter */
- iBitCounter++;
- }
- }
- }
-
/* ignore non macro recording messages */
if(nt->nmhdr.code!=SCN_MACRORECORD)
return FALSE;
@@ -1149,6 +1089,8 @@
ScintillaObject* sci=doc->editor->sci;
struct stat sBuf;
GtkWidget *dialog;
+ gchar *cFoldData=NULL;
+ gint iBits,iFlags,iBitCounter;
/* ensure have markers set */
CheckEditorSetup();
@@ -1186,10 +1128,37 @@
if(fd->pcFolding==NULL || bRememberFolds==FALSE)
break;
- /* can't apply fold states as folding points not yet created
- * so remember data so that can be applied after first paint when folding points will exist
- */
- foldingToReApply=g_slist_prepend(foldingToReApply,fd);
+ cFoldData=fd->pcFolding;
+
+ /* first ensure fold positions exist */
+ scintilla_send_message(sci,SCI_COLOURISE,0,-1);
+
+ iLineCount=scintilla_send_message(sci,SCI_GETLINECOUNT,0,0);
+
+ /* go through lines setting fold status */
+ for(i=0,iBitCounter=6;i<iLineCount;i++)
+ {
+ iFlags=scintilla_send_message(sci,SCI_GETFOLDLEVEL,i,0);
+ /* ignore non-folding lines */
+ if((iFlags & SC_FOLDLEVELHEADERFLAG)==0)
+ continue;
+
+ /* get next 6 fold states if needed */
+ if(iBitCounter==6)
+ {
+ iBitCounter=0;
+ iBits=base64_char_to_int[(gint)(*cFoldData)];
+ cFoldData++;
+ }
+
+ /* set fold if needed */
+ if(((iBits>>iBitCounter)&1)==0)
+ scintilla_send_message(sci,SCI_TOGGLEFOLD,i,0);
+
+ /* increment counter */
+ iBitCounter++;
+ }
+
break;
/* file has changed since Geany last saved but, try to load bookmarks anyway */
case GTK_RESPONSE_REJECT:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Plugins-Commits
mailing list