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() --
