mirror of
https://gitlab.com/virt-viewer/virt-viewer.git
synced 2025-03-08 04:58:17 +03:00
src: use embedded eye icon in password entry box
This improves the UI for the password auth box by using an inline icon for showing/hiding the password text. This is the UI pattern uses by GNOME shell and other GTK applications. The two svg files added here are copied from the GTK4 codebase which is under the LGPLv2+. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
c6f429627c
commit
abbd076fdb
3
icons/scalable/eye-not-looking-symbolic.svg
Normal file
3
icons/scalable/eye-not-looking-symbolic.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
|
||||
<path d="M13.98 1.99a1 1 0 0 0-.687.303l-.984.984A8 8 0 0 0 8 2 8 8 0 0 0 .262 8.01a8 8 0 0 0 2.943 4.37l-.912.913a1 1 0 1 0 1.414 1.414l11-11a1 1 0 0 0-.727-1.717zM8 4a4 4 0 0 1 2.611.974l-1.42 1.42A2 2 0 0 0 8 6a2 2 0 0 0-2 2 2 2 0 0 0 .396 1.19l-1.42 1.42A4 4 0 0 1 4 8a4 4 0 0 1 4-4zm7.03 2.209l-3.344 3.343a4 4 0 0 1-2.127 2.127l-2.28 2.28a8 8 0 0 0 .721.04 8 8 0 0 0 7.738-6.01 8 8 0 0 0-.709-1.78zm-7.53.79a.5.5 0 0 1 .5.5.5.5 0 0 1-.5.5.5.5 0 0 1-.5-.5.5.5 0 0 1 .5-.5z" fill="#2e3436"/>
|
||||
</svg>
|
After Width: | Height: | Size: 570 B |
26
icons/scalable/eye-open-negative-filled-symbolic.svg
Normal file
26
icons/scalable/eye-open-negative-filled-symbolic.svg
Normal file
@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="16" viewBox="0 0 16 16" version="1.1" id="svg7384" height="16">
|
||||
<metadata id="metadata90">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title>Gnome Symbolic Icon Theme</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<title id="title9167">Gnome Symbolic Icon Theme</title>
|
||||
<defs id="defs7386">
|
||||
<linearGradient osb:paint="solid" id="linearGradient7212">
|
||||
<stop style="stop-color:#000000;stop-opacity:1;" offset="0" id="stop7214"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g transform="translate(-341.0002,-13.000323)" style="display:inline" id="layer9"/>
|
||||
<g transform="translate(-100,-380.00032)" id="layer1"/>
|
||||
<g transform="translate(-100,-380.00032)" style="display:inline" id="layer10">
|
||||
<path d="m 108,382 a 8,8 0 0 0 -7.73828,6.00977 A 8,8 0 0 0 108,394 8,8 0 0 0 115.73828,387.99023 8,8 0 0 0 108,382 Z m 0,2 a 4,4 0 0 1 4,4 4,4 0 0 1 -4,4 4,4 0 0 1 -4,-4 4,4 0 0 1 4,-4 z" id="path2314" style="opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"/>
|
||||
<path id="path2318" d="m 110,388.00003 a 2,2 0 0 1 -2,2 2,2 0 0 1 -2,-2 2,2 0 0 1 2,-2 2,2 0 0 1 2,2 z" style="vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/>
|
||||
</g>
|
||||
<g transform="translate(-100,-380.00032)" id="g6387"/>
|
||||
<g transform="translate(-100,-380.00032)" id="layer11"/>
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
@ -130,24 +130,6 @@
|
||||
<property name="bottom-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="show-password">
|
||||
<property name="label" translatable="yes">Show password</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">False</property>
|
||||
<property name="draw-indicator">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="right-attach">2</property>
|
||||
<property name="top-attach">2</property>
|
||||
<property name="bottom-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -18,5 +18,7 @@
|
||||
<file alias="icons/32x32/virt-viewer.png">../../icons/32x32/virt-viewer.png</file>
|
||||
<file alias="icons/48x48/virt-viewer.png">../../icons/48x48/virt-viewer.png</file>
|
||||
<file alias="icons/256x256/virt-viewer.png">../../icons/256x256/virt-viewer.png</file>
|
||||
<file alias="icons/eye-not-looking-symbolic.svg">../../icons/scalable/eye-not-looking-symbolic.svg</file>
|
||||
<file alias="icons/eye-open-negative-filled-symbolic.svg">../../icons/scalable/eye-open-negative-filled-symbolic.svg</file>
|
||||
</gresource>
|
||||
</gresources>
|
||||
|
@ -34,10 +34,17 @@
|
||||
#include "virt-viewer-util.h"
|
||||
|
||||
static void
|
||||
show_password(GtkCheckButton *check_button G_GNUC_UNUSED,
|
||||
GtkEntry *entry)
|
||||
show_password(GtkEntry *entry,
|
||||
GtkEntryIconPosition pos G_GNUC_UNUSED,
|
||||
GdkEvent event G_GNUC_UNUSED)
|
||||
{
|
||||
gtk_entry_set_visibility(entry, !gtk_entry_get_visibility(entry));
|
||||
gboolean visible = gtk_entry_get_visibility(entry);
|
||||
gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry),
|
||||
GTK_ENTRY_ICON_SECONDARY,
|
||||
visible ?
|
||||
"eye-not-looking-symbolic" :
|
||||
"eye-open-negative-filled-symbolic");
|
||||
gtk_entry_set_visibility(entry, !visible);
|
||||
}
|
||||
|
||||
/* NOTE: if username is provided, and *username is non-NULL, the user input
|
||||
@ -58,7 +65,6 @@ virt_viewer_auth_collect_credentials(GtkWindow *window,
|
||||
GtkWidget *promptUsername;
|
||||
GtkWidget *promptPassword;
|
||||
GtkWidget *labelMessage;
|
||||
GtkWidget *checkPassword;
|
||||
int response;
|
||||
char *message;
|
||||
|
||||
@ -71,7 +77,6 @@ virt_viewer_auth_collect_credentials(GtkWindow *window,
|
||||
promptUsername = GTK_WIDGET(gtk_builder_get_object(creds, "prompt-username"));
|
||||
credPassword = GTK_WIDGET(gtk_builder_get_object(creds, "cred-password"));
|
||||
promptPassword = GTK_WIDGET(gtk_builder_get_object(creds, "prompt-password"));
|
||||
checkPassword = GTK_WIDGET(gtk_builder_get_object(creds, "show-password"));
|
||||
|
||||
gtk_widget_set_sensitive(credUsername, username != NULL);
|
||||
if (username && *username) {
|
||||
@ -83,7 +88,20 @@ virt_viewer_auth_collect_credentials(GtkWindow *window,
|
||||
gtk_widget_set_sensitive(credPassword, password != NULL);
|
||||
gtk_widget_set_sensitive(promptPassword, password != NULL);
|
||||
|
||||
g_signal_connect(checkPassword, "clicked", G_CALLBACK(show_password), credPassword);
|
||||
gtk_entry_set_icon_from_icon_name(GTK_ENTRY(credPassword),
|
||||
GTK_ENTRY_ICON_SECONDARY,
|
||||
"eye-not-looking-symbolic");
|
||||
gtk_entry_set_icon_sensitive(GTK_ENTRY(credPassword),
|
||||
GTK_ENTRY_ICON_SECONDARY,
|
||||
TRUE);
|
||||
gtk_entry_set_icon_activatable(GTK_ENTRY(credPassword),
|
||||
GTK_ENTRY_ICON_SECONDARY,
|
||||
TRUE);
|
||||
gtk_entry_set_icon_tooltip_text(GTK_ENTRY(credPassword),
|
||||
GTK_ENTRY_ICON_SECONDARY,
|
||||
_("Show / hide password text"));
|
||||
|
||||
g_signal_connect(credPassword, "icon-press", G_CALLBACK(show_password), credPassword);
|
||||
|
||||
if (address) {
|
||||
message = g_strdup_printf(_("Authentication is required for the %s connection to:\n\n<b>%s</b>\n\n"),
|
||||
|
Loading…
x
Reference in New Issue
Block a user