[Geany-devel] Little patch to reload color schemes via menu

Eugene Arshinov earshinov at xxxxx
Sun Jul 5 15:07:43 UTC 2009


This patch makes Tools > Reload Configuration reload color schemes in 
all open documents.

It is made against last SVN revision (rev. 3920).

I don't know whether attachments are supported, so I post the patch 
below. Here is also a link as copying the patch from here may be 
inconvenient: http://pastie.org/534772 .

-------------------- 8< --------------------

diff --git a/src/document.c b/src/document.c
index 408ca53..6f37103 100644
--- a/src/document.c
+++ b/src/document.c
@@ -106,6 +106,8 @@ typedef struct
 static void document_undo_clear(GeanyDocument *doc);
 static void document_redo_add(GeanyDocument *doc, guint type, gpointer 
data);
 static gboolean update_tags_from_buffer(GeanyDocument *doc);
+static void document_load_config(GeanyDocument *doc, GeanyFiletype *type,
+        gboolean filetype_changed);
 
 
 /* ignore the case of filenames and paths under WIN32, causes errors if 
not */
@@ -2459,25 +2461,14 @@ static gboolean 
update_type_keywords(GeanyDocument *doc, gint lang)
     return ret;
 }
 
-
-/** Sets the filetype of the document (which controls syntax 
highlighting and tags)
- * @param doc The document to use.
- * @param type The filetype. */
-void document_set_filetype(GeanyDocument *doc, GeanyFiletype *type)
+static void document_load_config(GeanyDocument *doc, GeanyFiletype *type,
+        gboolean filetype_changed)
 {
-    gboolean ft_changed;
-
     g_return_if_fail(doc);
     if (type == NULL)
         type = filetypes[GEANY_FILETYPES_NONE];
 
-    geany_debug("%s : %s (%s)",
-        (doc->file_name != NULL) ? doc->file_name : "unknown",
-        (type->name != NULL) ? type->name : "unknown",
-        (doc->encoding != NULL) ? doc->encoding : "unknown");
-
-    ft_changed = (doc->file_type != type);
-    if (ft_changed)    /* filetype has changed */
+    if (filetype_changed)
     {
         doc->file_type = type;
 
@@ -2500,6 +2491,32 @@ void document_set_filetype(GeanyDocument *doc, 
GeanyFiletype *type)
 }
 
 
+/** Sets the filetype of the document (which controls syntax 
highlighting and tags)
+ * @param doc The document to use.
+ * @param type The filetype. */
+void document_set_filetype(GeanyDocument *doc, GeanyFiletype *type)
+{
+    gboolean ft_changed;
+
+    g_return_if_fail(doc);
+    if (type == NULL)
+        type = filetypes[GEANY_FILETYPES_NONE];
+
+    geany_debug("%s : %s (%s)",
+        (doc->file_name != NULL) ? doc->file_name : "unknown",
+        (type->name != NULL) ? type->name : "unknown",
+        (doc->encoding != NULL) ? doc->encoding : "unknown");
+
+    ft_changed = (doc->file_type != type); /* filetype has changed */
+    document_load_config(doc, type, ft_changed);
+}
+
+void document_reload_config(GeanyDocument *doc)
+{
+    document_load_config(doc, doc->file_type, TRUE);
+}
+
+
 /**
  *  Sets the encoding of a %document.
  *  This function only set the encoding of the %document, it does not 
any conversions. The new
diff --git a/src/document.h b/src/document.h
index c560a32..66e1dd5 100644
--- a/src/document.h
+++ b/src/document.h
@@ -154,6 +154,8 @@ void document_set_text_changed(GeanyDocument *doc, 
gboolean changed);
 
 void document_set_filetype(GeanyDocument *doc, GeanyFiletype *type);
 
+void document_reload_config(GeanyDocument *doc);
+
 void document_rename_file(GeanyDocument *doc, const gchar *new_filename);
 
 GeanyDocument *document_index(gint idx);
diff --git a/src/filetypes.c b/src/filetypes.c
index 2506714..e8914cc 100644
--- a/src/filetypes.c
+++ b/src/filetypes.c
@@ -1215,9 +1215,7 @@ void filetypes_load_config(gint ft_id, gboolean 
reload)
     }
 
     load_settings(ft_id, config, config_home);
-    if (! reload)
-        /* reloading highlighting settings not yet supported */
-        highlighting_init_styles(ft_id, config, config_home);
+    highlighting_init_styles(ft_id, config, config_home);
 
     g_key_file_free(config);
     g_key_file_free(config_home);
diff --git a/src/main.c b/src/main.c
index 6a0cec5..f56c7dc 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1210,7 +1210,7 @@ void *rpl_malloc(size_t n)
  **/
 void main_reload_configuration(void)
 {
-    guint i;
+    guint i, n;
 
     /* reload templates */
     templates_free_templates();
@@ -1233,6 +1233,13 @@ void main_reload_configuration(void)
         filetypes_load_config(i, TRUE);
     }
 
+    /* iterating over documents_array is not very safe, so use this 
method */
+    n = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook));
+    for (i = 0; i < n; i++)
+    {
+        document_reload_config(document_get_from_page(i));
+    }
+
     /* C tag names to ignore */
     symbols_reload_config_files();
 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: a.patch
Type: text/x-patch
Size: 4072 bytes
Desc: not available
URL: <http://lists.geany.org/pipermail/devel/attachments/20090705/d379a4fa/attachment.bin>


More information about the Devel mailing list