mintMenu.py: Refactor panel button construction to fix padding in

different configurations.
This commit is contained in:
Michael Webster 2020-06-10 10:47:03 -04:00
parent 889771e8ae
commit 23e3eb60df

View File

@ -329,10 +329,11 @@ class MenuWin(object):
self.detect_desktop_environment() self.detect_desktop_environment()
self.settings = Gio.Settings.new("com.linuxmint.mintmenu") self.settings = Gio.Settings.new("com.linuxmint.mintmenu")
self.icon_theme = Gtk.IconTheme.get_default() self.icon_theme = Gtk.IconTheme.get_default()
self.button_icon = Gtk.Image() self.button_icon = Gtk.Image(no_show_all=True)
self.loadSettings() self.loadSettings()
self.createPanelButton() self.button_box = None
self.updatePanelButton()
self.mate_settings = Gio.Settings.new("org.mate.interface") self.mate_settings = Gio.Settings.new("org.mate.interface")
self.mate_settings.connect("changed::gtk-theme", self.changeTheme) self.mate_settings.connect("changed::gtk-theme", self.changeTheme)
@ -346,7 +347,7 @@ class MenuWin(object):
self.applet.set_flags(MatePanelApplet.AppletFlags.EXPAND_MINOR) self.applet.set_flags(MatePanelApplet.AppletFlags.EXPAND_MINOR)
self.applet.connect("button-press-event", self.showMenu) self.applet.connect("button-press-event", self.showMenu)
self.applet.connect("change-orient", self.changeOrientation) self.applet.connect("change-orient", self.updatePanelButton)
self.applet.connect("enter-notify-event", self.enter_notify) self.applet.connect("enter-notify-event", self.enter_notify)
self.applet.connect("leave-notify-event", self.leave_notify) self.applet.connect("leave-notify-event", self.leave_notify)
@ -427,9 +428,13 @@ class MenuWin(object):
else: else:
self.button_icon.set_from_surface(self.surface) self.button_icon.set_from_surface(self.surface)
def createPanelButton(self): def updatePanelButton(self):
if self.button_box != None:
self.button_box.destroy()
self.set_applet_icon() self.set_applet_icon()
self.systemlabel = Gtk.Label(label= "%s " % self.buttonText) self.systemlabel = Gtk.Label(label= "%s" % self.buttonText, no_show_all=True)
if os.path.isfile("/etc/linuxmint/info"): if os.path.isfile("/etc/linuxmint/info"):
with open("/etc/linuxmint/info") as info: with open("/etc/linuxmint/info") as info:
for line in info: for line in info:
@ -438,24 +443,54 @@ class MenuWin(object):
self.systemlabel.set_tooltip_text(tooltip) self.systemlabel.set_tooltip_text(tooltip)
self.button_icon.set_tooltip_text(tooltip) self.button_icon.set_tooltip_text(tooltip)
break break
self.button_icon.props.margin = 0
self.systemlabel.props.margin = 0
self.systemlabel.props.visible = show_text = self.buttonText != ""
self.button_icon.props.visible = self.showIcon
if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN: if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN:
self.button_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) self.button_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
self.button_box.pack_start(self.button_icon, False, False, 0) self.button_box.pack_start(self.button_icon, False, False, 0)
self.button_box.pack_start(self.systemlabel, False, False, 0) self.button_box.pack_start(self.systemlabel, False, False, 0)
self.button_icon.set_padding(5, 0) if self.showIcon and not show_text:
self.button_icon.props.margin_start = 5
self.button_icon.props.margin_end = 5
elif show_text and not self.showIcon:
self.systemlabel.props.margin_start = 5
self.systemlabel.props.margin_end = 5
else:
self.button_icon.props.margin_start = 5
self.systemlabel.props.margin_end = 5
# if we have a vertical panel # if we have a vertical panel
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.LEFT: elif self.applet.get_orient() == MatePanelApplet.AppletOrient.LEFT:
self.button_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.button_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5)
self.systemlabel.set_angle(270) self.systemlabel.set_angle(270)
self.button_box.pack_start(self.button_icon , False, False, 0) self.button_box.pack_start(self.button_icon , False, False, 0)
self.button_box.pack_start(self.systemlabel , False, False, 0) self.button_box.pack_start(self.systemlabel , False, False, 0)
self.button_icon.set_padding(0, 5) if self.showIcon and not show_text:
self.button_icon.props.margin_top = 5
self.button_icon.props.margin_bottom = 5
elif show_text and not self.showIcon:
self.systemlabel.props.margin_top = 5
self.systemlabel.props.margin_bottom = 5
else:
self.button_icon.props.margin_top = 5
self.systemlabel.props.margin_bottom = 5
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.RIGHT: elif self.applet.get_orient() == MatePanelApplet.AppletOrient.RIGHT:
self.button_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.button_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5)
self.systemlabel.set_angle(90) self.systemlabel.set_angle(90)
self.button_box.pack_start(self.systemlabel , False, False, 0) self.button_box.pack_start(self.systemlabel , False, False, 0)
self.button_box.pack_start(self.button_icon , False, False, 0) self.button_box.pack_start(self.button_icon , False, False, 0)
self.button_icon.set_padding(0, 5) if self.showIcon and not show_text:
self.button_icon.props.margin_top = 5
self.button_icon.props.margin_bottom = 5
elif show_text and not self.showIcon:
self.systemlabel.props.margin_top = 5
self.systemlabel.props.margin_bottom = 5
else:
self.button_icon.props.margin_bottom = 5
self.systemlabel.props.margin_top = 5
self.button_box.set_homogeneous(False) self.button_box.set_homogeneous(False)
self.button_box.show_all() self.button_box.show_all()
@ -511,53 +546,11 @@ class MenuWin(object):
except: except:
style_settings.set_property("gtk-theme-name", desktop_theme) style_settings.set_property("gtk-theme-name", desktop_theme)
def changeOrientation(self, *args, **kargs):
if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN:
tmpbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
self.systemlabel.set_angle(0)
self.button_box.reorder_child(self.button_icon, 0)
self.button_icon.set_padding(5, 0)
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.LEFT:
tmpbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.systemlabel.set_angle(270)
self.button_box.reorder_child(self.button_icon, 0)
self.button_icon.set_padding(0, 5)
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.RIGHT:
tmpbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.systemlabel.set_angle(90)
self.button_box.reorder_child(self.button_icon, 1)
self.button_icon.set_padding(0, 5)
tmpbox.set_homogeneous(False)
# reparent all the hboxes to the new tmpbox
for i in self.button_box:
i.reparent(tmpbox)
self.button_box.destroy()
self.button_box = tmpbox
self.button_box.show()
# this call makes sure width stays intact
self.updateButton()
self.applet.add(self.button_box)
def updateButton(self):
self.systemlabel.set_text(self.buttonText)
self.set_applet_icon()
self.sizeButton()
def hotkeyChanged (self, schema, key): def hotkeyChanged (self, schema, key):
self.hotkeyText = self.settings.get_string("hot-key") self.hotkeyText = self.settings.get_string("hot-key")
self.keybinder.rebind(self.hotkeyText) self.keybinder.rebind(self.hotkeyText)
def sizeButton(self): def sizeButton(self):
if self.showIcon:
self.button_icon.show()
else:
self.button_icon.hide()
# This code calculates width and height for the button_box # This code calculates width and height for the button_box
# and takes the orientation and scale factor in account # and takes the orientation and scale factor in account
bi_req = self.button_icon.get_preferred_size()[1] bi_req = self.button_icon.get_preferred_size()[1]
@ -566,18 +559,18 @@ class MenuWin(object):
sl_scale = self.systemlabel.get_scale_factor() sl_scale = self.systemlabel.get_scale_factor()
if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN: if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN:
if self.showIcon: if self.showIcon:
self.applet.set_size_request(sl_req.width / sl_scale + bi_req.width / bi_scale + 5, bi_req.height) self.applet.set_size_request(sl_req.width / sl_scale + bi_req.width / bi_scale, bi_req.height)
else: else:
self.applet.set_size_request(sl_req.width / sl_scale + 2, bi_req.height) self.applet.set_size_request(sl_req.width / sl_scale, bi_req.height)
else: else:
if self.showIcon: if self.showIcon:
self.applet.set_size_request(bi_req.width, sl_req.height / sl_scale + bi_req.height / bi_scale + 5) self.applet.set_size_request(bi_req.width, sl_req.height / sl_scale + bi_req.height / bi_scale)
else: else:
self.applet.set_size_request(bi_req.width, sl_req.height / sl_scale + 2) self.applet.set_size_request(bi_req.width, sl_req.height / sl_scale)
def reloadSettings(self, *args): def reloadSettings(self, *args):
self.loadSettings() self.loadSettings()
self.updateButton() self.updatePanelButton()
def showAboutDialog(self, action, userdata = None): def showAboutDialog(self, action, userdata = None):
about = Gtk.AboutDialog() about = Gtk.AboutDialog()