diff options
Diffstat (limited to 'src/prompt-box.vala')
-rw-r--r-- | src/prompt-box.vala | 140 |
1 files changed, 102 insertions, 38 deletions
diff --git a/src/prompt-box.vala b/src/prompt-box.vala index 1254d14..fb3d4ab 100644 --- a/src/prompt-box.vala +++ b/src/prompt-box.vala @@ -2,7 +2,7 @@ * * Copyright (C) 2011,2012 Canonical Ltd * Copyright (C) 2015,2017 Mike Gabriel <mike.gabriel@das-netzwerkteam.de> - * Copyright (C) 2023 Robert Tari + * Copyright (C) 2023-2025 Robert Tari * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as @@ -96,6 +96,7 @@ public class PromptBox : FadableBox construct { + resize_mode = Gtk.ResizeMode.QUEUE; var greeter = new ArcticaGreeter(); set_start_row (); @@ -222,8 +223,8 @@ public class PromptBox : FadableBox try { var color_provider = new Gtk.CssProvider (); - var css = "* { color: rgba(255, 255, 255, 1.0); }\n" + - ".high_contrast { color: rgba (0, 0, 0, 1.0); }"; + string sColor = AGSettings.get_string (AGSettings.KEY_PROMPTBOX_COLOR_NORMAL); + var css = "* { color: %s; } .high_contrast { color: rgba (0, 0, 0, 1.0); }".printf (sColor); color_provider.load_from_data (css, -1); style_ctx.add_provider (color_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); @@ -246,13 +247,12 @@ public class PromptBox : FadableBox message_image = new CachedImage (null); message_image.set_from_icon_name("mail-unread", Gtk.IconSize.BUTTON); - - var align = new Gtk.Alignment (0.5f, 0.5f, 0.0f, 0.0f); - align.valign = Gtk.Align.START; - align.set_size_request (-1, greeter.grid_size); - align.add (message_image); - align.show (); - name_grid.attach (align, COL_NAME_MESSAGE, ROW_NAME, 1, 1); + message_image.halign = Gtk.Align.CENTER; + message_image.valign = Gtk.Align.START; + message_image.hexpand = false; + message_image.vexpand = false; + message_image.set_size_request (-1, greeter.grid_size); + name_grid.attach (message_image, COL_NAME_MESSAGE, ROW_NAME, 1, 1); option_button = new FlatButton (); var option_button_ctx = option_button.get_style_context (); @@ -321,7 +321,7 @@ public class PromptBox : FadableBox try { var font_provider = new Gtk.CssProvider (); - var css = "* {font-family: %s; font-size: %dpt;}".printf (font_family, font_size); + var css = "* {color: #FFFFFF; font-family: %s; font-size: %dpt;}".printf (font_family, font_size); font_provider.load_from_data (css, -1); style_ctx.add_provider (font_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); @@ -333,7 +333,6 @@ public class PromptBox : FadableBox var greeter = new ArcticaGreeter(); - small_name_label.override_color (Gtk.StateFlags.NORMAL, { 1.0f, 1.0f, 1.0f, 1.0f }); small_name_label.yalign = 0.5f; small_name_label.xalign = 0.0f; small_name_label.margin_start = 2; @@ -343,12 +342,12 @@ public class PromptBox : FadableBox small_message_image = new CachedImage (null); small_message_image.set_from_icon_name("mail-unread", Gtk.IconSize.BUTTON); - - var align = new Gtk.Alignment (0.5f, 0.5f, 0.0f, 0.0f); - align.set_size_request (-1, greeter.grid_size); - align.add (small_message_image); - align.show (); - small_name_grid.attach (align, 2, 0, 1, 1); + small_message_image.halign = Gtk.Align.CENTER; + small_message_image.valign = Gtk.Align.CENTER; + small_message_image.hexpand = false; + small_message_image.vexpand = false; + small_message_image.set_size_request (-1, greeter.grid_size); + small_name_grid.attach (small_message_image, 2, 0, 1, 1); small_name_grid.show (); return small_name_grid; @@ -560,7 +559,19 @@ public class PromptBox : FadableBox ArcticaGreeter.add_style_class (w); last_row += 1; - box_grid.attach (w, COL_ENTRIES_START, last_row, COL_ENTRIES_WIDTH, 1); + bool bErrorBelow = AGSettings.get_boolean (AGSettings.KEY_ERROR_BELOW_ENTRY); + + if (has_errors && bErrorBelow) + { + Gtk.Widget pChild = box_grid.get_child_at (COL_ENTRIES_START, last_row-1); + box_grid.remove (pChild); + box_grid.attach (w, COL_ENTRIES_START, last_row-1, COL_ENTRIES_WIDTH, 1); + box_grid.attach (pChild, COL_ENTRIES_START, last_row, COL_ENTRIES_WIDTH, 1); + } + else + { + box_grid.attach (w, COL_ENTRIES_START, last_row, COL_ENTRIES_WIDTH, 1); + } update_prompt_visibility (w); queue_resize (); @@ -568,16 +579,27 @@ public class PromptBox : FadableBox public void add_message (string text, bool is_error) { - var label = new FadingLabel (text); - label.set_line_wrap (true); + var label = new FadingLabel (""); var style_ctx = label.get_style_context(); try { var font_provider = new Gtk.CssProvider (); - var css = "* {font-family: %s; font-size: %dpt; color: white} - *.high_contrast {color: black; }".printf (font_family, font_size-1); + var css = ""; + + if (is_error) + { + string sColor = AGSettings.get_string (AGSettings.KEY_PROMPTBOX_COLOR_ERROR); + double fOpacity = AGSettings.get_double (AGSettings.KEY_PROMPTBOX_ERROR_BG_OPACITY); + css = "* {font-family: %s; font-size: %dpt; color: %s; background-color: rgba(255, 255, 255, %f); text-shadow: none;}".printf (font_family, font_size-1, sColor, fOpacity); + } + else + { + string sColor = AGSettings.get_string (AGSettings.KEY_PROMPTBOX_COLOR_NORMAL); + css = "* {font-family: %s; font-size: %dpt; color: %s;} *.high_contrast {color: black; }".printf (font_family, font_size-1, sColor); + } + font_provider.load_from_data (css, -1); style_ctx.add_provider (font_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); @@ -587,25 +609,42 @@ public class PromptBox : FadableBox debug ("Internal error loading font style (%s, %dpt): %s", font_family, font_size-1, e.message); } - if (is_error) { + label.xalign = 0.0f; + label.set_data<bool> ("prompt-box-is-error", is_error); - /* red */ - Gdk.RGBA color = { 1.0f, 1.0f, 1.0f, 1.0f }; - color.parse ("#820900"); + // Wrap the text if needed + ArcticaGreeter pGreeter = new ArcticaGreeter (); + Pango.Context pContext = label.get_pango_context (); + Pango.Layout pLayout = new Pango.Layout (pContext); + Pango.FontDescription pDescription = null; + Gtk.StateFlags nFlags = style_ctx.get_state (); + style_ctx.get (nFlags, "font", out pDescription, null); + pLayout.set_font_description (pDescription); + StringBuilder pBuilder = new StringBuilder (); + string[] lWords = text.split (" "); + string sLine = ""; + + foreach (string sWord in lWords) + { + string sTest = sLine == "" ? sWord : sLine + " " + sWord; + pLayout.set_text (sTest, -1); + int nWidth = 0; + pLayout.get_size (out nWidth, null); - /* - * Overriding the background color will look ugly, but at least - * always make the text readable, which is probably important for - * error messages. - * We probably want to find a better way of handling this. - */ - Gdk.RGBA bg_color = { 1.0f, 1.0f, 1.0f, 1.0f }; - label.override_background_color (Gtk.StateFlags.NORMAL, bg_color); - label.override_color (Gtk.StateFlags.NORMAL, color); + if (nWidth / Pango.SCALE > (pGreeter.grid_size * GreeterList.BOX_WIDTH - (int)(GreeterList.BORDER * pGreeter.scaling_factor_widgets * 8)) && sLine != "") + { + pBuilder.append (sLine + "\n"); + sLine = sWord; + } + else + { + sLine = sTest; + } } - label.xalign = 0.0f; - label.set_data<bool> ("prompt-box-is-error", is_error); + pBuilder.append (sLine); + label.set_text (pBuilder.str); + //~Wrap the text if needed attach_item (label); @@ -683,6 +722,31 @@ public class PromptBox : FadableBox } entry.respond.connect (entry_activate_cb); + Gtk.StyleContext pContext = entry.get_style_context (); + Gtk.CssProvider pProvider = new Gtk.CssProvider (); + string sKey = ""; + + if (has_errors) + { + sKey = AGSettings.KEY_PROMPTBOX_COLOR_ERROR; + } + else + { + sKey = AGSettings.KEY_PROMPTBOX_COLOR_NORMAL; + } + + string sColor = AGSettings.get_string (sKey); + string sCss = "entry {border: none; outline: none; box-shadow: 1px 0 %s inset, 0 1px %s inset, -1px 0 %s inset, 0 -1px %s inset;}".printf (sColor, sColor, sColor, sColor); + + try + { + pProvider.load_from_data (sCss, -1); + pContext.add_provider (pProvider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); + } + catch (Error pError) + { + warning ("Panic: Error setting DashEntry border colour: %s", pError.message); + } attach_item (entry); |