[Textbox] Add 'placeholder-markup' flag.

Fixes: #1690
This commit is contained in:
Dave Davenport 2022-08-28 21:47:05 +02:00
parent cb6afae71f
commit fce721a105
4 changed files with 11 additions and 3 deletions

View file

@ -1501,6 +1501,8 @@ This option is only available on the \fB\fCelement-text\fR widget.
.IP \(bu 2
\fBplaceholder\fP: Set the displayed text (String) when nothing is entered.
.IP \(bu 2
\fBplaceholder-markup\fP: If true, placeholder text supports pango markup for stylizing.
.IP \(bu 2
\fBplaceholder-color\fP: Color of the placeholder text.
.IP \(bu 2
\fBblink\fP: Enable/Disable blinking on an input textbox (Boolean).

View file

@ -929,6 +929,7 @@ The following properties are currently supported:
* **width**: override the desired width for the textbox.
* **content**: Set the displayed text (String).
* **placeholder**: Set the displayed text (String) when nothing is entered.
* **placeholder-markup**: If true, placeholder text supports pango markup for stylizing.
* **placeholder-color**: Color of the placeholder text.
* **blink**: Enable/Disable blinking on an input textbox (Boolean).
* **markup**: Force markup on, beware that only valid pango markup strings are shown.

View file

@ -63,7 +63,7 @@ typedef struct {
unsigned long flags;
short cursor;
char *text;
const char *placeholder;
char *placeholder;
int show_placeholder;
PangoLayout *layout;
int tbft;

View file

@ -227,7 +227,11 @@ textbox *textbox_create(widget *parent, WidgetType type, const char *name,
const char *placeholder =
rofi_theme_get_string(WIDGET(tb), "placeholder", NULL);
if (placeholder) {
tb->placeholder = placeholder;
if (rofi_theme_get_boolean(WIDGET(tb), "placeholder-markup", FALSE)) {
tb->placeholder = g_strdup(placeholder);
} else {
tb->placeholder = g_markup_escape_text(placeholder, -1);
}
}
textbox_text(tb, txt ? txt : "");
textbox_cursor_end(tb);
@ -310,7 +314,7 @@ static void __textbox_update_pango_text(textbox *tb) {
pango_layout_set_attributes(tb->layout, NULL);
if (tb->placeholder && (tb->text == NULL || tb->text[0] == 0)) {
tb->show_placeholder = TRUE;
pango_layout_set_text(tb->layout, tb->placeholder, -1);
pango_layout_set_markup(tb->layout, tb->placeholder, -1);
return;
}
tb->show_placeholder = FALSE;
@ -442,6 +446,7 @@ static void textbox_free(widget *wid) {
}
g_free(tb->text);
g_free(tb->placeholder);
if (tb->layout != NULL) {
g_object_unref(tb->layout);
}