This commit is contained in:
Perberos
2011-11-07 16:46:58 -03:00
commit 528c1e5ff5
532 changed files with 709826 additions and 0 deletions

View File

@@ -0,0 +1,115 @@
## Process this file with automake to produce Makefile.in
noinst_LTLIBRARIES = \
gedit.la
nodist_gedit_la_SOURCES = \
gedit.c \
geditutils.c \
geditcommands.c
gedit_la_LDFLAGS = \
-module -avoid-version
gedit_la_LIBADD = \
$(PYTHON_LIB_LOC) \
$(PYTHON_LIBS) \
$(PYTHON_EXTRA_LIBS) \
$(PYGTK_LIBS)
gedit_la_CFLAGS = \
-I$(top_srcdir) \
-I$(top_builddir) \
-I$(top_srcdir)/gedit \
-I$(top_builddir)/gedit \
-I$(top_srcdir)/plugin-loaders/python \
-I$(top_builddir)/plugin-loaders/python \
$(GEDIT_CFLAGS) \
$(NO_STRICT_ALIASING_CFLAGS) \
$(PYGTK_CFLAGS) \
$(PYTHON_CFLAGS) \
$(AM_CFLAGS)
$(top_builddir)/gedit/gedit-enum-types.h:
cd $(top_builddir)/gedit && $(MAKE) gedit-enum-types.h
gedit.c: gedit.defs gedit.override geditplugin.override geditmessage.override $(top_builddir)/gedit/gedit-enum-types.h
( cd $(srcdir) && $(PYGTK_CODEGEN) \
--register $(PYGTK_DEFSDIR)/pango-types.defs \
--register $(PYGTK_DEFSDIR)/gdk-types.defs \
--register $(PYGTK_DEFSDIR)/gtk-types.defs \
--register $(PYGTK_DEFSDIR)/gtksourceview2.defs \
--register $(PYGOBJECT_DEFSDIR)/gio-types.defs \
--override $*.override \
--prefix py$* $(<F) ) > $@
geditutils.c: geditutils.defs geditutils.override
( cd $(srcdir) && $(PYGTK_CODEGEN) \
--override $*.override \
--prefix py$* $(<F) ) > $@
geditcommands.c: geditcommands.defs geditcommands.override gedit.defs
( cd $(srcdir) && $(PYGTK_CODEGEN) \
--register gedit.defs \
--register $(PYGTK_DEFSDIR)/gtk-types.defs \
--override $*.override \
--prefix py$* $(<F) ) > $@
BINDING_GEDIT_HEADERS_SRCDIR_IN = \
gedit/gedit-app.h \
gedit/gedit-document.h \
gedit/gedit-encodings.h \
gedit/gedit-plugin.h \
plugin-loaders/python/gedit-plugin-python.h \
gedit/gedit-view.h \
gedit/gedit-statusbar.h \
gedit/gedit-tab.h \
gedit/gedit-panel.h \
gedit/gedit-window.h \
gedit/gedit-help.h \
gedit/gedit-debug.h \
gedit/gedit-message-type.h \
gedit/gedit-message.h \
gedit/gedit-message-bus.h \
gedit/gedit-language-manager.h
BINDING_UTILS_HEADERS_SRCDIR_IN = \
gedit/gedit-utils.h
BINDING_COMMANDS_HEADERS_SRCDIR_IN = \
gedit/gedit-commands.h
BINDING_HEADERS_BUILDDIR_IN =
BINDING_GEDIT_HEADERS_SRCDIR := $(addprefix $(top_srcdir)/,$(BINDING_GEDIT_HEADERS_SRCDIR_IN))
BINDING_UTILS_HEADERS_SRCDIR := $(addprefix $(top_srcdir)/,$(BINDING_UTILS_HEADERS_SRCDIR_IN))
BINDING_COMMANDS_HEADERS_SRCDIR := $(addprefix $(top_srcdir)/,$(BINDING_COMMANDS_HEADERS_SRCDIR_IN))
BINDING_HEADERS_BUILDDIR := $(addprefix $(top_builddir)/,$(BINDING_HEADERS_BUILDDIR_IN))
regenerate-python-binding:
$(PYGTK_H2DEF) $(sort $(BINDING_GEDIT_HEADERS_SRCDIR) $(BINDING_HEADERS_BUILDDIR)) > gedit.defs.new
$(PYGTK_H2DEF) $(sort $(BINDING_UTILS_HEADERS_SRCDIR) $(BINDING_HEADERS_BUILDDIR)) > geditutils.defs.new
$(PYGTK_H2DEF) $(sort $(BINDING_COMMANDS_HEADERS_SRCDIR) $(BINDING_HEADERS_BUILDDIR)) > geditcommands.defs.new
BUILT_SOURCES = \
gedit.c \
geditutils.c \
geditcommands.c
EXTRA_DIST = \
gedit.override \
gedit.defs \
geditutils.override \
geditutils.defs \
geditcommands.override \
geditcommands.defs \
geditmessage.override \
geditplugin.override
CLEANFILES = $(BUILT_SOURCES)
dist-hook:
cd $(distdir); rm -f $(BUILT_SOURCES)
-include $(top_srcdir)/git.mk

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,461 @@
%%
headers
#include <pygobject.h>
#include <pygtk/pygtk.h>
#include <gedit/gedit-language-manager.h>
#include <gedit/gedit-plugin.h>
#include <gedit/gedit-app.h>
#include <gedit/gedit-encodings.h>
#include <gedit/gedit-enum-types.h>
#include <gedit/gedit-statusbar.h>
#include <gedit/gedit-debug.h>
#include <gedit/gedit-help.h>
#include "gedit-plugin-python.h"
void pygedit_register_classes (PyObject *d);
void pygedit_add_constants (PyObject *module, const gchar *strip_prefix);
static PyObject *
_helper_wrap_gobject_glist (const GList *list)
{
PyObject *py_list;
const GList *tmp;
if ((py_list = PyList_New(0)) == NULL) {
return NULL;
}
for (tmp = list; tmp != NULL; tmp = tmp->next) {
PyObject *py_obj = pygobject_new(G_OBJECT(tmp->data));
if (py_obj == NULL) {
Py_DECREF(py_list);
return NULL;
}
PyList_Append(py_list, py_obj);
Py_DECREF(py_obj);
}
return py_list;
}
static PyObject *
_helper_wrap_gobject_gslist (const GSList *list)
{
PyObject *py_list;
const GSList *tmp;
if ((py_list = PyList_New(0)) == NULL) {
return NULL;
}
for (tmp = list; tmp != NULL; tmp = tmp->next) {
PyObject *py_obj = pygobject_new(G_OBJECT(tmp->data));
if (py_obj == NULL) {
Py_DECREF(py_list);
return NULL;
}
PyList_Append(py_list, py_obj);
Py_DECREF(py_obj);
}
return py_list;
}
%%
include
geditplugin.override
geditmessage.override
%%
modulename gedit
%%
import gtk.Widget as PyGtkWidget_Type
import gobject.GObject as PyGObject_Type
import gtk.gdk.Screen as PyGdkScreen_Type
import gtk.VBox as PyGtkVBox_Type
import gtk.Window as PyGtkWindow_Type
import gtk.Image as PyGtkImage_Type
import gtk.Statusbar as PyGtkStatusbar_Type
import gtksourceview2.Buffer as PyGtkSourceBuffer_Type
import gtksourceview2.View as PyGtkSourceView_Type
import gtksourceview2.Language as PyGtkSourceLanguage_Type
import gtksourceview2.LanguageManager as PyGtkSourceLanguageManager_Type
%%
ignore-glob
*_get_type
gedit_document_error_quark
gedit_panel_add_item_with_stock_icon
%%
override gedit_app_create_window kwargs
static PyObject *
_wrap_gedit_app_create_window(PyGObject *self, PyObject *args, PyObject *kwargs)
{
static char *kwlist[] = { "screen", NULL};
PyGObject *screen = NULL;
GeditWindow *ret;
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
"|O!", kwlist,
&PyGdkScreen_Type, &screen))
return NULL;
ret = gedit_app_create_window(GEDIT_APP(self->obj),
screen ? GDK_SCREEN(screen->obj) : NULL);
/* pygobject_new handles NULL checking */
return pygobject_new((GObject *)ret);
}
%%
override gedit_app_get_windows
static PyObject *
_wrap_gedit_app_get_windows(PyGObject *self)
{
const GList *list;
PyObject *py_list;
list = gedit_app_get_windows (GEDIT_APP (self->obj));
py_list = _helper_wrap_gobject_glist (list);
return py_list;
}
%%
override gedit_app_get_views
static PyObject *
_wrap_gedit_app_get_views(PyGObject *self)
{
GList *list;
PyObject *py_list;
list = gedit_app_get_views (GEDIT_APP (self->obj));
py_list = _helper_wrap_gobject_glist (list);
g_list_free (list);
return py_list;
}
%%
override gedit_app_get_documents
static PyObject *
_wrap_gedit_app_get_documents(PyGObject *self)
{
GList *list;
PyObject *py_list;
list = gedit_app_get_documents (GEDIT_APP (self->obj));
py_list = _helper_wrap_gobject_glist (list);
g_list_free (list);
return py_list;
}
%%
override gedit_window_get_documents
static PyObject *
_wrap_gedit_window_get_documents(PyGObject *self)
{
GList *list;
PyObject *py_list;
list = gedit_window_get_documents (GEDIT_WINDOW (self->obj));
py_list = _helper_wrap_gobject_glist (list);
g_list_free(list);
return py_list;
}
%%
override gedit_window_get_unsaved_documents
static PyObject *
_wrap_gedit_window_get_unsaved_documents(PyGObject *self)
{
GList *list;
PyObject *py_list;
list = gedit_window_get_unsaved_documents (GEDIT_WINDOW (self->obj));
py_list = _helper_wrap_gobject_glist (list);
g_list_free(list);
return py_list;
}
%%
override gedit_window_get_views
static PyObject *
_wrap_gedit_window_get_views(PyGObject *self)
{
GList *list;
PyObject *py_list;
list = gedit_window_get_views (GEDIT_WINDOW (self->obj));
py_list = _helper_wrap_gobject_glist (list);
g_list_free(list);
return py_list;
}
%%
override gedit_window_close_tabs kwargs
static PyObject *
_wrap_gedit_window_close_tabs (PyGObject *self,
PyObject *args,
PyObject *kwargs)
{
static char *kwlist[] = { "tabs", NULL };
PyObject *list, *item;
GList *glist = NULL;
int len, i;
if (!PyArg_ParseTupleAndKeywords (args, kwargs,
"O:GeditWindow.close_tabs", 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, &PyGeditTab_Type))
{
PyErr_SetString (PyExc_TypeError,
"sequence item not a Gtkwidget object");
g_list_free (glist);
return NULL;
}
glist = g_list_append (glist, pygobject_get (item));
}
gedit_window_close_tabs (GEDIT_WINDOW (self->obj), glist);
g_list_free (glist);
Py_INCREF (Py_None);
return Py_None;
}
%%
override gedit_document_get_search_text
static PyObject *
_wrap_gedit_document_get_search_text(PyGObject *self)
{
PyObject *tuple, *string;
guint flags;
gchar *ret;
ret = gedit_document_get_search_text (GEDIT_DOCUMENT (self->obj), &flags);
tuple = PyTuple_New(2);
if (ret) {
string = PyString_FromString(ret);
PyTuple_SetItem(tuple, 0, string);
} else {
Py_INCREF(Py_None);
PyTuple_SetItem(tuple, 0, Py_None);
}
PyTuple_SetItem(tuple, 1, PyInt_FromLong(flags));
g_free(ret);
return tuple;
}
%%
override gedit_panel_add_item kwargs
static PyObject *
_wrap_gedit_panel_add_item(PyGObject *self, PyObject *args, PyObject *kwargs)
{
static char *kwlist1[] = { "item", "name", "image", NULL };
static char *kwlist2[] = { "item", "name", "stock_id", NULL };
PyGObject *item, *image;
char *name = NULL;
char *stock_id = NULL;
if (PyArg_ParseTupleAndKeywords(args, kwargs, "O!sO!:GeditPanel.add_item", kwlist1, &PyGtkWidget_Type, &item, &name, &PyGtkImage_Type, &image)) {
gedit_panel_add_item(GEDIT_PANEL(self->obj), GTK_WIDGET(item->obj), name, GTK_WIDGET(image->obj));
Py_INCREF(Py_None);
return Py_None;
}
PyErr_Clear();
if (PyArg_ParseTupleAndKeywords(args, kwargs, "O!ss:GeditPanel.add_item", kwlist2, &PyGtkWidget_Type, &item, &name, &stock_id)) {
gedit_panel_add_item_with_stock_icon(GEDIT_PANEL(self->obj), GTK_WIDGET(item->obj), name, stock_id);
Py_INCREF(Py_None);
return Py_None;
}
PyErr_Clear();
PyErr_SetString(PyExc_TypeError, "the last arg should be either a gtk.Image or a stock_id string");
return NULL;
}
%%
override gedit_app_get_default_deprecated
/* deprecated wrappers */
static PyObject *
_wrap_gedit_app_get_default_deprecated(PyObject *self)
{
if (PyErr_Warn(PyExc_DeprecationWarning, "use gedit.app_get_default instead") < 0)
return NULL;
return _wrap_gedit_app_get_default(self);
}
%%
override gedit_encoding_get_from_charset_deprecated kwargs
static PyObject *
_wrap_gedit_encoding_get_from_charset_deprecated(PyObject *self, PyObject *args, PyObject *kwargs)
{
if (PyErr_Warn(PyExc_DeprecationWarning, "use gedit.encoding_get_from_charset instead") < 0)
return NULL;
return _wrap_gedit_encoding_get_from_charset(self, args, kwargs);
}
%%
override gedit_encoding_get_from_index_deprecated kwargs
static PyObject *
_wrap_gedit_encoding_get_from_index_deprecated(PyObject *self, PyObject *args, PyObject *kwargs)
{
if (PyErr_Warn(PyExc_DeprecationWarning, "use gedit.encoding_get_from_index instead") < 0)
return NULL;
return _wrap_gedit_encoding_get_from_index(self, args, kwargs);
}
%%
override gedit_encoding_get_utf8_deprecated
static PyObject *
_wrap_gedit_encoding_get_utf8_deprecated(PyObject *self)
{
if (PyErr_Warn(PyExc_DeprecationWarning, "use gedit.encoding_get_utf8 instead") < 0)
return NULL;
return _wrap_gedit_encoding_get_utf8(self);
}
%%
override gedit_encoding_get_current_deprecated
static PyObject *
_wrap_gedit_encoding_get_current_deprecated(PyObject *self)
{
if (PyErr_Warn(PyExc_DeprecationWarning, "use gedit.encoding_get_current instead") < 0)
return NULL;
return _wrap_gedit_encoding_get_current(self);
}
%%
override gedit_tab_get_from_document_deprecated kwargs
static PyObject *
_wrap_gedit_tab_get_from_document_deprecated(PyObject *self, PyObject *args, PyObject *kwargs)
{
if (PyErr_Warn(PyExc_DeprecationWarning, "use gedit.tab_get_from_document instead") < 0)
return NULL;
return _wrap_gedit_tab_get_from_document(self, args, kwargs);
}
%%
override gedit_language_manager_list_languages_sorted kwargs
static PyObject *
_wrap_gedit_language_manager_list_languages_sorted(PyObject *self, PyObject *args, PyObject *kwargs)
{
static char *kwlist[] = { "lm", "include_hidden", NULL };
PyGObject *lm;
int include_hidden;
PyObject *py_list;
GSList *list;
if (!PyArg_ParseTupleAndKeywords (args, kwargs,
"O!i:language_manager_list_languages_sorted",
kwlist, &PyGtkSourceLanguageManager_Type, &lm,
&include_hidden))
return NULL;
list = gedit_language_manager_list_languages_sorted (GTK_SOURCE_LANGUAGE_MANAGER (lm->obj),
include_hidden);
py_list = _helper_wrap_gobject_gslist (list);
g_slist_free (list);
return py_list;
}
%%
override gedit_debug kwargs
static PyObject *
_wrap_gedit_debug(PyObject *self, PyObject *args, PyObject *kwargs)
{
static char *kwlist[] = { "message", NULL };
PyObject *traceback_module, *mdict, *func, *traceback, *tuple;
PyObject *filename, *lineno, *funcname;
char *message = NULL;
if (g_getenv ("GEDIT_DEBUG_PLUGINS") == NULL)
{
Py_INCREF (Py_None);
return Py_None;
}
if (!PyArg_ParseTupleAndKeywords (args, kwargs, "|s", kwlist, &message))
return NULL;
traceback_module = PyImport_ImportModule ("traceback");
if (traceback_module == NULL)
{
g_warning ("traceback module cannot be imported");
Py_INCREF (Py_None);
return Py_None;
}
mdict = PyModule_GetDict (traceback_module);
func = PyDict_GetItemString (mdict, "extract_stack");
traceback = PyObject_CallFunction (func, "zi", NULL, 1);
tuple = PyList_GetItem (traceback, 0);
if (tuple == NULL || !PyTuple_Check (tuple))
{
g_warning ("traceback tuple is null!");
}
else
{
filename = PyTuple_GetItem (tuple, 0);
lineno = PyTuple_GetItem (tuple, 1);
funcname = PyTuple_GetItem (tuple, 2);
if (message == NULL)
gedit_debug (GEDIT_DEBUG_PLUGINS,
PyString_AsString (filename),
PyInt_AsLong (lineno),
PyString_AsString (funcname));
else
gedit_debug_message (GEDIT_DEBUG_PLUGINS,
PyString_AsString (filename),
PyInt_AsLong (lineno),
PyString_AsString (funcname),
"%s",
message);
}
Py_DECREF (traceback);
Py_DECREF (traceback_module);
Py_INCREF (Py_None);
return Py_None;
}
%%
override gedit_statusbar_flash_message kwargs
static PyObject *
_wrap_gedit_statusbar_flash_message(PyGObject *self, PyObject *args, PyObject *kwargs)
{
static char *kwlist[] = { "context_id", "message", NULL };
int context_id;
char *message;
if (!PyArg_ParseTupleAndKeywords(args, kwargs,"is:GeditStatusbar.flash_message", kwlist, &context_id, &message))
return NULL;
gedit_statusbar_flash_message(GEDIT_STATUSBAR(self->obj), context_id, "%s", message);
Py_INCREF(Py_None);
return Py_None;
}
%%

View File

@@ -0,0 +1,45 @@
;; -*- scheme -*-
; object definitions ...
;; Enumerations and flags ...
;; From ../../gedit/gedit-commands.h
(define-function load_uri
(c-name "gedit_commands_load_uri")
(return-type "none")
(parameters
'("GeditWindow*" "window")
'("const-gchar*" "uri")
'("const-GeditEncoding*" "encoding")
'("gint" "line_pos")
)
)
(define-function load_uris
(c-name "gedit_commands_load_uris")
(return-type "gint")
(parameters
'("GeditWindow*" "window")
'("const-GSList*" "uris")
'("const-GeditEncoding*" "encoding")
'("gint" "line_pos")
)
)
(define-function save_document
(c-name "gedit_commands_save_document")
(return-type "none")
(parameters
'("GeditWindow*" "window")
'("GeditDocument*" "document")
)
)
(define-function save_all_documents
(c-name "gedit_commands_save_all_documents")
(return-type "none")
(parameters
'("GeditWindow*" "window")
)
)

View File

@@ -0,0 +1,122 @@
%%
headers
#define NO_IMPORT_PYGOBJECT
#define NO_IMPORT_PYGTK
#include <pygobject.h>
#include <pygtk/pygtk.h>
#include "gedit-commands.h"
#include "gedit-window.h"
void pygeditcommands_register_classes (PyObject *d);
void pygeditcommands_add_constants (PyObject *module, const gchar *strip_prefix);
%%
modulename gedit.commands
%%
import gedit.Window as PyGeditWindow_Type
import gedit.Document as PyGeditDocument_Type
%%
ignore-glob
_*
%%
override gedit_commands_load_uri kwargs
static PyObject *
_wrap_gedit_commands_load_uri (PyObject *self, PyObject *args, PyObject *kwargs)
{
static char *kwlist[] = { "window", "uri", "encoding", "line_pos", NULL };
PyGObject *window;
char *uri;
int line_pos = 0;
PyObject *py_encoding = NULL;
GeditEncoding *encoding = NULL;
if (!PyArg_ParseTupleAndKeywords (args, kwargs, "O!s|Oi:load_uri",
kwlist, &PyGeditWindow_Type,
&window, &uri, &py_encoding,
&line_pos))
return NULL;
if (py_encoding != NULL && py_encoding != Py_None)
{
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;
}
}
gedit_commands_load_uri (GEDIT_WINDOW (window->obj), uri, encoding,
line_pos);
Py_INCREF (Py_None);
return Py_None;
}
%%
override gedit_commands_load_uris kwargs
static PyObject *
_wrap_gedit_commands_load_uris (PyObject *self, PyObject *args, PyObject *kwargs)
{
static char *kwlist[] = { "window", "uris", "encoding", "line_pos", NULL };
PyGObject *window;
GSList *uris = NULL;
int line_pos = 0;
PyObject *py_encoding = NULL;
PyObject *list;
PyObject *item;
GeditEncoding *encoding = NULL;
int len;
int i;
if (!PyArg_ParseTupleAndKeywords (args, kwargs, "O!O|Oi:load_uri",
kwlist, &PyGeditWindow_Type,
&window, &list, &py_encoding,
&line_pos))
return NULL;
if (py_encoding != NULL && py_encoding != Py_None)
{
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,
"second 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 (uris);
return NULL;
}
uris = g_slist_prepend (uris, PyString_AsString (item));
}
uris = g_slist_reverse (uris);
gedit_commands_load_uris (GEDIT_WINDOW (window->obj), uris,
encoding, line_pos);
g_slist_free (uris);
Py_INCREF (Py_None);
return Py_None;
}

View File

@@ -0,0 +1,556 @@
%%
headers
#include <gedit/gedit-message-bus.h>
#include <gedit/gedit-message.h>
static GType
_helper_wrap_get_gtype_from_pytype (PyObject *pytype)
{
PyTypeObject *type = (PyTypeObject *)pytype;
if (type == &PyList_Type || type == &PyTuple_Type)
return G_TYPE_STRV;
return pyg_type_from_object (pytype);
}
static gchar *
_helper_wrap_get_string (PyObject *obj)
{
PyObject *str;
gchar *result;
str = PyObject_Str (obj);
if (!str)
return NULL;
result = g_strdup (PyString_AsString (str));
Py_DECREF (str);
return result;
}
static int
_helper_wrap_list_to_gvalue (GValue *gvalue, PyObject *pyvalue)
{
int num;
gchar **lst;
gint i;
num = PySequence_Size (pyvalue);
lst = g_new0 (gchar *, num + 1);
for (i = 0; i < num; i++)
{
lst[i] = _helper_wrap_get_string (PySequence_GetItem (pyvalue, i));
if (lst[i] == NULL)
{
g_strfreev (lst);
return 1;
}
}
g_value_set_boxed (gvalue, lst);
g_strfreev (lst);
return 0;
}
static int
_helper_wrap_get_gvalue_from_pyobject (GValue *gvalue, PyObject *pyvalue)
{
if (pyvalue->ob_type == &PyList_Type || pyvalue->ob_type == &PyTuple_Type)
return _helper_wrap_list_to_gvalue (gvalue, pyvalue);
return pyg_value_from_pyobject(gvalue, pyvalue);
}
static int
_helper_wrap_message_set_value(GeditMessage *message, PyObject *pykey, PyObject *pyvalue)
{
gchar *key;
GType gtype;
GValue value = {0,};
key = _helper_wrap_get_string(pykey);
if (key == NULL)
return 0;
gtype = gedit_message_get_key_type(message, key);
if (gtype == 0) {
PyErr_SetString(PyExc_TypeError, "invalid key");
g_free (key);
return 0;
}
g_value_init(&value, gtype);
if (_helper_wrap_get_gvalue_from_pyobject (&value, pyvalue)) {
PyErr_SetString(PyExc_TypeError,
"value is of the wrong type for this key");
g_free (key);
return 0;
}
gedit_message_set_value(message, key, &value);
g_value_unset(&value);
g_free (key);
return 1;
}
typedef void (*ParsePairFunc)(PyObject *key, PyObject *value, gpointer user_data);
static void
_helper_parse_pairs_dict (PyObject *dict, ParsePairFunc func, gpointer user_data)
{
if (!dict)
return;
PyObject *key, *value;
Py_ssize_t i = 0;
while (PyDict_Next(dict, &i, &key, &value))
{
func(key, value, user_data);
}
}
static void
_helper_parse_pairs(PyObject *args, PyObject *kwargs, ParsePairFunc func, gpointer user_data)
{
guint len;
guint i;
len = PyTuple_Size(args);
for (i = 0; i < len; ++i)
{
PyObject *d = PyTuple_GetItem(args, i);
if (PyDict_Check(d))
_helper_parse_pairs_dict(d, func, user_data);
}
_helper_parse_pairs_dict(kwargs, func, user_data);
}
static void
_helper_message_set(PyObject *key, PyObject *value, GeditMessage *message)
{
_helper_wrap_message_set_value(message, key, value);
}
static void
_helper_message_set_values(GeditMessage *message, PyObject *args, PyObject *kwargs)
{
_helper_parse_pairs(args, kwargs, (ParsePairFunc)_helper_message_set, message);
}
static GeditMessage *
_helper_wrap_create_message(GeditMessageBus *bus, PyObject *args, PyObject *kwargs)
{
PyObject *pypath, *pymethod, *pydict;
if (!PyArg_ParseTuple(args, "OO|O:GeditMessage.create", &pypath, &pymethod, &pydict))
return NULL;
gchar *object_path = _helper_wrap_get_string(pypath);
gchar *method = _helper_wrap_get_string(pymethod);
GeditMessageType *message_type = gedit_message_bus_lookup (bus, object_path, method);
GeditMessage *message;
if (message_type)
{
message = gedit_message_type_instantiate(message_type, NULL);
_helper_message_set_values(message, args, kwargs);
}
else
{
PyErr_SetString(PyExc_StandardError, "Message type does not exist");
message = NULL;
}
g_free(object_path);
g_free(method);
return message;
}
typedef struct {
PyObject *func;
PyObject *data;
} PyGeditCustomNotify;
static void
pygedit_custom_destroy_notify(gpointer user_data)
{
PyGeditCustomNotify *cunote = user_data;
PyGILState_STATE state;
g_return_if_fail(user_data);
state = pyg_gil_state_ensure();
Py_XDECREF(cunote->func);
Py_XDECREF(cunote->data);
pyg_gil_state_release(state);
g_free(cunote);
}
%%
ignore-glob
*_get_type
gedit_message_type_foreach
gedit_message_type_instantiate_valist
gedit_message_type_new_valist
gedit_message_get_valist
gedit_message_set_valist
gedit_message_set_valuesv
gedit_message_bus_disconnect_by_func
gedit_message_bus_block_by_func
gedit_message_bus_unblock_by_func
%%
override gedit_message_type_new kwargs
typedef struct
{
GeditMessageType *message_type;
PyObject *optional;
} MessageTypeSetInfo;
static void
_message_type_set(PyObject *key, PyObject *value, MessageTypeSetInfo *info)
{
GType gtype;
gchar *k = _helper_wrap_get_string(key);
if (!k)
return;
gtype = _helper_wrap_get_gtype_from_pytype(value);
gboolean optional = info->optional && PySequence_Contains(info->optional, key);
gedit_message_type_set(info->message_type, optional, k, gtype, NULL);
g_free(k);
}
static int
_wrap_gedit_message_type_new(PyGObject *self, PyObject *args, PyObject *kwargs)
{
PyObject *pypath, *pymethod, *optional = NULL, *pydict;
if (!PyArg_ParseTuple(args, "OO|OO:GeditMessageType.new", &pypath, &pymethod, &optional, &pydict))
return -1;
GeditMessageType *message_type = GEDIT_MESSAGE_TYPE(g_object_new(pyg_type_from_object((PyObject *) self), NULL));
MessageTypeSetInfo info = {message_type, optional && PySequence_Check(optional) ? optional : NULL};
_helper_parse_pairs (args, kwargs, (ParsePairFunc)_message_type_set, &info);
self->obj = (GObject *)message_type;
pygobject_register_wrapper((PyObject *) self);
return 0;
}
%%
override gedit_message_type_instantiate kwargs
static PyObject *
_wrap_gedit_message_type_instantiate(PyGObject *self, PyObject *args, PyObject *kwargs)
{
GeditMessageType *message_type = GEDIT_MESSAGE_TYPE (self->obj);
GeditMessage *message = gedit_message_type_instantiate(message_type, NULL);
_helper_message_set_values(message, args, kwargs);
return pygobject_new((GObject *)message);
}
%%
override gedit_message_get args
static PyObject *
_wrap_gedit_message_get(PyGObject *self, PyObject *args)
{
guint len, i;
PyObject *ret;
len = PyTuple_Size(args);
ret = PyTuple_New(len);
for (i = 0; i < len; i++) {
GValue value = { 0, };
PyObject *py_key = PyTuple_GetItem(args, i);
gchar *key = _helper_wrap_get_string(py_key);
if (!key) {
PyErr_SetString(PyExc_TypeError, "keys must be strings");
Py_DECREF(ret);
return NULL;
}
gedit_message_get_value (GEDIT_MESSAGE (self->obj), key, &value);
g_free (key);
PyTuple_SetItem(ret, i, pyg_value_as_pyobject(&value, TRUE));
g_value_unset(&value);
}
return ret;
}
%%
override gedit_message_get_value kwargs
static PyObject *
_wrap_gedit_message_get_value(PyGObject *self, PyObject *args, PyObject *kwargs)
{
static char *kwlist[] = { "key", NULL };
const gchar *key;
PyObject *ret;
GValue value = { 0, };
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:GeditMessage.get_value", kwlist, &key))
return NULL;
gedit_message_get_value(GEDIT_MESSAGE(self->obj), key, &value);
ret = pyg_value_as_pyobject(&value, TRUE);
g_value_unset(&value);
return ret;
}
%%
override gedit_message_set_value kwargs
static PyObject *
_wrap_gedit_message_set_value(PyGObject *self, PyObject *args, PyObject *kwargs)
{
static char *kwlist[] = { "key", "value", NULL };
PyObject *pykey, *pyvalue;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO:GeditMessage.set_value", kwlist, &pykey, &pyvalue))
return NULL;
if (!_helper_wrap_message_set_value(GEDIT_MESSAGE(self->obj), pykey, pyvalue))
return NULL;
Py_INCREF(Py_None);
return Py_None;
}
%%
override gedit_message_set kwargs
static PyObject *
_wrap_gedit_message_set (PyGObject *self, PyObject *args, PyObject *kwargs) {
_helper_message_set_values(GEDIT_MESSAGE(self->obj), args, kwargs);
Py_INCREF(Py_None);
return Py_None;
}
%%
override gedit_message_bus_new
static int
_wrap_gedit_message_bus_new(PyGObject *self)
{
pygobject_construct (self, NULL);
if (!self->obj) {
PyErr_SetString (PyExc_RuntimeError, "could not create gedit.MessageBus object");
return -1;
}
return 0;
}
%%
new-constructor GEDIT_TYPE_MESSAGE_BUS
%%
override gedit_message_bus_register kwargs
static PyObject *
_wrap_gedit_message_bus_register(PyGObject *self, PyObject *args, PyObject *kwargs)
{
PyObject *pypath, *pymethod, *optional = NULL, *pydict;
GeditMessageBus *bus = GEDIT_MESSAGE_BUS(self->obj);
if (!PyArg_ParseTuple(args, "OO|OO:GeditMessageBus.register", &pypath, &pymethod, &optional, &pydict))
return NULL;
gchar *object_path = _helper_wrap_get_string(pypath);
gchar *method = _helper_wrap_get_string(pymethod);
GeditMessageType *message_type = gedit_message_bus_register(bus, object_path, method, 0, NULL);
g_free(object_path);
g_free(method);
if (!message_type)
{
PyErr_SetString(PyExc_StandardError, "Message type already exists");
return NULL;
}
MessageTypeSetInfo info = {message_type, optional && PySequence_Check(optional) ? optional : NULL};
_helper_parse_pairs (args, kwargs, (ParsePairFunc)_message_type_set, &info);
return pyg_boxed_new(GEDIT_TYPE_MESSAGE_TYPE, message_type, TRUE, TRUE);
}
%%
override gedit_message_bus_connect kwargs
static void
pygedit_message_bus_connect_cb(GeditMessageBus *bus, GeditMessage *message, gpointer data)
{
PyGILState_STATE state;
PyGeditCustomNotify *cunote = data;
PyObject *pybus, *pymessage, *retobj;
g_assert(cunote->func);
state = pyg_gil_state_ensure();
pybus = pygobject_new((GObject *)bus);
pymessage = pygobject_new((GObject *)message);
if (cunote->data) {
retobj = PyEval_CallFunction(cunote->func, "(NNO)", pybus, pymessage, cunote->data);
} else {
retobj = PyEval_CallFunction(cunote->func, "(NN)", pybus, pymessage);
}
if (PyErr_Occurred()) {
PyErr_Print();
}
Py_XDECREF(retobj);
pyg_gil_state_release(state);
}
static PyObject *
_wrap_gedit_message_bus_connect(PyGObject *self, PyObject *args, PyObject *kwargs)
{
static char *kwlist[] = { "domain", "name", "func", "data", NULL };
PyObject *pyfunc, *pyarg = NULL;
const gchar *domain;
const gchar *name;
PyGeditCustomNotify *cunote;
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
"ssO|O:GeditMessageBus.connect",
kwlist, &domain, &name, &pyfunc, &pyarg))
return NULL;
if (!PyCallable_Check(pyfunc)) {
PyErr_SetString(PyExc_TypeError, "func must be a callable object");
return NULL;
}
cunote = g_new(PyGeditCustomNotify, 1);
Py_INCREF(pyfunc);
cunote->func = pyfunc;
Py_XINCREF(pyarg);
cunote->data = pyarg;
guint id = gedit_message_bus_connect(GEDIT_MESSAGE_BUS(self->obj),
domain,
name,
pygedit_message_bus_connect_cb,
(gpointer)cunote,
pygedit_custom_destroy_notify);
return PyLong_FromUnsignedLong(id);
}
%%
override gedit_message_bus_send kwargs
static PyObject *
_wrap_gedit_message_bus_send(PyGObject *self, PyObject *args, PyObject *kwargs)
{
/* create a new message object */
GeditMessage *message;
GeditMessageBus *bus = GEDIT_MESSAGE_BUS(self->obj);
message = _helper_wrap_create_message(bus, args, kwargs);
if (!message)
return NULL;
gedit_message_bus_send_message(bus, message);
g_object_unref (message);
Py_INCREF(Py_None);
return Py_None;
}
%%
override gedit_message_bus_send_sync kwargs
static PyObject *
_wrap_gedit_message_bus_send_sync(PyGObject *self, PyObject *args, PyObject *kwargs)
{
/* create a new message object */
GeditMessage *message;
GeditMessageBus *bus = GEDIT_MESSAGE_BUS(self->obj);
message = _helper_wrap_create_message(bus, args, kwargs);
if (!message)
return NULL;
gedit_message_bus_send_message_sync(bus, message);
return pygobject_new((GObject *)message);
}
%%
override-slot GeditMessage.tp_getattro
static PyObject *
_wrap_gedit_message_tp_getattro(PyObject *self, PyObject *attrname)
{
GeditMessage *message = GEDIT_MESSAGE(((PyGObject *)self)->obj);
GeditMessageType *type;
gchar *name = _helper_wrap_get_string (attrname);
gboolean exists;
gboolean intype;
PyObject *ret;
if (name == NULL)
{
PyErr_SetString(PyExc_TypeError, "attr name somehow not a string");
return NULL;
}
g_object_get (message, "type", &type, NULL);
intype = gedit_message_type_lookup (type, name) != G_TYPE_INVALID;
gedit_message_type_unref (type);
exists = gedit_message_has_key (message, name);
if (!intype)
{
ret = PyObject_GenericGetAttr(self, attrname);
}
else if (exists)
{
GValue value = { 0, };
gedit_message_get_value (message, name, &value);
ret = pyg_value_as_pyobject(&value, TRUE);
g_value_unset (&value);
}
else
{
Py_INCREF(Py_None);
ret = Py_None;
}
g_free (name);
return ret;
}
%%
override-slot GeditMessage.tp_setattro
static int
_wrap_gedit_message_tp_setattro(PyObject *self, PyObject *attrname, PyObject *value)
{
GeditMessage *message = GEDIT_MESSAGE(((PyGObject *)self)->obj);
if (!_helper_wrap_message_set_value(message, attrname, value))
{
return PyObject_GenericSetAttr(self, attrname, value);
}
else
{
return 1;
}
}

View File

@@ -0,0 +1,193 @@
%%
headers
#include <gedit/gedit-plugin.h>
#include <gedit/gedit-window.h>
%%
override gedit_plugin_activate kwargs
static PyObject *
_wrap_gedit_plugin_activate(PyGObject *self, PyObject *args, PyObject *kwargs)
{
gpointer klass, klass2;
static char *kwlist[] = { "window", NULL };
PyGObject *window;
PyObject *cls = (PyObject *)(((PyObject *)self)->ob_type);
if (!PyArg_ParseTupleAndKeywords (args,
kwargs,
"O!:GeditPlugin.activate",
kwlist,
&PyGeditWindow_Type,
&window))
return NULL;
klass = g_type_class_ref (pyg_type_from_object (cls));
if (GEDIT_IS_PLUGIN_PYTHON_CLASS (klass))
{
klass2 = g_type_class_peek_parent (klass);
g_type_class_unref (klass);
klass = g_type_class_ref (G_TYPE_FROM_CLASS (klass2));
}
if (GEDIT_PLUGIN_CLASS (klass)->activate)
GEDIT_PLUGIN_CLASS (klass)->activate (GEDIT_PLUGIN (self->obj),
GEDIT_WINDOW (window->obj));
else {
PyErr_SetString (PyExc_NotImplementedError,
"virtual method GeditPlugin.activate not implemented");
g_type_class_unref (klass);
return NULL;
}
g_type_class_unref (klass);
Py_INCREF(Py_None);
return Py_None;
}
%%
override gedit_plugin_deactivate kwargs
static PyObject *
_wrap_gedit_plugin_deactivate(PyGObject *self, PyObject *args, PyObject *kwargs)
{
gpointer klass, klass2;
static char *kwlist[] = {"window", NULL};
PyGObject *window;
PyObject *cls = (PyObject *)(((PyObject *)self)->ob_type);
if (!PyArg_ParseTupleAndKeywords (args,
kwargs,
"O!:GeditPlugin.deactivate",
kwlist,
&PyGeditWindow_Type,
&window))
return NULL;
klass = g_type_class_ref (pyg_type_from_object (cls));
if (GEDIT_IS_PLUGIN_PYTHON_CLASS (klass))
{
klass2 = g_type_class_peek_parent (klass);
g_type_class_unref (klass);
klass = g_type_class_ref (G_TYPE_FROM_CLASS (klass2));
}
if (GEDIT_PLUGIN_CLASS (klass)->deactivate)
GEDIT_PLUGIN_CLASS (klass)->deactivate (GEDIT_PLUGIN (self->obj),
GEDIT_WINDOW (window->obj));
else {
PyErr_SetString (PyExc_NotImplementedError,
"virtual method GeditPlugin.deactivate not implemented");
g_type_class_unref (klass);
return NULL;
}
g_type_class_unref (klass);
Py_INCREF(Py_None);
return Py_None;
}
%%
override gedit_plugin_update_ui kwargs
static PyObject *
_wrap_gedit_plugin_update_ui (PyGObject *self, PyObject *args, PyObject *kwargs)
{
gpointer klass, klass2;
static char *kwlist[] = {"window", NULL};
PyGObject *window;
PyObject *cls = (PyObject *)(((PyObject *)self)->ob_type);
if (!PyArg_ParseTupleAndKeywords (args,
kwargs,
"O!:GeditPlugin.update_ui",
kwlist,
&PyGeditWindow_Type,
&window))
return NULL;
klass = g_type_class_ref (pyg_type_from_object (cls));
if (GEDIT_IS_PLUGIN_PYTHON_CLASS (klass))
{
klass2 = g_type_class_peek_parent (klass);
g_type_class_unref (klass);
klass = g_type_class_ref (G_TYPE_FROM_CLASS (klass2));
}
if (GEDIT_PLUGIN_CLASS (klass)->update_ui)
GEDIT_PLUGIN_CLASS (klass)->update_ui (GEDIT_PLUGIN (self->obj),
GEDIT_WINDOW (window->obj));
else {
PyErr_SetString (PyExc_NotImplementedError,
"virtual method GeditPlugin.update_ui not implemented");
g_type_class_unref (klass);
return NULL;
}
g_type_class_unref (klass);
Py_INCREF(Py_None);
return Py_None;
}
%%
override gedit_plugin_is_configurable
static PyObject *
_wrap_gedit_plugin_is_configurable (PyGObject *self)
{
int ret;
gpointer klass, klass2;
PyObject *cls = (PyObject *)(((PyObject *)self)->ob_type);
klass = g_type_class_ref (pyg_type_from_object (cls));
if (GEDIT_IS_PLUGIN_PYTHON_CLASS (klass))
{
klass2 = g_type_class_peek_parent (klass);
g_type_class_unref (klass);
klass = g_type_class_ref (G_TYPE_FROM_CLASS (klass2));
}
if (GEDIT_PLUGIN_CLASS (klass)->is_configurable)
ret = GEDIT_PLUGIN_CLASS (klass)->is_configurable (GEDIT_PLUGIN (self->obj));
else {
PyErr_SetString (PyExc_NotImplementedError,
"virtual method GeditPlugin.is_configurable not implemented");
g_type_class_unref (klass);
return NULL;
}
g_type_class_unref (klass);
return PyBool_FromLong (ret);
}
%%
override gedit_plugin_configure_dialog
static PyObject *
_wrap_gedit_plugin_create_configure_dialog (PyGObject *self)
{
GtkWidget *ret;
gpointer klass, klass2;
PyObject *cls = (PyObject *)(((PyObject *)self)->ob_type);
klass = g_type_class_ref(pyg_type_from_object (cls));
if (GEDIT_IS_PLUGIN_PYTHON_CLASS (klass))
{
klass2 = g_type_class_peek_parent (klass);
g_type_class_unref (klass);
klass = g_type_class_ref (G_TYPE_FROM_CLASS (klass2));
}
if (GEDIT_PLUGIN_CLASS (klass)->create_configure_dialog)
ret = GEDIT_PLUGIN_CLASS (klass)->create_configure_dialog (GEDIT_PLUGIN (self->obj));
else {
PyErr_SetString (PyExc_NotImplementedError,
"virtual method GeditPlugin.create_configure_dialog not implemented");
g_type_class_unref (klass);
return NULL;
}
g_type_class_unref (klass);
/* pygobject_new handles NULL checking */
return pygobject_new ((GObject *)ret);
}

View File

@@ -0,0 +1,67 @@
;; -*- scheme -*-
;; From ../../gedit/gedit-utils.h
(define-function uri_has_writable_scheme
(c-name "gedit_utils_uri_has_writable_scheme")
(return-type "gboolean")
(parameters
'("const-gchar*" "uri")
)
)
(define-function uri_has_file_scheme
(c-name "gedit_utils_uri_has_file_scheme")
(return-type "gboolean")
(parameters
'("const-gchar*" "uri")
)
)
(define-function uri_exists
(c-name "gedit_utils_uri_exists")
(return-type "gboolean")
(parameters
'("const-gchar*" "text_uri")
)
)
(define-function uri_is_valid
(c-name "gedit_utils_is_valid_uri")
(return-type "gboolean")
(parameters
'("const-gchar*" "uri")
)
)
(define-function uri_get_dirname
(c-name "gedit_utils_uri_get_dirname")
(return-type "gchar*")
(parameters
'("const-char*" "uri")
)
)
(define-function menu_position_under_widget
(c-name "gedit_utils_menu_position_under_widget")
(return-type "none")
(parameters
'("GtkMenu*" "menu")
'("gint*" "x")
'("gint*" "y")
'("gboolean*" "push_in")
'("gpointer" "user_data")
)
)
(define-function menu_position_under_tree_view
(c-name "gedit_utils_menu_position_under_tree_view")
(return-type "none")
(parameters
'("GtkMenu*" "menu")
'("gint*" "x")
'("gint*" "y")
'("gboolean*" "push_in")
'("gpointer" "user_data")
)
)

View File

@@ -0,0 +1,85 @@
%%
headers
#define NO_IMPORT_PYGOBJECT
#define NO_IMPORT_PYGTK
#include <pygobject.h>
#include <pygtk/pygtk.h>
#include "gedit-utils.h"
void pygeditutils_register_classes (PyObject *d);
void pygeditutils_add_constants (PyObject *module, const gchar *strip_prefix);
%%
modulename gedit.utils
%%
import gtk.Widget as PyGtkWidget_Type
import gtk.TreeView as PyGtkTreeView_Type
import gtk.Menu as PyGtkMenu_Type
%%
ignore-glob
_*
%%
override gedit_utils_menu_position_under_widget kwargs
static PyObject *
_wrap_gedit_utils_menu_position_under_widget (PyObject *self,
PyObject *args,
PyObject *kwargs)
{
static char *kwlist[] = { "menu", "widget", NULL };
PyObject *py_menu, *py_widget;
GtkMenu *menu;
GtkWidget *widget;
gint x, y;
gboolean push_in;
PyObject *tuple;
if (!PyArg_ParseTupleAndKeywords (args, kwargs,
"O!O!", kwlist,
&PyGtkMenu_Type, &py_menu,
&PyGtkWidget_Type, &py_widget))
return NULL;
menu = GTK_MENU (pygobject_get (py_menu));
widget = GTK_WIDGET (pygobject_get (py_widget));
gedit_utils_menu_position_under_widget (menu, &x, &y, &push_in, widget);
tuple = PyTuple_New (3);
PyTuple_SetItem (tuple, 0, PyInt_FromLong (x));
PyTuple_SetItem (tuple, 1, PyInt_FromLong (y));
PyTuple_SetItem (tuple, 2, PyBool_FromLong (push_in));
return tuple;
}
%%
override gedit_utils_menu_position_under_tree_view kwargs
static PyObject *
_wrap_gedit_utils_menu_position_under_tree_view (PyObject *self,
PyObject *args,
PyObject *kwargs)
{
static char *kwlist[] = { "menu", "tree_view", NULL };
PyObject *py_menu, *py_view;
GtkMenu *menu;
GtkTreeView *view;
gint x, y;
gboolean push_in;
PyObject *tuple;
if (!PyArg_ParseTupleAndKeywords (args, kwargs,
"O!O!", kwlist,
&PyGtkMenu_Type, &py_menu,
&PyGtkTreeView_Type, &py_view))
return NULL;
menu = GTK_MENU (pygobject_get (py_menu));
view = GTK_TREE_VIEW (pygobject_get (py_view));
gedit_utils_menu_position_under_widget (menu, &x, &y, &push_in, view);
tuple = PyTuple_New (3);
PyTuple_SetItem (tuple, 0, PyInt_FromLong (x));
PyTuple_SetItem (tuple, 1, PyInt_FromLong (y));
PyTuple_SetItem (tuple, 2, PyBool_FromLong (push_in));
return tuple;
}