Fixed focus bugs

This commit is contained in:
Clement Lefebvre 2010-09-12 12:56:38 +01:00
parent dc39d0783e
commit ec4866b1ab
3 changed files with 191 additions and 185 deletions

1
debian/changelog vendored
View File

@ -2,6 +2,7 @@ mintmenu (5.0.5) julia; urgency=low
* Multi-threaded search * Multi-threaded search
* Multiple keywords search * Multiple keywords search
* Fixed grab focus bugs
-- Clement Lefebvre <root@linuxmint.com> Sun, 12 Sep 2010 12:21:00 +0000 -- Clement Lefebvre <root@linuxmint.com> Sun, 12 Sep 2010 12:21:00 +0000

View File

@ -910,6 +910,7 @@ class pluginclass( object ):
mTree.get_widget("favoritesMenu").show_all() mTree.get_widget("favoritesMenu").show_all()
mTree.get_widget( "favoritesMenu" ).popup( None, None, None, ev.button, ev.time ) mTree.get_widget( "favoritesMenu" ).popup( None, None, None, ev.button, ev.time )
self.mintMenuWin.grab()
else: else:
mTree = gtk.glade.XML( self.gladefile, "favoritesMenuExtra" ) mTree = gtk.glade.XML( self.gladefile, "favoritesMenuExtra" )
@ -926,6 +927,7 @@ 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 )
mTree.get_widget( "favoritesMenuExtra" ).popup( None, None, None, ev.button, ev.time ) mTree.get_widget( "favoritesMenuExtra" ).popup( None, None, None, ev.button, ev.time )
self.mintMenuWin.grab()
def menuPopup( self, widget, event ): def menuPopup( self, widget, event ):
if event.button == 3: if event.button == 3:
@ -988,6 +990,7 @@ class pluginclass( object ):
startupMenuItem.connect( "toggled", self.onAddToStartup, widget ) startupMenuItem.connect( "toggled", self.onAddToStartup, widget )
mTree.get_widget( "applicationsMenu" ).popup( None, None, None, event.button, event.time ) mTree.get_widget( "applicationsMenu" ).popup( None, None, None, event.button, event.time )
self.mintMenuWin.grab()
def searchPopup( self, widget=None, event=None ): def searchPopup( self, widget=None, event=None ):
menu = gtk.Menu() menu = gtk.Menu()
@ -1067,6 +1070,7 @@ class pluginclass( object ):
#menu.attach_to_widget(self.searchButton, None) #menu.attach_to_widget(self.searchButton, None)
#menu.reposition() #menu.reposition()
#menu.reposition() #menu.reposition()
self.mintMenuWin.grab()
self.focusSearchEntry() self.focusSearchEntry()
def pos_func(self, menu=None): def pos_func(self, menu=None):

View File

@ -20,215 +20,216 @@ gettext.install("mintmenu", "/usr/share/linuxmint/locale")
class pluginclass( object ): class pluginclass( object ):
def __init__( self, mintMenuWin, toggleButton ): def __init__( self, mintMenuWin, toggleButton ):
self.mintMenuWin = mintMenuWin self.mintMenuWin = mintMenuWin
self.toggleButton = toggleButton self.toggleButton = toggleButton
# Read GLADE file # Read GLADE file
gladefile = os.path.join( os.path.dirname( __file__ ), "places.glade" ) gladefile = os.path.join( os.path.dirname( __file__ ), "places.glade" )
wTree = gtk.glade.XML( gladefile, "mainWindow" ) wTree = gtk.glade.XML( gladefile, "mainWindow" )
self.placesBtnHolder = wTree.get_widget( "places_button_holder" ) self.placesBtnHolder = wTree.get_widget( "places_button_holder" )
self.editableBtnHolder = wTree.get_widget( "editable_button_holder" ) self.editableBtnHolder = wTree.get_widget( "editable_button_holder" )
self.scrolledWindow=wTree.get_widget("scrolledwindow2") self.scrolledWindow=wTree.get_widget("scrolledwindow2")
# These properties are NECESSARY to maintain consistency # These properties are NECESSARY to maintain consistency
# Set 'window' property for the plugin (Must be the root widget) # Set 'window' property for the plugin (Must be the root widget)
self.window = wTree.get_widget( "mainWindow" ) self.window = wTree.get_widget( "mainWindow" )
# Set 'heading' property for plugin # Set 'heading' property for plugin
self.heading = _("Places") self.heading = _("Places")
# This should be the first item added to the window in glade # This should be the first item added to the window in glade
self.content_holder = wTree.get_widget( "Places" ) self.content_holder = wTree.get_widget( "Places" )
# Items to get custom colors # Items to get custom colors
self.itemstocolor = [ wTree.get_widget( "viewport2" ) ] self.itemstocolor = [ wTree.get_widget( "viewport2" ) ]
# Gconf stuff # Gconf stuff
self.gconf = EasyGConf( "/apps/mintMenu/plugins/places/" ) self.gconf = EasyGConf( "/apps/mintMenu/plugins/places/" )
self.gconf.notifyAdd( "icon_size", self.RegenPlugin ) self.gconf.notifyAdd( "icon_size", self.RegenPlugin )
self.gconf.notifyAdd( "show_computer", self.RegenPlugin ) self.gconf.notifyAdd( "show_computer", self.RegenPlugin )
self.gconf.notifyAdd( "show_desktop", self.RegenPlugin ) self.gconf.notifyAdd( "show_desktop", self.RegenPlugin )
self.gconf.notifyAdd( "show_home_folder", self.RegenPlugin ) self.gconf.notifyAdd( "show_home_folder", self.RegenPlugin )
self.gconf.notifyAdd( "show_network", self.RegenPlugin ) self.gconf.notifyAdd( "show_network", self.RegenPlugin )
self.gconf.notifyAdd( "show_trash", self.RegenPlugin ) self.gconf.notifyAdd( "show_trash", self.RegenPlugin )
self.gconf.notifyAdd( "custom_names", self.RegenPlugin ) self.gconf.notifyAdd( "custom_names", self.RegenPlugin )
self.gconf.notifyAdd( "custom_paths", self.RegenPlugin ) self.gconf.notifyAdd( "custom_paths", self.RegenPlugin )
self.gconf.notifyAdd( "allowScrollbar", self.RegenPlugin ) self.gconf.notifyAdd( "allowScrollbar", self.RegenPlugin )
self.gconf.notifyAdd( "height", self.changePluginSize ) self.gconf.notifyAdd( "height", self.changePluginSize )
self.gconf.notifyAdd( "width", self.changePluginSize ) self.gconf.notifyAdd( "width", self.changePluginSize )
self.gconf.bindGconfEntryToVar( "bool", "sticky", self, "sticky" ) self.gconf.bindGconfEntryToVar( "bool", "sticky", self, "sticky" )
self.GetGconfEntries() self.GetGconfEntries()
self.content_holder.set_size_request( self.width, self.height ) self.content_holder.set_size_request( self.width, self.height )
def wake (self) : def wake (self) :
if ( self.showtrash == True ): if ( self.showtrash == True ):
self.refreshTrash() self.refreshTrash()
def destroy( self ): def destroy( self ):
self.gconf.notifyRemoveAll() self.gconf.notifyRemoveAll()
def changePluginSize( self, client, connection_id, entry, args ): def changePluginSize( self, client, connection_id, entry, args ):
self.allowScrollbar = self.gconf.get( "bool", "allowScrollbar", False) self.allowScrollbar = self.gconf.get( "bool", "allowScrollbar", False)
if entry.get_key() == self.gconf.gconfDir+"width": if entry.get_key() == self.gconf.gconfDir+"width":
self.width = entry.get_value().get_int() self.width = entry.get_value().get_int()
elif entry.get_key() == self.gconf.gconfDir+"height": elif entry.get_key() == self.gconf.gconfDir+"height":
if (self.allowScrollbar == False): if (self.allowScrollbar == False):
self.height = -1 self.height = -1
self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER ) self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER )
else: else:
self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC ) self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC )
self.height = entry.get_value().get_int() self.height = entry.get_value().get_int()
self.content_holder.set_size_request( self.width, self.height ) self.content_holder.set_size_request( self.width, self.height )
def RegenPlugin( self, *args, **kargs ): def RegenPlugin( self, *args, **kargs ):
self.GetGconfEntries() self.GetGconfEntries()
self.ClearAll() self.ClearAll()
self.do_standard_places() self.do_standard_places()
self.do_custom_places() self.do_custom_places()
def GetGconfEntries( self ): def GetGconfEntries( self ):
self.width = self.gconf.get( "int", "width", 200 ) self.width = self.gconf.get( "int", "width", 200 )
self.allowScrollbar = self.gconf.get( "bool", "allowScrollbar", False) self.allowScrollbar = self.gconf.get( "bool", "allowScrollbar", False)
self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC ) self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC )
self.height = self.gconf.get( "int", "height", 180 ) self.height = self.gconf.get( "int", "height", 180 )
self.content_holder.set_size_request( self.width, self.height ) self.content_holder.set_size_request( self.width, self.height )
if (self.allowScrollbar == False): if (self.allowScrollbar == False):
self.height = -1 self.height = -1
self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER ) self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER )
self.content_holder.set_size_request( self.width, self.height ) self.content_holder.set_size_request( self.width, self.height )
self.execapp = self.gconf.get( "string", "execute_app", "nautilus" ) self.execapp = self.gconf.get( "string", "execute_app", "nautilus" )
self.iconsize = self.gconf.get( "int","icon_size", 2 ) self.iconsize = self.gconf.get( "int","icon_size", 2 )
# Check default items # Check default items
self.showcomputer = self.gconf.get( "bool", "show_computer", True ) self.showcomputer = self.gconf.get( "bool", "show_computer", True )
self.showhomefolder = self.gconf.get( "bool", "show_home_folder", True ) self.showhomefolder = self.gconf.get( "bool", "show_home_folder", True )
self.shownetwork = self.gconf.get( "bool", "show_network", True ) self.shownetwork = self.gconf.get( "bool", "show_network", True )
self.showdesktop = self.gconf.get( "bool", "show_desktop", True ) self.showdesktop = self.gconf.get( "bool", "show_desktop", True )
self.showtrash = self.gconf.get( "bool", "show_trash", True ) self.showtrash = self.gconf.get( "bool", "show_trash", True )
# Get paths for custom items # Get paths for custom items
self.custompaths = self.gconf.get( "list-string", "custom_paths", [ ] ) self.custompaths = self.gconf.get( "list-string", "custom_paths", [ ] )
# Get names for custom items # Get names for custom items
self.customnames = self.gconf.get( "list-string", "custom_names", [ ] ) self.customnames = self.gconf.get( "list-string", "custom_names", [ ] )
# Hide vertical dotted separator # Hide vertical dotted separator
self.hideseparator = self.gconf.get( "bool", "hide_separator", False ) self.hideseparator = self.gconf.get( "bool", "hide_separator", False )
# Plugin icon # Plugin icon
self.icon = self.gconf.get( "string", 'icon', "gnome-fs-directory.png" ) self.icon = self.gconf.get( "string", 'icon', "gnome-fs-directory.png" )
# Allow plugin to be minimized to the left plugin pane # Allow plugin to be minimized to the left plugin pane
self.sticky = self.gconf.get( "bool", "sticky", False ) self.sticky = self.gconf.get( "bool", "sticky", False )
self.minimized = self.gconf.get( "bool", "minimized", False ) self.minimized = self.gconf.get( "bool", "minimized", False )
def ClearAll(self): def ClearAll(self):
for child in self.placesBtnHolder.get_children(): for child in self.placesBtnHolder.get_children():
child.destroy() child.destroy()
for child in self.editableBtnHolder.get_children(): for child in self.editableBtnHolder.get_children():
child.destroy() child.destroy()
#Add standard places #Add standard places
def do_standard_places( self ): def do_standard_places( self ):
if ( self.showcomputer == True ): if ( self.showcomputer == True ):
Button1 = easyButton( "computer", self.iconsize, [_("Computer")], -1, -1 ) Button1 = easyButton( "computer", self.iconsize, [_("Computer")], -1, -1 )
Button1.connect( "clicked", self.ButtonClicked, "nautilus computer:" ) Button1.connect( "clicked", self.ButtonClicked, "nautilus computer:" )
Button1.show() Button1.show()
self.placesBtnHolder.pack_start( Button1, False, False ) self.placesBtnHolder.pack_start( Button1, False, False )
self.mintMenuWin.setTooltip( Button1, _("Browse all local and remote disks and folders accessible from this computer") ) self.mintMenuWin.setTooltip( Button1, _("Browse all local and remote disks and folders accessible from this computer") )
if ( self.showhomefolder == True ): if ( self.showhomefolder == True ):
Button2 = easyButton( "user-home", self.iconsize, [_("Home Folder")], -1, -1 ) Button2 = easyButton( "user-home", self.iconsize, [_("Home Folder")], -1, -1 )
Button2.connect( "clicked", self.ButtonClicked, "nautilus" ) Button2.connect( "clicked", self.ButtonClicked, "nautilus" )
Button2.show() Button2.show()
self.placesBtnHolder.pack_start( Button2, False, False ) self.placesBtnHolder.pack_start( Button2, False, False )
self.mintMenuWin.setTooltip( Button2, _("Open your personal folder") ) self.mintMenuWin.setTooltip( Button2, _("Open your personal folder") )
if ( self.shownetwork == True ): if ( self.shownetwork == True ):
Button3 = easyButton( "network-workgroup", self.iconsize, [_("Network")], -1, -1 ) Button3 = easyButton( "network-workgroup", self.iconsize, [_("Network")], -1, -1 )
Button3.connect( "clicked", self.ButtonClicked, "nautilus network:" ) Button3.connect( "clicked", self.ButtonClicked, "nautilus network:" )
Button3.show() Button3.show()
self.placesBtnHolder.pack_start( Button3, False, False ) self.placesBtnHolder.pack_start( Button3, False, False )
self.mintMenuWin.setTooltip( Button3, _("Browse bookmarked and local network locations") ) self.mintMenuWin.setTooltip( Button3, _("Browse bookmarked and local network locations") )
if ( self.showdesktop == True ): if ( self.showdesktop == True ):
# Determine where the Desktop folder is (could be localized) # Determine where the Desktop folder is (could be localized)
desktopDir = home + "/Desktop" desktopDir = home + "/Desktop"
try: try:
import sys import sys
sys.path.append('/usr/lib/linuxmint/common') sys.path.append('/usr/lib/linuxmint/common')
from configobj import ConfigObj from configobj import ConfigObj
config = ConfigObj(home + "/.config/user-dirs.dirs") config = ConfigObj(home + "/.config/user-dirs.dirs")
tmpdesktopDir = config['XDG_DESKTOP_DIR'] tmpdesktopDir = config['XDG_DESKTOP_DIR']
tmpdesktopDir = commands.getoutput("echo " + tmpdesktopDir) tmpdesktopDir = commands.getoutput("echo " + tmpdesktopDir)
if os.path.exists(tmpdesktopDir): if os.path.exists(tmpdesktopDir):
desktopDir = tmpdesktopDir desktopDir = tmpdesktopDir
except Exception, detail: except Exception, detail:
print detail print detail
Button4 = easyButton( "gnome-fs-desktop", self.iconsize, [_("Desktop")], -1, -1 ) Button4 = easyButton( "gnome-fs-desktop", self.iconsize, [_("Desktop")], -1, -1 )
Button4.connect( "clicked", self.ButtonClicked, "nautilus \"" + desktopDir + "\"") Button4.connect( "clicked", self.ButtonClicked, "nautilus \"" + desktopDir + "\"")
Button4.show() Button4.show()
self.placesBtnHolder.pack_start( Button4, False, False ) self.placesBtnHolder.pack_start( Button4, False, False )
self.mintMenuWin.setTooltip( Button4, _("Browse items placed on the desktop") ) self.mintMenuWin.setTooltip( Button4, _("Browse items placed on the desktop") )
if ( self.showtrash == True ): if ( self.showtrash == True ):
self.trashButton = easyButton( "user-trash", self.iconsize, [_("Trash")], -1, -1 ) self.trashButton = easyButton( "user-trash", self.iconsize, [_("Trash")], -1, -1 )
self.trashButton.connect( "clicked", self.ButtonClicked, "nautilus trash:" ) self.trashButton.connect( "clicked", self.ButtonClicked, "nautilus trash:" )
self.trashButton.show() self.trashButton.show()
self.trashButton.connect( "button-release-event", self.trashPopup ) self.trashButton.connect( "button-release-event", self.trashPopup )
self.refreshTrash() self.refreshTrash()
self.placesBtnHolder.pack_start( self.trashButton, False, False ) self.placesBtnHolder.pack_start( self.trashButton, False, False )
self.mintMenuWin.setTooltip( self.trashButton, _("Browse deleted files") ) self.mintMenuWin.setTooltip( self.trashButton, _("Browse deleted files") )
def do_custom_places( self ): def do_custom_places( self ):
for index in range( len(self.custompaths) ): for index in range( len(self.custompaths) ):
path = self.custompaths[index] path = self.custompaths[index]
path = path.replace("~", home) path = path.replace("~", home)
command = ( "nautilus \"" + path + "\"") command = ( "nautilus \"" + path + "\"")
currentbutton = easyButton( "folder", self.iconsize, [self.customnames[index]], -1, -1 ) currentbutton = easyButton( "folder", self.iconsize, [self.customnames[index]], -1, -1 )
currentbutton.connect( "clicked", self.ButtonClicked, command ) currentbutton.connect( "clicked", self.ButtonClicked, command )
currentbutton.show() currentbutton.show()
self.placesBtnHolder.pack_start( currentbutton, False, False ) self.placesBtnHolder.pack_start( currentbutton, False, False )
def trashPopup( self, widget, event ): def trashPopup( self, widget, event ):
if event.button == 3: if event.button == 3:
trashMenu = gtk.Menu() trashMenu = gtk.Menu()
emptyTrashMenuItem = gtk.MenuItem(_("Empty trash")) emptyTrashMenuItem = gtk.MenuItem(_("Empty trash"))
trashMenu.append(emptyTrashMenuItem) trashMenu.append(emptyTrashMenuItem)
trashMenu.show_all() trashMenu.show_all()
emptyTrashMenuItem.connect ( "activate", self.emptyTrash, widget ) emptyTrashMenuItem.connect ( "activate", self.emptyTrash, widget )
trashMenu.popup( None, None, None, event.button, event.time ) trashMenu.popup( None, None, None, event.button, event.time )
self.mintMenuWin.grab()
def emptyTrash( self, menu, widget):
os.system("rm -rf " + home + "/.local/share/Trash/info/*")
os.system("rm -rf " + home + "/.local/share/Trash/files/*")
self.trashButton.setIcon("user-trash")
def ButtonClicked( self, widget, Exec ): def emptyTrash( self, menu, widget):
self.mintMenuWin.hide() os.system("rm -rf " + home + "/.local/share/Trash/info/*")
if Exec: os.system("rm -rf " + home + "/.local/share/Trash/files/*")
Execute( Exec ) self.trashButton.setIcon("user-trash")
def do_plugin( self ): def ButtonClicked( self, widget, Exec ):
self.do_standard_places() self.mintMenuWin.hide()
self.do_custom_places() if Exec:
Execute( Exec )
def refreshTrash (self): def do_plugin( self ):
iconName = "user-trash" self.do_standard_places()
if (os.path.exists(home + "/.local/share/Trash/info")): self.do_custom_places()
infoFiles = commands.getoutput("ls " + home + "/.local/share/Trash/info/ | wc -l")
if (int(infoFiles) > 0):
iconName = "user-trash-full"
self.trashButton.setIcon(iconName)
def refreshTrash (self):
iconName = "user-trash"
if (os.path.exists(home + "/.local/share/Trash/info")):
infoFiles = commands.getoutput("ls " + home + "/.local/share/Trash/info/ | wc -l")
if (int(infoFiles) > 0):
iconName = "user-trash-full"
self.trashButton.setIcon(iconName)