|
@@ -4252,6 +4252,23 @@ void ImGuiInputTextCallbackData::InsertChars(int pos, const char* new_text, cons
|
|
|
BufTextLen += new_text_len;
|
|
|
}
|
|
|
|
|
|
+void ImGui::PushPasswordFont()
|
|
|
+{
|
|
|
+ ImGuiContext& g = *GImGui;
|
|
|
+ ImFont* in_font = g.Font;
|
|
|
+ ImFont* out_font = &g.InputTextPasswordFont;
|
|
|
+ const ImFontGlyph* glyph = in_font->FindGlyph('*');
|
|
|
+ out_font->FontSize = in_font->FontSize;
|
|
|
+ out_font->Scale = in_font->Scale;
|
|
|
+ out_font->Ascent = in_font->Ascent;
|
|
|
+ out_font->Descent = in_font->Descent;
|
|
|
+ out_font->ContainerAtlas = in_font->ContainerAtlas;
|
|
|
+ out_font->FallbackGlyph = glyph;
|
|
|
+ out_font->FallbackAdvanceX = glyph->AdvanceX;
|
|
|
+ IM_ASSERT(out_font->Glyphs.Size == 0 && out_font->IndexAdvanceX.Size == 0 && out_font->IndexLookup.Size == 0);
|
|
|
+ PushFont(out_font);
|
|
|
+}
|
|
|
+
|
|
|
// Return false to discard a character.
|
|
|
static bool InputTextFilterCharacter(ImGuiContext* ctx, unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data, bool input_source_is_clipboard)
|
|
|
{
|
|
@@ -4662,19 +4679,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
|
|
|
|
|
|
// Password pushes a temporary font with only a fallback glyph
|
|
|
if (is_password && !is_displaying_hint)
|
|
|
- {
|
|
|
- const ImFontGlyph* glyph = g.Font->FindGlyph('*');
|
|
|
- ImFont* password_font = &g.InputTextPasswordFont;
|
|
|
- password_font->FontSize = g.Font->FontSize;
|
|
|
- password_font->Scale = g.Font->Scale;
|
|
|
- password_font->Ascent = g.Font->Ascent;
|
|
|
- password_font->Descent = g.Font->Descent;
|
|
|
- password_font->ContainerAtlas = g.Font->ContainerAtlas;
|
|
|
- password_font->FallbackGlyph = glyph;
|
|
|
- password_font->FallbackAdvanceX = glyph->AdvanceX;
|
|
|
- IM_ASSERT(password_font->Glyphs.empty() && password_font->IndexAdvanceX.empty() && password_font->IndexLookup.empty());
|
|
|
- PushFont(password_font);
|
|
|
- }
|
|
|
+ PushPasswordFont();
|
|
|
|
|
|
// Process mouse inputs and character inputs
|
|
|
if (g.ActiveId == id)
|
|
@@ -8632,7 +8637,7 @@ bool ImGui::BeginMenuBar()
|
|
|
|
|
|
IM_ASSERT(!window->DC.MenuBarAppending);
|
|
|
BeginGroup(); // Backup position on layer 0 // FIXME: Misleading to use a group for that backup/restore
|
|
|
- PushID("##menubar");
|
|
|
+ PushID("##MenuBar");
|
|
|
|
|
|
// We don't clip with current window clipping rectangle as it is already set to the area below. However we clip with window full rect.
|
|
|
// We remove 1 worth of rounding to Max.x to that text in long menus and small windows don't tend to display over the lower-right rounded area, which looks particularly glitchy.
|
|
@@ -8776,7 +8781,7 @@ void ImGui::EndMainMenuBar()
|
|
|
// When the user has left the menu layer (typically: closed menus through activation of an item), we restore focus to the previous window
|
|
|
// FIXME: With this strategy we won't be able to restore a NULL focus.
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
- if (g.CurrentWindow == g.NavWindow && g.NavLayer == ImGuiNavLayer_Main && !g.NavAnyRequest)
|
|
|
+ if (g.CurrentWindow == g.NavWindow && g.NavLayer == ImGuiNavLayer_Main && !g.NavAnyRequest && g.ActiveId == 0)
|
|
|
FocusTopMostWindowUnderOne(g.NavWindow, NULL, NULL, ImGuiFocusRequestFlags_UnlessBelowModal | ImGuiFocusRequestFlags_RestoreFocusedChild);
|
|
|
|
|
|
End();
|