first working prototype
This commit is contained in:
commit
ed1388cadb
|
@ -0,0 +1,128 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version("Gtk", "3.0")
|
||||||
|
gi.require_version("Handy", "0.0")
|
||||||
|
#gi.require_version("LightDM", 0.0)
|
||||||
|
from gi.repository import Gtk, Handy, LightDM, Gdk
|
||||||
|
|
||||||
|
# main window
|
||||||
|
window = Gtk.Window()
|
||||||
|
window.connect("destroy", Gtk.main_quit)
|
||||||
|
display = Gdk.Display.get_default()
|
||||||
|
monitor = display.get_monitor(0)
|
||||||
|
screen_size = monitor.get_geometry()
|
||||||
|
window.set_size_request(screen_size.width, screen_size.height)
|
||||||
|
# window.set_resizable(False)
|
||||||
|
|
||||||
|
# scrollable view
|
||||||
|
scroll = Gtk.ScrolledWindow(visible=True)
|
||||||
|
window.add(scroll)
|
||||||
|
viewport = Gtk.Viewport(visible=True)
|
||||||
|
scroll.add(viewport)
|
||||||
|
print("2", file=sys.stderr)
|
||||||
|
# collomn box
|
||||||
|
container = Gtk.Box(
|
||||||
|
visible=True,
|
||||||
|
can_focus=False,
|
||||||
|
orientation="vertical",
|
||||||
|
halign="center",
|
||||||
|
valign="center",
|
||||||
|
hexpand=True,
|
||||||
|
vexpand=True,
|
||||||
|
spacing=12
|
||||||
|
)
|
||||||
|
container.set_size_request(screen_size.width * 0.9, screen_size.height * 0.9)
|
||||||
|
viewport.add(container)
|
||||||
|
|
||||||
|
# entry buffer
|
||||||
|
entry_buffer = Gtk.EntryBuffer()
|
||||||
|
|
||||||
|
|
||||||
|
# backspace
|
||||||
|
def backspace(btn):
|
||||||
|
length = entry_buffer.get_length()
|
||||||
|
if length <= 0:
|
||||||
|
# theres no text left to delete
|
||||||
|
return
|
||||||
|
text = entry_buffer.get_text()
|
||||||
|
print(text)
|
||||||
|
entry_buffer.delete_text(length - 1, 1)
|
||||||
|
text2 = entry_buffer.get_text()
|
||||||
|
print(text2)
|
||||||
|
|
||||||
|
|
||||||
|
delete_btn = Gtk.Button(visible=True, can_focus=True, focus_on_click=False)
|
||||||
|
db_img = Gtk.Image(visible=True, icon_name="edit-clear-symbolic")
|
||||||
|
delete_btn.add(db_img)
|
||||||
|
delete_btn.connect("clicked", backspace)
|
||||||
|
|
||||||
|
# entry
|
||||||
|
pin_entry = Gtk.Entry(
|
||||||
|
visible=True,
|
||||||
|
can_focus=False,
|
||||||
|
has_frame=False,
|
||||||
|
margin_top=12,
|
||||||
|
margin_bottom=12,
|
||||||
|
visibility=False,
|
||||||
|
buffer=entry_buffer,
|
||||||
|
input_purpose=Gtk.InputPurpose.PIN,
|
||||||
|
xalign=0.5,
|
||||||
|
caps_lock_warning=False,
|
||||||
|
hexpand=True,
|
||||||
|
vexpand=True,
|
||||||
|
)
|
||||||
|
container.add(pin_entry)
|
||||||
|
|
||||||
|
# keypad
|
||||||
|
keypad = Handy.Keypad(
|
||||||
|
visible=True,
|
||||||
|
can_focus=False,
|
||||||
|
halign="fill",
|
||||||
|
valign="fill",
|
||||||
|
margin_top=12,
|
||||||
|
margin_bottom=12,
|
||||||
|
only_digits=True,
|
||||||
|
show_symbols=False,
|
||||||
|
right_action=delete_btn,
|
||||||
|
entry=pin_entry,
|
||||||
|
)
|
||||||
|
container.add(keypad)
|
||||||
|
|
||||||
|
# greeter
|
||||||
|
greeter = LightDM.Greeter()
|
||||||
|
|
||||||
|
print("4", file=sys.stderr)
|
||||||
|
def login_clicked(btn):
|
||||||
|
# greeter.authenticate("demo")
|
||||||
|
greeter.respond(pin_entry.get_text())
|
||||||
|
if greeter.get_is_authenticated():
|
||||||
|
greeter.start_session_sync(None)
|
||||||
|
|
||||||
|
|
||||||
|
# login button
|
||||||
|
login_btn = Gtk.Button(label="Login", visible=True)
|
||||||
|
login_btn.connect("clicked", login_clicked)
|
||||||
|
container.add(login_btn)
|
||||||
|
|
||||||
|
# prompt label
|
||||||
|
prompt_label = Gtk.Label(visible=True)
|
||||||
|
container.add(prompt_label)
|
||||||
|
|
||||||
|
# message label
|
||||||
|
message_label = Gtk.Label(visible=True)
|
||||||
|
container.add(message_label)
|
||||||
|
|
||||||
|
|
||||||
|
greeter.connect(
|
||||||
|
"authentication-complete",
|
||||||
|
lambda g: g.get_is_authenticated() and g.start_session_sync(None),
|
||||||
|
)
|
||||||
|
greeter.connect("show-message", lambda g, m, pt: message_label.set_text(m))
|
||||||
|
greeter.connect("show-prompt", lambda g, m, t: prompt_label.set_text(m))
|
||||||
|
greeter.connect_sync()
|
||||||
|
greeter.authenticate("demo")
|
||||||
|
|
||||||
|
window.show()
|
||||||
|
window.fullscreen()
|
||||||
|
Gtk.main()
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Mobile Greeter
|
||||||
|
Comment=A simple lightdm greeter for mobile
|
||||||
|
Exec=lightdm-mobile-greeter
|
||||||
|
Type=Application
|
Loading…
Reference in New Issue