Convert applications plugin to gsettings

This commit is contained in:
Michael Webster 2013-03-05 20:31:58 -05:00
parent 49c0803f70
commit 3884197e01
4 changed files with 285 additions and 69 deletions

View File

@ -18,7 +18,7 @@ import filecmp
from easybuttons import *
from execute import Execute
from easygconf import EasyGConf
from easygsettings import EasyGSettings
from easyfiles import *
#from filemonitor import monitor as filemonitor
@ -270,27 +270,27 @@ class pluginclass( object ):
#FIX self.showFavoritesButton.drag_dest_set( gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_HIGHLIGHT | gtk.DEST_DEFAULT_DROP, self.toButton, gtk.gdk.ACTION_COPY )
# self.searchButton.connect( "button_release_event", self.SearchWithButton )
try:
# GSettings stuff
self.settings = EasyGSettings( "com.linuxmint.mintmenu.plugins.applications" )
self.GetGSettingsEntries()
self.settings.notifyAdd( "icon-size", self.changeIconSize )
self.settings.notifyAdd( "favicon-size", self.changeFavIconSize )
self.settings.notifyAdd( "height", self.changePluginSize )
self.settings.notifyAdd( "width", self.changePluginSize )
self.settings.notifyAdd( "categories-mouse-over", self.changeCategoriesMouseOver )
self.settings.notifyAdd( "swap-generic-name", self.changeSwapGenericName )
self.settings.notifyAdd( "show-category-icons", self.changeShowCategoryIcons )
self.settings.notifyAdd( "show-application-comments", self.changeShowApplicationComments )
self.settings.notifyAdd( "use-apt", self.switchAPTUsage)
self.settings.notifyAdd( "fav-cols", self.changeFavCols )
self.gconfHandlers = []
# Gconf stuff
self.gconf = EasyGConf( "/apps/mintMenu/plugins/applications/" )
self.GetGconfEntries()
self.gconf.notifyAdd( "icon_size", self.changeIconSize )
self.gconf.notifyAdd( "favicon_size", self.changeFavIconSize )
self.gconf.notifyAdd( "height", self.changePluginSize )
self.gconf.notifyAdd( "width", self.changePluginSize )
self.gconf.notifyAdd( "categories_mouse_over", self.changeCategoriesMouseOver )
self.gconf.notifyAdd( "swap_generic_name", self.changeSwapGenericName )
self.gconf.notifyAdd( "show_category_icons", self.changeShowCategoryIcons )
self.gconf.notifyAdd( "show_application_comments", self.changeShowApplicationComments )
self.gconf.notifyAdd( "use_apt", self.switchAPTUsage)
self.gconf.notifyAdd( "fav_cols", self.changeFavCols )
self.gconf.bindGconfEntryToVar( "int", "category_hover_delay", self, "categoryhoverdelay" )
self.gconf.bindGconfEntryToVar( "bool", "do_not_filter", self, "donotfilterapps" )
self.gconf.bindGconfEntryToVar( "string", "search_command", self, "searchtool" )
self.gconf.bindGconfEntryToVar( "int", "default_tab", self, "defaultTab" )
self.settings.bindGSettingsEntryToVar( "int", "category-hover-delay", self, "categoryhoverdelay" )
self.settings.bindGSettingsEntryToVar( "bool", "do-not-filter", self, "donotfilterapps" )
self.settings.bindGSettingsEntryToVar( "string", "search-command", self, "searchtool" )
self.settings.bindGSettingsEntryToVar( "int", "default-tab", self, "defaultTab" )
except Exception, detail:
print detail
self.currentFavCol = 0
self.favorites = []
@ -363,30 +363,30 @@ class pluginclass( object ):
self.categoriesBox.destroy()
self.favoritesBox.destroy()
self.gconf.notifyRemoveAll()
self.settings.notifyRemoveAll()
#for mId in self.menuFileMonitors:
# filemonitor.removeMonitor( mId )
def changePluginSize( self, client, connection_id, entry, args ):
if entry.get_key() == self.gconf.gconfDir+"width":
self.width = entry.get_value().get_int()
def changePluginSize( self, settings, key, args ):
if key == "width":
self.width = settings.get_int(key)
self.categoriesBox.set_size_request( self.width / 3, -1 )
self.applicationsBox.set_size_request( self.width / 2, -1 )
elif entry.get_key() == self.gconf.gconfDir+"height":
self.heigth = entry.get_value().get_int()
elif key == "height":
self.heigth = settings.get_int(key)
self.content_holder.set_size_request( self.width, self.height )
def changeSwapGenericName( self, client, connection_id, entry, args ):
self.swapgeneric = entry.get_value().get_bool()
def changeSwapGenericName( self, settings, key, args ):
self.swapgeneric = settings.get_boolean(key)
for child in self.favoritesBox:
if isinstance( child, FavApplicationLauncher):
child.setSwapGeneric( self.swapgeneric )
def changeShowCategoryIcons( self, client, connection_id, entry, args ):
self.showcategoryicons = entry.get_value().get_bool()
def changeShowCategoryIcons( self, settings, key, args ):
self.showcategoryicons = settings.get_boolean(key)
if self.showcategoryicons:
categoryIconSize = self.iconSize
@ -396,8 +396,8 @@ class pluginclass( object ):
for child in self.categoriesBox:
child.setIconSize( categoryIconSize )
def changeIconSize( self, client, connection_id, entry, args ):
self.iconSize = entry.get_value().get_int()
def changeIconSize( self, settings, key, args ):
self.iconSize = settings.get_int(key)
if self.showcategoryicons:
categoryIconSize = self.iconSize
@ -413,24 +413,24 @@ class pluginclass( object ):
except:
pass
def changeFavIconSize( self, client, connection_id, entry, args ):
self.faviconsize = entry.get_value().get_int()
def changeFavIconSize( self, settings, key, args ):
self.faviconsize = settings.get_int(key)
for child in self.favoritesBox:
if isinstance( child, FavApplicationLauncher):
child.setIconSize( self.faviconsize )
def switchAPTUsage( self, client, connection_id, entry, args ):
self.useAPT = entry.get_value().get_bool()
def switchAPTUsage( self, settings, key, args ):
self.useAPT = settings.get_boolean(key)
self.refresh_apt_cache()
def changeShowApplicationComments( self, client, connection_id, entry, args ):
self.showapplicationcomments = entry.get_value().get_bool()
def changeShowApplicationComments( self, settings, key, args ):
self.showapplicationcomments = settings.get_boolean(key)
for child in self.applicationsBox:
child.setShowComment( self.showapplicationcomments )
def changeCategoriesMouseOver( self, client, connection_id, entry, args ):
self.categories_mouse_over = entry.get_value().get_bool()
def changeCategoriesMouseOver( self, settings, key, args ):
self.categories_mouse_over = settings.get_boolean(key)
for child in self.categoriesBox:
if self.categories_mouse_over and not child.mouseOverHandlerIds:
startId = child.connect( "enter", self.StartFilter, child.filter )
@ -441,8 +441,8 @@ class pluginclass( object ):
child.disconnect( child.mouseOverHandlerIds[1] )
child.mouseOverHandlerIds = None
def changeFavCols(self, client, connection_id, entry, args):
self.favCols = entry.get_value().get_int()
def changeFavCols(self, settings, key, args):
self.favCols = settings.get_int(key)
for fav in self.favorites:
self.favoritesBox.remove( fav )
self.favoritesPositionOnGrid( fav )
@ -459,7 +459,7 @@ class pluginclass( object ):
oldhideseparator = self.hideseparator
oldshowapplicationcomments = self.showapplicationcomments
self.GetGconfEntries()
self.GetGSettingsEntries()
# if the config hasn't changed return
if oldcategories_mouse_over == self.categories_mouse_over and oldiconsize == self.iconSize and oldfaviconsize == self.faviconsize and oldtotalrecent == self.totalrecent and oldswapgeneric == self.swapgeneric and oldshowcategoryicons == self.showcategoryicons and oldcategoryhoverdelay == self.categoryhoverdelay and oldsticky == self.sticky and oldminimized == self.minimized and oldicon == self.icon and oldhideseparator == self.hideseparator and oldshowapplicationcomments == self.showapplicationcomments:
@ -469,46 +469,46 @@ class pluginclass( object ):
self.buildFavorites()
self.RebuildPlugin()
def GetGconfEntries( self ):
def GetGSettingsEntries( self ):
self.categories_mouse_over = self.gconf.get( "bool", "categories_mouse_over", True )
self.width = self.gconf.get( "int", "width", 480 )
self.height = self.gconf.get( "int", "height", 410 )
self.donotfilterapps = self.gconf.get( "bool", "do_not_filter", False )
self.iconSize = self.gconf.get( "int", "icon_size", 22 )
self.faviconsize = self.gconf.get( "int", "favicon_size", 48 )
self.favCols = self.gconf.get( "int", "fav_cols", 2 )
self.swapgeneric = self.gconf.get( "bool", "swap_generic_name", False )
self.showcategoryicons = self.gconf.get( "bool", "show_category_icons", True )
self.categoryhoverdelay = self.gconf.get( "int", "category_hover_delay", 150 )
self.showapplicationcomments = self.gconf.get( "bool", "show_application_comments", True )
self.useAPT = self.gconf.get( "bool", "use_apt", True )
self.categories_mouse_over = self.settings.get( "bool", "categories-mouse-over")
self.width = self.settings.get( "int", "width")
self.height = self.settings.get( "int", "height")
self.donotfilterapps = self.settings.get( "bool", "do-not-filter")
self.iconSize = self.settings.get( "int", "icon-size")
self.faviconsize = self.settings.get( "int", "favicon-size")
self.favCols = self.settings.get( "int", "fav-cols")
self.swapgeneric = self.settings.get( "bool", "swap-generic-name")
self.showcategoryicons = self.settings.get( "bool", "show-category-icons")
self.categoryhoverdelay = self.settings.get( "int", "category-hover-delay")
self.showapplicationcomments = self.settings.get( "bool", "show-application-comments")
self.useAPT = self.settings.get( "bool", "use-apt")
self.lastActiveTab = self.gconf.get( "int", "last_active_tab", 0 )
self.defaultTab = self.gconf.get( "int", "default_tab", -1 )
self.lastActiveTab = self.settings.get( "int", "last-active-tab")
self.defaultTab = self.settings.get( "int", "default-tab")
# 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.sticky = self.settings.get( "bool", "sticky")
self.minimized = self.settings.get( "bool", "minimized")
# Search tool
self.searchtool = self.gconf.get( "string", "search_command", "mate-search-tool --named \"%s\" --start" )
self.searchtool = self.settings.get( "string", "search-command")
if self.searchtool == "beagle-search SEARCH_STRING":
self.searchtool = "mate-search-tool --named \"%s\" --start"
self.gconf.set( "string", "search_command", "mate-search-tool --named \"%s\" --start" )
self.settings.set( "string", "search-command", "mate-search-tool --named \"%s\" --start" )
# Plugin icon
self.icon = self.gconf.get( "string", "icon", "applications-accessories" )
self.icon = self.settings.get( "string", "icon" )
# Hide vertical dotted separator
self.hideseparator = self.gconf.get( "bool", "hide_separator", False )
self.hideseparator = self.settings.get( "bool", "hide-separator")
def SetHidden( self, state ):
if state == True:
self.gconf.set( "bool", "minimized", True )
self.settings.set( "bool", "minimized", True )
else:
self.gconf.set( "bool", "minimized", False )
self.settings.set( "bool", "minimized", False )
def RebuildPlugin(self):
self.content_holder.set_size_request( self.width, self.height )
@ -536,7 +536,7 @@ class pluginclass( object ):
self.searchEntry.select_region( 0, -1 )
def onHideMenu( self ):
self.gconf.set( "int", "last_active_tab", self.lastActiveTab )
self.settings.set( "int", "last-active-tab", self.lastActiveTab )
def changeTab( self, tabNum ):
notebook = self.builder.get_object( "notebook2" )

View File

@ -7,7 +7,7 @@ from gi.repository import GObject
import os.path
import shutil
import re
#from execute import *
from execute import *
import xdg.DesktopEntry
import xdg.Menu
from filemonitor import monitor as filemonitor

View File

@ -0,0 +1,94 @@
#!/usr/bin/env python
import mateconf
from gi.repository import Gio
class EasyGSettings:
def __init__( self, schema = None ):
self.schema = schema
self.settings = Gio.Settings.new(self.schema)
self.handlerIds = [ ]
def get( self, type, key ):
if type == "bool":
return self.settings.get_boolean( key )
if type == "string":
return self.settings.get_string( key )
if type == "int":
return self.settings.get_int( key )
if type == "color":
color = self.settings.get_string( key )
if not self.evalColor( color ):
self.settings.set_string(key, "#ffffff")
return "#ffffff"
return color
t = type.split("-")
if len(t) == 2 and t[0] == "list":
return self.settings.get_strv( key )
return self.settings.get( key )
def set( self, type, key, value ):
if type == "bool":
return self.settings.set_boolean( key, value )
if type == "string":
return self.settings.set_string( key, value )
if type == "int":
return self.settings.set_int( key, value )
if type == "color":
if self.evalColor( value ):
return self.settings.set_string( key, value )
else:
return self.settings.set_string( key, "#ffffff" )
t = type.split("-")
if len(t) == 2 and t[0] == "list":
return self.settings.set_strv( key, value )
return self.settings.set( key, value )
def notifyAdd( self, key, callback, args = None ):
handlerId = self.settings.connect("changed::"+key, callback, args)
self.handlerIds.append( handlerId )
return handlerId
def notifyRemove( self, handlerId ):
return self.settings.disconnect(handlerId)
def notifyRemoveAll( self ):
for handlerId in self.handlerIds:
self.settings.disconnect( handlerId )
def evalColor(self, colorToTest ):
if colorToTest[0] != '#' or len( colorToTest ) != 7:
return False
for i in colorToTest[1:]:
if i not in ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']:
return False
return True
def bindGSettingsEntryToVar( self, type, key, obj, varName ):
return self.notifyAdd( key, self.setVar, ( type, obj, varName ) )
def setVar( self, settings, key, args ):
type, obj, varName = args
if type == "string":
setattr( obj, varName, settings.get_string(key) )
elif type == "int":
setattr( obj, varName, settings.get_int(key) )
elif type == "float":
setattr( obj, varName, settings.get_float(key) )
elif type == "bool":
setattr( obj, varName, settings.get_boolean(key) )
else:
setattr( obj, varName, settings.get_value(key) )

View File

@ -195,4 +195,126 @@
</key>
</schema>
<schema id="com.linuxmint.mintmenu.plugins.applications" path="/com/linuxmint/mintmenu/plugins/applications/">
<key type="b" name="categories-mouse-over">
<default>true</default>
<summary></summary>
<description></description>
</key>
<key type="i" name="width">
<default>480</default>
<summary></summary>
<description></description>
</key>
<key type="i" name="height">
<default>410</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="do-not-filter">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="i" name="icon-size">
<default>22</default>
<summary></summary>
<description></description>
</key>
<key type="i" name="favicon-size">
<default>48</default>
<summary></summary>
<description></description>
</key>
<key type="i" name="fav-cols">
<default>2</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="swap-generic-name">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="show-category-icons">
<default>true</default>
<summary></summary>
<description></description>
</key>
<key type="i" name="category-hover-delay">
<default>150</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="show-application-comments">
<default>true</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="use-apt">
<default>true</default>
<summary></summary>
<description></description>
</key>
<key type="i" name="last-active-tab">
<default>0</default>
<summary></summary>
<description></description>
</key>
<key type="i" name="default-tab">
<default>-1</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="sticky">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="minimized">
<default>false</default>
<summary></summary>
<description></description>
</key>
<key type="s" name="search-command">
<default>"mate-search-tool --named \"%s\" --start"</default>
<summary></summary>
<description></description>
</key>
<key type="s" name="icon">
<default>"applications-accessories"</default>
<summary></summary>
<description></description>
</key>
<key type="b" name="hide-separator">
<default>false</default>
<summary></summary>
<description></description>
</key>
</schema>
</schemalist>