=== modified file 'gtkvncviewer.py' --- gtkvncviewer.py 2008-12-31 08:01:12 +0000 +++ gtkvncviewer.py 2013-03-01 21:52:38 +0000 @@ -28,6 +28,7 @@ launchpad = False import os +import subprocess #internat' import locale @@ -51,10 +52,11 @@ class GtkVncViewer: def __init__(self): - self.parse_options() + self.home_dir = os.path.expanduser("~") + self.parse_options() #build GUI - self.gladefile = "data/gtkvncviewer.glade" - self.wTree = gtk.glade.XML(self.gladefile) + self.gladefile = "data/gtkvncviewer.glade" + self.wTree = gtk.glade.XML(self.gladefile) self.dialog = self.wTree.get_widget("connectDialog") self.about = self.wTree.get_widget("aboutDialog") self.about.set_version(version) @@ -110,7 +112,8 @@ "on_keysButton_clicked" : self.keysMenuPop} self.wTree.signal_autoconnect(dic) self.dialog.show() - + self.dialog.connect('delete-event', gtk.main_quit) + #read stored credentials GCONF_AUTH_KEY = "/apps/gtkvncviewer" keyring = gnomekeyring.get_default_keyring_sync() @@ -119,7 +122,15 @@ gconf.CLIENT_PRELOAD_RECURSIVE) entries = gconfclient.all_entries(GCONF_AUTH_KEY) if len(entries) == 0: + print 'no gnome keyring AUTH entries found for key /apps/gtkvncviewer' + if self.startup_options.server: + # just fill the server name in the dialog + server_textbox = self.wTree.get_widget("serverEntry") + user_textbox = self.wTree.get_widget("usernameEntry") + server_textbox.set_text(self.startup_options.server) + user_textbox.grab_focus() return #found nothing + for i in range(len(entries)): server = entries[i].get_key() server = server.replace (GCONF_AUTH_KEY+"/", "") @@ -153,7 +164,7 @@ user_textbox = self.wTree.get_widget("usernameEntry") server_textbox.set_text(self.startup_options.server) user_textbox.grab_focus() - + def fullscreen (self, data): if (self.fullscreenButton.get_active()): self.window.fullscreen() @@ -172,17 +183,11 @@ self.keysMenu.popup(None, None, None, 0, 0, gtk.get_current_event_time()) def screenshot (self, data): - homeDir = os.environ.get('HOME', None) #=> can't work on Windows pix = self.vnc.get_pixbuf() - pix.save(homeDir+"/vnc.png", "png", { "tEXt::Generator App": "gtkvncviewer" }) - dialog = gtk.MessageDialog (self.window, - gtk.MESSAGE_INFO, - gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, - gtk.BUTTONS_OK, - _("Screenshot saved in")+" "+homeDir+"/vnc.png") - dialog.run() - dialog.destroy() - return False + pix.save(self.home_dir + "/vnc.png", "png", + { "tEXt::Generator App": "gtkvncviewer" }) + msg = _("Screenshot saved in ") + " " + self.home_dir + "/vnc.png" + self.simple_message_dialog(msg) def send_cad (self, data): self.vnc.send_keys(["Control_L", "Alt_L", "Delete"]) @@ -203,7 +208,6 @@ select = self.iconview.get_selected_items() if len(select) == 0: print _("nothing to delete") - return i = select[0][0] iter = self.model.get_iter(i) @@ -310,7 +314,7 @@ def quit(): self.vnc.close() print _("Bye.") - if (self.window): + if self.window: self.window.destroy() def close_window(self, widget, data): @@ -333,6 +337,28 @@ #setup timer that will hide toolbar when ended gobject.timeout_add(2000, self.window_toolbar.hide_all) #2 sec. + def get_icon_on_desktop_filename(self): + desktop_path = os.path.join(self.home_dir, "Desktop") + try: + xdgcmd = "/usr/bin/env xdg-user-dir DESKTOP" + xdgp = subprocess.Popen(xdgcmd, shell=True, + stdout=subprocess.PIPE) + stdoutdata, stderrdata = xdgp.communicate() + if xdgp.returncode == 0: + desktop_path = stdoutdata.rstrip() + except: + pass + return os.path.join(desktop_path, self.current_server + ".desktop") + + def simple_message_dialog(self, msg, msgtype=gtk.MESSAGE_INFO): + dialog = gtk.MessageDialog (self.window, + gtk.MESSAGE_INFO, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.BUTTONS_OK, + msg) + dialog.run() + dialog.destroy() + def icon_on_desktop(self, data): server = self.current_server comment = _("Connect to the remote desktop: %s" % (server)) @@ -346,10 +372,17 @@ Terminal=false Type=Application Categories=Network; -""" % ("VNC: "+server, comment, server) - open(os.path.join(os.environ['HOME']+"/Desktop", - server+".desktop"),"w").write(text) - +""" % ("VNC: " + server, comment, server) + icon_filename = self.get_icon_on_desktop_filename() + try: + with open(icon_filename, "w") as icon: + icon.write(text) + self.simple_message_dialog(_("Icon has been saved %s") % \ + (icon_filename)) + except IOError as exc: + errmsg = _("Can not create a desktop icon: %s") % (exc) + print errmsg + self.simple_message_dialog(errmsg, msgtype=gtk.MESSAGE_ERROR) def handle_about_dialog_answer(self, widget, data): if(data==-6): @@ -397,13 +430,7 @@ def vnc_disconnected(src, vnc, window, self): print _("Disconnected") - dialog = gtk.MessageDialog (window, - gtk.MESSAGE_INFO, - gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, - gtk.BUTTONS_OK, - _("You have been disconnected")) - dialog.run() - dialog.destroy() + self.simple_message_dialog(_("You have been disconnected")) self.vnc.destroy() self.vnc=gtkvnc.Display() window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.ARROW))