Hi, I created a patch for feature #5917 (tails-greeter password field : Warn when caps-lock in ON).
I had a problem when caps lock key was on. I press the key again and it doesn't generate a key event, so the warning message does not hide until i press another key; don't know if this is GTK normal behavior or specific to my keyboard or virtualbox. Could please somebody check that? kind regards, kurono.
From 3f5fd5c90e1ef2cfe0873bd2e6f282487cc36242 Mon Sep 17 00:00:00 2001 From: kurono <andres.go...@cern.ch> Date: Sat, 5 Oct 2013 23:32:21 +0200 Subject: [PATCH 3/3] tails-greeter password field : Warn when caps-lock in ON --- GdmGreeter/optionswindow.py | 8 ++++++++ GdmGreeter/persistencewindow.py | 7 +++++++ glade/optionswindow.glade | 41 +++++++++++++++++++++++++++++++++++++ glade/persistencewindow.glade | 43 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 98 insertions(+), 1 deletion(-) diff --git a/GdmGreeter/optionswindow.py b/GdmGreeter/optionswindow.py index 9042cb9..cd8fa40 100644 --- a/GdmGreeter/optionswindow.py +++ b/GdmGreeter/optionswindow.py @@ -38,12 +38,14 @@ class OptionsWindow(TranslatableWindow): self.entry_password2 = builder.get_object("password_entry2") self.warning_label = builder.get_object("warning_label") self.warning_area = builder.get_object("warning_area") + self.caps_lock_warning_area = builder.get_object("caps_lock_warning_area") self.camouflage_checkbox = builder.get_object("camouflage_checkbox") TranslatableWindow.__init__(self, builder.get_object("options_dialog")) self.window.set_visible(False) self.warning_area.hide() + self.caps_lock_warning_area.hide() self.entry_password.set_visibility(False) self.entry_password2.set_visibility(False) @@ -86,6 +88,12 @@ class OptionsWindow(TranslatableWindow): self.entry_password2.grab_focus() else: self.set_options_and_login() + elif event.keyval == gtk.keysyms.Caps_Lock: + if event.state & gtk.gdk.LOCK_MASK: + self.caps_lock_warning_area.show() + elif not (event.state & gtk.gdk.LOCK_MASK): + self.caps_lock_warning_area.hide() + def delete_event_cb(self, widget, event=None): """Ignore delete event (Esc)""" diff --git a/GdmGreeter/persistencewindow.py b/GdmGreeter/persistencewindow.py index 657544f..7df7a2a 100644 --- a/GdmGreeter/persistencewindow.py +++ b/GdmGreeter/persistencewindow.py @@ -53,6 +53,7 @@ class PersistenceWindow(TranslatableWindow): self.readonly_checkbutton = builder.get_object("readonly_checkbutton") self.warning_label = builder.get_object("warning_label") self.warning_area = builder.get_object("warning_area") + self.caps_lock_warning_area = builder.get_object("caps_lock_warning_area") self.warning_image = builder.get_object("warning_area") # self.spinner = builder.get_object("spinner") self.checked_img_moreoptions_yes = builder.get_object("moreoptions_yes_checked_img") @@ -61,6 +62,7 @@ class PersistenceWindow(TranslatableWindow): self.checked_img_persistence_no = builder.get_object("persistence_no_checked_img") self.warning_area.hide() + self.caps_lock_warning_area.hide() # FIXME: list_containers may raise exceptions. Deal with that. self.containers = [ @@ -189,6 +191,11 @@ class PersistenceWindow(TranslatableWindow): if event: if event.keyval in [ gtk.keysyms.Return, gtk.keysyms.KP_Enter ]: self.go() + elif event.keyval == gtk.keysyms.Caps_Lock: + if event.state & gtk.gdk.LOCK_MASK: + self.caps_lock_warning_area.show() + elif not (event.state & gtk.gdk.LOCK_MASK): + self.caps_lock_warning_area.hide() def delete_event_cb(self, widget, event=None): """Ignore delete event (Esc)""" diff --git a/glade/optionswindow.glade b/glade/optionswindow.glade index e0bedaa..30054a6 100644 --- a/glade/optionswindow.glade +++ b/glade/optionswindow.glade @@ -184,6 +184,47 @@ Otherwise it will be disabled for better security.</property> <property name="position">2</property> </packing> </child> + <child> + <object class="GtkHBox" id="caps_lock_warning_area"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">6</property> + <child> + <object class="GtkImage" id="caps_lock_warning_image"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-info</property> + <property name="icon-size">1</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="caps_lock_warning_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="xpad">10</property> + <property name="ypad">10</property> + <property name="label" translatable="yes"><i>Caps lock is on</i></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> <child> <object class="GtkHBox" id="warning_area"> <property name="visible">True</property> diff --git a/glade/persistencewindow.glade b/glade/persistencewindow.glade index 0b6f25f..f4b3c91 100644 --- a/glade/persistencewindow.glade +++ b/glade/persistencewindow.glade @@ -292,6 +292,47 @@ <property name="position">2</property> </packing> </child> + <child> + <object class="GtkHBox" id="caps_lock_warning_area"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">6</property> + <child> + <object class="GtkImage" id="caps_lock_warning_image"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-info</property> + <property name="icon-size">1</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="caps_lock_warning_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="xpad">10</property> + <property name="ypad">10</property> + <property name="label" translatable="yes"><i>Caps lock is on</i></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> <child> <object class="GtkHBox" id="warning_area"> <property name="can_focus">False</property>
_______________________________________________ tails-dev mailing list tails-dev@boum.org https://mailman.boum.org/listinfo/tails-dev