aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaturneric <[email protected]>2023-03-31 08:25:28 +0000
committerSaturneric <[email protected]>2023-03-31 08:25:28 +0000
commite87d2167f8149afc1d65bafde0d5046f7d2c6137 (patch)
tree6fed874af43edca293cfbd0c067ad833d87b7c94
parentfeat: read offline and auto import config when init (diff)
downloadGpgFrontend-e87d2167f8149afc1d65bafde0d5046f7d2c6137.tar.gz
GpgFrontend-e87d2167f8149afc1d65bafde0d5046f7d2c6137.zip
fix: improve general dialog position representation
-rw-r--r--src/ui/dialog/GeneralDialog.cpp104
1 files changed, 59 insertions, 45 deletions
diff --git a/src/ui/dialog/GeneralDialog.cpp b/src/ui/dialog/GeneralDialog.cpp
index 9367aa44..90c56b8a 100644
--- a/src/ui/dialog/GeneralDialog.cpp
+++ b/src/ui/dialog/GeneralDialog.cpp
@@ -57,53 +57,17 @@ void GpgFrontend::UI::GeneralDialog::slot_restore_settings() noexcept {
size_ = {width, height};
- if (this->parent() != nullptr) {
- QPoint parent_pos = {0, 0};
- QSize parent_size = {0, 0};
-
- auto *parent_widget = qobject_cast<QWidget *>(this->parent());
- if (parent_widget != nullptr) {
- parent_pos = parent_widget->pos();
- parent_size = parent_widget->size();
- }
-
- auto *parent_dialog = qobject_cast<QDialog *>(this->parent());
- if (parent_dialog != nullptr) {
- parent_pos = parent_dialog->pos();
- parent_size = parent_dialog->size();
- }
-
- auto *parent_window = qobject_cast<QMainWindow *>(this->parent());
- if (parent_window != nullptr) {
- parent_pos = parent_window->pos();
- parent_size = parent_window->size();
- }
-
- SPDLOG_DEBUG("parent pos x: {} y: {}", parent_pos.x(), parent_pos.y());
-
- SPDLOG_DEBUG("parent size width: {} height: {}", parent_size.width(),
- parent_size.height());
-
- SPDLOG_DEBUG("this dialog size width: {} height: {}", size_.width(),
- size_.height());
-
- if (parent_pos != QPoint{0, 0}) {
- QPoint parent_center{parent_pos.x() + parent_size.width() / 2,
- parent_pos.y() + parent_size.height() / 2};
-
- pos_ = {parent_center.x() - size_.width() / 2,
- parent_center.y() - size_.height() / 2};
-
- // record parent_pos_
- this->parent_pos_ = parent_pos;
- this->parent_size_ = parent_size;
- }
+ // check for valid
+ if (!pos_.isNull() && pos_.x() > 50 && pos_.y() > 50 && size_.isValid()) {
+ this->move(pos_);
+ this->resize(size_);
+ return;
}
-
- this->move(pos_);
- this->resize(size_);
}
+ // default action
+ movePosition2CenterOfParent();
+
} catch (...) {
SPDLOG_ERROR(name_, "error");
}
@@ -148,8 +112,56 @@ void GpgFrontend::UI::GeneralDialog::setPosCenterOfScreen() {
*
*/
void GpgFrontend::UI::GeneralDialog::movePosition2CenterOfParent() {
- SPDLOG_DEBUG("parent pos x: {} y: {}", parent_pos_.x(), parent_pos_.y());
+ // read pos and size from parent
+ if (this->parent() != nullptr) {
+ QPoint parent_pos = {0, 0};
+ QSize parent_size = {0, 0};
+
+ auto *parent_widget = qobject_cast<QWidget *>(this->parent());
+ if (parent_widget != nullptr) {
+ parent_pos = parent_widget->pos();
+ parent_size = parent_widget->size();
+ }
+
+ auto *parent_dialog = qobject_cast<QDialog *>(this->parent());
+ if (parent_dialog != nullptr) {
+ parent_pos = parent_dialog->pos();
+ parent_size = parent_dialog->size();
+ }
+
+ auto *parent_window = qobject_cast<QMainWindow *>(this->parent());
+ if (parent_window != nullptr) {
+ parent_pos = parent_window->pos();
+ parent_size = parent_window->size();
+ }
+
+ SPDLOG_DEBUG("parent pos x: {} y: {}", parent_pos.x(), parent_pos.y());
+ SPDLOG_DEBUG("parent size width: {} height: {}", parent_size.width(),
+ parent_size.height());
+
+ SPDLOG_DEBUG("this dialog size width: {} height: {}", size_.width(),
+ size_.height());
+
+ if (parent_pos != QPoint{0, 0}) {
+ QPoint parent_center{parent_pos.x() + parent_size.width() / 2,
+ parent_pos.y() + parent_size.height() / 2};
+
+ pos_ = {parent_center.x() - size_.width() / 2,
+ parent_center.y() - size_.height() / 2};
+
+ // record parent_pos_
+ this->parent_pos_ = parent_pos;
+ this->parent_size_ = parent_size;
+ }
+ } else {
+ // reset parent's pos and size
+ this->parent_pos_ = QPoint{0, 0};
+ this->parent_size_ = QSize{0, 0};
+ }
+
+ // log for debug
+ SPDLOG_DEBUG("parent pos x: {} y: {}", parent_pos_.x(), parent_pos_.y());
SPDLOG_DEBUG("parent size width: {}", parent_size_.width(),
"height:", parent_size_.height());
@@ -164,5 +176,7 @@ void GpgFrontend::UI::GeneralDialog::movePosition2CenterOfParent() {
pos_ = {parent_center.x() - size_.width() / 2,
parent_center.y() - size_.height() / 2};
this->move(pos_);
+ } else {
+ setPosCenterOfScreen();
}
} \ No newline at end of file