aboutsummaryrefslogtreecommitdiff
path: root/src/prompt-box.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/prompt-box.vala')
-rw-r--r--src/prompt-box.vala140
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);