diff options
| author | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2014-04-02 11:05:59 +0200 |
|---|---|---|
| committer | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2014-04-02 11:05:59 +0200 |
| commit | e7cc6babd869fd1bfaa88e016bda84476be9b09f (patch) | |
| tree | 943ff925614058c0dfd47cdf6e2ad88a55f4c4d4 | |
| parent | 09d1a98289a4a06d9cfcd87c73519a61e8b338d6 (diff) | |
ForceQuitDialog: keep the dialog centered on parent window when its geometry changes
(bzr r3740.4.10)
| -rw-r--r-- | decorations/DecoratedWindow.cpp | 6 | ||||
| -rw-r--r-- | decorations/DecorationsForceQuitDialog.cpp | 12 | ||||
| -rw-r--r-- | decorations/DecorationsForceQuitDialog.h | 2 | ||||
| -rw-r--r-- | decorations/DecorationsPriv.h | 1 |
4 files changed, 21 insertions, 0 deletions
diff --git a/decorations/DecoratedWindow.cpp b/decorations/DecoratedWindow.cpp index 17007a904..24d164cbb 100644 --- a/decorations/DecoratedWindow.cpp +++ b/decorations/DecoratedWindow.cpp @@ -710,6 +710,12 @@ void Window::Impl::UpdateMonitor() } } +void Window::Impl::UpdateForceQuitDialogPosition() +{ + if (force_quit_) + force_quit_->UpdateDialogPosition(); +} + void Window::Impl::ShowForceQuitDialog(bool show, Time time) { if (show) diff --git a/decorations/DecorationsForceQuitDialog.cpp b/decorations/DecorationsForceQuitDialog.cpp index a2f42fdf9..968981611 100644 --- a/decorations/DecorationsForceQuitDialog.cpp +++ b/decorations/DecorationsForceQuitDialog.cpp @@ -332,6 +332,13 @@ struct ForceQuitDialog::Impl : sigc::trackable gdk_x11_window_set_user_time(gtk_widget_get_window(dialog_), time); } + void UpdateDialogPosition() + { + auto const& win_geo = win_->inputRect(); + nux::Size walloc(gtk_widget_get_allocated_width(dialog_), gtk_widget_get_allocated_height(dialog_)); + gtk_window_move(GTK_WINDOW(dialog_), win_geo.centerX() - walloc.width/2, win_geo.centerY() - walloc.height/2); + } + ForceQuitDialog* parent_; CompWindow* win_; GtkWidget* dialog_; @@ -345,5 +352,10 @@ ForceQuitDialog::ForceQuitDialog(CompWindow* win, Time tm) ForceQuitDialog::~ForceQuitDialog() {} +void ForceQuitDialog::UpdateDialogPosition() +{ + impl_->UpdateDialogPosition(); +} + } // decoration namespace } // unity namespace diff --git a/decorations/DecorationsForceQuitDialog.h b/decorations/DecorationsForceQuitDialog.h index a1429623e..a49ee1dd7 100644 --- a/decorations/DecorationsForceQuitDialog.h +++ b/decorations/DecorationsForceQuitDialog.h @@ -38,6 +38,8 @@ public: nux::Property<Time> time; + void UpdateDialogPosition(); + private: struct Impl; std::unique_ptr<Impl> impl_; diff --git a/decorations/DecorationsPriv.h b/decorations/DecorationsPriv.h index 663f13928..1650c6df2 100644 --- a/decorations/DecorationsPriv.h +++ b/decorations/DecorationsPriv.h @@ -109,6 +109,7 @@ private: void ComputeShadowQuads(); void UpdateDecorationTextures(); + void UpdateForceQuitDialogPosition(); void RenderDecorationTexture(Side, nux::Geometry const&); void Paint(GLMatrix const&, GLWindowPaintAttrib const&, CompRegion const&, unsigned mask); void Draw(GLMatrix const&, GLWindowPaintAttrib const&, CompRegion const&, unsigned mask); |
