Merge branch 'master' into recentapps

# Conflicts:
#	debian/changelog
This commit is contained in:
roti 2017-05-05 12:24:33 +02:00
commit d56ed0d0a1
20 changed files with 1393 additions and 1826 deletions

44
debian/changelog vendored
View File

@ -1,8 +1,46 @@
mintmenu (5.7.7) serena; urgency=medium
mintmenu (5.7.8) sonya; urgency=medium
* Add recently used applications
[ JosephMcc ]
* Remove the ability to set a custom border
-- Hrotkó Gábor <roti@profi-media.com> Tue, 03 Jan 2017 21:30:58 +0000
[ Clement Lefebvre ]
* Fix launching apps which use su-to-root
-- Clement Lefebvre <root@linuxmint.com> Tue, 02 May 2017 13:10:32 +0100
mintmenu (5.7.7) sonya; urgency=medium
[ leigh123linux ]
* gtk3
* glade part #1
* glade part #2
* glade part #3
* fix errors
* fix some glade typos
* fix border colour
[ Clement Lefebvre ]
* Remove more ctypes
* Fix get_origin calls in Betsy
* Fix keybinding in LMDE
* Fix unknown variable name
* Fix popup menus
* Fix DND in favorites
* Fix add to desktop
* Fix empty trash popup
* Removed obsolete opacity support in config window
* [Alexei Sorokin] Recent: Fix Gtk warnings
* Fix race condition with dconf on session start
* Fix #157
* Fix typo in debian/control
[ JosephMcc ]
* Don't ignore icons from /usr/share/pixmaps
[ Clement Lefebvre ]
* Give the applet box a class name to allow easier themeing
-- Clement Lefebvre <root@linuxmint.com> Mon, 01 May 2017 19:50:14 +0100
mintmenu (5.7.6) serena; urgency=medium

4
debian/control vendored
View File

@ -11,15 +11,13 @@ Depends:
${python:Depends},
${misc:Depends},
python (>= 2.4), python (<< 3),
python-gtk2, python-glade2,
mint-common,
python-mate-menu, python-xdg, xdg-utils,
python-setproctitle,
libmatepanelapplet, libmatedesktop,
mate-menus,
gvfs-bin,
python-xlib,
gir1.2-mate-panel, gir1.2-gtk-2.0,
gir1.2-mate-panel (>= 1.18.0), gir1.2-gtk-3.0, gir1.2-mate-desktop (>= 1.18.0),
mozo
Description: Advanced MATE menu
One of the most advanced menus under Linux. MintMenu supports filtering,

View File

@ -1,36 +0,0 @@
#!/usr/bin/python2
import gi
import ctypes
from ctypes import *
libgobject = CDLL('libgobject-2.0.so.0')
class _PyGObject_Functions(ctypes.Structure):
_fields_ = [
('register_class',
ctypes.PYFUNCTYPE(ctypes.c_void_p, ctypes.c_char_p,
ctypes.c_int, ctypes.py_object,
ctypes.py_object)),
('register_wrapper',
ctypes.PYFUNCTYPE(ctypes.c_void_p, ctypes.py_object)),
('lookup_class',
ctypes.PYFUNCTYPE(ctypes.py_object, ctypes.c_int)),
('newgobj',
ctypes.PYFUNCTYPE(ctypes.py_object, ctypes.c_void_p)),
]
class PyGObjectCPAI(object):
def __init__(self):
PyCObject_AsVoidPtr = ctypes.pythonapi.PyCObject_AsVoidPtr
PyCObject_AsVoidPtr.restype = ctypes.c_void_p
PyCObject_AsVoidPtr.argtypes = [ctypes.py_object]
addr = PyCObject_AsVoidPtr(ctypes.py_object(
gi._gobject._PyGObject_API))
self._api = _PyGObject_Functions.from_address(addr)
def pygobject_new(self, addr):
return self._api.newgobj(addr)
def get_widget(ptr):
return PyGObjectCPAI().pygobject_new(ptr)

View File

@ -25,18 +25,12 @@
# DEALINGS IN THE SOFTWARE.
import gi
gi.require_version("Gtk", "2.0")
gi.require_version("Gtk", "3.0")
from Xlib.display import Display
from Xlib import X, error
from gi.repository import Gtk, Gdk, GObject, GLib
from gi.repository import Gtk, Gdk, GdkX11, GObject, GLib
import threading
import ctypes
from ctypes import *
import capi
gdk = CDLL("libgdk-x11-2.0.so.0")
gtk = CDLL("libgtk-x11-2.0.so.0")
SPECIAL_MODS = (["Super_L", "<Super>"],
["Super_R", "<Super>"],
@ -57,8 +51,7 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
threading.Thread.__init__ (self)
self.setDaemon (True)
gdk.gdk_keymap_get_default.restype = c_void_p
self.keymap = capi.get_widget (gdk.gdk_keymap_get_default())
self.keymap = Gdk.Keymap().get_default()
self.display = Display()
self.screen = self.display.screen()
self.window = self.screen.root
@ -67,19 +60,6 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
self.raw_keyval = None
self.keytext = ""
def is_hotkey(self, key, modifier):
keymatch = False
modmatch = False
modifier = modifier & ~Gdk.ModifierType.SUPER_MASK
modint = int(modifier)
if self.get_keycode(key) == self.keycode:
keymatch = True
for ignored_mask in self.ignored_masks:
if self.modifiers | ignored_mask == modint | ignored_mask:
modmatch = True
break
return keymatch and modmatch
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,
@ -89,14 +69,6 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
if "Mod" not in Gtk.accelerator_name(0, modifier) or "Mod4" in Gtk.accelerator_name(0, modifier):
self.known_modifiers_mask |= modifier
def get_keycode(self, keyval):
count = c_int()
array = (KeymapKey * 10)()
keys = cast(array, POINTER(KeymapKey))
gdk.gdk_keymap_get_entries_for_keyval.argtypes = [c_void_p, c_uint, c_void_p, c_void_p]
gdk.gdk_keymap_get_entries_for_keyval(hash(self.keymap), keyval, byref(keys), byref(count))
return keys[0].keycode
def grab(self, key):
accelerator = key
accelerator = accelerator.replace("<Super>", "<Mod4>")
@ -107,7 +79,11 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
return False
self.keytext = key
self.keycode = self.get_keycode(keyval)
try:
self.keycode = self.keymap.get_entries_for_keyval(keyval).keys[0].keycode
except:
# In Betsy, the get_entries_for_keyval() returns an unamed tuple...
self.keycode = self.keymap.get_entries_for_keyval(keyval)[1][0].keycode
self.modifiers = int(modifiers)
catch = error.CatchError(error.BadAccess)
@ -137,8 +113,7 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
if window is None:
self.window = self.screen.root
else:
gdk.gdk_x11_drawable_get_xid.argtypes = [c_void_p]
self.window = self.display.create_resource_object("window", gdk.gdk_x11_drawable_get_xid(hash(window)))
self.window = self.display.create_resource_object("window", window.get_xid())
self.grab(self.keytext)
def get_mask_combinations(self, mask):
@ -180,12 +155,7 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
self.ungrab()
self.display.close()
class KeymapKey(Structure):
_fields_ = [("keycode", c_uint),
("group", c_int),
("level", c_int)]
class KeybindingWidget(Gtk.HBox):
class KeybindingWidget(Gtk.Box):
__gsignals__ = {
'accel-edited': (GObject.SignalFlags.RUN_LAST, None, ()),
}
@ -235,8 +205,7 @@ class KeybindingWidget(Gtk.HBox):
self.set_button_text()
self.emit("accel-edited")
return True
gtk.gtk_accelerator_name.restype = c_char_p
accel_string = gtk.gtk_accelerator_name(event.keyval, event.state)
accel_string = Gtk.accelerator_name( event.keyval, event.state )
accel_string = self.sanitize(accel_string)
self.value = accel_string
self.set_button_text()

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 2.10 -->
<!-- interface-naming-policy toplevel-contextual -->
<requires lib="gtk+" version="3.0"/>
<object class="GtkWindow" id="mainWindow">
<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 | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK</property>
@ -16,9 +15,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkHBox" id="paneholder">
<object class="GtkBox" id="paneholder">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">horizontal</property>
<child>
<placeholder/>
</child>

View File

@ -1,7 +1,7 @@
#!/usr/bin/python2
import gi
gi.require_version("Gtk", "2.0")
gi.require_version("Gtk", "3.0")
gi.require_version('MatePanelApplet', '4.0')
from gi.repository import Gtk, GdkPixbuf, Gdk, GObject
from gi.repository import MatePanelApplet
@ -14,8 +14,6 @@ import gettext
import traceback
import time
import gc
import ctypes
from ctypes import *
import xdg.Config
import keybinding
import pointerMonitor
@ -23,8 +21,6 @@ import setproctitle
GObject.threads_init()
gdk = CDLL("libgdk-x11-2.0.so.0")
# Rename the process
setproctitle.setproctitle('mintmenu')
@ -63,10 +59,9 @@ class MainWindow( object ):
builder.add_from_file(os.path.join( self.path, "mintMenu.glade" ))
self.window = builder.get_object( "mainWindow" )
self.window.realize()
self.window.window.set_decorations(Gdk.WMDecoration.BORDER)
self.window.get_window().set_decorations(Gdk.WMDecoration.BORDER)
self.window.set_title("")
self.paneholder = builder.get_object( "paneholder" )
self.border = builder.get_object( "border" )
builder.connect_signals(self)
@ -90,18 +85,16 @@ class MainWindow( object ):
self.settings.connect( "changed::start-with-favorites", self.toggleStartWithFavorites )
self.settings.connect( "changed::tooltips-enabled", self.toggleTooltipsEnabled )
self.settings.connect( "changed::use-custom-color", self.toggleUseCustomColor )
self.settings.connect( "changed::custom-border-color", self.toggleCustomBorderColor )
self.settings.connect( "changed::custom-heading-color", self.toggleCustomHeadingColor )
self.settings.connect( "changed::custom-color", self.toggleCustomBackgroundColor )
self.settings.connect( "changed::border-width", self.toggleBorderWidth )
self.getSetGSettingEntries()
self.tooltips = Gtk.Tooltips()
self.tooltipsWidgets = []
if self.globalEnableTooltips and self.enableTooltips:
self.tooltips.enable()
self.tooltipsEnable()
else:
self.tooltips.disable()
self.tooltipsEnable( False )
self.PopulatePlugins();
self.firstTime = True;
@ -123,25 +116,17 @@ class MainWindow( object ):
self.enableTooltips = settings.get_boolean(key)
if self.globalEnableTooltips and self.enableTooltips:
self.tooltips.enable()
self.tooltipsEnable()
else:
self.tooltips.disable()
self.tooltipsEnable( False )
def toggleStartWithFavorites( self, settings, key, args = None ):
self.startWithFavorites = settings.get_boolean(key)
def toggleBorderWidth( self, settings, key, args = None ):
self.borderwidth = settings.get_int(key)
self.SetupMintMenuBorder()
def toggleUseCustomColor( self, settings, key, args = None ):
self.usecustomcolor = settings.get_boolean(key)
self.loadTheme()
def toggleCustomBorderColor( self, settings, key, args = None ):
self.custombordercolor = settings.get_string(key)
self.SetupMintMenuBorder()
def toggleCustomBackgroundColor( self, settings, key, args = None):
self.customcolor = settings.get_string(key)
self.SetPaneColors( self.panesToColor )
@ -157,28 +142,19 @@ class MainWindow( object ):
self.usecustomcolor = self.settings.get_boolean( "use-custom-color" )
self.customcolor = self.settings.get_string( "custom-color" )
self.customheadingcolor = self.settings.get_string( "custom-heading-color" )
self.custombordercolor = self.settings.get_string( "custom-border-color" )
self.borderwidth = self.settings.get_int( "border-width" )
self.offset = self.settings.get_int( "offset" )
self.enableTooltips = self.settings.get_boolean( "tooltips-enabled" )
self.startWithFavorites = self.settings.get_boolean( "start-with-favorites" )
self.globalEnableTooltips = self.panelSettings.get_boolean( "tooltips-enabled" )
def SetupMintMenuBorder( self, defaultStyle = None ):
if self.usecustomcolor:
self.window.modify_bg( Gtk.StateType.NORMAL, Gdk.color_parse( self.custombordercolor ) )
elif defaultStyle is not None:
self.window.modify_bg( Gtk.StateType.NORMAL, defaultStyle.lookup_color('bg_color')[1] )
self.border.set_padding( self.borderwidth, self.borderwidth, self.borderwidth, self.borderwidth )
def PopulatePlugins( self ):
self.panesToColor = [ ]
self.headingsToColor = [ ]
start = time.time()
PluginPane = Gtk.EventBox()
PluginPane.show()
PaneLadder = Gtk.VBox( False, 0 )
PaneLadder = Gtk.Box( orientation=Gtk.Orientation.VERTICAL )
PluginPane.add( PaneLadder )
ImageBox = Gtk.EventBox()
ImageBox.show()
@ -239,7 +215,7 @@ class MainWindow( object ):
self.panesToColor.append( MyPlugin.content_holder )
MyPlugin.content_holder.show()
VBox1 = Gtk.VBox( False, 0 )
VBox1 = Gtk.Box( orientation=Gtk.Orientation.VERTICAL )
if MyPlugin.heading != "":
Label1 = Gtk.Label(label= MyPlugin.heading )
Align1 = Gtk.Alignment.new( 0, 0, 0, 0 )
@ -255,7 +231,7 @@ class MainWindow( object ):
heading.set_visible_window( False )
heading.set_size_request( MyPlugin.width, 30 )
else:
heading = Gtk.HBox()
heading = Gtk.Box( orientation=Gtk.Orientation.HORIZONTAL )
#heading.set_relief( Gtk.ReliefStyle.NONE )
heading.set_size_request( MyPlugin.width, -1 )
#heading.set_sensitive(False)
@ -266,14 +242,17 @@ class MainWindow( object ):
VBox1.pack_start( heading, False, False, 0 )
VBox1.show()
#Add plugin to Plugin Box under heading button
MyPlugin.content_holder.reparent( VBox1 )
MyPlugin.content_holder.get_parent().remove(MyPlugin.content_holder)
VBox1.add( MyPlugin.content_holder )
#Add plugin to main window
PaneLadder.pack_start( VBox1 , True, True, 0)
PaneLadder.show()
if MyPlugin.window:
MyPlugin.window.destroy()
try:
MyPlugin.get_window().destroy()
except AttributeError:
pass
try:
if hasattr( MyPlugin, 'do_plugin' ):
@ -299,7 +278,7 @@ class MainWindow( object ):
self.paneholder.pack_start( ImageBox, False, False, 0 )
self.paneholder.pack_start( PluginPane, False, False, 0 )
PluginPane = Gtk.EventBox()
PaneLadder = Gtk.VBox( False, 0 )
PaneLadder = Gtk.Box( orientation=Gtk.Orientation.VERTICAL )
PluginPane.add( PaneLadder )
ImageBox = Gtk.EventBox()
self.panesToColor.extend( [ PluginPane, ImageBox ] )
@ -321,31 +300,37 @@ class MainWindow( object ):
self.paneholder.pack_start( ImageBox, False, False, 0 )
self.paneholder.pack_start( PluginPane, False, False, 0 )
self.tooltips.disable()
#print u"Loading", (time.time() - start), "s"
self.tooltipsEnable( False )
# A little hacky but works
def getDefaultStyle( self ):
# A little bit hacky but works.
def getDefaultColors( self ):
widget = Gtk.EventBox()
widget.show()
return Gtk.rc_get_style(widget)
context = widget.get_style_context()
context.set_state( Gtk.StateFlags.NORMAL )
context.add_class( Gtk.STYLE_CLASS_DEFAULT )
context.add_class( Gtk.STYLE_CLASS_BACKGROUND )
fgColor = context.get_color( context.get_state() )
bgColor = context.get_background_color( context.get_state() )
return { "fg": fgColor, "bg": bgColor }
def loadTheme( self ):
defaultStyle = self.getDefaultStyle()
self.SetPaneColors( self.panesToColor, defaultStyle )
self.SetupMintMenuBorder( defaultStyle )
colors = self.getDefaultColors()
self.SetPaneColors( self.panesToColor, colors["bg"] )
self.SetHeadingStyle( self.headingsToColor )
def SetPaneColors( self, items, defaultStyle = None ):
if self.usecustomcolor:
for item in items:
item.modify_bg( Gtk.StateType.NORMAL, Gdk.color_parse( self.customcolor ) )
# TODO: Changing background color isn't working for pixmaps! The following does not work:
item.get_style().bg_pixmap[Gtk.StateType.NORMAL] = None
elif defaultStyle is not None:
for item in items:
item.modify_bg( Gtk.StateType.NORMAL, defaultStyle.lookup_color('bg_color')[1] )
item.get_style().bg_pixmap[Gtk.StateType.NORMAL] = defaultStyle.bg_pixmap[Gtk.StateType.NORMAL]
def SetPaneColors( self, items, color = None ):
for item in items:
context = item.get_style_context()
if self.usecustomcolor:
bgColor = Gdk.RGBA()
bgColor.parse( self.customcolor )
item.override_background_color( context.get_state(), bgColor )
elif color is not None:
item.override_background_color( context.get_state(), color )
def SetHeadingStyle( self, items ):
if self.usecustomcolor:
@ -362,8 +347,13 @@ class MainWindow( object ):
markup = '<span size="12000" weight="bold" color="%s">%s</span>' % (color, text)
item.set_markup( markup )
def setTooltip( self, widget, tip, tipPrivate = None ):
self.tooltips.set_tip( widget, tip, tipPrivate )
def tooltipsEnable( self, enable = True ):
for widget in self.tooltipsWidgets:
widget.set_has_tooltip( enable )
def setTooltip( self, widget, tip ):
self.tooltipsWidgets.append( widget )
widget.set_tooltip_text( tip )
def RegenPlugins( self, *args, **kargs ):
#print
@ -407,7 +397,7 @@ class MainWindow( object ):
self.firstTime = False
self.window.set_opacity(1.0)
self.window.window.focus( Gdk.CURRENT_TIME )
self.window.get_window().focus( Gdk.CURRENT_TIME )
for plugin in self.plugins.values():
if hasattr( plugin, "onShowMenu" ):
@ -447,7 +437,14 @@ class MenuWin( object ):
self.applet = applet
self.detect_desktop_environment()
self.settings = Gio.Settings.new("com.linuxmint.mintmenu")
self.keybinder = keybinding.GlobalKeyBinding()
self.keybinder = keybinding.GlobalKeyBinding()
self.loadSettings()
self.createPanelButton()
self.mate_settings = Gio.Settings.new("org.mate.interface")
self.mate_settings.connect( "changed::gtk-theme", self.changeTheme )
self.settings.connect( "changed::applet-text", self.reloadSettings )
self.settings.connect( "changed::theme-name", self.changeTheme )
self.settings.connect( "changed::hot-key", self.reloadSettings )
@ -455,12 +452,6 @@ class MenuWin( object ):
self.settings.connect( "changed::hide-applet-icon", self.reloadSettings )
self.settings.connect( "changed::applet-icon-size", self.reloadSettings )
self.settings.connect( "changed::hot-key", self.hotkeyChanged )
self.loadSettings()
self.mate_settings = Gio.Settings.new("org.mate.interface")
self.mate_settings.connect( "changed::gtk-theme", self.changeTheme )
self.createPanelButton()
self.applet.set_flags( MatePanelApplet.AppletFlags.EXPAND_MINOR )
self.applet.connect( "button-press-event", self.showMenu )
@ -488,20 +479,20 @@ class MenuWin( object ):
self.pointerMonitor.connect("activate", self.onPointerOutside)
def onWindowMap( self, *args ):
self.applet.set_state( Gtk.StateType.SELECTED )
self.keybinder.set_focus_window( self.mainwin.window.window )
#self.pointerMonitor.grabPointer()
self.applet.get_style_context().set_state( Gtk.StateFlags.SELECTED )
self.button_box.get_style_context().set_state( Gtk.StateFlags.SELECTED )
self.keybinder.set_focus_window( self.mainwin.window.get_window() )
return False
def onWindowUnmap( self, *args ):
self.applet.set_state( Gtk.StateType.NORMAL )
self.applet.get_style_context().set_state( Gtk.StateFlags.NORMAL )
self.button_box.get_style_context().set_state( Gtk.StateFlags.NORMAL )
self.keybinder.set_focus_window()
#self.pointerMonitor.ungrabPointer()
return False
def onRealize( self, *args):
self.pointerMonitor.addWindowToMonitor( self.mainwin.window.window )
self.pointerMonitor.addWindowToMonitor( self.applet.window )
self.pointerMonitor.addWindowToMonitor( self.mainwin.window.get_window() )
self.pointerMonitor.addWindowToMonitor( self.applet.get_window() )
self.pointerMonitor.start()
return False
@ -518,8 +509,8 @@ class MenuWin( object ):
def leave_notify(self, applet, event):
# Hack for mate-panel-test-applets focus issue (this can be commented)
if event.state & Gdk.ModifierType.BUTTON1_MASK and applet.state & Gtk.StateType.SELECTED:
if event.x >= 0 and event.y >= 0 and event.x < applet.window.get_width() and event.y < applet.window.get_height():
if event.state & Gdk.ModifierType.BUTTON1_MASK and applet.get_style_context().get_state() & Gtk.StateFlags.SELECTED:
if event.x >= 0 and event.y >= 0 and event.x < applet.get_window().get_width() and event.y < applet.get_window().get_height():
self.mainwin.stopHiding()
self.do_image(self.buttonIcon, False)
@ -546,19 +537,19 @@ class MenuWin( object ):
self.systemlabel.set_tooltip_text(tooltip)
self.button_icon.set_tooltip_text(tooltip)
if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN:
self.button_box = Gtk.HBox()
self.button_box = Gtk.Box( orientation=Gtk.Orientation.HORIZONTAL )
self.button_box.pack_start( self.button_icon, False, False, 0 )
self.button_box.pack_start( self.systemlabel, False, False, 0 )
self.button_icon.set_padding( 5, 0 )
# if we have a vertical panel
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.LEFT:
self.button_box = Gtk.VBox()
self.button_box = Gtk.Box( orientation=Gtk.Orientation.VERTICAL )
self.systemlabel.set_angle( 270 )
self.button_box.pack_start( self.button_icon , False, False, 0)
self.button_box.pack_start( self.systemlabel , False, False, 0)
self.button_icon.set_padding( 0, 5 )
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.RIGHT:
self.button_box = Gtk.VBox()
self.button_box = Gtk.Box( orientation=Gtk.Orientation.VERTICAL )
self.systemlabel.set_angle( 90 )
self.button_box.pack_start( self.systemlabel , False, False, 0)
self.button_box.pack_start( self.button_icon , False, False, 0)
@ -569,6 +560,8 @@ class MenuWin( object ):
self.button_box.show_all()
self.sizeButton()
self.button_box.get_style_context().add_class('mintmenu')
self.applet.add( self.button_box )
self.applet.set_background_widget( self.applet )
@ -578,6 +571,8 @@ class MenuWin( object ):
self.buttonText = self.settings.get_string("applet-text")
self.theme_name = self.settings.get_string( "theme-name" )
self.hotkeyText = self.settings.get_string( "hot-key" )
if not os.path.exists(self.settings.get_string("applet-icon")):
self.settings.reset("applet-icon")
self.buttonIcon = self.settings.get_string( "applet-icon" )
self.iconSize = self.settings.get_int( "applet-icon-size" )
@ -600,17 +595,17 @@ class MenuWin( object ):
def changeOrientation( self, *args, **kargs ):
if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN:
tmpbox = Gtk.HBox()
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.VBox()
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.VBox()
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 )
@ -662,10 +657,8 @@ class MenuWin( object ):
self.button_icon.show()
# This code calculates width and height for the button_box
# and takes the orientation in account
sl_req = Gtk.Requisition()
bi_req = Gtk.Requisition()
self.button_icon.size_request(bi_req)
self.systemlabel.size_request(sl_req)
bi_req = self.button_icon.size_request()
sl_req = self.systemlabel.size_request()
if self.applet.get_orient() == MatePanelApplet.AppletOrient.UP or self.applet.get_orient() == MatePanelApplet.AppletOrient.DOWN:
if self.hideIcon:
self.applet.set_size_request( sl_req.width + 2, bi_req.height )
@ -725,7 +718,7 @@ class MenuWin( object ):
self.mainwin.hide()
def toggleMenu( self ):
if self.applet.state & Gtk.StateType.SELECTED:
if self.applet.get_style_context().get_state() & Gtk.StateFlags.SELECTED:
self.mainwin.hide()
else:
self.positionMenu()
@ -740,13 +733,14 @@ class MenuWin( object ):
ourWidth = self.mainwin.window.get_size()[0]
ourHeight = self.mainwin.window.get_size()[1] + self.mainwin.offset
x = c_int()
y = c_int()
# Get the dimensions/position of the widgetToAlignWith
gdk.gdk_window_get_origin.argtypes = [c_void_p, c_void_p, c_void_p]
gdk.gdk_window_get_origin(hash(self.applet.window), byref(x), byref(y))
entryX = x.value
entryY = y.value
try:
entryX = self.applet.get_window().get_origin().x
entryY = self.applet.get_window().get_origin().y
except:
# In Betsy get_origin returns an unamed tuple so the code above fails
entryX = self.applet.get_window().get_origin()[1]
entryY = self.applet.get_window().get_origin()[2]
entryWidth, entryHeight = self.applet.get_allocation().width, self.applet.get_allocation().height
entryHeight = entryHeight + self.mainwin.offset
@ -785,17 +779,17 @@ class MenuWin( object ):
# this callback is to create a context menu
def create_menu(self):
action_group = Gtk.ActionGroup("context-menu")
action = Gtk.Action("MintMenuPrefs", _("Preferences"), None, "gtk-preferences")
action_group = Gtk.ActionGroup(name="context-menu")
action = Gtk.Action(name="MintMenuPrefs", label=_("Preferences"), tooltip=None, stock_id="gtk-preferences")
action.connect("activate", self.showPreferences)
action_group.add_action(action)
action = Gtk.Action("MintMenuEdit", _("Edit menu"), None, "gtk-edit")
action = Gtk.Action(name="MintMenuEdit", label=_("Edit menu"), tooltip=None, stock_id="gtk-edit")
action.connect("activate", self.showMenuEditor)
action_group.add_action(action)
action = Gtk.Action("MintMenuReload", _("Reload plugins"), None, "gtk-refresh")
action = Gtk.Action(name="MintMenuReload", label=_("Reload plugins"), tooltip=None, stock_id="gtk-refresh")
action.connect("activate", self.mainwin.RegenPlugins)
action_group.add_action(action)
action = Gtk.Action("MintMenuAbout", _("About"), None, "gtk-about")
action = Gtk.Action(name="MintMenuAbout", label=_("About"), tooltip=None, stock_id="gtk-about")
action.connect("activate", self.showAboutDialog)
action_group.add_action(action)
action_group.set_translation_domain ("mintmenu")

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
import sys
import gi
gi.require_version("Gtk", "2.0")
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GdkPixbuf
import keybinding
@ -58,12 +58,9 @@ class mintMenuConfig( object ):
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("label11").set_text(_("Border width:"))
self.builder.get_object("label25").set_text(_("pixels"))
self.builder.get_object("buttonTextLabel").set_text(_("Button text:"))
self.builder.get_object("label1").set_text(_("Options"))
self.builder.get_object("label23").set_text(_("Applications"))
self.builder.get_object("applicationsLabel").set_text(_("Applications"))
self.builder.get_object("colorsLabel").set_text(_("Theme"))
self.builder.get_object("favLabel").set_text(_("Favorites"))
@ -72,7 +69,6 @@ class mintMenuConfig( object ):
self.builder.get_object("backgroundColorLabel").set_text(_("Background:"))
self.builder.get_object("headingColorLabel").set_text(_("Headings:"))
self.builder.get_object("borderColorLabel").set_text(_("Borders:"))
self.builder.get_object("themeLabel").set_text(_("Theme:"))
#self.builder.get_object("applicationsLabel").set_text(_("Applications"))
@ -131,20 +127,17 @@ class mintMenuConfig( object ):
self.placesIconSize = self.builder.get_object( "placesIconSize" )
self.systemIconSize = self.builder.get_object( "systemIconSize" )
self.favCols = self.builder.get_object( "numFavCols" )
self.borderWidth = self.builder.get_object( "borderWidth" )
self.useCustomColors = self.builder.get_object( "useCustomColors" )
self.backgroundColor = self.builder.get_object( "backgroundColor" )
self.borderColor = self.builder.get_object( "borderColor" )
self.headingColor = self.builder.get_object( "headingColor" )
self.backgroundColorLabel = self.builder.get_object( "backgroundColorLabel" )
self.borderColorLabel = self.builder.get_object( "borderColorLabel" )
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:") )
table = self.builder.get_object( "main_table" )
table.attach(self.hotkeyWidget, 0, 2, 2, 3, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL, 0, 0)
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()
@ -215,11 +208,9 @@ class mintMenuConfig( object ):
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, "int", "border-width", self.borderWidth, "value-changed", self.borderWidth.set_value, self.borderWidth.get_value_as_int )
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_color, self.getBackgroundColor )
self.bindGSettingsValueToWidget( self.settings, "color", "custom-heading-color", self.headingColor, "color-set", self.headingColor.set_color, self.getHeadingColor )
self.bindGSettingsValueToWidget( self.settings, "color", "custom-border-color", self.borderColor, "color-set", self.borderColor.set_color, self.getBorderColor )
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 )
@ -355,7 +346,9 @@ class mintMenuConfig( object ):
def bindGSettingsValueToWidget( self, settings, setting_type, key, widget, changeEvent, setter, getter ):
settings.notifyAdd( key, self.callSetter, args = [ setting_type, setter ] )
if setting_type == "color":
setter( Gdk.color_parse( settings.get( setting_type, key ) ) )
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 ) )
@ -368,7 +361,9 @@ class mintMenuConfig( object ):
elif args[0] == "int":
args[1]( settings.get_int(key) )
elif args[0] == "color":
args[1]( Gdk.color_parse( settings.get_string(key) ) )
color = Gdk.RGBA()
color.parse( settings.get_string(key) )
args[1]( color )
def callGetter( self, settings, setting_type, key, getter ):
if (setting_type == "int"):
@ -378,38 +373,20 @@ class mintMenuConfig( object ):
def toggleUseCustomColors( self, widget ):
self.backgroundColor.set_sensitive( widget.get_active() )
self.borderColor.set_sensitive( widget.get_active() )
self.headingColor.set_sensitive( widget.get_active() )
self.backgroundColorLabel.set_sensitive( widget.get_active() )
self.borderColorLabel.set_sensitive( widget.get_active() )
self.headingColorLabel.set_sensitive( widget.get_active() )
def getBackgroundColor( self ):
try:
color = self.backgroundColor.get_color()
except:
color = Gdk.Color(0, 0, 0)
self.backgroundColor.get_color(color)
return self.gdkColorToString( color )
def getBorderColor( self ):
try:
color = self.borderColor.get_color()
except:
color = Gdk.Color(0, 0, 0)
self.borderColor.get_color(color)
return self.gdkColorToString( color )
color = self.backgroundColor.get_rgba()
return self.gdkRGBAToString( color )
def getHeadingColor( self ):
try:
color = self.headingColor.get_color()
except:
color = Gdk.Color(0, 0, 0)
self.headingColor.get_color(color)
return self.gdkColorToString( color )
color = self.headingColor.get_rgba()
return self.gdkRGBAToString( color )
def gdkColorToString( self, gdkColor ):
return "#%.2X%.2X%.2X" % ( gdkColor.red / 256, gdkColor.green / 256, gdkColor.blue / 256 )
def gdkRGBAToString( self, gdkRGBA ):
return "#%.2X%.2X%.2X" % ( gdkRGBA.red * 256, gdkRGBA.green * 256, gdkRGBA.blue * 256 )
def moveUp( self, upButton ):

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 2.6 -->
<!-- interface-naming-policy toplevel-contextual -->
<requires lib="gtk+" version="3.0"/>
<object class="GtkWindow" id="mainWindow">
<property name="width_request">169</property>
<property name="height_request">227</property>
@ -14,25 +13,26 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkVBox" id="vbox4">
<object class="GtkBox" id="vbox4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkNotebook" id="notebook2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="show_tabs">False</property>
<property name="show_border">False</property>
<property name="tab_border">14</property>
<child>
<object class="GtkVBox" id="vbox5">
<object class="GtkBox" id="vbox5">
<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="border_width">3</property>
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<child>
<object class="GtkHBox" id="hbox8">
<object class="GtkBox" id="hbox8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="homogeneous">True</property>
@ -40,11 +40,11 @@
<object class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</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="xalign">0</property>
</object>
<packing>
<property name="expand">True</property>
@ -58,48 +58,40 @@
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="relief">none</property>
<child>
<object class="GtkAlignment" id="alignment3">
<object class="GtkBox" id="hbox10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="xscale">0</property>
<property name="yscale">0</property>
<property name="right_padding">10</property>
<property name="halign">end</property>
<property name="margin_right">10</property>
<property name="spacing">2</property>
<child>
<object class="GtkHBox" id="hbox10">
<object class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
<child>
<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="use_underline">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xpad">5</property>
<property name="stock">gtk-go-forward</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<property name="label" translatable="yes">All _Applications</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image4">
<property name="visible">True</property>
<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>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
@ -127,10 +119,12 @@
<property name="resize_mode">queue</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkTable" id="favoritesBox">
<object class="GtkGrid" id="favoritesBox">
<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="hexpand">True</property>
<property name="vexpand">True</property>
<property name="column_homogeneous">True</property>
<child>
<placeholder/>
</child>
@ -149,13 +143,14 @@
<placeholder/>
</child>
<child>
<object class="GtkVBox" id="vbox1">
<object class="GtkBox" id="vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">3</property>
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<child>
<object class="GtkHBox" id="hbox3">
<object class="GtkBox" id="hbox3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="homogeneous">True</property>
@ -163,11 +158,11 @@
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</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="xalign">0</property>
</object>
<packing>
<property name="expand">True</property>
@ -181,48 +176,40 @@
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="relief">none</property>
<child>
<object class="GtkAlignment" id="alignment2">
<object class="GtkBox" id="hbox4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="xscale">0</property>
<property name="yscale">0</property>
<property name="right_padding">10</property>
<property name="halign">end</property>
<property name="margin_right">10</property>
<property name="spacing">2</property>
<child>
<object class="GtkHBox" id="hbox4">
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
<child>
<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="use_underline">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xpad">5</property>
<property name="stock">gtk-go-forward</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<property name="label" translatable="yes">_Favorites</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image3">
<property name="visible">True</property>
<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>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
@ -243,7 +230,7 @@
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox5">
<object class="GtkBox" id="hbox5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
@ -251,16 +238,18 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">never</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkViewport" id="viewport1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkVBox" id="categoriesBox">
<object class="GtkBox" id="categoriesBox">
<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>
</object>
</child>
</object>
@ -273,10 +262,11 @@
</packing>
</child>
<child>
<object class="GtkVSeparator" id="vseparator1">
<object class="GtkSeparator" id="vseparator1">
<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="orientation">vertical</property>
</object>
<packing>
<property name="expand">False</property>
@ -291,17 +281,18 @@
<property name="can_focus">False</property>
<property name="can_default">True</property>
<property name="hscrollbar_policy">never</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkViewport" id="viewport3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkVBox" id="applicationsBox">
<object class="GtkBox" id="applicationsBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="vexpand">True</property>
<property name="border_width">6</property>
<property name="orientation">vertical</property>
</object>
</child>
</object>
@ -336,7 +327,7 @@
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox9">
<object class="GtkBox" id="hbox9">
<property name="width_request">227</property>
<property name="height_request">30</property>
<property name="visible">True</property>
@ -366,8 +357,6 @@
<property name="activates_default">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<signal name="changed" handler="on_entry1_changed" swapped="no"/>
</object>
<packing>
@ -381,12 +370,11 @@
<property name="width_request">28</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="relief">none</property>
<property name="focus_on_click">False</property>
<signal name="clicked" handler="on_button17_clicked" swapped="no"/>
<child>
<object class="GtkImage" id="image1">
@ -395,7 +383,7 @@
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="stock">gtk-find</property>
<property name="icon-size">1</property>
<property name="icon_size">1</property>
</object>
</child>
</object>

View File

@ -1,7 +1,7 @@
#!/usr/bin/python2
import gi
gi.require_version("Gtk", "2.0")
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Pango, Gdk, Gio, GLib
@ -13,16 +13,12 @@ import threading
import commands
import subprocess
import filecmp
import ctypes
from ctypes import *
from easybuttons import *
from execute import Execute
from easygsettings import EasyGSettings
from easyfiles import *
import recentHelper as RecentHelper
gtk = CDLL("libgtk-x11-2.0.so.0")
import matemenu
from user import home
@ -123,10 +119,11 @@ class SuggestionButton ( Gtk.Button ):
self.set_size_request( -1, -1 )
Align1 = Gtk.Alignment()
Align1.set( 0, 0.5, 1.0, 0 )
HBox1 = Gtk.HBox()
labelBox = Gtk.VBox( False, 2 )
HBox1 = Gtk.Box( orientation=Gtk.Orientation.HORIZONTAL )
labelBox = Gtk.Box( orientation=Gtk.Orientation.VERTICAL, spacing=2 )
self.image = Gtk.Image()
self.image.set_from_stock( self.iconName, iconSize )
self.image.set_from_icon_name( self.iconName, Gtk.IconSize.INVALID )
self.image.set_pixel_size( iconSize )
self.image.show()
HBox1.pack_start( self.image, False, False, 5 )
self.label = Gtk.Label()
@ -149,22 +146,14 @@ class SuggestionButton ( Gtk.Button ):
self.label.set_markup(text)
def set_icon_size (self, size):
self.image.set_from_stock( self.iconName, size )
class TargetEntry(Structure):
_fields_ = [("target", c_char_p),
("flags", c_int),
("info", c_int)]
self.image.set_pixel_size( size )
class pluginclass( object ):
TARGET_TYPE_TEXT = 80
array2 = TargetEntry * 2
toButton = array2( ("text/uri-list", 0, TARGET_TYPE_TEXT), ("text/uri-list", 0, TARGET_TYPE_TEXT) )
toButton = ( Gtk.TargetEntry.new( "text/uri-list", 0, TARGET_TYPE_TEXT ), Gtk.TargetEntry.new( "text/uri-list", 0, TARGET_TYPE_TEXT ) )
TARGET_TYPE_FAV = 81
array = TargetEntry * 3
toFav = array( ( "FAVORITES", Gtk.TargetFlags.SAME_APP, 81 ), ( "text/plain", 0, 100 ), ( "text/uri-list", 0, 101 ) )
array1 = TargetEntry * 2
fromFav = array1( ("FAVORITES", Gtk.TargetFlags.SAME_APP, 81), ("FAVORITES", Gtk.TargetFlags.SAME_APP, 81) )
toFav = ( Gtk.TargetEntry.new( "FAVORITES", Gtk.TargetFlags.SAME_APP, 81 ), Gtk.TargetEntry.new( "text/plain", 0, 100 ), Gtk.TargetEntry.new( "text/uri-list", 0, 101 ) )
fromFav = ( Gtk.TargetEntry.new( "FAVORITES", Gtk.TargetFlags.SAME_APP, 81 ), Gtk.TargetEntry.new( "FAVORITES", Gtk.TargetFlags.SAME_APP, 81 ) )
@print_timing
def __init__( self, mintMenuWin, toggleButton, de ):
@ -229,10 +218,9 @@ class pluginclass( object ):
self.favoritesBox.connect( "drag-data-received", self.ReceiveCallback )
gtk.gtk_drag_dest_set.argtypes = [c_void_p, c_ushort, c_void_p, c_int, c_ushort]
gtk.gtk_drag_dest_set ( hash(self.favoritesBox), Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, self.toButton, 2, Gdk.DragAction.COPY )
self.favoritesBox.drag_dest_set ( Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, self.toButton, Gdk.DragAction.COPY )
self.showFavoritesButton.connect( "drag-data-received", self.ReceiveCallback )
gtk.gtk_drag_dest_set ( hash(self.showFavoritesButton), Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, self.toButton, 2, Gdk.DragAction.COPY )
self.showFavoritesButton.drag_dest_set ( Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, self.toButton, Gdk.DragAction.COPY )
# self.searchButton.connect( "button_release_event", self.SearchWithButton )
try:
@ -557,8 +545,7 @@ class pluginclass( object ):
# of the existing text, that's the most likely candidate anyhow
self.searchEntry.grab_focus()
if self.rememberFilter or not clear:
gtk.gtk_editable_set_position.argtypes = [c_void_p, c_int]
gtk.gtk_editable_set_position(hash(self.searchEntry), -1)
self.searchEntry.set_position(-1)
else:
self.searchEntry.set_text("")
@ -592,14 +579,14 @@ class pluginclass( object ):
text = "<b>%s</b>" % text
if self.enableInternetSearch:
suggestionButton = SuggestionButton(Gtk.STOCK_ADD, self.iconSize, "")
suggestionButton = SuggestionButton("list-add", self.iconSize, "")
suggestionButton.connect("clicked", self.search_ddg)
suggestionButton.set_text(_("Search DuckDuckGo for %s") % text)
suggestionButton.set_image("/usr/lib/linuxmint/mintMenu/search_engines/ddg.png")
self.applicationsBox.add(suggestionButton)
self.suggestions.append(suggestionButton)
suggestionButton = SuggestionButton(Gtk.STOCK_ADD, self.iconSize, "")
suggestionButton = SuggestionButton("list-add", self.iconSize, "")
suggestionButton.connect("clicked", self.search_wikipedia)
suggestionButton.set_text(_("Search Wikipedia for %s") % text)
suggestionButton.set_image("/usr/lib/linuxmint/mintMenu/search_engines/wikipedia.ico")
@ -607,7 +594,7 @@ class pluginclass( object ):
self.suggestions.append(suggestionButton)
separator = Gtk.EventBox()
separator.add(Gtk.HSeparator())
separator.add(Gtk.Separator( orientation=Gtk.Orientation.HORIZONTAL ))
separator.set_visible_window(False)
separator.set_size_request(-1, 20)
separator.type = "separator"
@ -615,21 +602,21 @@ class pluginclass( object ):
self.applicationsBox.add(separator)
self.suggestions.append(separator)
suggestionButton = SuggestionButton(Gtk.STOCK_ADD, self.iconSize, "")
suggestionButton = SuggestionButton("list-add", self.iconSize, "")
suggestionButton.connect("clicked", self.search_dictionary)
suggestionButton.set_text(_("Lookup %s in Dictionary") % text)
suggestionButton.set_image("/usr/lib/linuxmint/mintMenu/search_engines/dictionary.png")
self.applicationsBox.add(suggestionButton)
self.suggestions.append(suggestionButton)
suggestionButton = SuggestionButton(Gtk.STOCK_FIND, self.iconSize, "")
suggestionButton = SuggestionButton("edit-find", self.iconSize, "")
suggestionButton.connect("clicked", self.Search)
suggestionButton.set_text(_("Search Computer for %s") % text)
self.applicationsBox.add(suggestionButton)
self.suggestions.append(suggestionButton)
#self.last_separator = gtk.EventBox()
#self.last_separator.add(gtk.HSeparator())
#self.last_separator = Gtk.EventBox()
#self.last_separator.add(Gtk.Separator( orientation=Gtk.Orientation.HORIZONTAL ))
#self.last_separator.set_size_request(-1, 20)
#self.last_separator.type = "separator"
#self.mintMenuWin.SetPaneColors( [ self.last_separator ] )
@ -861,8 +848,7 @@ class pluginclass( object ):
if event.string.strip() != "" or event.keyval == Gdk.KEY_BackSpace:
self.searchEntry.grab_focus()
gtk.gtk_editable_set_position.argtypes = [c_void_p, c_int]
gtk.gtk_editable_set_position(hash(self.searchEntry), -1)
self.searchEntry.set_position( -1 )
self.searchEntry.event( event )
return True
@ -876,9 +862,9 @@ class pluginclass( object ):
return False
def favPopup( self, widget, ev ):
if ev.button == 3:
if ev.y > widget.get_allocation().height / 2:
def favPopup( self, widget, event ):
if event.button == 3:
if event.y > widget.get_allocation().height / 2:
insertBefore = False
else:
insertBefore = True
@ -932,8 +918,8 @@ class pluginclass( object ):
mTree.show_all()
self.mintMenuWin.stopHiding()
gtk.gtk_menu_popup.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p, c_uint, c_uint]
gtk.gtk_menu_popup(hash(mTree), None, None, None, None, ev.button, ev.time)
mTree.attach_to_widget(widget, None)
mTree.popup(None, None, None, None, event.button, event.time)
else:
mTree = Gtk.Menu()
mTree.set_events(Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.POINTER_MOTION_HINT_MASK |
@ -952,8 +938,8 @@ class pluginclass( object ):
insertSpaceMenuItem.connect( "activate", self.onFavoritesInsertSpace, widget, insertBefore )
insertSeparatorMenuItem.connect( "activate", self.onFavoritesInsertSeparator, widget, insertBefore )
self.mintMenuWin.stopHiding()
gtk.gtk_menu_popup.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p, c_uint, c_uint]
gtk.gtk_menu_popup(hash(mTree), None, None, None, None, ev.button, ev.time)
mTree.attach_to_widget(widget, None)
mTree.popup(None, None, None, None, event.button, event.time)
def menuPopup( self, widget, event ):
if event.button == 3:
@ -1015,8 +1001,8 @@ class pluginclass( object ):
startupMenuItem.connect( "toggled", self.onAddToStartup, widget )
self.mintMenuWin.stopHiding()
gtk.gtk_menu_popup.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p, c_uint, c_uint]
gtk.gtk_menu_popup(hash(mTree), None, None, None, None, event.button, event.time)
mTree.attach_to_widget(widget, None)
mTree.popup(None, None, None, None, event.button, event.time)
def searchPopup( self, widget=None, event=None ):
@ -1050,7 +1036,8 @@ class pluginclass( object ):
menuItem = Gtk.ImageMenuItem(_("Search Computer"))
img = Gtk.Image()
img.set_from_stock(Gtk.STOCK_FIND, self.iconSize)
img.set_from_icon_name("edit-find", Gtk.IconSize.INVALID)
img.set_pixel_size( self.iconSize )
menuItem.set_image(img)
menuItem.connect("activate", self.Search)
menu.append(menuItem)
@ -1096,10 +1083,9 @@ class pluginclass( object ):
menu.show_all()
self.mintMenuWin.stopHiding()
gtk.gtk_menu_popup.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p, c_uint, c_uint]
gtk.gtk_menu_popup(hash(menu), None, None, None, None, event.button, event.time)
menu.attach_to_widget(self.searchButton, None)
menu.popup(None, None, None, None, event.button, event.time)
#menu.attach_to_widget(self.searchButton, None)
#menu.reposition()
#menu.reposition()
#self.mintMenuWin.grab()
@ -1308,11 +1294,11 @@ class pluginclass( object ):
# Scroll button into view
def scrollItemIntoView( self, widget, event = None ):
viewport = widget.parent
viewport = widget.get_parent()
while not isinstance( viewport, Gtk.Viewport ):
if not viewport.parent:
if not viewport.get_parent():
return
viewport = viewport.parent
viewport = viewport.get_parent()
aloc = widget.get_allocation()
viewport.get_vadjustment().clamp_page(aloc.y, aloc.y + aloc.height)
@ -1328,8 +1314,9 @@ class pluginclass( object ):
return space
def favoritesBuildSeparator( self ):
separator = Gtk.HSeparator()
separator.set_size_request( -1, 20 )
separator = Gtk.Separator( orientation=Gtk.Orientation.HORIZONTAL )
separator.set_margin_top( 5 )
separator.set_margin_bottom( 5 )
separator.type = "separator"
separator.show_all()
@ -1423,35 +1410,16 @@ class pluginclass( object ):
favButton.position = position
self.favorites.append( favButton )
self.favoritesPositionOnGrid( favButton )
favButton.connect( "drag-data-received", self.onFavButtonDragReorder )
gtk.gtk_drag_dest_set.argtypes = [c_void_p, c_ushort, c_void_p, c_int, c_ushort]
gtk.gtk_drag_dest_set( hash(favButton), Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, self.fromFav, 2, Gdk.DragAction.COPY )
favButton.connect( "drag-data-get", self.onFavButtonDragReorderGet )
gtk.gtk_drag_source_set.argtypes = [c_void_p, c_ushort, c_void_p, c_int, c_ushort]
gtk.gtk_drag_source_set( hash(favButton), Gdk.ModifierType.BUTTON1_MASK, self.toFav, 3, Gdk.DragAction.COPY )
favButton.drag_source_set (Gdk.ModifierType.BUTTON1_MASK, self.toFav, Gdk.DragAction.COPY)
favButton.drag_dest_set(Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, self.toFav, Gdk.DragAction.COPY)
favButton.connect("drag-data-get", self.on_drag_data_get)
favButton.connect("drag-data-received", self.on_drag_data_received)
position += 1
self.favoritesSave()
except Exception, e:
print e
def favoritesGetNumRows( self ):
rows = 0
col = 0
for fav in self.favorites:
if ( fav.type == "separator" or fav.type == "space" ) and col != 0:
rows += 1
col = 0
col += 1
if fav.type == "separator" or fav.type == "space":
rows += 1
col = 0
if col >= self.favCols:
rows += 1
col = 0
return rows
def favoritesPositionOnGrid( self, favorite ):
row = 0
col = 0
@ -1471,9 +1439,9 @@ class pluginclass( object ):
col = 0
if favorite.type == "separator" or favorite.type == "space":
self.favoritesBox.attach( favorite, col, col + self.favCols, row, row + 1, yoptions = 0 )
self.favoritesBox.attach( favorite, col, row, self.favCols, 1 )
else:
self.favoritesBox.attach( favorite, col, col + 1, row, row + 1, yoptions = 0 )
self.favoritesBox.attach( favorite, col, row, 1, 1 )
def favoritesReorder( self, oldposition, newposition ):
if oldposition == newposition:
@ -1497,7 +1465,6 @@ class pluginclass( object ):
self.favoritesPositionOnGrid( fav )
self.favoritesSave()
self.favoritesBox.resize( self.favoritesGetNumRows(), self.favCols )
def favoritesAdd( self, favButton, position = -1 ):
if favButton:
@ -1505,12 +1472,10 @@ class pluginclass( object ):
self.favorites.append( favButton )
self.favoritesPositionOnGrid( favButton )
favButton.connect( "drag-data-received", self.onFavButtonDragReorder )
gtk.gtk_drag_dest_set.argtypes = [c_void_p, c_ushort, c_void_p, c_int, c_ushort]
gtk.gtk_drag_dest_set( hash(favButton), Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, self.toFav, 3, Gdk.DragAction.COPY )
favButton.connect( "drag-data-get", self.onFavButtonDragReorderGet )
gtk.gtk_drag_source_set.argtypes = [c_void_p, c_ushort, c_void_p, c_int, c_ushort]
gtk.gtk_drag_source_set ( hash(favButton), Gdk.ModifierType.BUTTON1_MASK, self.toFav, 3, Gdk.DragAction.COPY )
favButton.connect("drag-data-received", self.on_drag_data_received)
favButton.drag_dest_set(Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, self.toFav, Gdk.DragAction.COPY)
favButton.connect("drag-data-get", self.on_drag_data_get)
favButton.drag_source_set (Gdk.ModifierType.BUTTON1_MASK, self.toFav, Gdk.DragAction.COPY)
if position >= 0:
self.favoritesReorder( favButton.position, position )
@ -1527,7 +1492,6 @@ class pluginclass( object ):
self.favoritesBox.remove( self.favorites[ i ] )
self.favoritesPositionOnGrid( self.favorites[ i ] )
self.favoritesSave()
self.favoritesBox.resize( self.favoritesGetNumRows(), self.favCols )
def favoritesRemoveLocation( self, location ):
for fav in self.favorites:
@ -1547,7 +1511,7 @@ class pluginclass( object ):
appListFile.close( )
except Exception, e:
msgDlg = Gtk.MessageDialog( None, gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR, Gtk.ButtonsType.OK, _("Couldn't save favorites. Check if you have write access to ~/.linuxmint/mintMenu")+"\n(" + e.__str__() + ")" )
msgDlg = Gtk.MessageDialog( None, Gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR, Gtk.ButtonsType.OK, _("Couldn't save favorites. Check if you have write access to ~/.linuxmint/mintMenu")+"\n(" + e.__str__() + ")" )
msgDlg.run();
msgDlg.destroy();
@ -1558,15 +1522,14 @@ class pluginclass( object ):
return False
def onFavButtonDragReorderGet( self, widget, context, selection, targetType, eventTime ):
if targetType == self.TARGET_TYPE_FAV:
def on_drag_data_get(self, widget, context, selection, info, time):
if info == self.TARGET_TYPE_FAV:
self.drag_origin = widget.position
selection.set( selection.target, 8, str(widget.position))
selection.set(selection.get_target(), 8, str(widget.position))
def onFavButtonDragReorder( self, widget, context, x, y, selection, targetType, time ):
if targetType == self.TARGET_TYPE_FAV:
#self.favoritesReorder( int(selection.data), widget.position )
self.favoritesReorder( self.drag_origin, widget.position )
def on_drag_data_received( self, widget, context, x, y, selection, info, time):
if info == self.TARGET_TYPE_FAV:
self.favoritesReorder( int(selection.get_data()), widget.position )
def on_icon_theme_changed(self, theme):
print "on_icon_theme_changed"
@ -1740,7 +1703,7 @@ class pluginclass( object ):
for item in sortedApplicationList:
launcherName = item[0]
button = item[1]
self.applicationsBox.pack_start( button, False, False, 0 )
self.applicationsBox.add( button )
if launcherName in launcherNames:
button.hide()
else:
@ -1758,7 +1721,7 @@ class pluginclass( object ):
# Build a list of all categories in the menu ( [ { "name", "icon", tooltip" } ]
def buildCategoryList( self ):
newCategoryList = [ { "name": _("All"), "icon": "stock_select-all", "tooltip": _("Show all applications"), "filter":"", "index": 0 } ]
newCategoryList = [ { "name": _("All"), "icon": "edit-select-all", "tooltip": _("Show all applications"), "filter":"", "index": 0 } ]
num = 1

View File

@ -1,8 +1,11 @@
#!/usr/bin/python2
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
@ -10,10 +13,6 @@ from execute import *
import xdg.DesktopEntry
import xdg.Menu
from filemonitor import monitor as filemonitor
import ctypes
from ctypes import *
gtk = CDLL("libgtk-x11-2.0.so.0")
class IconManager(GObject.GObject):
@ -91,7 +90,7 @@ class IconManager(GObject.GObject):
image = Gtk.Image()
icon_found = False
for theme in self.themes:
if theme.has_icon( realIconName ):
if theme.lookup_icon(realIconName, 0, Gtk.IconLookupFlags.FORCE_REGULAR):
icon_found = True
break
@ -124,8 +123,8 @@ class easyButton( Gtk.Button ):
self.set_size_request( buttonWidth, buttonHeight )
Align1 = Gtk.Alignment.new( 0, 0.5, 1.0, 0 )
HBox1 = Gtk.HBox()
self.labelBox = Gtk.VBox( False, 2 )
HBox1 = Gtk.Box( orientation=Gtk.Orientation.HORIZONTAL )
self.labelBox = Gtk.Box( orientation=Gtk.Orientation.VERTICAL, spacing=2 )
self.buttonImage = Gtk.Image()
@ -135,7 +134,7 @@ class easyButton( Gtk.Button ):
else:
#[ iW, iH ] = iconManager.getIconSize( self.iconSize )
self.buttonImage.set_size_request( self.iconSize, self.iconSize )
self.image_box = Gtk.HBox()
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 )
@ -163,7 +162,7 @@ class easyButton( Gtk.Button ):
self.connections.append( self.connect( event, callback ) )
def onRelease( self, widget ):
widget.set_state(Gtk.StateType.NORMAL)
widget.get_style_context().set_state( Gtk.StateFlags.NORMAL )
def onDestroy( self, widget ):
self.buttonImage.clear()
@ -188,6 +187,7 @@ class easyButton( Gtk.Button ):
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)
@ -233,11 +233,6 @@ class easyButton( Gtk.Button ):
#[ iW, iH ] = iconManager.getIconSize( self.iconSize )
self.buttonImage.set_size_request( self.iconSize, self.iconSize )
class TargetEntry(Structure):
_fields_ = [("target", c_char_p),
("flags", c_int),
("info", c_int)]
class ApplicationLauncher( easyButton ):
def __init__( self, desktopFile, iconSize):
@ -271,17 +266,13 @@ class ApplicationLauncher( easyButton ):
# Drag and Drop
self.connectSelf( "drag-data-get", self.dragDataGet )
array = TargetEntry * 2
targets = array(( "text/plain", 0, 100 ), ( "text/uri-list", 0, 101 ))
gtk.gtk_drag_source_set.argtypes = [c_void_p, c_ushort, c_void_p, c_int, c_ushort]
gtk.gtk_drag_source_set(hash(self), Gdk.ModifierType.BUTTON1_MASK, targets, 2, 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 )
icon = self.getIcon( Gtk.IconSize.DND )
if icon:
iconName, s = icon.get_icon_name()
c = c_char_p(iconName.decode('utf-8', 'ignore').encode('ascii', 'ignore'))
gtk.gtk_drag_source_set_icon_name.argtypes = [c_void_p, c_char_p]
gtk.gtk_drag_source_set_icon_name( hash(self), c)
self.drag_source_set_icon_name( iconName )
self.connectSelf( "focus-in-event", self.onFocusIn )
self.connectSelf( "focus-out-event", self.onFocusOut )
@ -398,9 +389,7 @@ class ApplicationLauncher( easyButton ):
icon = self.getIcon( Gtk.IconSize.DND )
if icon:
iconName, size = icon.get_icon_name()
c = c_char_p(iconName.encode('ascii', 'ignore'))
gtk.gtk_drag_source_set_icon_name.argtypes = [c_void_p, c_char_p]
gtk.gtk_drag_source_set_icon_name( hash(self), c)
self.drag_source_set_icon_name( iconName )
def startupFileChanged( self, *args ):
self.inStartup = os.path.exists( self.startupFilePath )
@ -413,11 +402,11 @@ class ApplicationLauncher( easyButton ):
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.item_new_from_uri( self.startupFilePath, matedesktop.LOAD_ONLY_IF_EXISTS )
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.KEY_EXEC ) ).strip()
item.set_string( matedesktop.KEY_EXEC, tmp )
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 ):
@ -493,7 +482,7 @@ class MenuApplicationLauncher( ApplicationLauncher ):
appComment = self.appComment
if self.highlight:
try:
#color = self.labelBox.rc_get_style().fg[ Gtk.StateType.SELECTED ].to_string()
#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);

View File

@ -23,7 +23,7 @@ def Execute( cmd , commandCwd=None):
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("\"") >= 0):
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)

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy toplevel-contextual -->
<requires lib="gtk+" version="3.0"/>
<object class="GtkWindow" id="mainWindow">
<property name="can_focus">False</property>
<property name="border_width">3</property>
@ -15,10 +14,8 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="border_width">3</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<signal name="drag-drop" handler="on_scrolledwindow_drag_drop" swapped="no"/>
<signal name="drag-data-received" handler="on_scrolledwindow_drag_data_received" swapped="no"/>
<signal name="drag-drop" handler="on_scrolledwindow_drag_drop" swapped="no"/>
<signal name="drag-motion" handler="on_scrolledwindow_drag_motion" swapped="no"/>
<child>
<object class="GtkViewport" id="viewport2">
@ -26,14 +23,16 @@
<property name="can_focus">False</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkVBox" id="vbox1">
<object class="GtkBox" id="vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkVBox" id="places_button_holder">
<object class="GtkBox" id="places_button_holder">
<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="orientation">vertical</property>
<property name="spacing">2</property>
</object>
<packing>
@ -43,9 +42,10 @@
</packing>
</child>
<child>
<object class="GtkVButtonBox" id="editable_button_holder">
<object class="GtkButtonBox" id="editable_button_holder">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="layout_style">start</property>
</object>
<packing>

View File

@ -6,8 +6,6 @@ import string
import gettext
import commands
import time
import ctypes
from ctypes import *
from easybuttons import *
from easygsettings import EasyGSettings
@ -15,8 +13,6 @@ from execute import Execute
from user import home
from urllib import unquote
gtk = CDLL("libgtk-x11-2.0.so.0")
# i18n
gettext.install("mintmenu", "/usr/share/linuxmint/locale")
@ -263,8 +259,8 @@ class pluginclass( object ):
trashMenu.show_all()
emptyTrashMenuItem.connect ( "activate", self.emptyTrash, widget )
self.mintMenuWin.stopHiding()
gtk.gtk_menu_popup.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p, c_uint, c_uint]
gtk.gtk_menu_popup(hash(trashMenu), None, None, None, None, 3, 0)
trashMenu.attach_to_widget(widget, None)
trashMenu.popup(None, None, None, None, 3, 0)
def emptyTrash( self, menu, widget):
os.system("rm -rf " + home + "/.local/share/Trash/info/*")

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<requires lib="gtk+" version="3.0"/>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="border_width">3</property>
@ -12,9 +11,10 @@
<property name="can_focus">False</property>
<property name="border_width">5</property>
<child>
<object class="GtkVBox" id="vbox1">
<object class="GtkBox" id="vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">3</property>
<child>
<object class="GtkNotebook" id="RecentTabs">
@ -25,16 +25,15 @@
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkViewport" id="viewport2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkVButtonBox" id="RecentApps">
<object class="GtkButtonBox" 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/>
@ -59,17 +58,16 @@
<object class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkViewport" id="viewport1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkVButtonBox" id="RecentBox">
<object class="GtkButtonBox" id="RecentBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="layout_style">start</property>
</object>
</child>
@ -105,7 +103,6 @@
<property name="can_focus">True</property>
<property name="receives_default">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="use_action_appearance">False</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_ClrBtn_clicked" swapped="no"/>
</object>

View File

@ -1,7 +1,7 @@
#!/usr/bin/python2
import gi
gi.require_version("Gtk", "2.0")
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Pango
import os
@ -151,35 +151,21 @@ class pluginclass:
AButton.set_size_request( 200, -1 )
AButton.set_relief( Gtk.ReliefStyle.NONE )
AButton.connect( "clicked", self.callback, Name )
AButton.show()
Align1 = Gtk.Alignment()
Align1.set( 0, 0.5, 0, 0)
Align1.set_padding( 0, 0, 0, 0 )
HBox1 = Gtk.HBox( False, 5 )
VBox1 = Gtk.VBox( False, 2 )
VBox1.show()
req = Gtk.Requisition()
AButton.size_request(req)
Label1 = Gtk.Label( DispName )
Label1.set_size_request( req.width-20, -1 )
Label1.set_ellipsize( Pango.EllipsizeMode.END )
Label1.show()
VBox1.add( Label1 )
Box1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
ButtonIcon = Gtk.Image()
ButtonIcon.set_size_request(20, -1)
ButtonIcon.set_from_pixbuf(RecentImage)
HBox1.add( ButtonIcon )
Box1.add(ButtonIcon)
ButtonIcon.show()
HBox1.add( VBox1 )
HBox1.show()
Align1.add( HBox1 )
Align1.show()
AButton.add( Align1 )
AButton.show()
Label1 = Gtk.Label( DispName )
Label1.set_ellipsize( Pango.EllipsizeMode.END )
Box1.add( Label1 )
AButton.add( Box1 )
AButton.show_all()
self.recentBox.pack_start( AButton, False, True, 0 )
@ -205,7 +191,7 @@ class pluginclass:
FileString=[]
IconString=[]
RecentInfo=self.RecManagerInstance.get_items()
# print RecentInfo[0].get_icon(gtk.ICON_SIZE_MENU)
# print RecentInfo[0].get_icon(Gtk.IconSize.MENU)
count=0
MaxEntries=self.numentries
if self.numentries == -1:

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 2.6 -->
<!-- interface-naming-policy toplevel-contextual -->
<requires lib="gtk+" version="3.0"/>
<object class="GtkWindow" id="mainWindow">
<property name="can_focus">False</property>
<property name="border_width">3</property>
@ -15,10 +14,8 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="border_width">3</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<signal name="drag-drop" handler="on_scrolledwindow_drag_drop" swapped="no"/>
<signal name="drag-data-received" handler="on_scrolledwindow_drag_data_received" swapped="no"/>
<signal name="drag-drop" handler="on_scrolledwindow_drag_drop" swapped="no"/>
<signal name="drag-motion" handler="on_scrolledwindow_drag_motion" swapped="no"/>
<child>
<object class="GtkViewport" id="viewport2">
@ -26,14 +23,16 @@
<property name="can_focus">False</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkVBox" id="vbox1">
<object class="GtkBox" id="vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkVBox" id="system_button_holder">
<object class="GtkBox" id="system_button_holder">
<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="orientation">vertical</property>
<property name="spacing">2</property>
</object>
<packing>
@ -43,9 +42,10 @@
</packing>
</child>
<child>
<object class="GtkVButtonBox" id="editable_button_holder">
<object class="GtkButtonBox" id="editable_button_holder">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="layout_style">start</property>
</object>
<packing>

View File

@ -1,7 +1,7 @@
#!/usr/bin/python2
import gi
gi.require_version("Gtk", "2.0")
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
import os

View File

@ -1,17 +1,12 @@
#!/usr/bin/python2
import gi
gi.require_version("Gtk", "2.0")
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
import ctypes
from ctypes import *
gdk = CDLL("libgdk-x11-2.0.so.0")
gtk = CDLL("libgtk-x11-2.0.so.0")
class PointerMonitor(GObject.GObject, threading.Thread):
__gsignals__ = {
@ -28,9 +23,7 @@ class PointerMonitor(GObject.GObject, threading.Thread):
# Receives GDK windows
def addWindowToMonitor(self, window):
gdk.gdk_x11_drawable_get_xid.argtypes = [c_void_p]
xWindow = self.display.create_resource_object("window", gdk.gdk_x11_drawable_get_xid(hash(window)))
self.windows.append(xWindow)
self.windows.append(window)
def grabPointer(self):
self.root.grab_button(X.AnyButton, X.AnyModifier, True, X.ButtonPressMask, X.GrabModeSync, X.GrabModeAsync, 0, 0)
@ -55,9 +48,14 @@ class PointerMonitor(GObject.GObject, threading.Thread):
if event.type == X.ButtonPress:
# Check if pointer is inside monitored windows
for w in self.windows:
p = w.query_pointer()
g = w.get_geometry()
if p.win_x >= 0 and p.win_y >= 0 and p.win_x <= g.width and p.win_y <= g.height:
if Gtk.check_version (3, 20, 0) is None:
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:
break
else:
# Is outside, so activate

View File

@ -32,12 +32,6 @@
<description></description>
</key>
<key type="i" name="border-width">
<default>1</default>
<summary></summary>
<description></description>
</key>
<key type="i" name="offset">
<default>0</default>
<summary></summary>
@ -85,12 +79,6 @@
<summary></summary>
<description></description>
</key>
<key type="s" name="custom-border-color">
<default>"#DEDEDE"</default>
<summary></summary>
<description></description>
</key>
</schema>