def run(self): gtk.rc_reparse_all() screen = gtk.gdk.screen_get_default() self.login.realize() self.background = LockScreenWindow() self.background.show() self.background.set_child_window(self.login)
class Login: login_suport = True timeout_connect = 15 run_interable = False selected_auth = LOGIN_AUTH_LOGIN current_widget = LOGIN_USER max_nick_size = 30 iterable_timeout_id = 0 on_ready = 60 on_ready_run_interable = False def __init__(self, main): xml = get_gtk_builder('login') self.login = xml.get_object('login') if osname == "nt": # Change type of login window c = self.login.get_children() if c: w = c[0] self.login.remove(w) self.login = gtk.Window(gtk.WINDOW_TOPLEVEL) self.login.set_decorated(False) self.login.set_position(gtk.WIN_POS_CENTER_ALWAYS) self.login.add(w) self.entry = xml.get_object('entry') self.image = xml.get_object('image') self.label = xml.get_object('label') self.title = xml.get_object('title') self.okbnt = xml.get_object('okbnt') self.againbnt = xml.get_object('againbnt') self.warn_msg = xml.get_object('warn_msg') self.imagealign = xml.get_object('imagealign') self.wm_title = xml.get_object('wm_title') self.register_bnt = xml.get_object('register') self.xml = xml self.err_box = self.xml.get_object("err_box") self.password = None self.username = None self.running = True self.main = main #Title self.xml.get_object("title_eventbox").set_state(gtk.STATE_SELECTED) #Clock self.clock_label = gtk.Label() self.clock_item = gtk.MenuItem() self.clock_item.add(self.clock_label) self.clock_item.set_right_justified(True) self.clock_item.show_all() self.xml.get_object("menubar").append(self.clock_item) self.clock_item.unset_flags(gtk.SENSITIVE) self.clock_update() self.xml.connect_signals(self) def clock_update(self): if HOUR_24_FORMAT: hour_str = strftime(_("%a %b %d, %H:%M")) else: hour_str = strftime(_("%a %b %d, %l:%M %p")) self.clock_label.set_text(hour_str) timeout_add(1000, self.clock_update) def on_entry_changed(self, obj): if self.current_widget in (LOGIN_USER, LOGIN_PASSWORD): self.okbnt.set_sensitive(bool(obj.get_text())) def on_entry_insert_text(self, obj, new_str, length, position): position = obj.get_position() if self.current_widget == LOGIN_USER: if len(obj.get_text()) >= self.max_nick_size: obj.stop_emission('insert-text') return if new_str.isalpha() and new_str.isupper(): obj.stop_emission('insert-text') obj.insert_text(new_str.lower(), position) idle_add(obj.set_position, position+1) elif new_str.isdigit() or new_str.islower() or new_str in ('@', '-', '_', '.'): return else: obj.stop_emission('insert-text') def activate(self, obj): if not self.entry.get_text(): return if self.selected_auth == LOGIN_AUTH_LOGIN: if self.current_widget == LOGIN_USER: self.username = self.entry.get_text() self.set_current(LOGIN_PASSWORD) self.err_box.set_text("") elif self.current_widget == LOGIN_PASSWORD: self.password = self.entry.get_text() self.main.on_login(self.username, self.password) self.username = None self.password = None def on_againbnt_clicked(self, obj): if self.selected_auth == LOGIN_AUTH_LOGIN: self.set_current(LOGIN_USER) def set_current(self, auth_widget): self.current_widget = auth_widget if auth_widget == LOGIN_USER: self.selected_auth = LOGIN_AUTH_LOGIN self.label.set_text(_('_E-Mail:')) self.entry.set_visibility(True) self.againbnt.set_sensitive(False) if auth_widget == LOGIN_PASSWORD: self.selected_auth = LOGIN_AUTH_LOGIN self.label.set_text(_('_Password:'******'') self.label.set_use_underline(True) self.entry.grab_focus() def set_welcome_msg(self, title): self.title.set_markup("<big><big><big>%s</big></big></big>" % title) def set_title(self, title): self.wm_title.set_text(title) def unlock(self, obj): self.background.hide() def on_entry_event(self, obj, event): ##HACK ##Redirect key and pointer forbiden events if event.type in BUTTON_EVENTS: event.button = 1 elif event.type in KEY_EVENTS: if event.hardware_keycode == 0x075: event.hardware_keycode = 0xFFE9 def lock(self): self.background.show() def run(self): gtk.rc_reparse_all() screen = gtk.gdk.screen_get_default() self.login.realize() self.background = LockScreenWindow() self.background.show() self.background.set_child_window(self.login) def set_background(self, filepath): if filepath: self.login.realize() self.background.set_background_image(filepath) else: self.background.set_color('black') def set_logo(self, logo): widget = self.xml.get_object("imagealign") if logo: widget.show() #checar o tamanho do logo self.xml.get_object("image").set_from_file(logo) else: widget.hide() def set_lock_all(self, status): self.entry.set_sensitive(not(status)) self.label.set_sensitive(not(status)) self.xml.get_object("hbuttonbox1").set_sensitive(not(status)) if status: self.label.set_text("") else: self.set_current(self.current_widget) def on_ready_iterable(self): if self.on_ready != 0: if self.on_ready_run_interable: self.on_ready -= 1 self.warn_msg.set_text(_('Please wait %0.2d seconds for ' 'a new login, Number of attempts ' 'has been exceeded') % (self.on_ready + 1)) self.iterable_timeout_id = timeout_add( 1000, self.on_ready_iterable) return else: self.warn_msg.set_text("") self.on_ready = 60 else: self.set_lock_all(False) self.on_ready_run_interable = False self.warn_msg.set_text("") self.main.login_attempts = 0 def set_warn_message(self, message): self.warn_msg.set_text(message) def register_clicked_cb(self, obj, *args): notebook = self.xml.get_object('notebook') notebook.set_page(1) webkitscrolled = self.xml.get_object('webkitscrolled') webkitscrolled.set_size_request(640, 480) webview = webkit.WebView() webkitscrolled.add(webview) webview.show() webview.load_uri(self.main.sign_url) def on_webwit_back_clicked(self, obj, *args): notebook = self.xml.get_object('notebook') notebook.set_page(0) webkitscrolled = self.xml.get_object('webkitscrolled') webkitscrolled.set_size_request(-1, -1) webview = webkitscrolled.get_children()[0] webkitscrolled.remove(webview) webview.destroy()