Codebase list lightdm-gtk-greeter-settings / fb4ee2b
"Reset" menu Andrew P. 9 years ago
8 changed file(s) with 759 addition(s) and 516 deletion(s). Raw diff Collapse all Expand all
108108 <property name="row_spacing">8</property>
109109 <property name="column_spacing">12</property>
110110 <child>
111 <object class="GtkLabel" id="greeter_font-name_label">
112 <property name="visible">True</property>
113 <property name="can_focus">False</property>
114 <property name="halign">start</property>
115 <property name="label" translatable="yes" context="option|greeter|font-name">Font</property>
116 <attributes>
117 <attribute name="weight" value="semibold"/>
118 </attributes>
119 </object>
120 <packing>
121 <property name="left_attach">0</property>
122 <property name="top_attach">2</property>
123 </packing>
124 </child>
125 <child>
126111 <object class="GtkFontButton" id="greeter_font-name_value">
127112 <property name="visible">True</property>
128113 <property name="can_focus">False</property>
155140 <packing>
156141 <property name="left_attach">1</property>
157142 <property name="top_attach">0</property>
158 </packing>
159 </child>
160 <child>
161 <object class="GtkCheckButton" id="greeter_xft-rgba_use">
162 <property name="label" translatable="yes" context="option|greeter|xft-rgba">Subpixel rendering</property>
163 <property name="visible">True</property>
164 <property name="can_focus">False</property>
165 <property name="receives_default">False</property>
166 <property name="has_tooltip">True</property>
167 <property name="tooltip_text" translatable="yes">Enable this option to override system defaults</property>
168 <property name="margin_left">24</property>
169 <property name="hexpand">True</property>
170 <property name="xalign">0.5</property>
171 <property name="draw_indicator">True</property>
172 </object>
173 <packing>
174 <property name="left_attach">0</property>
175 <property name="top_attach">2</property>
176 </packing>
177 </child>
178 <child>
179 <object class="GtkCheckButton" id="greeter_xft-dpi_use">
180 <property name="label" translatable="yes" context="option|greeter|xft-dpi">DPI</property>
181 <property name="visible">True</property>
182 <property name="can_focus">False</property>
183 <property name="receives_default">False</property>
184 <property name="has_tooltip">True</property>
185 <property name="tooltip_text" translatable="yes">Enable this option to override system defaults</property>
186 <property name="margin_left">24</property>
187 <property name="hexpand">True</property>
188 <property name="xalign">0.5</property>
189 <property name="draw_indicator">True</property>
190 </object>
191 <packing>
192 <property name="left_attach">0</property>
193 <property name="top_attach">1</property>
194 </packing>
195 </child>
196 <child>
197 <object class="GtkCheckButton" id="greeter_xft-antialias_use">
198 <property name="label" translatable="yes" context="option|greeter|xft-antialias">Antialias</property>
199 <property name="visible">True</property>
200 <property name="can_focus">False</property>
201 <property name="receives_default">False</property>
202 <property name="has_tooltip">True</property>
203 <property name="tooltip_text" translatable="yes">Enable this option to override system defaults</property>
204 <property name="margin_left">24</property>
205 <property name="hexpand">True</property>
206 <property name="xalign">0.5</property>
207 <property name="draw_indicator">True</property>
208 </object>
209 <packing>
210 <property name="left_attach">0</property>
211 <property name="top_attach">0</property>
212 </packing>
213 </child>
214 <child>
215 <object class="GtkCheckButton" id="greeter_xft-hintstyle_use">
216 <property name="label" translatable="yes" context="option|greeter|xft-hintstyle">Hinting</property>
217 <property name="visible">True</property>
218 <property name="can_focus">False</property>
219 <property name="receives_default">False</property>
220 <property name="has_tooltip">True</property>
221 <property name="tooltip_text" translatable="yes">Enable this option to override system defaults</property>
222 <property name="margin_left">24</property>
223 <property name="hexpand">True</property>
224 <property name="xalign">0.5</property>
225 <property name="draw_indicator">True</property>
226 </object>
227 <packing>
228 <property name="left_attach">0</property>
229 <property name="top_attach">3</property>
230143 </packing>
231144 </child>
232145 <child>
303216 <property name="top_attach">1</property>
304217 </packing>
305218 </child>
219 <child>
220 <object class="GtkEventBox" id="greeter_xft-antialias_label_holder">
221 <property name="visible">True</property>
222 <property name="can_focus">False</property>
223 <child>
224 <object class="GtkCheckButton" id="greeter_xft-antialias_use">
225 <property name="label" translatable="yes" context="option|greeter|xft-antialias">Antialias</property>
226 <property name="visible">True</property>
227 <property name="can_focus">False</property>
228 <property name="receives_default">False</property>
229 <property name="has_tooltip">True</property>
230 <property name="tooltip_text" translatable="yes">Enable this option to override system defaults</property>
231 <property name="margin_left">24</property>
232 <property name="hexpand">True</property>
233 <property name="xalign">0.5</property>
234 <property name="draw_indicator">True</property>
235 </object>
236 </child>
237 </object>
238 <packing>
239 <property name="left_attach">0</property>
240 <property name="top_attach">0</property>
241 </packing>
242 </child>
243 <child>
244 <object class="GtkEventBox" id="greeter_xft-dpi_label_holder">
245 <property name="visible">True</property>
246 <property name="can_focus">False</property>
247 <child>
248 <object class="GtkCheckButton" id="greeter_xft-dpi_use">
249 <property name="label" translatable="yes" context="option|greeter|xft-dpi">DPI</property>
250 <property name="visible">True</property>
251 <property name="can_focus">False</property>
252 <property name="receives_default">False</property>
253 <property name="has_tooltip">True</property>
254 <property name="tooltip_text" translatable="yes">Enable this option to override system defaults</property>
255 <property name="margin_left">24</property>
256 <property name="hexpand">True</property>
257 <property name="xalign">0.5</property>
258 <property name="draw_indicator">True</property>
259 </object>
260 </child>
261 </object>
262 <packing>
263 <property name="left_attach">0</property>
264 <property name="top_attach">1</property>
265 </packing>
266 </child>
267 <child>
268 <object class="GtkEventBox" id="greeter_xft-rgba_label_holder">
269 <property name="visible">True</property>
270 <property name="can_focus">False</property>
271 <child>
272 <object class="GtkCheckButton" id="greeter_xft-rgba_use">
273 <property name="label" translatable="yes" context="option|greeter|xft-rgba">Subpixel rendering</property>
274 <property name="visible">True</property>
275 <property name="can_focus">False</property>
276 <property name="receives_default">False</property>
277 <property name="has_tooltip">True</property>
278 <property name="tooltip_text" translatable="yes">Enable this option to override system defaults</property>
279 <property name="margin_left">24</property>
280 <property name="hexpand">True</property>
281 <property name="xalign">0.5</property>
282 <property name="draw_indicator">True</property>
283 </object>
284 </child>
285 </object>
286 <packing>
287 <property name="left_attach">0</property>
288 <property name="top_attach">2</property>
289 </packing>
290 </child>
291 <child>
292 <object class="GtkEventBox" id="greeter_xft-hintstyle_label_holder">
293 <property name="visible">True</property>
294 <property name="can_focus">False</property>
295 <child>
296 <object class="GtkCheckButton" id="greeter_xft-hintstyle_use">
297 <property name="label" translatable="yes" context="option|greeter|xft-hintstyle">Hinting</property>
298 <property name="visible">True</property>
299 <property name="can_focus">False</property>
300 <property name="receives_default">False</property>
301 <property name="has_tooltip">True</property>
302 <property name="tooltip_text" translatable="yes">Enable this option to override system defaults</property>
303 <property name="margin_left">24</property>
304 <property name="hexpand">True</property>
305 <property name="xalign">0.5</property>
306 <property name="draw_indicator">True</property>
307 </object>
308 </child>
309 </object>
310 <packing>
311 <property name="left_attach">0</property>
312 <property name="top_attach">3</property>
313 </packing>
314 </child>
306315 </object>
307316 </child>
308317 <child type="label">
324333 <property name="visible">True</property>
325334 <property name="can_focus">False</property>
326335 <property name="halign">start</property>
336 <property name="create_folders">False</property>
327337 </object>
328338 <packing>
329339 <property name="left_attach">1</property>
376386 </packing>
377387 </child>
378388 <child>
379 <object class="GtkCheckButton" id="greeter_user-background_value">
380 <property name="label" translatable="yes" context="option|greeter|user-background">Use user wallpaper if available</property>
381 <property name="visible">True</property>
382 <property name="can_focus">True</property>
383 <property name="receives_default">False</property>
384 <property name="margin_left">24</property>
385 <property name="xalign">0.5</property>
386 <property name="image_position">right</property>
387 <property name="draw_indicator">True</property>
388 </object>
389 <packing>
390 <property name="left_attach">0</property>
391 <property name="top_attach">7</property>
392 <property name="width">2</property>
393 </packing>
394 </child>
395 <child>
396389 <object class="GtkBox" id="box5">
397390 <property name="visible">True</property>
398391 <property name="can_focus">False</property>
399392 <child>
400 <object class="GtkBox" id="box13">
401 <property name="visible">True</property>
402 <property name="can_focus">False</property>
403 <child>
404 <object class="GtkLabel" id="greeter_background_label">
405 <property name="visible">True</property>
406 <property name="can_focus">False</property>
407 <property name="halign">start</property>
408 <property name="label" translatable="yes" context="option|greeter|background">Background</property>
409 <attributes>
410 <attribute name="weight" value="semibold"/>
411 </attributes>
412 </object>
413 <packing>
414 <property name="expand">False</property>
415 <property name="fill">True</property>
416 <property name="position">0</property>
417 </packing>
418 </child>
419 <child>
420 <object class="GtkImage" id="greeter_background_error">
421 <property name="can_focus">False</property>
422 <property name="yalign">0</property>
423 <property name="pixel_size">12</property>
424 <property name="icon_name">dialog-warning</property>
425 <property name="icon_size">1</property>
426 </object>
427 <packing>
428 <property name="expand">False</property>
429 <property name="fill">True</property>
430 <property name="position">1</property>
431 </packing>
393 <object class="GtkEventBox" id="greeter_background_label_holder">
394 <property name="visible">True</property>
395 <property name="can_focus">False</property>
396 <child>
397 <object class="GtkBox" id="box13">
398 <property name="visible">True</property>
399 <property name="can_focus">False</property>
400 <child>
401 <object class="GtkLabel" id="greeter_background_label">
402 <property name="visible">True</property>
403 <property name="can_focus">False</property>
404 <property name="halign">start</property>
405 <property name="label" translatable="yes" context="option|greeter|background">Background</property>
406 <attributes>
407 <attribute name="weight" value="semibold"/>
408 </attributes>
409 </object>
410 <packing>
411 <property name="expand">False</property>
412 <property name="fill">True</property>
413 <property name="position">0</property>
414 </packing>
415 </child>
416 <child>
417 <object class="GtkImage" id="greeter_background_error">
418 <property name="can_focus">False</property>
419 <property name="yalign">0</property>
420 <property name="pixel_size">12</property>
421 <property name="icon_name">dialog-warning</property>
422 <property name="icon_size">1</property>
423 </object>
424 <packing>
425 <property name="expand">False</property>
426 <property name="fill">True</property>
427 <property name="position">1</property>
428 </packing>
429 </child>
430 </object>
432431 </child>
433432 </object>
434433 <packing>
455454 <property name="left_attach">0</property>
456455 <property name="top_attach">4</property>
457456 <property name="width">2</property>
458 </packing>
459 </child>
460 <child>
461 <object class="GtkLabel" id="greeter_hide-user-image_label">
462 <property name="visible">True</property>
463 <property name="can_focus">False</property>
464 <property name="halign">start</property>
465 <property name="label" translatable="yes" context="option|greeter|hide-user-image">User image</property>
466 <attributes>
467 <attribute name="weight" value="semibold"/>
468 </attributes>
469 </object>
470 <packing>
471 <property name="left_attach">0</property>
472 <property name="top_attach">8</property>
473457 </packing>
474458 </child>
475459 <child>
503487 </object>
504488 <packing>
505489 <property name="left_attach">1</property>
506 <property name="top_attach">9</property>
507 </packing>
508 </child>
509 <child>
510 <object class="GtkBox" id="box9">
511 <property name="visible">True</property>
512 <property name="can_focus">False</property>
513 <child>
514 <object class="GtkLabel" id="greeter_theme-name_label">
515 <property name="visible">True</property>
516 <property name="can_focus">False</property>
517 <property name="halign">start</property>
518 <property name="label" translatable="yes" context="option|greeter|theme-name">Theme</property>
519 <attributes>
520 <attribute name="weight" value="semibold"/>
521 </attributes>
522 </object>
523 <packing>
524 <property name="expand">False</property>
525 <property name="fill">True</property>
526 <property name="position">0</property>
527 </packing>
528 </child>
529 <child>
530 <object class="GtkImage" id="greeter_theme-name_error">
531 <property name="can_focus">False</property>
532 <property name="yalign">0</property>
533 <property name="pixel_size">12</property>
534 <property name="icon_name">dialog-warning</property>
535 <property name="icon_size">1</property>
536 </object>
537 <packing>
538 <property name="expand">False</property>
539 <property name="fill">True</property>
540 <property name="position">1</property>
541 </packing>
542 </child>
543 </object>
544 <packing>
545 <property name="left_attach">0</property>
546 <property name="top_attach">0</property>
547 </packing>
548 </child>
549 <child>
550 <object class="GtkBox" id="box10">
551 <property name="visible">True</property>
552 <property name="can_focus">False</property>
553 <child>
554 <object class="GtkLabel" id="greeter_icon-theme-name_label">
555 <property name="visible">True</property>
556 <property name="can_focus">False</property>
557 <property name="halign">start</property>
558 <property name="label" translatable="yes" context="option|greeter|icon-theme-name">Icons</property>
559 <attributes>
560 <attribute name="weight" value="semibold"/>
561 </attributes>
562 </object>
563 <packing>
564 <property name="expand">False</property>
565 <property name="fill">True</property>
566 <property name="position">0</property>
567 </packing>
568 </child>
569 <child>
570 <object class="GtkImage" id="greeter_icon-theme-name_error">
571 <property name="can_focus">False</property>
572 <property name="yalign">0</property>
573 <property name="pixel_size">12</property>
574 <property name="icon_name">dialog-warning</property>
575 <property name="icon_size">1</property>
576 </object>
577 <packing>
578 <property name="expand">False</property>
579 <property name="fill">True</property>
580 <property name="position">1</property>
581 </packing>
582 </child>
583 </object>
584 <packing>
585 <property name="left_attach">0</property>
586 <property name="top_attach">1</property>
587 </packing>
588 </child>
589 <child>
590 <object class="GtkBox" id="box11">
591 <property name="visible">True</property>
592 <property name="can_focus">False</property>
593 <property name="valign">start</property>
594 <child>
595 <object class="GtkLabel" id="greeter_default-user-image_label">
596 <property name="visible">True</property>
597 <property name="can_focus">False</property>
598 <property name="halign">start</property>
599 <property name="valign">start</property>
600 <property name="margin_left">24</property>
601 <property name="label" translatable="yes" context="option|greeter|default-user-image">Default user image</property>
602 </object>
603 <packing>
604 <property name="expand">False</property>
605 <property name="fill">True</property>
606 <property name="position">0</property>
607 </packing>
608 </child>
609 <child>
610 <object class="GtkImage" id="greeter_default-user-image_error">
611 <property name="can_focus">False</property>
612 <property name="yalign">0</property>
613 <property name="pixel_size">12</property>
614 <property name="icon_name">dialog-warning</property>
615 <property name="icon_size">1</property>
616 </object>
617 <packing>
618 <property name="expand">False</property>
619 <property name="fill">True</property>
620 <property name="position">1</property>
621 </packing>
622 </child>
623 </object>
624 <packing>
625 <property name="left_attach">0</property>
626490 <property name="top_attach">9</property>
627491 </packing>
628492 </child>
637501 <property name="xalign">0.5</property>
638502 <property name="active">True</property>
639503 <property name="draw_indicator">True</property>
640 <property name="group">greeter_background_image_choice</property>
641504 </object>
642505 <packing>
643506 <property name="left_attach">0</property>
655518 <property name="xalign">0.5</property>
656519 <property name="active">True</property>
657520 <property name="draw_indicator">True</property>
521 <property name="group">greeter_background_color_choice</property>
658522 </object>
659523 <packing>
660524 <property name="left_attach">0</property>
661525 <property name="top_attach">5</property>
526 </packing>
527 </child>
528 <child>
529 <object class="GtkEventBox" id="greeter_theme-name_label_holder">
530 <property name="visible">True</property>
531 <property name="can_focus">False</property>
532 <child>
533 <object class="GtkBox" id="greeter_theme-name_label_box">
534 <property name="visible">True</property>
535 <property name="can_focus">False</property>
536 <child>
537 <object class="GtkLabel" id="greeter_theme-name_label">
538 <property name="visible">True</property>
539 <property name="can_focus">False</property>
540 <property name="halign">start</property>
541 <property name="label" translatable="yes" context="option|greeter|theme-name">Theme</property>
542 <attributes>
543 <attribute name="weight" value="semibold"/>
544 </attributes>
545 </object>
546 <packing>
547 <property name="expand">False</property>
548 <property name="fill">True</property>
549 <property name="position">0</property>
550 </packing>
551 </child>
552 <child>
553 <object class="GtkImage" id="greeter_theme-name_error">
554 <property name="can_focus">False</property>
555 <property name="yalign">0</property>
556 <property name="pixel_size">12</property>
557 <property name="icon_name">dialog-warning</property>
558 <property name="icon_size">1</property>
559 </object>
560 <packing>
561 <property name="expand">False</property>
562 <property name="fill">True</property>
563 <property name="position">1</property>
564 </packing>
565 </child>
566 </object>
567 </child>
568 </object>
569 <packing>
570 <property name="left_attach">0</property>
571 <property name="top_attach">0</property>
572 </packing>
573 </child>
574 <child>
575 <object class="GtkEventBox" id="greeter_icon-theme-name_label_holder">
576 <property name="visible">True</property>
577 <property name="can_focus">False</property>
578 <child>
579 <object class="GtkBox" id="greeter_icon-theme-name_label_box">
580 <property name="visible">True</property>
581 <property name="can_focus">False</property>
582 <child>
583 <object class="GtkLabel" id="greeter_icon-theme-name_label">
584 <property name="visible">True</property>
585 <property name="can_focus">False</property>
586 <property name="halign">start</property>
587 <property name="label" translatable="yes" context="option|greeter|icon-theme-name">Icons</property>
588 <attributes>
589 <attribute name="weight" value="semibold"/>
590 </attributes>
591 </object>
592 <packing>
593 <property name="expand">False</property>
594 <property name="fill">True</property>
595 <property name="position">0</property>
596 </packing>
597 </child>
598 <child>
599 <object class="GtkImage" id="greeter_icon-theme-name_error">
600 <property name="can_focus">False</property>
601 <property name="yalign">0</property>
602 <property name="pixel_size">12</property>
603 <property name="icon_name">dialog-warning</property>
604 <property name="icon_size">1</property>
605 </object>
606 <packing>
607 <property name="expand">False</property>
608 <property name="fill">True</property>
609 <property name="position">1</property>
610 </packing>
611 </child>
612 </object>
613 </child>
614 </object>
615 <packing>
616 <property name="left_attach">0</property>
617 <property name="top_attach">1</property>
618 </packing>
619 </child>
620 <child>
621 <object class="GtkEventBox" id="greeter_font-name_label_holder">
622 <property name="visible">True</property>
623 <property name="can_focus">False</property>
624 <child>
625 <object class="GtkLabel" id="greeter_font-name_label">
626 <property name="visible">True</property>
627 <property name="can_focus">False</property>
628 <property name="halign">start</property>
629 <property name="label" translatable="yes" context="option|greeter|font-name">Font</property>
630 <attributes>
631 <attribute name="weight" value="semibold"/>
632 </attributes>
633 </object>
634 </child>
635 </object>
636 <packing>
637 <property name="left_attach">0</property>
638 <property name="top_attach">2</property>
639 </packing>
640 </child>
641 <child>
642 <object class="GtkEventBox" id="greeter_hide-user-image_label_holder">
643 <property name="visible">True</property>
644 <property name="can_focus">False</property>
645 <child>
646 <object class="GtkLabel" id="greeter_hide-user-image_label">
647 <property name="visible">True</property>
648 <property name="can_focus">False</property>
649 <property name="halign">start</property>
650 <property name="label" translatable="yes" context="option|greeter|hide-user-image">User image</property>
651 <attributes>
652 <attribute name="weight" value="semibold"/>
653 </attributes>
654 </object>
655 </child>
656 </object>
657 <packing>
658 <property name="left_attach">0</property>
659 <property name="top_attach">8</property>
660 </packing>
661 </child>
662 <child>
663 <object class="GtkEventBox" id="greeter_default-user-image_label_holder">
664 <property name="visible">True</property>
665 <property name="can_focus">False</property>
666 <child>
667 <object class="GtkBox" id="greeter_default-user-image_label_box">
668 <property name="visible">True</property>
669 <property name="can_focus">False</property>
670 <property name="valign">start</property>
671 <child>
672 <object class="GtkLabel" id="greeter_default-user-image_label">
673 <property name="visible">True</property>
674 <property name="can_focus">False</property>
675 <property name="halign">start</property>
676 <property name="valign">start</property>
677 <property name="margin_left">24</property>
678 <property name="label" translatable="yes" context="option|greeter|default-user-image">Default user image</property>
679 </object>
680 <packing>
681 <property name="expand">False</property>
682 <property name="fill">True</property>
683 <property name="position">0</property>
684 </packing>
685 </child>
686 <child>
687 <object class="GtkImage" id="greeter_default-user-image_error">
688 <property name="can_focus">False</property>
689 <property name="yalign">0</property>
690 <property name="pixel_size">12</property>
691 <property name="icon_name">dialog-warning</property>
692 <property name="icon_size">1</property>
693 </object>
694 <packing>
695 <property name="expand">False</property>
696 <property name="fill">True</property>
697 <property name="position">1</property>
698 </packing>
699 </child>
700 </object>
701 </child>
702 </object>
703 <packing>
704 <property name="left_attach">0</property>
705 <property name="top_attach">9</property>
706 </packing>
707 </child>
708 <child>
709 <object class="GtkEventBox" id="greeter_user-background_label_holder">
710 <property name="visible">True</property>
711 <property name="can_focus">False</property>
712 <child>
713 <object class="GtkCheckButton" id="greeter_user-background_value">
714 <property name="label" translatable="yes" context="option|greeter|user-background">Use user wallpaper if available</property>
715 <property name="visible">True</property>
716 <property name="can_focus">True</property>
717 <property name="receives_default">False</property>
718 <property name="margin_left">24</property>
719 <property name="xalign">0.5</property>
720 <property name="image_position">right</property>
721 <property name="draw_indicator">True</property>
722 </object>
723 </child>
724 </object>
725 <packing>
726 <property name="left_attach">0</property>
727 <property name="top_attach">7</property>
728 <property name="width">2</property>
662729 </packing>
663730 </child>
664731 </object>
689756 <property name="vexpand">True</property>
690757 <property name="row_spacing">8</property>
691758 <property name="column_spacing">12</property>
692 <child>
693 <object class="GtkLabel" id="greeter_indicators_label">
694 <property name="visible">True</property>
695 <property name="can_focus">False</property>
696 <property name="halign">start</property>
697 <property name="hexpand">True</property>
698 <property name="label" translatable="yes" context="option|greeter|indicators">Redefine indicators</property>
699 <attributes>
700 <attribute name="weight" value="semibold"/>
701 </attributes>
702 </object>
703 <packing>
704 <property name="left_attach">0</property>
705 <property name="top_attach">4</property>
706 </packing>
707 </child>
708759 <child>
709760 <object class="GtkSwitch" id="greeter_indicators_use">
710761 <property name="visible">True</property>
926977 <property name="margin_left">24</property>
927978 <property name="spacing">6</property>
928979 <child>
929 <object class="GtkLabel" id="greeter_clock-format_label">
930 <property name="visible">True</property>
931 <property name="can_focus">False</property>
932 <property name="label" translatable="yes" context="option|greeter|clock-format">Clock format:</property>
980 <object class="GtkEventBox" id="greeter_clock-format_label_holder">
981 <property name="visible">True</property>
982 <property name="can_focus">False</property>
983 <child>
984 <object class="GtkLabel" id="greeter_clock-format_label">
985 <property name="visible">True</property>
986 <property name="can_focus">False</property>
987 <property name="label" translatable="yes" context="option|greeter|clock-format">Clock format:</property>
988 </object>
989 </child>
933990 </object>
934991 <packing>
935992 <property name="expand">False</property>
9541011 <property name="left_attach">0</property>
9551012 <property name="top_attach">1</property>
9561013 <property name="width">2</property>
1014 </packing>
1015 </child>
1016 <child>
1017 <object class="GtkEventBox" id="greeter_indicators_label_holder">
1018 <property name="visible">True</property>
1019 <property name="can_focus">False</property>
1020 <child>
1021 <object class="GtkLabel" id="greeter_indicators_label">
1022 <property name="visible">True</property>
1023 <property name="can_focus">False</property>
1024 <property name="halign">start</property>
1025 <property name="hexpand">True</property>
1026 <property name="label" translatable="yes" context="option|greeter|indicators">Redefine indicators</property>
1027 <attributes>
1028 <attribute name="weight" value="semibold"/>
1029 </attributes>
1030 </object>
1031 </child>
1032 </object>
1033 <packing>
1034 <property name="left_attach">0</property>
1035 <property name="top_attach">4</property>
9571036 </packing>
9581037 </child>
9591038 <child>
9921071 <property name="vexpand">True</property>
9931072 <property name="row_spacing">8</property>
9941073 <property name="column_spacing">8</property>
995 <child>
996 <object class="GtkLabel" id="greeter_position_label">
997 <property name="visible">True</property>
998 <property name="can_focus">False</property>
999 <property name="halign">start</property>
1000 <property name="label" translatable="yes" context="option|greeter|position">Select base point and its position.</property>
1001 <attributes>
1002 <attribute name="style" value="oblique"/>
1003 </attributes>
1004 </object>
1005 <packing>
1006 <property name="left_attach">0</property>
1007 <property name="top_attach">0</property>
1008 <property name="width">3</property>
1009 </packing>
1010 </child>
10111074 <child>
10121075 <object class="GtkAspectFrame" id="greeter_position_screen_frame">
10131076 <property name="visible">True</property>
12571320 <property name="top_attach">4</property>
12581321 </packing>
12591322 </child>
1323 <child>
1324 <object class="GtkEventBox" id="greeter_position_label_holder">
1325 <property name="visible">True</property>
1326 <property name="can_focus">False</property>
1327 <child>
1328 <object class="GtkLabel" id="greeter_position_label">
1329 <property name="visible">True</property>
1330 <property name="can_focus">False</property>
1331 <property name="halign">start</property>
1332 <property name="label" translatable="yes" context="option|greeter|position">Select base point and its position.</property>
1333 <attributes>
1334 <attribute name="style" value="oblique"/>
1335 </attributes>
1336 </object>
1337 </child>
1338 </object>
1339 <packing>
1340 <property name="left_attach">0</property>
1341 <property name="top_attach">0</property>
1342 <property name="width">3</property>
1343 </packing>
1344 </child>
12601345 </object>
12611346 <packing>
12621347 <property name="position">2</property>
12881373 <property name="row_spacing">8</property>
12891374 <property name="column_spacing">8</property>
12901375 <child>
1291 <object class="GtkLabel" id="greeter_screensaver-timeout_label">
1292 <property name="visible">True</property>
1293 <property name="can_focus">False</property>
1294 <property name="halign">start</property>
1295 <property name="hexpand">True</property>
1296 <property name="label" translatable="yes" context="option|greeter|screensaver-timeout">Timeout until the screen blanks </property>
1297 <attributes>
1298 <attribute name="weight" value="semibold"/>
1299 </attributes>
1300 </object>
1301 <packing>
1302 <property name="left_attach">0</property>
1303 <property name="top_attach">2</property>
1304 <property name="width">2</property>
1305 </packing>
1306 </child>
1307 <child>
13081376 <object class="GtkBox" id="greeter_screensaver-timeout_box">
13091377 <property name="visible">True</property>
13101378 <property name="can_focus">False</property>
13821450 <property name="margin_left">24</property>
13831451 <property name="row_spacing">8</property>
13841452 <property name="column_spacing">8</property>
1385 <child>
1386 <object class="GtkCheckButton" id="greeter_keyboard_use">
1387 <property name="visible">True</property>
1388 <property name="can_focus">True</property>
1389 <property name="receives_default">False</property>
1390 <property name="xalign">0</property>
1391 <property name="draw_indicator">True</property>
1392 <child>
1393 <object class="GtkBox" id="box14">
1394 <property name="visible">True</property>
1395 <property name="can_focus">False</property>
1396 <child>
1397 <object class="GtkLabel" id="label6">
1398 <property name="visible">True</property>
1399 <property name="can_focus">False</property>
1400 <property name="label" translatable="yes" context="greeter|option|keyboard">Keyboard</property>
1401 </object>
1402 <packing>
1403 <property name="expand">False</property>
1404 <property name="fill">True</property>
1405 <property name="position">0</property>
1406 </packing>
1407 </child>
1408 <child>
1409 <object class="GtkImage" id="greeter_keyboard_error">
1410 <property name="can_focus">False</property>
1411 <property name="yalign">0</property>
1412 <property name="pixel_size">12</property>
1413 <property name="icon_name">dialog-warning</property>
1414 <property name="icon_size">1</property>
1415 </object>
1416 <packing>
1417 <property name="expand">False</property>
1418 <property name="fill">True</property>
1419 <property name="position">1</property>
1420 </packing>
1421 </child>
1422 </object>
1423 </child>
1424 </object>
1425 <packing>
1426 <property name="left_attach">0</property>
1427 <property name="top_attach">0</property>
1428 </packing>
1429 </child>
1430 <child>
1431 <object class="GtkCheckButton" id="greeter_reader_use">
1432 <property name="visible">True</property>
1433 <property name="can_focus">True</property>
1434 <property name="receives_default">False</property>
1435 <property name="xalign">0</property>
1436 <property name="draw_indicator">True</property>
1437 <child>
1438 <object class="GtkBox" id="box15">
1439 <property name="visible">True</property>
1440 <property name="can_focus">False</property>
1441 <child>
1442 <object class="GtkLabel" id="label11">
1443 <property name="visible">True</property>
1444 <property name="can_focus">False</property>
1445 <property name="label" translatable="yes" context="greeter|option|reader">Reader</property>
1446 </object>
1447 <packing>
1448 <property name="expand">False</property>
1449 <property name="fill">True</property>
1450 <property name="position">0</property>
1451 </packing>
1452 </child>
1453 <child>
1454 <object class="GtkImage" id="greeter_reader_error">
1455 <property name="can_focus">False</property>
1456 <property name="yalign">0</property>
1457 <property name="pixel_size">12</property>
1458 <property name="icon_name">dialog-warning</property>
1459 <property name="icon_size">1</property>
1460 </object>
1461 <packing>
1462 <property name="expand">False</property>
1463 <property name="fill">True</property>
1464 <property name="position">1</property>
1465 </packing>
1466 </child>
1467 </object>
1468 </child>
1469 </object>
1470 <packing>
1471 <property name="left_attach">0</property>
1472 <property name="top_attach">2</property>
1473 </packing>
1474 </child>
14751453 <child>
14761454 <object class="GtkComboBoxText" id="greeter_reader_combo">
14771455 <property name="visible">True</property>
15351513 </packing>
15361514 </child>
15371515 <child>
1538 <object class="GtkLabel" id="greeter_a11y-theme">
1539 <property name="visible">True</property>
1540 <property name="can_focus">False</property>
1541 <property name="halign">start</property>
1542 <property name="label" translatable="yes" context="option|greeter|a11y-theme">Contrast theme</property>
1543 </object>
1544 <packing>
1545 <property name="left_attach">0</property>
1546 <property name="top_attach">4</property>
1547 </packing>
1548 </child>
1549 <child>
1550 <object class="GtkLabel" id="greeter_a11y-font_label">
1551 <property name="visible">True</property>
1552 <property name="can_focus">False</property>
1553 <property name="halign">start</property>
1554 <property name="label" translatable="yes" context="option|greeter|a11y-font">Large font</property>
1555 </object>
1556 <packing>
1557 <property name="left_attach">0</property>
1558 <property name="top_attach">5</property>
1559 </packing>
1560 </child>
1561 <child>
15621516 <object class="GtkComboBoxText" id="greeter_a11y-states_reader">
15631517 <property name="visible">True</property>
15641518 <property name="can_focus">False</property>
16071561 </packing>
16081562 </child>
16091563 <child>
1564 <object class="GtkEventBox" id="greeter_a11y-theme_label_holder">
1565 <property name="visible">True</property>
1566 <property name="can_focus">False</property>
1567 <child>
1568 <object class="GtkLabel" id="greeter_a11y-theme_label">
1569 <property name="visible">True</property>
1570 <property name="can_focus">False</property>
1571 <property name="halign">start</property>
1572 <property name="label" translatable="yes" context="option|greeter|a11y-theme">Contrast theme</property>
1573 </object>
1574 </child>
1575 </object>
1576 <packing>
1577 <property name="left_attach">0</property>
1578 <property name="top_attach">4</property>
1579 </packing>
1580 </child>
1581 <child>
1582 <object class="GtkEventBox" id="greeter_a11y-font_label_holder">
1583 <property name="visible">True</property>
1584 <property name="can_focus">False</property>
1585 <child>
1586 <object class="GtkLabel" id="greeter_a11y-font_label">
1587 <property name="visible">True</property>
1588 <property name="can_focus">False</property>
1589 <property name="halign">start</property>
1590 <property name="label" translatable="yes" context="option|greeter|a11y-font">Large font</property>
1591 </object>
1592 </child>
1593 </object>
1594 <packing>
1595 <property name="left_attach">0</property>
1596 <property name="top_attach">5</property>
1597 </packing>
1598 </child>
1599 <child>
1600 <object class="GtkEventBox" id="greeter_reader_label_holder">
1601 <property name="visible">True</property>
1602 <property name="can_focus">False</property>
1603 <child>
1604 <object class="GtkCheckButton" id="greeter_reader_use">
1605 <property name="visible">True</property>
1606 <property name="can_focus">True</property>
1607 <property name="receives_default">False</property>
1608 <property name="xalign">0</property>
1609 <property name="draw_indicator">True</property>
1610 <child>
1611 <object class="GtkBox" id="box15">
1612 <property name="visible">True</property>
1613 <property name="can_focus">False</property>
1614 <child>
1615 <object class="GtkLabel" id="greeter_reader_label">
1616 <property name="visible">True</property>
1617 <property name="can_focus">False</property>
1618 <property name="label" translatable="yes" context="greeter|option|reader">Reader</property>
1619 </object>
1620 <packing>
1621 <property name="expand">False</property>
1622 <property name="fill">True</property>
1623 <property name="position">0</property>
1624 </packing>
1625 </child>
1626 <child>
1627 <object class="GtkImage" id="greeter_reader_error">
1628 <property name="can_focus">False</property>
1629 <property name="yalign">0</property>
1630 <property name="pixel_size">12</property>
1631 <property name="icon_name">dialog-warning</property>
1632 <property name="icon_size">1</property>
1633 </object>
1634 <packing>
1635 <property name="expand">False</property>
1636 <property name="fill">True</property>
1637 <property name="position">1</property>
1638 </packing>
1639 </child>
1640 </object>
1641 </child>
1642 </object>
1643 </child>
1644 </object>
1645 <packing>
1646 <property name="left_attach">0</property>
1647 <property name="top_attach">2</property>
1648 </packing>
1649 </child>
1650 <child>
1651 <object class="GtkEventBox" id="greeter_keyboard_label_holder">
1652 <property name="visible">True</property>
1653 <property name="can_focus">False</property>
1654 <child>
1655 <object class="GtkCheckButton" id="greeter_keyboard_use">
1656 <property name="visible">True</property>
1657 <property name="can_focus">True</property>
1658 <property name="receives_default">False</property>
1659 <property name="xalign">0</property>
1660 <property name="draw_indicator">True</property>
1661 <child>
1662 <object class="GtkBox" id="box14">
1663 <property name="visible">True</property>
1664 <property name="can_focus">False</property>
1665 <child>
1666 <object class="GtkLabel" id="greeter_keyboard_label">
1667 <property name="visible">True</property>
1668 <property name="can_focus">False</property>
1669 <property name="label" translatable="yes" context="greeter|option|keyboard">Keyboard</property>
1670 </object>
1671 <packing>
1672 <property name="expand">False</property>
1673 <property name="fill">True</property>
1674 <property name="position">0</property>
1675 </packing>
1676 </child>
1677 <child>
1678 <object class="GtkImage" id="greeter_keyboard_error">
1679 <property name="can_focus">False</property>
1680 <property name="yalign">0</property>
1681 <property name="pixel_size">12</property>
1682 <property name="icon_name">dialog-warning</property>
1683 <property name="icon_size">1</property>
1684 </object>
1685 <packing>
1686 <property name="expand">False</property>
1687 <property name="fill">True</property>
1688 <property name="position">1</property>
1689 </packing>
1690 </child>
1691 </object>
1692 </child>
1693 </object>
1694 </child>
1695 </object>
1696 <packing>
1697 <property name="left_attach">0</property>
1698 <property name="top_attach">0</property>
1699 </packing>
1700 </child>
1701 <child>
16101702 <placeholder/>
16111703 </child>
16121704 <child>
16201712 </packing>
16211713 </child>
16221714 <child>
1623 <object class="GtkBox" id="box12">
1624 <property name="visible">True</property>
1625 <property name="can_focus">False</property>
1626 <child>
1627 <object class="GtkCheckButton" id="greeter_allow-debugging_value">
1628 <property name="label" translatable="yes" context="greeter|option|allow-debugging">Debugging mode</property>
1629 <property name="visible">True</property>
1630 <property name="can_focus">True</property>
1631 <property name="receives_default">False</property>
1632 <property name="tooltip_text" translatable="yes" context="greeter|option|allow-debugging">Enable keys to launch GtkInspector
1715 <object class="GtkEventBox" id="greeter_screensaver-timeout_label_holder">
1716 <property name="visible">True</property>
1717 <property name="can_focus">False</property>
1718 <child>
1719 <object class="GtkLabel" id="greeter_screensaver-timeout_label">
1720 <property name="visible">True</property>
1721 <property name="can_focus">False</property>
1722 <property name="halign">start</property>
1723 <property name="hexpand">True</property>
1724 <property name="label" translatable="yes" context="option|greeter|screensaver-timeout">Timeout until the screen blanks </property>
1725 <attributes>
1726 <attribute name="weight" value="semibold"/>
1727 </attributes>
1728 </object>
1729 </child>
1730 </object>
1731 <packing>
1732 <property name="left_attach">0</property>
1733 <property name="top_attach">2</property>
1734 <property name="width">2</property>
1735 </packing>
1736 </child>
1737 <child>
1738 <object class="GtkEventBox" id="greeter_allow-debugging_label_holder">
1739 <property name="visible">True</property>
1740 <property name="can_focus">False</property>
1741 <child>
1742 <object class="GtkBox" id="box12">
1743 <property name="visible">True</property>
1744 <property name="can_focus">False</property>
1745 <child>
1746 <object class="GtkCheckButton" id="greeter_allow-debugging_value">
1747 <property name="label" translatable="yes" context="greeter|option|allow-debugging">Debugging mode</property>
1748 <property name="visible">True</property>
1749 <property name="can_focus">True</property>
1750 <property name="receives_default">False</property>
1751 <property name="tooltip_text" translatable="yes" context="greeter|option|allow-debugging">Enable keys to launch GtkInspector
16331752 More informative log</property>
1634 <property name="xalign">0</property>
1635 <property name="draw_indicator">True</property>
1636 </object>
1637 <packing>
1638 <property name="expand">False</property>
1639 <property name="fill">True</property>
1640 <property name="position">0</property>
1641 </packing>
1642 </child>
1643 <child>
1644 <object class="GtkImage" id="greeter_allow-debugging_error">
1645 <property name="can_focus">False</property>
1646 <property name="yalign">0</property>
1647 <property name="pixel_size">12</property>
1648 <property name="icon_name">dialog-warning</property>
1649 <property name="icon_size">1</property>
1650 </object>
1651 <packing>
1652 <property name="expand">False</property>
1653 <property name="fill">True</property>
1654 <property name="position">1</property>
1655 </packing>
1753 <property name="xalign">0</property>
1754 <property name="draw_indicator">True</property>
1755 </object>
1756 <packing>
1757 <property name="expand">False</property>
1758 <property name="fill">True</property>
1759 <property name="position">0</property>
1760 </packing>
1761 </child>
1762 <child>
1763 <object class="GtkImage" id="greeter_allow-debugging_error">
1764 <property name="can_focus">False</property>
1765 <property name="yalign">0</property>
1766 <property name="pixel_size">12</property>
1767 <property name="icon_name">dialog-warning</property>
1768 <property name="icon_size">1</property>
1769 </object>
1770 <packing>
1771 <property name="expand">False</property>
1772 <property name="fill">True</property>
1773 <property name="position">1</property>
1774 </packing>
1775 </child>
1776 </object>
16561777 </child>
16571778 </object>
16581779 <packing>
1616 </row>
1717 <row>
1818 <col id="0" translatable="yes" context="option|multihead">Select color</col>
19 <col id="1">icon</col>
19 <col id="1">color</col>
2020 </row>
2121 <row>
2222 <col id="0" translatable="yes" context="option|multihead">Use default value</col>
2727 from gi.repository import (
2828 Gdk,
2929 Gtk)
30 from gi.repository import Pango
31 from gi.repository.GObject import markup_escape_text as escape_markup
3032
3133 from lightdm_gtk_greeter_settings import (
3234 helpers,
3638 from lightdm_gtk_greeter_settings.helpers import (
3739 C_,
3840 string2bool,
39 WidgetsWrapper, WidgetsEnum)
41 WidgetsEnum)
4042 from lightdm_gtk_greeter_settings.MonitorsGroup import MonitorsGroup
4143 from lightdm_gtk_greeter_settings.OptionGroup import SimpleGroup
4244
8082 self._widgets = self.Widgets(builder=self.builder)
8183
8284 self._multihead_dialog = None
85 self._entry_menu = None
8386 self._initial_values = {}
8487 self._changed_entries = None
8588 self._entries = None
104107 # Position
105108 'position': (PositionEntry.PositionEntry, '50%,center'),
106109 # Misc
107 'screensaver-timeout': (OptionEntry.AdjustmentEntry, 60),
108 'keyboard': (OptionEntry.StringPathEntry, None),
109 'reader': (OptionEntry.StringPathEntry, None),
110 'screensaver-timeout': (OptionEntry.AdjustmentEntry, '60'),
111 'keyboard': (OptionEntry.StringPathEntry, ''),
112 'reader': (OptionEntry.StringPathEntry, ''),
110113 'a11y-states': (OptionEntry.AccessibilityStatesEntry, ''),
111114 'allow-debugging': (OptionEntry.BooleanEntry, 'false'), }),
112115 MonitorsGroup(self.builder))
184187 else:
185188 entry.connect(action, f)
186189
190 label_holder = entry.widgets['label_holder']
191 if label_holder and isinstance(group, SimpleGroup):
192 label_holder.connect('button-press-event', self.on_entry_label_clicked,
193 entry, group, key)
194
187195 entry.changed.connect(self.on_entry_changed)
188196 self._initial_values[entry] = InitialValue(entry.value, entry.enabled)
189197 self.on_entry_changed(entry, force=True)
190198
191199 def on_entry_removed(self, group, entry, key):
192200 self._initial_values.pop(entry)
201
193202 if self._changed_entries is None:
194203 return
195204
208217 self._changed_entries.discard(entry)
209218
210219 self._widgets.apply.props.sensitive = self._allow_edit and self._changed_entries
220
221 def on_entry_reset_clicked(self, item):
222 entry, value, enabled = item._reset_entry_data
223 if enabled is None:
224 entry.value = value
225 else:
226 entry.enabled = enabled
227
228 def on_entry_label_clicked(self, widget, event, entry, group, key):
229 if event.button != 3:
230 return
231
232 if not self._entry_menu:
233 def new_reset_item():
234 item = Gtk.MenuItem('')
235 item.get_child().props.use_markup = True
236 item.get_child().props.ellipsize = Pango.EllipsizeMode.END
237 item.get_child().props.max_width_chars = 90
238 item.connect('activate', self.on_entry_reset_clicked)
239 return item
240
241 self._entry_menu = Gtk.Menu()
242 self._entry_menu_label_item = Gtk.MenuItem()
243 self._entry_menu_label_item.props.sensitive = False
244 self._entry_menu_separator_item = Gtk.SeparatorMenuItem()
245 self._entry_menu_initial_item = new_reset_item()
246 self._entry_menu_default_item = new_reset_item()
247
248 self._entry_menu.append(self._entry_menu_label_item)
249 self._entry_menu.append(self._entry_menu_separator_item)
250 self._entry_menu.append(self._entry_menu_initial_item)
251 self._entry_menu.append(self._entry_menu_default_item)
252 self._entry_menu.show_all()
253
254 self._entry_menu_label_item.props.label = '%s/%s' % (group.name, key)
255
256 if entry in self._changed_entries:
257 initial = self._initial_values[entry]
258 if entry.enabled != initial.enabled and not initial.enabled:
259 value = _('<i>enabled</i>') if initial.enabled else _('<i>disabled</i>')
260 self._entry_menu_initial_item._reset_entry_data = entry, None, initial.enabled
261 else:
262 if initial.value == '':
263 value = _('<i>empty string</i>')
264 else:
265 value = escape_markup(str(initial.value))
266 self._entry_menu_initial_item._reset_entry_data = entry, initial.value, None
267
268 self._entry_menu_initial_item.set_tooltip_markup(value)
269 self._entry_menu_initial_item.props.visible = True
270 self._entry_menu_initial_item.props.label = \
271 _('Reset to initial value: <b>{value}</b>').format(value=value)
272 else:
273 self._entry_menu_initial_item.props.visible = False
274
275 default = group.defaults[key]
276 if default is not None and entry.value != default:
277 if default == '':
278 value = _('<i>empty string</i>')
279 else:
280 value = escape_markup(str(default))
281
282 self._entry_menu_default_item._reset_entry_data = entry, default, None
283 self._entry_menu_default_item.set_tooltip_markup(value)
284 self._entry_menu_default_item.props.visible = True
285 self._entry_menu_default_item.props.label = \
286 _('Reset to default value: <b>{value}</b>').format(value=value)
287 else:
288 self._entry_menu_default_item.props.visible = False
289
290 self._entry_menu_separator_item.props.visible = \
291 (self._entry_menu_initial_item.props.visible or
292 self._entry_menu_default_item.props.visible)
293 self._entry_menu.popup(None, None, None, None, 0, Gtk.get_current_event_time())
211294
212295 # [greeter] screensaver-timeout
213296 def on_entry_setup_greeter_screensaver_timeout(self, entry):
241241 if self._file_dialog.run() == Gtk.ResponseType.OK:
242242 value = self._file_dialog.get_filename()
243243 self._file_dialog.hide()
244 elif item_type == 'icon':
244 elif item_type == 'color':
245245 if not self._color_dialog:
246246 self._color_dialog = Gtk.ColorChooserDialog(parent=self)
247247 if self._color_dialog.run() == Gtk.ResponseType.OK:
5151 def __init__(self, widgets):
5252 super().__init__()
5353 self._widgets = widgets
54 self._use = widgets['use']
5554 self._widgets_to_disable = []
56 if self._use:
57 self._use.connect('notify::active', self._on_use_toggled)
58 self._error = widgets['error']
55
56 self.__use = widgets['use']
57 if self.__use:
58 self.__use.connect('notify::active', self.__on_use_toggled)
59
60 self.__error = widgets['error']
5961
6062 @property
6163 def value(self):
6668
6769 @value.setter
6870 def value(self, value):
69 if self._use:
70 self._use.props.active = True
71 if self.__use:
72 self.__use.props.active = True
7173 formatted = self.set.emit(value)
7274 self._set_value(value if formatted is None else formatted)
7375
7476 @property
7577 def enabled(self):
7678 '''Visual option state. You can get/set value of disabled option'''
77 if self._use:
78 return self._use.props.active
79 if self.__use:
80 return self.__use.props.active
7981 return True
8082
8183 @enabled.setter
8284 def enabled(self, value):
83 if self._use:
84 self._use.props.active = value
85 if self.__use:
86 self.__use.props.active = value
8587
8688 @property
8789 def error(self):
122124 raise NotImplementedError(self.__class__)
123125
124126 def _get_error(self):
125 if self._error:
126 return self._error.props.tooltip_text
127 if self.__error:
128 return self.__error.props.tooltip_text
127129 return None
128130
129131 def _set_error(self, text):
130 if self._error:
131 self._error.props.visible = text is not None
132 self._error.props.tooltip_text = text
132 if self.__error:
133 self.__error.props.visible = text is not None
134 self.__error.props.tooltip_text = text
133135
134136 def _set_enabled(self, value):
137 if self.__use:
138 self.__use.props.active = value
135139 if self._widgets_to_disable:
136140 for widget in self._widgets_to_disable:
137141 widget.props.sensitive = value
138142
139 def _on_use_toggled(self, toggle, *args):
140 self._set_enabled(self._use.props.active)
141 self._emit_changed()
143 def _show_menu(self):
144 self.__on_label_clicked()
142145
143146 def _emit_changed(self, *unused):
144147 self.changed.emit()
148
149 def __on_use_toggled(self, toggle, *args):
150 self._set_enabled(self.__use.props.active)
151 self._emit_changed()
145152
146153
147154 class BooleanEntry(BaseEntry):
310317 self._image_value = widgets['image_value']
311318 self._color_value = widgets['color_value']
312319
313 self._color_choice.connect('toggled', self._on_color_choice_toggled)
320 self._on_choice_id = self._color_choice.connect('toggled', self._on_color_choice_toggled)
314321 self._color_value.connect('color-set', self._on_color_set)
315322 self._image_value.connect('file-set', self._on_file_set)
316323
318325 if self._image_choice.props.active:
319326 return self._image_value.get_filename() or ''
320327 else:
321 return self._color_value.props.rgba.to_string()
328 r, g, b, __ = (int(0xFF * v) for v in self._color_value.props.rgba)
329 return '#%02x%02x%02x' % (r, g, b)
322330
323331 def _set_value(self, value):
324332 if value is None:
328336 if not rgba.parse(value):
329337 rgba = None
330338
331 self._color_choice.props.active = rgba is not None
332 self._image_choice.props.active = rgba is None
339 with self._color_choice.handler_block(self._on_choice_id):
340 self._color_choice.props.active = rgba is not None
341 self._image_choice.props.active = rgba is None
333342
334343 if rgba is not None:
335344 self._color_value.props.rgba = rgba
339348 self._image_value.select_filename(value)
340349 else:
341350 self._image_value.unselect_all()
351
352 self._emit_changed()
342353
343354 def _on_color_choice_toggled(self, toggle):
344355 self._emit_changed()
3131
3232 def __init__(self, widgets):
3333 super().__init__()
34 self.__defaults_wrapper = None
3435
3536 def read(self, config):
3637 raise NotImplementedError(self.__class__)
3738
3839 def write(self, config):
40 raise NotImplementedError(self.__class__)
41
42 @property
43 def defaults(self):
44 if not self.__defaults_wrapper:
45 class DefaultsWrapper:
46
47 def __init__(self, getter):
48 self._getter = getter
49
50 def __getitem__(self, key):
51 return self._getter(key)
52 self.__defaults_wrapper = DefaultsWrapper(self._get_default)
53 return self.__defaults_wrapper
54
55 def _get_default(self, key):
3956 raise NotImplementedError(self.__class__)
4057
4158 @GObject.Signal
90107 config.set(self._name, key, entry.value)
91108 else:
92109 config.remove_option(self._name, key)
110
111 def _get_default(self, key):
112 return self._defaults[key]
4040
4141 self._anchor = None
4242
43 self._percents.connect('toggled', self._on_percents_toggled)
44 self._mirror.connect('toggled', self._on_mirror_toggled)
45 self._on_value_changed_id = self._adjustment.connect('value-changed',
46 self._on_value_changed)
43 self._on_percents_id = self._percents.connect('toggled', self._on_percents_toggled)
44 self._on_mirror_id = self._mirror.connect('toggled', self._on_mirror_toggled)
45 self._on_value_id = self._adjustment.connect('value-changed', self._on_value_changed)
4746
4847 @property
4948 def value(self):
7776 anchor = 'start'
7877
7978 self._anchor = anchor
80 self._percents.props.active = percents
79 with self._percents.handler_block(self._on_percents_id):
80 self._percents.props.active = percents
8181 self._adjustment.props.upper = 100 if self._percents.props.active else 10000
82 self._mirror.props.active = negative
83 with self._adjustment.handler_block(self._on_value_changed_id):
82 with self._mirror.handler_block(self._on_mirror_id):
83 self._mirror.props.active = negative
84 with self._adjustment.handler_block(self._on_value_id):
8485 self._adjustment.props.value = -p if negative else p
8586
8687 @property
145146 for x, y in product(enumerate(('start', 'center', 'end')), repeat=2)]
146147
147148 self._anchors = {}
149 self._anchors_handlers = {}
148150 for (left, x_anchor), (top, y_anchor), w in anchors:
149151 w.props.halign = anchors_align[left]
150152 w.props.valign = anchors_align[top]
151153 if w != anchors[0][-1]:
152154 w.props.group = anchors[0][-1]
153 w.connect('toggled', self._on_anchor_toggled, x_anchor, y_anchor)
154155 grid.attach(w, left, top, 1, 1)
155156 self._anchors[x_anchor, y_anchor] = w
157 self._anchors_handlers[w] = w.connect('toggled', self._on_anchor_toggled,
158 x_anchor, y_anchor)
156159
157160 grid.show_all()
158161
173176 def _set_value(self, value):
174177 self._last_window_allocation = None
175178 if value:
176 x, _, y = value.partition(' ')
179 x, __, y = value.partition(' ')
177180 self._x.value = x
178181 self._y.value = y or x
179 self._anchors[self._x.anchor, self._y.anchor].props.active = True
180 self._screen_overlay.queue_resize()
182 anchor = self._anchors[self._x.anchor, self._y.anchor]
183 with anchor.handler_block(self._anchors_handlers[anchor]):
184 anchor.props.active = True
185 self._screen_overlay.queue_resize()
186 self._emit_changed()
181187
182188 def _get_corrected_position(self, p, screen, window, anchor):
183189 if anchor == 'center':
163163 return _('Directory is not readable: {path}'.format(path=p))
164164 if st.st_uid == uid:
165165 return not (st.st_mode & stat.S_IRUSR) and \
166 _('LighDM do not have permissions to read path: {path}'.format(path=p))
166 _('LightDM do not have permissions to read path: {path}'.format(path=p))
167167 if st.st_gid in gids:
168168 return not (st.st_mode & stat.S_IRGRP) and \
169 _('LighDM do not have permissions to read path: {path}'.format(path=p))
169 _('LightDM do not have permissions to read path: {path}'.format(path=p))
170170 return not (st.st_mode & stat.S_IROTH) and \
171 _('LighDM do not have permissions to read path: {path}'.format(path=p))
171 _('LightDM do not have permissions to read path: {path}'.format(path=p))
172172
173173 errors = (check(p) for p in accumulate(parts, os.path.join))
174174 error = next((error for error in errors if error), None)
180180 st = os.stat(path)
181181 if st.st_uid == uid:
182182 if not st.st_mode & stat.S_IXUSR:
183 return _('LighDM do not have permissions to execute file: {path}'.format(path=path))
183 return _('LightDM do not have permissions to execute file: {path}'
184 .format(path=path))
184185 elif st.st_gid in gids:
185186 if not st.st_mode & stat.S_IXGRP:
186 return _('LighDM do not have permissions to execute file: {path}'.format(path=path))
187 return _('LightDM do not have permissions to execute file: {path}'
188 .format(path=path))
187189 elif not st.st_mode & stat.S_IXOTH:
188 return _('LighDM do not have permissions to execute file: {path}'.format(path=path))
190 return _('LightDM do not have permissions to execute file: {path}'.format(path=path))
189191
190192 return error
191193