Re: [gedit-list] Exporting gedit_tab_save(_as)
- From: Johannes Hölzl <johannes hoelzl gmx de>
- To: Paolo Maggi <paolo maggi polito it>
- Cc: gedit-list gnome org
- Subject: Re: [gedit-list] Exporting gedit_tab_save(_as)
- Date: Sun, 18 Jun 2006 15:12:56 +0200
Hi,
Am Donnerstag, den 15.06.2006, 10:31 +0200 schrieb Paolo Maggi:
> Hi,
[..]
>
> ATM, we expose public functions that plugins can use to open files, see
> the new public functions gedit_commands_load_uri and
> gedit_commands_load_uris in gedit/gedit-commands.h (we still need to
> bind them for python plugins).
> We still need to expose functions for save/save_all.
> If you have time, you could try to write a patch to expose such
> functionalities to plugins. Before implementing them, I'd suggest you to
> post here the proposed function prototypes with the exact semantic you
> expect for them.
> I should check the code but I suspect there could be some problem when
> trying to save_as a non-active document.
>
[..]
> Ciao,
> Paolo
Okay, the following patch exports the functions:
- gedit_commands_save_current_document(window)
- gedit_commands_save_documents_list(window, docs)
- gedit_commands_save_all_documents(window)
the semantics are the same as the _gedit_cmd_file_save_ ... functions.
If the user wants to wait until the files are saved, he needs to connect
to the "saved" signal. To avoid a dialog, the user should check if the
file is untitled.
I changed the name to gedit_commands_save instead of
gedit_cmd_file_save, to correspond to the gedit_command_load_uri
function. Is this okay, or are other names are preferred?
I also bind the gedit_commands_ function for Python. I simply added them
to the GeditWindow object as GeditWindow.commands_save/load_...
functions.
In this the GedtiDocumentSaveFlags are in the bindings, but should i
instead remove the gedit_document_save(_as) methods from the bindings?
They can't called directly because the GeditTab can't setup to save a
file.
regards,
Johannes
PS: Should I open an enhancement report in bugzilla?
Index: bindings/python/gedit.defs
===================================================================
RCS file: /cvs/gnome/gedit/bindings/python/gedit.defs,v
retrieving revision 1.9
diff -u -p -r1.9 gedit.defs
--- bindings/python/gedit.defs 13 Jun 2006 10:51:52 -0000 1.9
+++ bindings/python/gedit.defs 18 Jun 2006 12:56:23 -0000
@@ -107,6 +107,16 @@
)
)
+(define-flags DocumentSaveFlags
+ (in-module "Gedit")
+ (c-name "GeditDocumentSaveFlags")
+ (values
+ '("save-ignore-mtime" "GEDIT_DOCUMENT_SAVE_IGNORE_MTIME")
+ '("save-ignore-backup" "GEDIT_DOCUMENT_SAVE_IGNORE_BACKUP")
+ '("save-preserve-backup" "GEDIT_DOCUMENT_SAVE_PRESERVE_BACKUP")
+ )
+)
+
(define-flags WindowState
(in-module "Gedit")
(c-name "GeditWindowState")
@@ -934,5 +944,50 @@
(parameters
'("const-gchar*" "uri")
)
+)
+
+;; From ../../gedit/gedit-commands.h
+
+(define-method commands_load_uri
+ (of-object "GeditWindow")
+ (c-name "gedit_commands_load_uri")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "uri")
+ '("const-GeditEncoding*" "encoding")
+ '("gint" "line_pos")
+ )
+)
+
+(define-method commands_load_uris
+ (of-object "GeditWindow")
+ (c-name "gedit_commands_load_uris")
+ (return-type "gint")
+ (parameters
+ '("GSList" "uris")
+ '("const-GeditEncoding*" "encoding")
+ '("gint" "line_pos")
+ )
+)
+
+(define-method commands_save_current_document
+ (of-object "GeditWindow")
+ (c-name "gedit_commands_save_current_document")
+ (return-type "none")
+)
+
+(define-method commands_save_documents_list
+ (of-object "GeditWindow")
+ (c-name "gedit_commands_save_documents_list")
+ (return-type "none")
+ (parameters
+ '("const-GList*" "docs")
+ )
+)
+
+(define-method commands_save_all_documents
+ (of-object "GeditWindow")
+ (c-name "gedit_commands_save_all_documents")
+ (return-type "none")
)
Index: bindings/python/gedit.override
===================================================================
RCS file: /cvs/gnome/gedit/bindings/python/gedit.override,v
retrieving revision 1.5
diff -u -p -r1.5 gedit.override
--- bindings/python/gedit.override 13 Jun 2006 10:51:52 -0000 1.5
+++ bindings/python/gedit.override 18 Jun 2006 12:56:24 -0000
@@ -321,3 +321,151 @@ _wrap_gedit_tab_get_from_document_deprec
return NULL;
return _wrap_gedit_tab_get_from_document(self, args, kwargs);
}
+%%
+override gedit_commands_load_uris kwargs
+static PyObject *
+_wrap_gedit_commands_load_uris (PyGObject *self,
+ PyObject *args,
+ PyObject *kwargs)
+{
+ static char *kwlist[] = { "uris", "encoding", "line_pos", NULL };
+ PyObject *list, *item, *py_encoding = NULL;
+ int line_pos = 0;
+ GSList *gslist = NULL;
+ GeditEncoding *encoding = NULL;
+ int len, i;
+
+ if (!PyArg_ParseTupleAndKeywords (args, kwargs,
+ "O|Oi:GeditWindow.commands_load_uris", kwlist,
+ &list, &py_encoding, &line_pos))
+ return NULL;
+
+ if (py_encoding)
+ {
+ if (pyg_boxed_check(py_encoding, GEDIT_TYPE_ENCODING))
+ encoding = pyg_boxed_get(py_encoding, GeditEncoding);
+ else {
+ PyErr_SetString(PyExc_TypeError, "encoding should be a GeditEncoding");
+ return NULL;
+ }
+ }
+
+ if (!PySequence_Check (list))
+ {
+ PyErr_SetString (PyExc_TypeError,
+ "first argument must be a sequence");
+ return NULL;
+ }
+
+ len = PySequence_Length (list);
+
+ for (i = 0; i < len; i++)
+ {
+ item = PySequence_GetItem (list, i);
+ Py_DECREF(item);
+
+ if (!PyString_Check(item))
+ {
+ PyErr_SetString (PyExc_TypeError,
+ "sequence item not a string");
+ g_slist_free (gslist);
+ return NULL;
+ }
+
+ gslist = g_slist_append (gslist, PyString_AsString(item));
+ }
+
+ gedit_commands_load_uris (GEDIT_WINDOW(self->obj), gslist, encoding, line_pos);
+
+ g_slist_free (gslist);
+ Py_INCREF (Py_None);
+ return Py_None;
+}
+%%
+override gedit_commands_load_uri kwargs
+static PyObject *
+_wrap_gedit_commands_load_uri (PyGObject *self,
+ PyObject *args,
+ PyObject *kwargs)
+{
+ static char *kwlist[] = { "uri", "encoding", "line_pos", NULL };
+ PyObject *uri, *py_encoding = NULL;
+ int line_pos = 0;
+ GeditEncoding *encoding = NULL;
+
+ if (!PyArg_ParseTupleAndKeywords (args, kwargs,
+ "O|Oi:GeditWindow.commands_load_uri", kwlist,
+ &uri, &py_encoding, &line_pos))
+ return NULL;
+
+ if (py_encoding)
+ {
+ if (pyg_boxed_check(py_encoding, GEDIT_TYPE_ENCODING))
+ encoding = pyg_boxed_get(py_encoding, GeditEncoding);
+ else {
+ PyErr_SetString(PyExc_TypeError, "encoding should be a GeditEncoding");
+ return NULL;
+ }
+ }
+
+ if (!PyString_Check(uri))
+ {
+ PyErr_SetString (PyExc_TypeError,
+ "uri not a string");
+ return NULL;
+ }
+
+ gedit_commands_load_uri (GEDIT_WINDOW(self->obj), PyString_AsString(uri), encoding, line_pos);
+
+ Py_INCREF (Py_None);
+ return Py_None;
+}
+%%
+override gedit_commands_save_documents_list kwargs
+static PyObject *
+_wrap_gedit_commands_save_documents_list (PyGObject *self,
+ PyObject *args,
+ PyObject *kwargs)
+{
+ static char *kwlist[] = { "docs", NULL };
+ PyObject *list, *item;
+ GList *glist = NULL;
+ int len, i;
+
+ if (!PyArg_ParseTupleAndKeywords (args, kwargs,
+ "O:GeditWindow.commands_save_documents_list", kwlist,
+ &list))
+ return NULL;
+
+ if (!PySequence_Check (list))
+ {
+ PyErr_SetString (PyExc_TypeError,
+ "first argument must be a sequence");
+ return NULL;
+ }
+
+ len = PySequence_Length (list);
+
+ for (i = 0; i < len; i++)
+ {
+ item = PySequence_GetItem (list, i);
+ Py_DECREF(item);
+
+ if (!pygobject_check (item, &PyGeditDocument_Type))
+ {
+ PyErr_SetString (PyExc_TypeError,
+ "sequence item not a GeditDocument object.");
+ g_list_free (glist);
+ return NULL;
+ }
+
+ glist = g_list_append (glist, pygobject_get (item));
+ }
+
+ gedit_commands_save_documents_list (GEDIT_WINDOW(self->obj), glist);
+
+ g_list_free (glist);
+ Py_INCREF (Py_None);
+ return Py_None;
+}
+%%
Index: gedit/gedit-commands-file.c
===================================================================
RCS file: /cvs/gnome/gedit/gedit/gedit-commands-file.c,v
retrieving revision 1.10
diff -u -p -r1.10 gedit-commands-file.c
--- gedit/gedit-commands-file.c 31 May 2006 15:40:12 -0000 1.10
+++ gedit/gedit-commands-file.c 18 Jun 2006 12:56:26 -0000
@@ -194,6 +194,12 @@ load_file_list (GeditWindow *win
* gedit_commands_load_uri:
*
* Do nothing if URI does not exist
+ *
+ * @window: The GEdit window in which the new file is loaded.
+ * @uri: The uri from which the file is loaded.
+ * @encoding: Either #NULL or the encoding in which the file is stored.
+ * @line_pos: The line at which the view is at the beginning. Set to 0 if no
+ * start line is requested.
*/
void
gedit_commands_load_uri (GeditWindow *window,
@@ -216,9 +222,17 @@ gedit_commands_load_uri (GeditWindow
}
/**
- * gedit_commands_load_uri:
+ * gedit_commands_load_uris:
+ *
+ * Do nothing if URI does not exist
*
* Ignore non-existing URIs
+ *
+ * @window: The GEdit window in which the new file is loaded.
+ * @uris: A list of uris from which the files are loaded.
+ * @encoding: Either #NULL or the encoding in which the files are stored.
+ * @line_pos: The line at which the view is at the beginning. Set to 0 if no
+ * start line is requested.
*/
gint
gedit_commands_load_uris (GeditWindow *window,
@@ -855,14 +869,19 @@ file_save (GeditTab *tab,
_gedit_tab_save (tab);
}
+
+/**
+ * gedit_commands_save_current_file:
+ *
+ * Saves the currently viewed file.
+ *
+ * @window: This windows current tab will be saved.
+ */
void
-_gedit_cmd_file_save (GtkAction *action,
- GeditWindow *window)
+gedit_commands_save_current_document (GeditWindow *window)
{
GeditTab *tab;
- gedit_debug (DEBUG_COMMANDS);
-
tab = gedit_window_get_active_tab (window);
if (tab == NULL)
return;
@@ -871,6 +890,15 @@ _gedit_cmd_file_save (GtkAction *actio
}
void
+_gedit_cmd_file_save (GtkAction *action,
+ GeditWindow *window)
+{
+ gedit_debug (DEBUG_COMMANDS);
+
+ gedit_commands_save_current_document(window);
+}
+
+void
_gedit_cmd_file_save_as (GtkAction *action,
GeditWindow *window)
{
@@ -885,12 +913,15 @@ _gedit_cmd_file_save_as (GtkAction *ac
file_save_as (tab, window);
}
-/*
- * The docs in the list must belong to the same GeditWindow.
+/**
+ * Saves a list of documents.
+ *
+ * @window: The window whose documents are saved.
+ * @docs: All documents in thsi list must belong to @window.
*/
void
-_gedit_cmd_file_save_documents_list (GeditWindow *window,
- GList *docs)
+gedit_commands_save_documents_list (GeditWindow *window,
+ GList *docs)
{
GList *l;
GSList *tabs_to_save_as = NULL;
@@ -996,19 +1027,29 @@ _gedit_cmd_file_save_documents_list (Ged
}
}
+/**
+ * Saves all unsaved documents of a window.
+ *
+ * @window: The window whose documents are saved.
+ */
void
-_gedit_cmd_file_save_all (GtkAction *action,
- GeditWindow *window)
+gedit_commands_save_all_documents (GeditWindow *window)
{
GList *docs;
- gedit_debug (DEBUG_COMMANDS);
-
docs = gedit_window_get_documents (window);
- _gedit_cmd_file_save_documents_list (window, docs);
+ gedit_commands_save_documents_list (window, docs);
g_list_free (docs);
+}
+
+void
+_gedit_cmd_file_save_all (GtkAction *action,
+ GeditWindow *window)
+{
+ gedit_debug (DEBUG_COMMANDS);
+ gedit_commands_save_all_documents(window);
}
/* File revert */
Index: gedit/gedit-commands.h
===================================================================
RCS file: /cvs/gnome/gedit/gedit/gedit-commands.h,v
retrieving revision 1.17
diff -u -p -r1.17 gedit-commands.h
--- gedit/gedit-commands.h 18 Jun 2006 09:05:20 -0000 1.17
+++ gedit/gedit-commands.h 18 Jun 2006 12:56:26 -0000
@@ -52,6 +52,11 @@ gint gedit_commands_load_uris (GeditW
const GeditEncoding *encoding,
gint line_pos);
+void gedit_commands_save_current_document (GeditWindow *window);
+void gedit_commands_save_documents_list (GeditWindow *window,
+ GList *docs);
+void gedit_commands_save_all_documents (GeditWindow *window);
+
/*
* Non-exported functions
*/
@@ -150,9 +155,6 @@ void _gedit_cmd_help_about (GtkAction
void _gedit_cmd_file_close_tab (GeditTab *tab,
GeditWindow *window);
-
-void _gedit_cmd_file_save_documents_list (GeditWindow *window,
- GList *docs);
G_END_DECLS
Index: gedit/gedit-session.c
===================================================================
RCS file: /cvs/gnome/gedit/gedit/gedit-session.c,v
retrieving revision 1.13
diff -u -p -r1.13 gedit-session.c
--- gedit/gedit-session.c 22 May 2006 15:53:10 -0000 1.13
+++ gedit/gedit-session.c 18 Jun 2006 12:56:27 -0000
@@ -393,7 +393,7 @@ close_confirmation_dialog_response_handl
GEDIT_SESSION_LIST_OF_DOCS_TO_SAVE,
selected_documents);
- _gedit_cmd_file_save_documents_list (window, selected_documents);
+ gedit_commands_save_documents_list (window, selected_documents);
/* FIXME: also need to lock the window to prevent further changes... */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]