mintmenu/usr/lib/linuxmint/mintMenu/plugins/recentHelper.py

125 lines
3.7 KiB
Python
Raw Normal View History

2020-03-30 16:11:23 +01:00
#!/usr/bin/python3
import os
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from plugins.easybuttons import ApplicationLauncher
home = os.path.expanduser("~")
recentApps = []
settings = None # set by recent plugin
mintMenuWin = None
recentAppBox = None
numentries = 10
iconSize = 16
def recentAppsAdd(recentAppsButton):
if recentAppsButton:
recentApps.insert(0, recentAppsButton)
counter = 0
for recentApp in recentApps:
if counter != 0 and (recentApp.desktopFile == recentAppsButton.desktopFile or counter >= numentries):
del recentApps[counter]
counter = counter + 1
def recentAppsSave():
new_recent_apps = []
for recentApp in recentApps:
if not hasattr(recentApp, "type") or recentApp.type == "location":
new_recent_apps.append("location:" + recentApp.desktopFile)
else:
new_recent_apps.append(recentApp.type)
settings.set_strv("recent-apps-list", new_recent_apps)
def recentAppBuildLauncher(location):
try:
# For Folders and Network Shares
location = "".join(location.split("%20"))
# ButtonIcon = None
# if location.startswith("file"):
# ButtonIcon = "mate-fs-directory"
# if location.startswith("smb") or location.startswith("ssh") or location.startswith("network"):
# ButtonIcon = "mate-fs-network"
#For Special locations
if location == "x-nautilus-desktop:///computer":
location = "/usr/share/applications/nautilus-computer.desktop"
elif location == "x-nautilus-desktop:///home":
location = "/usr/share/applications/nautilus-home.desktop"
elif location == "x-nautilus-desktop:///network":
location = "/usr/share/applications/network-scheme.desktop"
elif location.startswith("x-nautilus-desktop:///"):
location = "/usr/share/applications/nautilus-computer.desktop"
if location.startswith("file://"):
location = location[7:]
if os.path.exists(location):
appButton = ApplicationLauncher(location, iconSize)
if appButton.appExec:
appButton.show()
appButton.connect("clicked", applicationButtonClicked)
appButton.type = "location"
return appButton
print("RecentApp: %s not found." % location)
except Exception as e:
print("File in recentapp not found: '%s': %s" % (location, e))
return None
def buildRecentApps():
del recentApps[:]
try:
recent_apps = settings.get_strv("recent-apps-list")
for app in recent_apps:
app = app.strip()
if app[0:9] == "location:":
appButton = recentAppBuildLauncher(app[9:])
else:
if (app.endswith(".desktop")):
appButton = recentAppBuildLauncher(app)
else:
appButton = None
if appButton:
recentApps.append(appButton)
except Exception as e:
print(e)
return recentApps
def doRecentApps():
if recentAppBox is not None:
# recentAppBox is initiated by the recent plugin
# only build UI widgets if it's enabled
for i in recentAppBox.get_children():
i.destroy()
# recent apps
buildRecentApps()
for AButton in recentApps:
AButton.set_size_request(200, -1)
AButton.set_relief(Gtk.ReliefStyle.NONE)
recentAppBox.pack_start(AButton, False, True, 0)
return True
def applicationButtonClicked(widget):
mintMenuWin.hide()
if settings == None:
return
recentAppsAdd(widget)
recentAppsSave()
doRecentApps()