[gtkmm] Gtk::Widget: Undeprecate reparent()
- From: Kjell Ahlstedt <kjellahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtkmm] Gtk::Widget: Undeprecate reparent()
- Date: Wed, 11 Jun 2014 14:38:01 +0000 (UTC)
commit ba040cf19ed78a6125b64417073dff76a7683ef9
Author: Kjell Ahlstedt <kjell ahlstedt bredband net>
Date: Wed Jun 11 16:33:33 2014 +0200
Gtk::Widget: Undeprecate reparent()
* gtk/src/widget.[hg|ccg]: Undeprecate reparent() and implement it without
calling the deprecated gtk_widget_reparent().
gtk/src/widget.ccg | 18 ++++++++++++++++++
gtk/src/widget.hg | 12 +++++++++---
2 files changed, 27 insertions(+), 3 deletions(-)
---
diff --git a/gtk/src/widget.ccg b/gtk/src/widget.ccg
index 9f75d85..1453189 100644
--- a/gtk/src/widget.ccg
+++ b/gtk/src/widget.ccg
@@ -416,6 +416,24 @@ void Widget_Class::get_preferred_width_for_height_vfunc_callback(GtkWidget* self
Widget::~Widget()
{}
+void Widget::reparent(Widget& new_parent)
+{
+ //TODO: When 'Widget& new_parent' is changed to 'Container& new_parent',
+ // remove the next two statements.
+ Container* new_container = dynamic_cast<Container*>(&new_parent);
+ g_return_if_fail(new_container != 0); // if new_parent is not a Container
+ Container* old_container = get_parent();
+ g_return_if_fail(old_container != 0); // if the widget is not in a Container
+
+ if (old_container != new_container)
+ {
+ reference();
+ old_container->remove(*this);
+ new_container->add(*this);
+ unreference();
+ }
+}
+
bool Widget::intersect(const Gdk::Rectangle& area) const
{
return gtk_widget_intersect(
diff --git a/gtk/src/widget.hg b/gtk/src/widget.hg
index 5a0f82c..b058f03 100644
--- a/gtk/src/widget.hg
+++ b/gtk/src/widget.hg
@@ -178,9 +178,15 @@ public:
_WRAP_METHOD(bool send_focus_change(GdkEvent* event), gtk_widget_send_focus_change)
_WRAP_METHOD(bool activate(), gtk_widget_activate)
- //TODO: Maybe keep this or implement it ourselves,
- //because the C API now requires manual ref/unrefing to stop remove() and add() from breaking things.
- _WRAP_METHOD(void reparent(Widget& new_parent), gtk_widget_reparent, deprecated "Use Container::remove()
and Container::add() instead.")
+ //TODO: When we can break ABI/API, change to void reparent(Container& new_parent).
+ // gtk_widget_reparent() is deprecated, but we want to keep Gtk::Widget::reparent().
+ /** Moves a widget from one Gtk::Container to another, handling reference
+ * count issues to avoid destroying the widget.
+ *
+ * @param new_parent A Gtk::Container to move the widget into.
+ */
+ void reparent(Widget& new_parent);
+ _IGNORE(gtk_widget_reparent)
bool intersect(const Gdk::Rectangle& area) const;
_WRAP_METHOD(bool intersect(const Gdk::Rectangle& area, Gdk::Rectangle& intersection) const,
gtk_widget_intersect)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]