|
Lines 11-19
try:
Link Here
|
| 11 |
import gconf |
11 |
import gconf |
| 12 |
import json |
12 |
import json |
| 13 |
import dbus |
13 |
import dbus |
| 14 |
import tz |
|
|
| 15 |
import time |
| 16 |
from datetime import datetime |
| 17 |
from user import home |
14 |
from user import home |
| 18 |
import thread |
15 |
import thread |
| 19 |
except Exception, detail: |
16 |
except Exception, detail: |
|
Lines 738-982
class GSettingsComboBox(Gtk.HBox):
Link Here
|
| 738 |
value = self.model[tree_iter][0] |
735 |
value = self.model[tree_iter][0] |
| 739 |
self.settings.set_string(self.key, value) |
736 |
self.settings.set_string(self.key, value) |
| 740 |
|
737 |
|
| 741 |
class TimeZoneSelectorWidget(Gtk.HBox): |
|
|
| 742 |
def __init__(self): |
| 743 |
super(TimeZoneSelectorWidget, self).__init__() |
| 744 |
|
| 745 |
proxy = dbus.SystemBus().get_object("org.gnome.SettingsDaemon.DateTimeMechanism", "/") |
| 746 |
self.dbus_iface = dbus.Interface(proxy, dbus_interface="org.gnome.SettingsDaemon.DateTimeMechanism") |
| 747 |
|
| 748 |
self.timezones = tz.load_db() |
| 749 |
|
| 750 |
self.selected_region, self.selected_city = self.get_selected_zone() |
| 751 |
|
| 752 |
region_label = Gtk.Label(_("Region")) |
| 753 |
self.pack_start(region_label, False, False, 2) |
| 754 |
|
| 755 |
regions = self.timezones.keys() |
| 756 |
regions.sort() |
| 757 |
self.region_model = Gtk.ListStore(str, str) |
| 758 |
selected_region_iter = None |
| 759 |
for region in regions: |
| 760 |
iter = self.region_model.insert_before(None, None) |
| 761 |
self.region_model.set_value(iter, 0, region) |
| 762 |
self.region_model.set_value(iter, 1, region.replace("_", " ")) |
| 763 |
if (region == self.selected_region): |
| 764 |
selected_region_iter = iter |
| 765 |
|
| 766 |
self.region_widget = Gtk.ComboBox.new_with_model(self.region_model) |
| 767 |
renderer_text = Gtk.CellRendererText() |
| 768 |
self.region_widget.pack_start(renderer_text, True) |
| 769 |
self.region_widget.add_attribute(renderer_text, "text", 1) |
| 770 |
if selected_region_iter is not None: |
| 771 |
self.region_widget.set_active_iter(selected_region_iter) |
| 772 |
self.pack_start(self.region_widget, False, False, 2) |
| 773 |
|
| 774 |
city_label = Gtk.Label(_("City")) |
| 775 |
self.pack_start(city_label, False, False, 2) |
| 776 |
|
| 777 |
self.city_model = Gtk.ListStore(str, str) |
| 778 |
self.city_widget = Gtk.ComboBox.new_with_model(self.city_model) |
| 779 |
renderer_text = Gtk.CellRendererText() |
| 780 |
self.city_widget.pack_start(renderer_text, True) |
| 781 |
self.city_widget.add_attribute(renderer_text, "text", 1) |
| 782 |
self.pack_start(self.city_widget, False, False, 2) |
| 783 |
|
| 784 |
self.update_cities_list() |
| 785 |
|
| 786 |
self.region_widget.connect("changed", self.on_region_changed) |
| 787 |
self.city_widget.connect("changed", self.on_city_changed) |
| 788 |
def on_city_changed(self, widget): |
| 789 |
tree_iter = widget.get_active_iter() |
| 790 |
if tree_iter != None: |
| 791 |
self.selected_city = self.city_model[tree_iter][0] |
| 792 |
self.dbus_iface.SetTimezone(self.selected_region+"/"+self.selected_city) |
| 793 |
def on_region_changed(self, widget): |
| 794 |
tree_iter = widget.get_active_iter() |
| 795 |
if tree_iter != None: |
| 796 |
self.selected_region = self.region_model[tree_iter][0] |
| 797 |
self.update_cities_list() |
| 798 |
def update_cities_list(self): |
| 799 |
self.city_model.clear() |
| 800 |
if self.selected_region and self.selected_region in self.timezones.keys(): |
| 801 |
cities = self.timezones[self.selected_region] |
| 802 |
cities.sort() |
| 803 |
selected_city_iter = None |
| 804 |
for city in cities: |
| 805 |
iter = self.city_model.insert_before(None, None) |
| 806 |
self.city_model.set_value(iter, 0, city) |
| 807 |
self.city_model.set_value(iter, 1, city.replace("_", " ")) |
| 808 |
if (city == self.selected_city): |
| 809 |
selected_city_iter = iter |
| 810 |
if selected_city_iter is not None: |
| 811 |
self.city_widget.set_active_iter(selected_city_iter) |
| 812 |
def get_selected_zone(self): |
| 813 |
tz = self.dbus_iface.GetTimezone() |
| 814 |
if "/" in tz: |
| 815 |
i = tz.index("/") |
| 816 |
region = tz[:i] |
| 817 |
city = tz[i+1:] |
| 818 |
return region, city |
| 819 |
else: |
| 820 |
return "", "" |
| 821 |
|
| 822 |
class ChangeTimeWidget(Gtk.HBox): |
| 823 |
def __init__(self): |
| 824 |
super(ChangeTimeWidget, self).__init__() |
| 825 |
proxy = dbus.SystemBus().get_object("org.gnome.SettingsDaemon.DateTimeMechanism", "/") |
| 826 |
self.dbus_iface = dbus.Interface(proxy, dbus_interface="org.gnome.SettingsDaemon.DateTimeMechanism") |
| 827 |
|
| 828 |
# Ensures we are setting the system time only when the user changes it |
| 829 |
self.changedOnTimeout = False |
| 830 |
|
| 831 |
# Ensures we do not update the values in the date/time fields during the DBus call to set the time |
| 832 |
self._setting_time = False |
| 833 |
self._setting_time_lock = thread.allocate() |
| 834 |
self._time_to_set = None |
| 835 |
|
| 836 |
self.thirtyDays = [3, 5, 8, 10] |
| 837 |
months = ['January','February','March','April','May','June','July','August','September','October','November','December'] |
| 838 |
|
| 839 |
# Boxes |
| 840 |
timeBox = Gtk.HBox() |
| 841 |
dateBox = Gtk.HBox() |
| 842 |
|
| 843 |
# Combo Boxes |
| 844 |
self.monthBox = Gtk.ComboBoxText() |
| 845 |
|
| 846 |
for month in months: |
| 847 |
self.monthBox.append_text(month) |
| 848 |
|
| 849 |
# Adjustments |
| 850 |
hourAdj = Gtk.Adjustment(0, 0, 23, 1, 1) |
| 851 |
minAdj = Gtk.Adjustment(0, 0, 59, 1, 1) |
| 852 |
yearAdj = Gtk.Adjustment(0, 0, 9999, 1, 5) |
| 853 |
dayAdj = Gtk.Adjustment(0, 1, 31, 1, 1) |
| 854 |
|
| 855 |
# Spin buttons |
| 856 |
self.hourSpin = Gtk.SpinButton() |
| 857 |
self.minSpin = Gtk.SpinButton() |
| 858 |
self.yearSpin = Gtk.SpinButton() |
| 859 |
self.daySpin = Gtk.SpinButton() |
| 860 |
|
| 861 |
self.hourSpin.configure(hourAdj, 0.5, 0) |
| 862 |
self.minSpin.configure(minAdj, 0.5, 0) |
| 863 |
self.yearSpin.configure(yearAdj, 0.5, 0) |
| 864 |
self.daySpin.configure(dayAdj, 0.5, 0) |
| 865 |
#self.hourSpin.set_editable(False) |
| 866 |
#self.minSpin.set_editable(False) |
| 867 |
#self.yearSpin.set_editable(False) |
| 868 |
#self.daySpin.set_editable(False) |
| 869 |
|
| 870 |
self.update_time() |
| 871 |
GObject.timeout_add(1000, self.update_time) |
| 872 |
|
| 873 |
# Connect to callback |
| 874 |
self.hourSpin.connect('changed', self._change_system_time) |
| 875 |
self.minSpin.connect('changed', self._change_system_time) |
| 876 |
self.monthBox.connect('changed', self._change_system_time) |
| 877 |
self.yearSpin.connect('changed', self._change_system_time) |
| 878 |
self.daySpin.connect('changed', self._change_system_time) |
| 879 |
|
| 880 |
timeBox.pack_start(self.hourSpin, False, False, 2) |
| 881 |
timeBox.pack_start(Gtk.Label(_(":")), False, False, 2) |
| 882 |
timeBox.pack_start(self.minSpin, False, False, 2) |
| 883 |
|
| 884 |
dateBox.pack_start(self.monthBox, False, False, 2) |
| 885 |
dateBox.pack_start(self.daySpin, False, False, 2) |
| 886 |
dateBox.pack_start(self.yearSpin, False, False, 2) |
| 887 |
|
| 888 |
self.pack_start(Gtk.Label(_("Date : ")), False, False, 2) |
| 889 |
self.pack_start(dateBox, True, True, 2) |
| 890 |
self.pack_start(Gtk.Label(_("Time : ")), False, False, 2) |
| 891 |
self.pack_start(timeBox, True, True, 2) |
| 892 |
|
| 893 |
def update_time(self): |
| 894 |
self._setting_time_lock.acquire() |
| 895 |
do_update = not self._setting_time |
| 896 |
self._setting_time_lock.release() |
| 897 |
|
| 898 |
if not do_update: |
| 899 |
return True |
| 900 |
|
| 901 |
dt = datetime.now() |
| 902 |
|
| 903 |
self.changedOnTimeout = True |
| 904 |
|
| 905 |
# Time |
| 906 |
self.hourSpin.set_value( dt.hour ) |
| 907 |
self.minSpin.set_value( dt.minute ) |
| 908 |
|
| 909 |
# Date |
| 910 |
self.monthBox.set_active( dt.month-1 ) |
| 911 |
self.daySpin.set_value( dt.day ) |
| 912 |
self.yearSpin.set_value( dt.year ) |
| 913 |
|
| 914 |
self.changedOnTimeout = False |
| 915 |
|
| 916 |
# Update the max of the day spin box |
| 917 |
maxDay = 31 |
| 918 |
if dt.month == 2: |
| 919 |
if dt.year % 4 == 0: |
| 920 |
maxDay = 29 |
| 921 |
else: |
| 922 |
maxDay = 28 |
| 923 |
elif dt.month-1 in self.thirtyDays: |
| 924 |
maxDay = 30 |
| 925 |
|
| 926 |
self.daySpin.get_adjustment().set_upper(maxDay) |
| 927 |
|
| 928 |
return True |
| 929 |
|
| 930 |
def change_using_ntp(self, usingNtp): |
| 931 |
# Check if we were using Ntp by seeing if the spin button |
| 932 |
# is sensitive |
| 933 |
self.set_sensitive(not usingNtp) |
| 934 |
|
| 935 |
def _do_change_system_time(self): |
| 936 |
self._setting_time_lock.acquire() |
| 937 |
do_set = not self._setting_time |
| 938 |
self._setting_time = True |
| 939 |
self._setting_time_lock.release() |
| 940 |
|
| 941 |
# If there is already another thread updating the time, we let it do the job |
| 942 |
if not do_set: |
| 943 |
return |
| 944 |
|
| 945 |
done = False |
| 946 |
while not done: |
| 947 |
self._setting_time_lock.acquire() |
| 948 |
time_to_set = self._time_to_set |
| 949 |
self._time_to_set = None |
| 950 |
self._setting_time_lock.release() |
| 951 |
|
| 952 |
self.dbus_iface.SetTime(time_to_set) |
| 953 |
|
| 954 |
# Check whether another request to set the time was done since this thread started |
| 955 |
self._setting_time_lock.acquire() |
| 956 |
if self._time_to_set==None: |
| 957 |
done = True |
| 958 |
self._setting_time_lock.release() |
| 959 |
|
| 960 |
self._setting_time_lock.acquire() |
| 961 |
self._setting_time = False |
| 962 |
self._setting_time_lock.release() |
| 963 |
|
| 964 |
def _change_system_time(self, widget): |
| 965 |
if not self.changedOnTimeout: |
| 966 |
hour = int( self.hourSpin.get_value() ) |
| 967 |
minute = int( self.minSpin.get_value() ) |
| 968 |
month = self.monthBox.get_active() + 1 |
| 969 |
day = int( self.daySpin.get_value() ) |
| 970 |
year = int( self.yearSpin.get_value() ) |
| 971 |
|
| 972 |
newDt = datetime(year, month, day, hour, minute) |
| 973 |
|
| 974 |
self._setting_time_lock.acquire() |
| 975 |
self._time_to_set = time.mktime(newDt.utctimetuple()) |
| 976 |
self._setting_time_lock.release() |
| 977 |
|
| 978 |
thread.start_new_thread(self._do_change_system_time, ()) |
| 979 |
|
| 980 |
class TitleBarButtonsOrderSelector(Gtk.Table): |
738 |
class TitleBarButtonsOrderSelector(Gtk.Table): |
| 981 |
def __init__(self): |
739 |
def __init__(self): |
| 982 |
self.key = "/desktop/cinnamon/windows/button_layout" |
740 |
self.key = "/desktop/cinnamon/windows/button_layout" |
|
Lines 1121-1147
class MainWindow:
Link Here
|
| 1121 |
sidePage.add_widget(GSettingsCheckButton(_("Panel Launchers draggable"), "org.cinnamon", "panel-launchers-draggable")) |
879 |
sidePage.add_widget(GSettingsCheckButton(_("Panel Launchers draggable"), "org.cinnamon", "panel-launchers-draggable")) |
| 1122 |
|
880 |
|
| 1123 |
sidePage = SidePage(_("Calendar"), "clock.svg", self.content_box) |
881 |
sidePage = SidePage(_("Calendar"), "clock.svg", self.content_box) |
| 1124 |
self.sidePages.append((sidePage, "calendar")) |
882 |
self.sidePages.append((sidePage, "calendar")) |
| 1125 |
self.changeTimeWidget = ChangeTimeWidget() |
|
|
| 1126 |
sidePage.add_widget(GSettingsCheckButton(_("Show week dates in calendar"), "org.cinnamon.calendar", "show-weekdate")) |
883 |
sidePage.add_widget(GSettingsCheckButton(_("Show week dates in calendar"), "org.cinnamon.calendar", "show-weekdate")) |
| 1127 |
sidePage.add_widget(GSettingsEntry(_("Date format for the panel"), "org.cinnamon.calendar", "date-format")) |
884 |
sidePage.add_widget(GSettingsEntry(_("Date format for the panel"), "org.cinnamon.calendar", "date-format")) |
| 1128 |
sidePage.add_widget(GSettingsEntry(_("Date format inside the date applet"), "org.cinnamon.calendar", "date-format-full")) |
885 |
sidePage.add_widget(GSettingsEntry(_("Date format inside the date applet"), "org.cinnamon.calendar", "date-format-full")) |
| 1129 |
sidePage.add_widget(Gtk.LinkButton.new_with_label("http://www.foragoodstrftime.com/", _("Generate your own date formats"))) |
886 |
sidePage.add_widget(Gtk.LinkButton.new_with_label("http://www.foragoodstrftime.com/", _("Generate your own date formats"))) |
| 1130 |
self.ntpCheckButton = None |
887 |
|
| 1131 |
try: |
|
|
| 1132 |
self.ntpCheckButton = DBusCheckButton(_("Use network time"), "org.gnome.SettingsDaemon.DateTimeMechanism", "/", "GetUsingNtp", "SetUsingNtp") |
| 1133 |
sidePage.add_widget(self.ntpCheckButton) |
| 1134 |
except: |
| 1135 |
pass |
| 1136 |
sidePage.add_widget(self.changeTimeWidget) |
| 1137 |
try: |
| 1138 |
sidePage.add_widget(TimeZoneSelectorWidget()) |
| 1139 |
except: |
| 1140 |
pass |
| 1141 |
|
| 1142 |
if self.ntpCheckButton != None: |
| 1143 |
self.ntpCheckButton.connect('toggled', self._ntp_toggled) |
| 1144 |
self.changeTimeWidget.change_using_ntp( self.ntpCheckButton.get_active() ) |
| 1145 |
|
888 |
|
| 1146 |
sidePage = SidePage(_("Hot corner"), "overview.svg", self.content_box) |
889 |
sidePage = SidePage(_("Hot corner"), "overview.svg", self.content_box) |
| 1147 |
self.sidePages.append((sidePage, "hotcorner")) |
890 |
self.sidePages.append((sidePage, "hotcorner")) |
|
Lines 1316-1322
class MainWindow:
Link Here
|
| 1316 |
sidePage.add_widget(GSettingsFontButton(_("Default font"), "org.gnome.desktop.interface", "font-name")) |
1059 |
sidePage.add_widget(GSettingsFontButton(_("Default font"), "org.gnome.desktop.interface", "font-name")) |
| 1317 |
sidePage.add_widget(GSettingsFontButton(_("Document font"), "org.gnome.desktop.interface", "document-font-name")) |
1060 |
sidePage.add_widget(GSettingsFontButton(_("Document font"), "org.gnome.desktop.interface", "document-font-name")) |
| 1318 |
sidePage.add_widget(GSettingsFontButton(_("Monospace font"), "org.gnome.desktop.interface", "monospace-font-name")) |
1061 |
sidePage.add_widget(GSettingsFontButton(_("Monospace font"), "org.gnome.desktop.interface", "monospace-font-name")) |
| 1319 |
sidePage.add_widget(GConfFontButton(_("Window title font"), "/apps/metacity/general/titlebar_font")) |
|
|
| 1320 |
sidePage.add_widget(GSettingsComboBox(_("Hinting"), "org.gnome.settings-daemon.plugins.xsettings", "hinting", [(i, i.title()) for i in ("none", "slight", "medium", "full")])) |
1062 |
sidePage.add_widget(GSettingsComboBox(_("Hinting"), "org.gnome.settings-daemon.plugins.xsettings", "hinting", [(i, i.title()) for i in ("none", "slight", "medium", "full")])) |
| 1321 |
sidePage.add_widget(GSettingsComboBox(_("Antialiasing"), "org.gnome.settings-daemon.plugins.xsettings", "antialiasing", [(i, i.title()) for i in ("none", "grayscale", "rgba")])) |
1063 |
sidePage.add_widget(GSettingsComboBox(_("Antialiasing"), "org.gnome.settings-daemon.plugins.xsettings", "antialiasing", [(i, i.title()) for i in ("none", "grayscale", "rgba")])) |
| 1322 |
|
1064 |
|
|
Lines 1357-1365
class MainWindow:
Link Here
|
| 1357 |
self.content_box_sw.hide() |
1099 |
self.content_box_sw.hide() |
| 1358 |
self.top_button_box.hide() |
1100 |
self.top_button_box.hide() |
| 1359 |
self.side_view_sw.show_all() |
1101 |
self.side_view_sw.show_all() |
| 1360 |
|
|
|
| 1361 |
def _ntp_toggled(self, widget): |
| 1362 |
self.changeTimeWidget.change_using_ntp( self.ntpCheckButton.get_active() ) |
| 1363 |
|
1102 |
|
| 1364 |
|
1103 |
|
| 1365 |
if __name__ == "__main__": |
1104 |
if __name__ == "__main__": |