b7a1fa0b94
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.
205 lines
8.8 KiB
Python
Executable File
205 lines
8.8 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
import gettext
|
|
import os
|
|
import locale
|
|
|
|
import gi
|
|
gi.require_version("Gtk", "3.0")
|
|
from gi.repository import Gtk, Gio
|
|
|
|
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):
|
|
|
|
def __init__(self, mintMenuWin, toggleButton, de):
|
|
|
|
self.mintMenuWin = mintMenuWin
|
|
self.toggleButton = toggleButton
|
|
self.de = de
|
|
|
|
self.builder = Gtk.Builder()
|
|
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")
|
|
|
|
# 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")
|
|
|
|
# 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")
|
|
|
|
# Gconf stuff
|
|
self.settings = Gio.Settings("com.linuxmint.mintmenu.plugins.system_management")
|
|
|
|
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)
|
|
|
|
def wake(self):
|
|
pass
|
|
|
|
def changePluginSize(self, settings, key, args):
|
|
self.allowScrollbar = self.settings.get_boolean("allow-scrollbar")
|
|
if key == "width":
|
|
self.width = settings.get_int(key)
|
|
elif key == "height":
|
|
if not self.allowScrollbar:
|
|
self.height = -1
|
|
self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER)
|
|
else:
|
|
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)
|
|
|
|
|
|
def RegenPlugin(self, *args, **kargs):
|
|
self.GetGSettingsEntries()
|
|
self.ClearAll()
|
|
self.do_standard_items()
|
|
|
|
def GetGSettingsEntries(self):
|
|
|
|
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")
|
|
|
|
# Check toggles
|
|
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"
|
|
self.logout_cmd = "cinnamon-session-quit --logout"
|
|
self.shutdown_cmd = "cinnamon-session-quit --power-off"
|
|
self.terminal_cmd = "/usr/bin/gnome-terminal"
|
|
self.settings_cmd = "cinnamon-settings"
|
|
elif self.de == "xfce":
|
|
self.lock_cmd = "xdg-screensaver lock"
|
|
self.logout_cmd = "xfce4-session-logout"
|
|
self.shutdown_cmd = ""
|
|
self.terminal_cmd = "/usr/bin/gnome-terminal"
|
|
self.settings_cmd = "xfce4-settings-manager"
|
|
self.showLockScreen = False
|
|
self.showQuit = False
|
|
else:
|
|
self.lock_cmd = "mate-screensaver-command -l"
|
|
self.logout_cmd = "mate-session-save --logout-dialog"
|
|
self.shutdown_cmd = "mate-session-save --shutdown-dialog"
|
|
self.terminal_cmd = "/usr/bin/mate-terminal"
|
|
self.settings_cmd = "mate-control-center"
|
|
|
|
# Hide vertical dotted separator
|
|
self.hideseparator = self.settings.get_boolean("hide-separator")
|
|
# Plugin icon
|
|
self.icon = self.settings.get_string("icon")
|
|
|
|
def ClearAll(self):
|
|
for child in self.systemBtnHolder.get_children():
|
|
child.destroy()
|
|
for child in self.editableBtnHolder.get_children():
|
|
child.destroy()
|
|
|
|
#Add standard items
|
|
def do_standard_items(self):
|
|
|
|
if self.showSoftwareManager:
|
|
if os.path.exists("/usr/bin/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"))
|
|
|
|
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"))
|
|
|
|
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"))
|
|
|
|
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)
|
|
else:
|
|
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:
|
|
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"))
|
|
|
|
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"))
|
|
|
|
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"))
|
|
|
|
def ButtonClicked(self, widget, Exec):
|
|
self.mintMenuWin.hide()
|
|
if Exec:
|
|
Execute(Exec)
|
|
|
|
def do_plugin(self):
|
|
self.do_standard_items()
|