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 mintmenu (5.7.6) serena; urgency=medium

4
debian/control vendored
View File

@ -11,15 +11,13 @@ Depends:
${python:Depends}, ${python:Depends},
${misc:Depends}, ${misc:Depends},
python (>= 2.4), python (<< 3), python (>= 2.4), python (<< 3),
python-gtk2, python-glade2,
mint-common, mint-common,
python-mate-menu, python-xdg, xdg-utils, python-mate-menu, python-xdg, xdg-utils,
python-setproctitle, python-setproctitle,
libmatepanelapplet, libmatedesktop,
mate-menus, mate-menus,
gvfs-bin, gvfs-bin,
python-xlib, 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 mozo
Description: Advanced MATE menu Description: Advanced MATE menu
One of the most advanced menus under Linux. MintMenu supports filtering, 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. # DEALINGS IN THE SOFTWARE.
import gi import gi
gi.require_version("Gtk", "2.0") gi.require_version("Gtk", "3.0")
from Xlib.display import Display from Xlib.display import Display
from Xlib import X, error 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 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>"], SPECIAL_MODS = (["Super_L", "<Super>"],
["Super_R", "<Super>"], ["Super_R", "<Super>"],
@ -57,8 +51,7 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
threading.Thread.__init__ (self) threading.Thread.__init__ (self)
self.setDaemon (True) self.setDaemon (True)
gdk.gdk_keymap_get_default.restype = c_void_p self.keymap = Gdk.Keymap().get_default()
self.keymap = capi.get_widget (gdk.gdk_keymap_get_default())
self.display = Display() self.display = Display()
self.screen = self.display.screen() self.screen = self.display.screen()
self.window = self.screen.root self.window = self.screen.root
@ -67,19 +60,6 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
self.raw_keyval = None self.raw_keyval = None
self.keytext = "" 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): def map_modifiers(self):
gdk_modifiers =(Gdk.ModifierType.CONTROL_MASK, Gdk.ModifierType.SHIFT_MASK, Gdk.ModifierType.MOD1_MASK, gdk_modifiers =(Gdk.ModifierType.CONTROL_MASK, Gdk.ModifierType.SHIFT_MASK, Gdk.ModifierType.MOD1_MASK,
Gdk.ModifierType.MOD2_MASK, Gdk.ModifierType.MOD3_MASK, Gdk.ModifierType.MOD4_MASK, Gdk.ModifierType.MOD5_MASK, Gdk.ModifierType.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): if "Mod" not in Gtk.accelerator_name(0, modifier) or "Mod4" in Gtk.accelerator_name(0, modifier):
self.known_modifiers_mask |= 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): def grab(self, key):
accelerator = key accelerator = key
accelerator = accelerator.replace("<Super>", "<Mod4>") accelerator = accelerator.replace("<Super>", "<Mod4>")
@ -107,7 +79,11 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
return False return False
self.keytext = key 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) self.modifiers = int(modifiers)
catch = error.CatchError(error.BadAccess) catch = error.CatchError(error.BadAccess)
@ -137,8 +113,7 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
if window is None: if window is None:
self.window = self.screen.root self.window = self.screen.root
else: else:
gdk.gdk_x11_drawable_get_xid.argtypes = [c_void_p] self.window = self.display.create_resource_object("window", window.get_xid())
self.window = self.display.create_resource_object("window", gdk.gdk_x11_drawable_get_xid(hash(window)))
self.grab(self.keytext) self.grab(self.keytext)
def get_mask_combinations(self, mask): def get_mask_combinations(self, mask):
@ -180,12 +155,7 @@ class GlobalKeyBinding(GObject.GObject, threading.Thread):
self.ungrab() self.ungrab()
self.display.close() self.display.close()
class KeymapKey(Structure): class KeybindingWidget(Gtk.Box):
_fields_ = [("keycode", c_uint),
("group", c_int),
("level", c_int)]
class KeybindingWidget(Gtk.HBox):
__gsignals__ = { __gsignals__ = {
'accel-edited': (GObject.SignalFlags.RUN_LAST, None, ()), 'accel-edited': (GObject.SignalFlags.RUN_LAST, None, ()),
} }
@ -235,8 +205,7 @@ class KeybindingWidget(Gtk.HBox):
self.set_button_text() self.set_button_text()
self.emit("accel-edited") self.emit("accel-edited")
return True return True
gtk.gtk_accelerator_name.restype = c_char_p accel_string = Gtk.accelerator_name( event.keyval, event.state )
accel_string = gtk.gtk_accelerator_name(event.keyval, event.state)
accel_string = self.sanitize(accel_string) accel_string = self.sanitize(accel_string)
self.value = accel_string self.value = accel_string
self.set_button_text() self.set_button_text()

View File

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

View File

@ -1,7 +1,7 @@
#!/usr/bin/python2 #!/usr/bin/python2
import gi import gi
gi.require_version("Gtk", "2.0") gi.require_version("Gtk", "3.0")
gi.require_version('MatePanelApplet', '4.0') gi.require_version('MatePanelApplet', '4.0')
from gi.repository import Gtk, GdkPixbuf, Gdk, GObject from gi.repository import Gtk, GdkPixbuf, Gdk, GObject
from gi.repository import MatePanelApplet from gi.repository import MatePanelApplet
@ -14,8 +14,6 @@ import gettext
import traceback import traceback
import time import time
import gc import gc
import ctypes
from ctypes import *
import xdg.Config import xdg.Config
import keybinding import keybinding
import pointerMonitor import pointerMonitor
@ -23,8 +21,6 @@ import setproctitle
GObject.threads_init() GObject.threads_init()
gdk = CDLL("libgdk-x11-2.0.so.0")
# Rename the process # Rename the process
setproctitle.setproctitle('mintmenu') setproctitle.setproctitle('mintmenu')
@ -63,10 +59,9 @@ class MainWindow( object ):
builder.add_from_file(os.path.join( self.path, "mintMenu.glade" )) builder.add_from_file(os.path.join( self.path, "mintMenu.glade" ))
self.window = builder.get_object( "mainWindow" ) self.window = builder.get_object( "mainWindow" )
self.window.realize() 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.window.set_title("")
self.paneholder = builder.get_object( "paneholder" ) self.paneholder = builder.get_object( "paneholder" )
self.border = builder.get_object( "border" )
builder.connect_signals(self) builder.connect_signals(self)
@ -90,18 +85,16 @@ class MainWindow( object ):
self.settings.connect( "changed::start-with-favorites", self.toggleStartWithFavorites ) self.settings.connect( "changed::start-with-favorites", self.toggleStartWithFavorites )
self.settings.connect( "changed::tooltips-enabled", self.toggleTooltipsEnabled ) self.settings.connect( "changed::tooltips-enabled", self.toggleTooltipsEnabled )
self.settings.connect( "changed::use-custom-color", self.toggleUseCustomColor ) 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-heading-color", self.toggleCustomHeadingColor )
self.settings.connect( "changed::custom-color", self.toggleCustomBackgroundColor ) self.settings.connect( "changed::custom-color", self.toggleCustomBackgroundColor )
self.settings.connect( "changed::border-width", self.toggleBorderWidth )
self.getSetGSettingEntries() self.getSetGSettingEntries()
self.tooltips = Gtk.Tooltips() self.tooltipsWidgets = []
if self.globalEnableTooltips and self.enableTooltips: if self.globalEnableTooltips and self.enableTooltips:
self.tooltips.enable() self.tooltipsEnable()
else: else:
self.tooltips.disable() self.tooltipsEnable( False )
self.PopulatePlugins(); self.PopulatePlugins();
self.firstTime = True; self.firstTime = True;
@ -123,25 +116,17 @@ class MainWindow( object ):
self.enableTooltips = settings.get_boolean(key) self.enableTooltips = settings.get_boolean(key)
if self.globalEnableTooltips and self.enableTooltips: if self.globalEnableTooltips and self.enableTooltips:
self.tooltips.enable() self.tooltipsEnable()
else: else:
self.tooltips.disable() self.tooltipsEnable( False )
def toggleStartWithFavorites( self, settings, key, args = None ): def toggleStartWithFavorites( self, settings, key, args = None ):
self.startWithFavorites = settings.get_boolean(key) 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 ): def toggleUseCustomColor( self, settings, key, args = None ):
self.usecustomcolor = settings.get_boolean(key) self.usecustomcolor = settings.get_boolean(key)
self.loadTheme() self.loadTheme()
def toggleCustomBorderColor( self, settings, key, args = None ):
self.custombordercolor = settings.get_string(key)
self.SetupMintMenuBorder()
def toggleCustomBackgroundColor( self, settings, key, args = None): def toggleCustomBackgroundColor( self, settings, key, args = None):
self.customcolor = settings.get_string(key) self.customcolor = settings.get_string(key)
self.SetPaneColors( self.panesToColor ) self.SetPaneColors( self.panesToColor )
@ -157,28 +142,19 @@ class MainWindow( object ):
self.usecustomcolor = self.settings.get_boolean( "use-custom-color" ) self.usecustomcolor = self.settings.get_boolean( "use-custom-color" )
self.customcolor = self.settings.get_string( "custom-color" ) self.customcolor = self.settings.get_string( "custom-color" )
self.customheadingcolor = self.settings.get_string( "custom-heading-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.offset = self.settings.get_int( "offset" )
self.enableTooltips = self.settings.get_boolean( "tooltips-enabled" ) self.enableTooltips = self.settings.get_boolean( "tooltips-enabled" )
self.startWithFavorites = self.settings.get_boolean( "start-with-favorites" ) self.startWithFavorites = self.settings.get_boolean( "start-with-favorites" )
self.globalEnableTooltips = self.panelSettings.get_boolean( "tooltips-enabled" ) 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 ): def PopulatePlugins( self ):
self.panesToColor = [ ] self.panesToColor = [ ]
self.headingsToColor = [ ] self.headingsToColor = [ ]
start = time.time() start = time.time()
PluginPane = Gtk.EventBox() PluginPane = Gtk.EventBox()
PluginPane.show() PluginPane.show()
PaneLadder = Gtk.VBox( False, 0 ) PaneLadder = Gtk.Box( orientation=Gtk.Orientation.VERTICAL )
PluginPane.add( PaneLadder ) PluginPane.add( PaneLadder )
ImageBox = Gtk.EventBox() ImageBox = Gtk.EventBox()
ImageBox.show() ImageBox.show()
@ -239,7 +215,7 @@ class MainWindow( object ):
self.panesToColor.append( MyPlugin.content_holder ) self.panesToColor.append( MyPlugin.content_holder )
MyPlugin.content_holder.show() MyPlugin.content_holder.show()
VBox1 = Gtk.VBox( False, 0 ) VBox1 = Gtk.Box( orientation=Gtk.Orientation.VERTICAL )
if MyPlugin.heading != "": if MyPlugin.heading != "":
Label1 = Gtk.Label(label= MyPlugin.heading ) Label1 = Gtk.Label(label= MyPlugin.heading )
Align1 = Gtk.Alignment.new( 0, 0, 0, 0 ) Align1 = Gtk.Alignment.new( 0, 0, 0, 0 )
@ -255,7 +231,7 @@ class MainWindow( object ):
heading.set_visible_window( False ) heading.set_visible_window( False )
heading.set_size_request( MyPlugin.width, 30 ) heading.set_size_request( MyPlugin.width, 30 )
else: else:
heading = Gtk.HBox() heading = Gtk.Box( orientation=Gtk.Orientation.HORIZONTAL )
#heading.set_relief( Gtk.ReliefStyle.NONE ) #heading.set_relief( Gtk.ReliefStyle.NONE )
heading.set_size_request( MyPlugin.width, -1 ) heading.set_size_request( MyPlugin.width, -1 )
#heading.set_sensitive(False) #heading.set_sensitive(False)
@ -266,14 +242,17 @@ class MainWindow( object ):
VBox1.pack_start( heading, False, False, 0 ) VBox1.pack_start( heading, False, False, 0 )
VBox1.show() VBox1.show()
#Add plugin to Plugin Box under heading button #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 #Add plugin to main window
PaneLadder.pack_start( VBox1 , True, True, 0) PaneLadder.pack_start( VBox1 , True, True, 0)
PaneLadder.show() PaneLadder.show()
if MyPlugin.window: try:
MyPlugin.window.destroy() MyPlugin.get_window().destroy()
except AttributeError:
pass
try: try:
if hasattr( MyPlugin, 'do_plugin' ): if hasattr( MyPlugin, 'do_plugin' ):
@ -299,7 +278,7 @@ class MainWindow( object ):
self.paneholder.pack_start( ImageBox, False, False, 0 ) self.paneholder.pack_start( ImageBox, False, False, 0 )
self.paneholder.pack_start( PluginPane, False, False, 0 ) self.paneholder.pack_start( PluginPane, False, False, 0 )
PluginPane = Gtk.EventBox() PluginPane = Gtk.EventBox()
PaneLadder = Gtk.VBox( False, 0 ) PaneLadder = Gtk.Box( orientation=Gtk.Orientation.VERTICAL )
PluginPane.add( PaneLadder ) PluginPane.add( PaneLadder )
ImageBox = Gtk.EventBox() ImageBox = Gtk.EventBox()
self.panesToColor.extend( [ PluginPane, ImageBox ] ) self.panesToColor.extend( [ PluginPane, ImageBox ] )
@ -321,31 +300,37 @@ class MainWindow( object ):
self.paneholder.pack_start( ImageBox, False, False, 0 ) self.paneholder.pack_start( ImageBox, False, False, 0 )
self.paneholder.pack_start( PluginPane, False, False, 0 ) self.paneholder.pack_start( PluginPane, False, False, 0 )
self.tooltips.disable() self.tooltipsEnable( False )
#print u"Loading", (time.time() - start), "s"
# A little hacky but works # A little bit hacky but works.
def getDefaultStyle( self ): def getDefaultColors( self ):
widget = Gtk.EventBox() widget = Gtk.EventBox()
widget.show() 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 ): def loadTheme( self ):
defaultStyle = self.getDefaultStyle() colors = self.getDefaultColors()
self.SetPaneColors( self.panesToColor, defaultStyle ) self.SetPaneColors( self.panesToColor, colors["bg"] )
self.SetupMintMenuBorder( defaultStyle )
self.SetHeadingStyle( self.headingsToColor ) self.SetHeadingStyle( self.headingsToColor )
def SetPaneColors( self, items, defaultStyle = None ): def SetPaneColors( self, items, color = None ):
if self.usecustomcolor: for item in items:
for item in items: context = item.get_style_context()
item.modify_bg( Gtk.StateType.NORMAL, Gdk.color_parse( self.customcolor ) ) if self.usecustomcolor:
# TODO: Changing background color isn't working for pixmaps! The following does not work: bgColor = Gdk.RGBA()
item.get_style().bg_pixmap[Gtk.StateType.NORMAL] = None bgColor.parse( self.customcolor )
elif defaultStyle is not None: item.override_background_color( context.get_state(), bgColor )
for item in items: elif color is not None:
item.modify_bg( Gtk.StateType.NORMAL, defaultStyle.lookup_color('bg_color')[1] ) item.override_background_color( context.get_state(), color )
item.get_style().bg_pixmap[Gtk.StateType.NORMAL] = defaultStyle.bg_pixmap[Gtk.StateType.NORMAL]
def SetHeadingStyle( self, items ): def SetHeadingStyle( self, items ):
if self.usecustomcolor: if self.usecustomcolor:
@ -362,8 +347,13 @@ class MainWindow( object ):
markup = '<span size="12000" weight="bold" color="%s">%s</span>' % (color, text) markup = '<span size="12000" weight="bold" color="%s">%s</span>' % (color, text)
item.set_markup( markup ) item.set_markup( markup )
def setTooltip( self, widget, tip, tipPrivate = None ): def tooltipsEnable( self, enable = True ):
self.tooltips.set_tip( widget, tip, tipPrivate ) 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 ): def RegenPlugins( self, *args, **kargs ):
#print #print
@ -407,7 +397,7 @@ class MainWindow( object ):
self.firstTime = False self.firstTime = False
self.window.set_opacity(1.0) 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(): for plugin in self.plugins.values():
if hasattr( plugin, "onShowMenu" ): if hasattr( plugin, "onShowMenu" ):
@ -447,7 +437,14 @@ class MenuWin( object ):
self.applet = applet self.applet = applet
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.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::applet-text", self.reloadSettings )
self.settings.connect( "changed::theme-name", self.changeTheme ) self.settings.connect( "changed::theme-name", self.changeTheme )
self.settings.connect( "changed::hot-key", self.reloadSettings ) 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::hide-applet-icon", self.reloadSettings )
self.settings.connect( "changed::applet-icon-size", self.reloadSettings ) self.settings.connect( "changed::applet-icon-size", self.reloadSettings )
self.settings.connect( "changed::hot-key", self.hotkeyChanged ) 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.set_flags( MatePanelApplet.AppletFlags.EXPAND_MINOR )
self.applet.connect( "button-press-event", self.showMenu ) self.applet.connect( "button-press-event", self.showMenu )
@ -488,20 +479,20 @@ class MenuWin( object ):
self.pointerMonitor.connect("activate", self.onPointerOutside) self.pointerMonitor.connect("activate", self.onPointerOutside)
def onWindowMap( self, *args ): def onWindowMap( self, *args ):
self.applet.set_state( Gtk.StateType.SELECTED ) self.applet.get_style_context().set_state( Gtk.StateFlags.SELECTED )
self.keybinder.set_focus_window( self.mainwin.window.window ) self.button_box.get_style_context().set_state( Gtk.StateFlags.SELECTED )
#self.pointerMonitor.grabPointer() self.keybinder.set_focus_window( self.mainwin.window.get_window() )
return False return False
def onWindowUnmap( self, *args ): 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.keybinder.set_focus_window()
#self.pointerMonitor.ungrabPointer()
return False return False
def onRealize( self, *args): def onRealize( self, *args):
self.pointerMonitor.addWindowToMonitor( self.mainwin.window.window ) self.pointerMonitor.addWindowToMonitor( self.mainwin.window.get_window() )
self.pointerMonitor.addWindowToMonitor( self.applet.window ) self.pointerMonitor.addWindowToMonitor( self.applet.get_window() )
self.pointerMonitor.start() self.pointerMonitor.start()
return False return False
@ -518,8 +509,8 @@ class MenuWin( object ):
def leave_notify(self, applet, event): def leave_notify(self, applet, event):
# Hack for mate-panel-test-applets focus issue (this can be commented) # 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.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.window.get_width() and event.y < applet.window.get_height(): 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.mainwin.stopHiding()
self.do_image(self.buttonIcon, False) self.do_image(self.buttonIcon, False)
@ -546,19 +537,19 @@ 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)
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.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.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 ) self.button_icon.set_padding( 5, 0 )
# 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.VBox() self.button_box = Gtk.Box( orientation=Gtk.Orientation.VERTICAL )
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 ) self.button_icon.set_padding( 0, 5 )
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.RIGHT: 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.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)
@ -569,6 +560,8 @@ class MenuWin( object ):
self.button_box.show_all() self.button_box.show_all()
self.sizeButton() self.sizeButton()
self.button_box.get_style_context().add_class('mintmenu')
self.applet.add( self.button_box ) self.applet.add( self.button_box )
self.applet.set_background_widget( self.applet ) self.applet.set_background_widget( self.applet )
@ -578,6 +571,8 @@ class MenuWin( object ):
self.buttonText = self.settings.get_string("applet-text") self.buttonText = self.settings.get_string("applet-text")
self.theme_name = self.settings.get_string( "theme-name" ) self.theme_name = self.settings.get_string( "theme-name" )
self.hotkeyText = self.settings.get_string( "hot-key" ) 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.buttonIcon = self.settings.get_string( "applet-icon" )
self.iconSize = self.settings.get_int( "applet-icon-size" ) self.iconSize = self.settings.get_int( "applet-icon-size" )
@ -600,17 +595,17 @@ class MenuWin( object ):
def changeOrientation( self, *args, **kargs ): def changeOrientation( self, *args, **kargs ):
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:
tmpbox = Gtk.HBox() tmpbox = Gtk.Box( orientation=Gtk.Orientation.HORIZONTAL )
self.systemlabel.set_angle( 0 ) self.systemlabel.set_angle( 0 )
self.button_box.reorder_child( self.button_icon, 0 ) self.button_box.reorder_child( self.button_icon, 0 )
self.button_icon.set_padding( 5, 0 ) self.button_icon.set_padding( 5, 0 )
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.LEFT: elif self.applet.get_orient() == MatePanelApplet.AppletOrient.LEFT:
tmpbox = Gtk.VBox() tmpbox = Gtk.Box( orientation=Gtk.Orientation.VERTICAL )
self.systemlabel.set_angle( 270 ) self.systemlabel.set_angle( 270 )
self.button_box.reorder_child( self.button_icon, 0 ) self.button_box.reorder_child( self.button_icon, 0 )
self.button_icon.set_padding( 0, 5 ) self.button_icon.set_padding( 0, 5 )
elif self.applet.get_orient() == MatePanelApplet.AppletOrient.RIGHT: elif self.applet.get_orient() == MatePanelApplet.AppletOrient.RIGHT:
tmpbox = Gtk.VBox() tmpbox = Gtk.Box( orientation=Gtk.Orientation.VERTICAL )
self.systemlabel.set_angle( 90 ) self.systemlabel.set_angle( 90 )
self.button_box.reorder_child( self.button_icon, 1 ) self.button_box.reorder_child( self.button_icon, 1 )
self.button_icon.set_padding( 0, 5 ) self.button_icon.set_padding( 0, 5 )
@ -662,10 +657,8 @@ class MenuWin( object ):
self.button_icon.show() self.button_icon.show()
# This code calculates width and height for the button_box # This code calculates width and height for the button_box
# and takes the orientation in account # and takes the orientation in account
sl_req = Gtk.Requisition() bi_req = self.button_icon.size_request()
bi_req = Gtk.Requisition() sl_req = self.systemlabel.size_request()
self.button_icon.size_request(bi_req)
self.systemlabel.size_request(sl_req)
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.hideIcon: if self.hideIcon:
self.applet.set_size_request( sl_req.width + 2, bi_req.height ) self.applet.set_size_request( sl_req.width + 2, bi_req.height )
@ -725,7 +718,7 @@ class MenuWin( object ):
self.mainwin.hide() self.mainwin.hide()
def toggleMenu( self ): def toggleMenu( self ):
if self.applet.state & Gtk.StateType.SELECTED: if self.applet.get_style_context().get_state() & Gtk.StateFlags.SELECTED:
self.mainwin.hide() self.mainwin.hide()
else: else:
self.positionMenu() self.positionMenu()
@ -740,13 +733,14 @@ class MenuWin( object ):
ourWidth = self.mainwin.window.get_size()[0] ourWidth = self.mainwin.window.get_size()[0]
ourHeight = self.mainwin.window.get_size()[1] + self.mainwin.offset ourHeight = self.mainwin.window.get_size()[1] + self.mainwin.offset
x = c_int()
y = c_int()
# Get the dimensions/position of the widgetToAlignWith # Get the dimensions/position of the widgetToAlignWith
gdk.gdk_window_get_origin.argtypes = [c_void_p, c_void_p, c_void_p] try:
gdk.gdk_window_get_origin(hash(self.applet.window), byref(x), byref(y)) entryX = self.applet.get_window().get_origin().x
entryX = x.value entryY = self.applet.get_window().get_origin().y
entryY = y.value 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 entryWidth, entryHeight = self.applet.get_allocation().width, self.applet.get_allocation().height
entryHeight = entryHeight + self.mainwin.offset entryHeight = entryHeight + self.mainwin.offset
@ -785,17 +779,17 @@ class MenuWin( object ):
# this callback is to create a context menu # this callback is to create a context menu
def create_menu(self): def create_menu(self):
action_group = Gtk.ActionGroup("context-menu") action_group = Gtk.ActionGroup(name="context-menu")
action = Gtk.Action("MintMenuPrefs", _("Preferences"), None, "gtk-preferences") action = Gtk.Action(name="MintMenuPrefs", label=_("Preferences"), tooltip=None, stock_id="gtk-preferences")
action.connect("activate", self.showPreferences) action.connect("activate", self.showPreferences)
action_group.add_action(action) 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.connect("activate", self.showMenuEditor)
action_group.add_action(action) 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.connect("activate", self.mainwin.RegenPlugins)
action_group.add_action(action) 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.connect("activate", self.showAboutDialog)
action_group.add_action(action) action_group.add_action(action)
action_group.set_translation_domain ("mintmenu") 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 sys
import gi import gi
gi.require_version("Gtk", "2.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GdkPixbuf from gi.repository import Gtk, Gdk, GdkPixbuf
import keybinding 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("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("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("buttonTextLabel").set_text(_("Button text:"))
self.builder.get_object("label1").set_text(_("Options")) 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("colorsLabel").set_text(_("Theme"))
self.builder.get_object("favLabel").set_text(_("Favorites")) 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("backgroundColorLabel").set_text(_("Background:"))
self.builder.get_object("headingColorLabel").set_text(_("Headings:")) 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("themeLabel").set_text(_("Theme:"))
#self.builder.get_object("applicationsLabel").set_text(_("Applications")) #self.builder.get_object("applicationsLabel").set_text(_("Applications"))
@ -131,20 +127,17 @@ class mintMenuConfig( object ):
self.placesIconSize = self.builder.get_object( "placesIconSize" ) self.placesIconSize = self.builder.get_object( "placesIconSize" )
self.systemIconSize = self.builder.get_object( "systemIconSize" ) self.systemIconSize = self.builder.get_object( "systemIconSize" )
self.favCols = self.builder.get_object( "numFavCols" ) self.favCols = self.builder.get_object( "numFavCols" )
self.borderWidth = self.builder.get_object( "borderWidth" )
self.useCustomColors = self.builder.get_object( "useCustomColors" ) self.useCustomColors = self.builder.get_object( "useCustomColors" )
self.backgroundColor = self.builder.get_object( "backgroundColor" ) self.backgroundColor = self.builder.get_object( "backgroundColor" )
self.borderColor = self.builder.get_object( "borderColor" )
self.headingColor = self.builder.get_object( "headingColor" ) self.headingColor = self.builder.get_object( "headingColor" )
self.backgroundColorLabel = self.builder.get_object( "backgroundColorLabel" ) self.backgroundColorLabel = self.builder.get_object( "backgroundColorLabel" )
self.borderColorLabel = self.builder.get_object( "borderColorLabel" )
self.headingColorLabel = self.builder.get_object( "headingColorLabel" ) self.headingColorLabel = self.builder.get_object( "headingColorLabel" )
self.showButtonIcon = self.builder.get_object( "showButtonIcon" ) self.showButtonIcon = self.builder.get_object( "showButtonIcon" )
self.enableInternetSearch = self.builder.get_object( "enableInternetSearch" ) self.enableInternetSearch = self.builder.get_object( "enableInternetSearch" )
self.buttonText = self.builder.get_object( "buttonText" ) self.buttonText = self.builder.get_object( "buttonText" )
self.hotkeyWidget = keybinding.KeybindingWidget(_("Keyboard shortcut:") ) self.hotkeyWidget = keybinding.KeybindingWidget(_("Keyboard shortcut:") )
table = self.builder.get_object( "main_table" ) grid = self.builder.get_object( "main_grid" )
table.attach(self.hotkeyWidget, 0, 2, 2, 3, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL, 0, 0) grid.attach(self.hotkeyWidget, 0, 2, 2, 1)
self.buttonIcon = self.builder.get_object( "buttonIcon" ) self.buttonIcon = self.builder.get_object( "buttonIcon" )
self.buttonIconChooser = self.builder.get_object( "button_icon_chooser" ) self.buttonIconChooser = self.builder.get_object( "button_icon_chooser" )
self.image_filter = Gtk.FileFilter() 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.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.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, "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-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_color, self.getHeadingColor ) self.bindGSettingsValueToWidget( self.settings, "color", "custom-heading-color", self.headingColor, "color-set", self.headingColor.set_rgba, self.getHeadingColor )
self.bindGSettingsValueToWidget( self.settings, "color", "custom-border-color", self.borderColor, "color-set", self.borderColor.set_color, self.getBorderColor )
self.bindGSettingsValueToWidget( self.settings, "bool", "hide-applet-icon", self.showButtonIcon, "toggled", self.setShowButtonIcon, self.getShowButtonIcon ) 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", "applet-text", self.buttonText, "changed", self.buttonText.set_text, self.buttonText.get_text )
self.bindGSettingsValueToWidget( self.settings, "string", "hot-key", self.hotkeyWidget, "accel-edited", self.hotkeyWidget.set_val, self.hotkeyWidget.get_val ) self.bindGSettingsValueToWidget( self.settings, "string", "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 ): def bindGSettingsValueToWidget( self, settings, setting_type, key, widget, changeEvent, setter, getter ):
settings.notifyAdd( key, self.callSetter, args = [ setting_type, setter ] ) settings.notifyAdd( key, self.callSetter, args = [ setting_type, setter ] )
if setting_type == "color": 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: else:
setter( settings.get( setting_type, key ) ) setter( settings.get( setting_type, key ) )
widget.connect( changeEvent, lambda *args: self.callGetter( settings, setting_type, key, getter ) ) widget.connect( changeEvent, lambda *args: self.callGetter( settings, setting_type, key, getter ) )
@ -368,7 +361,9 @@ class mintMenuConfig( object ):
elif args[0] == "int": elif args[0] == "int":
args[1]( settings.get_int(key) ) args[1]( settings.get_int(key) )
elif args[0] == "color": 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 ): def callGetter( self, settings, setting_type, key, getter ):
if (setting_type == "int"): if (setting_type == "int"):
@ -378,38 +373,20 @@ class mintMenuConfig( object ):
def toggleUseCustomColors( self, widget ): def toggleUseCustomColors( self, widget ):
self.backgroundColor.set_sensitive( widget.get_active() ) self.backgroundColor.set_sensitive( widget.get_active() )
self.borderColor.set_sensitive( widget.get_active() )
self.headingColor.set_sensitive( widget.get_active() ) self.headingColor.set_sensitive( widget.get_active() )
self.backgroundColorLabel.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() ) self.headingColorLabel.set_sensitive( widget.get_active() )
def getBackgroundColor( self ): def getBackgroundColor( self ):
try: color = self.backgroundColor.get_rgba()
color = self.backgroundColor.get_color() return self.gdkRGBAToString( 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 )
def getHeadingColor( self ): def getHeadingColor( self ):
try: color = self.headingColor.get_rgba()
color = self.headingColor.get_color() return self.gdkRGBAToString( color )
except:
color = Gdk.Color(0, 0, 0)
self.headingColor.get_color(color)
return self.gdkColorToString( color )
def gdkColorToString( self, gdkColor ): def gdkRGBAToString( self, gdkRGBA ):
return "#%.2X%.2X%.2X" % ( gdkColor.red / 256, gdkColor.green / 256, gdkColor.blue / 256 ) return "#%.2X%.2X%.2X" % ( gdkRGBA.red * 256, gdkRGBA.green * 256, gdkRGBA.blue * 256 )
def moveUp( self, upButton ): def moveUp( self, upButton ):

View File

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

View File

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

View File

@ -1,8 +1,11 @@
#!/usr/bin/python2 #!/usr/bin/python2
import gi
gi.require_version('MateDesktop', '2.0')
from gi.repository import Gtk, Gdk, GLib from gi.repository import Gtk, Gdk, GLib
from gi.repository import Pango from gi.repository import Pango
from gi.repository import GObject from gi.repository import GObject
from gi.repository import MateDesktop
import os.path import os.path
import shutil import shutil
import re import re
@ -10,10 +13,6 @@ from execute import *
import xdg.DesktopEntry import xdg.DesktopEntry
import xdg.Menu import xdg.Menu
from filemonitor import monitor as filemonitor from filemonitor import monitor as filemonitor
import ctypes
from ctypes import *
gtk = CDLL("libgtk-x11-2.0.so.0")
class IconManager(GObject.GObject): class IconManager(GObject.GObject):
@ -91,7 +90,7 @@ class IconManager(GObject.GObject):
image = Gtk.Image() image = Gtk.Image()
icon_found = False icon_found = False
for theme in self.themes: for theme in self.themes:
if theme.has_icon( realIconName ): if theme.lookup_icon(realIconName, 0, Gtk.IconLookupFlags.FORCE_REGULAR):
icon_found = True icon_found = True
break break
@ -124,8 +123,8 @@ class easyButton( Gtk.Button ):
self.set_size_request( buttonWidth, buttonHeight ) self.set_size_request( buttonWidth, buttonHeight )
Align1 = Gtk.Alignment.new( 0, 0.5, 1.0, 0 ) Align1 = Gtk.Alignment.new( 0, 0.5, 1.0, 0 )
HBox1 = Gtk.HBox() HBox1 = Gtk.Box( orientation=Gtk.Orientation.HORIZONTAL )
self.labelBox = Gtk.VBox( False, 2 ) self.labelBox = Gtk.Box( orientation=Gtk.Orientation.VERTICAL, spacing=2 )
self.buttonImage = Gtk.Image() self.buttonImage = Gtk.Image()
@ -135,7 +134,7 @@ class easyButton( Gtk.Button ):
else: else:
#[ iW, iH ] = iconManager.getIconSize( self.iconSize ) #[ iW, iH ] = iconManager.getIconSize( self.iconSize )
self.buttonImage.set_size_request( self.iconSize, 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.pack_start(self.buttonImage, False, False, 5)
self.image_box.show_all() self.image_box.show_all()
HBox1.pack_start( self.image_box, False, False, 0 ) HBox1.pack_start( self.image_box, False, False, 0 )
@ -163,7 +162,7 @@ class easyButton( Gtk.Button ):
self.connections.append( self.connect( event, callback ) ) self.connections.append( self.connect( event, callback ) )
def onRelease( self, widget ): def onRelease( self, widget ):
widget.set_state(Gtk.StateType.NORMAL) widget.get_style_context().set_state( Gtk.StateFlags.NORMAL )
def onDestroy( self, widget ): def onDestroy( self, widget ):
self.buttonImage.clear() self.buttonImage.clear()
@ -188,6 +187,7 @@ class easyButton( Gtk.Button ):
label.set_ellipsize( Pango.EllipsizeMode.END ) label.set_ellipsize( Pango.EllipsizeMode.END )
label.set_alignment( 0.0, 1.0 ) label.set_alignment( 0.0, 1.0 )
label.set_max_width_chars(0)
label.show() label.show()
self.labelBox.pack_start( label , True, True, 0) self.labelBox.pack_start( label , True, True, 0)
@ -233,11 +233,6 @@ class easyButton( Gtk.Button ):
#[ iW, iH ] = iconManager.getIconSize( self.iconSize ) #[ iW, iH ] = iconManager.getIconSize( self.iconSize )
self.buttonImage.set_size_request( self.iconSize, 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 ): class ApplicationLauncher( easyButton ):
def __init__( self, desktopFile, iconSize): def __init__( self, desktopFile, iconSize):
@ -271,17 +266,13 @@ class ApplicationLauncher( easyButton ):
# Drag and Drop # Drag and Drop
self.connectSelf( "drag-data-get", self.dragDataGet ) self.connectSelf( "drag-data-get", self.dragDataGet )
array = TargetEntry * 2 targets = ( Gtk.TargetEntry.new( "text/plain", 0, 100 ), Gtk.TargetEntry.new( "text/uri-list", 0, 101 ) )
targets = array(( "text/plain", 0, 100 ), ( "text/uri-list", 0, 101 )) self.drag_source_set( Gdk.ModifierType.BUTTON1_MASK, targets, Gdk.DragAction.COPY )
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)
icon = self.getIcon( Gtk.IconSize.DND ) icon = self.getIcon( Gtk.IconSize.DND )
if icon: if icon:
iconName, s = icon.get_icon_name() iconName, s = icon.get_icon_name()
c = c_char_p(iconName.decode('utf-8', 'ignore').encode('ascii', 'ignore')) self.drag_source_set_icon_name( iconName )
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.connectSelf( "focus-in-event", self.onFocusIn ) self.connectSelf( "focus-in-event", self.onFocusIn )
self.connectSelf( "focus-out-event", self.onFocusOut ) self.connectSelf( "focus-out-event", self.onFocusOut )
@ -398,9 +389,7 @@ class ApplicationLauncher( easyButton ):
icon = self.getIcon( Gtk.IconSize.DND ) icon = self.getIcon( Gtk.IconSize.DND )
if icon: if icon:
iconName, size = icon.get_icon_name() iconName, size = icon.get_icon_name()
c = c_char_p(iconName.encode('ascii', 'ignore')) self.drag_source_set_icon_name( iconName )
gtk.gtk_drag_source_set_icon_name.argtypes = [c_void_p, c_char_p]
gtk.gtk_drag_source_set_icon_name( hash(self), c)
def startupFileChanged( self, *args ): def startupFileChanged( self, *args ):
self.inStartup = os.path.exists( self.startupFilePath ) self.inStartup = os.path.exists( self.startupFilePath )
@ -413,11 +402,11 @@ class ApplicationLauncher( easyButton ):
shutil.copyfile( self.desktopFile, self.startupFilePath ) shutil.copyfile( self.desktopFile, self.startupFilePath )
# Remove %u, etc. from Exec entry, because MATE will not replace them when it starts the app # 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: if item:
r = re.compile("%[A-Za-z]"); r = re.compile("%[A-Za-z]");
tmp = r.sub("", item.get_string( matedesktop.KEY_EXEC ) ).strip() tmp = r.sub("", item.get_string( MateDesktop.DESKTOP_ITEM_EXEC ) ).strip()
item.set_string( matedesktop.KEY_EXEC, tmp ) item.set_string( MateDesktop.DESKTOP_ITEM_EXEC, tmp )
item.save( self.startupFilePath, 0 ) item.save( self.startupFilePath, 0 )
def removeFromStartup( self ): def removeFromStartup( self ):
@ -493,7 +482,7 @@ class MenuApplicationLauncher( ApplicationLauncher ):
appComment = self.appComment appComment = self.appComment
if self.highlight: if self.highlight:
try: 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] == "#": #if len(color) > 0 and color[0] == "#":
#appName = "<span foreground=\"%s\"><b>%s</b></span>" % (color, appName); #appName = "<span foreground=\"%s\"><b>%s</b></span>" % (color, appName);
#appComment = "<span foreground=\"%s\"><b>%s</b></span>" % (color, appComment); #appComment = "<span foreground=\"%s\"><b>%s</b></span>" % (color, appComment);

View File

@ -23,7 +23,7 @@ def Execute( cmd , commandCwd=None):
cwd = tmpCwd cwd = tmpCwd
if isinstance( cmd, str ) or isinstance( cmd, unicode): 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..." print "running manually..."
try: try:
os.chdir(cwd) os.chdir(cwd)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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