kuuko pushed a commit to branch master.

http://git.enlightenment.org/misc/polkit-efl.git/commit/?id=587b7ce1ee279c297067a4c9016dd6d00b012bf2

commit 587b7ce1ee279c297067a4c9016dd6d00b012bf2
Author: Kai Huuhko <[email protected]>
Date:   Wed Jun 4 09:39:13 2014 +0300

    Go to auth when id selected, add kb navigation to hoversel
    
    kb nav keys are up/down/return
---
 polkit-efl-authentication-agent-1 | 82 +++++++++++++++++++++++++++++++++------
 1 file changed, 70 insertions(+), 12 deletions(-)

diff --git a/polkit-efl-authentication-agent-1 
b/polkit-efl-authentication-agent-1
index 6cec634..8fc423c 100755
--- a/polkit-efl-authentication-agent-1
+++ b/polkit-efl-authentication-agent-1
@@ -459,8 +459,8 @@ class AuthenticationDialog(Window):
                 "polkit.text.help",
                 _("Select Authentication ID")
                 )
-            ok_bt.disabled = False
             name_sel.disabled = False
+            name_sel.text = _("Select Authentication ID")
             try:
                 ic = self.layout.content_get("polkit.swallow.info")
                 ic.standard = icon_name
@@ -495,16 +495,18 @@ class AuthenticationDialog(Window):
             )
 
         # === AUTH ID SELECTOR ===
-        name_sel = Hoversel(
-            self, size_hint_align=FILL_HORIZ, text=names[0][0]
+        name_sel = TrackingHoversel(
+            self, size_hint_align=FILL_HORIZ,
+            text=_("Select Authentication ID")
             )
         for i in names:
-            HoverselItem(i[0]).add_to(name_sel)
+            TrackingHoverselItem(i[0]).add_to(name_sel)
 
         def selected_cb(obj, it):
             log.debug("Name %s selected" % (it.text))
             pw_entry.text = ""
             name_sel.text = it.text
+            ok_cb(None)
 
         name_sel.callback_selected_add(selected_cb)
 
@@ -517,11 +519,12 @@ class AuthenticationDialog(Window):
             )
 
         def ok_cb(obj):
-            log.debug("Auth ID selected, authenticating...")
-            for w in (ok_bt, name_sel):
-                w.disabled = True
-            self.authenticating = True
             name = name_sel.text
+            if name == _("Select Authentication ID"):
+                return
+            name_sel.disabled = True
+            self.authenticating = True
+            log.debug("Auth ID selected, authenticating...")
             agent.authenticate(name, cookie, return_cb, error_cb)
 
         def cancel_cb(obj):
@@ -530,8 +533,6 @@ class AuthenticationDialog(Window):
             self.layout.signal_emit("polkit,hide", "polkit")
             agent.cancel_authentication(cookie, error_cb)
 
-        ok_bt = self.ok_bt = Button(bt_box, text=_("OK"), focus_allow=False)
-        ok_bt.callback_clicked_add(ok_cb)
         ca_bt = Button(bt_box, text=_("Cancel"), focus_allow=False)
         ca_bt.callback_clicked_add(cancel_cb)
         sep = Separator(bt_box, horizontal=False)
@@ -543,7 +544,7 @@ class AuthenticationDialog(Window):
         act_bt = Button(bt_box, text=_("Details"), focus_allow=False)
         act_bt.callback_clicked_add(det_cb)
 
-        for w in ok_bt, ca_bt, sep, act_bt:
+        for w in ca_bt, sep, act_bt:
             bt_box.pack_end(w)
             w.show()
 
@@ -553,12 +554,17 @@ class AuthenticationDialog(Window):
         def key_handler(obj, src, ev_type, event, *args, **kwargs):
             if not ev_type == EVAS_CALLBACK_KEY_UP:
                 return
-            if event.key == "Return" and not self.authenticating:
+            elif event.key == "Up":
+                name_sel.display_prev()
+            elif event.key == "Down":
+                name_sel.display_next()
+            elif event.key == "Return" and not self.authenticating:
                 log.debug("Handling key Return")
                 ok_cb(obj)
             elif event.key == "Escape":
                 log.debug("Handling key Escape")
                 cancel_cb(obj)
+
         layout.elm_event_callback_add(key_handler)
 
         # === ICON ===
@@ -823,6 +829,58 @@ class Details(InnerWindow):
         self.activate()
 
 
+class TrackingHoverselItem(HoverselItem):
+    def delete(self):
+        sel_i = self.widget.displayed_item
+        if sel_i == self:
+            self.widget.displayed_item = None
+        HoverselItem.delete(self)
+
+
+class TrackingHoversel(Hoversel):
+
+    displayed_item = None
+
+    def __init__(self, *args, **kwargs):
+        Hoversel.__init__(self, *args, **kwargs)
+
+        def selected_cb(obj, item):
+            self.displayed_item = item
+
+        self.callback_selected_add(selected_cb)
+
+    def clear(self):
+        self.displayed_item = None
+        Hoversel.clear(self)
+
+    def display_item(self, item):
+        self.display_item = item
+        self.text = item.text
+
+    def display_next(self):
+        if not self.items:
+            return
+        if self.displayed_item is None:
+            self.displayed_item = self.items[0]
+        elif len(self.items) < 2:
+            return
+        else:
+            i = self.items.index(self.displayed_item)
+            self.displayed_item = self.items[i+1]
+        self.text = self.displayed_item.text
+
+    def display_prev(self):
+        if not self.items:
+            return
+        if self.displayed_item is None:
+            self.displayed_item = self.items[len(self.items-1)]
+        elif len(self.items) < 2:
+            return
+        else:
+            i = self.items.index(self.displayed_item)
+            self.displayed_item = self.items[i-1]
+        self.text = self.displayed_item.text
+
 dbo = EFLPolkitAuthAgent()
 dbo.register()
 

-- 


Reply via email to