[gtkmm] Fix the build with the latest GTK+ from git master.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtkmm] Fix the build with the latest GTK+ from git master.
- Date: Tue, 28 Sep 2010 08:14:19 +0000 (UTC)
commit 1d559abcbe4ff7501336f14e645b910636e2a0d8
Author: Murray Cumming <murrayc murrayc com>
Date: Tue Sep 28 10:13:54 2010 +0200
Fix the build with the latest GTK+ from git master.
* gtk/gtkmm/private/object_p.h: Add this back for now, to avoid making
more changes to the Gtk::Object code.
* gtk/gtkmm/object.[h|cc]: Comment out the code that uses
gtk_object_destroy(), adding TODO comments. If we don't find a way to
do this in GTK+ 3 then we may need to remove our Gtk::Object and require
Gtk::CellRenderer and Gtk::TreeViewColumn to be used via RefPtr.
* gtk/src/filechooser.hg: Fix Filter->FileFilter typos.
* gtk/src/recentchooser.hg: Use RecentFilter via RefPtr.
* gtk/src/ruler.hg: Add a Cairo::Context parameter to the vfuncs.
* gtk/src/widget.hg: Remove input_shape_combine_mask() and
shape_combine_mask(). Correct some vfunc parameters.
* gtk/src/gtk_vfuncs.defs:
* tools/m4/convert_gtk.m4: Make necessary corrections.
* gtk/src/image.hg: Remove get_pixmap() because Gdk::Pixmap is gone.
* gtk/src/scale.hg: Remove set/get_bg_pixmap().
* gtk/src/scale.ccg, scrollbar.ccg: Fix typos.
* gtk/src/viewport.hg, scrolledwindow.hg: Remove duplicate method
declarations.
ChangeLog | 27 ++++++++++++++++++++
gtk/gtkmm/filelist.am | 3 +-
gtk/gtkmm/object.cc | 55 +++++++++++++++++++----------------------
gtk/gtkmm/object.h | 2 +-
gtk/gtkmm/private/object_p.h | 37 ++++++++++++++++++++++++++++
gtk/src/cellrenderer.hg | 2 +-
gtk/src/filechooser.hg | 6 +---
gtk/src/filefilter.hg | 2 +-
gtk/src/gtk_vfuncs.defs | 37 +++++-----------------------
gtk/src/image.ccg | 11 --------
gtk/src/image.hg | 1 -
gtk/src/recentchooser.hg | 26 +++++++++++--------
gtk/src/recentfilter.hg | 6 ++--
gtk/src/ruler.hg | 9 +++++-
gtk/src/scale.ccg | 14 ++++------
gtk/src/scrollbar.ccg | 11 ++++----
gtk/src/scrolledwindow.hg | 2 -
gtk/src/style.ccg | 20 ---------------
gtk/src/style.hg | 12 ++++-----
gtk/src/treeviewcolumn.ccg | 1 -
gtk/src/treeviewcolumn.hg | 6 ++--
gtk/src/viewport.hg | 4 ---
gtk/src/widget.ccg | 16 ++----------
gtk/src/widget.hg | 26 ++++----------------
gtk/src/window.ccg | 16 ++++++------
gtk/src/window.hg | 2 +-
tools/m4/convert_gtk.m4 | 12 ++++-----
27 files changed, 170 insertions(+), 196 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 48b36f9..62f8ccb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,30 @@
+2010-09-28 Murray Cumming <murrayc murrayc com>
+
+ Fix the build with the latest GTK+ from git master.
+
+ * gtk/gtkmm/private/object_p.h: Add this back for now, to avoid making
+ more changes to the Gtk::Object code.
+ * gtk/gtkmm/object.[h|cc]: Comment out the code that uses
+ gtk_object_destroy(), adding TODO comments. If we don't find a way to
+ do this in GTK+ 3 then we may need to remove our Gtk::Object and require
+ Gtk::CellRenderer and Gtk::TreeViewColumn to be used via RefPtr.
+
+ * gtk/src/filechooser.hg: Fix Filter->FileFilter typos.
+ * gtk/src/recentchooser.hg: Use RecentFilter via RefPtr.
+
+ * gtk/src/ruler.hg: Add a Cairo::Context parameter to the vfuncs.
+ * gtk/src/widget.hg: Remove input_shape_combine_mask() and
+ shape_combine_mask(). Correct some vfunc parameters.
+ * gtk/src/gtk_vfuncs.defs:
+ * tools/m4/convert_gtk.m4: Make necessary corrections.
+
+ * gtk/src/image.hg: Remove get_pixmap() because Gdk::Pixmap is gone.
+ * gtk/src/scale.hg: Remove set/get_bg_pixmap().
+
+ * gtk/src/scale.ccg, scrollbar.ccg: Fix typos.
+ * gtk/src/viewport.hg, scrolledwindow.hg: Remove duplicate method
+ declarations.
+
2010-09-27 Murray Cumming <murrayc murrayc com>
Partly fixed the build with latest GTK+.
diff --git a/gtk/gtkmm/filelist.am b/gtk/gtkmm/filelist.am
index af01f28..0a91b8b 100644
--- a/gtk/gtkmm/filelist.am
+++ b/gtk/gtkmm/filelist.am
@@ -39,4 +39,5 @@ gtkmm_files_extra_h = \
treeview_private.h \
wrap_init.h
-gtkmm_files_extra_ph =
+gtkmm_files_extra_ph = \
+ private/object_p.h
diff --git a/gtk/gtkmm/object.cc b/gtk/gtkmm/object.cc
index 600e84e..65e5535 100644
--- a/gtk/gtkmm/object.cc
+++ b/gtk/gtkmm/object.cc
@@ -15,6 +15,8 @@
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include <gtkmm/object.h>
+#include <gtkmm/private/object_p.h>
#include <glibmm/quark.h>
#include <gtk/gtk.h>
@@ -23,17 +25,15 @@ namespace Gtk
{
Object::Object(const Glib::ConstructParams& construct_params)
-:
- Glib::Object(construct_params)
+: Glib::Object(construct_params)
{
gobject_disposed_ = false;
_init_unmanage(); //We don't like the GTK+ default memory management - we want to be in control._)
}
-Object::Object(GtkObject* castitem)
-:
- Glib::Object((GObject*) castitem)
+Object::Object(GObject* castitem)
+: Glib::Object(castitem)
{
gobject_disposed_ = false;
@@ -73,17 +73,17 @@ void Object::_init_unmanage(bool /* is_toplevel = false */)
//g_object_ref(gobject_);
//Alternatively, it might be a top-level window (e.g. a Dialog). We would then be doing one too-many refs(),
- //We do an extra unref() in Window::_destroy_c_instance() to take care of that.
+ //We do an extra unref() in Window::_release_c_instance() to take care of that.
- referenced_ = false; //Managed. We should not try to unfloat GtkObjects that we did not instantiate.
+ referenced_ = false; //Managed. We should not try to unfloat GObjects that we did not instantiate.
}
}
}
-void Object::_destroy_c_instance()
+void Object::_release_c_instance()
{
#ifdef GLIBMM_DEBUG_REFCOUNTING
- g_warning("Gtk::Object::_destroy_c_instance() this=%10X, gobject_=%10X\n", this, gobject_);
+ g_warning("Gtk::Object::_release_c_instance() this=%10X, gobject_=%10X\n", this, gobject_);
if(gobject_)
g_warning(" gtypename: %s\n", G_OBJECT_TYPE_NAME(gobject_));
#endif
@@ -91,11 +91,11 @@ void Object::_destroy_c_instance()
cpp_destruction_in_progress_ = true;
// remove our hook.
- GtkObject* object = gobj();
+ GObject* object = gobj();
if (object)
{
- g_assert(GTK_IS_OBJECT(object));
+ g_assert(G_IS_OBJECT(object));
disconnect_cpp_wrapper();
//Unfortunately this means that our dispose callback will not be called, because the qdata has been removed.
@@ -128,8 +128,11 @@ void Object::_destroy_c_instance()
if(!gobject_disposed_) //or if(g_signal_handler_is_connected(object, connection_id_destroy))
g_signal_handler_disconnect(object, connection_id_destroy);
- //destroy_notify() should have been called after the final g_object_unref() or gtk_object_destroy(), so gobject_disposed_ should now be true.
+ //destroy_notify() should have been called after the final g_object_unref() or gtk_object_destroy(), so gobject_disposed_ could now be true.
+ /* TODO: How can we do this with GTK+ 3? Note that it's not an issue for GtkWidgets,
+ * because we use gtk_widget_destroy in Gtk::Widget::_release_c_instance() instead.
+ *
//If the C instance still isn't dead then insist, by calling gtk_object_destroy().
//This is necessary because even a manage()d widget is refed when added to a container.
// <danielk> That's simply not true. But references might be taken elsewhere,
@@ -137,26 +140,31 @@ void Object::_destroy_c_instance()
if (!gobject_disposed_)
{
#ifdef GLIBMM_DEBUG_REFCOUNTING
- g_warning("Gtk::Object::_destroy_c_instance(): Calling gtk_object_destroy(): gobject_=%10X, gtypename=%s\n", object, G_OBJECT_TYPE_NAME(object));
+ g_warning("Gtk::Object::_release_c_instance(): Calling gtk_object_destroy(): gobject_=%10X, gtypename=%s\n", object, G_OBJECT_TYPE_NAME(object));
#endif
- g_assert(GTK_IS_OBJECT(object));
+ g_assert(G_IS_OBJECT(object));
gtk_object_destroy(object); //Container widgets can respond to this.
}
+ */
}
else
{
+ /* TODO: How can we do this with GTK+ 3? Note that it's not an issue for GtkWidgets,
+ * because we use gtk_widget_destroy in Gtk::Widget::_release_c_instance() instead.
+ *
//It's manag()ed, but the coder decided to delete it before deleting its parent.
//That should be OK because the Container can respond to that.
#ifdef GLIBMM_DEBUG_REFCOUNTING
- g_warning("Gtk::Object::_destroy_c_instance(): Calling gtk_object_destroy(): gobject_=%10X\n", gobject_);
+ g_warning("Gtk::Object::_release_c_instance(): Calling gtk_object_destroy(): gobject_=%10X\n", gobject_);
#endif
if (!gobject_disposed_)
{
- g_assert(GTK_IS_OBJECT(object));
+ g_assert(G_IS_OBJECT(object));
gtk_object_destroy(object);
}
+ */
}
}
@@ -171,7 +179,7 @@ Object::~Object()
#endif
//This has probably been called already from Gtk::Object::_destroy(), which is called from derived destructors.
- _destroy_c_instance();
+ _release_c_instance();
}
void Object::disconnect_cpp_wrapper()
@@ -253,7 +261,7 @@ void Object::destroy_()
cpp_destruction_in_progress_ = true;
//destroy the C instance:
- _destroy_c_instance();
+ _release_c_instance();
}
//The C++ destructor will be reached later. This function was called by a destructor.
@@ -316,17 +324,6 @@ namespace
{
} // anonymous namespace
-
-namespace Glib
-{
-
-Gtk::Object* wrap(GObject* object, bool take_copy)
-{
- return dynamic_cast<Gtk::Object *> (Glib::wrap_auto ((GObject*)(object), take_copy));
-}
-
-} /* namespace Glib */
-
namespace Gtk
{
diff --git a/gtk/gtkmm/object.h b/gtk/gtkmm/object.h
index 696e0bc..24e2a67 100644
--- a/gtk/gtkmm/object.h
+++ b/gtk/gtkmm/object.h
@@ -122,7 +122,7 @@ protected:
void _init_unmanage(bool is_toplevel = false);
virtual void destroy_notify_(); //override.
void disconnect_cpp_wrapper();
- void _destroy_c_instance();
+ void _release_c_instance();
static void callback_destroy_(GObject* gobject, void* data); //only connected for a short time.
// set if flags used by derived classes.
diff --git a/gtk/gtkmm/private/object_p.h b/gtk/gtkmm/private/object_p.h
new file mode 100644
index 0000000..313598f
--- /dev/null
+++ b/gtk/gtkmm/private/object_p.h
@@ -0,0 +1,37 @@
+#ifndef _GTKMM_OBJECT_P_H
+#define _GTKMM_OBJECT_P_H
+
+
+#include <glibmm/private/object_p.h>
+
+#include <glibmm/class.h>
+
+namespace Gtk
+{
+
+class Object_Class : public Glib::Class
+{
+public:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+ typedef Object CppObjectType;
+ typedef GObject BaseObjectType;
+ typedef GObjectClass BaseClassType;
+ typedef Glib::Object_Class CppClassParent;
+ typedef GObjectClass BaseClassParent;
+
+ friend class Object;
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+ const Glib::Class& init();
+
+
+ static void class_init_function(void* g_class, void* class_data);
+
+ static Glib::ObjectBase* wrap_new(GObject*);
+};
+
+
+} // namespace Gtk
+
+
+#endif /* _GTKMM_OBJECT_P_H */
diff --git a/gtk/src/cellrenderer.hg b/gtk/src/cellrenderer.hg
index 9fcf3f3..a9e31d5 100644
--- a/gtk/src/cellrenderer.hg
+++ b/gtk/src/cellrenderer.hg
@@ -38,7 +38,7 @@ _WRAP_ENUM(CellRendererMode, GtkCellRendererMode)
* @ingroup TreeView
*/
class CellRenderer :
- public Gtk::Object
+ public Object
{
_CLASS_GTKOBJECT(CellRenderer,GtkCellRenderer,GTK_CELL_RENDERER,Gtk::Object,GObject)
public:
diff --git a/gtk/src/filechooser.hg b/gtk/src/filechooser.hg
index e9e1ddb..b18d435 100644
--- a/gtk/src/filechooser.hg
+++ b/gtk/src/filechooser.hg
@@ -27,8 +27,6 @@ _PINCLUDE(glibmm/private/interface_p.h)
namespace Gtk
{
-class FileFilter;
-
_WRAP_ENUM(FileChooserAction, GtkFileChooserAction)
_WRAP_ENUM(FileChooserConfirmation, GtkFileChooserConfirmation)
@@ -166,8 +164,8 @@ _CONVERSION(`GSList*',`Glib::SListHandle< Glib::RefPtr<const FileFilter> >',__FL
/* Current filter
*/
_WRAP_METHOD(void set_filter(const Glib::RefPtr<FileFilter>& filter), gtk_file_chooser_set_filter)
- _WRAP_METHOD(Glib::RefPtr<FileFilter> get_filter(), gtk_file_chooser_get_filter)
- _WRAP_METHOD(Glib::RefPtr<const FileFilter> get_filter() const, gtk_file_chooser_get_filter, constversion)
+ _WRAP_METHOD(Glib::RefPtr<FileFilter> get_filter(), gtk_file_chooser_get_filter, refreturn)
+ _WRAP_METHOD(Glib::RefPtr<const FileFilter> get_filter() const, gtk_file_chooser_get_filter, refreturn, constversion)
/* Per-application shortcut folders */
diff --git a/gtk/src/filefilter.hg b/gtk/src/filefilter.hg
index c983919..23925eb 100644
--- a/gtk/src/filefilter.hg
+++ b/gtk/src/filefilter.hg
@@ -44,7 +44,7 @@ _WRAP_ENUM(FileFilterFlags, GtkFileFilterFlags)
*/
class FileFilter : public Glib::Object
{
- _CLASS_OBJECT(FileFilter, GtkFileFilter, GTK_FILE_FILTER, Glib::Object, GObject)
+ _CLASS_GOBJECT(FileFilter, GtkFileFilter, GTK_FILE_FILTER, Glib::Object, GObject)
protected:
_CTOR_DEFAULT
diff --git a/gtk/src/gtk_vfuncs.defs b/gtk/src/gtk_vfuncs.defs
index 7ee0b28..a042755 100644
--- a/gtk/src/gtk_vfuncs.defs
+++ b/gtk/src/gtk_vfuncs.defs
@@ -190,35 +190,6 @@
)
)
-; GtkCList
-
-(define-vfunc sort_list
- (of-object "GtkCList")
- (return-type "none")
-)
-
-(define-vfunc insert_row
- (of-object "GtkCList")
- (return-type "int")
- (parameters
- '("gint" "row")
- '("gchar**" "text")
- )
-)
-
-(define-vfunc remove_row
- (of-object "GtkCList")
- (return-type "none")
- (parameters
- '("gint" "row")
- )
-)
-
-(define-vfunc clear
- (of-object "GtkCList")
- (return-type "none")
-)
-
; GtkContainer
(define-vfunc child_type
@@ -353,11 +324,17 @@
(define-vfunc draw_ticks
(of-object "GtkRuler")
(return-type "none")
+ (parameters
+ '("cairo_t*" "cr")
+ )
)
(define-vfunc draw_pos
(of-object "GtkRuler")
(return-type "none")
+ (parameters
+ '("cairo_t*" "cr")
+ )
)
; GtkScale
@@ -412,7 +389,7 @@
(of-object "GtkStyle")
(return-type "none")
(parameters
- '("cairo_t*" "cr")
+ '("GdkWindow*" "window")
'("GtkStateType" "state_type")
)
)
diff --git a/gtk/src/image.ccg b/gtk/src/image.ccg
index fa75aa2..e195d01 100644
--- a/gtk/src/image.ccg
+++ b/gtk/src/image.ccg
@@ -40,17 +40,6 @@ Image::Image(const Glib::RefPtr<Gdk::PixbufAnimation>& animation)
_CONSTRUCT("pixbuf-animation", Glib::unwrap(animation))
{}
-void Image::get_pixmap(Glib::RefPtr<Gdk::Pixmap>& pixmap, Glib::RefPtr<Gdk::Bitmap>& mask) const
-{
- GdkPixmap* pPixmap = 0;
- GdkBitmap* pBitmap = 0;
-
- gtk_image_get_pixmap(const_cast<GtkImage*>(gobj()), &pPixmap, &pBitmap);
-
- pixmap = Glib::wrap((GdkPixmapObject*) pPixmap, true);
- mask = Glib::RefPtr<Gdk::Bitmap>::cast_dynamic(Glib::wrap((GdkPixmapObject*) pBitmap, true));
-}
-
void Image::get_stock(Gtk::StockID& stock_id, IconSize& size) const
{
char* pStockID = 0; // GTK+ iconsistency: although not const, it should not be freed.
diff --git a/gtk/src/image.hg b/gtk/src/image.hg
index b7dc6c7..d78f4fb 100644
--- a/gtk/src/image.hg
+++ b/gtk/src/image.hg
@@ -112,7 +112,6 @@ public:
_WRAP_METHOD(ImageType get_storage_type() const, gtk_image_get_storage_type)
- void get_pixmap(Glib::RefPtr<Gdk::Pixmap>& pixmap, Glib::RefPtr<Gdk::Bitmap>& mask) const;
_WRAP_METHOD(Glib::RefPtr<Gdk::Pixbuf> get_pixbuf(), gtk_image_get_pixbuf, refreturn)
_WRAP_METHOD(Glib::RefPtr<const Gdk::Pixbuf> get_pixbuf() const, gtk_image_get_pixbuf, refreturn, constversion)
void get_stock(Gtk::StockID& stock_id, IconSize& size) const;
diff --git a/gtk/src/recentchooser.hg b/gtk/src/recentchooser.hg
index dd0dc83..39309bd 100644
--- a/gtk/src/recentchooser.hg
+++ b/gtk/src/recentchooser.hg
@@ -107,13 +107,15 @@ public:
Glib::StringArrayHandle get_uris() const;
_IGNORE(gtk_recent_chooser_get_uris)
- _WRAP_METHOD(void add_filter(const RecentFilter& filter), gtk_recent_chooser_add_filter)
- _WRAP_METHOD(void remove_filter(const RecentFilter& filter), gtk_recent_chooser_remove_filter)
- _WRAP_METHOD(Glib::SListHandle<RecentFilter*> list_filters(), gtk_recent_chooser_list_filters)
- _WRAP_METHOD(Glib::SListHandle<const RecentFilter*> list_filters() const, gtk_recent_chooser_list_filters)
- _WRAP_METHOD(void set_filter(const RecentFilter& filter), gtk_recent_chooser_set_filter)
- _WRAP_METHOD(RecentFilter* get_filter(), gtk_recent_chooser_get_filter)
- _WRAP_METHOD(const RecentFilter* get_filter() const, gtk_recent_chooser_get_filter)
+ _WRAP_METHOD(void add_filter(const Glib::RefPtr<RecentFilter>& filter), gtk_recent_chooser_add_filter)
+ _WRAP_METHOD(void remove_filter(const Glib::RefPtr<RecentFilter>& filter), gtk_recent_chooser_remove_filter)
+
+ _WRAP_METHOD(Glib::SListHandle< Glib::RefPtr<RecentFilter> > list_filters(), gtk_recent_chooser_list_filters)
+ _WRAP_METHOD(Glib::SListHandle< Glib::RefPtr<const RecentFilter> > list_filters() const, gtk_recent_chooser_list_filters)
+
+ _WRAP_METHOD(void set_filter(const Glib::RefPtr<RecentFilter>& filter), gtk_recent_chooser_set_filter)
+ _WRAP_METHOD(Glib::RefPtr<RecentFilter> get_filter(), gtk_recent_chooser_get_filter, refreturn)
+ _WRAP_METHOD(Glib::RefPtr<const RecentFilter> get_filter() const, gtk_recent_chooser_get_filter, refreturn, constversion)
/** This signal is emitted when there is a change in the set of
* selected recently used resources. This can happen when a user
@@ -138,7 +140,7 @@ public:
_WRAP_PROPERTY("local-only", bool)
_WRAP_PROPERTY("limit", int)
_WRAP_PROPERTY("sort-type", RecentSortType)
- _WRAP_PROPERTY("filter", RecentFilter*)
+ _WRAP_PROPERTY("filter", Glib::RefPtr<RecentFilter>)
protected:
#m4 _CONVERSION(`Glib::ustring', `gchar*', `g_strdup(($3).c_str())')
@@ -158,10 +160,12 @@ protected:
_WRAP_VFUNC(void unselect_all(), "unselect_all")
//_WRAP_VFUNC(ArrayHandle_RecentInfos get_items() const, "get_items")
_WRAP_VFUNC(Glib::RefPtr<RecentManager> get_recent_manager(), "get_recent_manager")
- _WRAP_VFUNC(void add_filter(const RecentFilter& filter), "add_filter")
- _WRAP_VFUNC(void remove_filter(const RecentFilter& filter), "remove_filter")
+
+#m4 _CONVERSION(`GtkRecentFilter*',`const Glib::RefPtr<RecentFilter>&',`Glib::wrap($3, true)')
+ _WRAP_VFUNC(void add_filter(const Glib::RefPtr<RecentFilter>& filter), "add_filter")
+ _WRAP_VFUNC(void remove_filter(const Glib::RefPtr<RecentFilter>& filter), "remove_filter")
//_WRAP_VFUNC(Glib::SListHandle<RecentFilter*> list_filters(), "list_filters")
//_WRAP_VFUNC(void set_sort_func(const SlotCompare& slot), "set_sort_func")
};
-
+
} // namespace Gtk
diff --git a/gtk/src/recentfilter.hg b/gtk/src/recentfilter.hg
index 7c105fa..ffe87dc 100644
--- a/gtk/src/recentfilter.hg
+++ b/gtk/src/recentfilter.hg
@@ -15,7 +15,7 @@
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <gtkmm/object.h>
+#include <glibmm/object.h>
_DEFS(gtkmm,gtk)
_PINCLUDE(glibmm/private/object_p.h)
@@ -46,7 +46,7 @@ _WRAP_ENUM(RecentFilterFlags, GtkRecentFilterFlags)
*
* @ingroup RecentFiles
*/
-class RecentFilter : public Gtk::Object
+class RecentFilter : public Glib::Object
{
_CLASS_GOBJECT(RecentFilter, GtkRecentFilter, GTK_RECENT_FILTER, Glib::Object, GObject)
protected:
@@ -94,7 +94,7 @@ public:
/// For instance, bool on_custom(const Gtk::RecentFilter::Info& filter_info);
typedef sigc::slot<bool, const Info&> SlotCustom;
-
+
void add_custom(RecentFilterFlags needed, const SlotCustom& slot);
_IGNORE(gtk_recent_filter_add_custom)
diff --git a/gtk/src/ruler.hg b/gtk/src/ruler.hg
index 3244413..98e0c31 100644
--- a/gtk/src/ruler.hg
+++ b/gtk/src/ruler.hg
@@ -69,8 +69,13 @@ public:
_WRAP_METHOD(void set_range(double lower, double upper, double position, double max_size), gtk_ruler_set_range)
_WRAP_METHOD(void get_range(double& lower, double& upper, double& position, double& max_size), gtk_ruler_get_range)
- _WRAP_VFUNC(void draw_ticks(), "draw_ticks")
- _WRAP_VFUNC(void draw_pos(), "draw_pos")
+#m4begin
+dnl This extra conversion does the extra reference, often needed by code for vfuncs and signal.
+_CONVERSION(`cairo_t*',`const Cairo::RefPtr<Cairo::Context>&',`Cairo::RefPtr<Cairo::Context>(new Cairo::Context($3, false /* has_reference */))')
+#m4end
+
+ _WRAP_VFUNC(void draw_ticks(const Cairo::RefPtr<Cairo::Context>& cr), "draw_ticks")
+ _WRAP_VFUNC(void draw_pos(const Cairo::RefPtr<Cairo::Context>& cr), "draw_pos")
_WRAP_PROPERTY("lower", double)
_WRAP_PROPERTY("upper", double)
diff --git a/gtk/src/scale.ccg b/gtk/src/scale.ccg
index 4a907b1..21e0bd4 100644
--- a/gtk/src/scale.ccg
+++ b/gtk/src/scale.ccg
@@ -1,7 +1,7 @@
// -*- c++ -*-
/* $Id: scale.ccg,v 1.2 2004/01/19 19:48:44 murrayc Exp $ */
-/*
+/*
*
* Copyright 1998-2002 The gtkmm Development Team
*
@@ -70,8 +70,7 @@ VScale::VScale()
_CONSTRUCT_SPECIFIC(Scale, VScale)
{
Glib::RefPtr<Adjustment> adjustment = Adjustment::create(0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0));
- // The adjustment will be destroyed along with the object
+ 0.0, 0.0, 0.0);
set_adjustment(adjustment);
}
@@ -80,8 +79,8 @@ HScale::HScale(double min, double max, double step)
:
_CONSTRUCT_SPECIFIC(Scale, HScale)
{
- Glib::RefPtr<Adjustment> adjustment = Adjustment::create(min, min, max, step, 10 * step, step));
- set_adjustment(sadjustment);
+ Glib::RefPtr<Adjustment> adjustment = Adjustment::create(min, min, max, step, 10 * step, step);
+ set_adjustment(adjustment);
set_digits( calc_digits_(step) );
}
@@ -91,8 +90,8 @@ HScale::HScale()
_CONSTRUCT_SPECIFIC(Scale, HScale)
{
Glib::RefPtr<Adjustment> adjustment = Adjustment::create(0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0));
- set_adjustment(*adjustment);
+ 0.0, 0.0, 0.0);
+ set_adjustment(adjustment);
}
HScale::HScale(const Glib::RefPtr<Adjustment>& adjustment)
@@ -103,4 +102,3 @@ HScale::HScale(const Glib::RefPtr<Adjustment>& adjustment)
}
} // namespace Gtk
-
diff --git a/gtk/src/scrollbar.ccg b/gtk/src/scrollbar.ccg
index 1d83f02..506ba99 100644
--- a/gtk/src/scrollbar.ccg
+++ b/gtk/src/scrollbar.ccg
@@ -1,7 +1,7 @@
// -*- c++ -*-
/* $Id: scrollbar.ccg,v 1.1 2003/01/21 13:40:36 murrayc Exp $ */
-/*
+/*
*
* Copyright 1998-2002 The gtkmm Development Team
*
@@ -38,8 +38,8 @@ VScrollbar::VScrollbar()
:
_CONSTRUCT_SPECIFIC(Scrollbar, VScrollbar)
{
- Glib::RefPtr<Adjustment> adjustment = Adjustment::create(0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
- set_adjustment(*adjustment);
+ Glib::RefPtr<Adjustment> adjustment = Adjustment::create(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+ set_adjustment(adjustment);
}
@@ -47,8 +47,8 @@ HScrollbar::HScrollbar()
:
_CONSTRUCT_SPECIFIC(Scrollbar, HScrollbar)
{
- Glib::RefPtr<Adjustment> adjustment = Adjustment::create(0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
- set_adjustment(*adjustment);
+ Glib::RefPtr<Adjustment> adjustment = Adjustment::create(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+ set_adjustment(adjustment);
}
HScrollbar::HScrollbar(const Glib::RefPtr<Adjustment>& adjustment)
@@ -59,4 +59,3 @@ HScrollbar::HScrollbar(const Glib::RefPtr<Adjustment>& adjustment)
}
} // namespace Gtk
-
diff --git a/gtk/src/scrolledwindow.hg b/gtk/src/scrolledwindow.hg
index b412ed8..6dd82da 100644
--- a/gtk/src/scrolledwindow.hg
+++ b/gtk/src/scrolledwindow.hg
@@ -58,8 +58,6 @@ public:
//TODO: Add unset_*adjustment().
_WRAP_METHOD(void set_hadjustment(const Glib::RefPtr<Adjustment>& hadjustment), gtk_scrolled_window_set_hadjustment)
_WRAP_METHOD(void set_vadjustment(const Glib::RefPtr<Adjustment>& vadjustment), gtk_scrolled_window_set_vadjustment)
- _WRAP_METHOD(void set_hadjustment(const Glib::RefPtr<Adjustment>& hadjustment), gtk_scrolled_window_set_hadjustment)
- _WRAP_METHOD(void set_vadjustment(const Glib::RefPtr<Adjustment>& vadjustment), gtk_scrolled_window_set_vadjustment)
_WRAP_METHOD(Glib::RefPtr<Adjustment> get_hadjustment(), gtk_scrolled_window_get_hadjustment)
_WRAP_METHOD(Glib::RefPtr<const Adjustment> get_hadjustment() const, gtk_scrolled_window_get_hadjustment, constversion)
diff --git a/gtk/src/style.ccg b/gtk/src/style.ccg
index 2833610..d7e8e8a 100644
--- a/gtk/src/style.ccg
+++ b/gtk/src/style.ccg
@@ -78,26 +78,6 @@ Pango::FontDescription Style::get_font() const
return Pango::FontDescription(gobj()->font_desc, true); // true = make a copy.
}
-void Style::set_bg_pixmap(StateType state_type, const Glib::RefPtr<const Gdk::Pixmap>& pixmap)
-{
- GdkPixmap *const old_pixmap = gobj()->bg_pixmap[state_type];
- Glib::RefPtr<Gdk::Pixmap> pixmap_unconst = Glib::RefPtr<Gdk::Pixmap>::cast_const(pixmap);
- gobj()->bg_pixmap[state_type] = Glib::unwrap_copy(pixmap_unconst); //unwrap_copy() needs a non-const.
-
- if(old_pixmap)
- g_object_unref(old_pixmap);
-}
-
-Glib::RefPtr<Gdk::Pixmap> Style::get_bg_pixmap(StateType state_type)
-{
- return Glib::wrap((GdkPixmapObject*) (gobj()->bg_pixmap[state_type]), true); // true = take_copy
-}
-
-Glib::RefPtr<const Gdk::Pixmap> Style::get_bg_pixmap(StateType state_type) const
-{
- return Glib::wrap((GdkPixmapObject*) (gobj()->bg_pixmap[state_type]), true); // true = take_copy
-}
-
void Style::set_xthickness(int xthickness)
{
gobj()->xthickness = xthickness;
diff --git a/gtk/src/style.hg b/gtk/src/style.hg
index 08a8e90..46986b4 100644
--- a/gtk/src/style.hg
+++ b/gtk/src/style.hg
@@ -101,11 +101,6 @@ public:
void set_ythickness(int ythickness);
_MEMBER_GET(ythickness, ythickness, int, gint)
- void set_bg_pixmap(Gtk::StateType state_type, const Glib::RefPtr<const Gdk::Pixmap>& pixmap);
-
- Glib::RefPtr<Gdk::Pixmap> get_bg_pixmap(Gtk::StateType state_type);
- Glib::RefPtr<const Gdk::Pixmap> get_bg_pixmap(Gtk::StateType state_type) const;
-
_WRAP_METHOD(void paint_arrow(
const Cairo::RefPtr<Cairo::Context>& cr,
Gtk::StateType state_type,
@@ -372,8 +367,9 @@ protected:
#m4 _CONVERSION(`GtkRcStyle*',`const Glib::RefPtr<RcStyle>&',`Glib::wrap($3)')
_WRAP_VFUNC(void init_from_rc(const Glib::RefPtr<RcStyle>& rc_style), init_from_rc)
-#m4 _CONVERSION(`cairo_t*',`const Cairo::RefPtr<Cairo::Context>&',`Cairo::RefPtr<Cairo::Context>(new Cairo::Context($3, false /* has_reference */))')
- _WRAP_VFUNC(void set_background(const Cairo::RefPtr<Cairo::Context>& cr, Gtk::StateType state_type), set_background)
+
+#m4 _CONVERSION(`GdkWindow*',`const Glib::RefPtr<Gdk::Window>&', `Glib::wrap((GdkWindowObject*)($3), true)')
+ _WRAP_VFUNC(void set_background(const Glib::RefPtr<Gdk::Window>& window, Gtk::StateType state_type), set_background)
#m4 _CONVERSION(`const char*',`const Glib::ustring&',__GCHARP_TO_USTRING)
_WRAP_VFUNC(Glib::RefPtr<Gdk::Pixbuf> render_icon(const IconSource& source,
@@ -382,6 +378,8 @@ protected:
IconSize size,
Widget* widget,
const Glib::ustring& detail), render_icon)
+
+#m4 _CONVERSION(`cairo_t*',`const Cairo::RefPtr<Cairo::Context>&',`Cairo::RefPtr<Cairo::Context>(new Cairo::Context($3, false /* has_reference */))')
_WRAP_VFUNC(void draw_hline(const Cairo::RefPtr<Cairo::Context>& cr,
Gtk::StateType state_type,
Widget* widget,
diff --git a/gtk/src/treeviewcolumn.ccg b/gtk/src/treeviewcolumn.ccg
index b7fdd36..7e20a71 100644
--- a/gtk/src/treeviewcolumn.ccg
+++ b/gtk/src/treeviewcolumn.ccg
@@ -84,4 +84,3 @@ void TreeViewColumn::unset_cell_data_func(CellRenderer& cell_renderer)
} // namespace Gtk
-
diff --git a/gtk/src/treeviewcolumn.hg b/gtk/src/treeviewcolumn.hg
index bcde2a6..82b4ed5 100644
--- a/gtk/src/treeviewcolumn.hg
+++ b/gtk/src/treeviewcolumn.hg
@@ -27,7 +27,7 @@ _CONFIGINCLUDE(gtkmmconfig.h)
#include <glibmm/listhandle.h>
#include <gtkmm/cellrenderer_generation.h>
_DEFS(gtkmm,gtk)
-_PINCLUDE(glibmm/private/object_p.h)
+_PINCLUDE(gtkmm/private/object_p.h)
namespace Gtk
{
@@ -48,10 +48,10 @@ class TreeView;
* @ingroup TreeView
*/
class GTKMM_API TreeViewColumn
- : public Gtk::Object,
+ : public Object,
public CellLayout
{
- _CLASS_GTKOBJECT(TreeViewColumn, GtkTreeViewColumn, GTK_TREE_VIEW_COLUMN, Gtk::Object, GObject)
+ _CLASS_GTKOBJECT(TreeViewColumn, GtkTreeViewColumn, GTK_TREE_VIEW_COLUMN, Object, GObject)
_IMPLEMENTS_INTERFACE(CellLayout)
_IGNORE(gtk_tree_view_column_set_cell_data_func)
public:
diff --git a/gtk/src/viewport.hg b/gtk/src/viewport.hg
index e87f075..7a7ccaf 100644
--- a/gtk/src/viewport.hg
+++ b/gtk/src/viewport.hg
@@ -52,13 +52,9 @@ public:
_WRAP_METHOD(void set_hadjustment(const Glib::RefPtr<Adjustment>& adjustment),
gtk_viewport_set_hadjustment)
- _WRAP_METHOD(void set_hadjustment(const Glib::RefPtr<Adjustment>& adjustment),
- gtk_viewport_set_hadjustment)
_WRAP_METHOD(void set_vadjustment(const Glib::RefPtr<Adjustment>& adjustment),
gtk_viewport_set_vadjustment)
- _WRAP_METHOD(void set_vadjustment(const Glib::RefPtr<Adjustment>& adjustment),
- gtk_viewport_set_vadjustment)
_WRAP_METHOD(void set_shadow_type(ShadowType type),
gtk_viewport_set_shadow_type)
diff --git a/gtk/src/widget.ccg b/gtk/src/widget.ccg
index b795b17..03c4c09 100644
--- a/gtk/src/widget.ccg
+++ b/gtk/src/widget.ccg
@@ -435,7 +435,7 @@ void Widget_Class::dispose_vfunc_callback(GObject* self)
g_warning("Widget_Class::dispose_vfunc_callback(): unreferenced: before gtk_widget_hide().");
#endif
- // Always hide widgets on gtk_object_destroy(), regardless of whether
+ // Always hide widgets on object destruction, regardless of whether
// the widget is managed or not. This is done for consistency so that
// connecting to signal_hide() is guaranteed to work.
gtk_widget_hide(pWidget);
@@ -471,19 +471,9 @@ Glib::ustring Widget::drag_dest_find_target(const Glib::RefPtr<Gdk::DragContext>
return Gdk::AtomString::to_cpp_type(gtk_drag_dest_find_target(const_cast<GtkWidget*>(gobj()), Glib::unwrap(context), 0 /* See GTK+ docs */));
}
-void Widget::unset_shape_combine_mask()
+void Widget::draw_insertion_cursor(const Cairo::RefPtr<Cairo::Context>& cr, const Gdk::Rectangle& location, bool is_primary, TextDirection direction, bool draw_arrow)
{
- gtk_widget_shape_combine_mask(gobj(), 0, 0, 0); /* See GTK+ docs */
-}
-
-void Widget::unset_input_shape_combine_mask()
-{
- gtk_widget_input_shape_combine_mask(gobj(), 0, 0, 0); /* See GTK+ docs */
-}
-
-void Widget::draw_insertion_cursor(Glib::RefPtr<Gdk::Drawable> drawable, const Gdk::Rectangle& area, const Gdk::Rectangle& location, bool is_primary, TextDirection direction, bool draw_arrow)
-{
- gtk_draw_insertion_cursor(gobj(), drawable->gobj(), const_cast<GdkRectangle*>(area.gobj()), const_cast<GdkRectangle*>(location.gobj()), is_primary, (GtkTextDirection)direction, draw_arrow);
+ gtk_draw_insertion_cursor(gobj(), cr->cobj(), const_cast<GdkRectangle*>(location.gobj()), is_primary, (GtkTextDirection)direction, draw_arrow);
}
Requisition Widget::get_requisition() const
diff --git a/gtk/src/widget.hg b/gtk/src/widget.hg
index 5c414dc..319685d 100644
--- a/gtk/src/widget.hg
+++ b/gtk/src/widget.hg
@@ -58,7 +58,6 @@ namespace Gtk
_CC_INCLUDE(gtk/gtk.h)
_WRAP_ENUM(DestDefaults, GtkDestDefaults)
-_WRAP_ENUM(WidgetFlags, GtkWidgetFlags)
_WRAP_ENUM(WidgetHelpType, GtkWidgetHelpType)
_WRAP_ENUM(DragResult, GtkDragResult)
@@ -97,13 +96,13 @@ typedef Gdk::Rectangle Allocation;
* a Gdk::Window.
*/
class Widget
-: public Gtk::Object,
+: public Object,
public Buildable
#ifdef GTKMM_ATKMM_ENABLED
,public Atk::Implementor
#endif //GTKMM_ATKMM_ENABLED
{
- _CLASS_GTKOBJECT(Widget,GtkWidget,GTK_WIDGET,Gtk::Object,GObject)
+ _CLASS_GTKOBJECT(Widget,GtkWidget,GTK_WIDGET,Object,GObject)
_IMPLEMENTS_INTERFACE(Buildable)
_IMPLEMENTS_INTERFACE(Atk::Implementor, ifdef GTKMM_ATKMM_ENABLED)
_IGNORE(gtk_widget_set, gtk_widget_queue_clear, gtk_widget_queue_clear_area, gtk_widget_draw,
@@ -475,12 +474,6 @@ public:
_WRAP_METHOD(static void set_default_direction(TextDirection dir), gtk_widget_set_default_direction)
_WRAP_METHOD(static TextDirection get_default_direction(), gtk_widget_get_default_direction)
-/* Shape masking */
- _WRAP_METHOD(void shape_combine_mask(const Glib::RefPtr<const Gdk::Bitmap>& shape_mask, int offset_x = 0, int offset_y = 0), gtk_widget_shape_combine_mask)
- void unset_shape_combine_mask();
- _WRAP_METHOD(void input_shape_combine_mask(const Glib::RefPtr<const Gdk::Bitmap>& shape_mask, int offset_x = 0, int offset_y = 0), gtk_widget_input_shape_combine_mask)
- void unset_input_shape_combine_mask();
-
// must be realized
_WRAP_METHOD(void reset_shapes(),gtk_widget_reset_shapes)
@@ -553,8 +546,8 @@ public:
_WRAP_METHOD(void map(), gtk_widget_map)
_WRAP_METHOD(void unmap(), gtk_widget_unmap)
- //TODO: The drawable should be passed by reference, when we can break API/ABI, but it's not the end of the world. murrayc.
- void draw_insertion_cursor(Glib::RefPtr<Gdk::Drawable> drawable, const Gdk::Rectangle& area, const Gdk::Rectangle& location, bool is_primary, TextDirection direction, bool draw_arrow = true);
+ //TODO: Documentation:
+ void draw_insertion_cursor(const Cairo::RefPtr<Cairo::Context>& cr, const Gdk::Rectangle& location, bool is_primary, TextDirection direction, bool draw_arrow = true);
_IGNORE(gtk_draw_insertion_cursor)
// Gtk+ 2.12 tooltip API
@@ -696,16 +689,7 @@ dnl
_POP()
#m4end
- /// Event triggered by window requiring a refresh.
- //- Expose events cover a rectangular area that was covered
- //- or obscured by another window. That area is now exposed
- //- and thus is needs to be redrawn.
- //-
- //- If the application is not capable of redrawing sections
- //- it should watch the count field and only draw on the last
- //- even indicated. This is important for things such as
- //- Gtk::DrawingArea.
- _WRAP_SIGNAL(bool expose_event(GdkEventExpose* event), "expose_event")
+ _WRAP_SIGNAL(bool draw(const Cairo::RefPtr<Cairo::Context>& cr), "draw")
/// Event triggered by a key press will widget has focus.
_WRAP_SIGNAL(bool key_press_event(GdkEventKey* event), "key_press_event")
diff --git a/gtk/src/window.ccg b/gtk/src/window.ccg
index bf432f3..4a288d3 100644
--- a/gtk/src/window.ccg
+++ b/gtk/src/window.ccg
@@ -68,21 +68,21 @@ void Window::destroy_()
if ( !cpp_destruction_in_progress_ ) //see comment below.
{
- //Prevent destroy_notify_() from running as a possible side-effect of gtk_object_destroy.
+ //Prevent destroy_notify_() from running as a possible side-effect of object destruction.
//We can't predict whether destroy_notify_() will really be run, so we'll disconnect the C++ instance here.
cpp_destruction_in_progress_ = true;
//destroy the C instance:
- _destroy_c_instance();
+ _release_c_instance();
}
//The C++ destructor will be reached later. This function was called by a destructor.
}
-void Window::_destroy_c_instance()
+void Window::_release_c_instance()
{
- //We override this,
- //because though top-level windows can only be destroyed with gtk_widget_destroy, according to Owen Taylor. murrayc.
+ //We override this, (though it's not virtual - we just call it from this class),
+ //because top-level windows can only be destroyed with gtk_widget_destroy, according to Owen Taylor. murrayc.
#ifdef GLIBMM_DEBUG_REFCOUNTING
g_warning("Gtk::Window::_destroy_c_instance() gobject_=%10X\n", gobject_);
#endif
@@ -90,7 +90,7 @@ void Window::_destroy_c_instance()
cpp_destruction_in_progress_ = true;
// remove our hook.
- GtkObject* object = (GtkObject*)gobj();
+ GtkWidget* object = GTK_WIDGET(gobj());
if (object)
{
disconnect_cpp_wrapper();
@@ -102,7 +102,7 @@ void Window::_destroy_c_instance()
if (!gobject_disposed_)
{
//Windows can not be unrefed. They are "self-owning".
- gtk_object_destroy(object);
+ gtk_widget_destroy(object);
}
//Glib::Object::~Object() will not g_object_unref() it too. because gobject_ is now 0.
@@ -156,7 +156,7 @@ void Window_Class::dispose_vfunc_callback(GObject* self)
//g_warning("Window_Class::dispose_vfunc_callback(): unreferenced: before gtk_widget_hide().");
#endif
- // Always hide widgets on gtk_object_destroy(), regardless of whether
+ // Always hide widgets on object destruction, regardless of whether
// the widget is managed or not. This is done for consistency so that
// connecting to signal_hide() is guaranteed to work.
//gtk_widget_hide(pWidget);
diff --git a/gtk/src/window.hg b/gtk/src/window.hg
index fb0eda1..ed8ef70 100644
--- a/gtk/src/window.hg
+++ b/gtk/src/window.hg
@@ -357,7 +357,7 @@ protected:
//See comments in the implementations:
void destroy_();
- void _destroy_c_instance();
+ void _release_c_instance();
private:
diff --git a/tools/m4/convert_gtk.m4 b/tools/m4/convert_gtk.m4
index c2ef9f5..5d7f929 100644
--- a/tools/m4/convert_gtk.m4
+++ b/tools/m4/convert_gtk.m4
@@ -351,8 +351,8 @@ _CONVERSION(`GSList*',`Glib::SListHandle<Glib::ustring>',__FL2H_DEEP)
_CONVERSION(`GSList*',`Glib::SListHandle< Glib::RefPtr<PixbufFormat> >',__FL2H_SHALLOW)
_CONVERSION(`GSList*',`Glib::SListHandle< Glib::RefPtr<const PixbufFormat> >',__FL2H_SHALLOW)
_CONVERSION(`GSList*',`SListHandle_PixbufFormat',__FL2H_DEEP)
-_CONVERSION(`GSList*',`Glib::SListHandle<RecentFilter*>',__FL2H_SHALLOW)
-_CONVERSION(`GSList*',`Glib::SListHandle<const RecentFilter*>', __FL2H_SHALLOW)
+_CONVERSION(`GSList*',`Glib::SListHandle< Glib::RefPtr<RecentFilter> >',__FL2H_SHALLOW)
+_CONVERSION(`GSList*',`Glib::SListHandle< Glib::RefPtr<const RecentFilter> >', __FL2H_SHALLOW)
_CONVERSION(`const Widget&',`GtkWidget*',__FCR2P)
@@ -546,11 +546,9 @@ _CONVERSION(`const GtkBorder*',`Border',`Glib::wrap(const_cast<GtkBorder*>($3))'
#RecentFilter
_CONVERSION(`GtkRecentFilterFlags',`RecentFilterFlags',`($2)$3')
-_CONVERSION(`const RecentFilter&', `GtkRecentFilter*', __FCR2P)
-_CONVERSION(`GtkRecentFilter*',`RecentFilter*', `Glib::wrap($3)')
-_CONVERSION(`GtkRecentFilter*',`const RecentFilter*', `Glib::wrap($3)')
-_CONVERSION(`GtkRecentFilter*', `RecentFilter&', `*Glib::wrap($3)')
-_CONVERSION(`GtkRecentFilter*', `const RecentFilter&', `*Glib::wrap($3)')
+_CONVERSION(`const Glib::RefPtr<RecentFilter>&', `GtkRecentFilter*', __CONVERT_REFPTR_TO_P)
+_CONVERSION(`GtkRecentFilter*',`Glib::RefPtr<RecentFilter>', `Glib::wrap($3)')
+_CONVERSION(`GtkRecentFilter*',`Glib::RefPtr<const RecentFilter>', `Glib::wrap($3)')
#RecentInfo
_CONVERSION(`GtkRecentInfo*',`Glib::RefPtr<RecentInfo>',`Glib::wrap($3)')
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]