Compare commits

...

150 Commits

Author SHA1 Message Date
Jesper
7c0bcbb5b7 simplificaiton + removal of fuzzy 2024-06-13 22:18:01 +02:00
Jesper
f9325f2870 Bring back scrollintoview 2024-06-13 08:12:41 +02:00
Jesper
4ab8d2120c Fix capitalization 2024-06-12 13:25:05 +02:00
Jesper
b0ab8320da Bring back apt search suggestions 2024-06-12 12:40:00 +02:00
Jesper
a31731f127 appGenericName, appComment and appExec to the fuzzysearch function 2024-06-12 12:19:05 +02:00
Jesper
2e0f503d08 Add appGenericName, appComment and appExec search 2024-06-12 11:51:31 +02:00
Jesper
3feda3af08 Exact search 2024-06-12 11:42:47 +02:00
Jesper
90ad278098 Remove whitespace 2024-06-12 10:38:27 +02:00
Jesper
cf76c4837e Fuzzy Search 2024-06-12 10:37:26 +02:00
Jesper
d8820edd7d Fuzzy search setting 2024-06-12 10:35:31 +02:00
Jesper
185b925b6b schema for fuzzysearch 2024-06-12 10:32:13 +02:00
Clement Lefebvre
7c034738de 6.1.7 2023-06-26 11:08:01 +02:00
Michael Webster
c3bea70396
Add our own 'all applications' icon for consistency.
Fixes 
2023-06-23 14:35:49 -04:00
Clement Lefebvre
9976deca28 6.1.6 2023-06-05 13:40:20 +01:00
Michael Webster
e4eab43d06
Use XAppGpuOffloadHelper for gpu offloading, respect
PrefersNonDefaultGPU desktop entry key.

XApp.util_gpu_offload_supported() is still used as a fallback
for older libxapp versions.
2023-05-10 11:52:02 -04:00
Clement Lefebvre
90688a9c9f 6.1.5 2022-11-21 11:57:44 +00:00
monsta
63e9034896
remove mint-common dependency ()
not needed after c293d485d9
2022-11-21 11:57:04 +00:00
Clement Lefebvre
d97d912a97 6.1.4 2021-07-01 13:39:21 +01:00
Clement Lefebvre
b08050dfbb Recent: Fix buttons layout
Fixes https://github.com/linuxmint/mint20.2-beta/issues/75
2021-07-01 13:38:23 +01:00
Clement Lefebvre
772a10bb7a 6.1.3 2021-06-25 16:34:28 +01:00
Vincent Vermeulen
9b96af6602 fix recently used documents sorting
recently used documents were incorrectly sorted on when a file was first added to recently-used.xbel file, not reflecting when it was opened again later
this fix changes it so they are sorted correctly on when they were last used (when last their entry was modified in recently-used.xbel)

fixes https://github.com/linuxmint/mint20.2-beta/issues/10
2021-06-23 15:03:21 -04:00
Clement Lefebvre
905b9b1a94 6.1.2 2021-01-02 22:21:46 +00:00
Clement Lefebvre
94dec8415f
Favorites: Add a scrolledwindow ()
* Favorites: Add a scrolledwindow

* Remove shadow around scrolledwindow
2021-01-02 22:21:02 +00:00
Vincent Vermeulen
57632a3e30 fix APT search
replace broken cgi.escape with working html.escape
2020-12-30 10:19:23 -05:00
Clement Lefebvre
b807a89b68 6.1.1 2020-06-17 16:31:01 +01:00
Michael Webster
645c941b0b recentHelper.py: Don't try to modify the recent list unless recents
are enabled.

This was throwing an error when launching a program with the recent
plugin disabled.
2020-06-17 10:46:27 -04:00
Michael Webster
30ef26afa0 applications.py: Fix dnd for re-ordering/adding favorites.
Fixes https://github.com/linuxmint/mint20-beta/issues/22
2020-06-17 10:45:10 -04:00
Clement Lefebvre
380e23125c 6.1.0 2020-06-10 16:43:41 +01:00
Michael Webster
8342b85b91 gtk: Fix a couple of deprecations 2020-06-10 11:42:03 -04:00
Michael Webster
23e3eb60df mintMenu.py: Refactor panel button construction to fix padding in
different configurations.
2020-06-10 11:39:03 -04:00
Clement Lefebvre
889771e8ae 6.0.9 2020-06-10 11:53:41 +01:00
Clement Lefebvre
cbdc961115 Add missing dependency 2020-06-10 11:53:23 +01:00
Clement Lefebvre
9365cc4ce0 6.0.8 2020-06-10 11:49:46 +01:00
Clement Lefebvre
e948102e58 Search: Fix searching for accentuated strings 2020-06-10 11:49:10 +01:00
Clement Lefebvre
696603df34 6.0.7 2020-05-14 08:15:27 +01:00
Clement Lefebvre
0606afc825 l10n: Update POT 2020-05-14 08:13:34 +01:00
Michael Webster
a819d570eb Support nvidia on-demand app launching.
Requires linuxmint/xapps@dcb600595d to function correctly.
2020-05-09 12:12:46 -04:00
Clement Lefebvre
b4f6cadcf0 6.0.6 2020-04-24 10:18:10 +01:00
Clement Lefebvre
8e1d467b78 Remove applet text by default 2020-04-24 10:17:26 +01:00
Clement Lefebvre
ad479c18b5 Switch to symbolic panel icon 2020-04-24 10:16:52 +01:00
Clement Lefebvre
9d56931ce0 6.0.5 2020-04-23 11:44:06 +01:00
Clement Lefebvre
1007793670 Fix typo in file path 2020-04-23 11:34:54 +01:00
Clement Lefebvre
4d435b42f1 6.0.4 2020-04-03 12:08:55 +01:00
Michael Webster
a2194beae8 debian: Fix dependencies to require python3 variants. 2020-04-01 15:57:11 -04:00
Clement Lefebvre
4bbd037178
Fix launching pkexec applications ()
When launching mintsources, timeshift or an app which Exec field (in the desktop file)
starts with pkexec, nothing happens and the output states:

"Refusing to render service to dead parents."

For some reason this does not happen on fresh LMDE 4 and Mint 19.3 installations,
but it happens on LMDE 3 -> LMDE 4 and 19.1 -> 19.3 upgrades.

Similar bugs were fixed in nemo and cinnamon. Pkexec is known to cause issues
depending on how it's launched.

Specifying DO_NOT_REAP_CHILD in the spawn flags helps here. Afaik it makes it so
we're the parent of the pkexec process during launch. Pkexec fails to launch
otherwise.

gather_pid_callback() does nothing, it's just there to ack the pid callback. Afaik
this helps preventing zombie [defunct] processes when they terminate.
2020-03-31 12:29:07 +01:00
Michael Webster
7a3532a395 about dialog: Fix program name and use a license type. 2020-03-30 19:31:45 -04:00
Michael Webster
ff93497459 recent.py: Allow the clear button to apply to whichever tab is currently
active.
2020-03-30 19:31:45 -04:00
Michael Webster
6f69d0e499 Use gsettings for recent and favorite apps
during migration,
- rename the old favorites file
- delete the old recent file
2020-03-30 19:30:54 -04:00
Michael Webster
d694deb65e all: Use python3 2020-03-30 19:14:05 -04:00
Clement Lefebvre
e603bee1f3 6.0.3 2019-12-10 16:08:20 +00:00
Clement Lefebvre
3c8e638c01 Prefer mozo over menulibre
mozo was fixed in 1.22.1 (new items can be created again).
menulibre suffers a new regression (new items are duplicated).

Prefer the homegrown solution again...
2019-12-10 16:06:40 +00:00
Clement Lefebvre
d80c8b9fa4 6.0.2 2019-11-29 12:02:01 +00:00
Clement Lefebvre
7cded29c87 Preferences: Fix IconChooser argument 2019-11-29 12:01:29 +00:00
Clement Lefebvre
82345466e9 6.0.1 2019-11-19 14:00:53 +00:00
Clement Lefebvre
1c4c4dd365 l10n: Update POT 2019-11-19 14:00:33 +00:00
Clement Lefebvre
52e82071b8 Add menu icon selection 2019-11-19 14:00:10 +00:00
Clement Lefebvre
22ceb1f3e1 Change default menu icon 2019-11-19 13:43:33 +00:00
Clement Lefebvre
34356389c3 6.0.0 2019-11-13 10:37:33 +01:00
Clement Lefebvre
d4b1535685 Add missing dep on python-gi-cairo 2019-11-13 10:33:07 +01:00
Clement Lefebvre
3d31537da0 Applet: Fix compatibility with symbolic pngs
See https://developer.gnome.org/gtk3/stable/gtk-encode-symbolic-svg.html

Also properly set the icon size.
2019-09-27 22:26:39 +01:00
Clement Lefebvre
74bdad23cf Applet: Fix changing the icon to a symbolic icon 2019-09-27 13:52:16 +01:00
Clement Lefebvre
01ae4b0f74 Applet: Fix handling of symbolic icons 2019-09-26 14:16:05 +01:00
Clement Lefebvre
298719a911 Fix blurry icon in HiDPI 2019-09-26 11:32:07 +01:00
Clement Lefebvre
cada2d72c1 5.9.9 2019-09-26 10:10:39 +01:00
Clement Lefebvre
3d38765734 Applications: Fix empty apps when a category has no icon 2019-09-26 09:57:10 +01:00
Clement Lefebvre
f1c321d255 RecentApp: Fix crash when location doesn't exist 2019-09-26 09:42:43 +01:00
monsta
c6aef1bb28 depend on python3-xapp instead of python-xapp ()
new preferences code added in 2a4267673d is actually Python 3
2019-09-05 13:07:53 +02:00
monsta
210eaf0929 plugins: fix number of callback arguments ()
* system management: fix number of callback arguments

fixes runtime warning:
TypeError: changePluginSize() takes exactly 4 arguments (3 given)

looks like it was overlooked in 66f76df4d3

* places: remove leftover argument from callback
2019-08-19 15:23:46 +02:00
monsta
99797f3a40 depend on gir1.2-matedesktop-2.0 instead of gir1.2-mate-desktop ()
gir1.2-mate-desktop is a transitional package
2019-08-19 15:22:35 +02:00
Clement Lefebvre
703068ab65 5.9.8 2019-07-29 12:24:17 +02:00
Clement Lefebvre
69475bbb38 Don't depend on a menu editor
mintMenu also runs as fallback in Cinnamon,
we don't want to pull an editor there.
2019-07-29 12:23:37 +02:00
Clement Lefebvre
c02fc00522 5.9.7 2019-07-23 12:34:22 +02:00
Clement Lefebvre
6f7a4bf3a6 Add support for menulibre 2019-07-23 12:33:52 +02:00
Clement Lefebvre
3173f6cc6b 5.9.6 2019-07-22 13:46:09 +02:00
Clement Lefebvre
048b6c042c l10n: Update POT 2019-07-22 13:45:21 +02:00
Clement Lefebvre
b7a1fa0b94 Remove support for custom colors
Since the move to GTK3 custom color support is extremely hacky and buggy:

- It relies on gtk_widget_override_color() which is deprecated
- Only one call to gtk_widget_override_color() is functional, successive
calls are ignored, leading to the menu not changing colors when the custom
colors are changed or enabled/disabled.
- RegenPlugins leads to a loss of color.
- Theme changes are broken due to overridden colors.

The feature is also very niche and quite unecessary. If a custom color is
better than the default one we should apply the change in the theme or
define a new theme which inherits ours and simply defines the menu
differently.

The way to do this, in line with GTK's design, is via CSS at theme level.
2019-07-22 13:30:59 +02:00
Clement Lefebvre
3ad195599b Fix crash on non-existing favorites
Corner case when rebuilding favs from scratch
2019-07-21 16:52:46 +02:00
Clement Lefebvre
89f9071bd4 l10n: Update POT 2019-07-21 16:08:34 +02:00
Clement Lefebvre
42ef09742a Switch to symbolic icons 2019-07-21 16:01:50 +02:00
Clement Lefebvre
3170a2a6b9 5.9.5 2019-07-17 15:49:31 +02:00
Clement Lefebvre
b41e843aa0 Fix default favorites not being created 2019-07-17 15:49:04 +02:00
Clement Lefebvre
3c45ca9c25 5.9.4 2019-07-17 11:38:58 +02:00
Clement Lefebvre
2419c9d36c Packaging: Add dependency on python3-xlib
preferences.py are run using python3, when they import
the keybdinging module, it needs access to python3-xlib.
2019-07-17 11:37:52 +02:00
Clement Lefebvre
d0d29936f7 5.9.3 2019-07-05 11:32:15 +02:00
Clement Lefebvre
b5f4789090 Applications: Port to GI MateMenu 2019-07-05 11:31:30 +02:00
Clement Lefebvre
bc3c9078b6 5.9.2 2019-06-30 15:44:13 +02:00
Clement Lefebvre
7a3891647f Applet icon: Add support for icon names 2019-06-13 14:41:18 +01:00
Clement Lefebvre
a6ec1b3114 Preferences: Fix support for low resolutions 2019-05-21 10:18:03 +01:00
Clement Lefebvre
66f76df4d3 Remove obsolete code 2019-05-20 15:44:26 +01:00
Clement Lefebvre
8ef7e15d19 Recent: Move documents to the left
It's more useful than recent apps

Fixes https://github.com/linuxmint/mintmenu/issues/186
2019-05-20 15:19:36 +01:00
Clement Lefebvre
ca78764c13 Fix l10n
Move .ui to share folder
Fix makepot and translations
2019-05-20 14:50:32 +01:00
Clement Lefebvre
2a4267673d Revamp preferences
Use xapp widgets
Rewrite
2019-05-20 14:50:28 +01:00
Clement Lefebvre
e2e4531380 l10n: Update POT 2019-05-14 17:24:55 +01:00
Clement Lefebvre
476cf29d38 Add option to show search bar on top
Ported from https://github.com/linuxmint/mintmenu/pull/221
2019-05-14 17:15:42 +01:00
Clement Lefebvre
1984d57525 Fix tooltips and make them optional, remove category tooltips in apps
Ported from https://github.com/linuxmint/mintmenu/pull/226
2019-05-14 16:49:40 +01:00
Clement Lefebvre
65c9c3e003 Applications: Categories column always use natural width
Ported from https://github.com/linuxmint/mintmenu/pull/227
2019-05-14 14:20:37 +01:00
Clement Lefebvre
7fa91f721e Configuration screen: Fix alignmnents and margins
Credits to:
https://github.com/linuxmint/mintmenu/pull/222
https://github.com/linuxmint/mintmenu/pull/224
2019-05-14 14:09:45 +01:00
Clement Lefebvre
c293d485d9 Inject the app version during the build 2019-02-27 17:12:14 +00:00
Clement Lefebvre
cd43e2e9b9 About: Fix the path for mintcommon's version.py
It changed in mintcommon v2
2019-02-27 14:31:55 +00:00
gm10
8988476df2 Preferences: Normalize margins/alignment/layout between tabs () 2019-02-20 14:12:07 +00:00
gm10
7b34063038 Preferences: Change "recent documents" to "recently used applications and documents" plugin () 2019-02-20 10:25:00 +00:00
gm10
2e42cabf0a Applications: Replace the deprecated icon for adding packages () 2019-02-20 10:24:34 +00:00
gm10
c2a0947dfd Applications: Replace deprecated xpad/ypad with margin-XYZ parameters () 2019-02-20 10:24:19 +00:00
gm10
d5147caf9b Applications: Remove Search label () 2019-02-20 10:24:04 +00:00
gm10
35fd4cce15 Preferences: Fix deprecated alignment parameters () 2019-02-20 10:23:27 +00:00
gm10
7504a11bba remove unused variables from favoritesBuildLauncher 2019-02-12 16:31:46 +00:00
gm10
37cd852738 Applications.py: Clean up more whitespace and line lengths 2019-02-12 16:31:43 +00:00
Clement Lefebvre
4ee04c3869 Fix msgids and glade files 2019-02-12 13:52:47 +00:00
gm10
8844d89cec Clean up i18n, remove unnecessary duplication 2019-02-12 13:52:47 +00:00
gm10
d7ec861a4f Change makepot to parse .glade files () 2019-02-12 13:12:04 +00:00
gm10
33865c4dc9 keybinding: Remove left-over debug messages () 2019-02-12 13:10:58 +00:00
gm10
3c6e384a1d Assorted cleanup, fixes and performance improvements ()
* initial cleanup with some debug messaging

* further cleanup, mostly coding style

* - more cleanup, and speed-up
- more fixes, including many icon and encoding related issues
- replace some icons and remove compile.py
- prepare for python3 port as much as possible

* remove some more unneeded files, few left-over cleanups

* move some external scripts to python3 already

* Fix and clean up add_search_suggestions and add_apt_filter_results logic

* more cleanup, thx Codacity

* fix issue with a path

* add a killall to the test script, fix a method declaration

* fix custom colour setting

* keybinding: re-add GdkX11

* re-add mint-common dep

* Use os.path.expanduser("~") instead of os.environ

* revert re-add GdkX11, but import Gtk first
2019-02-11 13:54:20 +00:00
Andrew
d3ce506d45 Fix broke running with "xdg-su" in exec field () 2019-01-21 15:50:58 +00:00
gm10
2f1329de7d Applications: Fix keypress event handler ()
* Applications: Fix keypress event handler

* further fix and simplify the keypress handler

* disconnect the keyPress handler when destroying the plugin
2019-01-21 15:37:01 +00:00
gm10
6f34ff8538 Places: Don't hardcode file browser () 2019-01-21 15:20:00 +00:00
Clement Lefebvre
9e97c7d33b 5.9.1 2018-11-30 20:17:51 +00:00
Clement Lefebvre
5520ad9d12 Change default menu icon 2018-11-30 20:17:30 +00:00
Clement Lefebvre
7442d496ec 5.9.0 2018-07-08 16:00:49 +02:00
Clement Lefebvre
841bce86cb Packaging: Don't force dependency on MATE 1.18+
In LMDE MATE 1.16 is using GTK3.
2018-07-08 16:00:01 +02:00
Clement Lefebvre
11f49ebe37 5.8.9 2018-06-08 12:21:36 +01:00
Clement Lefebvre
54e695b056 Fix RecentHelper spam in logs
When recent plugin is disabled, recentAppBox is None,
resulting in errors in the logs:

org.mate.panel.applet.MintMenuAppletFactory[1038]: File “/usr/lib/linuxmint/mintMenu/plugins/recentHelper.py”, line 130, in applicationButtonClicked
org.mate.panel.applet.MintMenuAppletFactory[1038]: doRecentApps()
org.mate.panel.applet.MintMenuAppletFactory[1038]: File “/usr/lib/linuxmint/mintMenu/plugins/recentHelper.py”, line 112, in doRecentApps
org.mate.panel.applet.MintMenuAppletFactory[1038]: for i in recentAppBox.get_children():
org.mate.panel.applet.MintMenuAppletFactory[1038]: AttributeError: ‘NoneType’ object has no attribute ‘get_children’
2018-06-08 12:19:59 +01:00
Clement Lefebvre
c2ddf199aa 5.8.8 2018-05-31 13:54:05 +01:00
Clement Lefebvre
9f22254425 Don't set window decorations
This works ootb with recent GTK versions now.
The workaround we used creates problems when run in HiDPI
(the window is misplaced and its size is twice larger).
2018-05-31 12:56:16 +01:00
Victor Kareh
45faa83e52 Fix menu positioning to account for multiple monitors ()
* Fix menu positioning to account for multiple monitors

It takes into account the orientation of the panel applet. It also
offsets its right/left positioning to avoid clipping.

Fixes 

* Take into account possible clipping in the top/bottom of the monitor
2018-05-31 10:46:35 +01:00
Victor Kareh
ce03b1674d Support correct widget sizes for HiDPI displays 2018-05-31 10:42:30 +01:00
Clement Lefebvre
eab381470d 5.8.7 2018-05-30 18:20:33 +01:00
monsta
66a9217da7 add missing deps on python-apt and python-configobj () 2018-05-30 17:19:56 +00:00
Clement Lefebvre
e374ee5e9f 5.8.6 2018-05-15 15:14:13 +01:00
Clement Lefebvre
d64ffb9a94 Favorites: Remove pidgin, add pix, fix gnome-calculator.. 2018-05-15 15:13:06 +01:00
Clement Lefebvre
018d67e1bb 5.8.5 2018-05-07 12:27:04 +01:00
Clement Lefebvre
469eaf57e5 mint-remove-application: Don't use gksu
mint-common now uses pkexec internally
2018-03-13 15:05:17 +00:00
Vincent Vermeulen
5f190ceac9 Highlight previous search so typing overwrites it ()
* Highlight previous search so typing overwrites it

When set to remember the last search, on next opening the menu it would display the last search and put the cursor at the end of it. If you wanted to do a new search you would first have to delete your previous search. More convenient if you starting typing it overwrites the last search and only if you place the cursor with arrow keys or mouse it switches to insert / append text to the last search.

There was existing code that did in fact do that but it was in the wrong place. This patch puts it in the right place. Fixes .

* Remove code to set position at end

Because it doesn't do anything when you select all the text.
2018-03-09 15:45:25 +00:00
Vincent Vermeulen
448299efb2 safe apt search with shell escapes ()
This fixes .

add_apt_filter_results ran a command with keywords from the menu's Search entry without shell escaping. This made it possible to have it run shell commands by using command substitution. E.g. searching for `$(xeyes)` would run xeyes.

When/if mintmenu gets ported to Python3 pipes.quote should be replaced by shlex.quote.
2018-03-07 09:43:04 +00:00
Clement Lefebvre
ed5a2b35fb 5.8.4 2017-11-12 14:34:11 +00:00
Clement Lefebvre
73a412acea Don't run mintinstall as root
It now runs in user mode.
2017-11-12 14:33:42 +00:00
Clement Lefebvre
7e005b94ea 5.8.3 2017-11-11 09:01:45 +00:00
Hrotkó Gábor
de3aed33f8 Show recently used apps ()
Show recently used apps
2017-11-11 08:59:49 +00:00
wesdawg
8f00708252 Search updates ()
* Update search URLs to use HTTPS

* Update Wikipedia icon
2017-09-25 15:54:35 +02:00
Leigh Scott
ce675497d1 fix indent () 2017-08-26 17:35:45 +02:00
Clement Lefebvre
a082473a66 5.8.2 2017-06-27 10:02:38 +02:00
Clement Lefebvre
824efd26a9 Recent: Expand plugin to fill empty space 2017-06-27 09:01:18 +01:00
Clement Lefebvre
54dd78bdf2 5.8.1 2017-06-12 15:55:25 +01:00
monsta
d6ebffa9b9 build: add build-dep on dh-python to fix build warning () 2017-06-12 15:54:23 +01:00
Clement Lefebvre
7e19123adc Add exception handling around keybinder
The keybinder isn't functional in guest sessions.
2017-06-12 15:44:24 +01:00
Clement Lefebvre
0d3702b716 Add exception handling around pointer monitor
The pointer monitor isn't functional in guest sessions.
2017-06-12 15:36:46 +01:00
monsta
1d739da691 applications: don't spam system log with system tools names () 2017-05-25 15:04:48 +01:00
Clement Lefebvre
27c4a837da 5.8.0 2017-05-06 16:19:16 +01:00
Clement Lefebvre
1091f70df0 l10n: Update POT file 2017-05-06 16:18:06 +01:00
Clement Lefebvre
e7931f2956 Places: Explicitly import GLib
Not actually needed, but for clarity and consistency with other plugins.
2017-05-06 14:10:07 +01:00
Alexei Sorokin
bd2e150e6e Use the Gtk3 bookmarks location () 2017-05-06 14:07:02 +01:00
45 changed files with 3861 additions and 5736 deletions

341
debian/changelog vendored
View File

@ -1,3 +1,344 @@
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
* Prefer mozo over menulibre
-- Clement Lefebvre <root@linuxmint.com> Tue, 10 Dec 2019 16:08:06 +0000
mintmenu (6.0.2) tricia; urgency=medium
* Preferences: Fix IconChooser argument
-- Clement Lefebvre <root@linuxmint.com> Fri, 29 Nov 2019 12:01:48 +0000
mintmenu (6.0.1) tricia; urgency=medium
* Change default menu icon
* Add menu icon selection
* l10n: Update POT
-- Clement Lefebvre <root@linuxmint.com> Tue, 19 Nov 2019 14:00:41 +0000
mintmenu (6.0.0) tricia; urgency=medium
* Fix blurry icon in HiDPI
* Applet: Fix handling of symbolic icons
* Applet: Fix changing the icon to a symbolic icon
* Applet: Fix compatibility with symbolic pngs
* Add missing dep on python-gi-cairo
-- Clement Lefebvre <root@linuxmint.com> Wed, 13 Nov 2019 10:37:02 +0100
mintmenu (5.9.9) tina; urgency=medium
[ monsta ]
* depend on gir1.2-matedesktop-2.0 instead of gir1.2-mate-desktop (#231)
* plugins: fix number of callback arguments (#236)
* depend on python3-xapp instead of python-xapp (#238)
[ Clement Lefebvre ]
* RecentApp: Fix crash when location doesn't exist
* Applications: Fix empty apps when a category has no icon
-- Clement Lefebvre <root@linuxmint.com> Thu, 26 Sep 2019 10:09:57 +0100
mintmenu (5.9.8) tina; urgency=medium
* Don't depend on a menu editor
-- Clement Lefebvre <root@linuxmint.com> Mon, 29 Jul 2019 12:24:03 +0200
mintmenu (5.9.7) tina; urgency=medium
* Add support for menulibre
-- Clement Lefebvre <root@linuxmint.com> Tue, 23 Jul 2019 12:34:08 +0200
mintmenu (5.9.6) tina; urgency=medium
* Switch to symbolic icons
* Fix crash on non-existing favorites
* Remove support for custom colors
* l10n: Update POT
-- Clement Lefebvre <root@linuxmint.com> Mon, 22 Jul 2019 13:45:51 +0200
mintmenu (5.9.5) tina; urgency=medium
* Fix default favorites not being created
-- Clement Lefebvre <root@linuxmint.com> Wed, 17 Jul 2019 15:49:20 +0200
mintmenu (5.9.4) tina; urgency=medium
* Packaging: Add dependency on python3-xlib
-- Clement Lefebvre <root@linuxmint.com> Wed, 17 Jul 2019 11:38:44 +0200
mintmenu (5.9.3) tina; urgency=medium
* Applications: Port to GI MateMenu
-- Clement Lefebvre <root@linuxmint.com> Fri, 05 Jul 2019 11:32:04 +0200
mintmenu (5.9.2) tina; urgency=medium
[ gm10 ]
* Places: Don't hardcode file browser (#204)
* Applications: Fix keypress event handler (#205)
[ Andrew ]
* Fix broke running with "xdg-su" in exec field (#200)
[ gm10 ]
* Assorted cleanup, fixes and performance improvements (#206)
* keybinding: Remove left-over debug messages (#213)
* Change makepot to parse .glade files (#210)
* Clean up i18n, remove unnecessary duplication
[ Clement Lefebvre ]
* Fix msgids and glade files
[ gm10 ]
* Applications.py: Clean up more whitespace and line lengths
* remove unused variables from favoritesBuildLauncher
* Preferences: Fix deprecated alignment parameters (#219)
* Applications: Remove Search label (#217)
* Applications: Replace deprecated xpad/ypad with margin-XYZ parameters (#218)
* Applications: Replace the deprecated icon for adding packages (#216)
* Preferences: Change "recent documents" to "recently used applications and documents" plugin (#215)
* Preferences: Normalize margins/alignment/layout between tabs (#220)
[ Clement Lefebvre ]
* About: Fix the path for mintcommon's version.py
* Inject the app version during the build
* Configuration screen: Fix alignmnents and margins
* Applications: Categories column always use natural width
* Fix tooltips and make them optional, remove category tooltips in apps
* Add option to show search bar on top
* l10n: Update POT
* Revamp preferences
* Fix l10n
* Recent: Move documents to the left
* Remove obsolete code
* Preferences: Fix support for low resolutions
* Applet icon: Add support for icon names
-- Clement Lefebvre <root@linuxmint.com> Sun, 30 Jun 2019 15:44:01 +0200
mintmenu (5.9.1) tessa; urgency=medium
* Change default menu icon
-- Clement Lefebvre <root@linuxmint.com> Fri, 30 Nov 2018 20:17:38 +0000
mintmenu (5.9.0) tara; urgency=medium
* Packaging: Don't force dependency on MATE 1.18+
-- Clement Lefebvre <root@linuxmint.com> Sun, 08 Jul 2018 16:00:34 +0200
mintmenu (5.8.9) tara; urgency=medium
* Fix RecentHelper spam in logs
-- Clement Lefebvre <root@linuxmint.com> Fri, 08 Jun 2018 12:21:24 +0100
mintmenu (5.8.8) tara; urgency=medium
[ Victor Kareh ]
* Support correct widget sizes for HiDPI displays
* Fix menu positioning to account for multiple monitors (#24)
[ Clement Lefebvre ]
* Don't set window decorations
-- Clement Lefebvre <root@linuxmint.com> Thu, 31 May 2018 13:53:53 +0100
mintmenu (5.8.7) tara; urgency=medium
[ monsta ]
* add missing deps on python-apt and python-configobj (#193)
-- Clement Lefebvre <root@linuxmint.com> Wed, 30 May 2018 18:20:21 +0100
mintmenu (5.8.6) tara; urgency=medium
* Favorites: Remove pidgin, add pix, fix gnome-calculator..
-- Clement Lefebvre <root@linuxmint.com> Tue, 15 May 2018 15:13:59 +0100
mintmenu (5.8.5) tara; urgency=medium
[ Vincent Vermeulen ]
* safe apt search with shell escapes (#190)
* Highlight previous search so typing overwrites it (#191)
[ Clement Lefebvre ]
* mint-remove-application: Don't use gksu
-- Clement Lefebvre <root@linuxmint.com> Mon, 07 May 2018 12:26:50 +0100
mintmenu (5.8.4) sylvia; urgency=medium
* Don't run mintinstall as root
-- Clement Lefebvre <root@linuxmint.com> Sun, 12 Nov 2017 14:33:53 +0000
mintmenu (5.8.3) sylvia; urgency=medium
[ Leigh Scott ]
* fix indent (#183)
[ wesdawg ]
* Search updates (#185)
[ Hrotkó Gábor ]
* Show recently used apps (#167)
-- Clement Lefebvre <root@linuxmint.com> Sat, 11 Nov 2017 09:00:30 +0000
mintmenu (5.8.2) sonya; urgency=medium
* Recent: Expand plugin to fill empty space
-- Clement Lefebvre <root@linuxmint.com> Tue, 27 Jun 2017 10:02:19 +0200
mintmenu (5.8.1) sonya; urgency=medium
[ monsta ]
* applications: don't spam system log with system tools names (#177)
[ Clement Lefebvre ]
* Add exception handling around pointer monitor
* Add exception handling around keybinder
[ monsta ]
* build: add build-dep on dh-python to fix build warning (#179)
-- Clement Lefebvre <root@linuxmint.com> Mon, 12 Jun 2017 15:54:53 +0100
mintmenu (5.8.0) sonya; urgency=medium
[ Alexei Sorokin ]
* Use the Gtk3 bookmarks location (#174)
[ Clement Lefebvre ]
* Places: Explicitly import GLib
* l10n: Update POT file
-- Clement Lefebvre <root@linuxmint.com> Sat, 06 May 2017 16:18:18 +0100
mintmenu (5.7.9) sonya; urgency=medium
[ monsta ]

28
debian/control vendored
View File

@ -2,23 +2,31 @@ Source: mintmenu
Section: admin
Priority: optional
Maintainer: Clement Lefebvre <root@linuxmint.com>
Build-Depends: debhelper (>= 9), python
Build-Depends: debhelper (>= 9), python3, dh-python,
Standards-Version: 3.9.5
Package: mintmenu
Architecture: all
Depends:
${python:Depends},
${misc:Depends},
python (>= 2.4), python (<< 3),
mint-common,
python-mate-menu, python-xdg, xdg-utils,
python-setproctitle,
python3,
python3-apt,
python3-configobj,
python3-gi-cairo,
python3-setproctitle,
python3-unidecode,
python3-xlib,
python3-xdg,
python3-xapp,
python3-xlib,
xdg-utils,
libglib2.0-bin,
mate-menus,
gvfs-bin,
python-xlib,
gir1.2-mate-panel (>= 1.18.0), gir1.2-gtk-3.0, gir1.2-mate-desktop (>= 1.18.0),
mozo
gir1.2-matemenu-2.0,
gir1.2-matepanelapplet-4.0,
gir1.2-gtk-3.0,
gir1.2-matedesktop-2.0,
gir1.2-xapp-1.0
Description: Advanced MATE menu
One of the most advanced menus under Linux. MintMenu supports filtering,
favorites, easy-uninstallation, autosession, and many other features.

5
debian/postinst vendored
View File

@ -1,5 +1,5 @@
#!/bin/sh
# postinst script
# postinst script
# see: dh_installdeb(1)
set -e
@ -18,7 +18,8 @@ set -e
case "$1" in
configure)
glib-compile-schemas /usr/share/glib-2.0/schemas
glib-compile-schemas /usr/share/glib-2.0/schemas
python3 -m compileall -qf /usr/lib/linuxmint/mintMenu/
;;
abort-upgrade|abort-remove|abort-deconfigure)

11
debian/rules vendored
View File

@ -1,4 +1,13 @@
#!/usr/bin/make -f
DEB_VERSION := $(shell dpkg-parsechangelog | egrep '^Version:' | cut -f 2 -d ' ')
%:
dh ${@} --with python2
dh ${@} --with-python3
# Inject version number in the code
override_dh_installdeb:
dh_installdeb
for pkg in $$(dh_listpackages -i); do \
find debian/$$pkg -type f -exec sed -i -e s/__DEB_VERSION__/$(DEB_VERSION)/g {} +; \
done

10
makepot
View File

@ -1,4 +1,12 @@
#!/bin/bash
xgettext --language=Python --keyword=_ --output=mintmenu.pot usr/lib/linuxmint/mintMenu/mintMenu.py usr/lib/linuxmint/mintMenu/mintMenuConfig.py usr/lib/linuxmint/mintMenu/keybinding.py usr/lib/linuxmint/mintMenu/plugins/recent.py usr/lib/linuxmint/mintMenu/plugins/applications.py usr/lib/linuxmint/mintMenu/plugins/system_management.py usr/lib/linuxmint/mintMenu/plugins/places.py
intltool-extract --type=gettext/glade usr/share/linuxmint/mintmenu/applications.ui
intltool-extract --type=gettext/glade usr/share/linuxmint/mintmenu/main.ui
intltool-extract --type=gettext/glade usr/share/linuxmint/mintmenu/places.ui
intltool-extract --type=gettext/glade usr/share/linuxmint/mintmenu/preferences.ui
intltool-extract --type=gettext/glade usr/share/linuxmint/mintmenu/recent.ui
intltool-extract --type=gettext/glade usr/share/linuxmint/mintmenu/system.ui
xgettext --language=Python --keyword=_ --keyword=N_ --output=mintmenu.pot usr/lib/linuxmint/mintMenu/*.py usr/lib/linuxmint/mintMenu/plugins/*.py usr/share/linuxmint/mintmenu/*.ui.h
rm -rf usr/share/linuxmint/mintmenu/*.ui.h

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 15:36+0000\n"
"POT-Creation-Date: 2020-05-14 08:12+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,532 +17,574 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: usr/lib/linuxmint/mintMenu/mintMenu.py:48
msgid "Menu"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenu.py:247
msgid "Couldn't load plugin:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenu.py:319
msgid "Couldn't initialize plugin"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenu.py:727
msgid "Advanced MATE Menu"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenu.py:815
msgid "Preferences"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenu.py:818
msgid "Edit menu"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenu.py:821
msgid "Reload plugins"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenu.py:824
msgid "About"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:42
msgid "Menu preferences"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:45
msgid "Always start with favorites pane"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:46
msgid "Show button icon"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:47
msgid "Enable Internet search"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:48
msgid "Use custom colors"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:49
msgid "Show recent documents plugin"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:50
msgid "Show applications plugin"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:51
msgid "Show system plugin"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:52
msgid "Show places plugin"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:54
msgid "Show application comments"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:55
msgid "Show category icons"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:56
msgid "Hover"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:57
msgid "Remember the last category or search"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:58
msgid "Search for packages to install"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:59
msgid "Swap name and generic name"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:61
msgid "Border width:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:62
msgid "pixels"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:64
msgid "Button text:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:65
msgid "Options"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:66
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:203
msgid "Applications"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:68
msgid "Theme"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:69
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:200
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:201
msgid "Favorites"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:70
msgid "Main button"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:71
msgid "Plugins"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:73
msgid "Background:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:74
msgid "Headings:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:75
msgid "Borders:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:76
msgid "Theme:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:80
msgid "Number of columns:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:81
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:82
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:83
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:84
msgid "Icon size:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:85
msgid "Hover delay (ms):"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:86
msgid "Button icon:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:87
msgid "Search command:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:89
#: usr/lib/linuxmint/mintMenu/plugins/places.py:44
msgid "Places"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:90
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:102
msgid "Allow Scrollbar"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:91
msgid "Show GTK Bookmarks"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:92
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:103
msgid "Height:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:93
msgid "Toggle Default Places:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:94
#: usr/lib/linuxmint/mintMenu/plugins/places.py:141
msgid "Computer"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:95
#: usr/lib/linuxmint/mintMenu/plugins/places.py:151
msgid "Home Folder"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:96
#: usr/lib/linuxmint/mintMenu/plugins/places.py:164
#: usr/lib/linuxmint/mintMenu/plugins/places.py:166
msgid "Network"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:97
#: usr/lib/linuxmint/mintMenu/plugins/places.py:188
msgid "Desktop"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:98
#: usr/lib/linuxmint/mintMenu/plugins/places.py:198
msgid "Trash"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:99
msgid "Custom Places:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:101
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:40
msgid "System"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:104
msgid "Toggle Default Items:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:105
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:136
msgid "Software Manager"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:106
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:143
msgid "Package Manager"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:107
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:150
msgid "Control Center"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:108
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:160
msgid "Terminal"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:109
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:177
msgid "Lock Screen"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:110
msgid "Log Out"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:111
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:194
msgid "Quit"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:113
msgid "Edit Place"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:114
msgid "New Place"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:115
msgid "Select a folder"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:145
msgid "Keyboard shortcut:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:151
msgid "Images"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:269
msgid "Name"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:270
msgid "Path"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:285
msgid "Desktop theme"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:434
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:465
msgid "Name:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:435
#: usr/lib/linuxmint/mintMenu/mintMenuConfig.py:466
msgid "Path:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/keybinding.py:199
#: usr/lib/linuxmint/mintMenu/keybinding.py:168
msgid "Click to set a new accelerator key for opening and closing the menu. "
msgstr ""
#: usr/lib/linuxmint/mintMenu/keybinding.py:200
#: usr/lib/linuxmint/mintMenu/keybinding.py:169
msgid "Press Escape or click again to cancel the operation. "
msgstr ""
#: usr/lib/linuxmint/mintMenu/keybinding.py:201
#: usr/lib/linuxmint/mintMenu/keybinding.py:170
msgid "Press Backspace to clear the existing keybinding."
msgstr ""
#: usr/lib/linuxmint/mintMenu/keybinding.py:214
#: usr/lib/linuxmint/mintMenu/keybinding.py:182
msgid "Pick an accelerator"
msgstr ""
#: usr/lib/linuxmint/mintMenu/keybinding.py:267
#: usr/lib/linuxmint/mintMenu/keybinding.py:234
msgid "<not set>"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/recent.py:31
msgid "Recent documents"
#: usr/lib/linuxmint/mintMenu/mintMenu.py:34
msgid "Menu"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:198
msgid "Search:"
#: usr/lib/linuxmint/mintMenu/mintMenu.py:153
msgid "Couldn't load plugin:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:202
msgid "All applications"
#: usr/lib/linuxmint/mintMenu/mintMenu.py:212
msgid "Couldn't initialize plugin"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:595
#, python-format
msgid "Search DuckDuckGo for %s"
#: usr/lib/linuxmint/mintMenu/mintMenu.py:587
msgid "Advanced MATE Menu"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:602
#, python-format
msgid "Search Wikipedia for %s"
#: usr/lib/linuxmint/mintMenu/mintMenu.py:698
msgid "Preferences"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:618
#, python-format
msgid "Lookup %s in Dictionary"
#: usr/lib/linuxmint/mintMenu/mintMenu.py:702
msgid "Edit menu"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenu.py:706
msgid "Reload plugins"
msgstr ""
#: usr/lib/linuxmint/mintMenu/mintMenu.py:709
msgid "About"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:24
msgid "Custom Place"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:35
msgid "Name:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:39
msgid "Select a folder"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:41
msgid "Folder:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:60
msgid "Menu preferences"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:67
msgid "Menu button"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:67
msgid "Applet button in the panel"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:68
msgid "Show button icon"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:69
msgid "Button text"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:71
#: usr/lib/linuxmint/mintMenu/preferences.py:74
msgid "Menu icons"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:73
msgid "Button icon"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:80
msgid "Keyboard shortcut"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:86
msgid "Options"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:86
msgid "General applet options"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:87
msgid "Show system management"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:90
msgid "Show places"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:93
msgid "Show recently used documents and applications"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:97
msgid "Show tooltips"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:101
msgid "Theme"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:101
msgid "Custom theme selection"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:103
msgid "Desktop theme"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:113
msgid "Theme:"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:115
msgid "Icon sizes"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:115
msgid "The size of the icons"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:116
#: usr/share/linuxmint/mintmenu/applications.ui.h:1
#: usr/share/linuxmint/mintmenu/preferences.ui.h:3
msgid "Favorites"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:117
#: usr/share/linuxmint/mintmenu/applications.ui.h:3
#: usr/share/linuxmint/mintmenu/preferences.ui.h:4
#: usr/share/linuxmint/mintmenu/recent.ui.h:2
msgid "Applications"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:118
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:41
#: usr/share/linuxmint/mintmenu/preferences.ui.h:5
msgid "System"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:119
#: usr/lib/linuxmint/mintMenu/plugins/places.py:46
#: usr/share/linuxmint/mintmenu/preferences.ui.h:6
msgid "Places"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:124
#: usr/lib/linuxmint/mintMenu/preferences.py:142
#: usr/lib/linuxmint/mintMenu/preferences.py:150
#: usr/lib/linuxmint/mintMenu/preferences.py:166
msgid "Layout"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:124
#: usr/lib/linuxmint/mintMenu/preferences.py:142
#: usr/lib/linuxmint/mintMenu/preferences.py:150
#: usr/lib/linuxmint/mintMenu/preferences.py:166
msgid "Section layout"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:125
msgid "Show search bar on top"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:126
msgid "Show applications comments"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:128
msgid "Categories"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:128
msgid "Applications categories"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:129
msgid "Show category icons"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:130
msgid "Switch categories on hover"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:131
msgid "Hover delay"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:131
msgid "milliseconds"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:133
msgid "Search"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:133
msgid "Search options"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:134
msgid "Search for packages to install"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:135
msgid "Remember the last category or search"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:136
msgid "Enable Internet search"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:137
msgid "Search command"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:143
msgid "Number of columns"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:144
msgid "Swap name and generic name"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:145
msgid "Show favorites when the menu is open"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:151
#: usr/lib/linuxmint/mintMenu/preferences.py:167
msgid "Custom height"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:152
#: usr/lib/linuxmint/mintMenu/preferences.py:168
msgid "Height"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:154
#: usr/lib/linuxmint/mintMenu/preferences.py:170
msgid "Items"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:154
#: usr/lib/linuxmint/mintMenu/preferences.py:170
msgid "Toggle default items"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:155
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:147
msgid "Software Manager"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:156
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:154
msgid "Package Manager"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:157
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:161
msgid "Control Center"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:158
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:168
msgid "Terminal"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:159
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:178
msgid "Lock Screen"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:160
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:185
msgid "Logout"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:161
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:192
msgid "Quit"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:171
#: usr/lib/linuxmint/mintMenu/plugins/places.py:137
msgid "Computer"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:172
#: usr/lib/linuxmint/mintMenu/plugins/places.py:144
msgid "Home Folder"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:173
#: usr/lib/linuxmint/mintMenu/plugins/places.py:154
#: usr/lib/linuxmint/mintMenu/plugins/places.py:156
msgid "Network"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:174
#: usr/lib/linuxmint/mintMenu/plugins/places.py:175
msgid "Desktop"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:175
#: usr/lib/linuxmint/mintMenu/plugins/places.py:182
msgid "Trash"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:176
msgid "GTK Bookmarks"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:178
msgid "Custom places"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:178
msgid "You can add your own places in the menu"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:193
msgid "Name"
msgstr ""
#: usr/lib/linuxmint/mintMenu/preferences.py:194
msgid "Path"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:625
#, python-format
msgid "Search DuckDuckGo for %s"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:627
#, python-format
msgid "Search Wikipedia for %s"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:630
#, python-format
msgid "Lookup %s in Dictionary"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:632
#, python-format
msgid "Search Computer for %s"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:703
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:756
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:690
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:732
#, python-format
msgid "Install package '%s'"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:890
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:960
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:836
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:911
msgid "Add to desktop"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:891
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:961
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:837
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:912
msgid "Add to panel"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:893
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:942
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:839
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:889
msgid "Insert space"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:894
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:943
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:840
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:890
msgid "Insert separator"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:896
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:964
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:842
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:915
msgid "Launch when I log in"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:898
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:966
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:844
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:917
msgid "Launch"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:899
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:845
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:918
msgid "Run with NVIDIA GPU"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:846
msgid "Remove from favorites"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:901
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:970
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:848
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:922
msgid "Edit properties"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:941
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:888
msgid "Remove"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:963
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:914
msgid "Show in my favorites"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:967
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:919
msgid "Uninstall"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:968
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:920
msgid "Delete from menu"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1025
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:988
msgid "Search DuckDuckGo"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1032
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:989
msgid "Search Wikipedia"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1042
msgid "Lookup Dictionary"
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:991
msgid "Search Dictionary"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1049
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:992
msgid "Search Computer"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1059
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:994
msgid "Find Software"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1066
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:995
msgid "Find Tutorials"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1073
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:996
msgid "Find Hardware"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1080
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:997
msgid "Find Ideas"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1087
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:998
msgid "Find Users"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1547
msgid ""
"Couldn't save favorites. Check if you have write access to ~/.linuxmint/"
"mintMenu"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1758
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1642
msgid "All"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1758
#: usr/lib/linuxmint/mintMenu/plugins/applications.py:1644
msgid "Show all applications"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:140
msgid "Browse and install available software"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:147
msgid "Install, remove and upgrade software packages"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:157
msgid "Configure your system"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:167
msgid "Use the command line"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:170
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:187
msgid "Logout"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:174
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:191
msgid "Log out or switch user"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:184
msgid "Requires password to unlock"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:198
msgid "Shutdown, restart, suspend or hibernate"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/places.py:148
#: usr/lib/linuxmint/mintMenu/plugins/places.py:141
msgid ""
"Browse all local and remote disks and folders accessible from this computer"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/places.py:158
#: usr/lib/linuxmint/mintMenu/plugins/places.py:148
msgid "Open your personal folder"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/places.py:173
#: usr/lib/linuxmint/mintMenu/plugins/places.py:160
msgid "Browse bookmarked and local network locations"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/places.py:195
#: usr/lib/linuxmint/mintMenu/plugins/places.py:179
msgid "Browse items placed on the desktop"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/places.py:209
#: usr/lib/linuxmint/mintMenu/plugins/places.py:189
msgid "Browse deleted files"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/places.py:261
#: usr/lib/linuxmint/mintMenu/plugins/places.py:238
msgid "Empty trash"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/recent.py:41
msgid "Recently used"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/recent.py:192
msgid "The file or location could not be opened."
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:151
msgid "Browse and install available software"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:158
msgid "Install, remove and upgrade software packages"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:165
msgid "Configure your system"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:175
msgid "Use the command line"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:182
msgid "Requires password to unlock"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:189
msgid "Log out or switch user"
msgstr ""
#: usr/lib/linuxmint/mintMenu/plugins/system_management.py:196
msgid "Shutdown, restart, suspend or hibernate"
msgstr ""
#: usr/share/linuxmint/mintmenu/applications.ui.h:2
msgid "All applications"
msgstr ""
#: usr/share/linuxmint/mintmenu/applications.ui.h:4
msgid "Show additional search options"
msgstr ""
#: usr/share/linuxmint/mintmenu/preferences.ui.h:1
msgid "General"
msgstr ""
#: usr/share/linuxmint/mintmenu/preferences.ui.h:2
msgid "Appearance"
msgstr ""
#: usr/share/linuxmint/mintmenu/preferences.ui.h:7
msgid "Default"
msgstr ""
#: usr/share/linuxmint/mintmenu/recent.ui.h:1
msgid "Documents"
msgstr ""

2
test
View File

@ -4,6 +4,8 @@ sudo rm -rf /usr/lib/linuxmint/mintMenu
sudo cp -R usr /
sudo glib-compile-schemas /usr/share/glib-2.0/schemas
killall -q mintmenu
mate-terminal --maximize -e /usr/lib/linuxmint/mintMenu/mintMenu.py
mate-panel-test-applets --iid MintMenuAppletFactory::MintMenuApplet

View File

@ -1,13 +1,13 @@
#!/usr/bin/python2
#!/usr/bin/python3
import sys, os
if len(sys.argv) > 1:
if (sys.argv[1] in ["help", "h", "-?", "--help", "-h", "?"]):
print "mintMenu - the advanced MATE menu\n"
print "options:"
print " [--]help, [-]h Display this help."
print " [--]clean, [--]clear, [--]reset Restore settings to default.\n"
print("mintMenu - the advanced MATE menu\n")
print("options:")
print(" [--]help, [-]h Display this help.")
print(" [--]clean, [--]clear, [--]reset Restore settings to default.\n")
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.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.system_management")
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:
os.system("/usr/lib/linuxmint/mintMenu/mintMenu.py")

View File

@ -1,11 +1,11 @@
location:/usr/share/applications/firefox.desktop
location:/usr/share/applications/thunderbird.desktop
location:/usr/share/applications/pidgin.desktop
location:/usr/share/applications/banshee.desktop
location:/usr/share/applications/pix.desktop
location:/usr/share/applications/rhythmbox.desktop
separator
location:/usr/share/applications/gnome-calculator.desktop
location:/usr/share/applications/gcalctool.desktop
location:/usr/share/applications/org.gnome.Calculator.desktop
location:/usr/share/applications/xed.desktop
location:/usr/share/applications/mate-terminal.desktop
location:/usr/share/applications/gnome-terminal.desktop

View File

@ -1,6 +0,0 @@
#!/usr/bin/python2
import compileall
compileall.compile_dir(".", force=1)

Binary file not shown.

Before

(image error) Size: 1.0 KiB

View File

@ -1,36 +1,37 @@
#!/usr/bin/python2
#!/usr/bin/python3
# -*- coding: utf-8; -*-
# Copyright (C) 2013 Ozcan Esen <ozcanesen@gmail.com>
# Copyright (C) 2008 Luca Bruno <lethalman88@gmail.com>
#
# This a slightly modified version of the globalkeybinding.py file which is part of FreeSpeak.
#
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
import threading
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GLib, GObject
from Xlib.display import Display
from Xlib import X, error
from gi.repository import Gtk, Gdk, GdkX11, GObject, GLib
import threading
from Xlib.display import Display
SPECIAL_MODS = (["Super_L", "<Super>"],
["Super_R", "<Super>"],
@ -62,8 +63,8 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
def map_modifiers(self):
gdk_modifiers =(Gdk.ModifierType.CONTROL_MASK, Gdk.ModifierType.SHIFT_MASK, Gdk.ModifierType.MOD1_MASK,
Gdk.ModifierType.MOD2_MASK, Gdk.ModifierType.MOD3_MASK, Gdk.ModifierType.MOD4_MASK, Gdk.ModifierType.MOD5_MASK,
Gdk.ModifierType.SUPER_MASK, Gdk.ModifierType.HYPER_MASK)
Gdk.ModifierType.MOD2_MASK, Gdk.ModifierType.MOD3_MASK, Gdk.ModifierType.MOD4_MASK, Gdk.ModifierType.MOD5_MASK,
Gdk.ModifierType.SUPER_MASK, Gdk.ModifierType.HYPER_MASK)
self.known_modifiers_mask = 0
for modifier in gdk_modifiers:
if "Mod" not in Gtk.accelerator_name(0, modifier) or "Mod4" in Gtk.accelerator_name(0, modifier):
@ -100,14 +101,14 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
def ungrab(self):
if self.keycode:
self.window.ungrab_key(self.keycode, X.AnyModifier, self.window)
def rebind(self, key):
self.ungrab()
if key != "":
self.grab(key)
else:
self.keytext = ""
def set_focus_window(self, window = None):
self.ungrab()
if window is None:
@ -117,7 +118,7 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
self.grab(self.keytext)
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):
self.emit("activate")
@ -161,19 +162,14 @@ class KeybindingWidget(Gtk.Box):
__gsignals__ = {
'accel-edited': (GObject.SignalFlags.RUN_LAST, None, ()),
}
def __init__(self, desc):
def __init__(self):
super(KeybindingWidget, self).__init__()
self.desc = desc
self.label = Gtk.Label(desc)
if self.desc != "":
self.pack_start(self.label, False, False, 0)
self.button = Gtk.Button()
self.button.set_tooltip_text(_("Click to set a new accelerator key for opening and closing the menu. ") +
_("Press Escape or click again to cancel the operation. ") +
_("Press Backspace to clear the existing keybinding."))
self.button.connect("clicked", self.clicked)
self.button.set_size_request(200, -1)
self.pack_start(self.button, False, False, 4)
self.pack_start(self.button, True, True, 0)
self.show_all()
self.event_id = None

View File

@ -1,613 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1024"
height="768"
id="svg2619"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docbase="/Users/carlosporto/Desktop"
sodipodi:docname="mint-logo-alone.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/carlos/Desktop/logo-grey-bg.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
version="1.0"
sodipodi:modified="true">
<defs
id="defs2621">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 384 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="1024 : 384 : 1"
inkscape:persp3d-origin="512 : 256 : 1"
id="perspective277" />
<filter
inkscape:collect="always"
id="filter4135">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.74662361"
id="feGaussianBlur4137" />
</filter>
<filter
inkscape:collect="always"
id="filter4006">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.6495597"
id="feGaussianBlur4008" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient3538"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.091261,0,0,1.091261,79.238251,-55.750939)"
x1="61.42857"
y1="362.14285"
x2="116.42857"
y2="408.57144" />
<filter
inkscape:collect="always"
id="filter3573">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.6284922"
id="feGaussianBlur3575" />
</filter>
<filter
inkscape:collect="always"
id="filter3469">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="2.7119931"
id="feGaussianBlur3471" />
</filter>
<filter
inkscape:collect="always"
id="filter3965">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="2.4743396"
id="feGaussianBlur3967" />
</filter>
<pattern
inkscape:collect="always"
xlink:href="#pattern4481"
id="pattern4486"
patternTransform="matrix(0.4295427,0,0,0.4295427,-4.3554687e-6,-4.3457032e-7)" />
<pattern
inkscape:collect="always"
xlink:href="#pattern4467"
id="pattern4481"
patternTransform="matrix(0.4295427,0,0,0.4295427,-130.66779,-129.37468)" />
<linearGradient
id="linearGradient3588">
<stop
style="stop-color:#bfe699;stop-opacity:1;"
offset="0"
id="stop3590" />
<stop
style="stop-color:#313e24;stop-opacity:1;"
offset="1"
id="stop3592" />
</linearGradient>
<linearGradient
id="linearGradient3570">
<stop
id="stop3572"
offset="0"
style="stop-color:#e5ffcb;stop-opacity:1;" />
<stop
id="stop3574"
offset="1"
style="stop-color:#bfff80;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3303">
<stop
style="stop-color:#bfff80;stop-opacity:1;"
offset="0"
id="stop3305" />
<stop
style="stop-color:#6a8b4a;stop-opacity:1;"
offset="1"
id="stop3307" />
</linearGradient>
<linearGradient
id="linearGradient3431">
<stop
id="stop3433"
offset="0"
style="stop-color:#3d3d3d;stop-opacity:1;" />
<stop
id="stop3435"
offset="1"
style="stop-color:#000000;stop-opacity:0.11400651;" />
</linearGradient>
<linearGradient
id="linearGradient3349">
<stop
style="stop-color:#d3d3d3;stop-opacity:1;"
offset="0"
id="stop3351" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3353" />
</linearGradient>
<linearGradient
id="linearGradient3312">
<stop
style="stop-color:#c7f994;stop-opacity:1;"
offset="0"
id="stop3314" />
<stop
style="stop-color:#87cf3e;stop-opacity:1;"
offset="1"
id="stop3316" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient3335"
gradientUnits="userSpaceOnUse"
x1="61.42857"
y1="362.14285"
x2="116.42857"
y2="408.57144" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3349"
id="linearGradient3374"
gradientUnits="userSpaceOnUse"
x1="140.66374"
y1="424.33243"
x2="67.175148"
y2="348.57098" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient3377"
gradientUnits="userSpaceOnUse"
x1="61.42857"
y1="362.14285"
x2="116.42857"
y2="408.57144"
gradientTransform="translate(0,-9.49911)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient3398"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,-9.49911)"
x1="61.42857"
y1="362.14285"
x2="116.42857"
y2="408.57144" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3349"
id="linearGradient3400"
gradientUnits="userSpaceOnUse"
x1="140.66374"
y1="424.33243"
x2="67.175148"
y2="348.57098" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient3416"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,-1,0,649.49911)"
x1="61.42857"
y1="362.14285"
x2="116.42857"
y2="408.57144" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3349"
id="linearGradient2254"
gradientUnits="userSpaceOnUse"
x1="140.66374"
y1="424.33243"
x2="67.175148"
y2="348.57098" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3431"
id="linearGradient2259"
gradientUnits="userSpaceOnUse"
spreadMethod="pad"
x1="70.491508"
y1="416.38858"
x2="113.64215"
y2="375.87961" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient2262"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,-9.49911)"
x1="61.42857"
y1="362.14285"
x2="116.42857"
y2="408.57144" />
<filter
inkscape:collect="always"
id="filter3291">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.400625"
id="feGaussianBlur3293" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient3311"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,-9.49911)"
x1="61.42857"
y1="362.14285"
x2="116.42857"
y2="408.57144" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3431"
id="linearGradient3313"
gradientUnits="userSpaceOnUse"
spreadMethod="pad"
x1="70.491508"
y1="416.38858"
x2="113.64215"
y2="375.87961" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3349"
id="linearGradient3315"
gradientUnits="userSpaceOnUse"
x1="140.66374"
y1="424.33243"
x2="67.175148"
y2="348.57098" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3349"
id="linearGradient3318"
gradientUnits="userSpaceOnUse"
x1="140.66374"
y1="424.33243"
x2="67.175148"
y2="348.57098" />
<filter
inkscape:collect="always"
id="filter3546">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.15992437"
id="feGaussianBlur3548" />
</filter>
<filter
inkscape:collect="always"
id="filter3558">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.25886071"
id="feGaussianBlur3560" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3588"
id="linearGradient3737"
gradientUnits="userSpaceOnUse"
x1="26.795013"
y1="216.34912"
x2="149.90654"
y2="323.98651" />
<filter
inkscape:collect="always"
id="filter4363">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="2.410502"
id="feGaussianBlur4365" />
</filter>
<pattern
patternUnits="userSpaceOnUse"
width="256"
height="256"
patternTransform="translate(-297.8418,85.357452)"
id="pattern4467">
<image
xlink:href="metal5.jpg"
sodipodi:absref="/home/carlos/Desktop/metal5.jpg"
width="256"
height="256"
id="image4464"
x="0"
y="0" />
</pattern>
<pattern
patternUnits="userSpaceOnUse"
width="109.96293"
height="109.96293"
patternTransform="translate(-130.66779,-129.37468)"
id="pattern4483">
<rect
id="rect4470"
y="0"
x="0"
height="109.96293"
width="109.96293"
style="fill:url(#pattern4486);stroke:none" />
</pattern>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3431"
id="linearGradient2994"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,80)"
spreadMethod="pad"
x1="70.491508"
y1="416.38858"
x2="113.64215"
y2="375.87961" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3349"
id="linearGradient3000"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0484996,0,0,1.0484996,59.525242,85.095989)"
x1="148.5945"
y1="426.11398"
x2="100.47015"
y2="379.95963" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient3006"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0484996,0,0,1.0484996,59.525242,75.136176)"
x1="61.42857"
y1="362.14285"
x2="116.42857"
y2="408.57144" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient4003"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0484996,0,0,1.0484996,210.01137,213.49817)"
x1="61.42857"
y1="362.14285"
x2="116.42857"
y2="408.57144" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3431"
id="linearGradient4005"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,80)"
spreadMethod="pad"
x1="70.491508"
y1="416.38858"
x2="113.64215"
y2="375.87961" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3349"
id="linearGradient4007"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0484996,0,0,1.0484996,210.01137,223.45798)"
x1="148.5945"
y1="426.11398"
x2="100.47015"
y2="379.95963" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient2992"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0417465,0,0,1.0417465,81.266854,19.855591)"
x1="47.555698"
y1="131.83339"
x2="141.37427"
y2="207.52625" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3431"
id="linearGradient2995"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-11.825686,-215.33459)"
spreadMethod="pad"
x1="70.491508"
y1="416.38858"
x2="113.64215"
y2="375.87961" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3349"
id="linearGradient2997"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0417465,0,0,1.0417465,81.266854,19.855591)"
x1="93.412979"
y1="209.62093"
x2="95.111397"
y2="116.20795" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3431"
id="linearGradient2999"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,80)"
spreadMethod="pad"
x1="70.491508"
y1="416.38858"
x2="113.64215"
y2="375.87961" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient3001"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.091261,0,0,1.091261,67.062859,-117.80387)"
x1="61.42857"
y1="362.14285"
x2="116.42857"
y2="408.57144" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3431"
id="linearGradient3003"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,80)"
spreadMethod="pad"
x1="70.491508"
y1="416.38858"
x2="113.64215"
y2="375.87961" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient3005"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0417465,0,0,1.0417465,81.266854,19.855591)"
x1="47.555698"
y1="131.83339"
x2="141.37427"
y2="207.52625" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3431"
id="linearGradient3007"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-11.825686,-215.33459)"
spreadMethod="pad"
x1="70.491508"
y1="416.38858"
x2="113.64215"
y2="375.87961" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3349"
id="linearGradient3009"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0417465,0,0,1.0417465,81.266854,19.855591)"
x1="93.412979"
y1="209.62093"
x2="95.111397"
y2="116.20795" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3312"
id="linearGradient2659"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.091261,0,0,1.091261,79.238251,-55.750939)"
x1="61.42857"
y1="362.14285"
x2="116.42857"
y2="408.57144" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3431"
id="linearGradient2661"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,80)"
spreadMethod="pad"
x1="70.491508"
y1="416.38858"
x2="113.64215"
y2="375.87961" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#333333"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="0.71932516"
inkscape:cx="434.88273"
inkscape:cy="422.55322"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1920"
inkscape:window-height="1151"
inkscape:window-x="0"
inkscape:window-y="0"
width="1024px"
height="768px"
showguides="true"
inkscape:guide-bbox="true"
showgrid="false" />
<metadata
id="metadata2624">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g2650"
transform="matrix(6.5972926,0,0,6.5972926,-735.85177,-2072.0441)">
<path
sodipodi:nodetypes="ccccccccccccc"
transform="matrix(1.0429295,0,0,1.0429295,-163.96565,-107.54293)"
id="path3543"
d="M 331.79042,510.93347 C 310.5003,510.93347 292.02462,494.79355 292.02462,473.52251 L 292.0055,451.53024 L 292.0055,444.9442 L 278.50774,444.9442 L 278.50774,408.2929 L 335.4281,408.56096 L 353.23367,408.59927 C 374.54293,408.59927 392.99946,424.71998 392.99946,446.01013 L 392.99946,510.93347 L 331.79042,510.93347 L 331.79042,510.93347 L 331.79042,510.93347 z"
style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter3573);enable-background:accumulate" />
<path
sodipodi:nodetypes="cccccccsccccc"
id="path2576"
d="M 237.71259,407.73851 C 237.71259,393.01827 237.71259,358.2933 237.71259,358.2933 C 237.71259,341.77424 223.22599,328.3835 205.35182,328.3835 L 186.80016,328.3835 L 186.80016,328.34364 L 136.62498,328.1244 L 136.62498,346.16533 C 136.62498,346.16533 140.72184,346.16533 144.32718,346.16533 C 149.70349,346.16533 150.65327,349.87669 150.65327,355.01364 L 150.69314,386.90796 C 150.69314,403.42703 165.1798,416.81775 183.03402,416.81775 L 227.11605,416.81775 C 232.7674,416.81775 237.71259,413.2388 237.71259,407.73851 z"
style="fill:url(#linearGradient2659);fill-opacity:1;fill-rule:evenodd;display:inline" />
<path
transform="matrix(1.0484996,0,0,1.0484996,83.467541,-112.89106)"
sodipodi:nodetypes="cccccsccccc"
id="path3419"
d="M 142.9375,500.53125 C 132.18568,493.1219 124.57068,484.61091 118.15625,473.34375 C 105.51181,449.98566 108.46834,438.39049 77.15625,435.65625 C 68.119961,435.65625 62.105033,433.65625 52.59375,433.65625 L 52.59375,436.96875 C 52.593751,436.96876 56.352431,438.87624 59.65625,438.87624 C 64.582947,438.87625 65.4375,442.29389 65.4375,447.00124 L 65.46875,476.15625 C 65.468747,491.29383 78.763908,503.5625 95.125,503.5625 L 135.5,503.5625 C 138.46358,503.5625 141.12572,502.39463 142.9375,500.53125 z"
style="opacity:0.17514122;fill:url(#linearGradient2661);fill-opacity:1;fill-rule:nonzero;display:inline;filter:url(#filter3291)" />
<path
transform="matrix(1.0484996,0,0,1.0484996,83.467541,-112.89106)"
sodipodi:nodetypes="csccccsssccccsssccccccccccccccccsscc"
id="path2620"
d="M 105.51844,438.54009 C 101.68173,438.54009 98.272696,439.96454 95.533603,442.73149 C 92.795878,445.49697 91.358403,448.94945 91.358413,452.8457 L 91.358413,472.54036 L 100.29137,472.54036 L 100.29137,452.8457 C 100.29137,451.35232 100.77865,450.18462 101.84492,449.10752 C 102.91469,448.02697 104.04752,447.53781 105.51844,447.53781 C 107.02019,447.53781 108.13602,448.02451 109.20813,449.10752 C 110.27441,450.18462 110.76169,451.35232 110.76169,452.8457 L 110.76169,472.54036 L 119.69466,472.54036 L 119.69466,452.8457 C 119.69466,451.35232 120.18194,450.18462 121.24822,449.10752 C 122.32033,448.02451 123.43616,447.53781 124.93793,447.53781 C 126.40886,447.53781 127.54166,448.02697 128.61143,449.10752 C 129.6777,450.18462 130.16499,451.35232 130.16499,452.8457 L 130.21354,475.85792 C 130.21354,480.76686 125.53868,484.9041 119.53283,484.9041 L 90.727281,484.79084 C 86.092574,484.79084 82.134153,480.27967 82.134153,474.48232 L 82.134153,431.14704 L 73.686691,431.14704 L 73.686691,476.14913 C 73.686691,480.92384 75.433872,485.11091 78.832855,488.49673 C 81.738048,491.36433 85.231929,493.06118 89.157544,493.481 L 89.157544,493.64291 L 121.23203,493.64291 C 126.16075,493.64291 130.49087,491.81026 133.98415,488.25387 L 134.00035,488.25387 C 136.97137,485.20142 138.70822,481.54389 139.13032,477.42763 L 139.09796,452.8457 C 139.09796,448.94945 137.66052,445.49697 134.92275,442.73149 C 132.18369,439.96454 128.77463,438.54009 124.93793,438.54009 C 121.17189,438.54009 117.8766,439.94051 115.212,442.50488 C 112.55519,439.94474 109.28292,438.54009 105.51844,438.54009 z"
style="fill:#000000;fill-opacity:0.08040203;fill-rule:evenodd;stroke:none;stroke-width:4.7667098;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter3546);enable-background:accumulate" />
<path
id="path4130"
d="M 193.35561,347.16391 C 189.33282,347.16391 185.75845,348.65744 182.88651,351.55859 C 180.016,354.45819 178.50881,358.07812 178.50882,362.16333 L 178.50882,382.81318 L 187.87503,382.81318 L 187.87503,362.16333 C 187.87503,360.59753 188.38594,359.37319 189.50392,358.24385 C 190.62558,357.1109 191.81335,356.59801 193.35561,356.59801 C 194.93019,356.59801 196.10014,357.10832 197.22425,358.24385 C 198.34224,359.37319 198.85316,360.59753 198.85316,362.16333 L 198.85316,382.81318 L 208.21936,382.81318 L 208.21936,362.16333 C 208.21936,360.59753 208.73028,359.37319 209.84828,358.24385 C 210.97238,357.10832 212.14233,356.59801 213.71694,356.59801 C 215.25921,356.59801 216.44695,357.1109 217.56859,358.24385 C 218.68658,359.37319 219.1975,360.59753 219.1975,362.16333 L 219.2484,386.29164 C 219.2484,391.43866 214.34681,395.77655 208.04968,395.77655 L 177.84708,395.6578 C 172.98759,395.6578 168.83719,390.92784 168.83719,384.84932 L 168.83719,339.4123 L 159.98003,339.4123 L 159.98003,386.59697 C 159.98003,391.60325 161.81195,395.99339 165.37578,399.54343 C 168.42187,402.5501 172.08521,404.49909 176.2012,404.93927 L 209.8313,404.93919 C 214.99906,404.93919 219.53918,403.01766 223.20189,399.28879 L 223.21888,399.28879 C 226.33398,396.08829 228.15508,392.25338 228.59765,387.93748 L 228.56371,362.16333 C 228.56371,358.07812 227.05657,354.45819 224.18602,351.55859 C 221.31411,348.65744 217.73971,347.16391 213.71694,347.16391 C 209.76825,347.16391 206.31314,348.63225 203.5193,351.32099 C 200.73363,348.63668 197.30267,347.16391 193.35561,347.16391 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:nodetypes="csccccsssccccssscccccccccccccccsscc" />
<path
id="path4132"
d="M 187.84765,395.68919 L 187.84765,404.93919 L 209.84765,404.93919 C 215.01539,404.93919 219.52869,403.01181 223.19139,399.28294 L 223.22265,399.28294 C 226.33776,396.08243 228.15508,392.25509 228.59765,387.93919 L 228.59765,382.68919 L 219.2539,382.68919 L 219.2539,386.28294 C 219.2539,391.42999 214.36352,395.75169 208.06639,395.75169 L 187.84765,395.68919 z"
style="opacity:0.3;fill:#52a800;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccccccccccccccccccsccccc"
d="M 182.74092,423.66488 C 161.4508,423.66488 142.97513,407.52496 142.97513,386.25392 L 142.956,360.42629 L 142.956,353.84026 L 129.45825,353.84026 L 129.45825,321.02431 L 186.3786,321.29237 L 204.18418,321.33068 C 225.49343,321.33068 243.94996,337.45139 243.94996,358.74153 L 243.94996,423.66488 L 182.74092,423.66488 L 182.74092,423.66488 L 182.74092,423.66488 z M 235.27688,406.24921 C 235.27688,392.10579 235.27688,358.74153 235.27688,358.74153 C 235.27688,342.86978 221.35795,330.00376 204.18418,330.00376 L 186.35947,330.00376 L 186.35947,329.96546 L 138.15044,329.75481 L 138.15044,345.16718 C 138.15044,345.16718 140.08675,345.16718 143.55081,345.16718 C 147.21721,345.16718 151.62901,348.61265 151.62901,353.66876 L 151.66732,386.23492 C 151.66732,402.10668 165.58632,414.97268 182.74092,414.97268 L 225.09557,414.97268 C 230.52546,414.97268 235.27688,411.53397 235.27688,406.24921 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path6141" />
</g>
</g>
</svg>

Before

(image error) Size: 25 KiB

Binary file not shown.

Before

(image error) Size: 1.1 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,532 +0,0 @@
#!/usr/bin/python2
import sys
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GdkPixbuf
import keybinding
try:
import gettext
import os
import commands
except Exception, e:
print e
sys.exit( 1 )
PATH = os.path.abspath( os.path.dirname( sys.argv[0] ) )
sys.path.append( os.path.join( PATH , "plugins") )
# i18n
gettext.install("mintmenu", "/usr/share/linuxmint/locale")
from easygsettings import EasyGSettings
class mintMenuConfig( object ):
def __init__( self ):
self.path = os.path.abspath( os.path.dirname( sys.argv[0] ) )
# Load glade file and extract widgets
self.builder = Gtk.Builder()
self.builder.add_from_file (os.path.join(self.path, "mintMenuConfig.glade" ))
self.mainWindow=self.builder.get_object("mainWindow")
#i18n
self.mainWindow.set_title(_("Menu preferences"))
self.mainWindow.set_icon_from_file("/usr/lib/linuxmint/mintMenu/icon.svg")
self.builder.get_object("startWithFavorites").set_label(_("Always start with favorites pane"))
self.builder.get_object("showButtonIcon").set_label(_("Show button icon"))
self.builder.get_object("enableInternetSearch").set_label(_("Enable Internet search"))
self.builder.get_object("useCustomColors").set_label(_("Use custom colors"))
self.builder.get_object("showRecentPlugin").set_label(_("Show recent documents plugin"))
self.builder.get_object("showApplicationsPlugin").set_label(_("Show applications plugin"))
self.builder.get_object("showSystemPlugin").set_label(_("Show system plugin"))
self.builder.get_object("showPlacesPlugin").set_label(_("Show places plugin"))
self.builder.get_object("showAppComments").set_label(_("Show application comments"))
self.builder.get_object("showCategoryIcons").set_label(_("Show category icons"))
self.builder.get_object("hover").set_label(_("Hover"))
self.builder.get_object("remember_filter").set_label(_("Remember the last category or search"))
self.builder.get_object("use_apt").set_label(_("Search for packages to install"))
self.builder.get_object("swapGeneric").set_label(_("Swap name and generic name"))
self.builder.get_object("buttonTextLabel").set_text(_("Button text:"))
self.builder.get_object("label1").set_text(_("Options"))
self.builder.get_object("applicationsLabel").set_text(_("Applications"))
self.builder.get_object("colorsLabel").set_text(_("Theme"))
self.builder.get_object("favLabel").set_text(_("Favorites"))
self.builder.get_object("mainbuttonLabel").set_text(_("Main button"))
self.builder.get_object("pluginsLabel").set_text(_("Plugins"))
self.builder.get_object("backgroundColorLabel").set_text(_("Background:"))
self.builder.get_object("headingColorLabel").set_text(_("Headings:"))
self.builder.get_object("themeLabel").set_text(_("Theme:"))
#self.builder.get_object("applicationsLabel").set_text(_("Applications"))
#self.builder.get_object("favoritesLabel").set_text(_("Favorites"))
self.builder.get_object("numberColumnsLabel").set_text(_("Number of columns:"))
self.builder.get_object("iconSizeLabel").set_text(_("Icon size:"))
self.builder.get_object("iconSizeLabel2").set_text(_("Icon size:"))
self.builder.get_object("placesIconSizeLabel").set_text(_("Icon size:"))
self.builder.get_object("systemIconSizeLabel").set_text(_("Icon size:"))
self.builder.get_object("hoverLabel").set_text(_("Hover delay (ms):"))
self.builder.get_object("label4").set_text(_("Button icon:"))
self.builder.get_object("label5").set_text(_("Search command:"))
self.builder.get_object("placesLabel").set_text(_("Places"))
self.builder.get_object("allowscrollbarcheckbutton").set_label(_("Allow Scrollbar"))
self.builder.get_object("showgtkbookmarkscheckbutton").set_label(_("Show GTK Bookmarks"))
self.builder.get_object("placesHeightEntryLabel").set_text(_("Height:"))
self.builder.get_object("defaultPlacesFrameLabel").set_text(_("Toggle Default Places:"))
self.builder.get_object("computercheckbutton").set_label(_("Computer"))
self.builder.get_object("homecheckbutton").set_label(_("Home Folder"))
self.builder.get_object("networkcheckbutton").set_label(_("Network"))
self.builder.get_object("desktopcheckbutton").set_label(_("Desktop"))
self.builder.get_object("trashcheckbutton").set_label(_("Trash"))
self.builder.get_object("customPlacesFrameLabel").set_text(_("Custom Places:"))
self.builder.get_object("systemLabel").set_text(_("System"))
self.builder.get_object("allowscrollbarcheckbutton1").set_label(_("Allow Scrollbar"))
self.builder.get_object("systemHeightEntryLabel").set_text(_("Height:"))
self.builder.get_object("defaultItemsFrameLabel").set_text(_("Toggle Default Items:"))
self.builder.get_object("softwaremanagercheckbutton").set_label(_("Software Manager"))
self.builder.get_object("packagemanagercheckbutton").set_label(_("Package Manager"))
self.builder.get_object("controlcentercheckbutton").set_label(_("Control Center"))
self.builder.get_object("terminalcheckbutton").set_label(_("Terminal"))
self.builder.get_object("lockcheckbutton").set_label(_("Lock Screen"))
self.builder.get_object("logoutcheckbutton").set_label(_("Log Out"))
self.builder.get_object("quitcheckbutton").set_label(_("Quit"))
self.editPlaceDialogTitle = (_("Edit Place"))
self.newPlaceDialogTitle = (_("New Place"))
self.folderChooserDialogTitle = (_("Select a folder"))
self.startWithFavorites = self.builder.get_object( "startWithFavorites" )
self.showAppComments = self.builder.get_object( "showAppComments" )
self.useAPT = self.builder.get_object( "use_apt" )
self.showCategoryIcons = self.builder.get_object( "showCategoryIcons" )
self.showRecentPlugin = self.builder.get_object( "showRecentPlugin" )
self.showApplicationsPlugin = self.builder.get_object( "showApplicationsPlugin" )
self.showSystemPlugin = self.builder.get_object( "showSystemPlugin" )
self.showPlacesPlugin = self.builder.get_object( "showPlacesPlugin" )
self.swapGeneric = self.builder.get_object("swapGeneric")
self.hover = self.builder.get_object( "hover" )
self.hoverDelay = self.builder.get_object( "hoverDelay" )
self.rememberFilter = self.builder.get_object( "remember_filter" )
self.iconSize = self.builder.get_object( "iconSize" )
self.favIconSize = self.builder.get_object( "favIconSize" )
self.placesIconSize = self.builder.get_object( "placesIconSize" )
self.systemIconSize = self.builder.get_object( "systemIconSize" )
self.favCols = self.builder.get_object( "numFavCols" )
self.useCustomColors = self.builder.get_object( "useCustomColors" )
self.backgroundColor = self.builder.get_object( "backgroundColor" )
self.headingColor = self.builder.get_object( "headingColor" )
self.backgroundColorLabel = self.builder.get_object( "backgroundColorLabel" )
self.headingColorLabel = self.builder.get_object( "headingColorLabel" )
self.showButtonIcon = self.builder.get_object( "showButtonIcon" )
self.enableInternetSearch = self.builder.get_object( "enableInternetSearch" )
self.buttonText = self.builder.get_object( "buttonText" )
self.hotkeyWidget = keybinding.KeybindingWidget(_("Keyboard shortcut:") )
grid = self.builder.get_object( "main_grid" )
grid.attach(self.hotkeyWidget, 0, 2, 2, 1)
self.buttonIcon = self.builder.get_object( "buttonIcon" )
self.buttonIconChooser = self.builder.get_object( "button_icon_chooser" )
self.image_filter = Gtk.FileFilter()
self.image_filter.set_name(_("Images"))
self.image_filter.add_pattern("*.png")
self.image_filter.add_pattern("*.jpg")
self.image_filter.add_pattern("*.jpeg")
self.image_filter.add_pattern("*.bmp")
self.image_filter.add_pattern("*.ico")
self.image_filter.add_pattern("*.xpm")
self.image_filter.add_pattern("*.svg")
self.buttonIconChooser.add_filter(self.image_filter)
self.buttonIconChooser.set_filter(self.image_filter)
self.buttonIconImage = self.builder.get_object("image_button_icon")
self.searchCommand = self.builder.get_object( "search_command" )
self.computertoggle = self.builder.get_object( "computercheckbutton" )
self.homefoldertoggle = self.builder.get_object( "homecheckbutton" )
self.networktoggle = self.builder.get_object( "networkcheckbutton" )
self.desktoptoggle = self.builder.get_object( "desktopcheckbutton" )
self.trashtoggle = self.builder.get_object( "trashcheckbutton" )
self.customplacestree = self.builder.get_object( "customplacestree" )
self.allowPlacesScrollbarToggle = self.builder.get_object( "allowscrollbarcheckbutton" )
self.showgtkbookmarksToggle = self.builder.get_object( "showgtkbookmarkscheckbutton" )
self.placesHeightButton = self.builder.get_object( "placesHeightSpinButton" )
if (self.allowPlacesScrollbarToggle.get_active() == False):
self.placesHeightButton.set_sensitive(False)
self.allowPlacesScrollbarToggle.connect("toggled", self.togglePlacesHeightEnabled )
self.softwareManagerToggle = self.builder.get_object( "softwaremanagercheckbutton" )
self.packageManagerToggle = self.builder.get_object( "packagemanagercheckbutton" )
self.controlCenterToggle = self.builder.get_object( "controlcentercheckbutton" )
self.terminalToggle = self.builder.get_object( "terminalcheckbutton" )
self.lockToggle = self.builder.get_object( "lockcheckbutton" )
self.logoutToggle = self.builder.get_object( "logoutcheckbutton" )
self.quitToggle = self.builder.get_object( "quitcheckbutton" )
self.allowSystemScrollbarToggle = self.builder.get_object( "allowscrollbarcheckbutton1" )
self.systemHeightButton = self.builder.get_object( "systemHeightSpinButton" )
if (self.allowSystemScrollbarToggle.get_active() == False): self.systemHeightButton.set_sensitive(False)
self.allowSystemScrollbarToggle.connect("toggled", self.toggleSystemHeightEnabled )
if os.path.exists("/usr/bin/mintinstall"):
self.builder.get_object( "softwaremanagercheckbutton" ).show()
else:
self.builder.get_object( "softwaremanagercheckbutton" ).hide()
self.builder.get_object( "closeButton" ).connect("clicked", Gtk.main_quit )
self.settings = EasyGSettings( "com.linuxmint.mintmenu" )
self.settingsApplications = EasyGSettings( "com.linuxmint.mintmenu.plugins.applications" )
self.settingsPlaces = EasyGSettings( "com.linuxmint.mintmenu.plugins.places" )
self.settingsSystem = EasyGSettings( "com.linuxmint.mintmenu.plugins.system_management" )
self.useCustomColors.connect( "toggled", self.toggleUseCustomColors )
self.bindGSettingsValueToWidget( self.settings, "bool", "start-with-favorites", self.startWithFavorites, "toggled", self.startWithFavorites.set_active, self.startWithFavorites.get_active )
self.bindGSettingsValueToWidget( self.settingsApplications, "bool", "show-application-comments", self.showAppComments, "toggled", self.showAppComments.set_active, self.showAppComments.get_active )
self.bindGSettingsValueToWidget( self.settingsApplications, "bool", "use-apt", self.useAPT, "toggled", self.useAPT.set_active, self.useAPT.get_active )
self.bindGSettingsValueToWidget( self.settingsApplications, "bool", "show-category-icons", self.showCategoryIcons, "toggled", self.showCategoryIcons.set_active, self.showCategoryIcons.get_active )
self.bindGSettingsValueToWidget( self.settingsApplications, "bool", "categories-mouse-over", self.hover, "toggled", self.hover.set_active, self.hover.get_active )
self.bindGSettingsValueToWidget( self.settingsApplications, "bool", "swap-generic-name", self.swapGeneric, "toggled", self.swapGeneric.set_active, self.swapGeneric.get_active )
self.bindGSettingsValueToWidget( self.settingsApplications, "int", "category-hover-delay", self.hoverDelay, "value-changed", self.hoverDelay.set_value, self.hoverDelay.get_value )
self.bindGSettingsValueToWidget( self.settingsApplications, "int", "icon-size", self.iconSize, "value-changed", self.iconSize.set_value, self.iconSize.get_value )
self.bindGSettingsValueToWidget( self.settingsApplications, "int", "favicon-size", self.favIconSize, "value-changed", self.favIconSize.set_value, self.favIconSize.get_value )
self.bindGSettingsValueToWidget( self.settingsApplications, "int", "fav-cols", self.favCols, "value-changed", self.favCols.set_value, self.favCols.get_value )
self.bindGSettingsValueToWidget( self.settingsApplications, "bool", "remember-filter", self.rememberFilter, "toggled", self.rememberFilter.set_active, self.rememberFilter.get_active)
self.bindGSettingsValueToWidget( self.settingsApplications, "bool", "enable-internet-search", self.enableInternetSearch, "toggled", self.enableInternetSearch.set_active, self.enableInternetSearch.get_active)
self.bindGSettingsValueToWidget( self.settingsPlaces, "int", "icon-size", self.placesIconSize, "value-changed", self.placesIconSize.set_value, self.placesIconSize.get_value )
self.bindGSettingsValueToWidget( self.settingsSystem, "int", "icon-size", self.systemIconSize, "value-changed", self.systemIconSize.set_value, self.systemIconSize.get_value )
self.bindGSettingsValueToWidget( self.settings, "bool", "use-custom-color", self.useCustomColors, "toggled", self.useCustomColors.set_active, self.useCustomColors.get_active )
self.bindGSettingsValueToWidget( self.settings, "color", "custom-color", self.backgroundColor, "color-set", self.backgroundColor.set_rgba, self.getBackgroundColor )
self.bindGSettingsValueToWidget( self.settings, "color", "custom-heading-color", self.headingColor, "color-set", self.headingColor.set_rgba, self.getHeadingColor )
self.bindGSettingsValueToWidget( self.settings, "bool", "hide-applet-icon", self.showButtonIcon, "toggled", self.setShowButtonIcon, self.getShowButtonIcon )
self.bindGSettingsValueToWidget( self.settings, "string", "applet-text", self.buttonText, "changed", self.buttonText.set_text, self.buttonText.get_text )
self.bindGSettingsValueToWidget( self.settings, "string", "hot-key", self.hotkeyWidget, "accel-edited", self.hotkeyWidget.set_val, self.hotkeyWidget.get_val )
self.bindGSettingsValueToWidget( self.settings, "string", "applet-icon", self.buttonIconChooser, "file-set", self.setButtonIcon, self.buttonIconChooser.get_filename )
self.bindGSettingsValueToWidget( self.settingsApplications, "string", "search-command", self.searchCommand, "changed", self.searchCommand.set_text, self.searchCommand.get_text )
self.getPluginsToggle()
self.showRecentPlugin.connect("toggled", self.setPluginsLayout )
self.showApplicationsPlugin.connect("toggled", self.setPluginsLayout )
self.showSystemPlugin.connect("toggled", self.setPluginsLayout )
self.showPlacesPlugin.connect("toggled", self.setPluginsLayout )
self.bindGSettingsValueToWidget( self.settingsPlaces, "bool", "show-computer", self.computertoggle, "toggled", self.computertoggle.set_active, self.computertoggle.get_active )
self.bindGSettingsValueToWidget( self.settingsPlaces, "bool", "show-home-folder", self.homefoldertoggle, "toggled", self.homefoldertoggle.set_active, self.homefoldertoggle.get_active )
self.bindGSettingsValueToWidget( self.settingsPlaces, "bool", "show-network", self.networktoggle, "toggled", self.networktoggle.set_active, self.networktoggle.get_active )
self.bindGSettingsValueToWidget( self.settingsPlaces, "bool", "show-desktop", self.desktoptoggle, "toggled", self.desktoptoggle.set_active, self.desktoptoggle.get_active )
self.bindGSettingsValueToWidget( self.settingsPlaces, "bool", "show-trash", self.trashtoggle, "toggled", self.trashtoggle.set_active, self.trashtoggle.get_active )
self.bindGSettingsValueToWidget( self.settingsPlaces, "int", "height", self.placesHeightButton, "value-changed", self.placesHeightButton.set_value, self.placesHeightButton.get_value_as_int )
self.bindGSettingsValueToWidget( self.settingsPlaces, "bool", "allow-scrollbar", self.allowPlacesScrollbarToggle, "toggled", self.allowPlacesScrollbarToggle.set_active, self.allowPlacesScrollbarToggle.get_active )
self.bindGSettingsValueToWidget( self.settingsPlaces, "bool", "show-gtk-bookmarks", self.showgtkbookmarksToggle, "toggled", self.showgtkbookmarksToggle.set_active, self.showgtkbookmarksToggle.get_active )
self.bindGSettingsValueToWidget( self.settingsSystem, "bool", "show-software-manager", self.softwareManagerToggle, "toggled", self.softwareManagerToggle.set_active, self.softwareManagerToggle.get_active )
self.bindGSettingsValueToWidget( self.settingsSystem, "bool", "show-package-manager", self.packageManagerToggle, "toggled", self.packageManagerToggle.set_active, self.packageManagerToggle.get_active )
self.bindGSettingsValueToWidget( self.settingsSystem, "bool", "show-control-center", self.controlCenterToggle, "toggled", self.controlCenterToggle.set_active, self.controlCenterToggle.get_active )
self.bindGSettingsValueToWidget( self.settingsSystem, "bool", "show-terminal", self.terminalToggle, "toggled", self.terminalToggle.set_active, self.terminalToggle.get_active )
self.bindGSettingsValueToWidget( self.settingsSystem, "bool", "show-lock-screen", self.lockToggle, "toggled", self.lockToggle.set_active, self.lockToggle.get_active )
self.bindGSettingsValueToWidget( self.settingsSystem, "bool", "show-logout", self.logoutToggle, "toggled", self.logoutToggle.set_active, self.logoutToggle.get_active )
self.bindGSettingsValueToWidget( self.settingsSystem, "bool", "show-quit", self.quitToggle, "toggled", self.quitToggle.set_active, self.quitToggle.get_active )
self.bindGSettingsValueToWidget( self.settingsSystem, "int", "height", self.systemHeightButton, "value-changed", self.systemHeightButton.set_value, self.systemHeightButton.get_value_as_int )
self.bindGSettingsValueToWidget( self.settingsSystem, "bool", "allow-scrollbar", self.allowSystemScrollbarToggle, "toggled", self.allowSystemScrollbarToggle.set_active, self.allowSystemScrollbarToggle.get_active )
self.customplacepaths = self.settingsPlaces.get( "list-string", "custom-paths" )
self.customplacenames = self.settingsPlaces.get( "list-string", "custom-names" )
self.customplacestreemodel = Gtk.ListStore( str, str)
self.cell = Gtk.CellRendererText()
for count in range( len(self.customplacepaths) ):
self.customplacestreemodel.append( [ self.customplacenames[count], self.customplacepaths[count] ] )
self.customplacestreemodel.connect("row-inserted", self.updatePlacesGSettings)
self.customplacestreemodel.connect("row-deleted", self.updatePlacesGSettings)
self.customplacestreemodel.connect("rows-reordered", self.updatePlacesGSettings)
self.customplacestreemodel.connect("row-changed", self.updatePlacesGSettings)
self.customplacestree.set_model( self.customplacestreemodel )
self.namescolumn = Gtk.TreeViewColumn( _("Name"), self.cell, text = 0 )
self.placescolumn = Gtk.TreeViewColumn( _("Path"), self.cell, text = 1 )
self.customplacestree.append_column( self.namescolumn )
self.customplacestree.append_column( self.placescolumn )
self.builder.get_object("newButton").connect("clicked", self.newPlace)
self.builder.get_object("editButton").connect("clicked", self.editPlace)
self.builder.get_object("upButton").connect("clicked", self.moveUp)
self.builder.get_object("downButton").connect("clicked", self.moveDown)
self.builder.get_object("removeButton").connect("clicked", self.removePlace)
#Detect themes and show theme here
theme_name = self.settings.get ("string", "theme-name")
themes = commands.getoutput("find /usr/share/themes -name gtkrc")
themes = themes.split("\n")
model = Gtk.ListStore(str, str)
self.builder.get_object("themesCombo").set_model(model)
selected_theme = model.append([_("Desktop theme"), "default"])
for theme in sorted(themes):
if theme.startswith("/usr/share/themes") and theme.endswith("/gtk-2.0/gtkrc"):
theme = theme.replace("/usr/share/themes/", "")
theme = theme.replace("gtk-2.0", "")
theme = theme.replace("gtkrc", "")
theme = theme.replace("/", "")
theme = theme.strip()
iter = model.append([theme, theme])
if theme == theme_name:
selected_theme = iter
self.builder.get_object("themesCombo").set_active_iter(selected_theme)
self.builder.get_object("themesCombo").connect("changed", self.set_theme)
self.toggleUseCustomColors(self.useCustomColors)
self.mainWindow.present()
self.getBackgroundColor()
def set_theme(self, widget):
model = widget.get_model()
iter = widget.get_active_iter()
theme_name = model.get_value(iter, 1)
self.settings.set( "string", "theme-name", theme_name)
def getPluginsToggle(self):
array = self.settings.get ("list-string", "plugins-list")
if "recent" in array:
self.showRecentPlugin.set_active(True)
else:
self.showRecentPlugin.set_active(False)
if "applications" in array:
self.showApplicationsPlugin.set_active(True)
else:
self.showApplicationsPlugin.set_active(False)
if "system_management" in array:
self.showSystemPlugin.set_active(True)
else:
self.showSystemPlugin.set_active(False)
if "places" in array:
self.showPlacesPlugin.set_active(True)
else:
self.showPlacesPlugin.set_active(False)
def setPluginsLayout (self, widget):
visiblePlugins = []
if self.showPlacesPlugin.get_active():
visiblePlugins.append("places")
if self.showSystemPlugin.get_active():
visiblePlugins.append("system_management")
if self.showApplicationsPlugin.get_active():
if self.showPlacesPlugin.get_active() or self.showSystemPlugin.get_active():
visiblePlugins.append("newpane")
visiblePlugins.append("applications")
if self.showRecentPlugin.get_active():
if self.showApplicationsPlugin.get_active() or self.showPlacesPlugin.get_active() or self.showSystemPlugin.get_active():
visiblePlugins.append("newpane")
visiblePlugins.append("recent")
self.settings.set ("list-string", "plugins-list", visiblePlugins)
def setShowButtonIcon( self, value ):
self.showButtonIcon.set_active(not value )
def setButtonIcon( self, value ):
self.buttonIconChooser.set_filename(value)
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(value, -1, 22)
self.buttonIconImage.set_from_pixbuf(pixbuf)
def getShowButtonIcon( self ):
return not self.showButtonIcon.get_active()
def bindGSettingsValueToWidget( self, settings, setting_type, key, widget, changeEvent, setter, getter ):
settings.notifyAdd( key, self.callSetter, args = [ setting_type, setter ] )
if setting_type == "color":
color = Gdk.RGBA()
color.parse( settings.get( setting_type, key ) )
setter( color )
else:
setter( settings.get( setting_type, key ) )
widget.connect( changeEvent, lambda *args: self.callGetter( settings, setting_type, key, getter ) )
def callSetter( self, settings, key, args ):
if args[0] == "bool":
args[1]( settings.get_boolean(key) )
elif args[0] == "string":
args[1]( settings.get_string(key) )
elif args[0] == "int":
args[1]( settings.get_int(key) )
elif args[0] == "color":
color = Gdk.RGBA()
color.parse( settings.get_string(key) )
args[1]( color )
def callGetter( self, settings, setting_type, key, getter ):
if (setting_type == "int"):
settings.set( setting_type, key, int(getter()))
else:
settings.set( setting_type, key, getter())
def toggleUseCustomColors( self, widget ):
self.backgroundColor.set_sensitive( widget.get_active() )
self.headingColor.set_sensitive( widget.get_active() )
self.backgroundColorLabel.set_sensitive( widget.get_active() )
self.headingColorLabel.set_sensitive( widget.get_active() )
def getBackgroundColor( self ):
color = self.backgroundColor.get_rgba()
return self.gdkRGBAToString( color )
def getHeadingColor( self ):
color = self.headingColor.get_rgba()
return self.gdkRGBAToString( color )
def gdkRGBAToString( self, gdkRGBA ):
return "#%.2X%.2X%.2X" % ( gdkRGBA.red * 256, gdkRGBA.green * 256, gdkRGBA.blue * 256 )
def moveUp( self, upButton ):
treeselection = self.customplacestree.get_selection()
currentiter = (treeselection.get_selected())[1]
if ( treeselection != None ):
lagiter = self.customplacestreemodel.get_iter_first()
nextiter = self.customplacestreemodel.get_iter_first()
while ( (self.customplacestreemodel.get_path(nextiter) != self.customplacestreemodel.get_path(currentiter)) & (nextiter != None)):
lagiter = nextiter
nextiter = self.customplacestreemodel.iter_next(nextiter)
if (nextiter != None):
self.customplacestreemodel.swap(currentiter, lagiter)
return
def newPlace(self, newButton):
self.builder.get_object("label2").set_text(_("Name:"))
self.builder.get_object("label1").set_text(_("Path:"))
newPlaceDialog = self.builder.get_object( "editPlaceDialog" )
folderChooserDialog = self.builder.get_object( "fileChooserDialog" )
newPlaceDialog.set_transient_for(self.mainWindow)
newPlaceDialog.set_icon_from_file("/usr/lib/linuxmint/mintMenu/icon.svg")
newPlaceDialog.set_title(self.newPlaceDialogTitle)
folderChooserDialog.set_title(self.folderChooserDialogTitle)
newPlaceDialog.set_default_response(Gtk.ResponseType.OK)
newPlaceName = self.builder.get_object( "nameEntryBox" )
newPlacePath = self.builder.get_object( "pathEntryBox" )
folderButton = self.builder.get_object( "folderButton" )
def chooseFolder(folderButton):
currentPath = newPlacePath.get_text()
if (currentPath!=""):
folderChooserDialog.select_filename(currentPath)
response = folderChooserDialog.run()
folderChooserDialog.hide()
if (response == Gtk.ResponseType.OK):
newPlacePath.set_text( folderChooserDialog.get_filenames()[0] )
folderButton.connect("clicked", chooseFolder)
response = newPlaceDialog.run()
newPlaceDialog.hide()
if (response == Gtk.ResponseType.OK ):
name = newPlaceName.get_text()
path = newPlacePath.get_text()
if (name != "" and path !=""):
self.customplacestreemodel.append( (name, path) )
def editPlace(self, editButton):
self.builder.get_object("label2").set_text(_("Name:"))
self.builder.get_object("label1").set_text(_("Path:"))
editPlaceDialog = self.builder.get_object( "editPlaceDialog" )
folderChooserDialog = self.builder.get_object( "fileChooserDialog" )
editPlaceDialog.set_transient_for(self.mainWindow)
editPlaceDialog.set_icon_from_file("/usr/lib/linuxmint/mintMenu/icon.svg")
editPlaceDialog.set_title(self.editPlaceDialogTitle)
folderChooserDialog.set_title(self.folderChooserDialogTitle)
editPlaceDialog.set_default_response(Gtk.ResponseType.OK)
editPlaceName = self.builder.get_object( "nameEntryBox" )
editPlacePath = self.builder.get_object( "pathEntryBox" )
folderButton = self.builder.get_object( "folderButton" )
treeselection = self.customplacestree.get_selection()
currentiter = (treeselection.get_selected())[1]
if (currentiter != None):
initName = self.customplacestreemodel.get_value(currentiter, 0)
initPath = self.customplacestreemodel.get_value(currentiter, 1)
editPlaceName.set_text(initName)
editPlacePath.set_text(initPath)
def chooseFolder(folderButton):
currentPath = editPlacePath.get_text()
if (currentPath!=""):
folderChooserDialog.select_filename(currentPath)
response = folderChooserDialog.run()
folderChooserDialog.hide()
if (response == Gtk.ResponseType.OK):
editPlacePath.set_text( folderChooserDialog.get_filenames()[0] )
folderButton.connect("clicked", chooseFolder)
response = editPlaceDialog.run()
editPlaceDialog.hide()
if (response == Gtk.ResponseType.OK):
name = editPlaceName.get_text()
path = editPlacePath.get_text()
if (name != "" and path != ""):
self.customplacestreemodel.set_value(currentiter, 0, name)
self.customplacestreemodel.set_value(currentiter, 1, path)
def moveDown(self, downButton):
treeselection = self.customplacestree.get_selection()
currentiter = (treeselection.get_selected())[1]
nextiter = self.customplacestreemodel.iter_next(currentiter)
if (nextiter != None):
self.customplacestreemodel.swap(currentiter, nextiter)
return
def removePlace(self, removeButton):
treeselection = self.customplacestree.get_selection()
currentiter = (treeselection.get_selected())[1]
if (currentiter != None):
self.customplacestreemodel.remove(currentiter)
return
def togglePlacesHeightEnabled(self, toggle):
if (toggle.get_active() == True):
self.placesHeightButton.set_sensitive(True)
else:
self.placesHeightButton.set_sensitive(False)
def toggleSystemHeightEnabled(self, toggle):
if (toggle.get_active() == True):
self.systemHeightButton.set_sensitive(True)
else:
self.systemHeightButton.set_sensitive(False)
def updatePlacesGSettings(self, treemodel, path, iter = None, new_order = None):
# Do only if not partway though an append operation; Append = insert+change+change and each creates a signal
if ((iter == None) or (self.customplacestreemodel.get_value(iter, 1) != None)):
treeiter = self.customplacestreemodel.get_iter_first()
customplacenames = [ ]
customplacepaths = [ ]
while( treeiter != None ):
customplacenames = customplacenames + [ self.customplacestreemodel.get_value(treeiter, 0 ) ]
customplacepaths = customplacepaths + [ self.customplacestreemodel.get_value(treeiter, 1 ) ]
treeiter = self.customplacestreemodel.iter_next(treeiter)
self.settingsPlaces.set( "list-string", "custom-paths", customplacepaths)
self.settingsPlaces.set( "list-string", "custom-names", customplacenames)
window = mintMenuConfig()
Gtk.main()

View File

@ -1 +1 @@
#!/usr/bin/python2
#!/usr/bin/python3

File diff suppressed because it is too large Load Diff

View File

@ -1,41 +1,43 @@
#!/usr/bin/python2
#!/usr/bin/python3
import gi
gi.require_version('MateDesktop', '2.0')
from gi.repository import Gtk, Gdk, GLib
from gi.repository import Pango
from gi.repository import GObject
from gi.repository import MateDesktop
import os.path
import shutil
import re
from execute import *
import unidecode
import xdg.DesktopEntry
import xdg.Menu
from filemonitor import monitor as filemonitor
import gi
gi.require_version("Gtk", "3.0")
gi.require_version("MateDesktop", "2.0")
from gi.repository import Gtk, Gdk, GdkPixbuf, GLib, GObject, Pango, MateDesktop
from plugins.execute import Execute
from plugins.filemonitor import monitor as filemonitor
class IconManager(GObject.GObject):
__gsignals__ = {
"changed" : (GObject.SignalFlags.RUN_LAST, None, () )
}
"changed" : (GObject.SignalFlags.RUN_LAST, None, ())
}
def __init__( self ):
GObject.GObject.__init__( self )
self.icons = { }
def __init__(self):
GObject.GObject.__init__(self)
self.icons = {}
self.count = 0
# Some apps don't put a default icon in the default theme folder, so we will search all themes
def createTheme( d ):
theme = Gtk.IconTheme()
theme.set_custom_theme( d )
return theme
# def createTheme(d):
# theme = Gtk.IconTheme()
# theme.set_custom_theme(d)
# return theme
# This takes to much time and there are only a very few applications that use icons from different themes
#self.themes = map( createTheme, [ d for d in os.listdir( "/usr/share/icons" ) if os.path.isdir( os.path.join( "/usr/share/icons", d ) ) ] )
#self.themes = map( createTheme, [d for d in os.listdir("/usr/share/icons") if os.path.isdir(os.path.join("/usr/share/icons", d))])
self.defaultTheme = Gtk.IconTheme.get_default()
defaultKdeTheme = createTheme( "kde.default" )
#defaultKdeTheme = createTheme("kde.default")
# Setup and clean up the temp icon dir
configDir = GLib.get_user_config_dir()
@ -47,19 +49,17 @@ class IconManager(GObject.GObject):
os.remove(os.path.join(self.iconDir, fn))
self.defaultTheme.append_search_path(self.iconDir)
# Themes with the same content as the default them aren't needed
#self.themes = [ theme for theme in self.themes if theme.list_icons() != defaultTheme.list_icons() ]
#self.themes = [theme for theme in self.themes if theme.list_icons() != defaultTheme.list_icons()]
self.themes = [ self.defaultTheme, defaultKdeTheme ]
#self.themes = [self.defaultTheme, defaultKdeTheme]
self.themes = [self.defaultTheme]
# Listen for changes in the themes
for theme in self.themes:
theme.connect("changed", self.themeChanged )
def getIcon( self, iconName, iconSize ):
# for theme in self.themes:
# theme.connect("changed", self.themeChanged)
def getIcon(self, iconName, iconSize):
if not iconName:
return None
@ -67,11 +67,11 @@ class IconManager(GObject.GObject):
iconFileName = ""
realIconName = ""
needTempFile = False
#[ iconWidth, iconHeight ] = self.getIconSize( iconSize )
#[iconWidth, iconHeight] = self.getIconSize(iconSize)
if iconSize <= 0:
return None
elif os.path.isabs( iconName ):
elif os.path.isabs(iconName):
iconFileName = iconName
needTempFile = True
else:
@ -80,99 +80,86 @@ class IconManager(GObject.GObject):
else:
realIconName = iconName
if iconFileName and needTempFile and os.path.exists( iconFileName ):
if iconFileName and needTempFile and os.path.exists(iconFileName):
tmpIconName = iconFileName.replace("/", "-")
realIconName = tmpIconName[:-4]
if not os.path.exists(os.path.join(self.iconDir, tmpIconName)):
shutil.copyfile(iconFileName, os.path.join(self.iconDir, tmpIconName))
self.defaultTheme.append_search_path(self.iconDir)
image = Gtk.Image()
icon_found = False
for theme in self.themes:
if theme.lookup_icon(realIconName, 0, Gtk.IconLookupFlags.FORCE_REGULAR):
icon_found = True
break
if icon_found:
image.set_from_icon_name(realIconName, Gtk.IconSize.DND)
image.set_pixel_size(iconSize)
else:
image = None
image = Gtk.Image.new_from_icon_name(realIconName, Gtk.IconSize.DND)
image.set_pixel_size(iconSize)
return image
except Exception, e:
print "Exception " + e.__class__.__name__ + ": " + e.message
except Exception as e:
print("Exception %s: %s" % (e.__class__.__name__, e))
return None
def themeChanged( self, theme ):
self.emit( "changed" )
def themeChanged(self, theme):
self.emit("changed")
GObject.type_register(IconManager)
class easyButton( Gtk.Button ):
class easyButton(Gtk.Button):
def __init__( self, iconName, iconSize, labels = None, buttonWidth = -1, buttonHeight = -1 ):
GObject.GObject.__init__( self )
self.connections = [ ]
def __init__(self, iconName, iconSize, labels=None, buttonWidth=-1, buttonHeight=-1, ellipsis=True):
GObject.GObject.__init__(self)
self.connections = []
self.iconName = iconName
self.iconSize = iconSize
self.showIcon = True
self.ellipsis = ellipsis
self.set_relief( Gtk.ReliefStyle.NONE )
self.set_size_request( buttonWidth, buttonHeight )
self.set_relief(Gtk.ReliefStyle.NONE)
self.set_size_request(buttonWidth, buttonHeight)
Align1 = Gtk.Alignment.new( 0, 0.5, 1.0, 0 )
HBox1 = Gtk.Box( orientation=Gtk.Orientation.HORIZONTAL )
self.labelBox = Gtk.Box( orientation=Gtk.Orientation.VERTICAL, spacing=2 )
Align1 = Gtk.Alignment.new(0, 0.5, 1.0, 0)
HBox1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
self.labelBox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=2)
self.buttonImage = self.getIcon(self.iconSize)
if not self.buttonImage:
self.buttonImage = Gtk.Image()
self.buttonImage.set_size_request(self.iconSize, self.iconSize)
self.buttonImage = Gtk.Image()
icon = self.getIcon( self.iconSize )
if icon:
self.buttonImage = icon
else:
#[ iW, iH ] = iconManager.getIconSize( self.iconSize )
self.buttonImage.set_size_request( self.iconSize, self.iconSize )
self.image_box = Gtk.Box( orientation=Gtk.Orientation.HORIZONTAL )
self.image_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
self.image_box.pack_start(self.buttonImage, False, False, 5)
self.image_box.show_all()
HBox1.pack_start( self.image_box, False, False, 0 )
HBox1.pack_start(self.image_box, False, False, 0)
if labels:
for label in labels:
if isinstance( label, basestring ):
self.addLabel( label )
elif isinstance( label, list ):
self.addLabel( label[0], label[1] )
if isinstance(label, str):
self.addLabel(label)
elif isinstance(label, list):
self.addLabel(label[0], label[1])
self.labelBox.show()
HBox1.pack_start( self.labelBox , True, True, 0)
HBox1.pack_start(self.labelBox , True, True, 0)
HBox1.show()
Align1.add( HBox1 )
Align1.add(HBox1)
Align1.show()
self.add( Align1 )
self.add(Align1)
self.connectSelf( "destroy", self.onDestroy )
self.connect( "released", self.onRelease )
self.connectSelf("destroy", self.onDestroy)
self.connect("released", self.onRelease)
# Reload icons when the theme changed
self.themeChangedHandlerId = iconManager.connect("changed", self.themeChanged )
# self.themeChangedHandlerId = iconManager.connect("changed", self.themeChanged)
def connectSelf( self, event, callback ):
self.connections.append( self.connect( event, callback ) )
def connectSelf(self, event, callback):
self.connections.append(self.connect(event, callback))
def onRelease( self, widget ):
widget.get_style_context().set_state( Gtk.StateFlags.NORMAL )
def onRelease(self, widget):
widget.get_style_context().set_state(Gtk.StateFlags.NORMAL)
def onDestroy( self, widget ):
def onDestroy(self, widget):
self.buttonImage.clear()
iconManager.disconnect( self.themeChangedHandlerId )
# iconManager.disconnect(self.themeChangedHandlerId)
for connection in self.connections:
self.disconnect( connection )
self.disconnect(connection)
del self.connections
def addLabel( self, text, styles = None ):
def addLabel(self, text, styles = None):
label = Gtk.Label()
if "<b>" in text or "<span" in text:
label.set_markup(text.replace('&', '&amp;')) # don't remove our pango
@ -182,115 +169,107 @@ class easyButton( Gtk.Button ):
if styles:
labelStyle = Pango.AttrList()
for attr in styles:
labelStyle.insert( attr )
label.set_attributes( labelStyle )
labelStyle.insert(attr)
label.set_attributes(labelStyle)
label.set_ellipsize( Pango.EllipsizeMode.END )
label.set_alignment( 0.0, 1.0 )
if self.ellipsis:
label.set_ellipsize(Pango.EllipsizeMode.END)
label.set_alignment(0.0, 1.0)
label.set_max_width_chars(0)
label.show()
self.labelBox.pack_start( label , True, True, 0)
self.labelBox.pack_start(label , True, True, 0)
def getIcon ( self, iconSize ):
def getIcon(self, iconSize):
if not self.iconName:
return None
icon = iconManager.getIcon( self.iconName, iconSize )
if icon is None:
icon = iconManager.getIcon( "application-default-icon", iconSize )
icon = iconManager.getIcon(self.iconName, iconSize)
return icon
def setIcon ( self, iconName ):
def setIcon(self, iconName):
self.iconName = iconName
self.iconChanged()
# IconTheme changed, setup new button icons
def themeChanged( self, theme ):
def themeChanged(self, theme):
self.iconChanged()
def iconChanged( self ):
icon = self.getIcon( self.iconSize )
def iconChanged(self):
icon = self.getIcon(self.iconSize)
self.buttonImage.destroy()
if icon:
self.buttonImage = icon
self.image_box.pack_start(self.buttonImage, False, False, 5)
self.image_box.show_all()
else:
#[iW, iH ] = iconManager.getIconSize( self.iconSize )
self.buttonImage.set_size_request( self.iconSize, self.iconSize )
#[iW, iH] = iconManager.getIconSize(self.iconSize)
self.buttonImage.set_size_request(self.iconSize, self.iconSize )
def setIconSize( self, size ):
def setIconSize(self, size):
self.iconSize = size
icon = self.getIcon( self.iconSize )
icon = self.getIcon(self.iconSize)
self.buttonImage.destroy()
if icon:
self.buttonImage = icon
self.image_box.pack_start(self.buttonImage, False, False, 5)
self.image_box.show_all()
elif self.iconSize:
#[ iW, iH ] = iconManager.getIconSize( self.iconSize )
self.buttonImage.set_size_request( self.iconSize, self.iconSize )
#[iW, iH] = iconManager.getIconSize(self.iconSize)
self.buttonImage.set_size_request(self.iconSize, self.iconSize )
class ApplicationLauncher( easyButton ):
class ApplicationLauncher(easyButton):
def __init__( self, desktopFile, iconSize):
def __init__(self, desktopFile, iconSize):
if isinstance( desktopFile, xdg.Menu.MenuEntry ):
if isinstance(desktopFile, xdg.Menu.MenuEntry):
desktopItem = desktopFile.DesktopEntry
desktopFile = desktopItem.filename
self.appDirs = desktop.desktopFile.AppDirs
elif isinstance( desktopFile, xdg.Menu.DesktopEntry ):
self.appDirs = desktopFile.AppDirs
elif isinstance(desktopFile, xdg.Menu.DesktopEntry):
desktopItem = desktopFile
desktopFile = desktopItem.filename
self.appDirs = [ os.path.dirname( desktopItem.filename ) ]
self.appDirs = [os.path.dirname(desktopItem.filename)]
else:
desktopItem = xdg.DesktopEntry.DesktopEntry( desktopFile )
self.appDirs = [ os.path.dirname( desktopFile ) ]
desktopItem = xdg.DesktopEntry.DesktopEntry(desktopFile)
self.appDirs = [os.path.dirname(desktopFile)]
self.desktopFile = desktopFile
self.startupMonitorId = 0
self.relevance = 0
self.loadDesktopEntry( desktopItem )
self.loadDesktopEntry(desktopItem)
self.desktopEntryMonitors = []
base = os.path.basename( self.desktopFile )
for dir in self.appDirs:
self.desktopEntryMonitors.append( filemonitor.addMonitor( os.path.join(dir, base) , self.desktopEntryFileChangedCallback ) )
base = os.path.basename(self.desktopFile)
for directory in self.appDirs:
self.desktopEntryMonitors.append(filemonitor.addMonitor(os.path.join(directory, base) , self.desktopEntryFileChangedCallback))
easyButton.__init__( self, self.appIconName, iconSize )
easyButton.__init__(self, self.appIconName, iconSize)
self.setupLabels()
# Drag and Drop
self.connectSelf( "drag-data-get", self.dragDataGet )
self.connectSelf("drag-data-get", self.dragDataGet)
targets = ( Gtk.TargetEntry.new( "text/plain", 0, 100 ), Gtk.TargetEntry.new( "text/uri-list", 0, 101 ) )
self.drag_source_set( Gdk.ModifierType.BUTTON1_MASK, targets, Gdk.DragAction.COPY )
targets = (Gtk.TargetEntry.new("text/plain", 0, 100), Gtk.TargetEntry.new("text/uri-list", 0, 101))
self.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, targets, Gdk.DragAction.COPY)
self.drag_source_set_icon_name(self.iconName)
icon = self.getIcon( Gtk.IconSize.DND )
if icon:
iconName, s = icon.get_icon_name()
self.drag_source_set_icon_name( iconName )
self.connectSelf("focus-in-event", self.onFocusIn)
self.connectSelf("focus-out-event", self.onFocusOut)
self.connectSelf("clicked", self.execute)
self.connectSelf( "focus-in-event", self.onFocusIn )
self.connectSelf( "focus-out-event", self.onFocusOut )
self.connectSelf( "clicked", self.execute )
def loadDesktopEntry( self, desktopItem ):
def loadDesktopEntry(self, desktopItem):
try:
self.appName = self.strip_accents(desktopItem.getName())
self.appGenericName = self.strip_accents(desktopItem.getGenericName())
self.appComment = self.strip_accents(desktopItem.getComment())
self.appExec = self.strip_accents(desktopItem.getExec().replace('\\\\', '\\'))
self.appName = desktopItem.getName()
self.appGenericName = desktopItem.getGenericName()
self.appComment = desktopItem.getComment()
self.appExec = desktopItem.getExec().replace('\\\\', '\\')
self.appIconName = desktopItem.getIcon()
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.appPath = desktopItem.getPath()
self.prefersOffload = desktopItem.get("PrefersNonDefaultGPU", "Desktop Entry", type="boolean")
if not self.appMateDocPath:
self.appKdeDocPath = desktopItem.getDocPath() or ""
@ -299,77 +278,88 @@ class ApplicationLauncher( easyButton ):
self.appGenericName = self.appGenericName.strip()
self.appComment = self.appComment.strip()
basename = os.path.basename( self.desktopFile )
self.startupFilePath = os.path.join( os.path.expanduser("~"), ".config", "autostart", basename )
basename = os.path.basename(self.desktopFile)
self.startupFilePath = os.path.join(os.path.expanduser("~"), ".config/autostart", basename)
if self.startupMonitorId:
filemonitor.removeMonitor( self.startupMonitorId )
if os.path.exists (self.startupFilePath):
self.startupMonitorId = filemonitor.addMonitor( self.startupFilePath, self.startupFileChanged )
filemonitor.removeMonitor(self.startupMonitorId )
if os.path.exists(self.startupFilePath):
self.startupMonitorId = filemonitor.addMonitor(self.startupFilePath, self.startupFileChanged)
except Exception, e:
print e
except Exception as e:
print(e)
self.appName = ""
self.appGenericName = ""
self.appComment = ""
self.appExec = ""
self.appIconName = ""
self.appIconName = ""
self.appCategories = ""
self.appDocPath = ""
self.startupMonitorId = 0
def onFocusIn(self, widget, event):
self.set_relief(Gtk.ReliefStyle.HALF)
def onFocusIn( self, widget, event ):
self.set_relief( Gtk.ReliefStyle.HALF )
def onFocusOut(self, widget, event):
self.set_relief(Gtk.ReliefStyle.NONE)
def onFocusOut( self, widget, event ):
self.set_relief( Gtk.ReliefStyle.NONE )
def setupLabels(self):
self.addLabel(self.appName)
def setupLabels( self ):
self.addLabel( self.appName )
def filterText(self, text):
keywords = self.strip_case_and_accents(text).split()
self.relevance = 0
appName = self.strip_case_and_accents(self.appName)
appGenericName = self.strip_case_and_accents(self.appGenericName)
appComment = self.strip_case_and_accents(self.appComment)
appExec = self.strip_case_and_accents(self.appExec)
def filterText( self, text ):
keywords = text.lower().split()
appName = self.appName.lower()
appGenericName = self.appGenericName.lower()
appComment = self.appComment.lower()
appExec = self.appExec.lower()
for keyword in keywords:
keyw = self.strip_accents(keyword)
if keyw != "" and appName.find( keyw ) == -1 and appGenericName.find( keyw ) == -1 and appComment.find( keyw ) == -1 and appExec.find( keyw ) == -1:
if appName == keyword:
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()
return False
self.show()
return True
def strip_accents(self, string):
value = string
if isinstance(string, unicode):
def strip_case_and_accents(self, string):
if isinstance(string, str):
try:
value = string.encode('UTF8', 'ignore')
value = unidecode.unidecode(string.lower())
except:
pass
return value
def getTooltip( self ):
def getTooltip(self):
tooltip = self.appName
if self.appComment != "" and self.appComment != self.appName:
tooltip = tooltip + "\n" + self.appComment
return tooltip
def dragDataGet( self, widget, context, selection, targetType, eventTime ):
def dragDataGet(self, widget, context, selection, targetType, eventTime):
if targetType == 100: # text/plain
selection.set_text( "'" + self.desktopFile + "'", -1 )
selection.set_text("'" + self.desktopFile + "'", -1)
elif targetType == 101: # text/uri-list
if self.desktopFile[0:7] == "file://":
selection.set_uris( [ self.desktopFile ] )
selection.set_uris([self.desktopFile])
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.useTerminal:
cmd = "x-terminal-emulator -e \"" + self.appExec + "\""
@ -377,74 +367,77 @@ class ApplicationLauncher( easyButton ):
cmd = "mate-terminal -e \"" + self.appExec + "\""
Execute(cmd, self.appPath)
else:
Execute(self.appExec, self.appPath)
offload = False
def uninstall (self, *args ):
Execute("gksu /usr/lib/linuxmint/common/mint-remove-application.py " + self.desktopFile)
try:
offload = kwargs["offload"]
except KeyError:
pass
if self.prefersOffload:
offload = True
Execute(None, desktopFile=self.desktopFile, offload=offload)
def uninstall(self, *args):
Execute("mint-remove-application " + self.desktopFile)
# IconTheme changed, setup new icons for button and drag 'n drop
def iconChanged( self ):
easyButton.iconChanged( self )
def iconChanged(self):
easyButton.iconChanged(self)
icon = self.getIcon( Gtk.IconSize.DND )
icon = self.getIcon(Gtk.IconSize.DND)
if icon:
iconName, size = icon.get_icon_name()
self.drag_source_set_icon_name( iconName )
self.drag_source_set_icon_name(iconName)
def startupFileChanged( self, *args ):
self.inStartup = os.path.exists( self.startupFilePath )
def startupFileChanged(self, *args):
self.inStartup = os.path.exists(self.startupFilePath)
def addToStartup( self ):
startupDir = os.path.join( os.path.expanduser("~"), ".config", "autostart" );
if not os.path.exists( startupDir ):
os.makedirs( startupDir )
def addToStartup(self):
startupDir = os.path.join(os.path.dirname(self.startupFilePath))
if not os.path.exists(startupDir):
os.makedirs(startupDir)
shutil.copyfile( self.desktopFile, self.startupFilePath )
shutil.copyfile(self.desktopFile, self.startupFilePath)
# Remove %u, etc. from Exec entry, because MATE will not replace them when it starts the app
item = MateDesktop.DesktopItem.new_from_uri(self.startupFilePath, MateDesktop.DesktopItemLoadFlags.ONLY_IF_EXISTS)
if item:
r = re.compile("%[A-Za-z]");
tmp = r.sub("", item.get_string( MateDesktop.DESKTOP_ITEM_EXEC ) ).strip()
item.set_string( MateDesktop.DESKTOP_ITEM_EXEC, tmp )
item.save( self.startupFilePath, 0 )
r = re.compile("%[A-Za-z]")
tmp = r.sub("", item.get_string(MateDesktop.DESKTOP_ITEM_EXEC)).strip()
item.set_string(MateDesktop.DESKTOP_ITEM_EXEC, tmp)
item.save(self.startupFilePath, 0)
def removeFromStartup( self ):
if os.path.exists( self.startupFilePath ):
os.remove( self.startupFilePath )
def removeFromStartup(self):
if os.path.exists(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 )
def removeFromFavourites(self):
if os.path.exists(self.favouritesFilePath):
os.remove(self.favouritesFilePath)
shutil.copyfile( self.desktopFile, self.favouritesFilePath )
def removeFromFavourites( self ):
if os.path.exists( self.favouritesFilePath ):
os.remove( self.favouritesFilePath )
def isInStartup( self ):
def isInStartup(self):
#return self.inStartup
return os.path.exists( self.startupFilePath )
return os.path.exists(self.startupFilePath)
def onDestroy( self, widget ):
easyButton.onDestroy( self, widget )
def onDestroy(self, widget):
easyButton.onDestroy(self, widget)
if self.startupMonitorId:
filemonitor.removeMonitor( self.startupMonitorId )
filemonitor.removeMonitor(self.startupMonitorId)
for id in self.desktopEntryMonitors:
filemonitor.removeMonitor( id )
filemonitor.removeMonitor(id)
def desktopEntryFileChangedCallback (self):
def desktopEntryFileChangedCallback(self):
GLib.timeout_add(200, self.onDesktopEntryFileChanged)
def onDesktopEntryFileChanged( self ):
def onDesktopEntryFileChanged(self):
exists = False
base = os.path.basename( self.desktopFile )
for dir in self.appDirs:
if os.path.exists( os.path.join( dir, base ) ):
# print os.path.join( dir, base ), self.desktopFile
self.loadDesktopEntry( xdg.DesktopEntry.DesktopEntry( os.path.join( dir, base ) ) )
base = os.path.basename(self.desktopFile)
for directory in self.appDirs:
if os.path.exists(os.path.join(directory, base)):
# print os.path.join(dir, base), self.desktopFile
self.loadDesktopEntry(xdg.DesktopEntry.DesktopEntry(os.path.join(directory, base)))
for child in self.labelBox:
child.destroy()
@ -460,102 +453,89 @@ class ApplicationLauncher( easyButton ):
self.destroy()
return False
class MenuApplicationLauncher( ApplicationLauncher ):
class MenuApplicationLauncher(ApplicationLauncher):
def __init__( self, desktopFile, iconSize, category, showComment, highlight=False ):
def __init__(self, desktopFile, iconSize, category, showComment, highlight=False):
self.showComment = showComment
self.appCategory = category
self.highlight = highlight
ApplicationLauncher.__init__( self, desktopFile, iconSize )
ApplicationLauncher.__init__(self, desktopFile, iconSize)
def filterCategory( self, category ):
def filterCategory(self, category):
if self.appCategory == category or category == "":
self.show()
else:
self.hide()
def setupLabels( self ):
def setupLabels(self):
appName = self.appName
appComment = self.appComment
if self.highlight:
try:
#color = self.labelBox.get_style_context().get_color( Gtk.StateFlags.SELECTED ).to_string()
#if len(color) > 0 and color[0] == "#":
#appName = "<span foreground=\"%s\"><b>%s</b></span>" % (color, appName);
#appComment = "<span foreground=\"%s\"><b>%s</b></span>" % (color, appComment);
#appName = "<b>%s</b>" % (appName);
#appComment = "<b>%s</b>" % (appComment);
#else:
#appName = "<b>%s</b>" % (appName);
#appComment = "<b>%s</b>" % (appComment);
appName = "<b>%s</b>" % (appName);
appComment = "<b>%s</b>" % (appComment);
except Exception, detail:
print detail
pass
appName = "<b>%s</b>" % appName
appComment = "<b>%s</b>" % appComment
except Exception as e:
print(e)
if self.showComment and self.appComment != "":
if self.iconSize <= 2:
self.addLabel( '<span size="small">%s</span>' % appName)
self.addLabel( '<span size="x-small">%s</span>' % appComment)
self.addLabel('<span size="small">%s</span>\n<span size="x-small">%s</span>' %
(appName, appComment))
else:
self.addLabel( appName )
self.addLabel( '<span size="small">%s</span>' % appComment)
self.addLabel('%s\n<span size="small">%s</span>' %
(appName, appComment))
else:
self.addLabel( appName )
self.addLabel(appName)
def execute( self, *args ):
def execute(self, *args, **kwargs):
self.highlight = False
for child in self.labelBox:
child.destroy()
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
for child in self.labelBox:
child.destroy()
self.setupLabels()
class FavApplicationLauncher( ApplicationLauncher ):
class FavApplicationLauncher(ApplicationLauncher):
def __init__( self, desktopFile, iconSize, swapGeneric = False ):
def __init__(self, desktopFile, iconSize, swapGeneric = False):
self.swapGeneric = swapGeneric
ApplicationLauncher.__init__( self, desktopFile, iconSize )
ApplicationLauncher.__init__(self, desktopFile, iconSize)
def setupLabels( self ):
def setupLabels(self):
if self.appGenericName:
if self.swapGeneric:
self.addLabel( '<span weight="bold">%s</span>' % self.appName )
self.addLabel( self.appGenericName )
self.addLabel('<span weight="bold">%s</span>' % self.appName)
self.addLabel(self.appGenericName)
else:
self.addLabel( '<span weight="bold">%s</span>' % self.appGenericName )
self.addLabel( self.appName )
self.addLabel('<span weight="bold">%s</span>' % self.appGenericName)
self.addLabel(self.appName)
else:
self.addLabel( '<span weight="bold">%s</span>' % self.appName )
self.addLabel('<span weight="bold">%s</span>' % self.appName)
if self.appComment != "":
self.addLabel( self.appComment )
self.addLabel(self.appComment)
else:
self.addLabel ( "" )
self.addLabel("")
def setSwapGeneric( self, swapGeneric ):
def setSwapGeneric(self, swapGeneric):
self.swapGeneric = swapGeneric
for child in self.labelBox:
child.destroy()
self.setupLabels()
class CategoryButton(easyButton):
class CategoryButton( easyButton ):
def __init__( self, iconName, iconSize, labels , f ):
easyButton.__init__( self, iconName, iconSize, labels )
def __init__(self, iconName, iconSize, labels , f):
easyButton.__init__(self, iconName, iconSize, labels, ellipsis=False)
self.filter = f
iconManager = IconManager()

View File

@ -1,14 +0,0 @@
#!/usr/bin/python2
import os
import os.path
import urllib
def GetFilePath(uri):
path = urllib.url2pathname(uri) # escape special chars
path = path.strip('\r\n\x00') # remove \r\n and NULL
# get the path to file
if path.startswith('file://'): # nautilus, rox
path = path[7:] # 7 is len('file://')
return path

View File

@ -1,94 +0,0 @@
#!/usr/bin/python2
from gi.repository import Gio
class EasyGSettings:
def __init__( self, schema = None ):
self.schema = schema
self.settings = Gio.Settings.new(self.schema)
self.handlerIds = [ ]
def get( self, type, key ):
if type == "bool":
return self.settings.get_boolean( key )
if type == "string":
return self.settings.get_string( key )
if type == "int":
return self.settings.get_int( key )
if type == "color":
color = self.settings.get_string( key )
if not self.evalColor( color ):
self.settings.set_string(key, "#ffffff")
return "#ffffff"
return color
t = type.split("-")
if len(t) == 2 and t[0] == "list":
return self.settings.get_strv( key )
return self.settings.get( key )
def set( self, type, key, value ):
if type == "bool":
return self.settings.set_boolean( key, value )
if type == "string":
return self.settings.set_string( key, value )
if type == "int":
return self.settings.set_int( key, value )
if type == "color":
if self.evalColor( value ):
return self.settings.set_string( key, value )
else:
return self.settings.set_string( key, "#ffffff" )
t = type.split("-")
if len(t) == 2 and t[0] == "list":
return self.settings.set_strv( key, value )
return self.settings.set( key, value )
def notifyAdd( self, key, callback, args = None ):
handlerId = self.settings.connect("changed::"+key, callback, args)
self.handlerIds.append( handlerId )
return handlerId
def notifyRemove( self, handlerId ):
return self.settings.disconnect(handlerId)
def notifyRemoveAll( self ):
for handlerId in self.handlerIds:
self.settings.disconnect( handlerId )
def evalColor(self, colorToTest ):
if colorToTest[0] != '#' or len( colorToTest ) != 7:
return False
for i in colorToTest[1:]:
if i not in ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']:
return False
return True
def bindGSettingsEntryToVar( self, type, key, obj, varName ):
return self.notifyAdd( key, self.setVar, ( type, obj, varName ) )
def setVar( self, settings, key, args ):
type, obj, varName = args
if type == "string":
setattr( obj, varName, settings.get_string(key) )
elif type == "int":
setattr( obj, varName, settings.get_int(key) )
elif type == "float":
setattr( obj, varName, settings.get_float(key) )
elif type == "bool":
setattr( obj, varName, settings.get_boolean(key) )
else:
setattr( obj, varName, settings.get_value(key) )

View File

@ -1,47 +1,75 @@
#!/usr/bin/python2
#!/usr/bin/python3
import os
from gi.repository import Gio, GLib, Gdk, XApp
def RemoveArgs(Execline):
NewExecline = []
Specials=["\"%c\"", "%f","%F","%u","%U","%d","%D","%n","%N","%i","%c","%k","%v","%m","%M", "-caption", "/bin/sh", "sh", "-c", "STARTED_FROM_MENU=yes"]
for elem in Execline:
elem = elem.replace("'","")
elem = elem.replace("\"", "")
if elem not in Specials:
print elem
NewExecline.append(elem)
return NewExecline
if isinstance(Execline, list):
Execline = ' '.join(Execline)
Specials = ["%f", "%F", "%u", "%U", "%d", "%D", "%n", "%N", "%i", "%c", "%k", "%v", "%m", "%M",
"STARTED_FROM_MENU=yes"]
for spec in Specials:
if spec in Execline:
Execline = Execline.replace(spec, "")
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
def Execute( cmd , commandCwd=None):
if not commandCwd:
cwd = os.path.expanduser( "~" );
else:
tmpCwd = os.path.expanduser( commandCwd );
def Execute(cmd , commandCwd=None, desktopFile=None, offload=False):
if desktopFile:
launcher = Gio.DesktopAppInfo.new_from_filename(desktopFile)
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
except GLib.Error as e:
print("Error launching %s: %s" % (launcher.get_name(), e.message))
return False
cwd = os.path.expanduser("~")
if commandCwd:
tmpCwd = os.path.expanduser(commandCwd)
if (os.path.exists(tmpCwd)):
cwd = tmpCwd
if isinstance( cmd, str ) or isinstance( cmd, unicode):
if (cmd.find("ubiquity") >= 0) or (cmd.find("/home/") >= 0) or (cmd.find("su-to-root") >= 0) or (cmd.find("xdg-su") >= 0) or (cmd.find("\"") >= 0):
print "running manually..."
try:
os.chdir(cwd)
os.system(cmd + " &")
return True
except Exception, detail:
print detail
return False
cmd = cmd.split()
cmd = RemoveArgs(cmd)
try:
os.chdir( cwd )
string = ' '.join(cmd)
string = string + " &"
os.system(string)
os.chdir(cwd)
os.system(cmd + " &")
return True
except Exception, detail:
print detail
except Exception as e:
print(e)
return False

View File

@ -1,4 +1,4 @@
#!/usr/bin/python2
#!/usr/bin/python3
import os
import os.path
@ -12,65 +12,66 @@ try:
except ImportError:
hasInotify = False
if hasInotify:
class FileMonitor(object):
def __init__( self ):
def __init__(self):
self.monitorId = 0
self.wm = pyinotify.WatchManager()
self.wdds = {}
self.callbacks = {}
self.notifier = pyinotify.ThreadedNotifier(self.wm, self.fileChanged)
self.notifier.setDaemon( True )
self.notifier.setDaemon(True)
self.notifier.start()
def addMonitor( self, filename, callback, args = None ):
def addMonitor(self, filename, callback, args = None):
try:
mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE | pyinotify.IN_MODIFY
mId = self.wm.add_watch( filename, mask, rec = True)[filename]
mId = self.wm.add_watch(filename, mask, rec = True)[filename]
if mId >= 0:
self.callbacks[mId] = ( callback, args )
except Exception, detail:
self.callbacks[mId] = (callback, args)
except:
mId = 0
return mId
def removeMonitor( self, monitorId ):
def removeMonitor(self, monitorId):
if monitorId in self.callbacks:
self.wm.rm_watch( monitorId )
self.wm.rm_watch(monitorId)
del self.callbacks[monitorId]
def fileChanged(self, event ):
def fileChanged(self, event):
if event.wd in self.callbacks:
# print event.path
#print event.path
callback = self.callbacks[event.wd]
if callback[1]:
GLib.idle_add( callback[0], callback[1] )
GLib.idle_add(callback[0], callback[1])
else:
GLib.idle_add( callback[0] )
GLib.idle_add(callback[0])
else:
class _MonitoredFile( object ):
def __init__( self, filename, callback, monitorId, args ):
class _MonitoredFile(object):
def __init__(self, filename, callback, monitorId, args):
self.filename = filename
self.callback = callback
self.monitorId = monitorId
self.args = args
self.exists = os.path.exists( self.filename )
self.exists = os.path.exists(self.filename)
if self.exists:
self.mtime = os.stat( filename ).st_mtime
self.mtime = os.stat(filename).st_mtime
else:
self.mtime = 0
def hasChanged( self ):
if os.path.exists( self.filename ):
def hasChanged(self):
if os.path.exists(self.filename):
if not self.exists:
self.exists = True
self.mtime = os.stat( self.filename ).st_mtime
self.mtime = os.stat(self.filename).st_mtime
return True
else:
mtime = os.stat( self.filename ).st_mtime
mtime = os.stat(self.filename).st_mtime
if mtime != self.mtime:
self.mtime = mtime
return True
@ -83,7 +84,7 @@ else:
class MonitorThread(threading.Thread):
def __init__(self, monitor):
threading.Thread.__init__ ( self )
threading.Thread.__init__(self)
self.monitor = monitor
def run(self):
@ -91,34 +92,31 @@ else:
self.monitor.checkFiles()
time.sleep(1)
class FileMonitor(object):
def __init__( self ):
def __init__(self):
self.monitorId = 0
self.monitoredFiles = []
self.monitorThread = MonitorThread( self )
self.monitorThread.setDaemon( True )
self.monitorThread = MonitorThread(self)
self.monitorThread.setDaemon(True)
self.monitorThread.start()
def addMonitor( self, filename, callback, args = None ):
def addMonitor(self, filename, callback, args = None):
self.monitorId += 1
self.monitoredFiles.append( _MonitoredFile( filename, callback, self.monitorId, args ) )
self.monitoredFiles.append(_MonitoredFile(filename, callback, self.monitorId, args))
return self.monitorId
def removeMonitor( self, monitorId ):
def removeMonitor(self, monitorId):
for monitored in self.monitoredFiles:
if monitorId == monitored.monitorId:
self.monitoredFiles.remove( monitored )
self.monitoredFiles.remove(monitored)
break
def checkFiles( self ):
def checkFiles(self):
for monitored in self.monitoredFiles:
if monitored.hasChanged():
if monitored.args:
GLib.idle_add( monitored.callback, monitored.args )
GLib.idle_add(monitored.callback, monitored.args)
else:
GLib.idle_add( monitored.callback )
GLib.idle_add(monitored.callback)
monitor = FileMonitor()

View File

@ -1,16 +1,27 @@
#!/usr/bin/python2
#!/usr/bin/python3
import apt, sys
import sys
try:
cache = apt.Cache()
for pkg in cache:
if not pkg.is_installed:
name = pkg.name
summary = pkg.candidate.summary.capitalize()
description = pkg.candidate.description.replace("\n", "~~~")
print "CACHE" + "###" + str(name) + "###" + str(summary) + "###" + str(description)
except Exception, detail:
print "ERROR###ERROR###ERROR###ERROR"
print detail
import apt_pkg
if len(sys.argv) != 2:
sys.exit(1)
try:
apt_pkg.init()
cache = apt_pkg.Cache()
package_records = apt_pkg.PackageRecords(cache)
known_packages = set()
with open(sys.argv[1], "w") as f:
for pkg in cache.packages:
if pkg.selected_state or not pkg.version_list or pkg.name in known_packages:
continue
name = pkg.name
package_records.lookup(pkg.version_list.pop(0).translated_description.file_list.pop(0))
summary = package_records.short_desc
description = package_records.long_desc.replace(summary + "\n ", "").replace("\n .\n ", "~~~").replace("\n", "")
f.write("CACHE###%s###%s###%s\n" % (name, summary, description))
known_packages.add(name)
except Exception as e:
print("ERROR###ERROR###ERROR###ERROR")
print(e)
sys.exit(1)

View File

@ -1,24 +1,29 @@
#!/usr/bin/python2
#!/usr/bin/python3
from gi.repository import Gtk, Gio
import locale
import gettext
import os
import string
import gettext
import commands
import time
from glob import glob
from urllib.parse import unquote
from easybuttons import *
from easygsettings import EasyGSettings
from execute import Execute
from user import home
from urllib import unquote
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gio, GLib
from plugins.easybuttons import easyButton
from plugins.execute import Execute
# i18n
gettext.install("mintmenu", "/usr/share/linuxmint/locale")
locale.bindtextdomain("mintmenu", "/usr/share/linuxmint/locale")
locale.textdomain("mintmenu")
class pluginclass( object ):
home = os.path.expanduser("~")
def __init__( self, mintMenuWin, toggleButton, de ):
class pluginclass(object):
def __init__(self, mintMenuWin, toggleButton, de):
self.mintMenuWin = mintMenuWin
self.toggleButton = toggleButton
@ -26,103 +31,98 @@ class pluginclass( object ):
# Read UI file
builder = Gtk.Builder()
builder.add_from_file(os.path.join( os.path.dirname( __file__ ), "places.glade" ))
builder.set_translation_domain("mintmenu")
builder.add_from_file("/usr/share/linuxmint/mintmenu/places.ui")
self.placesBtnHolder = builder.get_object( "places_button_holder" )
self.editableBtnHolder = builder.get_object( "editable_button_holder" )
self.placesBtnHolder = builder.get_object("places_button_holder")
self.editableBtnHolder = builder.get_object("editable_button_holder")
self.scrolledWindow=builder.get_object("scrolledwindow2")
# These properties are NECESSARY to maintain consistency
# Set 'window' property for the plugin (Must be the root widget)
self.window = builder.get_object( "mainWindow" )
self.window = builder.get_object("mainWindow")
# Set 'heading' property for plugin
self.heading = _("Places")
# This should be the first item added to the window in glade
self.content_holder = builder.get_object( "Places" )
self.content_holder = builder.get_object("Places")
# Items to get custom colors
self.itemstocolor = [ builder.get_object( "viewport2" ) ]
self.itemstocolor = [builder.get_object("viewport2")]
# Settings
self.settings = EasyGSettings("com.linuxmint.mintmenu.plugins.places")
self.settings = Gio.Settings("com.linuxmint.mintmenu.plugins.places")
self.settings.notifyAdd( "icon-size", self.RegenPlugin )
self.settings.notifyAdd( "show-computer", self.RegenPlugin )
self.settings.notifyAdd( "show-desktop", self.RegenPlugin )
self.settings.notifyAdd( "show-home_folder", self.RegenPlugin )
self.settings.notifyAdd( "show-network", self.RegenPlugin )
self.settings.notifyAdd( "show-trash", self.RegenPlugin )
self.settings.notifyAdd( "custom-names", self.RegenPlugin )
self.settings.notifyAdd( "allow-scrollbar", self.RegenPlugin )
self.settings.notifyAdd( "show-gtk-bookmarks", self.RegenPlugin )
self.settings.notifyAdd( "height", self.changePluginSize )
self.settings.notifyAdd( "width", self.changePluginSize )
self.settings.connect("changed::icon-size", self.RegenPlugin)
self.settings.connect("changed::show-computer", self.RegenPlugin)
self.settings.connect("changed::show-desktop", self.RegenPlugin)
self.settings.connect("changed::show-home_folder", self.RegenPlugin)
self.settings.connect("changed::show-network", self.RegenPlugin)
self.settings.connect("changed::show-trash", self.RegenPlugin)
self.settings.connect("changed::custom-names", self.RegenPlugin)
self.settings.connect("changed::allow-scrollbar", self.RegenPlugin)
self.settings.connect("changed::show-gtk-bookmarks", self.RegenPlugin)
self.settings.connect("changed::height", self.changePluginSize)
self.settings.connect("changed::width", self.changePluginSize)
self.loadSettings()
self.content_holder.set_size_request( self.width, self.height )
self.content_holder.set_size_request(self.width, self.height)
def wake (self) :
if ( self.showtrash == True ):
def wake(self):
if self.showtrash:
self.refreshTrash()
def destroy( self ):
self.settings.notifyRemoveAll()
def changePluginSize( self, settings, key, args = None):
self.allowScrollbar = self.settings.get( "bool", "allow-scrollbar" )
self.width = self.settings.get( "int", "width" )
if (self.allowScrollbar == False):
def changePluginSize(self, settings, key):
self.allowScrollbar = self.settings.get_boolean("allow-scrollbar")
self.width = self.settings.get_int("width")
if not self.allowScrollbar:
self.height = -1
self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER )
self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER)
else:
self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC )
self.height = self.settings.get( "int", "height" )
self.content_holder.set_size_request( self.width, self.height )
self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
self.height = self.settings.get_int("height")
self.content_holder.set_size_request(self.width, self.height)
def RegenPlugin( self, *args, **kargs ):
def RegenPlugin(self, *args, **kargs):
self.loadSettings()
self.ClearAll()
self.do_standard_places()
self.do_custom_places()
self.do_gtk_bookmarks()
def loadSettings( self ):
self.width = self.settings.get( "int", "width" )
self.allowScrollbar = self.settings.get( "bool", "allow-scrollbar" )
self.showGTKBookmarks = self.settings.get( "bool", "show-gtk-bookmarks" )
self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC )
self.height = self.settings.get( "int", "height" )
self.content_holder.set_size_request( self.width, self.height )
if (self.allowScrollbar == False):
def loadSettings(self):
self.width = self.settings.get_int("width")
self.allowScrollbar = self.settings.get_boolean("allow-scrollbar")
self.showGTKBookmarks = self.settings.get_boolean("show-gtk-bookmarks")
self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
self.height = self.settings.get_int("height")
self.content_holder.set_size_request(self.width, self.height)
if not self.allowScrollbar:
self.height = -1
self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER )
self.content_holder.set_size_request( self.width, self.height )
self.iconsize = self.settings.get( "int", "icon-size" )
self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER)
self.content_holder.set_size_request(self.width, self.height)
self.iconsize = self.settings.get_int("icon-size")
# Check default items
self.showcomputer = self.settings.get( "bool", "show-computer" )
self.showhomefolder = self.settings.get( "bool", "show-home-folder" )
self.shownetwork = self.settings.get( "bool", "show-network" )
self.showdesktop = self.settings.get( "bool", "show-desktop" )
self.showtrash = self.settings.get( "bool", "show-trash" )
self.showcomputer = self.settings.get_boolean("show-computer")
self.showhomefolder = self.settings.get_boolean("show-home-folder")
self.shownetwork = self.settings.get_boolean("show-network")
self.showdesktop = self.settings.get_boolean("show-desktop")
self.showtrash = self.settings.get_boolean("show-trash")
# Get paths for custom items
self.custompaths = self.settings.get( "list-string", "custom-paths" )
self.custompaths = self.settings.get_strv("custom-paths")
# Get names for custom items
self.customnames = self.settings.get( "list-string", "custom-names" )
self.customnames = self.settings.get_strv("custom-names")
# Hide vertical dotted separator
self.hideseparator = self.settings.get( "bool", "hide-separator" )
self.hideseparator = self.settings.get_boolean("hide-separator")
# Plugin icon
self.icon = self.settings.get( "string", "icon" )
# Allow plugin to be minimized to the left plugin pane
self.sticky = self.settings.get( "bool", "sticky")
self.minimized = self.settings.get( "bool", "minimized")
self.icon = self.settings.get_string("icon")
def ClearAll(self):
for child in self.placesBtnHolder.get_children():
@ -131,44 +131,35 @@ class pluginclass( object ):
child.destroy()
#Add standard places
def do_standard_places( self ):
def do_standard_places(self):
if ( self.showcomputer == True ):
Button1 = easyButton( "computer", self.iconsize, [_("Computer")], -1, -1 )
if self.de == "mate":
Button1.connect( "clicked", self.ButtonClicked, "caja computer:" )
else:
Button1.connect( "clicked", self.ButtonClicked, "xdg-open /" )
if self.showcomputer:
Button1 = easyButton("computer", self.iconsize, [_("Computer")], -1, -1)
Button1.connect("clicked", self.ButtonClicked, "xdg-open computer:")
Button1.show()
self.placesBtnHolder.pack_start( Button1, False, False, 0)
self.mintMenuWin.setTooltip( Button1, _("Browse all local and remote disks and folders accessible from this computer") )
self.placesBtnHolder.pack_start(Button1, False, False, 0)
self.mintMenuWin.setTooltip(Button1, _("Browse all local and remote disks and folders accessible from this computer"))
if ( self.showhomefolder == True ):
Button2 = easyButton( "user-home", self.iconsize, [_("Home Folder")], -1, -1 )
if self.de == "mate":
Button2.connect( "clicked", self.ButtonClicked, "caja %s " % home )
else:
Button2.connect( "clicked", self.ButtonClicked, "xdg-open %s " % home )
if self.showhomefolder:
Button2 = easyButton("user-home", self.iconsize, [_("Home Folder")], -1, -1)
Button2.connect("clicked", self.ButtonClicked, "xdg-open %s " % home)
Button2.show()
self.placesBtnHolder.pack_start( Button2, False, False, 0)
self.mintMenuWin.setTooltip( Button2, _("Open your personal folder") )
self.placesBtnHolder.pack_start(Button2, False, False, 0)
self.mintMenuWin.setTooltip(Button2, _("Open your personal folder"))
if ( self.shownetwork == True and self.de == "mate"):
if self.shownetwork and self.de == "mate":
mate_settings = Gio.Settings.new("org.mate.interface")
icon_theme = mate_settings.get_string( "icon-theme" )
icon_theme = mate_settings.get_string("icon-theme")
if "Mint-X" in icon_theme:
Button3 = easyButton( "notification-network-ethernet-connected", self.iconsize, [_("Network")], -1, -1)
Button3 = easyButton("notification-network-ethernet-connected", self.iconsize, [_("Network")], -1, -1)
else:
Button3 = easyButton( "network-workgroup", self.iconsize, [_("Network")], -1, -1)
if self.de == "mate":
Button3.connect( "clicked", self.ButtonClicked, "caja network:" )
else:
Button3.connect( "clicked", self.ButtonClicked, "xdg-open network:" )
Button3 = easyButton("network-workgroup", self.iconsize, [_("Network")], -1, -1)
Button3.connect("clicked", self.ButtonClicked, "xdg-open network:")
Button3.show()
self.placesBtnHolder.pack_start( Button3, False, False, 0)
self.mintMenuWin.setTooltip( Button3, _("Browse bookmarked and local network locations") )
self.placesBtnHolder.pack_start(Button3, False, False, 0)
self.mintMenuWin.setTooltip(Button3, _("Browse bookmarked and local network locations"))
if ( self.showdesktop == True ):
if self.showdesktop:
# Determine where the Desktop folder is (could be localized)
desktopDir = home + "/Desktop"
try:
@ -179,50 +170,43 @@ class pluginclass( object ):
tmpdesktopDir = config['XDG_DESKTOP_DIR']
if os.path.exists(os.path.expandvars(tmpdesktopDir)):
desktopDir = tmpdesktopDir
except Exception, detail:
print detail
Button4 = easyButton( "desktop", self.iconsize, [_("Desktop")], -1, -1 )
if self.de == "mate":
Button4.connect( "clicked", self.ButtonClicked, "caja \"" + desktopDir + "\"")
else:
Button4.connect( "clicked", self.ButtonClicked, "xdg-open \"" + desktopDir + "\"")
except Exception as e:
print(e)
Button4 = easyButton("desktop", self.iconsize, [_("Desktop")], -1, -1)
Button4.connect("clicked", self.ButtonClicked, 'xdg-open "%s"' % desktopDir)
Button4.show()
self.placesBtnHolder.pack_start( Button4, False, False, 0)
self.mintMenuWin.setTooltip( Button4, _("Browse items placed on the desktop") )
self.placesBtnHolder.pack_start(Button4, False, False, 0)
self.mintMenuWin.setTooltip(Button4, _("Browse items placed on the desktop"))
if ( self.showtrash == True ):
self.trashButton = easyButton( "user-trash", self.iconsize, [_("Trash")], -1, -1 )
if self.de == "xfce":
self.trashButton.connect( "clicked", self.ButtonClicked, "thunar trash:" )
elif self.de == "mate":
self.trashButton.connect( "clicked", self.ButtonClicked, "caja trash:" )
else:
self.trashButton.connect( "clicked", self.ButtonClicked, "xdg-open trash:" )
if self.showtrash:
self.trashButton = easyButton("user-trash", self.iconsize, [_("Trash")], -1, -1)
self.trashButton.connect("clicked", self.ButtonClicked, "xdg-open trash:")
self.trashButton.show()
self.trashButton.connect( "button-release-event", self.trashPopup )
self.trashButton.connect("button-release-event", self.trashPopup)
self.trash_path = os.path.join(home, ".local/share/Trash/info")
self.refreshTrash()
self.placesBtnHolder.pack_start( self.trashButton, False, False, 0)
self.mintMenuWin.setTooltip( self.trashButton, _("Browse deleted files") )
self.placesBtnHolder.pack_start(self.trashButton, False, False, 0)
self.mintMenuWin.setTooltip(self.trashButton, _("Browse deleted files"))
def do_custom_places( self ):
for index in range( len(self.custompaths) ):
def do_custom_places(self):
for index in range(len(self.custompaths)):
path = self.custompaths[index]
path = path.replace("~", home)
if self.de == "mate":
command = ( "caja \"" + path + "\"")
else:
command = ( "xdg-open \"" + path + "\"")
currentbutton = easyButton( "folder", self.iconsize, [self.customnames[index]], -1, -1 )
currentbutton.connect( "clicked", self.ButtonClicked, command )
command = 'xdg-open "%s"' % path
currentbutton = easyButton("folder", self.iconsize, [self.customnames[index]], -1, -1)
currentbutton.connect("clicked", self.ButtonClicked, command)
currentbutton.show()
self.placesBtnHolder.pack_start( currentbutton, False, False, 0)
self.placesBtnHolder.pack_start(currentbutton, False, False, 0)
def do_gtk_bookmarks( self ):
def do_gtk_bookmarks(self):
if self.showGTKBookmarks:
if not os.path.exists(os.path.expanduser('~/.gtk-bookmarks')):
bookmarksFile = os.path.join(GLib.get_user_config_dir(), "gtk-3.0", "bookmarks")
if not os.path.exists(bookmarksFile):
bookmarksFile = os.path.join(GLib.get_home_dir(), ".gtk-bookmarks")
if not os.path.exists(bookmarksFile):
return
bookmarks = []
with open(os.path.expanduser('~/.gtk-bookmarks'), 'r') as f:
with open(bookmarksFile, "r") as f:
for line in f:
#line = line.replace('file://', '')
line = line.rstrip()
@ -239,48 +223,44 @@ class pluginclass( object ):
for name, path in bookmarks:
name = unquote(name)
currentbutton = easyButton( "folder", self.iconsize, [name], -1, -1 )
currentbutton.connect( "clicked", self.launch_gtk_bookmark, path )
currentbutton = easyButton("folder", self.iconsize, [name], -1, -1)
currentbutton.connect("clicked", self.launch_gtk_bookmark, path)
currentbutton.show()
self.placesBtnHolder.pack_start( currentbutton, False, False, 0)
self.placesBtnHolder.pack_start(currentbutton, False, False, 0)
def launch_gtk_bookmark (self, widget, path):
def launch_gtk_bookmark(self, widget, path):
self.mintMenuWin.hide()
if self.de == "mate":
os.system("caja \"%s\" &" % path)
else:
os.system("xdg-open \"%s\" &" % path)
os.system("xdg-open \"%s\" &" % path)
def trashPopup( self, widget, event ):
def trashPopup(self, widget, event):
if event.button == 3:
trashMenu = Gtk.Menu()
emptyTrashMenuItem = Gtk.MenuItem(_("Empty trash"))
trashMenu.append(emptyTrashMenuItem)
trashMenu.show_all()
emptyTrashMenuItem.connect ( "activate", self.emptyTrash, widget )
emptyTrashMenuItem.connect("activate", self.emptyTrash, widget)
self.mintMenuWin.stopHiding()
trashMenu.attach_to_widget(widget, None)
trashMenu.popup(None, None, None, None, 3, 0)
def emptyTrash( self, menu, widget):
def emptyTrash(self, menu, widget):
os.system("rm -rf " + home + "/.local/share/Trash/info/*")
os.system("rm -rf " + home + "/.local/share/Trash/files/*")
self.trashButton.setIcon("user-trash")
def ButtonClicked( self, widget, Exec ):
def ButtonClicked(self, widget, Exec):
self.mintMenuWin.hide()
if Exec:
Execute( Exec )
Execute(Exec)
def do_plugin( self ):
def do_plugin(self):
self.do_standard_places()
self.do_custom_places()
self.do_gtk_bookmarks()
def refreshTrash (self):
iconName = "user-trash"
if (os.path.exists(home + "/.local/share/Trash/info")):
infoFiles = commands.getoutput("ls " + home + "/.local/share/Trash/info/ | wc -l")
if (int(infoFiles) > 0):
iconName = "user-trash-full"
def refreshTrash(self):
if os.path.exists(self.trash_path) and glob(os.path.join(self.trash_path, "*")):
iconName = "user-trash-full"
else:
iconName = "user-trash"
self.trashButton.setIcon(iconName)

View File

@ -1,40 +1,55 @@
#!/usr/bin/python2
#!/usr/bin/python3
import gettext
import locale
import os
import subprocess
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gio, Pango
from gi.repository import Gtk, Pango
import os
from easygsettings import EasyGSettings
from execute import Execute
from easyfiles import *
from easybuttons import *
import plugins.recentHelper as RecentHelper
from plugins.execute import Execute
home = os.path.expanduser("~")
# i18n
gettext.install("mintmenu", "/usr/share/linuxmint/locale")
locale.bindtextdomain("mintmenu", "/usr/share/linuxmint/locale")
locale.textdomain("mintmenu")
class pluginclass:
"""This is the main class for the plugin"""
"""It MUST be named pluginclass"""
""" This is the main class for the plugin.
It MUST be named pluginclass
"""
def __init__( self, mintMenuWin, toggleButton, de ):
def __init__(self, mintMenuWin, toggleButton, de):
self.Win = mintMenuWin
self.toggleButton = toggleButton
self.de = de
self.builder = Gtk.Builder()
#The Glade file for the plugin
self.builder.add_from_file (os.path.join( os.path.dirname( __file__ ), "recent.glade" ))
self.builder.set_translation_domain("mintmenu")
self.builder.add_from_file("/usr/share/linuxmint/mintmenu/recent.ui")
#Set 'window' property for the plugin (Must be the root widget)
self.window = self.builder.get_object( "window1" )
self.window = self.builder.get_object("window1")
#Set 'heading' property for plugin
self.heading = _("Recent documents")
self.heading = _("Recently used")
#This should be the first item added to the window in glade
self.content_holder = self.builder.get_object( "eventbox1" )
self.content_holder = self.builder.get_object("eventbox1")
self.recentBox = self.builder.get_object("RecentBox")
self.recentVBox = self.builder.get_object( "vbox1" )
self.recentAppBox = self.builder.get_object("RecentApps")
RecentHelper.recentAppBox = self.recentAppBox
#self.recentApps = []
self.recentVBox = self.builder.get_object("vbox1")
#Specify plugin width
self.width = 250
@ -42,100 +57,113 @@ class pluginclass:
#Plugin icon
self.icon = 'mate-folder.png'
self.settings = EasyGSettings ("com.linuxmint.mintmenu.plugins.recent")
self.settings = Gio.Settings("com.linuxmint.mintmenu.plugins.recent")
RecentHelper.settings = self.settings
self.settings.notifyAdd( 'height', self.RegenPlugin )
self.settings.notifyAdd( 'width', self.RegenPlugin )
self.settings.notifyAdd( 'num-recent-docs', self.RegenPlugin )
self.settings.notifyAdd( 'recent-font-size', self.RegenPlugin )
self.migrate_recent_apps()
self.settings.connect('changed', self.RegenPlugin)
self.appSettings = Gio.Settings("com.linuxmint.mintmenu.plugins.applications")
self.appSettings.connect("changed::icon-size", self.RegenPlugin)
self.FileList=[]
self.RecManagerInstance = Gtk.RecentManager.get_default()
self.recentManagerId = self.RecManagerInstance.connect("changed", self.DoRecent)
self.RegenPlugin()
self.builder.get_object( "RecentTabs" ).set_current_page(1)
self.builder.get_object("RecentTabs").set_current_page(0)
#Connect event handlers
self.builder.get_object("ClrBtn").connect("clicked", self.clrmenu)
def wake (self) :
pass
@staticmethod
def wake():
return
def destroy( self ):
def destroy(self):
self.recentBox.destroy()
self.recentVBox.destroy()
self.builder.get_object( "RecentTabs" ).destroy()
self.builder.get_object("RecentTabs").destroy()
self.builder.get_object("ClrBtn").destroy()
self.content_holder.destroy()
self.settings.notifyRemoveAll()
if self.recentManagerId:
self.RecManagerInstance.disconnect(self.recentManagerId)
def RegenPlugin( self, *args, **kargs ):
def RegenPlugin(self, *args, **kargs):
self.GetGSettingsEntries()
def GetGSettingsEntries( self ):
self.recenth = self.settings.get( 'int', 'height' )
self.recentw = self.settings.get( 'int', 'width' )
self.numentries = self.settings.get( 'int', 'num-recent-docs' )
self.recentfontsize = self.settings.get( 'int', 'recent-font-size' )
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):
self.recenth = self.settings.get_int("height")
self.recentw = self.settings.get_int("width")
self.numentries = self.settings.get_int("num-recent-docs")
RecentHelper.numentries = self.numentries
self.recentfontsize = self.settings.get_int("recent-font-size")
# Hide vertical dotted separator
self.hideseparator = self.settings.get( "bool", "hide-separator" )
self.hideseparator = self.settings.get_boolean("hide-separator")
# Plugin icon
self.icon = self.settings.get( "string", 'icon' )
# Allow plugin to be minimized to the left plugin pane
self.sticky = self.settings.get( "bool", "sticky" )
self.minimized = self.settings.get( "bool", "minimized" )
self.icon = self.settings.get_string("icon")
RecentHelper.iconSize = self.appSettings.get_int("icon-size")
self.RebuildPlugin()
def SetHidden( self, state ):
if state == True:
self.settings.set( "bool", "minimized", True )
else:
self.settings.set( "bool", "minimized", False )
def RebuildPlugin(self):
self.content_holder.set_size_request(self.recentw, self.recenth )
self.content_holder.set_size_request(self.recentw, self.recenth)
self.DoRecent()
def DoRecent( self, *args, **kargs ):
def DoRecent(self, *args, **kargs):
for i in self.recentBox.get_children():
i.destroy()
self.recentVBox.set_size_request( self.recentw, self.recenth )
if len( self.recentBox.get_children() ) < self.numentries:
n=len( self.recentBox.get_children() )-1
self.recentVBox.set_size_request(self.recentw, self.recenth)
if len(self.recentBox.get_children()) < self.numentries:
n=len(self.recentBox.get_children())-1
else:
n=self.numentries-1
while n >= 0:
self.recentBox.remove( self.recentBox.get_children()[n] )
self.recentBox.remove(self.recentBox.get_children()[n])
n-=1
self.FileList, self.IconList = self.GetRecent()
loc = 0
for Name in self.FileList:
if Name != None:
self.AddRecentBtn( Name, self.IconList[loc] )
self.AddRecentBtn(Name, self.IconList[loc])
loc = loc + 1
RecentHelper.doRecentApps()
return True
def clrmenu(self, *args, **kargs):
self.RecManagerInstance.purge_items()
if self.builder.get_object("RecentTabs").get_current_page() == 0: # files
self.RecManagerInstance.purge_items()
else: # apps
self.settings.reset("recent-apps-list")
self.DoRecent()
return
def AddRecentBtn( self, Name, RecentImage ):
DispName=os.path.basename( Name )
def AddRecentBtn(self, Name, RecentImage):
DispName=os.path.basename(Name)
AButton = Gtk.Button( "", "ok", True )
AButton.remove( AButton.get_children()[0] )
AButton.set_size_request( 200, -1 )
AButton.set_relief( Gtk.ReliefStyle.NONE )
AButton.connect( "clicked", self.callback, Name )
AButton = Gtk.Button("", "ok", True)
AButton.remove(AButton.get_children()[0])
AButton.set_size_request(200, -1)
AButton.set_relief(Gtk.ReliefStyle.NONE)
AButton.connect("clicked", self.callback, Name)
AButton.show()
Box1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
@ -145,38 +173,31 @@ class pluginclass:
ButtonIcon.set_from_pixbuf(RecentImage)
Box1.add(ButtonIcon)
Label1 = Gtk.Label( DispName )
Label1.set_ellipsize( Pango.EllipsizeMode.END )
Box1.add( Label1 )
Label1 = Gtk.Label(DispName)
Label1.set_ellipsize(Pango.EllipsizeMode.END)
Box1.add(Label1)
AButton.add( Box1 )
AButton.add(Box1)
AButton.show_all()
self.recentBox.pack_start( AButton, False, True, 0 )
self.recentBox.pack_start(AButton, False, True, 0)
def callback(self, widget, filename=None):
def callback(self, widget, filename):
self.Win.hide()
x = os.system("gvfs-open \""+filename+"\"")
if x == 256:
dia = Gtk.Dialog('File not found!',
None, #the toplevel wgt of your app
Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, #binary flags or'ed together
("Ok", 77))
dia.vbox.pack_start(Gtk.Label('The location or file could not be found!'), False, False, 0)
dia.vbox.show_all()
dia.show()
result = dia.run()
if result == 77:
dia.destroy()
try:
subprocess.check_call(["xdg-open", filename])
except subprocess.CalledProcessError:
dialog = Gtk.MessageDialog(self.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.ERROR, Gtk.ButtonsType.OK, _("The file or location could not be opened."))
dialog.set_title("mintMenu")
dialog.run()
dialog.destroy()
def GetRecent(self, *args, **kargs):
FileString=[]
IconString=[]
RecentInfo=self.RecManagerInstance.get_items()
# print RecentInfo[0].get_icon(Gtk.IconSize.MENU)
RecentInfo=sorted(self.RecManagerInstance.get_items(), key=lambda item: item.get_modified(), reverse=True)
count=0
MaxEntries=self.numentries
if self.numentries == -1:
@ -187,26 +208,26 @@ class pluginclass:
count+=1
if count >= MaxEntries:
break
return FileString, IconString
return FileString, IconString
def ButtonClicked( self, widget, event, Exec ):
def ButtonClicked(self, widget, event, Exec):
self.press_x = event.x
self.press_y = event.y
self.Exec = Exec
def ButtonReleased( self, w, ev, ev2 ):
def ButtonReleased(self, w, ev, ev2):
if ev.button == 1:
if not hasattr( self, "press_x" ) or \
not w.drag_check_threshold( int( self.press_x ),
int( self.press_y ),
int( ev.x ),
int( ev.y ) ):
if not hasattr(self, "press_x") or \
not w.drag_check_threshold(int(self.press_x),
int(self.press_y),
int(ev.x),
int(ev.y)):
if self.Win.pinmenu == False:
self.Win.wTree.get_widget( "window1" ).hide()
self.Win.wTree.get_widget("window1").hide()
if "applications" in self.Win.plugins:
self.Win.plugins["applications"].wTree.get_widget( "entry1" ).grab_focus()
Execute( w, self.Exec )
self.Win.plugins["applications"].wTree.get_widget("entry1").grab_focus()
Execute(w, self.Exec)
def do_plugin(self):
self.DoRecent()
@staticmethod
def do_plugin():
return

View File

@ -0,0 +1,124 @@
#!/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()

View File

@ -1,117 +1,111 @@
#!/usr/bin/python2
#!/usr/bin/python3
import gettext
import os
import locale
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gio
from gi.repository import Gtk
import os
import string
import gettext
from easybuttons import *
from execute import Execute
from easygsettings import EasyGSettings
from plugins.easybuttons import easyButton
from plugins.execute import Execute
# i18n
gettext.install("mintmenu", "/usr/share/linuxmint/locale")
locale.bindtextdomain("mintmenu", "/usr/share/linuxmint/locale")
locale.textdomain("mintmenu")
class pluginclass( object ):
class pluginclass(object):
def __init__( self, mintMenuWin, toggleButton, de ):
def __init__(self, mintMenuWin, toggleButton, de):
self.mintMenuWin = mintMenuWin
self.toggleButton = toggleButton
self.de = de
self.builder = Gtk.Builder()
self.builder.add_from_file (os.path.join( os.path.dirname( __file__ ), "system_management.glade" ))
self.builder.set_translation_domain("mintmenu")
self.builder.add_from_file("/usr/share/linuxmint/mintmenu/system.ui")
self.systemBtnHolder = self.builder.get_object( "system_button_holder" )
self.editableBtnHolder = self.builder.get_object( "editable_button_holder" )
self.scrolledWindow = self.builder.get_object( "scrolledwindow2" )
self.systemBtnHolder = self.builder.get_object("system_button_holder")
self.editableBtnHolder = self.builder.get_object("editable_button_holder")
self.scrolledWindow = self.builder.get_object("scrolledwindow2")
# These properties are NECESSARY to maintain consistency
# Set 'window' property for the plugin (Must be the root widget)
self.window = self.builder.get_object( "mainWindow" )
self.window = self.builder.get_object("mainWindow")
# Set 'heading' property for plugin
self.heading = _("System")
# This should be the first item added to the window in glade
self.content_holder = self.builder.get_object( "System" )
# Items to get custom colors
self.itemstocolor = [ self.builder.get_object( "viewport2" ) ]
self.content_holder = self.builder.get_object("System")
# Gconf stuff
self.settings = EasyGSettings( "com.linuxmint.mintmenu.plugins.system_management" )
self.settings = Gio.Settings("com.linuxmint.mintmenu.plugins.system_management")
self.settings.notifyAdd( "icon-size", self.RegenPlugin )
self.settings.notifyAdd( "show-control-center", self.RegenPlugin )
self.settings.notifyAdd( "show-lock-screen", self.RegenPlugin )
self.settings.notifyAdd( "show-logout", self.RegenPlugin )
self.settings.notifyAdd( "show-package-manager", self.RegenPlugin )
self.settings.notifyAdd( "show-software-manager", self.RegenPlugin )
self.settings.notifyAdd( "show-terminal", self.RegenPlugin )
self.settings.notifyAdd( "show-quit", self.RegenPlugin )
self.settings.notifyAdd( "allow-scrollbar", self.RegenPlugin )
self.settings.notifyAdd( "height", self.changePluginSize )
self.settings.notifyAdd( "width", self.changePluginSize )
self.settings.bindGSettingsEntryToVar( "bool", "sticky", self, "sticky" )
self.settings.connect("changed::icon-size", self.RegenPlugin)
self.settings.connect("changed::show-control-center", self.RegenPlugin)
self.settings.connect("changed::show-lock-screen", self.RegenPlugin)
self.settings.connect("changed::show-logout", self.RegenPlugin)
self.settings.connect("changed::show-package-manager", self.RegenPlugin)
self.settings.connect("changed::show-software-manager", self.RegenPlugin)
self.settings.connect("changed::show-terminal", self.RegenPlugin)
self.settings.connect("changed::show-quit", self.RegenPlugin)
self.settings.connect("changed::allow-scrollbar", self.RegenPlugin)
self.settings.connect("changed::height", self.changePluginSize)
self.settings.connect("changed::width", self.changePluginSize)
self.GetGSettingsEntries()
self.content_holder.set_size_request( self.width, self.height )
self.content_holder.set_size_request(self.width, self.height)
def destroy( self ):
self.settings.notifyRemoveAll()
def wake (self) :
def wake(self):
pass
def changePluginSize( self, settings, key, args ):
self.allowScrollbar = self.settings.get( "bool", "allow-scrollbar")
def changePluginSize(self, settings, key):
self.allowScrollbar = self.settings.get_boolean("allow-scrollbar")
if key == "width":
self.width = settings.get_int(key)
elif key == "height":
if (self.allowScrollbar == False):
if not self.allowScrollbar:
self.height = -1
self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER )
self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER)
else:
self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC )
self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
self.height = settings.get_int(key)
self.content_holder.set_size_request( self.width, self.height )
self.content_holder.set_size_request(self.width, self.height)
def RegenPlugin( self, *args, **kargs ):
def RegenPlugin(self, *args, **kargs):
self.GetGSettingsEntries()
self.ClearAll()
self.do_standard_items()
def GetGSettingsEntries( self ):
def GetGSettingsEntries(self):
self.width = self.settings.get( "int", "width")
self.allowScrollbar = self.settings.get( "bool", "allow-scrollbar")
self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC )
self.height = self.settings.get( "int", "height")
self.content_holder.set_size_request( self.width, self.height )
if (self.allowScrollbar == False):
self.width = self.settings.get_int("width")
self.allowScrollbar = self.settings.get_boolean("allow-scrollbar")
self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
self.height = self.settings.get_int("height")
self.content_holder.set_size_request(self.width, self.height)
if not self.allowScrollbar:
self.height = -1
self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER )
self.content_holder.set_size_request( self.width, self.height )
self.iconsize = self.settings.get( "int","icon-size")
self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER)
self.content_holder.set_size_request(self.width, self.height)
self.iconsize = self.settings.get_int("icon-size")
# Check toggles
self.showSoftwareManager = self.settings.get( "bool", "show-software-manager")
self.showPackageManager = self.settings.get( "bool", "show-package-manager")
self.showControlCenter = self.settings.get( "bool", "show-control-center")
self.showTerminal = self.settings.get( "bool", "show-terminal")
self.showLockScreen = self.settings.get( "bool", "show-lock-screen")
self.showLogout = self.settings.get( "bool", "show-logout")
self.showQuit = self.settings.get( "bool", "show-quit")
self.showSoftwareManager = self.settings.get_boolean("show-software-manager")
self.showPackageManager = self.settings.get_boolean("show-package-manager")
self.showControlCenter = self.settings.get_boolean("show-control-center")
self.showTerminal = self.settings.get_boolean("show-terminal")
self.showLockScreen = self.settings.get_boolean("show-lock-screen")
self.showLogout = self.settings.get_boolean("show-logout")
self.showQuit = self.settings.get_boolean("show-quit")
if self.de == "cinnamon":
self.lock_cmd = "cinnamon-screensaver-command --lock"
@ -135,12 +129,9 @@ class pluginclass( object ):
self.settings_cmd = "mate-control-center"
# Hide vertical dotted separator
self.hideseparator = self.settings.get( "bool", "hide-separator")
self.hideseparator = self.settings.get_boolean("hide-separator")
# Plugin icon
self.icon = self.settings.get( "string", "icon" )
# Allow plugin to be minimized to the left plugin pane
self.sticky = self.settings.get( "bool", "sticky")
self.minimized = self.settings.get( "bool", "minimized")
self.icon = self.settings.get_string("icon")
def ClearAll(self):
for child in self.systemBtnHolder.get_children():
@ -149,65 +140,65 @@ class pluginclass( object ):
child.destroy()
#Add standard items
def do_standard_items( self ):
def do_standard_items(self):
if ( self.showSoftwareManager == True ):
if self.showSoftwareManager:
if os.path.exists("/usr/bin/mintinstall"):
Button1 = easyButton( "mintinstall", self.iconsize, [_("Software Manager")], -1, -1 )
Button1.connect( "clicked", self.ButtonClicked, "gksu mintinstall" )
Button1 = easyButton("mintinstall", self.iconsize, [_("Software Manager")], -1, -1)
Button1.connect("clicked", self.ButtonClicked, "mintinstall")
Button1.show()
self.systemBtnHolder.pack_start( Button1, False, False, 0)
self.mintMenuWin.setTooltip( Button1, _("Browse and install available software") )
self.systemBtnHolder.pack_start(Button1, False, False, 0)
self.mintMenuWin.setTooltip(Button1, _("Browse and install available software"))
if ( self.showPackageManager == True ):
Button2 = easyButton( "applications-system", self.iconsize, [_("Package Manager")], -1, -1 )
Button2.connect( "clicked", self.ButtonClicked, "synaptic-pkexec" )
if self.showPackageManager:
Button2 = easyButton("applications-system", self.iconsize, [_("Package Manager")], -1, -1)
Button2.connect("clicked", self.ButtonClicked, "synaptic-pkexec")
Button2.show()
self.systemBtnHolder.pack_start( Button2, False, False, 0 )
self.mintMenuWin.setTooltip( Button2, _("Install, remove and upgrade software packages") )
self.systemBtnHolder.pack_start(Button2, False, False, 0)
self.mintMenuWin.setTooltip(Button2, _("Install, remove and upgrade software packages"))
if ( self.showControlCenter == True ):
Button3 = easyButton( "gtk-preferences", self.iconsize, [_("Control Center")], -1, -1 )
Button3.connect( "clicked", self.ButtonClicked, self.settings_cmd )
if self.showControlCenter:
Button3 = easyButton("gtk-preferences", self.iconsize, [_("Control Center")], -1, -1)
Button3.connect("clicked", self.ButtonClicked, self.settings_cmd)
Button3.show()
self.systemBtnHolder.pack_start( Button3, False, False, 0 )
self.mintMenuWin.setTooltip( Button3, _("Configure your system") )
self.systemBtnHolder.pack_start(Button3, False, False, 0)
self.mintMenuWin.setTooltip(Button3, _("Configure your system"))
if ( self.showTerminal == True ):
Button4 = easyButton( "terminal", self.iconsize, [_("Terminal")], -1, -1 )
if self.showTerminal:
Button4 = easyButton("terminal", self.iconsize, [_("Terminal")], -1, -1)
if os.path.exists(self.terminal_cmd):
Button4.connect( "clicked", self.ButtonClicked, self.terminal_cmd )
Button4.connect("clicked", self.ButtonClicked, self.terminal_cmd)
else:
Button4.connect( "clicked", self.ButtonClicked, "x-terminal-emulator" )
Button4.connect("clicked", self.ButtonClicked, "x-terminal-emulator")
Button4.show()
self.systemBtnHolder.pack_start( Button4, False, False, 0 )
self.mintMenuWin.setTooltip( Button4, _("Use the command line") )
if ( self.showLockScreen == True ):
Button5 = easyButton( "system-lock-screen", self.iconsize, [_("Lock Screen")], -1, -1 )
Button5.connect( "clicked", self.ButtonClicked, self.lock_cmd )
self.systemBtnHolder.pack_start(Button4, False, False, 0)
self.mintMenuWin.setTooltip(Button4, _("Use the command line"))
if self.showLockScreen:
Button5 = easyButton("system-lock-screen", self.iconsize, [_("Lock Screen")], -1, -1)
Button5.connect("clicked", self.ButtonClicked, self.lock_cmd)
Button5.show()
self.systemBtnHolder.pack_start( Button5, False, False, 0 )
self.mintMenuWin.setTooltip( Button5, _("Requires password to unlock") )
self.systemBtnHolder.pack_start(Button5, False, False, 0)
self.mintMenuWin.setTooltip(Button5, _("Requires password to unlock"))
if ( self.showLogout == True ):
Button6 = easyButton( "system-log-out", self.iconsize, [_("Logout")], -1, -1 )
Button6.connect( "clicked", self.ButtonClicked, self.logout_cmd )
if self.showLogout:
Button6 = easyButton("system-log-out", self.iconsize, [_("Logout")], -1, -1)
Button6.connect("clicked", self.ButtonClicked, self.logout_cmd)
Button6.show()
self.systemBtnHolder.pack_start( Button6, False, False, 0 )
self.mintMenuWin.setTooltip( Button6, _("Log out or switch user") )
self.systemBtnHolder.pack_start(Button6, False, False, 0)
self.mintMenuWin.setTooltip(Button6, _("Log out or switch user"))
if ( self.showQuit == True ):
Button7 = easyButton( "system-shutdown", self.iconsize, [_("Quit")], -1, -1 )
Button7.connect( "clicked", self.ButtonClicked, self.shutdown_cmd )
if self.showQuit:
Button7 = easyButton("system-shutdown", self.iconsize, [_("Quit")], -1, -1)
Button7.connect("clicked", self.ButtonClicked, self.shutdown_cmd)
Button7.show()
self.systemBtnHolder.pack_start( Button7, False, False, 0 )
self.mintMenuWin.setTooltip( Button7, _("Shutdown, restart, suspend or hibernate") )
self.systemBtnHolder.pack_start(Button7, False, False, 0)
self.mintMenuWin.setTooltip(Button7, _("Shutdown, restart, suspend or hibernate"))
def ButtonClicked( self, widget, Exec ):
def ButtonClicked(self, widget, Exec):
self.mintMenuWin.hide()
if Exec:
Execute( Exec )
Execute(Exec)
def do_plugin( self ):
def do_plugin(self):
self.do_standard_items()

View File

@ -1,12 +1,14 @@
#!/usr/bin/python2
#!/usr/bin/python
import threading
import gi
gi.require_version("Gtk", "3.0")
from Xlib.display import Display
from Xlib import X, error
from gi.repository import Gtk, Gdk, GObject, GLib
import threading
from Xlib import X
from Xlib.display import Display
class PointerMonitor(GObject.GObject, threading.Thread):
__gsignals__ = {
@ -48,14 +50,14 @@ class PointerMonitor(GObject.GObject, threading.Thread):
if event.type == X.ButtonPress:
# Check if pointer is inside monitored windows
for w in self.windows:
if Gtk.check_version (3, 20, 0) is None:
if (Gtk.MAJOR_VERSION, Gtk.MINOR_VERSION) >= (3, 20):
pdevice = Gdk.Display.get_default().get_default_seat().get_pointer()
else:
pdevice = Gdk.Display.get_default().get_device_manager().get_client_pointer()
p = self.get_window().get_device_position(pdevice)
g = self.get_size()
if p.x >= 0 and p.y >= 0 and p.x <= g.width and p.y <= g.height:
if p.x >= 0 and p.y >= 0 and p.x <= g.width and p.y <= g.height:
break
else:
# Is outside, so activate
@ -64,10 +66,9 @@ class PointerMonitor(GObject.GObject, threading.Thread):
else:
self.display.allow_events(X.ReplayPointer, X.CurrentTime)
except Exception as e:
print "Unexpected error: " + str(e)
print("Unexpected error:", e)
def stop(self):
self.running = False
self.root.ungrab_button(X.AnyButton, X.AnyModifier)
self.display.close()

View File

@ -0,0 +1,3 @@
<menuitem name="Prefs" action="MintMenuPrefs"/>
<menuitem name="Reload" action="MintMenuReload"/>
<menuitem name="About" action="MintMenuAbout"/>

View File

@ -0,0 +1,300 @@
#!/usr/bin/python3
import gettext
import glob
import locale
import setproctitle
import gi
gi.require_version("Gtk", "3.0")
gi.require_version('XApp', '1.0')
from gi.repository import Gtk, Gdk, GdkPixbuf, XApp
import keybinding
from xapp.GSettingsWidgets import *
# i18n
gettext.install("mintmenu", "/usr/share/linuxmint/locale")
locale.bindtextdomain("mintmenu", "/usr/share/linuxmint/locale")
locale.textdomain("mintmenu")
class CustomPlaceDialog (Gtk.Dialog):
def __init__(self):
Gtk.Dialog.__init__(self, title=_("Custom Place"), flags=Gtk.DialogFlags.MODAL,
buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OK, Gtk.ResponseType.OK))
self.set_default_size(150, 100)
grid = Gtk.Grid()
grid.set_row_spacing(12)
grid.set_column_spacing(12)
grid.set_border_width(12)
self.name = Gtk.Entry()
grid.attach(Gtk.Label(_("Name:")), 0, 0, 1, 1)
grid.attach(self.name, 1, 0, 1, 1)
self.filechooser_button = Gtk.FileChooserButton()
self.filechooser_button.set_title(_("Select a folder"))
self.filechooser_button.set_action(Gtk.FileChooserAction.SELECT_FOLDER)
grid.attach(Gtk.Label(_("Folder:")), 0, 1, 1, 1)
grid.attach(self.filechooser_button, 1, 1, 1, 1)
self.get_content_area().add(grid)
self.show_all()
class mintMenuPreferences():
def __init__(self):
self.settings = Gio.Settings(schema_id="com.linuxmint.mintmenu")
self.places_settings = Gio.Settings(schema_id="com.linuxmint.mintmenu.plugins.places")
self.builder = Gtk.Builder()
self.builder.set_translation_domain("mintmenu")
self.builder.add_from_file("/usr/share/linuxmint/mintmenu/preferences.ui")
self.window = self.builder.get_object("main_window")
self.window.set_title(_("Menu preferences"))
self.window.set_icon_name("linuxmint-logo")
self.window.connect("destroy", Gtk.main_quit)
page = SettingsPage()
self.builder.get_object("box_general").add(page)
section = page.add_section(_("Menu button"), _("Applet button in the panel"))
section.add_row(GSettingsSwitch(_("Show button icon"), "com.linuxmint.mintmenu", "show-applet-icon"))
section.add_reveal_row(GSettingsEntry(_("Button text"), "com.linuxmint.mintmenu", "applet-text"), "com.linuxmint.mintmenu", "show-applet-icon")
logos = {}
logos['name']= _("Menu icons")
logos['icons']= self.settings.get_strv("applet-icons")
icon_chooser = GSettingsIconChooser(_("Button icon"), "com.linuxmint.mintmenu", "applet-icon", default_icon=self.settings.get_string("default-applet-icon"), icon_categories=[logos])
icon_chooser.content_widget.set_default_category(_("Menu icons"))
section.add_reveal_row(icon_chooser, "com.linuxmint.mintmenu", "show-applet-icon")
binding_widget = keybinding.KeybindingWidget()
binding_widget.set_val(self.settings.get_string("hot-key"))
binding_widget.connect("accel-edited", self.set_keyboard_shortcut)
label = SettingsLabel(_("Keyboard shortcut"))
setting_widget = SettingsWidget()
setting_widget.pack_start(label, False, False, 0)
setting_widget.pack_end(binding_widget, False, False, 0)
section.add_row(setting_widget)
section = page.add_section(_("Options"), _("General applet options"))
self.system_switch = Switch(_("Show system management"))
self.system_switch.content_widget.connect("notify::active", self.set_plugins)
section.add_row(self.system_switch)
self.places_switch = Switch(_("Show places"))
self.places_switch.content_widget.connect("notify::active", self.set_plugins)
section.add_row(self.places_switch)
self.recent_switch = Switch(_("Show recently used documents and applications"))
self.recent_switch.content_widget.connect("notify::active", self.set_plugins)
section.add_row(self.recent_switch)
self.set_plugins_switches()
section.add_row(GSettingsSwitch(_("Show tooltips"), "com.linuxmint.mintmenu", "tooltips-enabled"))
page = SettingsPage()
self.builder.get_object("box_appearance").add(page)
section = page.add_section(_("Theme"), _("Custom theme selection"))
options = []
options.append(["default", _("Desktop theme"), "default"])
themes = glob.glob("/usr/share/themes/*/*/gtkrc")
for theme in sorted(themes):
if theme.startswith("/usr/share/themes") and theme.endswith("/gtk-2.0/gtkrc"):
theme = theme.replace("/usr/share/themes/", "")
theme = theme.replace("gtk-2.0", "")
theme = theme.replace("gtkrc", "")
theme = theme.replace("/", "")
theme = theme.strip()
options.append([theme, theme])
section.add_row(GSettingsComboBox(_("Theme:"), "com.linuxmint.mintmenu", "theme-name", options))
section = page.add_section(_("Icon sizes"), _("The size of the icons"))
section.add_row(GSettingsSpinButton(_("Favorites"), "com.linuxmint.mintmenu.plugins.applications", "favicon-size", mini=1, maxi=128, step=1, page=2))
section.add_row(GSettingsSpinButton(_("Applications"), "com.linuxmint.mintmenu.plugins.applications", "icon-size", mini=1, maxi=128, step=1, page=2))
section.add_row(GSettingsSpinButton(_("System"), "com.linuxmint.mintmenu.plugins.system_management", "icon-size", mini=1, maxi=128, step=1, page=2))
section.add_row(GSettingsSpinButton(_("Places"), "com.linuxmint.mintmenu.plugins.places", "icon-size", mini=1, maxi=128, step=1, page=2))
page = SettingsPage()
self.builder.get_object("box_applications").add(page)
section = page.add_section(_("Layout"), _("Section layout"))
section.add_row(GSettingsSwitch(_("Show search bar on top"), "com.linuxmint.mintmenu.plugins.applications", "search-on-top"))
section.add_row(GSettingsSwitch(_("Show applications comments"), "com.linuxmint.mintmenu.plugins.applications", "show-application-comments"))
section = page.add_section(_("Categories"), _("Applications categories"))
section.add_row(GSettingsSwitch(_("Show category icons"), "com.linuxmint.mintmenu.plugins.applications", "show-category-icons"))
section.add_row(GSettingsSwitch(_("Switch categories on hover"), "com.linuxmint.mintmenu.plugins.applications", "categories-mouse-over"))
section.add_reveal_row(GSettingsSpinButton(_("Hover delay"), "com.linuxmint.mintmenu.plugins.applications", "category-hover-delay", units=_("milliseconds"), mini=1, maxi=500, step=1, page=10), "com.linuxmint.mintmenu.plugins.applications", "categories-mouse-over")
section = page.add_section(_("Search"), _("Search options"))
section.add_row(GSettingsSwitch(_("Search for packages to install"), "com.linuxmint.mintmenu.plugins.applications", "use-apt"))
section.add_row(GSettingsSwitch(_("Remember the last category or search"), "com.linuxmint.mintmenu.plugins.applications", "remember-filter"))
section.add_row(GSettingsSwitch(_("Enable Internet search"), "com.linuxmint.mintmenu.plugins.applications", "enable-internet-search"))
section.add_row(GSettingsEntry(_("Search command"), "com.linuxmint.mintmenu.plugins.applications", "search-command"))
page = SettingsPage()
self.builder.get_object("box_favorites").add(page)
section = page.add_section(_("Layout"), _("Section layout"))
section.add_row(GSettingsSpinButton(_("Number of columns"), "com.linuxmint.mintmenu.plugins.applications", "fav-cols", mini=1, maxi=5, step=1, page=1))
section.add_row(GSettingsSwitch(_("Swap name and generic name"), "com.linuxmint.mintmenu.plugins.applications", "swap-generic-name"))
section.add_row(GSettingsSwitch(_("Show favorites when the menu is open"), "com.linuxmint.mintmenu", "start-with-favorites"))
page = SettingsPage()
self.builder.get_object("box_system").add(page)
section = page.add_section(_("Layout"), _("Section layout"))
section.add_row(GSettingsSwitch(_("Custom height"), "com.linuxmint.mintmenu.plugins.system_management", "allow-scrollbar"))
section.add_reveal_row(GSettingsSpinButton(_("Height"), "com.linuxmint.mintmenu.plugins.system_management", "height", mini=1, maxi=800, step=1, page=2), "com.linuxmint.mintmenu.plugins.system_management", "allow-scrollbar")
section = page.add_section(_("Items"), _("Toggle default items"))
section.add_row(GSettingsSwitch(_("Software Manager"), "com.linuxmint.mintmenu.plugins.system_management", "show-software-manager"))
section.add_row(GSettingsSwitch(_("Package Manager"), "com.linuxmint.mintmenu.plugins.system_management", "show-package-manager"))
section.add_row(GSettingsSwitch(_("Control Center"), "com.linuxmint.mintmenu.plugins.system_management", "show-control-center"))
section.add_row(GSettingsSwitch(_("Terminal"), "com.linuxmint.mintmenu.plugins.system_management", "show-terminal"))
section.add_row(GSettingsSwitch(_("Lock Screen"), "com.linuxmint.mintmenu.plugins.system_management", "show-lock-screen"))
section.add_row(GSettingsSwitch(_("Logout"), "com.linuxmint.mintmenu.plugins.system_management", "show-logout"))
section.add_row(GSettingsSwitch(_("Quit"), "com.linuxmint.mintmenu.plugins.system_management", "show-quit"))
page = SettingsPage()
self.builder.get_object("box_places").add(page)
section = page.add_section(_("Layout"), _("Section layout"))
section.add_row(GSettingsSwitch(_("Custom height"), "com.linuxmint.mintmenu.plugins.places", "allow-scrollbar"))
section.add_reveal_row(GSettingsSpinButton(_("Height"), "com.linuxmint.mintmenu.plugins.places", "height", mini=1, maxi=800, step=1, page=2), "com.linuxmint.mintmenu.plugins.places", "allow-scrollbar")
section = page.add_section(_("Items"), _("Toggle default items"))
section.add_row(GSettingsSwitch(_("Computer"), "com.linuxmint.mintmenu.plugins.places", "show-computer"))
section.add_row(GSettingsSwitch(_("Home Folder"), "com.linuxmint.mintmenu.plugins.places", "show-home-folder"))
section.add_row(GSettingsSwitch(_("Network"), "com.linuxmint.mintmenu.plugins.places", "show-network"))
section.add_row(GSettingsSwitch(_("Desktop"), "com.linuxmint.mintmenu.plugins.places", "show-desktop"))
section.add_row(GSettingsSwitch(_("Trash"), "com.linuxmint.mintmenu.plugins.places", "show-trash"))
section.add_row(GSettingsSwitch(_("GTK Bookmarks"), "com.linuxmint.mintmenu.plugins.places", "show-gtk-bookmarks"))
section = page.add_section(_("Custom places"), _("You can add your own places in the menu"))
box = self.builder.get_object("custom_places_box")
section.add(box)
self.custom_places_tree = self.builder.get_object("custom_places_tree")
self.custom_places_paths = self.places_settings.get_strv("custom-paths")
self.custom_places_names = self.places_settings.get_strv("custom-names")
self.custom_places_model = Gtk.ListStore(str, str)
self.cell = Gtk.CellRendererText()
for count in range(len(self.custom_places_paths)):
self.custom_places_model.append([self.custom_places_names[count], self.custom_places_paths[count]])
self.custom_places_model.connect("row-inserted", self.save_custom_places)
self.custom_places_model.connect("row-deleted", self.save_custom_places)
self.custom_places_model.connect("rows-reordered", self.save_custom_places)
self.custom_places_model.connect("row-changed", self.save_custom_places)
self.custom_places_tree.set_model(self.custom_places_model)
self.custom_places_tree.append_column(Gtk.TreeViewColumn(_("Name"), self.cell, text=0))
self.custom_places_tree.append_column(Gtk.TreeViewColumn(_("Path"), self.cell, text=1))
self.builder.get_object("newButton").connect("clicked", self.add_custom_place)
self.builder.get_object("editButton").connect("clicked", self.edit_custom_place)
self.builder.get_object("upButton").connect("clicked", self.move_up)
self.builder.get_object("downButton").connect("clicked", self.move_down)
self.builder.get_object("removeButton").connect("clicked", self.remove_custom_place)
self.window.show_all()
return
def set_keyboard_shortcut(self, widget):
self.settings.set_string("hot-key", widget.get_val())
def set_plugins_switches(self):
plugins = self.settings.get_strv("plugins-list")
self.recent_switch.content_widget.set_active("recent" in plugins)
self.system_switch.content_widget.set_active("system_management" in plugins)
self.places_switch.content_widget.set_active("places" in plugins)
def set_plugins(self, widget, param):
visible_plugins = []
if self.places_switch.content_widget.get_active():
visible_plugins.append("places")
if self.system_switch.content_widget.get_active():
visible_plugins.append("system_management")
if self.places_switch.content_widget.get_active() or self.system_switch.content_widget.get_active():
visible_plugins.append("newpane")
visible_plugins.append("applications")
if self.recent_switch.content_widget.get_active():
visible_plugins.append("newpane")
visible_plugins.append("recent")
self.settings.set_strv("plugins-list", visible_plugins)
def add_custom_place(self, newButton):
dialog = CustomPlaceDialog()
response = dialog.run()
if response == Gtk.ResponseType.OK:
name = dialog.name.get_text()
path = dialog.filechooser_button.get_filename()
if name and path and name != "":
self.custom_places_model.append((name, path))
dialog.destroy()
return
def edit_custom_place(self, editButton):
dialog = CustomPlaceDialog()
treeselection = self.custom_places_tree.get_selection()
currentiter = treeselection.get_selected()[1]
if currentiter:
initName = self.custom_places_model.get_value(currentiter, 0)
initPath = self.custom_places_model.get_value(currentiter, 1)
dialog.name.set_text(initName)
dialog.filechooser_button.set_filename(initPath)
response = dialog.run()
if response == Gtk.ResponseType.OK:
name = dialog.name.get_text()
path = dialog.filechooser_button.get_filename()
if name and path and name != "":
self.custom_places_model.set_value(currentiter, 0, name)
self.custom_places_model.set_value(currentiter, 1, path)
dialog.destroy()
def move_up(self, upButton):
treeselection = self.custom_places_tree.get_selection()
currentiter = treeselection.get_selected()[1]
if treeselection:
lagiter = self.custom_places_model.get_iter_first()
nextiter = self.custom_places_model.get_iter_first()
while nextiter and self.custom_places_model.get_path(nextiter) != \
self.custom_places_model.get_path(currentiter):
lagiter = nextiter
nextiter = self.custom_places_model.iter_next(nextiter)
if nextiter:
self.custom_places_model.swap(currentiter, lagiter)
return
def move_down(self, downButton):
treeselection = self.custom_places_tree.get_selection()
currentiter = treeselection.get_selected()[1]
nextiter = self.custom_places_model.iter_next(currentiter)
if nextiter:
self.custom_places_model.swap(currentiter, nextiter)
return
def remove_custom_place(self, removeButton):
treeselection = self.custom_places_tree.get_selection()
currentiter = treeselection.get_selected()[1]
if currentiter:
self.custom_places_model.remove(currentiter)
return
def save_custom_places(self, treemodel, path, iter = None, new_order = None):
if not iter or self.custom_places_model.get_value(iter, 1):
treeiter = self.custom_places_model.get_iter_first()
custom_places_names = []
custom_places_paths = []
while treeiter:
custom_places_names = custom_places_names + [self.custom_places_model.get_value(treeiter, 0)]
custom_places_paths = custom_places_paths + [self.custom_places_model.get_value(treeiter, 1)]
treeiter = self.custom_places_model.iter_next(treeiter)
self.places_settings.set_strv("custom-paths", custom_places_paths)
self.places_settings.set_strv("custom-names", custom_places_names)
if __name__ == "__main__":
setproctitle.setproctitle('mintmenu-preferences')
preferences = mintMenuPreferences()
Gtk.main()

Binary file not shown.

Before

(image error) Size: 573 B

View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 127 127" style="enable-background:new 0 0 127 127;" xml:space="preserve">
<style type="text/css">
.st0{fill:#DE5833;}
.st1{fill:#FFFFFF;}
.st2{fill-rule:evenodd;clip-rule:evenodd;fill:#FED30A;}
.st3{fill:#2D4F8D;}
.st4{fill:#D5D7D8;}
.st5{fill:#67BD47;}
.st6{fill:#43A347;}
.st7{fill:#4C4C4C;}
</style>
<g>
<g>
<circle class="st0" cx="63.3" cy="63.3" r="60"/>
<path class="st1" d="M114.1,41.8c-2.8-6.6-6.8-12.5-11.8-17.5c-5.1-5.1-11-9-17.5-11.8c-6.8-2.9-14-4.3-21.5-4.3
s-14.7,1.5-21.5,4.3c-6.6,2.8-12.5,6.8-17.5,11.8c-5.1,5.1-9,11-11.8,17.5c-2.9,6.8-4.3,14-4.3,21.5c0,7.4,1.5,14.7,4.3,21.5
c2.8,6.6,6.8,12.5,11.8,17.5c5.1,5.1,11,9,17.5,11.8c6.8,2.9,14,4.3,21.5,4.3s14.7-1.5,21.5-4.3c6.6-2.8,12.5-6.8,17.5-11.8
c5.1-5.1,9-11,11.8-17.5c2.9-6.8,4.3-14,4.3-21.5C118.4,55.8,117,48.6,114.1,41.8z M75.3,112.8c-3.2-5.4-11.6-20.5-11.6-31.7
c0-25.8,17.3-3.7,17.3-24.3c0-4.9-2.4-22.1-17.4-25.7c-3.7-4.9-12.4-9.6-26.2-7.7c0,0,2.3,0.7,4.9,2c0,0-5,0.7-5.2,4.1
c0,0,9.9-0.5,15.5,1.3c-12.9,1.7-19.6,8.4-18.4,20.8c1.7,17.5,9.1,48.7,11.7,59.6c-19.6-7.1-33.7-25.9-33.7-48
c0-28.1,22.8-51,51-51s51,22.8,51,51C114.2,87.3,97.6,107.4,75.3,112.8z"/>
<path id="Beak_2_" class="st2" d="M60.5,71.6c0-6.6,9-8.7,12.4-8.7c9.2,0,22.2-5.9,25.4-5.8c3.3,0.1,5.4,1.4,5.4,2.9
c0,2.2-18.4,10.5-25.5,9.8c-6.8-0.6-8.4,0.1-8.4,2.9c0,2.4,4.9,4.6,10.3,4.6c8.1,0,16-3.6,18.4-1.9c2.1,1.5-5.5,6.9-14.2,6.9
S60.5,78.2,60.5,71.6z"/>
<g>
<path class="st3" d="M76.5,43.6c-2.4-3.1-6.7-3.2-8.2,0.4C70.6,42.2,73.4,41.8,76.5,43.6z"/>
<path class="st3" d="M49.7,43.7c-3.3-2-8.8-2.2-8.5,4.1C42.9,43.9,45.1,43.2,49.7,43.7z"/>
<path class="st3" d="M74.5,49.5c-1.8,0-3.3,1.5-3.3,3.3c0,1.8,1.5,3.3,3.3,3.3s3.3-1.5,3.3-3.3C77.8,51,76.3,49.5,74.5,49.5z
M75.7,52.5c-0.5,0-1-0.4-1-1c0-0.5,0.4-1,1-1s1,0.4,1,1C76.6,52.1,76.2,52.5,75.7,52.5z"/>
<path class="st3" d="M48.9,51.3c-2.1,0-3.8,1.7-3.8,3.8c0,2.1,1.7,3.8,3.8,3.8c2.1,0,3.8-1.7,3.8-3.8C52.7,53,51,51.3,48.9,51.3z
M50.3,54.8c-0.6,0-1.1-0.5-1.1-1.1c0-0.6,0.5-1.1,1.1-1.1c0.6,0,1.1,0.5,1.1,1.1C51.4,54.3,50.9,54.8,50.3,54.8z"/>
</g>
<g>
<path class="st4" d="M40.6,35.1c-4.8,3.5-7,8.9-6.3,16.5c1.7,17.5,9.1,48.8,11.7,59.7c0.9,0.3,1.8,0.6,2.7,0.9
c-1.6-6.6-9.3-38.8-12.7-63.5C35.1,42.1,37.6,38.2,40.6,35.1z"/>
<path class="st4" d="M52.5,30.8c0.4,0,0.7-0.1,0.7-0.1c-5.2-2.5-13.4-2.6-15.6-2.6c-0.2,0.4-0.4,0.9-0.4,1.4
C37.1,29.6,46.8,29,52.5,30.8z"/>
<path class="st4" d="M43.1,25.4c-1.6-1.1-2.9-1.8-3.7-2.2c-0.7,0.1-1.3,0.1-2,0.2c0,0,2.3,0.7,4.9,2c0,0-0.1,0-0.2,0
C42.7,25.4,43.1,25.4,43.1,25.4z"/>
</g>
<g>
<path class="st5" d="M83.4,91.9c-1.7-0.4-8.3,4.3-10.8,6.1c-0.1-0.5-0.2-0.9-0.3-1.1c-0.3-1-6.7-0.4-8.2,1.2
c-4-1.9-12-5.6-12.1-3.3c-0.3,3,0,15.5,1.6,16.4c1.2,0.7,8-3,11.4-4.9c0,0,0,0,0.1,0c2.1,0.5,6,0,7.4-0.9
c0.2-0.1,0.3-0.3,0.4-0.5c3.1,1.2,9.8,3.6,11.2,3.1C85.9,107.5,85.5,92.4,83.4,91.9z"/>
<path class="st6" d="M65.1,106.3c-2.1-0.4-1.4-2.5-1.4-7.4c0,0,0,0,0,0c-0.5,0.3-0.9,0.7-0.9,1.1c0,4.9-0.8,7.1,1.4,7.4
c2.1,0.5,6,0,7.6-0.9c0.3-0.2,0.4-0.5,0.5-1C70.8,106.4,67.1,106.8,65.1,106.3z"/>
</g>
</g>
<g>
<path class="st7" d="M110.5,106.4c-0.9,0-1.7,0.7-1.7,1.6c0,0.9,0.7,1.7,1.7,1.7c0.9,0,1.7-0.7,1.7-1.7
C112.2,107.2,111.5,106.4,110.5,106.4z M110.6,109.4c-0.7,0-1.3-0.6-1.3-1.3c0-0.7,0.5-1.3,1.3-1.3c0.7,0,1.3,0.6,1.3,1.3
C111.8,108.8,111.3,109.4,110.6,109.4z"/>
<path class="st7" d="M110.6,107.4c0.2,0,0.3,0.1,0.4,0.3l0.3-0.2c-0.1-0.2-0.4-0.5-0.7-0.5c-0.5,0-1,0.4-1,1c0,0.6,0.4,1,1,1
c0.4,0,0.6-0.2,0.7-0.5l-0.3-0.2c-0.1,0.2-0.2,0.3-0.4,0.3c-0.3,0-0.6-0.3-0.6-0.6C110.1,107.7,110.3,107.4,110.6,107.4z"/>
</g>
</g>
</svg>

After

(image error) Size: 3.8 KiB

Binary file not shown.

Before

(image error) Size: 733 B

Binary file not shown.

Before

(image error) Size: 318 B

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" stroke-miterlimit="10" style="shape-rendering:geometricPrecision; fill-rule:evenodd">
<rect width="100%" height="100%" fill="white"/>
<path d="M 120.85,29.21 C 120.85,29.62 120.72,29.99 120.47,30.33 C 120.21,30.66 119.94,30.83 119.63,30.83 C 117.14,31.07 115.09,31.87 113.51,33.24 C 111.92,34.6 110.29,37.21 108.6,41.05 L 82.8,99.19 C 82.63,99.73 82.16,100 81.38,100 C 80.77,100 80.3,99.73 79.96,99.19 L 65.49,68.93 L 48.85,99.19 C 48.51,99.73 48.04,100 47.43,100 C 46.69,100 46.2,99.73 45.96,99.19 L 20.61,41.05 C 19.03,37.44 17.36,34.92 15.6,33.49 C 13.85,32.06 11.4,31.17 8.27,30.83 C 8,30.83 7.74,30.69 7.51,30.4 C 7.27,30.12 7.15,29.79 7.15,29.42 C 7.15,28.47 7.42,28 7.96,28 C 10.22,28 12.58,28.1 15.05,28.3 C 17.34,28.51 19.5,28.61 21.52,28.61 C 23.58,28.61 26.01,28.51 28.81,28.3 C 31.74,28.1 34.34,28 36.6,28 C 37.14,28 37.41,28.47 37.41,29.42 C 37.41,30.36 37.24,30.83 36.91,30.83 C 34.65,31 32.87,31.58 31.57,32.55 C 30.27,33.53 29.62,34.81 29.62,36.4 C 29.62,37.21 29.89,38.22 30.43,39.43 L 51.38,86.74 L 63.27,64.28 L 52.19,41.05 C 50.2,36.91 48.56,34.23 47.28,33.03 C 46,31.84 44.06,31.1 41.46,30.83 C 41.22,30.83 41,30.69 40.78,30.4 C 40.56,30.12 40.45,29.79 40.45,29.42 C 40.45,28.47 40.68,28 41.16,28 C 43.42,28 45.49,28.1 47.38,28.3 C 49.2,28.51 51.14,28.61 53.2,28.61 C 55.22,28.61 57.36,28.51 59.62,28.3 C 61.95,28.1 64.24,28 66.5,28 C 67.04,28 67.31,28.47 67.31,29.42 C 67.31,30.36 67.15,30.83 66.81,30.83 C 62.29,31.14 60.03,32.42 60.03,34.68 C 60.03,35.69 60.55,37.26 61.6,39.38 L 68.93,54.26 L 76.22,40.65 C 77.23,38.73 77.74,37.11 77.74,35.79 C 77.74,32.69 75.48,31.04 70.96,30.83 C 70.55,30.83 70.35,30.36 70.35,29.42 C 70.35,29.08 70.45,28.76 70.65,28.46 C 70.86,28.15 71.06,28 71.26,28 C 72.88,28 74.87,28.1 77.23,28.3 C 79.49,28.51 81.35,28.61 82.8,28.61 C 83.84,28.61 85.38,28.52 87.4,28.35 C 89.96,28.12 92.11,28 93.83,28 C 94.23,28 94.43,28.4 94.43,29.21 C 94.43,30.29 94.06,30.83 93.32,30.83 C 90.69,31.1 88.57,31.83 86.97,33.01 C 85.37,34.19 83.37,36.87 80.98,41.05 L 71.26,59.02 L 84.42,85.83 L 103.85,40.65 C 104.52,39 104.86,37.48 104.86,36.1 C 104.86,32.79 102.6,31.04 98.08,30.83 C 97.67,30.83 97.47,30.36 97.47,29.42 C 97.47,28.47 97.77,28 98.38,28 C 100.03,28 101.99,28.1 104.25,28.3 C 106.34,28.51 108.1,28.61 109.51,28.61 C 111,28.61 112.72,28.51 114.67,28.3 C 116.7,28.1 118.52,28 120.14,28 C 120.61,28 120.85,28.4 120.85,29.21 z" />
</svg>

After

(image error) Size: 2.4 KiB

View File

@ -2,20 +2,14 @@
<schemalist>
<schema id="com.linuxmint.mintmenu" path="/com/linuxmint/mintmenu/">
<key type="b" name="hide-applet-icon">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="use-custom-color">
<default>false</default>
<key type="b" name="show-applet-icon">
<default>true</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="tooltips-enabled">
<default>true</default>
<default>false</default>
<summary></summary>
<description></description>
</key>
@ -39,7 +33,7 @@
</key>
<key type="s" name="applet-text">
<default>"Menu"</default>
<default>""</default>
<summary></summary>
<description></description>
</key>
@ -57,7 +51,25 @@
</key>
<key type="s" name="applet-icon">
<default>"/usr/lib/linuxmint/mintMenu/mintMenu.png"</default>
<default>"linuxmint-logo-ring-symbolic"</default>
<summary></summary>
<description></description>
</key>
<key type="s" name="default-applet-icon">
<default>"linuxmint-logo-ring-symbolic"</default>
<summary></summary>
<description></description>
</key>
<key type="as" name="applet-icons">
<default>["linuxmint-logo", "linuxmint-logo-badge", "linuxmint-logo-badge-symbolic", "linuxmint-logo-filled-badge",
"linuxmint-logo-filled-leaf-badge", "linuxmint-logo-filled-leaf", "linuxmint-logo-filled-ring",
"linuxmint-logo-leaf-badge", "linuxmint-logo-leaf-badge-symbolic", "linuxmint-logo-leaf",
"linuxmint-logo-leaf-symbolic", "linuxmint-logo-neon", "linuxmint-logo-ring",
"linuxmint-logo-ring-symbolic", "linuxmint-logo-simple", "linuxmint-logo-simple-symbolic",
"mate-symbolic", "emblem-favorite-symbolic", "user-bookmarks-symbolic",
"start-here-symbolic"]</default>
<summary></summary>
<description></description>
</key>
@ -68,32 +80,10 @@
<description></description>
</key>
<key type="s" name="custom-color">
<default>"#DEDEDE"</default>
<summary></summary>
<description></description>
</key>
<key type="s" name="custom-heading-color">
<default>"#3C3C3C"</default>
<summary></summary>
<description></description>
</key>
</schema>
<schema id="com.linuxmint.mintmenu.plugins.places" path="/com/linuxmint/mintmenu/plugins/places/">
<key type="b" name="sticky">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="minimized">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="allow-scrollbar">
<default>false</default>
@ -266,18 +256,6 @@
<description></description>
</key>
<key type="b" name="sticky">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="minimized">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="s" name="search-command">
<default>"mate-search-tool --named \"%s\" --start"</default>
<summary></summary>
@ -307,6 +285,18 @@
<summary></summary>
<description></description>
</key>
<key type="b" name="search-on-top">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="as" name="favorite-apps-list">
<default>[]</default>
<summary>List of absolute desktop file paths</summary>
</key>
</schema>
<schema id="com.linuxmint.mintmenu.plugins.system_management" path="/com/linuxmint/mintmenu/plugins/system_management/">
@ -383,18 +373,6 @@
<description></description>
</key>
<key type="b" name="sticky">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="minimized">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="s" name="icon">
<default>"preferences-system"</default>
<summary></summary>
@ -417,7 +395,7 @@
</key>
<key type="i" name="num-recent-docs">
<default>10</default>
<default>20</default>
<summary></summary>
<description></description>
</key>
@ -440,16 +418,9 @@
<description></description>
</key>
<key type="b" name="sticky">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="minimized">
<default>false</default>
<summary></summary>
<description></description>
<key type="as" name="recent-apps-list">
<default>[]</default>
<summary>List of absolute desktop file paths</summary>
</key>
</schema>

View File

@ -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

(image error) Size: 5.6 KiB

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.2 -->
<interface>
<requires lib="gtk+" version="3.0"/>
<requires lib="gtk+" version="3.18"/>
<object class="GtkWindow" id="mainWindow">
<property name="width_request">169</property>
<property name="height_request">227</property>
@ -8,14 +9,18 @@
<property name="window_position">mouse</property>
<property name="gravity">static</property>
<signal name="destroy" handler="on_window1_destroy" swapped="no"/>
<child type="titlebar">
<placeholder/>
</child>
<child>
<object class="GtkEventBox" id="Applications">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="vbox4">
<object class="GtkBox" id="main_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">3</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkNotebook" id="notebook2">
@ -40,11 +45,16 @@
<object class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xpad">15</property>
<property name="ypad">10</property>
<property name="label" translatable="yes">&lt;span weight="bold"&gt;Favorites&lt;/span&gt;</property>
<property name="use_markup">True</property>
<property name="margin_left">15</property>
<property name="margin_right">15</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
<property name="label" translatable="yes">Favorites</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"/>
<attribute name="scale" value="1.2"/>
</attributes>
</object>
<packing>
<property name="expand">True</property>
@ -70,7 +80,7 @@
<object class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">All _Applications</property>
<property name="label" translatable="yes">All applications</property>
<property name="use_underline">True</property>
</object>
<packing>
@ -85,7 +95,7 @@
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="stock">gtk-go-forward</property>
<property name="icon_name">go-next-symbolic</property>
</object>
<packing>
<property name="expand">True</property>
@ -112,21 +122,51 @@
</packing>
</child>
<child>
<object class="GtkViewport" id="viewport2">
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">queue</property>
<property name="shadow_type">none</property>
<property name="can_focus">True</property>
<child>
<object class="GtkGrid" id="favoritesBox">
<object class="GtkViewport" id="viewport2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="column_homogeneous">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">queue</property>
<property name="shadow_type">none</property>
<child>
<placeholder/>
<object class="GtkGrid" id="favoritesBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="column_homogeneous">True</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
@ -150,7 +190,7 @@
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<child>
<object class="GtkBox" id="hbox3">
<object class="GtkBox" id="title_bar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="homogeneous">True</property>
@ -158,11 +198,16 @@
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xpad">15</property>
<property name="ypad">10</property>
<property name="label" translatable="yes">&lt;span weight="bold"&gt;All Applications&lt;/span&gt;</property>
<property name="use_markup">True</property>
<property name="margin_left">15</property>
<property name="margin_right">15</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
<property name="label" translatable="yes">Applications</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"/>
<attribute name="scale" value="1.2"/>
</attributes>
</object>
<packing>
<property name="expand">True</property>
@ -188,7 +233,7 @@
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Favorites</property>
<property name="label" translatable="yes">Favorites</property>
<property name="use_underline">True</property>
</object>
<packing>
@ -203,7 +248,7 @@
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="stock">gtk-go-forward</property>
<property name="icon_name">go-next-symbolic</property>
</object>
<packing>
<property name="expand">True</property>
@ -230,11 +275,11 @@
</packing>
</child>
<child>
<object class="GtkBox" id="hbox5">
<object class="GtkBox" id="applications">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<object class="GtkScrolledWindow" id="categoriesScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">never</property>
@ -327,25 +372,10 @@
</packing>
</child>
<child>
<object class="GtkBox" id="hbox9">
<property name="width_request">227</property>
<property name="height_request">30</property>
<object class="GtkBox" id="search_bar">
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="searchLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">&lt;span weight="bold"&gt;Search:&lt;/span&gt;</property>
<property name="use_markup">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">5</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="searchEntry">
<property name="height_request">25</property>
@ -374,6 +404,7 @@
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Show additional search options</property>
<property name="relief">none</property>
<signal name="clicked" handler="on_button17_clicked" swapped="no"/>
<child>
@ -382,7 +413,7 @@
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="stock">gtk-find</property>
<property name="icon_name">edit-find-symbolic</property>
<property name="icon_size">1</property>
</object>
</child>

View File

@ -0,0 +1,388 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.18"/>
<requires lib="xapp" version="0.0"/>
<object class="GtkBox" id="custom_places_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">9</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">etched-in</property>
<child>
<object class="GtkTreeView" id="custom_places_tree">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="reorderable">True</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="vbox3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkButtonBox" id="vbuttonbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="homogeneous">True</property>
<property name="layout_style">expand</property>
<child>
<object class="GtkButton" id="newButton">
<property name="label">gtk-new</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="editButton">
<property name="label">gtk-edit</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">6</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="vbuttonbox2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="homogeneous">True</property>
<property name="layout_style">expand</property>
<child>
<object class="GtkButton" id="upButton">
<property name="label">gtk-go-up</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="downButton">
<property name="label">gtk-go-down</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="vbuttonbox3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="homogeneous">True</property>
<property name="layout_style">expand</property>
<child>
<object class="GtkButton" id="removeButton">
<property name="label">gtk-remove</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">5</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">6</property>
<property name="position">1</property>
</packing>
</child>
</object>
<object class="GtkWindow" id="main_window">
<property name="can_focus">False</property>
<property name="default_width">750</property>
<property name="default_height">750</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="XAppStackSidebar" id="stack_switcher">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stack">main_stack</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkStack" id="main_stack">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="box_general">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="name">page1</property>
<property name="title" translatable="yes">General</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="box_appearance">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="name">page0</property>
<property name="title" translatable="yes">Appearance</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="box_favorites">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="name">page3</property>
<property name="title" translatable="yes">Favorites</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="box_applications">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="name">page2</property>
<property name="title" translatable="yes">Applications</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="box_system">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="name">page4</property>
<property name="title" translatable="yes">System</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="box_places">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="name">page5</property>
<property name="title" translatable="yes">Places</property>
<property name="position">5</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkListStore" id="model1">
<columns>
<!-- column-name gchararray -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">Default</col>
</row>
</data>
</object>
</interface>

View File

@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.2 -->
<interface>
<requires lib="gtk+" version="3.0"/>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="border_width">3</property>
<property name="title" translatable="yes">window1</property>
<child type="titlebar">
<placeholder/>
</child>
<child>
<object class="GtkEventBox" id="eventbox1">
<property name="visible">True</property>
@ -14,27 +18,32 @@
<object class="GtkBox" id="vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<child>
<object class="GtkNotebook" id="RecentTabs">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="show_tabs">False</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<object class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkViewport" id="viewport2">
<object class="GtkViewport" id="viewport1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">12</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>
<object class="GtkButtonBox" id="RecentApps">
<object class="GtkBox" id="RecentBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="layout_style">start</property>
<child>
<placeholder/>
</child>
@ -45,30 +54,36 @@
</object>
</child>
<child type="tab">
<object class="GtkLabel" id="label2">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Applications</property>
<property name="label" translatable="yes">Documents</property>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow2">
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can_focus">True</property>
<child>
<object class="GtkViewport" id="viewport1">
<object class="GtkViewport" id="viewport2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">12</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>
<object class="GtkButtonBox" id="RecentBox">
<object class="GtkBox" id="RecentApps">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="layout_style">start</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
@ -79,10 +94,10 @@
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="label3">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Documents</property>
<property name="label" translatable="yes">Applications</property>
</object>
<packing>
<property name="position">1</property>