Compare commits
49 Commits
fix-pkexec
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
7c0bcbb5b7 | ||
|
f9325f2870 | ||
|
4ab8d2120c | ||
|
b0ab8320da | ||
|
a31731f127 | ||
|
2e0f503d08 | ||
|
3feda3af08 | ||
|
90ad278098 | ||
|
cf76c4837e | ||
|
d8820edd7d | ||
|
185b925b6b | ||
|
7c034738de | ||
|
c3bea70396 | ||
|
9976deca28 | ||
|
e4eab43d06 | ||
|
90688a9c9f | ||
|
63e9034896 | ||
|
d97d912a97 | ||
|
b08050dfbb | ||
|
772a10bb7a | ||
|
9b96af6602 | ||
|
905b9b1a94 | ||
|
94dec8415f | ||
|
57632a3e30 | ||
|
b807a89b68 | ||
|
645c941b0b | ||
|
30ef26afa0 | ||
|
380e23125c | ||
|
8342b85b91 | ||
|
23e3eb60df | ||
|
889771e8ae | ||
|
cbdc961115 | ||
|
9365cc4ce0 | ||
|
e948102e58 | ||
|
696603df34 | ||
|
0606afc825 | ||
|
a819d570eb | ||
|
b4f6cadcf0 | ||
|
8e1d467b78 | ||
|
ad479c18b5 | ||
|
9d56931ce0 | ||
|
1007793670 | ||
|
4d435b42f1 | ||
|
a2194beae8 | ||
|
4bbd037178 | ||
|
7a3532a395 | ||
|
ff93497459 | ||
|
6f69d0e499 | ||
|
d694deb65e |
111
debian/changelog
vendored
111
debian/changelog
vendored
@ -1,3 +1,114 @@
|
|||||||
|
mintmenu (6.1.7) victoria; urgency=medium
|
||||||
|
|
||||||
|
[ Michael Webster ]
|
||||||
|
* Add our own 'all applications' icon for consistency.
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Mon, 26 Jun 2023 11:07:53 +0200
|
||||||
|
|
||||||
|
mintmenu (6.1.6) victoria; urgency=medium
|
||||||
|
|
||||||
|
[ Michael Webster ]
|
||||||
|
* Use XAppGpuOffloadHelper for gpu offloading, respect PrefersNonDefaultGPU desktop entry key.
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Mon, 05 Jun 2023 13:40:15 +0100
|
||||||
|
|
||||||
|
mintmenu (6.1.5) vera; urgency=medium
|
||||||
|
|
||||||
|
[ monsta ]
|
||||||
|
* remove mint-common dependency (#274)
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Mon, 21 Nov 2022 11:57:37 +0000
|
||||||
|
|
||||||
|
mintmenu (6.1.4) uma; urgency=medium
|
||||||
|
|
||||||
|
* Recent: Fix buttons layout
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Thu, 01 Jul 2021 13:39:07 +0100
|
||||||
|
|
||||||
|
mintmenu (6.1.3) uma; urgency=medium
|
||||||
|
|
||||||
|
[ Vincent Vermeulen ]
|
||||||
|
* fix recently used documents sorting
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Fri, 25 Jun 2021 16:34:15 +0100
|
||||||
|
|
||||||
|
mintmenu (6.1.2) ulyssa; urgency=medium
|
||||||
|
|
||||||
|
[ Vincent Vermeulen ]
|
||||||
|
* fix APT search
|
||||||
|
|
||||||
|
[ Clement Lefebvre ]
|
||||||
|
* Favorites: Add a scrolledwindow (#263)
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Sat, 02 Jan 2021 22:21:33 +0000
|
||||||
|
|
||||||
|
mintmenu (6.1.1) ulyana; urgency=medium
|
||||||
|
|
||||||
|
[ Michael Webster ]
|
||||||
|
* applications.py: Fix dnd for re-ordering/adding favorites.
|
||||||
|
* recentHelper.py: Don't try to modify the recent list unless recents are enabled.
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Wed, 17 Jun 2020 16:30:48 +0100
|
||||||
|
|
||||||
|
mintmenu (6.1.0) ulyana; urgency=medium
|
||||||
|
|
||||||
|
[ Michael Webster ]
|
||||||
|
* mintMenu.py: Refactor panel button construction to fix padding in different configurations.
|
||||||
|
* gtk: Fix a couple of deprecations
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Wed, 10 Jun 2020 16:43:29 +0100
|
||||||
|
|
||||||
|
mintmenu (6.0.9) ulyana; urgency=medium
|
||||||
|
|
||||||
|
* Add missing dependency
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Wed, 10 Jun 2020 11:53:29 +0100
|
||||||
|
|
||||||
|
mintmenu (6.0.8) ulyana; urgency=medium
|
||||||
|
|
||||||
|
* Search: Fix searching for accentuated strings
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Wed, 10 Jun 2020 11:49:34 +0100
|
||||||
|
|
||||||
|
mintmenu (6.0.7) ulyana; urgency=medium
|
||||||
|
|
||||||
|
[ Michael Webster ]
|
||||||
|
* Support nvidia on-demand app launching.
|
||||||
|
|
||||||
|
[ Clement Lefebvre ]
|
||||||
|
* l10n: Update POT
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Thu, 14 May 2020 08:14:45 +0100
|
||||||
|
|
||||||
|
mintmenu (6.0.6) ulyana; urgency=medium
|
||||||
|
|
||||||
|
* Switch to symbolic panel icon
|
||||||
|
* Remove applet text by default
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Fri, 24 Apr 2020 10:17:57 +0100
|
||||||
|
|
||||||
|
mintmenu (6.0.5) ulyana; urgency=medium
|
||||||
|
|
||||||
|
* Fix typo in file path
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Thu, 23 Apr 2020 11:43:51 +0100
|
||||||
|
|
||||||
|
mintmenu (6.0.4) ulyana; urgency=medium
|
||||||
|
|
||||||
|
[ Michael Webster ]
|
||||||
|
* all: Use python3
|
||||||
|
* Use gsettings for recent and favorite apps
|
||||||
|
* recent.py: Allow the clear button to apply to whichever tab is currently active.
|
||||||
|
* about dialog: Fix program name and use a license type.
|
||||||
|
|
||||||
|
[ Clement Lefebvre ]
|
||||||
|
* Fix launching pkexec applications (#248)
|
||||||
|
|
||||||
|
[ Michael Webster ]
|
||||||
|
* debian: Fix dependencies to require python3 variants.
|
||||||
|
|
||||||
|
-- Clement Lefebvre <root@linuxmint.com> Fri, 03 Apr 2020 12:08:41 +0100
|
||||||
|
|
||||||
mintmenu (6.0.3) tricia; urgency=medium
|
mintmenu (6.0.3) tricia; urgency=medium
|
||||||
|
|
||||||
* Prefer mozo over menulibre
|
* Prefer mozo over menulibre
|
||||||
|
19
debian/control
vendored
19
debian/control
vendored
@ -2,22 +2,21 @@ Source: mintmenu
|
|||||||
Section: admin
|
Section: admin
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Maintainer: Clement Lefebvre <root@linuxmint.com>
|
Maintainer: Clement Lefebvre <root@linuxmint.com>
|
||||||
Build-Depends: debhelper (>= 9), python, dh-python,
|
Build-Depends: debhelper (>= 9), python3, dh-python,
|
||||||
Standards-Version: 3.9.5
|
Standards-Version: 3.9.5
|
||||||
|
|
||||||
Package: mintmenu
|
Package: mintmenu
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Depends:
|
Depends:
|
||||||
${python:Depends},
|
|
||||||
${misc:Depends},
|
${misc:Depends},
|
||||||
mint-common,
|
python3,
|
||||||
python (>= 2.4), python (<< 3),
|
python3-apt,
|
||||||
python-apt,
|
python3-configobj,
|
||||||
python-configobj,
|
python3-gi-cairo,
|
||||||
python-gi-cairo,
|
python3-setproctitle,
|
||||||
python-setproctitle,
|
python3-unidecode,
|
||||||
python-xlib,
|
python3-xlib,
|
||||||
python-xdg,
|
python3-xdg,
|
||||||
python3-xapp,
|
python3-xapp,
|
||||||
python3-xlib,
|
python3-xlib,
|
||||||
xdg-utils,
|
xdg-utils,
|
||||||
|
2
debian/postinst
vendored
2
debian/postinst
vendored
@ -19,7 +19,7 @@ set -e
|
|||||||
case "$1" in
|
case "$1" in
|
||||||
configure)
|
configure)
|
||||||
glib-compile-schemas /usr/share/glib-2.0/schemas
|
glib-compile-schemas /usr/share/glib-2.0/schemas
|
||||||
python -m compileall -qf /usr/lib/linuxmint/mintMenu/
|
python3 -m compileall -qf /usr/lib/linuxmint/mintMenu/
|
||||||
;;
|
;;
|
||||||
|
|
||||||
abort-upgrade|abort-remove|abort-deconfigure)
|
abort-upgrade|abort-remove|abort-deconfigure)
|
||||||
|
2
debian/rules
vendored
2
debian/rules
vendored
@ -3,7 +3,7 @@
|
|||||||
DEB_VERSION := $(shell dpkg-parsechangelog | egrep '^Version:' | cut -f 2 -d ' ')
|
DEB_VERSION := $(shell dpkg-parsechangelog | egrep '^Version:' | cut -f 2 -d ' ')
|
||||||
|
|
||||||
%:
|
%:
|
||||||
dh ${@} --with-python2
|
dh ${@} --with-python3
|
||||||
|
|
||||||
# Inject version number in the code
|
# Inject version number in the code
|
||||||
override_dh_installdeb:
|
override_dh_installdeb:
|
||||||
|
105
mintmenu.pot
105
mintmenu.pot
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2019-11-19 14:00+0000\n"
|
"POT-Creation-Date: 2020-05-14 08:12+0100\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -49,23 +49,23 @@ msgstr ""
|
|||||||
msgid "Couldn't initialize plugin"
|
msgid "Couldn't initialize plugin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/mintMenu.py:592
|
#: usr/lib/linuxmint/mintMenu/mintMenu.py:587
|
||||||
msgid "Advanced MATE Menu"
|
msgid "Advanced MATE Menu"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/mintMenu.py:703
|
#: usr/lib/linuxmint/mintMenu/mintMenu.py:698
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/mintMenu.py:707
|
#: usr/lib/linuxmint/mintMenu/mintMenu.py:702
|
||||||
msgid "Edit menu"
|
msgid "Edit menu"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/mintMenu.py:711
|
#: usr/lib/linuxmint/mintMenu/mintMenu.py:706
|
||||||
msgid "Reload plugins"
|
msgid "Reload plugins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/mintMenu.py:714
|
#: usr/lib/linuxmint/mintMenu/mintMenu.py:709
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -374,134 +374,133 @@ msgstr ""
|
|||||||
msgid "Path"
|
msgid "Path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:624
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:625
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Search DuckDuckGo for %s"
|
msgid "Search DuckDuckGo for %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:626
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:627
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Search Wikipedia for %s"
|
msgid "Search Wikipedia for %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:629
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:630
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Lookup %s in Dictionary"
|
msgid "Lookup %s in Dictionary"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:631
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:632
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Search Computer for %s"
|
msgid "Search Computer for %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:689
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:690
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:731
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:732
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Install package '%s'"
|
msgid "Install package '%s'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:835
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:836
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:906
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:911
|
||||||
msgid "Add to desktop"
|
msgid "Add to desktop"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:836
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:837
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:907
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:912
|
||||||
msgid "Add to panel"
|
msgid "Add to panel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:838
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:839
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:884
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:889
|
||||||
msgid "Insert space"
|
msgid "Insert space"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:839
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:840
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:885
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:890
|
||||||
msgid "Insert separator"
|
msgid "Insert separator"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:841
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:842
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:910
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:915
|
||||||
msgid "Launch when I log in"
|
msgid "Launch when I log in"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:843
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:844
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:912
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:917
|
||||||
msgid "Launch"
|
msgid "Launch"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:844
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:845
|
||||||
msgid "Remove from favorites"
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:918
|
||||||
|
msgid "Run with NVIDIA GPU"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:846
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:846
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:916
|
msgid "Remove from favorites"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:848
|
||||||
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:922
|
||||||
msgid "Edit properties"
|
msgid "Edit properties"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:883
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:888
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:909
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:914
|
||||||
msgid "Show in my favorites"
|
msgid "Show in my favorites"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:913
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:919
|
||||||
msgid "Uninstall"
|
msgid "Uninstall"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:914
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:920
|
||||||
msgid "Delete from menu"
|
msgid "Delete from menu"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:979
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:988
|
||||||
msgid "Search DuckDuckGo"
|
msgid "Search DuckDuckGo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:980
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:989
|
||||||
msgid "Search Wikipedia"
|
msgid "Search Wikipedia"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:982
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:991
|
||||||
msgid "Search Dictionary"
|
msgid "Search Dictionary"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:983
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:992
|
||||||
msgid "Search Computer"
|
msgid "Search Computer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:985
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:994
|
||||||
msgid "Find Software"
|
msgid "Find Software"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:986
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:995
|
||||||
msgid "Find Tutorials"
|
msgid "Find Tutorials"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:987
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:996
|
||||||
msgid "Find Hardware"
|
msgid "Find Hardware"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:988
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:997
|
||||||
msgid "Find Ideas"
|
msgid "Find Ideas"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:989
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:998
|
||||||
msgid "Find Users"
|
msgid "Find Users"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1395
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1642
|
||||||
msgid ""
|
|
||||||
"Couldn't save favorites. Check if you have write access to ~/.linuxmint/"
|
|
||||||
"mintMenu"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1617
|
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1619
|
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1644
|
||||||
msgid "Show all applications"
|
msgid "Show all applications"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -530,17 +529,11 @@ msgstr ""
|
|||||||
msgid "Empty trash"
|
msgid "Empty trash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/recentHelper.py:40
|
#: usr/lib/linuxmint/mintMenu/plugins/recent.py:41
|
||||||
msgid ""
|
|
||||||
"Couldn't save recent apps. Check if you have write access to ~/.linuxmint/"
|
|
||||||
"mintMenu"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/recent.py:39
|
|
||||||
msgid "Recently used"
|
msgid "Recently used"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: usr/lib/linuxmint/mintMenu/plugins/recent.py:169
|
#: usr/lib/linuxmint/mintMenu/plugins/recent.py:192
|
||||||
msgid "The file or location could not be opened."
|
msgid "The file or location could not be opened."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
#!/usr/bin/python2
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import sys, os
|
import sys, os
|
||||||
|
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
if (sys.argv[1] in ["help", "h", "-?", "--help", "-h", "?"]):
|
if (sys.argv[1] in ["help", "h", "-?", "--help", "-h", "?"]):
|
||||||
print "mintMenu - the advanced MATE menu\n"
|
print("mintMenu - the advanced MATE menu\n")
|
||||||
print "options:"
|
print("options:")
|
||||||
print " [--]help, [-]h Display this help."
|
print(" [--]help, [-]h Display this help.")
|
||||||
print " [--]clean, [--]clear, [--]reset Restore settings to default.\n"
|
print(" [--]clean, [--]clear, [--]reset Restore settings to default.\n")
|
||||||
elif (sys.argv[1] in ["clean", "clear", "reset", "--clean", "--clear", "--reset"]):
|
elif (sys.argv[1] in ["clean", "clear", "reset", "--clean", "--clear", "--reset"]):
|
||||||
os.system("gsettings reset-recursively com.linuxmint.mintmenu")
|
os.system("gsettings reset-recursively com.linuxmint.mintmenu")
|
||||||
os.system("gsettings reset-recursively com.linuxmint.mintmenu.plugins.places")
|
os.system("gsettings reset-recursively com.linuxmint.mintmenu.plugins.places")
|
||||||
@ -15,6 +15,6 @@ if len(sys.argv) > 1:
|
|||||||
os.system("gsettings reset-recursively com.linuxmint.mintmenu.plugins.recent")
|
os.system("gsettings reset-recursively com.linuxmint.mintmenu.plugins.recent")
|
||||||
os.system("gsettings reset-recursively com.linuxmint.mintmenu.plugins.system_management")
|
os.system("gsettings reset-recursively com.linuxmint.mintmenu.plugins.system_management")
|
||||||
os.system("rm -rf ~/.linuxmint/mintMenu")
|
os.system("rm -rf ~/.linuxmint/mintMenu")
|
||||||
print "All mintMenu settings are now restored to default"
|
print("All mintMenu settings are now restored to default")
|
||||||
else:
|
else:
|
||||||
os.system("/usr/lib/linuxmint/mintMenu/mintMenu.py")
|
os.system("/usr/lib/linuxmint/mintMenu/mintMenu.py")
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python2
|
#!/usr/bin/python3
|
||||||
|
|
||||||
# -*- coding: utf-8; -*-
|
# -*- coding: utf-8; -*-
|
||||||
# Copyright (C) 2013 Ozcan Esen <ozcanesen@gmail.com>
|
# Copyright (C) 2013 Ozcan Esen <ozcanesen@gmail.com>
|
||||||
@ -118,7 +118,7 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
|
|||||||
self.grab(self.keytext)
|
self.grab(self.keytext)
|
||||||
|
|
||||||
def get_mask_combinations(self, mask):
|
def get_mask_combinations(self, mask):
|
||||||
return [x for x in xrange(mask+1) if not (x & ~mask)]
|
return [x for x in range(mask+1) if not (x & ~mask)]
|
||||||
|
|
||||||
def idle(self):
|
def idle(self):
|
||||||
self.emit("activate")
|
self.emit("activate")
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python2
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import locale
|
import locale
|
||||||
import gc
|
import gc
|
||||||
@ -10,6 +10,7 @@ import traceback
|
|||||||
import gi
|
import gi
|
||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
gi.require_version('MatePanelApplet', '4.0')
|
gi.require_version('MatePanelApplet', '4.0')
|
||||||
|
gi.require_version('XApp', '1.0')
|
||||||
from gi.repository import Gtk, GdkPixbuf, Gdk, GObject
|
from gi.repository import Gtk, GdkPixbuf, Gdk, GObject
|
||||||
from gi.repository import MatePanelApplet
|
from gi.repository import MatePanelApplet
|
||||||
from gi.repository import Gio
|
from gi.repository import Gio
|
||||||
@ -21,8 +22,6 @@ import pointerMonitor
|
|||||||
import setproctitle
|
import setproctitle
|
||||||
from plugins.execute import Execute
|
from plugins.execute import Execute
|
||||||
|
|
||||||
GObject.threads_init()
|
|
||||||
|
|
||||||
# Rename the process
|
# Rename the process
|
||||||
setproctitle.setproctitle('mintmenu')
|
setproctitle.setproctitle('mintmenu')
|
||||||
|
|
||||||
@ -131,7 +130,7 @@ class MainWindow(object):
|
|||||||
try:
|
try:
|
||||||
X = __import__(plugin)
|
X = __import__(plugin)
|
||||||
# If no parameter passed to plugin it is autonomous
|
# If no parameter passed to plugin it is autonomous
|
||||||
if X.pluginclass.__init__.func_code.co_argcount == 1:
|
if X.pluginclass.__init__.__code__.co_argcount == 1:
|
||||||
MyPlugin = X.pluginclass()
|
MyPlugin = X.pluginclass()
|
||||||
else:
|
else:
|
||||||
# pass mintMenu and togglebutton instance so that the plugin can use it
|
# pass mintMenu and togglebutton instance so that the plugin can use it
|
||||||
@ -329,10 +328,11 @@ class MenuWin(object):
|
|||||||
self.detect_desktop_environment()
|
self.detect_desktop_environment()
|
||||||
self.settings = Gio.Settings.new("com.linuxmint.mintmenu")
|
self.settings = Gio.Settings.new("com.linuxmint.mintmenu")
|
||||||
self.icon_theme = Gtk.IconTheme.get_default()
|
self.icon_theme = Gtk.IconTheme.get_default()
|
||||||
self.button_icon = Gtk.Image()
|
self.button_icon = Gtk.Image(no_show_all=True)
|
||||||
self.loadSettings()
|
self.loadSettings()
|
||||||
|
|
||||||
self.createPanelButton()
|
self.button_box = None
|
||||||
|
self.updatePanelButton()
|
||||||
|
|
||||||
self.mate_settings = Gio.Settings.new("org.mate.interface")
|
self.mate_settings = Gio.Settings.new("org.mate.interface")
|
||||||
self.mate_settings.connect("changed::gtk-theme", self.changeTheme)
|
self.mate_settings.connect("changed::gtk-theme", self.changeTheme)
|
||||||
@ -346,7 +346,7 @@ class MenuWin(object):
|
|||||||
|
|
||||||
self.applet.set_flags(MatePanelApplet.AppletFlags.EXPAND_MINOR)
|
self.applet.set_flags(MatePanelApplet.AppletFlags.EXPAND_MINOR)
|
||||||
self.applet.connect("button-press-event", self.showMenu)
|
self.applet.connect("button-press-event", self.showMenu)
|
||||||
self.applet.connect("change-orient", self.changeOrientation)
|
self.applet.connect("change-orient", self.updatePanelButton)
|
||||||
self.applet.connect("enter-notify-event", self.enter_notify)
|
self.applet.connect("enter-notify-event", self.enter_notify)
|
||||||
self.applet.connect("leave-notify-event", self.leave_notify)
|
self.applet.connect("leave-notify-event", self.leave_notify)
|
||||||
|
|
||||||
@ -427,36 +427,69 @@ class MenuWin(object):
|
|||||||
else:
|
else:
|
||||||
self.button_icon.set_from_surface(self.surface)
|
self.button_icon.set_from_surface(self.surface)
|
||||||
|
|
||||||
def createPanelButton(self):
|
def updatePanelButton(self):
|
||||||
|
if self.button_box != None:
|
||||||
|
self.button_box.destroy()
|
||||||
|
|
||||||
self.set_applet_icon()
|
self.set_applet_icon()
|
||||||
self.systemlabel = Gtk.Label(label= "%s " % self.buttonText)
|
self.systemlabel = Gtk.Label(label= "%s" % self.buttonText, no_show_all=True)
|
||||||
|
|
||||||
if os.path.isfile("/etc/linuxmint/info"):
|
if os.path.isfile("/etc/linuxmint/info"):
|
||||||
with open("/etc/linuxmint/info") as info:
|
with open("/etc/linuxmint/info") as info:
|
||||||
for line in info:
|
for line in info:
|
||||||
line = line.decode("utf-8")
|
|
||||||
if line.startswith("DESCRIPTION="):
|
if line.startswith("DESCRIPTION="):
|
||||||
tooltip = line.split("=",1)[1].strip('"\n')
|
tooltip = line.split("=",1)[1].strip('"\n')
|
||||||
self.systemlabel.set_tooltip_text(tooltip)
|
self.systemlabel.set_tooltip_text(tooltip)
|
||||||
self.button_icon.set_tooltip_text(tooltip)
|
self.button_icon.set_tooltip_text(tooltip)
|
||||||
break
|
break
|
||||||
|
|
||||||
|
self.button_icon.props.margin = 0
|
||||||
|
self.systemlabel.props.margin = 0
|
||||||
|
self.systemlabel.props.visible = show_text = self.buttonText != ""
|
||||||
|
self.button_icon.props.visible = self.showIcon
|
||||||
|
|
||||||
if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN:
|
if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN:
|
||||||
self.button_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
self.button_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
|
||||||
self.button_box.pack_start(self.button_icon, False, False, 0)
|
self.button_box.pack_start(self.button_icon, False, False, 0)
|
||||||
self.button_box.pack_start(self.systemlabel, False, False, 0)
|
self.button_box.pack_start(self.systemlabel, False, False, 0)
|
||||||
self.button_icon.set_padding(5, 0)
|
if self.showIcon and not show_text:
|
||||||
|
self.button_icon.props.margin_start = 5
|
||||||
|
self.button_icon.props.margin_end = 5
|
||||||
|
elif show_text and not self.showIcon:
|
||||||
|
self.systemlabel.props.margin_start = 5
|
||||||
|
self.systemlabel.props.margin_end = 5
|
||||||
|
else:
|
||||||
|
self.button_icon.props.margin_start = 5
|
||||||
|
self.systemlabel.props.margin_end = 5
|
||||||
# if we have a vertical panel
|
# if we have a vertical panel
|
||||||
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.LEFT:
|
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.LEFT:
|
||||||
self.button_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
self.button_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5)
|
||||||
self.systemlabel.set_angle(270)
|
self.systemlabel.set_angle(270)
|
||||||
self.button_box.pack_start(self.button_icon , False, False, 0)
|
self.button_box.pack_start(self.button_icon , False, False, 0)
|
||||||
self.button_box.pack_start(self.systemlabel , False, False, 0)
|
self.button_box.pack_start(self.systemlabel , False, False, 0)
|
||||||
self.button_icon.set_padding(0, 5)
|
if self.showIcon and not show_text:
|
||||||
|
self.button_icon.props.margin_top = 5
|
||||||
|
self.button_icon.props.margin_bottom = 5
|
||||||
|
elif show_text and not self.showIcon:
|
||||||
|
self.systemlabel.props.margin_top = 5
|
||||||
|
self.systemlabel.props.margin_bottom = 5
|
||||||
|
else:
|
||||||
|
self.button_icon.props.margin_top = 5
|
||||||
|
self.systemlabel.props.margin_bottom = 5
|
||||||
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.RIGHT:
|
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.RIGHT:
|
||||||
self.button_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
self.button_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5)
|
||||||
self.systemlabel.set_angle(90)
|
self.systemlabel.set_angle(90)
|
||||||
self.button_box.pack_start(self.systemlabel , False, False, 0)
|
self.button_box.pack_start(self.systemlabel , False, False, 0)
|
||||||
self.button_box.pack_start(self.button_icon , False, False, 0)
|
self.button_box.pack_start(self.button_icon , False, False, 0)
|
||||||
self.button_icon.set_padding(0, 5)
|
if self.showIcon and not show_text:
|
||||||
|
self.button_icon.props.margin_top = 5
|
||||||
|
self.button_icon.props.margin_bottom = 5
|
||||||
|
elif show_text and not self.showIcon:
|
||||||
|
self.systemlabel.props.margin_top = 5
|
||||||
|
self.systemlabel.props.margin_bottom = 5
|
||||||
|
else:
|
||||||
|
self.button_icon.props.margin_bottom = 5
|
||||||
|
self.systemlabel.props.margin_top = 5
|
||||||
|
|
||||||
self.button_box.set_homogeneous(False)
|
self.button_box.set_homogeneous(False)
|
||||||
self.button_box.show_all()
|
self.button_box.show_all()
|
||||||
@ -512,53 +545,11 @@ class MenuWin(object):
|
|||||||
except:
|
except:
|
||||||
style_settings.set_property("gtk-theme-name", desktop_theme)
|
style_settings.set_property("gtk-theme-name", desktop_theme)
|
||||||
|
|
||||||
def changeOrientation(self, *args, **kargs):
|
|
||||||
if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN:
|
|
||||||
tmpbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
|
||||||
self.systemlabel.set_angle(0)
|
|
||||||
self.button_box.reorder_child(self.button_icon, 0)
|
|
||||||
self.button_icon.set_padding(5, 0)
|
|
||||||
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.LEFT:
|
|
||||||
tmpbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
|
||||||
self.systemlabel.set_angle(270)
|
|
||||||
self.button_box.reorder_child(self.button_icon, 0)
|
|
||||||
self.button_icon.set_padding(0, 5)
|
|
||||||
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.RIGHT:
|
|
||||||
tmpbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
|
||||||
self.systemlabel.set_angle(90)
|
|
||||||
self.button_box.reorder_child(self.button_icon, 1)
|
|
||||||
self.button_icon.set_padding(0, 5)
|
|
||||||
|
|
||||||
tmpbox.set_homogeneous(False)
|
|
||||||
|
|
||||||
# reparent all the hboxes to the new tmpbox
|
|
||||||
for i in self.button_box:
|
|
||||||
i.reparent(tmpbox)
|
|
||||||
|
|
||||||
self.button_box.destroy()
|
|
||||||
|
|
||||||
self.button_box = tmpbox
|
|
||||||
self.button_box.show()
|
|
||||||
|
|
||||||
# this call makes sure width stays intact
|
|
||||||
self.updateButton()
|
|
||||||
self.applet.add(self.button_box)
|
|
||||||
|
|
||||||
def updateButton(self):
|
|
||||||
self.systemlabel.set_text(self.buttonText)
|
|
||||||
self.set_applet_icon()
|
|
||||||
self.sizeButton()
|
|
||||||
|
|
||||||
def hotkeyChanged (self, schema, key):
|
def hotkeyChanged (self, schema, key):
|
||||||
self.hotkeyText = self.settings.get_string("hot-key")
|
self.hotkeyText = self.settings.get_string("hot-key")
|
||||||
self.keybinder.rebind(self.hotkeyText)
|
self.keybinder.rebind(self.hotkeyText)
|
||||||
|
|
||||||
def sizeButton(self):
|
def sizeButton(self):
|
||||||
if self.showIcon:
|
|
||||||
self.button_icon.show()
|
|
||||||
else:
|
|
||||||
self.button_icon.hide()
|
|
||||||
|
|
||||||
# This code calculates width and height for the button_box
|
# This code calculates width and height for the button_box
|
||||||
# and takes the orientation and scale factor in account
|
# and takes the orientation and scale factor in account
|
||||||
bi_req = self.button_icon.get_preferred_size()[1]
|
bi_req = self.button_icon.get_preferred_size()[1]
|
||||||
@ -567,28 +558,24 @@ class MenuWin(object):
|
|||||||
sl_scale = self.systemlabel.get_scale_factor()
|
sl_scale = self.systemlabel.get_scale_factor()
|
||||||
if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN:
|
if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN:
|
||||||
if self.showIcon:
|
if self.showIcon:
|
||||||
self.applet.set_size_request(sl_req.width / sl_scale + bi_req.width / bi_scale + 5, bi_req.height)
|
self.applet.set_size_request(sl_req.width / sl_scale + bi_req.width / bi_scale, bi_req.height)
|
||||||
else:
|
else:
|
||||||
self.applet.set_size_request(sl_req.width / sl_scale + 2, bi_req.height)
|
self.applet.set_size_request(sl_req.width / sl_scale, bi_req.height)
|
||||||
else:
|
else:
|
||||||
if self.showIcon:
|
if self.showIcon:
|
||||||
self.applet.set_size_request(bi_req.width, sl_req.height / sl_scale + bi_req.height / bi_scale + 5)
|
self.applet.set_size_request(bi_req.width, sl_req.height / sl_scale + bi_req.height / bi_scale)
|
||||||
else:
|
else:
|
||||||
self.applet.set_size_request(bi_req.width, sl_req.height / sl_scale + 2)
|
self.applet.set_size_request(bi_req.width, sl_req.height / sl_scale)
|
||||||
|
|
||||||
def reloadSettings(self, *args):
|
def reloadSettings(self, *args):
|
||||||
self.loadSettings()
|
self.loadSettings()
|
||||||
self.updateButton()
|
self.updatePanelButton()
|
||||||
|
|
||||||
def showAboutDialog(self, action, userdata = None):
|
def showAboutDialog(self, action, userdata = None):
|
||||||
about = Gtk.AboutDialog()
|
about = Gtk.AboutDialog()
|
||||||
about.set_name("mintMenu")
|
about.set_program_name("mintMenu")
|
||||||
about.set_version("__DEB_VERSION__")
|
about.set_version("__DEB_VERSION__")
|
||||||
try:
|
about.set_license_type(Gtk.License.GPL_3_0)
|
||||||
gpl = open('/usr/share/common-licenses/GPL','r').read()
|
|
||||||
about.set_license(gpl)
|
|
||||||
except Exception as e:
|
|
||||||
print(e)
|
|
||||||
about.set_comments(_("Advanced MATE Menu"))
|
about.set_comments(_("Advanced MATE Menu"))
|
||||||
# about.set_authors(["Clement Lefebvre <clem@linuxmint.com>", "Lars-Peter Clausen <lars@laprican.de>"])
|
# about.set_authors(["Clement Lefebvre <clem@linuxmint.com>", "Lars-Peter Clausen <lars@laprican.de>"])
|
||||||
about.set_translator_credits(("translator-credits"))
|
about.set_translator_credits(("translator-credits"))
|
||||||
|
@ -1 +1 @@
|
|||||||
#!/usr/bin/python2
|
#!/usr/bin/python3
|
||||||
|
@ -1,18 +1,19 @@
|
|||||||
#!/usr/bin/python2
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import cgi
|
import html
|
||||||
import filecmp
|
import filecmp
|
||||||
import gettext
|
import gettext
|
||||||
import locale
|
import locale
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import threading
|
import threading
|
||||||
import urllib
|
import urllib.request, urllib.parse, urllib.error
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
gi.require_version("MateMenu", "2.0")
|
gi.require_version("MateMenu", "2.0")
|
||||||
from gi.repository import Gtk, Gdk, GdkPixbuf, Gio, GLib, MateMenu
|
gi.require_version("XApp", "1.0")
|
||||||
|
from gi.repository import Gtk, Gdk, GdkPixbuf, Gio, GLib, MateMenu, XApp
|
||||||
|
|
||||||
import plugins.recentHelper as RecentHelper
|
import plugins.recentHelper as RecentHelper
|
||||||
from plugins.easybuttons import (ApplicationLauncher, CategoryButton,
|
from plugins.easybuttons import (ApplicationLauncher, CategoryButton,
|
||||||
@ -173,11 +174,11 @@ class pluginclass(object):
|
|||||||
toButton = (Gtk.TargetEntry.new("text/uri-list", 0, TARGET_TYPE_TEXT),
|
toButton = (Gtk.TargetEntry.new("text/uri-list", 0, TARGET_TYPE_TEXT),
|
||||||
Gtk.TargetEntry.new("text/uri-list", 0, TARGET_TYPE_TEXT))
|
Gtk.TargetEntry.new("text/uri-list", 0, TARGET_TYPE_TEXT))
|
||||||
TARGET_TYPE_FAV = 81
|
TARGET_TYPE_FAV = 81
|
||||||
toFav = (Gtk.TargetEntry.new("FAVORITES", Gtk.TargetFlags.SAME_APP, 81),
|
toFav = (Gtk.TargetEntry.new("text/plain", Gtk.TargetFlags.SAME_APP, 81),
|
||||||
Gtk.TargetEntry.new("text/plain", 0, 100),
|
Gtk.TargetEntry.new("text/plain", 0, 100),
|
||||||
Gtk.TargetEntry.new("text/uri-list", 0, 101))
|
Gtk.TargetEntry.new("text/uri-list", 0, 101))
|
||||||
fromFav = (Gtk.TargetEntry.new("FAVORITES", Gtk.TargetFlags.SAME_APP, 81),
|
fromFav = (Gtk.TargetEntry.new("text/plain", Gtk.TargetFlags.SAME_APP, 81),
|
||||||
Gtk.TargetEntry.new("FAVORITES", Gtk.TargetFlags.SAME_APP, 81))
|
Gtk.TargetEntry.new("text/plain", Gtk.TargetFlags.SAME_APP, 81))
|
||||||
|
|
||||||
#@print_timing
|
#@print_timing
|
||||||
def __init__(self, mintMenuWin, toggleButton, de):
|
def __init__(self, mintMenuWin, toggleButton, de):
|
||||||
@ -188,6 +189,17 @@ class pluginclass(object):
|
|||||||
self.menuFiles = []
|
self.menuFiles = []
|
||||||
self.de = de
|
self.de = de
|
||||||
|
|
||||||
|
self.canOffload = False
|
||||||
|
|
||||||
|
try:
|
||||||
|
helper = XApp.GpuOffloadHelper.get_sync()
|
||||||
|
self.canOffload = helper.is_offload_supported()
|
||||||
|
except AttributeError:
|
||||||
|
try:
|
||||||
|
self.canOffload = XApp.util_gpu_offload_supported()
|
||||||
|
except AttributeError:
|
||||||
|
print("Could not check for gpu offload support - maybe xapps isn't up to date.");
|
||||||
|
|
||||||
# Detect the locale (this is used for the Wikipedia search)
|
# Detect the locale (this is used for the Wikipedia search)
|
||||||
self.lang = "en"
|
self.lang = "en"
|
||||||
lang = os.getenv('LANG')
|
lang = os.getenv('LANG')
|
||||||
@ -245,6 +257,9 @@ class pluginclass(object):
|
|||||||
try:
|
try:
|
||||||
# GSettings stuff
|
# GSettings stuff
|
||||||
self.settings = Gio.Settings("com.linuxmint.mintmenu.plugins.applications")
|
self.settings = Gio.Settings("com.linuxmint.mintmenu.plugins.applications")
|
||||||
|
|
||||||
|
self.migrate_favorites()
|
||||||
|
|
||||||
self.GetGSettingsEntries()
|
self.GetGSettingsEntries()
|
||||||
self.settings.connect("changed::icon-size", self.changeIconSize)
|
self.settings.connect("changed::icon-size", self.changeIconSize)
|
||||||
self.settings.connect("changed::favicon-size", self.changeFavIconSize)
|
self.settings.connect("changed::favicon-size", self.changeFavIconSize)
|
||||||
@ -264,6 +279,7 @@ class pluginclass(object):
|
|||||||
self.settings.connect("changed::enable-internet-search", self.GetGSettingsEntries)
|
self.settings.connect("changed::enable-internet-search", self.GetGSettingsEntries)
|
||||||
self.settings.connect("changed::search-command", self.GetGSettingsEntries)
|
self.settings.connect("changed::search-command", self.GetGSettingsEntries)
|
||||||
self.settings.connect("changed::default-tab", self.GetGSettingsEntries)
|
self.settings.connect("changed::default-tab", self.GetGSettingsEntries)
|
||||||
|
self.settings.connect("changed::favorite-apps-list", self.favoriteAppsChanged)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
|
|
||||||
@ -519,16 +535,6 @@ class pluginclass(object):
|
|||||||
def RebuildPlugin(self):
|
def RebuildPlugin(self):
|
||||||
self.content_holder.set_size_request(self.width, self.height)
|
self.content_holder.set_size_request(self.width, self.height)
|
||||||
|
|
||||||
def checkMintMenuFolder(self):
|
|
||||||
if os.path.exists(os.path.join(os.path.expanduser("~"), ".linuxmint", "mintMenu", "applications")):
|
|
||||||
return True
|
|
||||||
try:
|
|
||||||
os.makedirs(os.path.join(os.path.expanduser("~"), ".linuxmint", "mintMenu", "applications"))
|
|
||||||
return True
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
return False
|
|
||||||
|
|
||||||
def onShowMenu(self):
|
def onShowMenu(self):
|
||||||
if self.favorites:
|
if self.favorites:
|
||||||
if self.defaultTab == -1:
|
if self.defaultTab == -1:
|
||||||
@ -618,7 +624,7 @@ class pluginclass(object):
|
|||||||
self.suggestions.append(item)
|
self.suggestions.append(item)
|
||||||
|
|
||||||
def add_search_suggestions(self, text):
|
def add_search_suggestions(self, text):
|
||||||
text = "<b>%s</b>" % cgi.escape(text)
|
text = "<b>%s</b>" % html.escape(text)
|
||||||
if self.enableInternetSearch:
|
if self.enableInternetSearch:
|
||||||
self.add_suggestion("/usr/lib/linuxmint/mintMenu/search_engines/ddg.svg",
|
self.add_suggestion("/usr/lib/linuxmint/mintMenu/search_engines/ddg.svg",
|
||||||
_("Search DuckDuckGo for %s") % text, None, self.search_ddg)
|
_("Search DuckDuckGo for %s") % text, None, self.search_ddg)
|
||||||
@ -767,16 +773,24 @@ class pluginclass(object):
|
|||||||
i.hide()
|
i.hide()
|
||||||
else:
|
else:
|
||||||
shownList.append(i)
|
shownList.append(i)
|
||||||
#if this is the first matching item
|
self.applicationsBox.remove(i)
|
||||||
#focus it
|
|
||||||
if(not showns):
|
|
||||||
i.grab_focus()
|
|
||||||
showns = True
|
showns = True
|
||||||
if not showns:
|
if not showns:
|
||||||
if len(text) >= 3:
|
if len(text) >= 3:
|
||||||
self.add_search_suggestions(text)
|
self.add_search_suggestions(text)
|
||||||
if self.useAPT:
|
if self.useAPT:
|
||||||
GLib.timeout_add(300, self.add_apt_filter_results, text)
|
GLib.timeout_add(300, self.add_apt_filter_results, text)
|
||||||
|
else:
|
||||||
|
# Sort applications by relevance, and alphabetical within that
|
||||||
|
shownList = sorted(shownList, key=lambda app: app.appName)
|
||||||
|
shownList = sorted(shownList, key=lambda app: app.relevance, reverse=True)
|
||||||
|
focused = False
|
||||||
|
for i in shownList:
|
||||||
|
self.applicationsBox.add(i)
|
||||||
|
if not focused:
|
||||||
|
# Grab focus of the first app shown
|
||||||
|
i.grab_focus()
|
||||||
|
focused = True
|
||||||
for i in self.categoriesBox.get_children():
|
for i in self.categoriesBox.get_children():
|
||||||
i.released()
|
i.released()
|
||||||
i.set_relief(Gtk.ReliefStyle.NONE)
|
i.set_relief(Gtk.ReliefStyle.NONE)
|
||||||
@ -841,6 +855,7 @@ class pluginclass(object):
|
|||||||
startupMenuItem = Gtk.CheckMenuItem(_("Launch when I log in"))
|
startupMenuItem = Gtk.CheckMenuItem(_("Launch when I log in"))
|
||||||
separator3 = Gtk.SeparatorMenuItem()
|
separator3 = Gtk.SeparatorMenuItem()
|
||||||
launchMenuItem = Gtk.MenuItem(_("Launch"))
|
launchMenuItem = Gtk.MenuItem(_("Launch"))
|
||||||
|
launchOffloadedMenuItem = Gtk.MenuItem(_("Run with NVIDIA GPU"))
|
||||||
removeFromFavMenuItem = Gtk.MenuItem(_("Remove from favorites"))
|
removeFromFavMenuItem = Gtk.MenuItem(_("Remove from favorites"))
|
||||||
separator4 = Gtk.SeparatorMenuItem()
|
separator4 = Gtk.SeparatorMenuItem()
|
||||||
propsMenuItem = Gtk.MenuItem(_("Edit properties"))
|
propsMenuItem = Gtk.MenuItem(_("Edit properties"))
|
||||||
@ -856,6 +871,7 @@ class pluginclass(object):
|
|||||||
startupMenuItem.set_active(False)
|
startupMenuItem.set_active(False)
|
||||||
startupMenuItem.connect("toggled", self.onAddToStartup, widget)
|
startupMenuItem.connect("toggled", self.onAddToStartup, widget)
|
||||||
launchMenuItem.connect("activate", self.onLaunchApp, widget)
|
launchMenuItem.connect("activate", self.onLaunchApp, widget)
|
||||||
|
launchOffloadedMenuItem.connect("activate", self.onLaunchOffloadedApp, widget)
|
||||||
removeFromFavMenuItem.connect("activate", self.onFavoritesRemove, widget)
|
removeFromFavMenuItem.connect("activate", self.onFavoritesRemove, widget)
|
||||||
propsMenuItem.connect("activate", self.onPropsApp, widget)
|
propsMenuItem.connect("activate", self.onPropsApp, widget)
|
||||||
|
|
||||||
@ -869,6 +885,8 @@ class pluginclass(object):
|
|||||||
mTree.append(startupMenuItem)
|
mTree.append(startupMenuItem)
|
||||||
mTree.append(separator3)
|
mTree.append(separator3)
|
||||||
mTree.append(launchMenuItem)
|
mTree.append(launchMenuItem)
|
||||||
|
if self.canOffload:
|
||||||
|
mTree.append(launchOffloadedMenuItem)
|
||||||
mTree.append(removeFromFavMenuItem)
|
mTree.append(removeFromFavMenuItem)
|
||||||
mTree.append(separator4)
|
mTree.append(separator4)
|
||||||
mTree.append(propsMenuItem)
|
mTree.append(propsMenuItem)
|
||||||
@ -910,6 +928,7 @@ class pluginclass(object):
|
|||||||
startupMenuItem = Gtk.CheckMenuItem(_("Launch when I log in"))
|
startupMenuItem = Gtk.CheckMenuItem(_("Launch when I log in"))
|
||||||
separator2 = Gtk.SeparatorMenuItem()
|
separator2 = Gtk.SeparatorMenuItem()
|
||||||
launchMenuItem = Gtk.MenuItem(_("Launch"))
|
launchMenuItem = Gtk.MenuItem(_("Launch"))
|
||||||
|
launchOffloadedMenuItem = Gtk.MenuItem(_("Run with NVIDIA GPU"))
|
||||||
uninstallMenuItem = Gtk.MenuItem(_("Uninstall"))
|
uninstallMenuItem = Gtk.MenuItem(_("Uninstall"))
|
||||||
deleteMenuItem = Gtk.MenuItem(_("Delete from menu"))
|
deleteMenuItem = Gtk.MenuItem(_("Delete from menu"))
|
||||||
separator3 = Gtk.SeparatorMenuItem()
|
separator3 = Gtk.SeparatorMenuItem()
|
||||||
@ -924,6 +943,8 @@ class pluginclass(object):
|
|||||||
mTree.append(startupMenuItem)
|
mTree.append(startupMenuItem)
|
||||||
mTree.append(separator2)
|
mTree.append(separator2)
|
||||||
mTree.append(launchMenuItem)
|
mTree.append(launchMenuItem)
|
||||||
|
if self.canOffload:
|
||||||
|
mTree.append(launchOffloadedMenuItem)
|
||||||
mTree.append(uninstallMenuItem)
|
mTree.append(uninstallMenuItem)
|
||||||
if home in widget.desktopFile:
|
if home in widget.desktopFile:
|
||||||
mTree.append(deleteMenuItem)
|
mTree.append(deleteMenuItem)
|
||||||
@ -935,6 +956,7 @@ class pluginclass(object):
|
|||||||
desktopMenuItem.connect("activate", self.add_to_desktop, widget)
|
desktopMenuItem.connect("activate", self.add_to_desktop, widget)
|
||||||
panelMenuItem.connect("activate", self.add_to_panel, widget)
|
panelMenuItem.connect("activate", self.add_to_panel, widget)
|
||||||
launchMenuItem.connect("activate", self.onLaunchApp, widget)
|
launchMenuItem.connect("activate", self.onLaunchApp, widget)
|
||||||
|
launchOffloadedMenuItem.connect("activate", self.onLaunchOffloadedApp, widget)
|
||||||
propsMenuItem.connect("activate", self.onPropsApp, widget)
|
propsMenuItem.connect("activate", self.onPropsApp, widget)
|
||||||
uninstallMenuItem.connect("activate", self.onUninstallApp, widget)
|
uninstallMenuItem.connect("activate", self.onUninstallApp, widget)
|
||||||
|
|
||||||
@ -997,17 +1019,17 @@ class pluginclass(object):
|
|||||||
self.focusSearchEntry(clear = False)
|
self.focusSearchEntry(clear = False)
|
||||||
|
|
||||||
def search_ddg(self, widget):
|
def search_ddg(self, widget):
|
||||||
text = urllib.quote_plus(self.searchEntry.get_text().strip())
|
text = urllib.parse.quote_plus(self.searchEntry.get_text().strip())
|
||||||
subprocess.Popen(["xdg-open", "https://duckduckgo.com/?q=%s" % text])
|
subprocess.Popen(["xdg-open", "https://duckduckgo.com/?q=%s" % text])
|
||||||
self.mintMenuWin.hide()
|
self.mintMenuWin.hide()
|
||||||
|
|
||||||
def search_google(self, widget):
|
def search_google(self, widget):
|
||||||
text = urllib.quote_plus(self.searchEntry.get_text().strip())
|
text = urllib.parse.quote_plus(self.searchEntry.get_text().strip())
|
||||||
subprocess.Popen(["xdg-open", "https://www.google.com/search?q=%s" % text])
|
subprocess.Popen(["xdg-open", "https://www.google.com/search?q=%s" % text])
|
||||||
self.mintMenuWin.hide()
|
self.mintMenuWin.hide()
|
||||||
|
|
||||||
def search_wikipedia(self, widget):
|
def search_wikipedia(self, widget):
|
||||||
text = urllib.quote_plus(self.searchEntry.get_text().strip())
|
text = urllib.parse.quote_plus(self.searchEntry.get_text().strip())
|
||||||
subprocess.Popen(["xdg-open", "https://en.wikipedia.org/wiki/Special:Search?search=%s" % text])
|
subprocess.Popen(["xdg-open", "https://en.wikipedia.org/wiki/Special:Search?search=%s" % text])
|
||||||
self.mintMenuWin.hide()
|
self.mintMenuWin.hide()
|
||||||
|
|
||||||
@ -1017,27 +1039,27 @@ class pluginclass(object):
|
|||||||
self.mintMenuWin.hide()
|
self.mintMenuWin.hide()
|
||||||
|
|
||||||
def search_mint_tutorials(self, widget):
|
def search_mint_tutorials(self, widget):
|
||||||
text = urllib.quote(self.searchEntry.get_text().strip())
|
text = urllib.parse.quote(self.searchEntry.get_text().strip())
|
||||||
subprocess.Popen(["xdg-open", "https://community.linuxmint.com/index.php/tutorial/search/0/%s" % text])
|
subprocess.Popen(["xdg-open", "https://community.linuxmint.com/index.php/tutorial/search/0/%s" % text])
|
||||||
self.mintMenuWin.hide()
|
self.mintMenuWin.hide()
|
||||||
|
|
||||||
def search_mint_ideas(self, widget):
|
def search_mint_ideas(self, widget):
|
||||||
text = urllib.quote(self.searchEntry.get_text().strip())
|
text = urllib.parse.quote(self.searchEntry.get_text().strip())
|
||||||
subprocess.Popen(["xdg-open", "https://community.linuxmint.com/index.php/idea/search/0/%s" % text])
|
subprocess.Popen(["xdg-open", "https://community.linuxmint.com/index.php/idea/search/0/%s" % text])
|
||||||
self.mintMenuWin.hide()
|
self.mintMenuWin.hide()
|
||||||
|
|
||||||
def search_mint_users(self, widget):
|
def search_mint_users(self, widget):
|
||||||
text = urllib.quote(self.searchEntry.get_text().strip())
|
text = urllib.parse.quote(self.searchEntry.get_text().strip())
|
||||||
subprocess.Popen(["xdg-open", "https://community.linuxmint.com/index.php/user/search/0/%s" % text])
|
subprocess.Popen(["xdg-open", "https://community.linuxmint.com/index.php/user/search/0/%s" % text])
|
||||||
self.mintMenuWin.hide()
|
self.mintMenuWin.hide()
|
||||||
|
|
||||||
def search_mint_hardware(self, widget):
|
def search_mint_hardware(self, widget):
|
||||||
text = urllib.quote(self.searchEntry.get_text().strip())
|
text = urllib.parse.quote(self.searchEntry.get_text().strip())
|
||||||
subprocess.Popen(["xdg-open", "https://community.linuxmint.com/index.php/hardware/search/0/%s" % text])
|
subprocess.Popen(["xdg-open", "https://community.linuxmint.com/index.php/hardware/search/0/%s" % text])
|
||||||
self.mintMenuWin.hide()
|
self.mintMenuWin.hide()
|
||||||
|
|
||||||
def search_mint_software(self, widget):
|
def search_mint_software(self, widget):
|
||||||
text = urllib.quote(self.searchEntry.get_text())
|
text = urllib.parse.quote(self.searchEntry.get_text())
|
||||||
subprocess.Popen(["xdg-open", "https://community.linuxmint.com/index.php/software/search/0/%s" % text])
|
subprocess.Popen(["xdg-open", "https://community.linuxmint.com/index.php/software/search/0/%s" % text])
|
||||||
self.mintMenuWin.hide()
|
self.mintMenuWin.hide()
|
||||||
|
|
||||||
@ -1076,6 +1098,10 @@ class pluginclass(object):
|
|||||||
widget.execute()
|
widget.execute()
|
||||||
self.mintMenuWin.hide()
|
self.mintMenuWin.hide()
|
||||||
|
|
||||||
|
def onLaunchOffloadedApp(self, menu, widget):
|
||||||
|
widget.execute(offload=True)
|
||||||
|
self.mintMenuWin.hide()
|
||||||
|
|
||||||
def onPropsApp(self, menu, widget):
|
def onPropsApp(self, menu, widget):
|
||||||
newFileFlag = False
|
newFileFlag = False
|
||||||
sysPaths = get_system_item_paths()
|
sysPaths = get_system_item_paths()
|
||||||
@ -1245,26 +1271,44 @@ class pluginclass(object):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def buildFavorites(self):
|
def migrate_favorites(self):
|
||||||
try:
|
if self.settings.get_strv("favorite-apps-list") != []:
|
||||||
|
return
|
||||||
|
|
||||||
|
default_path = os.path.join("/usr/lib/linuxmint/mintMenu/applications.list")
|
||||||
path = os.path.join(home, ".linuxmint/mintMenu/applications.list")
|
path = os.path.join(home, ".linuxmint/mintMenu/applications.list")
|
||||||
|
|
||||||
if os.path.isdir(path):
|
if os.path.isdir(path):
|
||||||
# dir created by a bug in mint 19.2 beta
|
# dir created by a bug in mint 19.2 beta
|
||||||
os.system("rm -rf %s" % path)
|
os.system("rm -rf %s" % path)
|
||||||
|
return
|
||||||
|
|
||||||
if not os.path.exists(path):
|
if not os.path.exists(path):
|
||||||
os.system("mkdir -p ~/.linuxmint/mintMenu")
|
path = default_path
|
||||||
os.system("cp /usr/lib/linuxmint/mintMenu/applications.list " + path)
|
|
||||||
|
|
||||||
applicationsList = open(path).readlines()
|
with open(path) as f:
|
||||||
|
self.settings.set_strv("favorite-apps-list", f.readlines())
|
||||||
|
|
||||||
self.favorites = []
|
try:
|
||||||
|
os.replace(path, path + ".deprecated_uses_dconf_now")
|
||||||
|
except:
|
||||||
|
# This will fail if it was the default path, ignore it.
|
||||||
|
pass
|
||||||
|
|
||||||
|
def favoriteAppsChanged(self, setting, key):
|
||||||
|
self.buildFavorites()
|
||||||
|
|
||||||
|
def buildFavorites(self):
|
||||||
|
try:
|
||||||
|
faves = self.settings.get_strv("favorite-apps-list")
|
||||||
|
|
||||||
for child in self.favoritesBox:
|
for child in self.favoritesBox:
|
||||||
child.destroy()
|
child.destroy()
|
||||||
|
|
||||||
position = 0
|
position = 0
|
||||||
|
self.favorites = []
|
||||||
|
|
||||||
for app in applicationsList:
|
for app in faves:
|
||||||
try:
|
try:
|
||||||
app = app.strip()
|
app = app.strip()
|
||||||
|
|
||||||
@ -1296,7 +1340,6 @@ class pluginclass(object):
|
|||||||
print("Can't add favorite: %s" % app)
|
print("Can't add favorite: %s" % app)
|
||||||
print (e)
|
print (e)
|
||||||
|
|
||||||
self.favoritesSave()
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
|
|
||||||
@ -1382,20 +1425,15 @@ class pluginclass(object):
|
|||||||
self.favoritesRemove(fav.position)
|
self.favoritesRemove(fav.position)
|
||||||
|
|
||||||
def favoritesSave(self):
|
def favoritesSave(self):
|
||||||
try:
|
new_faves = []
|
||||||
self.checkMintMenuFolder()
|
|
||||||
with open(os.path.join(home, ".linuxmint/mintMenu/applications.list") , "w") as appListFile:
|
|
||||||
for favorite in self.favorites:
|
for favorite in self.favorites:
|
||||||
if favorite.type == "location":
|
if favorite.type == "location":
|
||||||
appListFile.write("location:" + favorite.desktopFile + "\n")
|
new_faves.append("location:" + favorite.desktopFile)
|
||||||
else:
|
else:
|
||||||
appListFile.write(favorite.type + "\n")
|
new_faves.append(favorite.type)
|
||||||
except Exception as e:
|
|
||||||
msgDlg = Gtk.MessageDialog(None, Gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR, Gtk.ButtonsType.OK,
|
self.settings.set_strv("favorite-apps-list", new_faves)
|
||||||
_("Couldn't save favorites. Check if you have write access to ~/.linuxmint/mintMenu") +
|
|
||||||
"\n(" + e.__str__() + ")")
|
|
||||||
msgDlg.run()
|
|
||||||
msgDlg.destroy()
|
|
||||||
|
|
||||||
def isLocationInFavorites(self, location):
|
def isLocationInFavorites(self, location):
|
||||||
for fav in self.favorites:
|
for fav in self.favorites:
|
||||||
@ -1406,12 +1444,11 @@ class pluginclass(object):
|
|||||||
def on_drag_data_get(self, widget, context, selection, info, time):
|
def on_drag_data_get(self, widget, context, selection, info, time):
|
||||||
if info == self.TARGET_TYPE_FAV:
|
if info == self.TARGET_TYPE_FAV:
|
||||||
self.drag_origin = widget.position
|
self.drag_origin = widget.position
|
||||||
# FIXME: This fails in python3:
|
selection.set_text(str(widget.position), -1)
|
||||||
selection.set(selection.get_target(), 8, str(widget.position))
|
|
||||||
|
|
||||||
def on_drag_data_received(self, widget, context, x, y, selection, info, time):
|
def on_drag_data_received(self, widget, context, x, y, selection, info, time):
|
||||||
if info == self.TARGET_TYPE_FAV:
|
if info == self.TARGET_TYPE_FAV:
|
||||||
self.favoritesReorder(int(selection.get_data()), widget.position)
|
self.favoritesReorder(int(selection.get_data().decode()), widget.position)
|
||||||
|
|
||||||
# def on_icon_theme_changed(self, theme):
|
# def on_icon_theme_changed(self, theme):
|
||||||
# print("on_icon_theme_changed")
|
# print("on_icon_theme_changed")
|
||||||
@ -1615,7 +1652,7 @@ class pluginclass(object):
|
|||||||
# Build a list of all categories in the menu ([{"name", "icon", tooltip"}]
|
# Build a list of all categories in the menu ([{"name", "icon", tooltip"}]
|
||||||
def buildCategoryList(self):
|
def buildCategoryList(self):
|
||||||
newCategoryList = [{"name": _("All"),
|
newCategoryList = [{"name": _("All"),
|
||||||
"icon": "start-here-symbolic",
|
"icon": "mintmenu-all-applications-symbolic",
|
||||||
"tooltip": _("Show all applications"),
|
"tooltip": _("Show all applications"),
|
||||||
"filter":"", "index": 0}]
|
"filter":"", "index": 0}]
|
||||||
num = 1
|
num = 1
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#!/usr/bin/python2
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
import shutil
|
import shutil
|
||||||
|
import unidecode
|
||||||
|
|
||||||
import xdg.DesktopEntry
|
import xdg.DesktopEntry
|
||||||
import xdg.Menu
|
import xdg.Menu
|
||||||
@ -128,7 +129,7 @@ class easyButton(Gtk.Button):
|
|||||||
|
|
||||||
if labels:
|
if labels:
|
||||||
for label in labels:
|
for label in labels:
|
||||||
if isinstance(label, basestring):
|
if isinstance(label, str):
|
||||||
self.addLabel(label)
|
self.addLabel(label)
|
||||||
elif isinstance(label, list):
|
elif isinstance(label, list):
|
||||||
self.addLabel(label[0], label[1])
|
self.addLabel(label[0], label[1])
|
||||||
@ -233,6 +234,7 @@ class ApplicationLauncher(easyButton):
|
|||||||
|
|
||||||
self.desktopFile = desktopFile
|
self.desktopFile = desktopFile
|
||||||
self.startupMonitorId = 0
|
self.startupMonitorId = 0
|
||||||
|
self.relevance = 0
|
||||||
|
|
||||||
self.loadDesktopEntry(desktopItem)
|
self.loadDesktopEntry(desktopItem)
|
||||||
|
|
||||||
@ -258,15 +260,16 @@ class ApplicationLauncher(easyButton):
|
|||||||
|
|
||||||
def loadDesktopEntry(self, desktopItem):
|
def loadDesktopEntry(self, desktopItem):
|
||||||
try:
|
try:
|
||||||
self.appName = self.strip_accents(desktopItem.getName())
|
self.appName = desktopItem.getName()
|
||||||
self.appGenericName = self.strip_accents(desktopItem.getGenericName())
|
self.appGenericName = desktopItem.getGenericName()
|
||||||
self.appComment = self.strip_accents(desktopItem.getComment())
|
self.appComment = desktopItem.getComment()
|
||||||
self.appExec = self.strip_accents(desktopItem.getExec().replace('\\\\', '\\'))
|
self.appExec = desktopItem.getExec().replace('\\\\', '\\')
|
||||||
self.appIconName = desktopItem.getIcon()
|
self.appIconName = desktopItem.getIcon()
|
||||||
self.appCategories = desktopItem.getCategories()
|
self.appCategories = desktopItem.getCategories()
|
||||||
self.appMateDocPath = desktopItem.get("X-MATE-DocPath") or ""
|
self.appMateDocPath = desktopItem.get("X-MATE-DocPath") or ""
|
||||||
self.useTerminal = desktopItem.getTerminal()
|
self.useTerminal = desktopItem.getTerminal()
|
||||||
self.appPath = desktopItem.getPath()
|
self.appPath = desktopItem.getPath()
|
||||||
|
self.prefersOffload = desktopItem.get("PrefersNonDefaultGPU", "Desktop Entry", type="boolean")
|
||||||
|
|
||||||
if not self.appMateDocPath:
|
if not self.appMateDocPath:
|
||||||
self.appKdeDocPath = desktopItem.getDocPath() or ""
|
self.appKdeDocPath = desktopItem.getDocPath() or ""
|
||||||
@ -303,24 +306,39 @@ class ApplicationLauncher(easyButton):
|
|||||||
self.addLabel(self.appName)
|
self.addLabel(self.appName)
|
||||||
|
|
||||||
def filterText(self, text):
|
def filterText(self, text):
|
||||||
keywords = text.lower().split()
|
keywords = self.strip_case_and_accents(text).split()
|
||||||
appName = self.appName.lower()
|
self.relevance = 0
|
||||||
appGenericName = self.appGenericName.lower()
|
|
||||||
appComment = self.appComment.lower()
|
appName = self.strip_case_and_accents(self.appName)
|
||||||
appExec = self.appExec.lower()
|
appGenericName = self.strip_case_and_accents(self.appGenericName)
|
||||||
|
appComment = self.strip_case_and_accents(self.appComment)
|
||||||
|
appExec = self.strip_case_and_accents(self.appExec)
|
||||||
|
|
||||||
for keyword in keywords:
|
for keyword in keywords:
|
||||||
keyw = self.strip_accents(keyword)
|
if appName == keyword:
|
||||||
if keyw != "" and appName.find(keyw) == -1 and appGenericName.find(keyw) == -1 and appComment.find(keyw) == -1 and appExec.find(keyw) == -1:
|
self.relevance += 32
|
||||||
|
elif appName.find(keyword) == 0:
|
||||||
|
self.relevance += 16
|
||||||
|
elif appName.find(keyword) != -1:
|
||||||
|
self.relevance += 8
|
||||||
|
|
||||||
|
if appExec.find(keyword) != -1:
|
||||||
|
self.relevance += 4
|
||||||
|
if appComment.find(keyword) != -1:
|
||||||
|
self.relevance += 2
|
||||||
|
if appGenericName.find(keyword) != -1:
|
||||||
|
self.relevance += 1
|
||||||
|
|
||||||
|
if keyword != "" and appName.find(keyword) == -1 and appGenericName.find(keyword) == -1 and appComment.find(keyword) == -1 and appExec.find(keyword) == -1:
|
||||||
self.hide()
|
self.hide()
|
||||||
return False
|
return False
|
||||||
self.show()
|
self.show()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def strip_accents(self, string):
|
def strip_case_and_accents(self, string):
|
||||||
value = string
|
if isinstance(string, str):
|
||||||
if isinstance(string, unicode):
|
|
||||||
try:
|
try:
|
||||||
value = string.encode('UTF8', 'ignore')
|
value = unidecode.unidecode(string.lower())
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
return value
|
return value
|
||||||
@ -341,7 +359,7 @@ class ApplicationLauncher(easyButton):
|
|||||||
else:
|
else:
|
||||||
selection.set_uris(["file://" + self.desktopFile])
|
selection.set_uris(["file://" + self.desktopFile])
|
||||||
|
|
||||||
def execute(self, *args):
|
def execute(self, *args, **kwargs):
|
||||||
if self.appExec:
|
if self.appExec:
|
||||||
if self.useTerminal:
|
if self.useTerminal:
|
||||||
cmd = "x-terminal-emulator -e \"" + self.appExec + "\""
|
cmd = "x-terminal-emulator -e \"" + self.appExec + "\""
|
||||||
@ -349,7 +367,17 @@ class ApplicationLauncher(easyButton):
|
|||||||
cmd = "mate-terminal -e \"" + self.appExec + "\""
|
cmd = "mate-terminal -e \"" + self.appExec + "\""
|
||||||
Execute(cmd, self.appPath)
|
Execute(cmd, self.appPath)
|
||||||
else:
|
else:
|
||||||
Execute(None, desktopFile=self.desktopFile)
|
offload = False
|
||||||
|
|
||||||
|
try:
|
||||||
|
offload = kwargs["offload"]
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if self.prefersOffload:
|
||||||
|
offload = True
|
||||||
|
|
||||||
|
Execute(None, desktopFile=self.desktopFile, offload=offload)
|
||||||
|
|
||||||
def uninstall(self, *args):
|
def uninstall(self, *args):
|
||||||
Execute("mint-remove-application " + self.desktopFile)
|
Execute("mint-remove-application " + self.desktopFile)
|
||||||
@ -385,13 +413,6 @@ class ApplicationLauncher(easyButton):
|
|||||||
if os.path.exists(self.startupFilePath):
|
if os.path.exists(self.startupFilePath):
|
||||||
os.remove(self.startupFilePath)
|
os.remove(self.startupFilePath)
|
||||||
|
|
||||||
def addToFavourites(self):
|
|
||||||
favouritesDir = os.path.join(os.path.expanduser("~"), ".linuxmint/mintMenu/applications")
|
|
||||||
if not os.path.exists(favouritesDir):
|
|
||||||
os.makedirs(favouritesDir)
|
|
||||||
|
|
||||||
shutil.copyfile(self.desktopFile, self.favouritesFilePath)
|
|
||||||
|
|
||||||
def removeFromFavourites(self):
|
def removeFromFavourites(self):
|
||||||
if os.path.exists(self.favouritesFilePath):
|
if os.path.exists(self.favouritesFilePath):
|
||||||
os.remove(self.favouritesFilePath)
|
os.remove(self.favouritesFilePath)
|
||||||
@ -468,12 +489,12 @@ class MenuApplicationLauncher(ApplicationLauncher):
|
|||||||
else:
|
else:
|
||||||
self.addLabel(appName)
|
self.addLabel(appName)
|
||||||
|
|
||||||
def execute(self, *args):
|
def execute(self, *args, **kwargs):
|
||||||
self.highlight = False
|
self.highlight = False
|
||||||
for child in self.labelBox:
|
for child in self.labelBox:
|
||||||
child.destroy()
|
child.destroy()
|
||||||
self.setupLabels()
|
self.setupLabels()
|
||||||
return super(MenuApplicationLauncher, self).execute(*args)
|
return super(MenuApplicationLauncher, self).execute(*args, **kwargs)
|
||||||
|
|
||||||
def setShowComment(self, showComment):
|
def setShowComment(self, showComment):
|
||||||
self.showComment = showComment
|
self.showComment = showComment
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/python2
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from gi.repository import Gio
|
from gi.repository import Gio, GLib, Gdk, XApp
|
||||||
|
|
||||||
|
|
||||||
def RemoveArgs(Execline):
|
def RemoveArgs(Execline):
|
||||||
@ -16,13 +16,46 @@ def RemoveArgs(Execline):
|
|||||||
|
|
||||||
return Execline
|
return Execline
|
||||||
|
|
||||||
|
def dummy_child_watch (pid, status, data):
|
||||||
|
# Do nothing, this is just to ensure we don't double fork
|
||||||
|
# and break pkexec: https://bugzilla.gnome.org/show_bug.cgi?id=675789
|
||||||
|
pass
|
||||||
|
|
||||||
|
def gather_pid_callback(appinfo, pid, data):
|
||||||
|
GLib.child_watch_add(pid, dummy_child_watch, None)
|
||||||
|
|
||||||
# Actually execute the command
|
# Actually execute the command
|
||||||
def Execute(cmd , commandCwd=None, desktopFile=None):
|
def Execute(cmd , commandCwd=None, desktopFile=None, offload=False):
|
||||||
if desktopFile:
|
if desktopFile:
|
||||||
launcher = Gio.DesktopAppInfo.new_from_filename(desktopFile)
|
launcher = Gio.DesktopAppInfo.new_from_filename(desktopFile)
|
||||||
retval = launcher.launch_uris()
|
context = Gdk.Display.get_default().get_app_launch_context()
|
||||||
|
if offload:
|
||||||
|
print("Offloading '%s' to discrete gpu." % launcher.get_name());
|
||||||
|
|
||||||
|
try:
|
||||||
|
helper = XApp.GpuOffloadHelper.get_sync()
|
||||||
|
infos = helper.get_offload_infos()
|
||||||
|
|
||||||
|
if infos:
|
||||||
|
i = 0
|
||||||
|
env_strv = infos[0].env_strv
|
||||||
|
while i < len(env_strv):
|
||||||
|
context.setenv(env_strv[i], env_strv[i + 1])
|
||||||
|
i += 2
|
||||||
|
except AttributeError:
|
||||||
|
context.setenv("__NV_PRIME_RENDER_OFFLOAD", "1")
|
||||||
|
context.setenv("__GLX_VENDOR_LIBRARY_NAME", "nvidia");
|
||||||
|
|
||||||
|
try:
|
||||||
|
retval = launcher.launch_uris_as_manager(uris=[],
|
||||||
|
launch_context=context,
|
||||||
|
spawn_flags=GLib.SpawnFlags.SEARCH_PATH|GLib.SpawnFlags.DO_NOT_REAP_CHILD,
|
||||||
|
user_setup=None, user_setup_data=None,
|
||||||
|
pid_callback=gather_pid_callback, pid_callback_data=None)
|
||||||
return retval
|
return retval
|
||||||
|
except GLib.Error as e:
|
||||||
|
print("Error launching %s: %s" % (launcher.get_name(), e.message))
|
||||||
|
return False
|
||||||
|
|
||||||
cwd = os.path.expanduser("~")
|
cwd = os.path.expanduser("~")
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python2
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
#!/usr/bin/python2
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import locale
|
import locale
|
||||||
import gettext
|
import gettext
|
||||||
import os
|
import os
|
||||||
import string
|
import string
|
||||||
from glob import glob
|
from glob import glob
|
||||||
from urllib import unquote
|
from urllib.parse import unquote
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python2
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import gettext
|
import gettext
|
||||||
import locale
|
import locale
|
||||||
@ -7,11 +7,13 @@ import subprocess
|
|||||||
|
|
||||||
import gi
|
import gi
|
||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
from gi.repository import Gtk, Gio
|
from gi.repository import Gtk, Gio, Pango
|
||||||
|
|
||||||
import plugins.recentHelper as RecentHelper
|
import plugins.recentHelper as RecentHelper
|
||||||
from plugins.execute import Execute
|
from plugins.execute import Execute
|
||||||
|
|
||||||
|
home = os.path.expanduser("~")
|
||||||
|
|
||||||
# i18n
|
# i18n
|
||||||
gettext.install("mintmenu", "/usr/share/linuxmint/locale")
|
gettext.install("mintmenu", "/usr/share/linuxmint/locale")
|
||||||
locale.bindtextdomain("mintmenu", "/usr/share/linuxmint/locale")
|
locale.bindtextdomain("mintmenu", "/usr/share/linuxmint/locale")
|
||||||
@ -56,6 +58,9 @@ class pluginclass:
|
|||||||
self.icon = 'mate-folder.png'
|
self.icon = 'mate-folder.png'
|
||||||
|
|
||||||
self.settings = Gio.Settings("com.linuxmint.mintmenu.plugins.recent")
|
self.settings = Gio.Settings("com.linuxmint.mintmenu.plugins.recent")
|
||||||
|
RecentHelper.settings = self.settings
|
||||||
|
|
||||||
|
self.migrate_recent_apps()
|
||||||
self.settings.connect('changed', self.RegenPlugin)
|
self.settings.connect('changed', self.RegenPlugin)
|
||||||
|
|
||||||
self.appSettings = Gio.Settings("com.linuxmint.mintmenu.plugins.applications")
|
self.appSettings = Gio.Settings("com.linuxmint.mintmenu.plugins.applications")
|
||||||
@ -87,6 +92,20 @@ class pluginclass:
|
|||||||
def RegenPlugin(self, *args, **kargs):
|
def RegenPlugin(self, *args, **kargs):
|
||||||
self.GetGSettingsEntries()
|
self.GetGSettingsEntries()
|
||||||
|
|
||||||
|
def migrate_recent_apps(self):
|
||||||
|
if self.settings.get_strv("recent-apps-list") != []:
|
||||||
|
return
|
||||||
|
|
||||||
|
path = os.path.join(home, ".linuxmint/mintMenu/recentApplications.list")
|
||||||
|
if os.path.exists(path):
|
||||||
|
with open(path) as f:
|
||||||
|
self.settings.set_strv("recent-apps-list", f.readlines())
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.unlink(path)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def GetGSettingsEntries(self):
|
def GetGSettingsEntries(self):
|
||||||
self.recenth = self.settings.get_int("height")
|
self.recenth = self.settings.get_int("height")
|
||||||
self.recentw = self.settings.get_int("width")
|
self.recentw = self.settings.get_int("width")
|
||||||
@ -130,7 +149,11 @@ class pluginclass:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def clrmenu(self, *args, **kargs):
|
def clrmenu(self, *args, **kargs):
|
||||||
|
if self.builder.get_object("RecentTabs").get_current_page() == 0: # files
|
||||||
self.RecManagerInstance.purge_items()
|
self.RecManagerInstance.purge_items()
|
||||||
|
else: # apps
|
||||||
|
self.settings.reset("recent-apps-list")
|
||||||
|
|
||||||
self.DoRecent()
|
self.DoRecent()
|
||||||
|
|
||||||
def AddRecentBtn(self, Name, RecentImage):
|
def AddRecentBtn(self, Name, RecentImage):
|
||||||
@ -151,7 +174,7 @@ class pluginclass:
|
|||||||
Box1.add(ButtonIcon)
|
Box1.add(ButtonIcon)
|
||||||
|
|
||||||
Label1 = Gtk.Label(DispName)
|
Label1 = Gtk.Label(DispName)
|
||||||
Label1.set_ellipsize(3)
|
Label1.set_ellipsize(Pango.EllipsizeMode.END)
|
||||||
Box1.add(Label1)
|
Box1.add(Label1)
|
||||||
|
|
||||||
AButton.add(Box1)
|
AButton.add(Box1)
|
||||||
@ -174,7 +197,7 @@ class pluginclass:
|
|||||||
def GetRecent(self, *args, **kargs):
|
def GetRecent(self, *args, **kargs):
|
||||||
FileString=[]
|
FileString=[]
|
||||||
IconString=[]
|
IconString=[]
|
||||||
RecentInfo=self.RecManagerInstance.get_items()
|
RecentInfo=sorted(self.RecManagerInstance.get_items(), key=lambda item: item.get_modified(), reverse=True)
|
||||||
count=0
|
count=0
|
||||||
MaxEntries=self.numentries
|
MaxEntries=self.numentries
|
||||||
if self.numentries == -1:
|
if self.numentries == -1:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python2
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
@ -10,6 +10,8 @@ from plugins.easybuttons import ApplicationLauncher
|
|||||||
|
|
||||||
home = os.path.expanduser("~")
|
home = os.path.expanduser("~")
|
||||||
recentApps = []
|
recentApps = []
|
||||||
|
settings = None # set by recent plugin
|
||||||
|
|
||||||
mintMenuWin = None
|
mintMenuWin = None
|
||||||
recentAppBox = None
|
recentAppBox = None
|
||||||
numentries = 10
|
numentries = 10
|
||||||
@ -25,21 +27,15 @@ def recentAppsAdd(recentAppsButton):
|
|||||||
counter = counter + 1
|
counter = counter + 1
|
||||||
|
|
||||||
def recentAppsSave():
|
def recentAppsSave():
|
||||||
try:
|
new_recent_apps = []
|
||||||
path = os.path.join(home, ".linuxmint/mintMenu/recentApplications.list")
|
|
||||||
with open(path, "w") as recentAppListFile:
|
|
||||||
for recentApp in recentApps:
|
for recentApp in recentApps:
|
||||||
if not hasattr(recentApp, "type") or recentApp.type == "location":
|
if not hasattr(recentApp, "type") or recentApp.type == "location":
|
||||||
recentAppListFile.write("location:" + recentApp.desktopFile + "\n")
|
new_recent_apps.append("location:" + recentApp.desktopFile)
|
||||||
else:
|
else:
|
||||||
recentAppListFile.write(recentApp.type + "\n")
|
new_recent_apps.append(recentApp.type)
|
||||||
|
|
||||||
except Exception as e:
|
settings.set_strv("recent-apps-list", new_recent_apps)
|
||||||
print(e)
|
|
||||||
msgDlg = Gtk.MessageDialog(None, Gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR, Gtk.ButtonsType.OK,
|
|
||||||
_("Couldn't save recent apps. Check if you have write access to ~/.linuxmint/mintMenu")+"\n(" + e.__str__() + ")")
|
|
||||||
msgDlg.run()
|
|
||||||
msgDlg.destroy()
|
|
||||||
|
|
||||||
def recentAppBuildLauncher(location):
|
def recentAppBuildLauncher(location):
|
||||||
try:
|
try:
|
||||||
@ -82,13 +78,9 @@ def recentAppBuildLauncher(location):
|
|||||||
def buildRecentApps():
|
def buildRecentApps():
|
||||||
del recentApps[:]
|
del recentApps[:]
|
||||||
try:
|
try:
|
||||||
path = os.path.join(home, ".linuxmint/mintMenu/recentApplications.list")
|
recent_apps = settings.get_strv("recent-apps-list")
|
||||||
if not os.path.exists(path):
|
|
||||||
recentApplicationsList = []
|
|
||||||
else:
|
|
||||||
recentApplicationsList = open(path).readlines()
|
|
||||||
|
|
||||||
for app in recentApplicationsList :
|
for app in recent_apps:
|
||||||
app = app.strip()
|
app = app.strip()
|
||||||
|
|
||||||
if app[0:9] == "location:":
|
if app[0:9] == "location:":
|
||||||
@ -123,6 +115,10 @@ def doRecentApps():
|
|||||||
|
|
||||||
def applicationButtonClicked(widget):
|
def applicationButtonClicked(widget):
|
||||||
mintMenuWin.hide()
|
mintMenuWin.hide()
|
||||||
|
|
||||||
|
if settings == None:
|
||||||
|
return
|
||||||
|
|
||||||
recentAppsAdd(widget)
|
recentAppsAdd(widget)
|
||||||
recentAppsSave()
|
recentAppsSave()
|
||||||
doRecentApps()
|
doRecentApps()
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python2
|
#!/usr/bin/python
|
||||||
|
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
|
@ -49,8 +49,8 @@ class mintMenuPreferences():
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
||||||
self.settings = Gio.Settings("com.linuxmint.mintmenu")
|
self.settings = Gio.Settings(schema_id="com.linuxmint.mintmenu")
|
||||||
self.places_settings = Gio.Settings("com.linuxmint.mintmenu.plugins.places")
|
self.places_settings = Gio.Settings(schema_id="com.linuxmint.mintmenu.plugins.places")
|
||||||
|
|
||||||
self.builder = Gtk.Builder()
|
self.builder = Gtk.Builder()
|
||||||
self.builder.set_translation_domain("mintmenu")
|
self.builder.set_translation_domain("mintmenu")
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
</key>
|
</key>
|
||||||
|
|
||||||
<key type="s" name="applet-text">
|
<key type="s" name="applet-text">
|
||||||
<default>"Menu"</default>
|
<default>""</default>
|
||||||
<summary></summary>
|
<summary></summary>
|
||||||
<description></description>
|
<description></description>
|
||||||
</key>
|
</key>
|
||||||
@ -51,13 +51,13 @@
|
|||||||
</key>
|
</key>
|
||||||
|
|
||||||
<key type="s" name="applet-icon">
|
<key type="s" name="applet-icon">
|
||||||
<default>"linuxmint-logo-filled-ring"</default>
|
<default>"linuxmint-logo-ring-symbolic"</default>
|
||||||
<summary></summary>
|
<summary></summary>
|
||||||
<description></description>
|
<description></description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
<key type="s" name="default-applet-icon">
|
<key type="s" name="default-applet-icon">
|
||||||
<default>"linuxmint-logo-filled-ring"</default>
|
<default>"linuxmint-logo-ring-symbolic"</default>
|
||||||
<summary></summary>
|
<summary></summary>
|
||||||
<description></description>
|
<description></description>
|
||||||
</key>
|
</key>
|
||||||
@ -291,6 +291,12 @@
|
|||||||
<summary></summary>
|
<summary></summary>
|
||||||
<description></description>
|
<description></description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
|
<key type="as" name="favorite-apps-list">
|
||||||
|
<default>[]</default>
|
||||||
|
<summary>List of absolute desktop file paths</summary>
|
||||||
|
</key>
|
||||||
|
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
<schema id="com.linuxmint.mintmenu.plugins.system_management" path="/com/linuxmint/mintmenu/plugins/system_management/">
|
<schema id="com.linuxmint.mintmenu.plugins.system_management" path="/com/linuxmint/mintmenu/plugins/system_management/">
|
||||||
@ -412,6 +418,11 @@
|
|||||||
<description></description>
|
<description></description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
|
<key type="as" name="recent-apps-list">
|
||||||
|
<default>[]</default>
|
||||||
|
<summary>List of absolute desktop file paths</summary>
|
||||||
|
</key>
|
||||||
|
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
</schemalist>
|
</schemalist>
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/' sodipodi:docname='view-grid-symbolic.svg' height='16' id='svg7384' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' xmlns:svg='http://www.w3.org/2000/svg' inkscape:version='0.48.2 r9819' version='1.1' width='16' xmlns='http://www.w3.org/2000/svg'>
|
||||||
|
<metadata id='metadata90'>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about=''>
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource='http://purl.org/dc/dcmitype/StillImage'/>
|
||||||
|
<dc:title>Cinnamon All Applications</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview inkscape:bbox-paths='false' bordercolor='#666666' borderopacity='1' inkscape:current-layer='layer12' inkscape:cx='84.99158' inkscape:cy='6.64106' gridtolerance='10' inkscape:guide-bbox='true' guidetolerance='10' id='namedview88' inkscape:object-nodes='false' inkscape:object-paths='false' objecttolerance='10' pagecolor='#555753' inkscape:pageopacity='1' inkscape:pageshadow='2' showborder='false' showgrid='false' showguides='true' inkscape:snap-bbox='true' inkscape:snap-bbox-midpoints='false' inkscape:snap-global='true' inkscape:snap-grids='true' inkscape:snap-nodes='false' inkscape:snap-others='false' inkscape:snap-to-guides='true' inkscape:window-height='1168' inkscape:window-maximized='1' inkscape:window-width='1600' inkscape:window-x='0' inkscape:window-y='0' inkscape:zoom='1'>
|
||||||
|
<inkscape:grid empspacing='2' enabled='true' id='grid4866' snapvisiblegridlinesonly='true' spacingx='1px' spacingy='1px' type='xygrid' visible='true'/>
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<title id='title9167'>Cinnamon All Applications</title>
|
||||||
|
<defs id='defs7386'/>
|
||||||
|
<g inkscape:groupmode='layer' id='layer9' inkscape:label='status' style='display:inline' transform='translate(-61.0004,-867)'/>
|
||||||
|
<g inkscape:groupmode='layer' id='layer10' inkscape:label='devices' transform='translate(-61.0004,-867)'/>
|
||||||
|
<g inkscape:groupmode='layer' id='layer11' inkscape:label='apps' transform='translate(-61.0004,-867)'/>
|
||||||
|
<g inkscape:groupmode='layer' id='layer13' inkscape:label='places' transform='translate(-61.0004,-867)'/>
|
||||||
|
<g inkscape:groupmode='layer' id='layer14' inkscape:label='mimetypes' transform='translate(-61.0004,-867)'/>
|
||||||
|
<g inkscape:groupmode='layer' id='layer15' inkscape:label='emblems' style='display:inline' transform='translate(-61.0004,-867)'/>
|
||||||
|
<g inkscape:groupmode='layer' id='g71291' inkscape:label='emotes' style='display:inline' transform='translate(-61.0004,-867)'/>
|
||||||
|
<g inkscape:groupmode='layer' id='g4953' inkscape:label='categories' style='display:inline' transform='translate(-61.0004,-867)'/>
|
||||||
|
<g inkscape:groupmode='layer' id='layer12' inkscape:label='actions' style='display:inline' transform='translate(-61.0004,-867)'>
|
||||||
|
|
||||||
|
<rect height='2' id='rect13363' rx='0.38461545' ry='0.37878788' style='color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new' width='2.0000002' x='64.000198' y='870'/>
|
||||||
|
<rect height='2' id='rect13365' rx='0.38461545' ry='0.37878788' style='color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new' width='2.0000002' x='68.000198' y='870'/>
|
||||||
|
<rect height='2' id='rect13367' rx='0.38461545' ry='0.37878788' style='color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new' width='2.0000002' x='72.000198' y='870'/>
|
||||||
|
<rect height='2' id='rect13369' rx='0.38461545' ry='0.37878788' style='color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new' width='2.0000002' x='64.000198' y='874.01562'/>
|
||||||
|
<rect height='2' id='rect13371' rx='0.38461545' ry='0.37878788' style='color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new' width='2.0000002' x='68.000198' y='874.01562'/>
|
||||||
|
<rect height='2' id='rect13373' rx='0.38461545' ry='0.37878788' style='color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new' width='2.0000002' x='72.000198' y='874.01562'/>
|
||||||
|
<rect height='2' id='rect13375' rx='0.38461545' ry='0.37878788' style='color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new' width='2.0000002' x='64.000198' y='878'/>
|
||||||
|
<rect height='2' id='rect13377' rx='0.38461545' ry='0.37878788' style='color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new' width='2.0000002' x='68.000198' y='878'/>
|
||||||
|
<rect height='2' id='rect13379' rx='0.38461545' ry='0.37878788' style='color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new' width='2.0000002' x='72.000198' y='878'/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.6 KiB |
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!-- Generated with glade 3.22.1 -->
|
<!-- Generated with glade 3.22.2 -->
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="3.18"/>
|
<requires lib="gtk+" version="3.18"/>
|
||||||
<object class="GtkWindow" id="mainWindow">
|
<object class="GtkWindow" id="mainWindow">
|
||||||
@ -9,7 +9,7 @@
|
|||||||
<property name="window_position">mouse</property>
|
<property name="window_position">mouse</property>
|
||||||
<property name="gravity">static</property>
|
<property name="gravity">static</property>
|
||||||
<signal name="destroy" handler="on_window1_destroy" swapped="no"/>
|
<signal name="destroy" handler="on_window1_destroy" swapped="no"/>
|
||||||
<child>
|
<child type="titlebar">
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@ -121,6 +121,10 @@
|
|||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkScrolledWindow">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkViewport" id="viewport2">
|
<object class="GtkViewport" id="viewport2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
@ -165,6 +169,8 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">True</property>
|
<property name="expand">True</property>
|
||||||
<property name="fill">True</property>
|
<property name="fill">True</property>
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!-- Generated with glade 3.22.1 -->
|
<!-- Generated with glade 3.22.2 -->
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="3.0"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<object class="GtkWindow" id="window1">
|
<object class="GtkWindow" id="window1">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">3</property>
|
<property name="border_width">3</property>
|
||||||
<property name="title" translatable="yes">window1</property>
|
<property name="title" translatable="yes">window1</property>
|
||||||
<child>
|
<child type="titlebar">
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@ -34,15 +34,19 @@
|
|||||||
<object class="GtkViewport" id="viewport1">
|
<object class="GtkViewport" id="viewport1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="margin_top">6</property>
|
<property name="margin_left">12</property>
|
||||||
<property name="margin_bottom">6</property>
|
<property name="margin_right">12</property>
|
||||||
|
<property name="margin_top">12</property>
|
||||||
|
<property name="margin_bottom">12</property>
|
||||||
<property name="shadow_type">none</property>
|
<property name="shadow_type">none</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButtonBox" id="RecentBox">
|
<object class="GtkBox" id="RecentBox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<property name="layout_style">start</property>
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
@ -67,15 +71,16 @@
|
|||||||
<object class="GtkViewport" id="viewport2">
|
<object class="GtkViewport" id="viewport2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="margin_top">6</property>
|
<property name="margin_left">12</property>
|
||||||
<property name="margin_bottom">6</property>
|
<property name="margin_right">12</property>
|
||||||
|
<property name="margin_top">12</property>
|
||||||
|
<property name="margin_bottom">12</property>
|
||||||
|
<property name="shadow_type">none</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButtonBox" id="RecentApps">
|
<object class="GtkBox" id="RecentApps">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">3</property>
|
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<property name="layout_style">start</property>
|
|
||||||
<child>
|
<child>
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
|
Loading…
Reference in New Issue
Block a user