aboutsummaryrefslogtreecommitdiff
path: root/src/ui/controls
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/controls')
-rw-r--r--src/ui/controls/Popup.cpp8
-rw-r--r--src/ui/controls/RootControl.cpp17
-rw-r--r--src/ui/controls/TextBox.cpp2
3 files changed, 24 insertions, 3 deletions
diff --git a/src/ui/controls/Popup.cpp b/src/ui/controls/Popup.cpp
index bc217bf5..515c7b31 100644
--- a/src/ui/controls/Popup.cpp
+++ b/src/ui/controls/Popup.cpp
@@ -8,15 +8,19 @@
#include <memory>
namespace cru::ui::controls {
-Popup::Popup(Control* attached_control) : RootControl(attached_control) {}
+Popup::Popup(Control* attached_control) : RootControl(attached_control) {
+ SetGainFocusOnCreateAndDestroyWhenLoseFocus(true);
+}
Popup::~Popup() = default;
gsl::not_null<platform::gui::INativeWindow*> Popup::CreateNativeWindow(
gsl::not_null<host::WindowHost*> host,
platform::gui::INativeWindow* parent) {
- return host->CreateNativeWindow(
+ auto window = host->CreateNativeWindow(
{parent, platform::gui::CreateWindowFlags::NoCaptionAndBorder});
+
+ return window;
}
} // namespace cru::ui::controls
diff --git a/src/ui/controls/RootControl.cpp b/src/ui/controls/RootControl.cpp
index 015703c3..007a0ac1 100644
--- a/src/ui/controls/RootControl.cpp
+++ b/src/ui/controls/RootControl.cpp
@@ -2,6 +2,7 @@
#include "cru/common/Base.hpp"
#include "cru/platform/gui/Base.hpp"
+#include "cru/platform/gui/Window.hpp"
#include "cru/ui/host/WindowHost.hpp"
#include "cru/ui/render/Base.hpp"
#include "cru/ui/render/StackLayoutRenderObject.hpp"
@@ -36,6 +37,9 @@ void RootControl::Show(bool create) {
platform::gui::INativeWindow* native_window = GetNativeWindow(create);
if (!native_window) return;
native_window->SetVisible(true);
+ if (gain_focus_on_create_and_destroy_when_lose_focus_) {
+ native_window->RequestFocus();
+ }
}
platform::gui::INativeWindow* RootControl::GetNativeWindow(bool create) {
@@ -47,7 +51,20 @@ platform::gui::INativeWindow* RootControl::GetNativeWindow(bool create) {
host, attached_control_
? attached_control_->GetWindowHost()->GetNativeWindow()
: nullptr);
+
+ if (gain_focus_on_create_and_destroy_when_lose_focus_) {
+ native_window->FocusEvent()->AddHandler(
+ [native_window](platform::gui::FocusChangeType type) {
+ if (type == platform::gui::FocusChangeType::Lost) {
+ native_window->Close();
+ }
+ });
+ }
}
return native_window;
}
+
+void RootControl::SetGainFocusOnCreateAndDestroyWhenLoseFocus(bool value) {
+ gain_focus_on_create_and_destroy_when_lose_focus_ = value;
+}
} // namespace cru::ui::controls
diff --git a/src/ui/controls/TextBox.cpp b/src/ui/controls/TextBox.cpp
index 622401c4..c4912307 100644
--- a/src/ui/controls/TextBox.cpp
+++ b/src/ui/controls/TextBox.cpp
@@ -28,7 +28,7 @@ TextBox::TextBox()
border_render_object_->SetAttachedControl(this);
scroll_render_object_->SetAttachedControl(this);
text_render_object_->SetAttachedControl(this);
- text_render_object_->SetMinSize(Size{100, 24});
+ text_render_object_->SetMinSize(Size{100, 0});
text_render_object_->SetMeasureIncludingTrailingSpace(true);
service_ = std::make_unique<TextHostControlService>(this);