SF.net SVN: geany:[4162] trunk
eht16 at users.sourceforge.net
eht16 at xxxxx
Sun Sep 6 16:51:12 UTC 2009
Revision: 4162
http://geany.svn.sourceforge.net/geany/?rev=4162&view=rev
Author: eht16
Date: 2009-09-06 16:51:11 +0000 (Sun, 06 Sep 2009)
Log Message:
-----------
Add new plugin signal: "document-before-save".
Add get_line_end_position(), set_target_start(), set_target_end(), replace_target() to the plugin API (patch by Eugene Arshinov, thanks).
Add new plugin signal: "document-filetype-set" (closes #2852286).
Modified Paths:
--------------
trunk/ChangeLog
trunk/THANKS
trunk/doc/plugins.dox
trunk/plugins/geanyfunctions.h
trunk/src/document.c
trunk/src/geanyobject.c
trunk/src/geanyobject.h
trunk/src/plugindata.h
trunk/src/plugins.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2009-09-06 16:50:47 UTC (rev 4161)
+++ trunk/ChangeLog 2009-09-06 16:51:11 UTC (rev 4162)
@@ -17,6 +17,14 @@
* src/build.c, src/project.c:
Use NZV() macro instead of strlen() to check for empty strings.
Remove the FOREACH_GEANYBUILDCMD_ENTRY() macro.
+ * doc/plugins.dox, plugins/geanyfunctions.h, src/document.c,
+ src/geanyobject.c, src/geanyobject.h, src/plugindata.h,
+ src/plugins.c, THANKS:
+ Add new plugin signal: "document-before-save".
+ Add get_line_end_position(), set_target_start(), set_target_end(),
+ replace_target() to the plugin API
+ (patch by Eugene Arshinov, thanks).
+ Add new plugin signal: "document-filetype-set" (closes #2852286).
2009-09-04 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/THANKS
===================================================================
--- trunk/THANKS 2009-09-06 16:50:47 UTC (rev 4161)
+++ trunk/THANKS 2009-09-06 16:51:11 UTC (rev 4162)
@@ -65,7 +65,7 @@
Simon Treny <simon(dot)treny(at)free(dot)fr> - Documents sidebar stock icons patch
Elias Pschernig <elias(at)users(dot)sourceforge(dot)net> - Recent Projects menu patch
Jesse Mayes <plasmasheep(at)gmail(dot)com> - Tango'ish Save All icon
-Eugene Arshinov <earshinov(at)gmail(dot)com> - Reload color schemes, split lines KB patches
+Eugene Arshinov <earshinov(at)gmail(dot)com> - Reload color schemes, split lines KB patches, and more
Jon Strait <jstrait(at)moonloop(dot)net> - Markdown filetype patch
Translators:
Modified: trunk/doc/plugins.dox
===================================================================
--- trunk/doc/plugins.dox 2009-09-06 16:50:47 UTC (rev 4161)
+++ trunk/doc/plugins.dox 2009-09-06 16:51:11 UTC (rev 4162)
@@ -116,6 +116,20 @@
* @param user_data user data.
* @endsignaldef
*
+ * @signaldef document-before-save
+ * @signalproto
+ * void user_function(GObject *obj, GeanyDocument *doc, gpointer user_data);
+ * @endsignalproto
+ * @signaldesc
+ * Sent before a document is saved.
+ *
+ * You need to include "document.h" for the declaration of GeanyDocument.
+ *
+ * @param obj a GeanyObject instance, should be ignored.
+ * @param doc the document to be saved.
+ * @param user_data user data.
+ * @endsignaldef
+ *
* @signaldef document-save
* @signalproto
* void user_function(GObject *obj, GeanyDocument *doc, gpointer user_data);
@@ -130,6 +144,23 @@
* @param user_data user data.
* @endsignaldef
*
+ * @signaldef document-filetype-set
+ * @signalproto
+ * void user_function(GObject *obj, GeanyDocument *doc, GeanyFiletype *filetype_old, gpointer user_data);
+ * @endsignalproto
+ * @signaldesc
+ * Sent after the filetype of a document has been changed.
+ * The previous filetype object is passed but it can be NULL (e.g. at startup).
+ * The new filetype can be read with: @code
+ * GeanyFiletype *ft = doc->filetype;
+ * @endcode
+ *
+ * @param obj a GeanyObject instance, should be ignored.
+ * @param doc the saved document.
+ * @param filetype_old the previous filetype of the document.
+ * @param user_data user data.
+ * @endsignaldef
+ *
* @signaldef document-activate
* @signalproto
* void user_function(GObject *obj, GeanyDocument *doc, gpointer user_data);
Modified: trunk/plugins/geanyfunctions.h
===================================================================
--- trunk/plugins/geanyfunctions.h 2009-09-06 16:50:47 UTC (rev 4161)
+++ trunk/plugins/geanyfunctions.h 2009-09-06 16:51:11 UTC (rev 4162)
@@ -160,6 +160,14 @@
geany_functions->p_sci->get_selection_contents
#define sci_set_font \
geany_functions->p_sci->set_font
+#define sci_get_line_end_position \
+ geany_functions->p_sci->get_line_end_position
+#define sci_set_target_start \
+ geany_functions->p_sci->set_target_start
+#define sci_set_target_end \
+ geany_functions->p_sci->set_target_end
+#define sci_replace_target \
+ geany_functions->p_sci->replace_target
#define templates_get_template_fileheader \
geany_functions->p_templates->get_template_fileheader
#define utils_str_equal \
Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c 2009-09-06 16:50:47 UTC (rev 4161)
+++ trunk/src/document.c 2009-09-06 16:51:11 UTC (rev 4162)
@@ -1720,8 +1720,10 @@
/**
* Save the document. Saving includes replacing tabs by spaces,
* stripping trailing spaces and adding a final new line at the end of the file (all only if
- * user enabled these features). The filetype is set again or auto-detected if it wasn't
- * set yet. After all, the "document-save" signal is emitted for plugins.
+ * user enabled these features). Then the "document-before-save" signal is emitted,
+ * allowing plugins to modify the document before it is saved, and data is
+ * actually written to disk. The filetype is set again or auto-detected if it wasn't set yet.
+ * After all, the "document-save" signal is emitted for plugins.
*
* If the file is not modified, this functions does nothing unless force is set to @c TRUE.
*
@@ -1760,6 +1762,9 @@
if (file_prefs.final_new_line)
editor_ensure_final_newline(doc->editor);
+ /* notify plugins which may wish to modify the document before it's saved */
+ g_signal_emit_by_name(geany_object, "document-before-save", doc);
+
len = sci_get_length(doc->editor->sci) + 1;
if (doc->has_bom && encodings_is_unicode_charset(doc->encoding))
{ /* always write a UTF-8 BOM because in this moment the text itself is still in UTF-8
@@ -2480,11 +2485,13 @@
void document_set_filetype(GeanyDocument *doc, GeanyFiletype *type)
{
gboolean ft_changed;
+ GeanyFiletype *old_ft;
g_return_if_fail(doc);
if (type == NULL)
type = filetypes[GEANY_FILETYPES_NONE];
+ old_ft = doc->file_type;
geany_debug("%s : %s (%s)",
(doc->file_name != NULL) ? doc->file_name : "unknown",
(type->name != NULL) ? type->name : "unknown",
@@ -2492,6 +2499,9 @@
ft_changed = (doc->file_type != type); /* filetype has changed */
document_load_config(doc, type, ft_changed);
+
+ if (ft_changed)
+ g_signal_emit_by_name(geany_object, "document-filetype-set", doc, old_ft);
}
Modified: trunk/src/geanyobject.c
===================================================================
--- trunk/src/geanyobject.c 2009-09-06 16:50:47 UTC (rev 4161)
+++ trunk/src/geanyobject.c 2009-09-06 16:51:11 UTC (rev 4162)
@@ -91,6 +91,36 @@
}
+static void geany_cclosure_marshal_VOID__POINTER_POINTER(GClosure *closure, GValue *ret_val,
+ guint n_param_vals, const GValue *param_values, gpointer hint, gpointer mdata)
+{
+ typedef gboolean (*GeanyMarshalFunc_VOID__POINTER_POINTER)
+ (gpointer data1, gconstpointer arg_1, gconstpointer arg_2, gpointer data2);
+
+ register GeanyMarshalFunc_VOID__POINTER_POINTER callback;
+ register GCClosure* cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail(n_param_vals == 3);
+
+ if (G_CCLOSURE_SWAP_DATA(closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer(param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer(param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GeanyMarshalFunc_VOID__POINTER_POINTER) (mdata ? mdata : cc->callback);
+ callback(data1,
+ g_value_get_pointer(param_values + 1),
+ g_value_get_pointer(param_values + 2),
+ data2);
+}
+
+
static gboolean boolean_handled_accumulator(GSignalInvocationHint *ihint, GValue *return_accu,
const GValue *handler_return, gpointer dummy)
{
@@ -162,6 +192,15 @@
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE, 1,
G_TYPE_POINTER);
+ geany_object_signals[GCB_DOCUMENT_BEFORE_SAVE] = g_signal_new (
+ "document-before-save",
+ G_OBJECT_CLASS_TYPE (g_object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GeanyObjectClass, document_before_save),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
geany_object_signals[GCB_DOCUMENT_SAVE] = g_signal_new (
"document-save",
G_OBJECT_CLASS_TYPE (g_object_class),
@@ -171,6 +210,15 @@
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE, 1,
G_TYPE_POINTER);
+ geany_object_signals[GCB_DOCUMENT_FILETYPE_SET] = g_signal_new (
+ "document-filetype-set",
+ G_OBJECT_CLASS_TYPE (g_object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GeanyObjectClass, document_filetype_set),
+ NULL, NULL,
+ geany_cclosure_marshal_VOID__POINTER_POINTER,
+ G_TYPE_NONE, 2,
+ G_TYPE_POINTER, G_TYPE_POINTER);
geany_object_signals[GCB_DOCUMENT_ACTIVATE] = g_signal_new (
"document-activate",
G_OBJECT_CLASS_TYPE (g_object_class),
Modified: trunk/src/geanyobject.h
===================================================================
--- trunk/src/geanyobject.h 2009-09-06 16:50:47 UTC (rev 4161)
+++ trunk/src/geanyobject.h 2009-09-06 16:51:11 UTC (rev 4162)
@@ -34,7 +34,9 @@
{
GCB_DOCUMENT_NEW,
GCB_DOCUMENT_OPEN,
+ GCB_DOCUMENT_BEFORE_SAVE,
GCB_DOCUMENT_SAVE,
+ GCB_DOCUMENT_FILETYPE_SET,
GCB_DOCUMENT_ACTIVATE,
GCB_DOCUMENT_CLOSE,
GCB_PROJECT_OPEN,
@@ -76,7 +78,9 @@
void (*document_new)(GeanyDocument *doc);
void (*document_open)(GeanyDocument *doc);
+ void (*document_before_save)(GeanyDocument *doc);
void (*document_save)(GeanyDocument *doc);
+ void (*document_filetype_set)(GeanyDocument *doc, GeanyFiletype *filetype_old);
void (*document_activate)(GeanyDocument *doc);
void (*document_close)(GeanyDocument *doc);
void (*project_open)(GKeyFile *keyfile);
Modified: trunk/src/plugindata.h
===================================================================
--- trunk/src/plugindata.h 2009-09-06 16:50:47 UTC (rev 4161)
+++ trunk/src/plugindata.h 2009-09-06 16:51:11 UTC (rev 4162)
@@ -50,7 +50,7 @@
enum {
/** The Application Programming Interface (API) version, incremented
* whenever any plugin data types are modified or appended to. */
- GEANY_API_VERSION = 153,
+ GEANY_API_VERSION = 154,
/** The Application Binary Interface (ABI) version, incremented whenever
* existing fields in the plugin data types have to be changed or reordered. */
@@ -337,6 +337,10 @@
gchar* (*get_contents_range) (struct _ScintillaObject *sci, gint start, gint end);
gchar* (*get_selection_contents) (struct _ScintillaObject *sci);
void (*set_font) (struct _ScintillaObject *sci, gint style, const gchar *font, gint size);
+ gint (*get_line_end_position) (ScintillaObject* sci, gint line);
+ void (*set_target_start) (ScintillaObject *sci, gint start);
+ void (*set_target_end) (ScintillaObject *sci, gint end);
+ gint (*replace_target) (ScintillaObject *sci, const gchar *text, gboolean regex);
}
SciFuncs;
Modified: trunk/src/plugins.c
===================================================================
--- trunk/src/plugins.c 2009-09-06 16:50:47 UTC (rev 4161)
+++ trunk/src/plugins.c 2009-09-06 16:51:11 UTC (rev 4162)
@@ -167,7 +167,11 @@
&sci_get_contents,
&sci_get_contents_range,
&sci_get_selection_contents,
- &sci_set_font
+ &sci_set_font,
+ &sci_get_line_end_position,
+ &sci_set_target_start,
+ &sci_set_target_end,
+ &sci_replace_target
};
static TemplateFuncs template_funcs = {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list