File Menu_Items.py of Package windowchanger
#!/usr/bin/env python
# This application is released under the GNU General Public License
# v3 (or, at your option, any later version). You can find the full
# text of the license under http://www.gnu.org/licenses/gpl.txt.
# By using, editing and/or distributing this software you agree to
# the terms and conditions of this license.
# Thank you for using free software!
#
#(c) QB89Dragon 2007/8 <hughescih@hotmail.com>
#(c) Whise 2008,2009 <helderfraga@gmail.com>
#
# XDG Menu Functions
# Part of the GnoMenu
import gtk
import backend
import os
import urllib
import utils
import gobject
from Popup_Menu import add_menuitem, add_image_menuitem
import gc
import Globals
import MenuParser
import IconFactory
import Launcher
#import time
try:
import bookmarks
except:print 'error importing webbookmarks'
try:
import gio
isgio = True
except:
print 'gio not found'
isgio = False
try:
INSTALL_PREFIX = open("/etc/gnomenu/prefix").read()[:-1]
except:
INSTALL_PREFIX = '/usr'
try:
import zg
except: zg = None
if Globals.FirstUse:
os.system("/bin/sh -c %s'/lib/%s/GnoMenu-Settings.py --welcome' &" % (INSTALL_PREFIX, Globals.appdirname))
import gettext
gettext.textdomain('gnomenu')
gettext.install('gnomenu', INSTALL_PREFIX + '/share/locale')
gettext.bindtextdomain('gnomenu', INSTALL_PREFIX + '/share/locale')
def _(s):
return gettext.gettext(s)
def tryit(func):
def dec(*args, **kwds):
try:
return func(*args, **kwds)
except:
pass
pass
return dec
class XDGMenu(gobject.GObject):
__gsignals__ = {
'changed': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
}
def __init__(self):
gobject.GObject.__init__ (self)
self.names_list = []
self.menu = ''
if not os.path.isdir(Globals.AutoStartDirectory):
os.system('mkdir %s' % Globals.AutoStartDirectory)
self.notifier = utils.Notifier()
self.menuparser = MenuParser.MenuParser()
self.menuparser.connect('menu-changed',self.MenuChanged)
self.AppsFile = None
self.SetFile = None
self.menucache = {}
self.nonMenuitems = '<Bookmarks>','<AuxiliaryFunctions>','<RecentItems>','<RecentApps>','<WebBookmarks>','<Favorites>','<Shutdown>'
if Globals.OnlyShowFavs:
self.BaseMenu = '<Favorites>'
self.menuparser.CacheApplications = None
self.menuparser.CacheSettings = None
elif Globals.OnlyShowRecentApps:
self.BaseMenu = '<RecentApps>'
self.menuparser.CacheApplications = None
self.menuparser.CacheSettings = None
else:
self.menuparser.ParseMenus()
self.BaseMenu = self.menuparser.CacheApplications
if isgio:
self.monitor=gio.volume_monitor_get()
self.monitor.connect("drive-changed",self.on_drive_changed)
self.allgio = gio.app_info_get_all()
else:self.allgio = None
self.Launcher = Launcher.Launcher()
self.recent_manager = gtk.recent_manager_get_default()
self.recent_manager.connect("changed", self.onRecentChanged)
self.recents_changed = True
self.recents = None
self.ItemComments = {}
self.Menu = self.BaseMenu
self.PrevMenu = []
self.searchresults = 0
##### Load IconFactory##################################
self.IconFactory = IconFactory.IconFactory()
##### Load webbookmarks##################################
try:
self.webbookmarker = bookmarks.BookmarksMenu().getBookmarks()
except:
self.webbookmarker = None
##### Construct the menu###########################
self.menuitems = 'settings','places','auxiliary','recent','recentapps','webbookmarks','favorites','shutdown','all'
for item in self.menuitems:
#print 'Loading item to memory: ',item
self.Restart(item)
gc.collect()
def MenuChanged(self,event):
"""menu changes"""
#self.current_file.disconnect_by_func(self.monitor_callback)
#del self.menucache[self.menuparser.CacheApplications]
#del self.menucache[self.menuparser.CacheSettings]
for item in self.menucache.copy():
if item not in self.nonMenuitems:
del self.menucache[item]
if isinstance(self.Menu, self.menuparser.MenuInstance) and self.menuparser.has_gmenu:
if self.BaseMenu.get_name() ==self.menuparser.CacheApplications.get_name():self.BaseMenu = self.menuparser.CacheApplications
elif self.BaseMenu.get_name() ==self.menuparser.CacheSettings.get_name():self.BaseMenu = self.menuparser.CacheSettings
else:
if self.BaseMenu ==self.menuparser.CacheApplications:self.BaseMenu = self.menuparser.CacheApplications
elif self.BaseMenu ==self.menuparser.CacheSettings:self.BaseMenu = self.menuparser.CacheSettings
self.emit('changed')
gc.collect()
@tryit
def Restart(self,menu='all'):
"""Issues a restart on the menu"""
#print "Menu_Items.XDGMenu.Restart('%s')" % menu
self.names_list = []
self.menu = menu
if Globals.OnlyShowFavs:
if menu == 'all' or menu == 'settings':
menu = 'favorites'
if Globals.OnlyShowRecentApps:
if menu == 'all' or menu == 'settings':
menu = 'recentapps'
if menu == 'all':
self.Menu = self.BaseMenu = self.menuparser.CacheApplications
self.ConstructMenu()
return True
elif menu == 'settings':
self.Menu = self.BaseMenu = self.menuparser.CacheSettings
self.ConstructMenu()
return True
elif menu == 'places':
self.Menu = self.BaseMenu = "<Bookmarks>"
self.ConstructMenu()
return True
elif menu == 'auxiliary':
self.Menu = self.BaseMenu = "<AuxiliaryFunctions>"
self.ConstructMenu()
return True
elif menu == 'recent':
self.Menu = self.BaseMenu = "<RecentItems>"
self.ConstructMenu()
elif menu == 'recentapps':
self.Menu = self.BaseMenu = "<RecentApps>"
self.ConstructMenu()
elif menu == 'webbookmarks':
self.Menu = self.BaseMenu = "<WebBookmarks>"
self.ConstructMenu()
return True
elif menu == 'favorites':
self.Menu = self.BaseMenu = "<Favorites>"
self.ConstructMenu()
return True
elif menu == 'shutdown':
self.Menu = self.BaseMenu = "<Shutdown>"
self.ConstructMenu()
return True
elif menu == 'previous':
self.Menu = self.BaseMenu
self.ConstructMenu()
return True
return False
@tryit
def addtomenu(self,names,icons,types,paths,execs):
"""adds item to menu"""
## skip the duplicates item
is_top = False
try:
if self.Menu.get_parent() == None: is_top = True
pass
except:
pass
#print "Menu_Items.XDGMenu.addtomenu('%s', '%s', '%s', '%s', '%s')" % (names, icons, types, paths, execs)
if names \
and names in self.names_list \
and (icons != "stock_left"):
print 'Fix menuitem %s' % names
return
else:
self.names_list.append(names)
pass
if icons is None: icons = gtk.STOCK_MISSING_IMAGE
self.L_Names.append(names)
self.L_Icons.append(self.IconFactory.geticonfile(icons))
self.L_Icons_menu.append(icons)
self.L_Types.append(types)
self.L_Paths.append(paths)
self.L_Execs.append(execs)
def recentSortCriterium(self, item1, item2):
"""Sort files"""
return cmp(item2.get_modified(), item1.get_modified())
@tryit
def onRecentChanged(self, manager):
"""Recent files have changed"""
print 'recents changed'
self.recents_changed = True
try:
del self.menucache["<RecentItems>"]
del self.menucache["<RecentApps>"]
except:pass
if self.BaseMenu == "<RecentItems>":
self.emit('changed')
@tryit
def on_drive_changed (self,widget,drive):
"""Bookmarks have changed"""
print 'drives changed'
del self.menucache["<Bookmarks>"]
if self.BaseMenu == "<Bookmarks>":
self.emit('changed')
@tryit
def ConstructMenu(self):
"""Construct the menu"""
#aaa = time.clock()
self.menustring = str(self.Menu)
if self.menustring in self.menucache:
self.L_Names, self.L_Icons, self.L_Icons_menu, self.L_Types,self.L_Paths, self.L_Execs= self.menucache[self.menustring]
return
self.L_Names = []
self.L_Icons = []
self.L_Types = []
self.L_Paths = []
self.L_Execs = []
self.L_Icons_menu = []
self.searchresults = 0
#==============================================================
#XDG PROGRAMS MENU
#==============================================================
if isinstance(self.Menu, self.menuparser.MenuInstance):
if Globals.Settings['Shownetandemail'] == 1:
if self.BaseMenu ==self.menuparser.CacheApplications:
self.AddInternetButtons()
#if self.BaseMenu ==self.menuparser.CacheSettings or self.BaseMenu ==self.menuparser.CacheApplications:
for entry in self.menuparser.GetMenuEntries(self.Menu):
if isinstance(entry, self.menuparser.MenuInstance):
name,icon, path ,comment = self.menuparser.GetDirProps(entry) #Folder
self.addtomenu(name,icon,0,path,"")
if Globals.Settings['Show_Tips']:
self.ItemComments[name] = comment
elif isinstance(entry, self.menuparser.EntryInstance): #Application
name,icon, execute ,comment = self.menuparser.GetEntryProps(entry)
self.addtomenu(name,icon,1,"",execute)
if Globals.Settings['Show_Tips']:
self.ItemComments[name] = comment
if self.Menu ==self.menuparser.CacheApplications and int(Globals.Settings['Disable_PS']) == 0:
self.AddPlacesButton()
#==============================================================
#AUXILIARY FUNCTIONS MENU
#==============================================================
elif self.Menu == "<AuxiliaryFunctions>":
self.addtomenu(_("User Accounts"),"user-info",5,"","gnome-control-center user-accounts")
self.addtomenu(_("Appearance"),"gnome-settings-theme",5,"","gnome-control-center background")
self.addtomenu(_("Menu editor"),"alacarte",6,"","alacarte")
self.addtomenu(_("System Monitor"),"utilities-system-monitor",5,"","gnome-system-monitor")
self.addtomenu(_("GnoMenu settings utility"),"%slogo.png" % Globals.GraphicsDirectory,7,"","%sGnoMenu-Settings.py" % Globals.ProgramDirectory)
#==============================================================
#FAVORITES ITEMS MENU
#==============================================================
elif self.Menu == "<Favorites>":
client = []
x = backend.load_setting("favorites")
if x != None:
client = x
try:
client.sort(key=str.upper)
except:pass
for elem in client:
try:
name, exe,ico,typ = elem.split('::')
self.addtomenu(name,ico,int(typ),"",exe)
except:backend.save_setting("favorites",[])
if client == []:
self.addtomenu(_('No favorites\nUse the mouse right button\nto add or remove favorites'),gtk.STOCK_MISSING_IMAGE,9,"","")
#==============================================================
#WEB BOOKMARKS MENU
#==============================================================
elif self.Menu == "<WebBookmarks>":
try:
if self.webbookmarker is None:
self.webbookmarker = bookmarks.BookmarksMenu().getBookmarks()
for item in map(list,self.webbookmarker):
self.addtomenu(item[0],item[3],3,item[1],item[1])
except:print 'Error reading web bookmarks'
#==============================================================
#SHUTDOWN MENU
#==============================================================
elif self.Menu == "<Shutdown>":
self.addtomenu(_('Shutdown'),'gtk-quit',1,"",Globals.Settings['Shutdown'])
self.addtomenu(_('Reboot'),'gnome-session-reboot',1,"",Globals.Settings['Restart'])
self.addtomenu(_('Suspend'),'gnome-session-suspend',1,"",Globals.Settings['Suspend'])
self.addtomenu(_('Hibernate'),'gnome-session-hibernate',1,"",Globals.Settings['Hibernate'])
self.addtomenu(_('Logout'),'gnome-session-logout',1,"",Globals.Settings['LogoutNow'])
self.addtomenu(_('Lock Screen'),'system-lock-screen',1,"",Globals.Settings['Lock'])
#==============================================================
#RECENT ITEMS MENU
#==============================================================
elif self.Menu == "<RecentItems>":
#self.recent_manager.set_limit(Globals.RI_numberofitems)
if self.recents_changed or self.recents is None:
self.recent = self.recent_manager.get_items()
self.recents_changed = False
self.recent.sort(self.recentSortCriterium)
x = 0
for item in self.recent:
name = item.get_short_name()
self.L_Names.append(name)
self.L_Icons.append(self.IconFactory.getthumb(item))
self.L_Icons_menu.append(name)
self.L_Types.append(3)
self.L_Paths.append("")
self.L_Execs.append(item.get_uri())
#self.addtomenu(item.get_short_name(),self.IconFactory.getthumb(item),3,"",item.get_uri())
x = x +1
if x == Globals.RI_numberofitems:break
self.addtomenu(_('Clear recent documents'),gtk.STOCK_CLEAR,10,"","")
self.sorted_list = []
#==============================================================
#RECENT APPS MENU
#==============================================================
elif self.Menu == "<RecentApps>":
#self.recent_manager.set_limit(Globals.RI_numberofitems)
if self.recents_changed or self.recents is None:
self.recent = self.recent_manager.get_items()
self.recents_changed = False
self.recent.sort(self.recentSortCriterium)
x = 0
for item in self.recent:
if isgio:
mime = item.get_mime_type()
app = gio.app_info_get_default_for_type(mime, 0)
if app:
if app.get_name() not in self.L_Names:
self.addtomenu(app.get_name(),self.IconFactory.getgicon(app.get_icon()),1,"",app.get_executable())
x = x +1
if x == Globals.RI_numberofitems:break
else:
app = item.last_application()
appinfo = item.get_application_info(app)
#print appinfo[0].split(' ')[0]
if app not in self.L_Names:
self.addtomenu(app,appinfo[0].split(' ')[0],1,"",appinfo[0].split(' ')[0])
x = x +1
if x == Globals.RI_numberofitems:break
self.sorted_list = []
#==============================================================
#RECENT BOOKMARKS / PLACES MENU
#==============================================================
elif self.Menu == "<Bookmarks>":
self.addtomenu(_("File System"),"drive-harddisk",3,"/","/")
if isgio:
self.drives = self.monitor.get_connected_drives()
for drive in self.drives:
if drive.has_media():
self.mounts = drive.get_volumes()
for mount in self.mounts:
ico = mount.get_icon()
a = self.IconFactory.getgicon(ico)
self.L_Names.append(mount.get_name())
self.L_Icons.append(self.IconFactory.geticonfile(a))
self.L_Icons_menu.append(a)
self.L_Types.append(3)
self.L_Paths.append("")
try:
self.L_Execs.append(str(mount.get_mount().get_root().get_uri()).replace("file://",""))
except:
self.L_Execs.append("")
self.addtomenu(_('Home Folder'),"user-home",3,"",Globals.HomeDirectory)
self.addtomenu(_('Computer'),"computer",3,"",'computer:///')
self.addtomenu(_('Network'),"network",3,"",'network:///')
self.addtomenu(_('Trash'),'user-trash',3,"",'trash:///')
if os.path.isfile("%s/.gtk-bookmarks" % Globals.HomeDirectory):
f = open("%s/.gtk-bookmarks" % Globals.HomeDirectory, "r")
data = f.readlines(600)
f.close()
f = None
for i in data:
self.bm = str(i).replace("\n","")
if self.bm.find(' ') != -1:
self.folder = urllib.url2pathname(self.bm[:self.bm.find(' ')])
self.name = urllib.url2pathname(self.bm[self.bm.find(' ')+1:])
else:
self.folder = self.bm
self.name = urllib.url2pathname(str(self.bm).split("/").pop())
try:
if isgio:
Gfile = gio.File(self.folder)
tuble = [Gfile, Gfile.query_info("standard::*"), []]
ico = tuble[1].get_icon()
self.addtomenu(self.name,self.IconFactory.getgicon(ico),3,"",self.folder)
else:
self.addtomenu(self.name,"folder",3,"",self.folder)
except:pass
else:
#==============================================================
#XDG PROGRAMS MENU (SEARCH)
#==============================================================
#self.searchresults = 0
self.MenuString = ""
if self.Menu:
for menuItem in self.Menu:
self.MenuString += menuItem
for i in [self.menuparser.CacheApplications,self.menuparser.CacheSettings]:
for entry in self.menuparser.GetMenuEntries(i):
if isinstance(entry, self.menuparser.MenuInstance): #Folder
name,icon, path ,comment = self.menuparser.GetDirProps(entry) #Folder
if self.menuparser.has_gmenu :
self.SearchMenu(path)
else:
self.SearchMenu(i.getMenu(entry.getPath(True)))
elif isinstance(entry, self.menuparser.EntryInstance): #Application
name,icon, execute ,comment = self.menuparser.GetEntryProps(entry)
if name.upper().count(self.MenuString) != 0 or execute.upper().count(self.MenuString) != 0:
self.addtomenu(name,icon,1,"",execute)
self.searchresults=self.searchresults+1
if self.searchresults==0:
self.addtomenu("<separator>","",8,"","")
self.addtomenu(_("No items matched your search criteria"),"",9,"","")
else:
self.addtomenu
self.addtomenu("<separator>","",8,"","")
self.addtomenu(_("Found %s results to your search") % str(self.searchresults),"",9,"","")
#Add back button so long as it isn't the base XDG menu
if isinstance(self.Menu, self.menuparser.MenuInstance):
if self.Menu !=self.menuparser.CacheApplications:
self.AddBackButton()
else:
if Globals.MenuTabCount == 0:
if Globals.OnlyShowFavs == False and Globals.OnlyShowRecentApps == False:
self.AddBackButton()
else:
if self.Menu != "<Favorites>" and self.Menu != "<RecentApps>":
self.AddBackButton()
#gc.collect()
#print time.clock() -aaa
self.menucache[self.menustring] = self.L_Names, self.L_Icons, self.L_Icons_menu, self.L_Types, self.L_Paths, self.L_Execs
def SearchMenu(self, folder):
"""search the menu"""
self.MenuString = ""
if self.Menu:
for menuItem in self.Menu:
self.MenuString += menuItem
for entry in self.menuparser.GetMenuEntries(folder):
if isinstance(entry, self.menuparser.MenuInstance): #Folder
name,icon, path ,comment = self.menuparser.GetDirProps(entry) #Folder
#if self.BaseMenu == self.menuparser.CacheApplications or self.BaseMenu == self.menuparser.CacheSettings:
if self.menuparser.has_gmenu :
self.SearchMenu(path)
else:
self.SearchMenu(self.BaseMenu.getMenu(entry.getPath(True)))
elif isinstance(entry, self.menuparser.EntryInstance): #Application
name,icon, execute ,comment = self.menuparser.GetEntryProps(entry)
if name.upper().count(self.MenuString) != 0 or execute.upper().count(self.MenuString) != 0:
# if name.upper().find(self.MenuString) != -1:
self.addtomenu(name,icon,1,"",execute)
self.searchresults=self.searchresults+1
def AddInternetButtons(self):
"""Add Internet and Email buttons"""
# the " " bellow is necessary to avoid iqual names of this item and the internet section in some translations
self.addtomenu(_("Browse Internet") + " ","web-browser",1,"",backend.get_default_internet_browser())
self.addtomenu(_("E-mail")+ " ","emblem-mail",1,"",backend.get_default_mail_client())
#self.addtomenu("<separator>","",8,"","")
def AddBackButton(self):
"""Add Back buttons"""
self.addtomenu(_("Back"),"stock_left",2,"","")
def AddPlacesButton(self):
"""Add Places buttons"""
self.addtomenu(_("Places"),"drive-harddisk",2,"","")
def ButtonClick(self,index,event=0):
"""Callback when buttons are clicked"""
# 0 Subfolder
# 1 Application
# 2 places, settings, back.
# 3,4 Recents
self.etype = self.L_Types[index]
if event == 0:event_button = 1
else:
if event.type == gtk.gdk.KEY_PRESS:event_button = 1
elif event.type == gtk.gdk.BUTTON_PRESS:event_button = event.button
elif event.type == gtk.gdk.BUTTON_RELEASE:event_button = event.button
if event_button == 1:
if self.etype == 0: #Subfolder
self.PrevMenu.append(self.Menu)
if self.menuparser.has_gmenu :
self.Menu = self.L_Paths[index]
else:
self.Menu = self.BaseMenu.getMenu(self.L_Paths[index])
self.ConstructMenu()
elif self.etype == 1 or self.etype == 3 or self.etype == 4: #Application
self.Launcher.Launch(self.L_Execs[index],self.etype)
self.Restart('previous')
return 1
elif self.etype == 2: #Menu special buttons places, settings, back.
if self.L_Names[index] == _('Back'):
try:
self.Menu = self.PrevMenu.pop()
except:
self.Menu = self.BaseMenu = self.menuparser.CacheApplications
if self.Menu == self.menuparser.CacheApplications:
self.BaseMenu = self.Menu
self.ConstructMenu()
elif self.L_Names[index] == _("Places"):
self.PrevMenu.append(self.Menu)
self.Restart('places')
elif self.etype == 5 or self.etype == 6: #Items in the menu have changed
self.Launcher.Launch(self.L_Execs[index],self.etype)
elif self.etype == 7: #Properties of the menu have changed
self.Launcher.Launch(self.L_Execs[index],self.etype)
Globals.ReloadSettings()
elif self.etype == 10: #Clear Recent
self.recent_manager.purge_items()
self.Restart('previous')
elif event_button == 3:
self.m = gtk.Menu()
name = self.L_Names[index]
favlist = backend.load_setting("favorites")
try:
thismenu = add_image_menuitem(self.m,self.L_Icons_menu[index], name, self.dummy,'1')
except:return
if zg and self.allgio is not None:
self.recent_files = None
self.most_used_files = None
for z in self.allgio:
if z.get_name() == name:
desk = z.get_id()
self.recent_files = zg.get_recent_for_app(desk,Globals.RI_numberofitems)
self.most_used_files = zg.get_most_used_for_app(desk,Globals.RI_numberofitems)
break
if self.recent_files or self.most_used_files:
self.menuitem = add_menuitem(self.m, "-")
for files, menu_name in ((self.recent_files, _('Recently Used')), (self.most_used_files, _('Most Used'))):
if files:
self.submenu = gtk.Menu()
menu_item = gtk.MenuItem(menu_name)
menu_item.set_submenu(self.submenu)
self.m.append(menu_item)
menu_item.show()
for ev in files:
for subject in ev.get_subjects():
label = subject.text or subject.uri
submenu_item = gtk.MenuItem(label, use_underline=False)
self.submenu.append(submenu_item)
# "activate" doesn't seem to work on sub menus
# so "button-press-event" is used instead.
submenu_item.connect("button-press-event", self.launch_item, subject.uri)
submenu_item.show()
if self.etype != 0 and name != _('Back'):
if self.etype != 3:
self.menuitem = add_menuitem(self.m, "-")
self.menuitem = add_image_menuitem(self.m, gtk.STOCK_DIALOG_AUTHENTICATION, _("Open as Administrator"), self.runasadmin,name, self.L_Execs[index],self.L_Icons_menu[index],self.L_Types[index])
else:
def searchfolder(folder,me):
dirs = os.listdir(folder)
dirs.sort(key=str.upper)
for item in dirs:
if not item.startswith('.'):
if os.path.isdir(os.path.abspath(folder) + '/'+item):
add_image_menuitem(me,gtk.STOCK_DIRECTORY, item,self.launch_item, '"'+os.path.abspath(folder.replace('file://','')) + '/'+item +'"')
else:
submenu_item = gtk.MenuItem(item, use_underline=False)
me.append(submenu_item)
# "activate" doesn't seem to work on sub menus
# so "button-press-event" is used instead.
submenu_item.connect("button-press-event", self.launch_item, '"'+os.path.abspath(folder) + '/'+item +'"')
submenu_item.show()
f = os.path.abspath(urllib.url2pathname(self.L_Execs[index]).replace('file://',''))
if os.path.exists(f):
if os.path.isdir(f):
self.submenu = gtk.Menu()
thismenu.set_submenu(self.submenu)
searchfolder(f,self.submenu)
elif os.path.isfile(f):
if isgio:
add_menuitem(self.m, "-")
self.openwith = add_image_menuitem(self.m,gtk.STOCK_OPEN, _("Open with"))
Gfile = gio.File(f)
tuble = [Gfile, Gfile.query_info("standard::*"), []]
name = tuble[1].get_name()
#ff = gio.file_parse_name(f)
apps = gio.app_info_get_all_for_type(tuble[1].get_content_type())
self.submenu = gtk.Menu()
self.openwith.set_submenu(self.submenu)
for app in apps:
self.menuitem = add_menuitem(self.submenu, app.get_name(),self.custom_launch, "'" +f+ "'",app.get_executable())
if name == _('Trash'):
self.menuitem = add_menuitem(self.m, "-")
self.menuitem = add_image_menuitem(self.m, gtk.STOCK_CLEAR, _("Empty Trash"), self.emptytrash)
if '%s::%s::%s::%s' % (name,self.L_Execs[index],self.L_Icons_menu[index],str(self.L_Types[index])) not in favlist:
self.menuitem = add_menuitem(self.m, "-")
self.menuitem = add_image_menuitem(self.m, gtk.STOCK_ADD, _("Add to Favorites"), self.addfav,name,self.L_Execs[index], self.L_Icons_menu[index], self.L_Types[index])
else:
self.menuitem = add_menuitem(self.m, "-")
self.menuitem = add_image_menuitem(self.m, gtk.STOCK_REMOVE, _("Remove from Favorites"), self.removefav,name, self.L_Execs[index], self.L_Icons_menu[index], self.L_Types[index])
self.menuitem = add_menuitem(self.m, "-")
self.menuitem = add_image_menuitem(self.m, gtk.STOCK_HOME, _("Create Desktop Shortcut"), self.addshort,name, self.L_Execs[index], self.L_Icons_menu[index], self.L_Types[index])
self.menuitem = add_menuitem(self.m, "-")
if ('%s.desktop' % name) in os.listdir(Globals.AutoStartDirectory):
self.menuitem = add_image_menuitem(self.m, gtk.STOCK_REMOVE, _("Remove from System Startup"), self.remove_autostarter,name, self.L_Execs[index], self.L_Icons_menu[index], self.L_Types[index])
else:
self.menuitem = add_image_menuitem(self.m, gtk.STOCK_ADD, _("Add to System Startup"), self.create_autostarter,name, self.L_Execs[index], self.L_Icons_menu[index], self.L_Types[index])
self.m.show_all()
self.m.popup(None, None, None, event.button, event.time)
self.submenu = None
self.menuitem = None
gc.collect()
def emptytrash(self,widget,event):
if os.path.exists("%s/.local/share/Trash" % Globals.HomeDirectory):
os.system("rm -rf %s/.local/share/Trash/info/* &" % Globals.HomeDirectory)
os.system("rm -rf %s/.local/share/Trash/files/* &" % Globals.HomeDirectory)
elif os.path.exists("%s/.Trash" % Globals.HomeDirectory):
os.system("rm -rf %s/.Trash/* &" % Globals.HomeDirectory)
def custom_launch(self,widget,event, uri,app):
os.system('%s %s &' % (app,uri))
def launch_item(self, button, event, uri):
os.system('xdg-open %s &' %uri)
def run(self,widget,event,name, execs,ico,typ):
pass
def dummy(self,widget,event,data):
pass
def runasadmin(self,widget,event,name, execs,ico,typ):
os.system('%s "%s" &' % (Globals.Settings['AdminRun'],execs))
def addfav(self,widget,event,name, execs,ico,typ):
"""Add to Favorites"""
typ = str(typ)
favlist = backend.load_setting("favorites")
if '%s::%s::%s::%s' % (name, execs, ico, typ) not in favlist:
favlist.append('%s::%s::%s::%s' % (name, execs, ico, typ))
backend.save_setting("favorites",favlist)
del self.menucache["<Favorites>"]
self.notifier.notify('%s %s' % (name, _('added to favorites list')),Globals.name,Globals.Applogo,5000)
def removefav(self,widget,event,name, execs,ico,typ):
"""Remove from Favorites"""
typ = str(typ)
favlist = backend.load_setting("favorites")
if '%s::%s::%s::%s' % (name, execs, ico, typ) in favlist:
favlist.remove('%s::%s::%s::%s' % (name, execs, ico, typ))
backend.save_setting("favorites",favlist)
del self.menucache["<Favorites>"]
self.emit('changed')
self.notifier.notify('%s %s' % (name, _('removed from favorites list')),Globals.name,Globals.Applogo,5000)
def create_autostarter (self,widget,event,name, execs,ico,typ):
"""Create Autostarter"""
if not os.path.isdir(Globals.AutoStartDirectory):
os.system('mkdir %s' % Globals.AutoStartDirectory)
if ('%s.desktop' % name) not in os.listdir(Globals.AutoStartDirectory):
self.addshort(widget,event,name,execs,ico,typ,Globals.AutoStartDirectory)
self.notifier.notify('%s %s' % (name, _('added to system startup')),Globals.name,Globals.Applogo,5000)
def remove_autostarter (self,widget,event,name, execs,ico,typ):
"""Remove Autostarter"""
if not os.path.isdir(Globals.AutoStartDirectory):
os.system('mkdir %s' % Globals.AutoStartDirectory)
if ('%s.desktop' % name) in os.listdir(Globals.AutoStartDirectory):
os.system('rm "%s%s.desktop"' % (Globals.AutoStartDirectory,name))
self.notifier.notify('%s %s' % (name, _('removed from system startup')),Globals.name,Globals.Applogo,5000)
def addshort(self,widget,event,name, execs,ico,typ,desk='desktop'):
"""Add Desktop shortcut"""
if desk =='desktop':desk = utils.xdg_dir("XDG_DESKTOP_DIR")
starter = '%s/%s.desktop' % (desk, name)
code = ['#!/usr/bin/env xdg-open','[Desktop Entry]']
code.append('Name=%s' % name)
code.append('StartupNotify=true')
code.append('Terminal=false')
code.append('Version=1.0')
code.append('Icon=%s' % ico)
code.append('Type=Application')
if int(typ) == 1:
code.append('Exec= %s' % execs)
else:
code.append('Exec= xdg-open %s' % execs)
code.append('X-GNOME-Autostart-enabled=true')
#print code
f = open(starter, 'w')
if f:
for l in code:
f.write(l + '\n')
f.close()
def CallSpecialMenu(self,command,data=None):
"""Call was placed on the menu"""
command = int(command)
a = str(self.Menu)
if command==0: #Back button
if self.PrevMenu:
self.Menu = self.PrevMenu.pop()
self.ConstructMenu()
elif command==1: #Go to base menu and reload it
self.PrevMenu = []
self.Restart()
elif command==2: #Go to unmount drives menu
if a != '<RecentApps>':
self.PrevMenu.append(self.Menu)
self.Restart('recentapps')
elif command==3: #Auxiliary functions menu
if a != '<AuxiliaryFunctions>':
self.PrevMenu.append(self.Menu)
self.Restart('auxiliary')
elif command==4: #Recent Items Menu
if a != '<RecentItems>':
self.PrevMenu.append(self.Menu)
self.Restart('recent')
elif command==5: #Search
if data!="":
self.PrevMenu = [self.BaseMenu]
self.Menu=data.upper()
self.ConstructMenu()
else:
self.PrevMenu = []
self.Menu=self.BaseMenu
self.ConstructMenu()
elif command==6: #Launch first item in search list
if self.searchresults!=0:
if Globals.Settings['Shownetandemail'] == 1:
self.ButtonClick(3)
else:
self.ButtonClick(0)
elif command==7: #Recent Items Menu
if a != '<Favorites>':
self.PrevMenu.append(self.Menu)
self.Restart('favorites')
elif command==8: #Recent Items Menu
if a != '<Bookmarks>':
self.PrevMenu.append(self.Menu)
self.Restart('places')
elif command==9: #Recent Items Menu
if a != '<Shutdown>':
self.PrevMenu.append(self.Menu)
self.Restart('shutdown')
elif command==10: #Recent Items Menu
if a != '<WebBookmarks>':
self.PrevMenu.append(self.Menu)
self.Restart('webbookmarks')
def Icon_change(self):
self.IconFactory.Icon_change()
def destroy(self):
pass