diff --git a/debian/changelog b/debian/changelog index 305dc5f..e7f25ed 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,7 @@ mintmenu (5.0.5) julia; urgency=low * Multi-threaded search * Multiple keywords search + * Fixed grab focus bugs -- Clement Lefebvre Sun, 12 Sep 2010 12:21:00 +0000 diff --git a/usr/lib/linuxmint/mintMenu/plugins/applications.py b/usr/lib/linuxmint/mintMenu/plugins/applications.py index 5683f72..159936f 100755 --- a/usr/lib/linuxmint/mintMenu/plugins/applications.py +++ b/usr/lib/linuxmint/mintMenu/plugins/applications.py @@ -910,6 +910,7 @@ class pluginclass( object ): mTree.get_widget("favoritesMenu").show_all() mTree.get_widget( "favoritesMenu" ).popup( None, None, None, ev.button, ev.time ) + self.mintMenuWin.grab() else: mTree = gtk.glade.XML( self.gladefile, "favoritesMenuExtra" ) @@ -926,6 +927,7 @@ class pluginclass( object ): insertSpaceMenuItem.connect( "activate", self.onFavoritesInsertSpace, widget, insertBefore ) insertSeparatorMenuItem.connect( "activate", self.onFavoritesInsertSeparator, widget, insertBefore ) mTree.get_widget( "favoritesMenuExtra" ).popup( None, None, None, ev.button, ev.time ) + self.mintMenuWin.grab() def menuPopup( self, widget, event ): if event.button == 3: @@ -988,6 +990,7 @@ class pluginclass( object ): startupMenuItem.connect( "toggled", self.onAddToStartup, widget ) mTree.get_widget( "applicationsMenu" ).popup( None, None, None, event.button, event.time ) + self.mintMenuWin.grab() def searchPopup( self, widget=None, event=None ): menu = gtk.Menu() @@ -1067,6 +1070,7 @@ class pluginclass( object ): #menu.attach_to_widget(self.searchButton, None) #menu.reposition() #menu.reposition() + self.mintMenuWin.grab() self.focusSearchEntry() def pos_func(self, menu=None): diff --git a/usr/lib/linuxmint/mintMenu/plugins/places.py b/usr/lib/linuxmint/mintMenu/plugins/places.py index dc9d67b..5156016 100755 --- a/usr/lib/linuxmint/mintMenu/plugins/places.py +++ b/usr/lib/linuxmint/mintMenu/plugins/places.py @@ -19,216 +19,217 @@ from user import home gettext.install("mintmenu", "/usr/share/linuxmint/locale") class pluginclass( object ): - - def __init__( self, mintMenuWin, toggleButton ): - - self.mintMenuWin = mintMenuWin - self.toggleButton = toggleButton - - # Read GLADE file - gladefile = os.path.join( os.path.dirname( __file__ ), "places.glade" ) - wTree = gtk.glade.XML( gladefile, "mainWindow" ) - self.placesBtnHolder = wTree.get_widget( "places_button_holder" ) - self.editableBtnHolder = wTree.get_widget( "editable_button_holder" ) - self.scrolledWindow=wTree.get_widget("scrolledwindow2") - # These properties are NECESSARY to maintain consistency - # Set 'window' property for the plugin (Must be the root widget) - self.window = wTree.get_widget( "mainWindow" ) + def __init__( self, mintMenuWin, toggleButton ): - # Set 'heading' property for plugin - self.heading = _("Places") + self.mintMenuWin = mintMenuWin + self.toggleButton = toggleButton - # This should be the first item added to the window in glade - self.content_holder = wTree.get_widget( "Places" ) + # Read GLADE file + gladefile = os.path.join( os.path.dirname( __file__ ), "places.glade" ) + wTree = gtk.glade.XML( gladefile, "mainWindow" ) + self.placesBtnHolder = wTree.get_widget( "places_button_holder" ) + self.editableBtnHolder = wTree.get_widget( "editable_button_holder" ) + self.scrolledWindow=wTree.get_widget("scrolledwindow2") + # These properties are NECESSARY to maintain consistency - # Items to get custom colors - self.itemstocolor = [ wTree.get_widget( "viewport2" ) ] + # Set 'window' property for the plugin (Must be the root widget) + self.window = wTree.get_widget( "mainWindow" ) - # Gconf stuff - self.gconf = EasyGConf( "/apps/mintMenu/plugins/places/" ) + # Set 'heading' property for plugin + self.heading = _("Places") - self.gconf.notifyAdd( "icon_size", self.RegenPlugin ) - self.gconf.notifyAdd( "show_computer", self.RegenPlugin ) - self.gconf.notifyAdd( "show_desktop", self.RegenPlugin ) - self.gconf.notifyAdd( "show_home_folder", self.RegenPlugin ) - self.gconf.notifyAdd( "show_network", self.RegenPlugin ) - self.gconf.notifyAdd( "show_trash", self.RegenPlugin ) - self.gconf.notifyAdd( "custom_names", self.RegenPlugin ) - self.gconf.notifyAdd( "custom_paths", self.RegenPlugin ) - self.gconf.notifyAdd( "allowScrollbar", self.RegenPlugin ) - self.gconf.notifyAdd( "height", self.changePluginSize ) - self.gconf.notifyAdd( "width", self.changePluginSize ) - self.gconf.bindGconfEntryToVar( "bool", "sticky", self, "sticky" ) + # This should be the first item added to the window in glade + self.content_holder = wTree.get_widget( "Places" ) - self.GetGconfEntries() - - self.content_holder.set_size_request( self.width, self.height ) + # Items to get custom colors + self.itemstocolor = [ wTree.get_widget( "viewport2" ) ] - def wake (self) : - if ( self.showtrash == True ): - self.refreshTrash() + # Gconf stuff + self.gconf = EasyGConf( "/apps/mintMenu/plugins/places/" ) - def destroy( self ): - self.gconf.notifyRemoveAll() + self.gconf.notifyAdd( "icon_size", self.RegenPlugin ) + self.gconf.notifyAdd( "show_computer", self.RegenPlugin ) + self.gconf.notifyAdd( "show_desktop", self.RegenPlugin ) + self.gconf.notifyAdd( "show_home_folder", self.RegenPlugin ) + self.gconf.notifyAdd( "show_network", self.RegenPlugin ) + self.gconf.notifyAdd( "show_trash", self.RegenPlugin ) + self.gconf.notifyAdd( "custom_names", self.RegenPlugin ) + self.gconf.notifyAdd( "custom_paths", self.RegenPlugin ) + self.gconf.notifyAdd( "allowScrollbar", self.RegenPlugin ) + self.gconf.notifyAdd( "height", self.changePluginSize ) + self.gconf.notifyAdd( "width", self.changePluginSize ) + self.gconf.bindGconfEntryToVar( "bool", "sticky", self, "sticky" ) - def changePluginSize( self, client, connection_id, entry, args ): - self.allowScrollbar = self.gconf.get( "bool", "allowScrollbar", False) - if entry.get_key() == self.gconf.gconfDir+"width": - self.width = entry.get_value().get_int() - elif entry.get_key() == self.gconf.gconfDir+"height": - if (self.allowScrollbar == False): - self.height = -1 - self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER ) - else: - self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC ) - self.height = entry.get_value().get_int() + 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) : + if ( self.showtrash == True ): + self.refreshTrash() + + def destroy( self ): + self.gconf.notifyRemoveAll() + + def changePluginSize( self, client, connection_id, entry, args ): + self.allowScrollbar = self.gconf.get( "bool", "allowScrollbar", False) + if entry.get_key() == self.gconf.gconfDir+"width": + self.width = entry.get_value().get_int() + elif entry.get_key() == self.gconf.gconfDir+"height": + if (self.allowScrollbar == False): + self.height = -1 + self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER ) + else: + self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC ) + self.height = entry.get_value().get_int() + + self.content_holder.set_size_request( self.width, self.height ) - def RegenPlugin( self, *args, **kargs ): - self.GetGconfEntries() - self.ClearAll() - self.do_standard_places() - self.do_custom_places() - def GetGconfEntries( self ): + def RegenPlugin( self, *args, **kargs ): + self.GetGconfEntries() + self.ClearAll() + self.do_standard_places() + self.do_custom_places() - self.width = self.gconf.get( "int", "width", 200 ) - self.allowScrollbar = self.gconf.get( "bool", "allowScrollbar", False) - self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC ) - self.height = self.gconf.get( "int", "height", 180 ) - self.content_holder.set_size_request( self.width, self.height ) - if (self.allowScrollbar == False): - self.height = -1 - self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER ) - self.content_holder.set_size_request( self.width, self.height ) - self.execapp = self.gconf.get( "string", "execute_app", "nautilus" ) - self.iconsize = self.gconf.get( "int","icon_size", 2 ) - - # Check default items - - self.showcomputer = self.gconf.get( "bool", "show_computer", True ) - self.showhomefolder = self.gconf.get( "bool", "show_home_folder", True ) - self.shownetwork = self.gconf.get( "bool", "show_network", True ) - self.showdesktop = self.gconf.get( "bool", "show_desktop", True ) - self.showtrash = self.gconf.get( "bool", "show_trash", True ) - - # Get paths for custom items - - self.custompaths = self.gconf.get( "list-string", "custom_paths", [ ] ) - - # Get names for custom items - - self.customnames = self.gconf.get( "list-string", "custom_names", [ ] ) + def GetGconfEntries( self ): - # Hide vertical dotted separator - self.hideseparator = self.gconf.get( "bool", "hide_separator", False ) - # Plugin icon - self.icon = self.gconf.get( "string", 'icon', "gnome-fs-directory.png" ) - # Allow plugin to be minimized to the left plugin pane - self.sticky = self.gconf.get( "bool", "sticky", False ) - self.minimized = self.gconf.get( "bool", "minimized", False ) + self.width = self.gconf.get( "int", "width", 200 ) + self.allowScrollbar = self.gconf.get( "bool", "allowScrollbar", False) + self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC ) + self.height = self.gconf.get( "int", "height", 180 ) + self.content_holder.set_size_request( self.width, self.height ) + if (self.allowScrollbar == False): + self.height = -1 + self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER ) + self.content_holder.set_size_request( self.width, self.height ) + self.execapp = self.gconf.get( "string", "execute_app", "nautilus" ) + self.iconsize = self.gconf.get( "int","icon_size", 2 ) - def ClearAll(self): - for child in self.placesBtnHolder.get_children(): - child.destroy() - for child in self.editableBtnHolder.get_children(): - child.destroy() + # Check default items - #Add standard places - def do_standard_places( self ): + self.showcomputer = self.gconf.get( "bool", "show_computer", True ) + self.showhomefolder = self.gconf.get( "bool", "show_home_folder", True ) + self.shownetwork = self.gconf.get( "bool", "show_network", True ) + self.showdesktop = self.gconf.get( "bool", "show_desktop", True ) + self.showtrash = self.gconf.get( "bool", "show_trash", True ) - if ( self.showcomputer == True ): - Button1 = easyButton( "computer", self.iconsize, [_("Computer")], -1, -1 ) - Button1.connect( "clicked", self.ButtonClicked, "nautilus computer:" ) - Button1.show() - self.placesBtnHolder.pack_start( Button1, False, False ) - self.mintMenuWin.setTooltip( Button1, _("Browse all local and remote disks and folders accessible from this computer") ) + # Get paths for custom items - if ( self.showhomefolder == True ): - Button2 = easyButton( "user-home", self.iconsize, [_("Home Folder")], -1, -1 ) - Button2.connect( "clicked", self.ButtonClicked, "nautilus" ) - Button2.show() - self.placesBtnHolder.pack_start( Button2, False, False ) - self.mintMenuWin.setTooltip( Button2, _("Open your personal folder") ) + self.custompaths = self.gconf.get( "list-string", "custom_paths", [ ] ) - if ( self.shownetwork == True ): - Button3 = easyButton( "network-workgroup", self.iconsize, [_("Network")], -1, -1 ) - Button3.connect( "clicked", self.ButtonClicked, "nautilus network:" ) - Button3.show() - self.placesBtnHolder.pack_start( Button3, False, False ) - self.mintMenuWin.setTooltip( Button3, _("Browse bookmarked and local network locations") ) - - if ( self.showdesktop == True ): - # Determine where the Desktop folder is (could be localized) - desktopDir = home + "/Desktop" - try: - import sys - sys.path.append('/usr/lib/linuxmint/common') - from configobj import ConfigObj - config = ConfigObj(home + "/.config/user-dirs.dirs") - tmpdesktopDir = config['XDG_DESKTOP_DIR'] - tmpdesktopDir = commands.getoutput("echo " + tmpdesktopDir) - if os.path.exists(tmpdesktopDir): - desktopDir = tmpdesktopDir - except Exception, detail: - print detail - Button4 = easyButton( "gnome-fs-desktop", self.iconsize, [_("Desktop")], -1, -1 ) - Button4.connect( "clicked", self.ButtonClicked, "nautilus \"" + desktopDir + "\"") - Button4.show() - self.placesBtnHolder.pack_start( Button4, False, False ) - self.mintMenuWin.setTooltip( Button4, _("Browse items placed on the desktop") ) + # Get names for custom items - if ( self.showtrash == True ): - self.trashButton = easyButton( "user-trash", self.iconsize, [_("Trash")], -1, -1 ) - self.trashButton.connect( "clicked", self.ButtonClicked, "nautilus trash:" ) - self.trashButton.show() - self.trashButton.connect( "button-release-event", self.trashPopup ) - self.refreshTrash() - self.placesBtnHolder.pack_start( self.trashButton, False, False ) - self.mintMenuWin.setTooltip( self.trashButton, _("Browse deleted files") ) - - def do_custom_places( self ): - for index in range( len(self.custompaths) ): - path = self.custompaths[index] - path = path.replace("~", home) - command = ( "nautilus \"" + path + "\"") - currentbutton = easyButton( "folder", self.iconsize, [self.customnames[index]], -1, -1 ) - currentbutton.connect( "clicked", self.ButtonClicked, command ) - currentbutton.show() - self.placesBtnHolder.pack_start( currentbutton, False, False ) + self.customnames = self.gconf.get( "list-string", "custom_names", [ ] ) - def trashPopup( self, widget, event ): - if event.button == 3: - trashMenu = gtk.Menu() - emptyTrashMenuItem = gtk.MenuItem(_("Empty trash")) - trashMenu.append(emptyTrashMenuItem) - trashMenu.show_all() - emptyTrashMenuItem.connect ( "activate", self.emptyTrash, widget ) - trashMenu.popup( None, None, None, event.button, event.time ) + # Hide vertical dotted separator + self.hideseparator = self.gconf.get( "bool", "hide_separator", False ) + # Plugin icon + self.icon = self.gconf.get( "string", 'icon', "gnome-fs-directory.png" ) + # Allow plugin to be minimized to the left plugin pane + self.sticky = self.gconf.get( "bool", "sticky", False ) + self.minimized = self.gconf.get( "bool", "minimized", False ) - 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 ClearAll(self): + for child in self.placesBtnHolder.get_children(): + child.destroy() + for child in self.editableBtnHolder.get_children(): + child.destroy() - def ButtonClicked( self, widget, Exec ): - self.mintMenuWin.hide() - if Exec: - Execute( Exec ) + #Add standard places + def do_standard_places( self ): - def do_plugin( self ): - self.do_standard_places() - self.do_custom_places() + if ( self.showcomputer == True ): + Button1 = easyButton( "computer", self.iconsize, [_("Computer")], -1, -1 ) + Button1.connect( "clicked", self.ButtonClicked, "nautilus computer:" ) + Button1.show() + self.placesBtnHolder.pack_start( Button1, False, False ) + self.mintMenuWin.setTooltip( Button1, _("Browse all local and remote disks and folders accessible from this computer") ) - 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) + if ( self.showhomefolder == True ): + Button2 = easyButton( "user-home", self.iconsize, [_("Home Folder")], -1, -1 ) + Button2.connect( "clicked", self.ButtonClicked, "nautilus" ) + Button2.show() + self.placesBtnHolder.pack_start( Button2, False, False ) + self.mintMenuWin.setTooltip( Button2, _("Open your personal folder") ) + if ( self.shownetwork == True ): + Button3 = easyButton( "network-workgroup", self.iconsize, [_("Network")], -1, -1 ) + Button3.connect( "clicked", self.ButtonClicked, "nautilus network:" ) + Button3.show() + self.placesBtnHolder.pack_start( Button3, False, False ) + self.mintMenuWin.setTooltip( Button3, _("Browse bookmarked and local network locations") ) + + if ( self.showdesktop == True ): + # Determine where the Desktop folder is (could be localized) + desktopDir = home + "/Desktop" + try: + import sys + sys.path.append('/usr/lib/linuxmint/common') + from configobj import ConfigObj + config = ConfigObj(home + "/.config/user-dirs.dirs") + tmpdesktopDir = config['XDG_DESKTOP_DIR'] + tmpdesktopDir = commands.getoutput("echo " + tmpdesktopDir) + if os.path.exists(tmpdesktopDir): + desktopDir = tmpdesktopDir + except Exception, detail: + print detail + Button4 = easyButton( "gnome-fs-desktop", self.iconsize, [_("Desktop")], -1, -1 ) + Button4.connect( "clicked", self.ButtonClicked, "nautilus \"" + desktopDir + "\"") + Button4.show() + self.placesBtnHolder.pack_start( Button4, False, False ) + self.mintMenuWin.setTooltip( Button4, _("Browse items placed on the desktop") ) + + if ( self.showtrash == True ): + self.trashButton = easyButton( "user-trash", self.iconsize, [_("Trash")], -1, -1 ) + self.trashButton.connect( "clicked", self.ButtonClicked, "nautilus trash:" ) + self.trashButton.show() + self.trashButton.connect( "button-release-event", self.trashPopup ) + self.refreshTrash() + self.placesBtnHolder.pack_start( self.trashButton, False, False ) + self.mintMenuWin.setTooltip( self.trashButton, _("Browse deleted files") ) + + def do_custom_places( self ): + for index in range( len(self.custompaths) ): + path = self.custompaths[index] + path = path.replace("~", home) + command = ( "nautilus \"" + path + "\"") + currentbutton = easyButton( "folder", self.iconsize, [self.customnames[index]], -1, -1 ) + currentbutton.connect( "clicked", self.ButtonClicked, command ) + currentbutton.show() + self.placesBtnHolder.pack_start( currentbutton, False, False ) + + def trashPopup( self, widget, event ): + if event.button == 3: + trashMenu = gtk.Menu() + emptyTrashMenuItem = gtk.MenuItem(_("Empty trash")) + trashMenu.append(emptyTrashMenuItem) + trashMenu.show_all() + emptyTrashMenuItem.connect ( "activate", self.emptyTrash, widget ) + 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 ): + self.mintMenuWin.hide() + if Exec: + Execute( Exec ) + + def do_plugin( self ): + self.do_standard_places() + self.do_custom_places() + + 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)