[geany/geany-plugins] 19c965: Enable user to save file settings in a file alongside the file itself so can more easily synchronise settings across different machines

William Fraser git-noreply at xxxxx
Wed Apr 25 19:11:57 UTC 2012


Branch:      refs/heads/master
Author:      William Fraser <william.fraser at virgin.net>
Committer:   William Fraser <william.fraser at virgin.net>
Date:        Wed, 25 Apr 2012 19:11:57
Commit:      19c9653e726b572a07ba92cfacb2693d6b8c11e6
             https://github.com/geany/geany-plugins/commit/19c9653e726b572a07ba92cfacb2693d6b8c11e6

Log Message:
-----------
Enable user to save file settings in a file alongside the file itself so can more easily synchronise settings across different machines


Modified Paths:
--------------
    geanynumberedbookmarks/src/geanynumberedbookmarks.c

Modified: geanynumberedbookmarks/src/geanynumberedbookmarks.c
479 files changed, 304 insertions(+), 175 deletions(-)
===================================================================
@@ -18,6 +18,7 @@
 #include <string.h>
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtk.h>
+#include <glib/gstdio.h>
 
 static const gint base64_char_to_int[]=
 {
@@ -60,6 +61,8 @@
 static gboolean bCenterWhenGotoBookmark=TRUE;
 static gboolean bRememberFolds=TRUE;
 static gint PositionInLine=0;
+static gint WhereToSaveFileDetails=0;
+static gchar *FileDetailsSuffix; /* initialised when settings loaded */
 
 /* internal variables */
 static gint iShiftNumbers[]={41,33,34,163,36,37,94,38,42,40};
@@ -350,107 +353,127 @@ static FileData * GetFileData(gchar *pcFileName)
 }
 
 
-/* save settings (preferences, file data such as fold states, marker positions) */
-static void SaveSettings(void)
+/* save individual file details. return TRUE if saved, FALSE if doesn't need to be saved */
+static gboolean SaveIndividualSetting(GKeyFile *gkf,FileData *fd,gint iNumber,gchar *Filename)
 {
-	GKeyFile *config = NULL;
-	gchar *config_file = NULL;
-	gchar *data;
-	FileData* fdTemp=fdKnownFilesSettings;
 	gchar *cKey;
 	gchar szMarkers[1000];
 	gchar *pszMarkers;
-	gint i,iFiles=0;
+	gint i;
 
-	/* create new config from default settings */
-	config=g_key_file_new();
+	/* first check if any bookmarks or folds for this file */
+	/* if not can skip it */
+	for(i=0;i<10;i++)
+		if(fd->iBookmark[i]!=-1) break;
+	/* i==10 if no markers set */
 
-	/* now set settings */
-	g_key_file_set_boolean(config,"Settings","Center_When_Goto_Bookmark",bCenterWhenGotoBookmark);
-	g_key_file_set_boolean(config,"Settings","Remember_Folds",bRememberFolds);
-	g_key_file_set_integer(config,"Settings","Position_In_Line",PositionInLine);
+	/* skip if no folding data or markers */
+	if(i==10 && fd->pcFolding==NULL)
+		return FALSE;
 
 	/* now save file data */
-	while(fdTemp!=NULL)
+	if(iNumber==-1)
+		cKey=g_strdup("A");
+	else
+		cKey=g_strdup_printf("A%d",iNumber);
+
+	/* save filename */
+	if(Filename!=NULL)
+		g_key_file_set_string(gkf,"FileData",cKey,Filename);
+
+	/* save folding data */
+	cKey[0]='B';
+	if(NZV(fd->pcFolding))
+		g_key_file_set_string(gkf,"FileData",cKey,fd->pcFolding);
+
+	/* save last saved time */
+	cKey[0]='C';
+	if(fd->LastChangedTime!=-1)
+		g_key_file_set_integer(gkf,"FileData",cKey,fd->LastChangedTime);
+
+	/* save bookmarks */
+	cKey[0]='D';
+	pszMarkers=szMarkers;
+	pszMarkers[0]=0;
+	for(i=0;i<10;i++)
 	{
-		/* first check if any bookmarks or folds for this file */
-		/* if not can skip it */
-		for(i=0;i<10;i++)
-			if(fdTemp->iBookmark[i]!=-1) break;
-		/* i==10 if no markers set */
-
-		/* skip if no folding data or markers */
-		if(i==10 && fdTemp->pcFolding==NULL)
+		if(fd->iBookmark[i]!=-1)
 		{
-			fdTemp=fdTemp->NextNode;
-			continue;
+			sprintf(pszMarkers,"%d",fd->iBookmark[i]);
+			while(pszMarkers[0]!=0)
+				pszMarkers++;
 		}
 
-		/* now save file data */
-		cKey=g_strdup_printf("A%d",iFiles);
-		/* save filename */
-		g_key_file_set_string(config,"FileData",cKey,fdTemp->pcFileName);
-		/* save folding data */
-		cKey[0]='B';
-		if(NZV(fdTemp->pcFolding))
-			g_key_file_set_string(config,"FileData",cKey,fdTemp->pcFolding);
-
-		/* save last saved time */
-		cKey[0]='C';
-		if(fdTemp->LastChangedTime!=-1)
-			g_key_file_set_integer(config,"FileData",cKey,fdTemp->LastChangedTime);
-		/* save bookmarks */
-		cKey[0]='D';
-		pszMarkers=szMarkers;
-		pszMarkers[0]=0;
-		for(i=0;i<10;i++)
-		{
-			if(fdTemp->iBookmark[i]!=-1)
-			{
-				sprintf(pszMarkers,"%d",fdTemp->iBookmark[i]);
-				while(pszMarkers[0]!=0)
-					pszMarkers++;
-			}
+		pszMarkers[0]=',';
+		pszMarkers[1]=0;
+		pszMarkers++;
+	}
 
-			pszMarkers[0]=',';
-			pszMarkers[1]=0;
-			pszMarkers++;
-		}
-		/* don't need a ',' after last position (have '\0' instead) */
-		pszMarkers--;
-		pszMarkers[0]=0;
-		/* only save markers if have any set. Will contain 9 commas only if none set */
-		if(szMarkers[9]!=0)
-			g_key_file_set_string(config,"FileData",cKey,szMarkers);
-
-		/* save positions in bookmarked lines */
-		cKey[0]='E';
-		pszMarkers=szMarkers;
-		pszMarkers[0]=0;
-		for(i=0;i<10;i++)
+	/* don't need a ',' after last position (have '\0' instead) */
+	pszMarkers--;
+	pszMarkers[0]=0;
+	/* only save markers if have any set. Will contain 9 commas only if none set */
+	if(szMarkers[9]!=0)
+		g_key_file_set_string(gkf,"FileData",cKey,szMarkers);
+
+	/* save positions in bookmarked lines */
+	cKey[0]='E';
+	pszMarkers=szMarkers;
+	pszMarkers[0]=0;
+	for(i=0;i<10;i++)
+	{
+		if(fd->iBookmark[i]!=-1)
 		{
-			if(fdTemp->iBookmark[i]!=-1)
-			{
-				sprintf(pszMarkers,"%d",fdTemp->iBookmarkLinePos[i]);
-				while(pszMarkers[0]!=0)
-					pszMarkers++;
-			}
-
-			pszMarkers[0]=',';
-			pszMarkers[1]=0;
-			pszMarkers++;
+			sprintf(pszMarkers,"%d",fd->iBookmarkLinePos[i]);
+			while(pszMarkers[0]!=0)
+				pszMarkers++;
 		}
-		/* don't need a ',' after last position (have '\0' instead) */
-		pszMarkers--;
-		pszMarkers[0]=0;
-		/* only save positions of markers if set. Will contain 9 commas only if none set */
-		if(szMarkers[9]!=0)
-			g_key_file_set_string(config,"FileData",cKey,szMarkers);
 
-		g_free(cKey);
+		pszMarkers[0]=',';
+		pszMarkers[1]=0;
+		pszMarkers++;
+	}
+
+	/* don't need a ',' after last position (have '\0' instead) */
+	pszMarkers--;
+	pszMarkers[0]=0;
+	/* only save positions of markers if set. Will contain 9 commas only if none set */
+	if(szMarkers[9]!=0)
+		g_key_file_set_string(gkf,"FileData",cKey,szMarkers);
+
+	g_free(cKey);
+
+	return TRUE;
+}
+
+
+/* save settings (preferences, file data such as fold states, marker positions) */
+static void SaveSettings(gchar *filename)
+{
+	GKeyFile *config=NULL;
+	gchar *config_file=NULL,*config_dir=NULL;
+	gchar *data;
+	FileData* fdTemp=fdKnownFilesSettings;
+	gint i=0;
+
+	/* create new config from default settings */
+	config=g_key_file_new();
+
+	/* now set settings */
+	g_key_file_set_boolean(config,"Settings","Center_When_Goto_Bookmark",bCenterWhenGotoBookmark);
+	g_key_file_set_boolean(config,"Settings","Remember_Folds",bRememberFolds);
+	g_key_file_set_integer(config,"Settings","Position_In_Line",PositionInLine);
+	g_key_file_set_integer(config,"Settings","Where_To_Save_File_Details",WhereToSaveFileDetails);
+	if(FileDetailsSuffix!=NULL)
+		g_key_file_set_string(config,"Settings","File_Details_Suffix",FileDetailsSuffix);
+
+	/* now save file data */
+	while(fdTemp!=NULL)
+	{
+		/* if this entry has data needing saveing then save it and increment the counter */
+		if(SaveIndividualSetting(config,fdTemp,i,fdTemp->pcFileName))
+			i++;
 
-		/* point to next FileData entry or NULL if end of chain */
-		iFiles++;
 		fdTemp=fdTemp->NextNode;
 	}
 
@@ -458,41 +481,158 @@ static void SaveSettings(void)
 	data=g_key_file_to_data(config,NULL,NULL);
 
 	/* calculate setting directory name */
-	config_file=g_build_filename(geany->app->configdir,"plugins","Geany_Numbered_Bookmarks",NULL);
+	config_dir=g_build_filename(geany->app->configdir,"plugins","Geany_Numbered_Bookmarks",NULL);
 	/* ensure directory exists */
-	g_mkdir_with_parents(config_file,0755);
+	g_mkdir_with_parents(config_dir,0755);
 
 	/* make config_file hold name of settings file */
-	setptr(config_file,g_build_filename(config_file,"settings.conf",NULL));
+	config_file=g_build_filename(config_dir,"settings.conf",NULL);
 
 	/* write data */
-	utils_write_file(config_file, data);
+	utils_write_file(config_file,data);
 
 	/* free memory */
+	g_free(config_dir);
 	g_free(config_file);
 	g_key_file_free(config);
 	g_free(data);
+
+	/* now consider if not purely saving file settings to main settings file */
+	/* return if not saving data with file */
+	if(filename==NULL || WhereToSaveFileDetails==0)
+		return;
+
+	/* setup keyfile to hold values */
+	config=g_key_file_new();
+
+	/* get pointer to data we're saving */
+	fdTemp=GetFileData(filename);
+
+	/* calculate settings filename */
+	config_file=g_strdup_printf("%s%s",filename,FileDetailsSuffix);
+
+	/* if nothing to save then delete any old data */
+	if(SaveIndividualSetting(config,fdTemp,-1,NULL)==FALSE)
+		g_remove(config_file);
+	/* otherwise save the data */
+	else
+	{
+		/* turn config into data */
+		data=g_key_file_to_data(config,NULL,NULL);
+		/* write data */
+		utils_write_file(config_file,data);
+
+		g_free(data);
+	}
+
+	/* free memory */
+	g_free(config_file);
+	g_key_file_free(config);
 }
 
 
-/* load settings (preferences, file data, and macro data) */
-static void LoadSettings(void)
+/* load individual file details. return TRUE if data there, FALSE if there isn't */
+static gboolean LoadIndividualSetting(GKeyFile *gkf,gint iNumber,gchar *Filename)
 {
+	gchar *pcKey=NULL;
 	gchar *pcTemp;
 	gchar *pcTemp2;
-	gchar *pcKey;
-	gint i,l;
+	gint l;
+	FileData *fd=NULL;
+
+	/* if loading from local file then no fiilename in file and no number in key*/
+	if(iNumber==-1)
+	{
+		/* get structure to hold filedetails */
+		fd=GetFileData(Filename);
+
+		/* create key */
+		pcKey=g_strdup("A");
+	}
+	/* if loading from central file then need to extract filename from A key */
+	else
+	{
+		pcKey=g_strdup_printf("A%d",iNumber);
+
+		/* get filename */
+		pcTemp=(gchar*)(utils_get_setting_string(gkf,"FileData",pcKey,NULL));
+		/* if null then have reached end of files */
+		if(pcTemp==NULL)
+		{
+			g_free(pcKey);
+			return FALSE;
+		}
+
+		fd=GetFileData(pcTemp);
+		g_free(pcTemp);
+	}
+
+	/* get folding data */
+	pcKey[0]='B';
+	fd->pcFolding=(gchar*)(utils_get_setting_string(gkf,"FileData",pcKey,NULL));
+	/* load last saved time */
+	pcKey[0]='C';
+	fd->LastChangedTime=utils_get_setting_integer(gkf,"FileData",pcKey,-1);
+	/* get bookmarks */
+	pcKey[0]='D';
+	pcTemp=(gchar*)(utils_get_setting_string(gkf,"FileData",pcKey,NULL));
+	/* pcTemp contains comma seperated numbers (or blank for -1) */
+	pcTemp2=pcTemp;
+	if(pcTemp!=NULL) for(l=0;l<10;l++)
+	{
+		/* Bookmark entries are initialized to -1, so only need to parse non-empty slots */
+		if(pcTemp2[0]!=',' && pcTemp2[0]!=0)
+		{
+			fd->iBookmark[l]=strtoll(pcTemp2,NULL,10);
+			while(pcTemp2[0]!=0 && pcTemp2[0]!=',')
+				pcTemp2++;
+		}
+
+		pcTemp2++;
+	}
+	g_free(pcTemp);
+
+	/* get position in bookmarked lines */
+	pcKey[0]='E';
+	pcTemp=(gchar*)(utils_get_setting_string(gkf,"FileData",pcKey,NULL));
+	/* pcTemp contains comma seperated numbers (or blank for -1) */
+	pcTemp2=pcTemp;
+	if(pcTemp!=NULL) for(l=0;l<10;l++)
+	{
+		/* Bookmark entries are initialized to -1, so only need to parse non-empty slots */
+		if(pcTemp2[0]!=',' && pcTemp2[0]!=0)
+		{
+			fd->iBookmarkLinePos[l]=strtoll(pcTemp2,NULL,10);
+			while(pcTemp2[0]!=0 && pcTemp2[0]!=',')
+				pcTemp2++;
+		}
+
+		pcTemp2++;
+	}
+
+	/* free used memory */
+	g_free(pcTemp);
+	g_free(pcKey);
+
+	return TRUE;
+}
+
+
+/* load settings (preferences, file data, and macro data) */
+static void LoadSettings(void)
+{
+	gint i;
 	gchar *config_file=NULL;
+	gchar *config_dir=NULL;
 	GKeyFile *config=NULL;
-	FileData *fdTemp;
 
-	/* Make config_file hold directory name of settings file */
-	config_file=g_build_filename(geany->app->configdir,"plugins","Geany_Numbered_Bookmarks",NULL);
+	/* Make config_dir hold directory name of settings file */
+	config_dir=g_build_filename(geany->app->configdir,"plugins","Geany_Numbered_Bookmarks",NULL);
 	/* ensure directory exists */
-	g_mkdir_with_parents(config_file,0755);
+	g_mkdir_with_parents(config_dir,0755);
 
 	/* make config_file hold name of settings file */
-	setptr(config_file,g_build_filename(config_file,"settings.conf",NULL));
+	config_file=g_build_filename(config_dir,"settings.conf",NULL);
 
 	/* either load settings file, or create one from default */
 	config=g_key_file_new();
@@ -505,68 +645,40 @@ static void LoadSettings(void)
 	                        "Center_When_Goto_Bookmark",FALSE);
 	bRememberFolds=utils_get_setting_boolean(config,"Settings","Remember_Folds",FALSE);
 	PositionInLine=utils_get_setting_integer(config,"Settings","Position_In_Line",0);
+	WhereToSaveFileDetails=utils_get_setting_integer(config,"Settings",
+	                                                 "Where_To_Save_File_Details",0);
+	FileDetailsSuffix=utils_get_setting_string(config,"Settings","File_Details_Suffix",
+	                                           ".gnbs.conf");
 
 	/* extract data about files */
 	i=0;
-	while(TRUE)
-	{
-		pcKey=g_strdup_printf("A%d",i);
+	while(LoadIndividualSetting(config,i,NULL))
 		i++;
-		/* get filename */
-		pcTemp=(gchar*)(utils_get_setting_string(config,"FileData",pcKey,NULL));
-		/* if null then have reached end of files */
-		if(pcTemp==NULL)
-		{
-			g_free(pcKey);
-			break;
-		}
 
-		fdTemp=GetFileData(pcTemp);
-		/* get folding data */
-		pcKey[0]='B';
-		fdTemp->pcFolding=(gchar*)(utils_get_setting_string(config,"FileData",pcKey,NULL));
-		/* load last saved time */
-		pcKey[0]='C';
-		fdTemp->LastChangedTime=utils_get_setting_integer(config,"FileData",pcKey,-1);
-		/* get bookmarks */
-		pcKey[0]='D';
-		pcTemp=(gchar*)(utils_get_setting_string(config,"FileData",pcKey,NULL));
-		/* pcTemp contains comma seperated numbers (or blank for -1) */
-		pcTemp2=pcTemp;
-		if(pcTemp!=NULL) for(l=0;l<10;l++)
-		{
-			/* Bookmark entries are initialized to -1, so only need to parse non-empty slots */
-			if(pcTemp2[0]!=',' && pcTemp2[0]!=0)
-			{
-				fdTemp->iBookmark[l]=strtoll(pcTemp2,NULL,10);
-				while(pcTemp2[0]!=0 && pcTemp2[0]!=',')
-					pcTemp2++;
-			}
+	/* free memory */
+	g_free(config_dir);
+	g_free(config_file);
+	g_key_file_free(config);
+}
 
-			pcTemp2++;
-		}
-		g_free(pcTemp);
 
-		/* get position in bookmarked lines */
-		pcKey[0]='E';
-		pcTemp=(gchar*)(utils_get_setting_string(config,"FileData",pcKey,NULL));
-		g_free(pcKey);
-		/* pcTemp contains comma seperated numbers (or blank for -1) */
-		pcTemp2=pcTemp;
-		if(pcTemp!=NULL) for(l=0;l<10;l++)
-		{
-			/* Bookmark entries are initialized to -1, so only need to parse non-empty slots */
-			if(pcTemp2[0]!=',' && pcTemp2[0]!=0)
-			{
-				fdTemp->iBookmarkLinePos[l]=strtoll(pcTemp2,NULL,10);
-				while(pcTemp2[0]!=0 && pcTemp2[0]!=',')
-					pcTemp2++;
-			}
+/* try to load localy saved file details */
+static void LoadLocalFileDetails(gchar *filename)
+{
+	gchar *config_file=NULL;
+	GKeyFile *config=NULL;
 
-			pcTemp2++;
-		}
+	/* calculate settings filename */
+	config_file=g_strdup_printf("%s%s",filename,FileDetailsSuffix);
 
-		g_free(pcTemp);
+	/* create keyfile to hold data */
+	config=g_key_file_new();
+
+	/* if can load settings file then extract the info */
+	if(g_key_file_load_from_file(config,config_file,G_KEY_FILE_KEEP_COMMENTS,NULL))
+	{
+		/* load file details */
+		LoadIndividualSetting(config,-1,filename);
 	}
 
 	/* free memory */
@@ -780,6 +892,10 @@ static void on_document_open(GObject *obj, GeanyDocument *doc, gpointer user_dat
 	/* keep compiler happy & initialise iBits: will logically be initiated anyway */
 	gint iBits=0,iFlags,iBitCounter;
 
+	/* if saving details in file alongside file we're editing then load it up */
+	if(WhereToSaveFileDetails==1)
+		LoadLocalFileDetails(doc->file_name);
+
 	/* check to see if file has changed since geany last saved it */
 	fd=GetFileData(doc->file_name);
 	if(stat(doc->file_name,&sBuf)==0 && fd!=NULL && fd->LastChangedTime!=-1 &&
@@ -916,7 +1032,7 @@ static void on_document_save(GObject *obj, GeanyDocument *doc, gpointer user_dat
 		fd->LastChangedTime=sBuf.st_mtime;
 
 	/* save settings */
-	SaveSettings();
+	SaveSettings(doc->file_name);
 }
 
 
@@ -941,30 +1057,33 @@ static void on_configure_response(GtkDialog *dialog, gint response, gpointer use
 {
 	gboolean bSettingsHaveChanged;
 	GtkCheckButton *cb1,*cb2;
-	GtkComboBox *gtkcb;
+	GtkComboBox *gtkcb1,*gtkcb2;
 
 	if(response!=GTK_RESPONSE_OK && response!=GTK_RESPONSE_APPLY)
 		return;
 
-	/* retreive pointers to check boxes */
+	/* retreive pointers to widgets */
 	cb1=(GtkCheckButton*)(g_object_get_data(G_OBJECT(dialog),"Geany_Numbered_Bookmarks_cb1"));
 	cb2=(GtkCheckButton*)(g_object_get_data(G_OBJECT(dialog),"Geany_Numbered_Bookmarks_cb2"));
-	gtkcb=(GtkComboBox*)(g_object_get_data(G_OBJECT(dialog),"Geany_Numbered_Bookmarks_cb3"));
+	gtkcb1=(GtkComboBox*)(g_object_get_data(G_OBJECT(dialog),"Geany_Numbered_Bookmarks_cb3"));
+	gtkcb2=(GtkComboBox*)(g_object_get_data(G_OBJECT(dialog),"Geany_Numbered_Bookmarks_cb4"));
 
 	/* first see if settings are going to change */
 	bSettingsHaveChanged=(bRememberFolds!=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb1)));
 	bSettingsHaveChanged|=(bCenterWhenGotoBookmark!=gtk_toggle_button_get_active(
 	                       GTK_TOGGLE_BUTTON(cb2)));
-	bSettingsHaveChanged|=(gtk_combo_box_get_active(gtkcb)!=PositionInLine);
+	bSettingsHaveChanged|=(gtk_combo_box_get_active(gtkcb1)!=PositionInLine);
+	bSettingsHaveChanged|=(gtk_combo_box_get_active(gtkcb2)!=WhereToSaveFileDetails);
 
 	/* set new settings settings */
 	bRememberFolds=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb1));
 	bCenterWhenGotoBookmark=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb2));
-	PositionInLine=gtk_combo_box_get_active(gtkcb);
+	PositionInLine=gtk_combo_box_get_active(gtkcb1);
+	WhereToSaveFileDetails=gtk_combo_box_get_active(gtkcb2);
 
 	/* now save new settings if they have changed */
 	if(bSettingsHaveChanged)
-		SaveSettings();
+		SaveSettings(NULL);
 }
 
 
@@ -972,30 +1091,37 @@ static void on_configure_response(GtkDialog *dialog, gint response, gpointer use
 GtkWidget *plugin_configure(GtkDialog *dialog)
 {
 	GtkWidget *vbox;
-	GtkWidget *cb1,*cb2,*gtkcb;
+	GtkWidget *gtkw;
 
 	vbox=gtk_vbox_new(FALSE, 6);
 
-	cb1=gtk_check_button_new_with_label(_("remember fold state"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb1),bRememberFolds);
-	gtk_box_pack_start(GTK_BOX(vbox),cb1,FALSE,FALSE,2);
+	gtkw=gtk_check_button_new_with_label(_("remember fold state"));
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkw),bRememberFolds);
+	gtk_box_pack_start(GTK_BOX(vbox),gtkw,FALSE,FALSE,2);
 	/* save pointer to check_button */
-	g_object_set_data(G_OBJECT(dialog),"Geany_Numbered_Bookmarks_cb1",cb1);
+	g_object_set_data(G_OBJECT(dialog),"Geany_Numbered_Bookmarks_cb1",gtkw);
 
-	cb2=gtk_check_button_new_with_label(_("Center view when goto bookmark"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb2),bCenterWhenGotoBookmark);
-	gtk_box_pack_start(GTK_BOX(vbox),cb2,FALSE,FALSE,2);
+	gtkw=gtk_check_button_new_with_label(_("Center view when goto bookmark"));
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkw),bCenterWhenGotoBookmark);
+	gtk_box_pack_start(GTK_BOX(vbox),gtkw,FALSE,FALSE,2);
 	/* save pointer to check_button */
-	g_object_set_data(G_OBJECT(dialog),"Geany_Numbered_Bookmarks_cb2",cb2);
-
-	gtkcb=gtk_combo_box_new_text();
-	gtk_combo_box_append_text((GtkComboBox*)gtkcb,_("Move to start of line"));
-	gtk_combo_box_append_text((GtkComboBox*)gtkcb,_("Move to remembered position in line"));
-	gtk_combo_box_append_text((GtkComboBox*)gtkcb,_("Move to position in current line"));
-	gtk_combo_box_append_text((GtkComboBox*)gtkcb,_("Move to End of line"));
-	gtk_combo_box_set_active((GtkComboBox*)gtkcb,PositionInLine);
-	gtk_box_pack_start(GTK_BOX(vbox),gtkcb,FALSE,FALSE,2);
-	g_object_set_data(G_OBJECT(dialog),"Geany_Numbered_Bookmarks_cb3",gtkcb);
+	g_object_set_data(G_OBJECT(dialog),"Geany_Numbered_Bookmarks_cb2",gtkw);
+
+	gtkw=gtk_combo_box_new_text();
+	gtk_combo_box_append_text((GtkComboBox*)gtkw,_("Move to start of line"));
+	gtk_combo_box_append_text((GtkComboBox*)gtkw,_("Move to remembered position in line"));
+	gtk_combo_box_append_text((GtkComboBox*)gtkw,_("Move to position in current line"));
+	gtk_combo_box_append_text((GtkComboBox*)gtkw,_("Move to End of line"));
+	gtk_combo_box_set_active((GtkComboBox*)gtkw,PositionInLine);
+	gtk_box_pack_start(GTK_BOX(vbox),gtkw,FALSE,FALSE,2);
+	g_object_set_data(G_OBJECT(dialog),"Geany_Numbered_Bookmarks_cb3",gtkw);
+
+	gtkw=gtk_combo_box_new_text();
+	gtk_combo_box_append_text((GtkComboBox*)gtkw,_("Save file settings with program settings"));
+	gtk_combo_box_append_text((GtkComboBox*)gtkw,_("Save file settings to filename with suffix"));
+	gtk_combo_box_set_active((GtkComboBox*)gtkw,WhereToSaveFileDetails);
+	gtk_box_pack_start(GTK_BOX(vbox),gtkw,FALSE,FALSE,2);
+	g_object_set_data(G_OBJECT(dialog),"Geany_Numbered_Bookmarks_cb4",gtkw);
 
 	gtk_widget_show_all(vbox);
 
@@ -1329,4 +1455,7 @@ void plugin_cleanup(void)
 		g_free(fdTemp);
 		fdTemp=fdTemp2;
 	}
+
+	/* free memory used for settings */
+	g_free(FileDetailsSuffix);
 }


@@ Diff output truncated at 100000 characters. @@


--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).



More information about the Plugins-Commits mailing list