Codebase list lightdm-gtk-greeter-settings / 5a404cf
Value check for "theme-name", "icon-theme-name" and "allow-debugging" Andrew P. 9 years ago
3 changed file(s) with 204 addition(s) and 53 deletion(s). Raw diff Collapse all Expand all
154154 <property name="vexpand">True</property>
155155 <property name="row_spacing">8</property>
156156 <property name="column_spacing">12</property>
157 <child>
158 <object class="GtkLabel" id="greeter_gtk-theme_label">
159 <property name="visible">True</property>
160 <property name="can_focus">False</property>
161 <property name="halign">start</property>
162 <property name="label" translatable="yes" context="option|greeter|theme-name">Theme</property>
163 <attributes>
164 <attribute name="weight" value="semibold"/>
165 </attributes>
166 </object>
167 <packing>
168 <property name="left_attach">0</property>
169 <property name="top_attach">0</property>
170 </packing>
171 </child>
172 <child>
173 <object class="GtkLabel" id="greeter_icon-theme-name_label">
174 <property name="visible">True</property>
175 <property name="can_focus">False</property>
176 <property name="halign">start</property>
177 <property name="label" translatable="yes" context="option|greeter|icon-theme-name">Icons</property>
178 <attributes>
179 <attribute name="weight" value="semibold"/>
180 </attributes>
181 </object>
182 <packing>
183 <property name="left_attach">0</property>
184 <property name="top_attach">1</property>
185 </packing>
186 </child>
187157 <child>
188158 <object class="GtkLabel" id="greeter_font-name_label">
189159 <property name="visible">True</property>
455425 </packing>
456426 </child>
457427 <child>
458 <object class="GtkLabel" id="greeter_default-user-image_label">
459 <property name="visible">True</property>
460 <property name="can_focus">False</property>
461 <property name="halign">start</property>
462 <property name="valign">start</property>
463 <property name="margin_left">24</property>
464 <property name="label" translatable="yes" context="option|greeter|default-user-image">Default user image</property>
465 </object>
466 <packing>
467 <property name="left_attach">0</property>
468 <property name="top_attach">9</property>
469 </packing>
470 </child>
471 <child>
472428 <object class="GtkComboBoxText" id="greeter_theme-name_values">
473429 <property name="visible">True</property>
474430 <property name="can_focus">False</property>
605561 </object>
606562 <packing>
607563 <property name="left_attach">1</property>
564 <property name="top_attach">9</property>
565 </packing>
566 </child>
567 <child>
568 <object class="GtkBox" id="box9">
569 <property name="visible">True</property>
570 <property name="can_focus">False</property>
571 <child>
572 <object class="GtkLabel" id="greeter_theme-name_label">
573 <property name="visible">True</property>
574 <property name="can_focus">False</property>
575 <property name="halign">start</property>
576 <property name="label" translatable="yes" context="option|greeter|theme-name">Theme</property>
577 <attributes>
578 <attribute name="weight" value="semibold"/>
579 </attributes>
580 </object>
581 <packing>
582 <property name="expand">False</property>
583 <property name="fill">True</property>
584 <property name="position">0</property>
585 </packing>
586 </child>
587 <child>
588 <object class="GtkImage" id="greeter_theme-name_error">
589 <property name="can_focus">False</property>
590 <property name="yalign">0</property>
591 <property name="pixel_size">12</property>
592 <property name="icon_name">dialog-warning</property>
593 <property name="icon_size">1</property>
594 </object>
595 <packing>
596 <property name="expand">False</property>
597 <property name="fill">True</property>
598 <property name="position">1</property>
599 </packing>
600 </child>
601 </object>
602 <packing>
603 <property name="left_attach">0</property>
604 <property name="top_attach">0</property>
605 </packing>
606 </child>
607 <child>
608 <object class="GtkBox" id="box10">
609 <property name="visible">True</property>
610 <property name="can_focus">False</property>
611 <child>
612 <object class="GtkLabel" id="greeter_icon-theme-name_label">
613 <property name="visible">True</property>
614 <property name="can_focus">False</property>
615 <property name="halign">start</property>
616 <property name="label" translatable="yes" context="option|greeter|icon-theme-name">Icons</property>
617 <attributes>
618 <attribute name="weight" value="semibold"/>
619 </attributes>
620 </object>
621 <packing>
622 <property name="expand">False</property>
623 <property name="fill">True</property>
624 <property name="position">0</property>
625 </packing>
626 </child>
627 <child>
628 <object class="GtkImage" id="greeter_icon-theme-name_error">
629 <property name="can_focus">False</property>
630 <property name="yalign">0</property>
631 <property name="pixel_size">12</property>
632 <property name="icon_name">dialog-warning</property>
633 <property name="icon_size">1</property>
634 </object>
635 <packing>
636 <property name="expand">False</property>
637 <property name="fill">True</property>
638 <property name="position">1</property>
639 </packing>
640 </child>
641 </object>
642 <packing>
643 <property name="left_attach">0</property>
644 <property name="top_attach">1</property>
645 </packing>
646 </child>
647 <child>
648 <object class="GtkBox" id="box11">
649 <property name="visible">True</property>
650 <property name="can_focus">False</property>
651 <property name="valign">start</property>
652 <child>
653 <object class="GtkLabel" id="greeter_default-user-image_label">
654 <property name="visible">True</property>
655 <property name="can_focus">False</property>
656 <property name="halign">start</property>
657 <property name="valign">start</property>
658 <property name="margin_left">24</property>
659 <property name="label" translatable="yes" context="option|greeter|default-user-image">Default user image</property>
660 </object>
661 <packing>
662 <property name="expand">False</property>
663 <property name="fill">True</property>
664 <property name="position">0</property>
665 </packing>
666 </child>
667 <child>
668 <object class="GtkImage" id="cgreeter_default-user-image_error">
669 <property name="can_focus">False</property>
670 <property name="yalign">0</property>
671 <property name="pixel_size">12</property>
672 <property name="icon_name">dialog-warning</property>
673 <property name="icon_size">1</property>
674 </object>
675 <packing>
676 <property name="expand">False</property>
677 <property name="fill">True</property>
678 <property name="position">1</property>
679 </packing>
680 </child>
681 </object>
682 <packing>
683 <property name="left_attach">0</property>
608684 <property name="top_attach">9</property>
609685 </packing>
610686 </child>
14791555 </packing>
14801556 </child>
14811557 <child>
1482 <object class="GtkCheckButton" id="greeter_allow-debugging_value">
1483 <property name="label" translatable="yes" context="greeter|option|allow-debugging">Debugging mode</property>
1484 <property name="visible">True</property>
1485 <property name="can_focus">True</property>
1486 <property name="receives_default">False</property>
1487 <property name="tooltip_text" translatable="yes" context="greeter|option|allow-debugging">Enable keys to launch GtkInspector
1558 <object class="GtkBox" id="box12">
1559 <property name="visible">True</property>
1560 <property name="can_focus">False</property>
1561 <child>
1562 <object class="GtkCheckButton" id="greeter_allow-debugging_value">
1563 <property name="label" translatable="yes" context="greeter|option|allow-debugging">Debugging mode</property>
1564 <property name="visible">True</property>
1565 <property name="can_focus">True</property>
1566 <property name="receives_default">False</property>
1567 <property name="tooltip_text" translatable="yes" context="greeter|option|allow-debugging">Enable keys to launch GtkInspector
14881568 More informative log</property>
1489 <property name="xalign">0</property>
1490 <property name="draw_indicator">True</property>
1569 <property name="xalign">0</property>
1570 <property name="draw_indicator">True</property>
1571 </object>
1572 <packing>
1573 <property name="expand">False</property>
1574 <property name="fill">True</property>
1575 <property name="position">0</property>
1576 </packing>
1577 </child>
1578 <child>
1579 <object class="GtkImage" id="greeter_allow-debugging_error">
1580 <property name="can_focus">False</property>
1581 <property name="yalign">0</property>
1582 <property name="pixel_size">12</property>
1583 <property name="icon_name">dialog-warning</property>
1584 <property name="icon_size">1</property>
1585 </object>
1586 <packing>
1587 <property name="expand">False</property>
1588 <property name="fill">True</property>
1589 <property name="position">1</property>
1590 </packing>
1591 </child>
14911592 </object>
14921593 <packing>
14931594 <property name="left_attach">0</property>
2525 from gi.repository import Gtk
2626
2727 from lightdm_gtk_greeter_settings import helpers
28 from lightdm_gtk_greeter_settings.helpers import C_, WidgetsWrapper
28 from lightdm_gtk_greeter_settings.helpers import C_, WidgetsWrapper, string2bool
2929 from lightdm_gtk_greeter_settings import OptionEntry
3030 from lightdm_gtk_greeter_settings.OptionGroup import SimpleGroup
3131 from lightdm_gtk_greeter_settings.MonitorsGroup import MonitorsGroup
6464 ('greeter', 'screensaver-timeout'): self.on_entry_setup_greeter_screensaver_timeout,
6565 ('greeter', 'theme-name'): self.on_entry_setup_greeter_theme_name,
6666 ('greeter', 'icon-theme-name'): self.on_entry_setup_greeter_icon_theme_name,
67 ('greeter', 'default-user-image'): self.on_entry_setup_greeter_default_user_image,
68 ('greeter', 'allow-debugging'): self.on_entry_setup_greeter_allow_debugging,
6769 }
6870
6971 self._multihead_dialog = None
213215 values = entry.widgets['values']
214216 for theme in sorted(iglob(os.path.join(sys.prefix, 'share', 'themes', '*', 'gtk-3.0'))):
215217 values.append_text(theme.split(os.path.sep)[-2])
218 entry.changed.connect(self.on_entry_changed_greeter_theme_name)
216219
217220 def on_entry_setup_greeter_icon_theme_name(self, entry):
218221 values = entry.widgets['values']
219222 for theme in sorted(iglob(os.path.join(sys.prefix, 'share', 'icons', '*', 'index.theme'))):
220223 values.append_text(theme.split(os.path.sep)[-2])
224 entry.changed.connect(self.on_entry_changed_greeter_icon_theme_name)
225
226 def on_entry_setup_greeter_default_user_image(self, entry):
227 entry.changed.connect(self.on_entry_changed_greeter_default_user_image)
228
229 def on_entry_setup_greeter_allow_debugging(self, entry):
230 if (Gtk.MAJOR_VERSION, Gtk.MINOR_VERSION, Gtk.MICRO_VERSION) < (3, 14, 0):
231 entry.changed.connect(self.on_entry_changed_greeter_allow_debugging)
221232
222233 def on_entry_get_greeter_screensaver_timeout(self, entry=None, value=None):
223234 value = int(float(value))
231242 return value // 60 + 59
232243 return value
233244
245 def on_entry_changed_greeter_theme_name(self, entry):
246 if not entry.value or entry.value in (row[0] for row in entry.widgets['values'].props.model):
247 entry.error = None
248 else:
249 entry.error = C_('option|greeter|theme-name', 'Selected theme is not available')
250
251 def on_entry_changed_greeter_icon_theme_name(self, entry):
252 if not entry.value or entry.value in (row[0] for row in entry.widgets['values'].props.model):
253 entry.error = None
254 else:
255 entry.error = C_('option|greeter|icon-theme-name', 'Selected theme is not available')
256
257 def on_entry_changed_greeter_default_user_image(self, entry):
258 pass
259
260 def on_entry_changed_greeter_allow_debugging(self, entry):
261 if string2bool(entry.value):
262 entry.error = C_('option|greeter|allow-debugging',
263 'GtkInspector is not available on your system')
264 else:
265 entry.error = None
266
234267 def on_entry_format_scale_greeter_screensaver_timeout(self, scale, value, adjustment):
235268 if value != adjustment.props.lower and value != adjustment.props.upper:
236269 value = self.on_entry_get_greeter_screensaver_timeout(value=value)
5454 if self._use:
5555 self._use.connect('notify::active', self._on_use_toggled)
5656 self._widgets_to_disable = None
57 self._error = widgets['error']
5758
5859 @property
5960 def value(self):
8081 def enabled(self, value):
8182 if self._use:
8283 self._use.props.active = value
84
85 @property
86 def error(self):
87 return self._get_error()
88
89 @error.setter
90 def error(self, value):
91 self._set_error(value)
8392
8493 @property
8594 def widgets(self):
110119
111120 def _set_value(self, value):
112121 raise NotImplementedError(self.__class__)
122
123 def _get_error(self):
124 raise NotImplementedError(self.__class__)
125
126 def _set_error(self, text):
127 if self._error:
128 self._error.props.visible = text is not None
129 self._error.props.tooltip_text = text
113130
114131 def _set_enabled(self, value):
115132 if self._widgets_to_disable: