diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index adc93fd19..32179281b 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -480,6 +480,9 @@ class AdvancedTab(SettingsTab): # Default to False on Gnome. x11_bypass_default = bool(not os.environ.get(u'GNOME_DESKTOP_SESSION_ID')) + # Default to False on XFce + if os.environ.get(u'DESKTOP_SESSION') == u'xfce': + x11_bypass_default = False self.x11BypassCheckBox.setChecked( settings.value(u'x11 bypass wm', x11_bypass_default)) self.defaultColor = settings.value(u'default color', u'#ffffff') diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 7193ad024..2f5b98edc 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -142,6 +142,9 @@ class MainDisplay(Display): # Default to False on Gnome. x11_bypass_default = bool(not os.environ.get(u'GNOME_DESKTOP_SESSION_ID')) + # Default to False on XFce + if os.environ.get(u'DESKTOP_SESSION') == u'xfce': + x11_bypass_default = False if Settings().value(u'advanced/x11 bypass wm', x11_bypass_default): windowFlags |= QtCore.Qt.X11BypassWindowManagerHint # TODO: The following combination of windowFlags works correctly diff --git a/openlp/plugins/custom/forms/editcustomdialog.py b/openlp/plugins/custom/forms/editcustomdialog.py index d1f2f4e8e..5b4deff44 100644 --- a/openlp/plugins/custom/forms/editcustomdialog.py +++ b/openlp/plugins/custom/forms/editcustomdialog.py @@ -74,9 +74,9 @@ class Ui_CustomEditDialog(object): self.buttonLayout.addWidget(self.deleteButton) self.buttonLayout.addStretch() self.upButton = create_button(customEditDialog, u'upButton', role=u'up', - enable=False, click=customEditDialog.onUpButtonClicked) + enabled=False, click=customEditDialog.onUpButtonClicked) self.downButton = create_button(customEditDialog, u'downButton', - role=u'down', enable=False, + role=u'down', enabled=False, click=customEditDialog.onDownButtonClicked) self.buttonLayout.addWidget(self.upButton) self.buttonLayout.addWidget(self.downButton) diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index 450849e2c..e41529f64 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -34,11 +34,11 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import build_icon, Receiver, SettingsManager, translate, \ +from openlp.core.lib import build_icon, Receiver, translate, \ create_separated_list from openlp.core.lib.ui import UiStrings, critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings -from openlp.core.utils import locale_direct_compare +from openlp.plugins.songs.lib import natcmp from openlp.plugins.songs.lib.db import Song from openlp.plugins.songs.lib.openlyricsexport import OpenLyricsExport @@ -252,8 +252,7 @@ class SongExportForm(OpenLPWizard): # Load the list of songs. Receiver.send_message(u'cursor_busy') songs = self.plugin.manager.get_all_objects(Song) - songs.sort( - cmp=locale_direct_compare, key=lambda song: song.sort_string) + songs.sort(cmp=natcmp, key=lambda song: song.sort_key) for song in songs: # No need to export temporary songs. if song.temporary: diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index bb68cb3ec..0d4b523ae 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -28,10 +28,10 @@ ############################################################################### import re -from PyQt4 import QtGui +from PyQt4 import QtGui, QtCore from openlp.core.lib import translate -from openlp.core.utils import CONTROL_CHARS +from openlp.core.utils import CONTROL_CHARS, locale_direct_compare from db import Author from ui import SongStrings @@ -594,6 +594,40 @@ def strip_rtf(text, default_encoding=None): text = u''.join(out) return text, default_encoding +def natcmp(a, b): + """ + Natural string comparison which mimics the behaviour of Python's internal + cmp function. + """ + if len(a) <= len(b): + for i, key in enumerate(a): + if isinstance(key, int) and isinstance(b[i], int): + result = cmp(key, b[i]) + elif isinstance(key, int) and not isinstance(b[i], int): + result = locale_direct_compare(QtCore.QString(str(key)), b[i]) + elif not isinstance(key, int) and isinstance(b[i], int): + result = locale_direct_compare(key, QtCore.QString(str(b[i]))) + else: + result = locale_direct_compare(key, b[i]) + if result != 0: + return result + if len(a) == len(b): + return 0 + else: + return -1 + else: + for i, key in enumerate(b): + if isinstance(a[i], int) and isinstance(key, int): + result = cmp(a[i], key) + elif isinstance(a[i], int) and not isinstance(key, int): + result = locale_direct_compare(QtCore.QString(str(a[i])), key) + elif not isinstance(a[i], int) and isinstance(key, int): + result = locale_direct_compare(a[i], QtCore.QString(str(key))) + else: + result = locale_direct_compare(a[i], key) + if result != 0: + return result + return 1 from xml import OpenLyrics, SongXML from songstab import SongsTab diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index a6419de20..fd927223d 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -39,54 +39,17 @@ from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ translate, check_item_selected, PluginStatus, create_separated_list, \ check_directory_exists, ServiceItemContext, Settings from openlp.core.lib.ui import UiStrings, create_widget_action -from openlp.core.utils import AppLocation, locale_direct_compare +from openlp.core.utils import AppLocation from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \ SongImportForm, SongExportForm from openlp.plugins.songs.lib import OpenLyrics, SongXML, VerseType, \ - clean_string + clean_string, natcmp from openlp.plugins.songs.lib.db import Author, Song, Book, MediaFile from openlp.plugins.songs.lib.ui import SongStrings log = logging.getLogger(__name__) -def natcmp(a, b): - """ - Natural string comparison which mimics the behaviour of Python's internal - cmp function. - """ - log.debug('a: %s; b: %s', a, b) - if len(a) <= len(b): - for i, key in enumerate(a): - if isinstance(key, int) and isinstance(b[i], int): - result = cmp(key, b[i]) - elif isinstance(key, int) and not isinstance(b[i], int): - result = locale_direct_compare(str(key), b[i]) - elif not isinstance(key, int) and isinstance(b[i], int): - result = locale_direct_compare(key, str(b[i])) - else: - result = locale_direct_compare(key, b[i]) - if result != 0: - return result - if len(a) == len(b): - return 0 - else: - return -1 - else: - for i, key in enumerate(b): - if isinstance(a[i], int) and isinstance(key, int): - result = cmp(a[i], key) - elif isinstance(a[i], int) and not isinstance(key, int): - result = locale_direct_compare(str(a[i]), key) - elif not isinstance(a[i], int) and isinstance(key, int): - result = locale_direct_compare(a[i], str(key)) - else: - result = locale_direct_compare(a[i], key) - if result != 0: - return result - return 1 - - class SongSearch(object): """ An enumeration for song search methods.