summaryrefslogtreecommitdiff
diff options
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2014-04-02 11:05:59 +0200
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2014-04-02 11:05:59 +0200
commite7cc6babd869fd1bfaa88e016bda84476be9b09f (patch)
tree943ff925614058c0dfd47cdf6e2ad88a55f4c4d4
parent09d1a98289a4a06d9cfcd87c73519a61e8b338d6 (diff)
ForceQuitDialog: keep the dialog centered on parent window when its geometry changes
(bzr r3740.4.10)
-rw-r--r--decorations/DecoratedWindow.cpp6
-rw-r--r--decorations/DecorationsForceQuitDialog.cpp12
-rw-r--r--decorations/DecorationsForceQuitDialog.h2
-rw-r--r--decorations/DecorationsPriv.h1
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);