summaryrefslogtreecommitdiff
path: root/panel
diff options
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2012-05-21 00:07:09 +0200
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2012-05-21 00:07:09 +0200
commit29f1480856718b0cf3b99a3ffaa6dd99bb4b2339 (patch)
treee45133082c597482014f9a40d4ebc662065a1b51 /panel
parentcc74d2490eec6bcc0c04c711d68b950166480f2b (diff)
PanelMenuView: Use nux::ObjectPtr to destroy the child items before the Animator
(bzr r2364.3.35)
Diffstat (limited to 'panel')
-rw-r--r--panel/PanelMenuView.cpp27
-rw-r--r--panel/PanelMenuView.h19
2 files changed, 19 insertions, 27 deletions
diff --git a/panel/PanelMenuView.cpp b/panel/PanelMenuView.cpp
index a74ba364f..7b629c47c 100644
--- a/panel/PanelMenuView.cpp
+++ b/panel/PanelMenuView.cpp
@@ -68,14 +68,14 @@ PanelMenuView::PanelMenuView()
_update_show_now_id(0),
_new_app_show_id(0),
_new_app_hide_id(0),
+ _desktop_name(_("Ubuntu Desktop")),
_menus_fadein(DEFAULT_MENUS_FADEIN),
_menus_fadeout(DEFAULT_MENUS_FADEOUT),
_menus_discovery(DEFAULT_MENUS_DISCOVERY),
_menus_discovery_fadein(DEFAULT_DISCOVERY_FADEIN),
_menus_discovery_fadeout(DEFAULT_DISCOVERY_FADEOUT),
_fade_in_animator(_menus_fadein),
- _fade_out_animator(_menus_fadeout),
- _desktop_name(_("Ubuntu Desktop"))
+ _fade_out_animator(_menus_fadeout)
{
layout_->SetContentDistribution(nux::eStackLeft);
@@ -92,10 +92,10 @@ PanelMenuView::PanelMenuView()
_active_app_changed_signal.Connect(_matcher, "active-application-changed",
sigc::mem_fun(this, &PanelMenuView::OnActiveAppChanged));
- _window_buttons = new WindowButtons();
+ _window_buttons.Adopt(new WindowButtons());
+ _window_buttons->SetParentObject(this);
_window_buttons->SetMonitor(_monitor);
_window_buttons->SetControlledWindow(_active_xid);
- _window_buttons->SetParentObject(this);
_window_buttons->SetLeftAndRightPadding(MAIN_LEFT_PADDING, MENUBAR_PADDING);
_window_buttons->SetMaximumHeight(panel::Style::Instance().panel_height);
_window_buttons->ComputeContentSize();
@@ -103,12 +103,12 @@ PanelMenuView::PanelMenuView()
_window_buttons->mouse_enter.connect(sigc::mem_fun(this, &PanelMenuView::OnPanelViewMouseEnter));
_window_buttons->mouse_leave.connect(sigc::mem_fun(this, &PanelMenuView::OnPanelViewMouseLeave));
//_window_buttons->mouse_move.connect(sigc::mem_fun(this, &PanelMenuView::OnPanelViewMouseMove));
- AddChild(_window_buttons);
+ AddChild(_window_buttons.GetPointer());
layout_->SetLeftAndRightPadding(_window_buttons->GetContentWidth(), 0);
layout_->SetBaseHeight(panel::Style::Instance().panel_height);
- _titlebar_grab_area = new PanelTitlebarGrabArea();
+ _titlebar_grab_area.Adopt(new PanelTitlebarGrabArea());
_titlebar_grab_area->SetParentObject(this);
_titlebar_grab_area->activate_request.connect(sigc::mem_fun(this, &PanelMenuView::OnMaximizedActivate));
_titlebar_grab_area->restore_request.connect(sigc::mem_fun(this, &PanelMenuView::OnMaximizedRestore));
@@ -116,7 +116,7 @@ PanelMenuView::PanelMenuView()
_titlebar_grab_area->grab_started.connect(sigc::mem_fun(this, &PanelMenuView::OnMaximizedGrabStart));
_titlebar_grab_area->grab_move.connect(sigc::mem_fun(this, &PanelMenuView::OnMaximizedGrabMove));
_titlebar_grab_area->grab_end.connect(sigc::mem_fun(this, &PanelMenuView::OnMaximizedGrabEnd));
- AddChild(_titlebar_grab_area);
+ AddChild(_titlebar_grab_area.GetPointer());
WindowManager* win_manager = WindowManager::Default();
win_manager->window_minimized.connect(sigc::mem_fun(this, &PanelMenuView::OnWindowMinimized));
@@ -173,13 +173,6 @@ PanelMenuView::PanelMenuView()
PanelMenuView::~PanelMenuView()
{
- // We need to disconnect these signals explicitly before we destroy the window buttons
- // and titlebar grab area objects, otherwise there's a risk the signals will fire as the
- // animator objects are destroyed (which happens after the destructor finishes).
- _fade_in_animator.animation_updated.clear();
- _fade_in_animator.animation_ended.clear();
- _fade_out_animator.animation_updated.clear();
- _fade_out_animator.animation_ended.clear();
_style_changed_connection.disconnect();
if (_active_moved_id)
@@ -191,8 +184,8 @@ PanelMenuView::~PanelMenuView()
if (_new_app_hide_id)
g_source_remove(_new_app_hide_id);
- _window_buttons->UnReference();
- _titlebar_grab_area->UnReference();
+ _window_buttons->UnParentObject();
+ _titlebar_grab_area->UnParentObject();
}
void PanelMenuView::OverlayShown()
@@ -268,7 +261,7 @@ nux::Area* PanelMenuView::FindAreaUnderMouse(const nux::Point& mouse_position, n
{
/* When the current panel is not active, it all behaves like a grab-area */
if (GetAbsoluteGeometry().IsInside(mouse_position))
- return _titlebar_grab_area;
+ return _titlebar_grab_area.GetPointer();
}
if (_is_maximized)
diff --git a/panel/PanelMenuView.h b/panel/PanelMenuView.h
index 8548ca1cc..c4b637063 100644
--- a/panel/PanelMenuView.h
+++ b/panel/PanelMenuView.h
@@ -138,6 +138,8 @@ private:
nux::TextureLayer* _title_layer;
nux::HLayout* _menu_layout;
+ nux::ObjectPtr<WindowButtons> _window_buttons;
+ nux::ObjectPtr<PanelTitlebarGrabArea> _titlebar_grab_area;
nux::ObjectPtr<nux::BaseTexture> _title_texture;
nux::ObjectPtr<nux::IOpenGLBaseTexture> _gradient_texture;
@@ -146,8 +148,6 @@ private:
bool _is_maximized;
PanelIndicatorEntryView* _last_active_view;
- WindowButtons* _window_buttons;
- PanelTitlebarGrabArea* _titlebar_grab_area;
glib::Object<BamfApplication> _new_application;
std::map<Window, bool> _decor_map;
@@ -171,6 +171,13 @@ private:
guint32 _new_app_show_id;
guint32 _new_app_hide_id;
nux::Geometry _monitor_geo;
+ const std::string _desktop_name;
+
+ int _menus_fadein;
+ int _menus_fadeout;
+ int _menus_discovery;
+ int _menus_discovery_fadein;
+ int _menus_discovery_fadeout;
glib::Signal<void, BamfMatcher*, BamfView*> _view_opened_signal;
glib::Signal<void, BamfMatcher*, BamfView*> _view_closed_signal;
@@ -181,16 +188,8 @@ private:
UBusManager _ubus_manager;
- int _menus_fadein;
- int _menus_fadeout;
- int _menus_discovery;
- int _menus_discovery_fadein;
- int _menus_discovery_fadeout;
-
Animator _fade_in_animator;
Animator _fade_out_animator;
-
- const std::string _desktop_name;
};
}