diff options
| author | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2012-05-21 00:07:09 +0200 |
|---|---|---|
| committer | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2012-05-21 00:07:09 +0200 |
| commit | 29f1480856718b0cf3b99a3ffaa6dd99bb4b2339 (patch) | |
| tree | e45133082c597482014f9a40d4ebc662065a1b51 /panel | |
| parent | cc74d2490eec6bcc0c04c711d68b950166480f2b (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.cpp | 27 | ||||
| -rw-r--r-- | panel/PanelMenuView.h | 19 |
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; }; } |
