Codebase list lightdm-gtk-greeter-settings / 6f846b1
New PositionEntry implementation Andrew P. 9 years ago
4 changed file(s) with 190 addition(s) and 532 deletion(s). Raw diff Collapse all Expand all
00 <?xml version="1.0" encoding="UTF-8"?>
11 <!-- Generated with glade 3.18.3 -->
22 <interface>
3 <requires lib="gtk+" version="3.4"/>
3 <requires lib="gtk+" version="3.8"/>
44 <requires lib="gtk_greeter_settings" version="1.0"/>
5 <object class="GtkMenu" id="greeter_default-user-image_menu">
6 <property name="visible">True</property>
7 <property name="can_focus">False</property>
8 <child>
9 <object class="GtkMenuItem" id="greeter_default-user-image_icon_item">
10 <property name="visible">True</property>
11 <property name="can_focus">False</property>
12 <property name="label" translatable="yes">Icon</property>
13 </object>
14 </child>
15 <child>
16 <object class="GtkMenuItem" id="greeter_default-user-image_path_item">
17 <property name="visible">True</property>
18 <property name="can_focus">False</property>
19 <property name="label" translatable="yes">Path</property>
20 </object>
21 </child>
22 </object>
523 <object class="GtkFileFilter" id="greeter_default-user-image_path_dialog_filter">
624 <mime-types>
725 <mime-type>image/*</mime-type>
161179 <property name="can_focus">False</property>
162180 <property name="icon_name">dialog-close</property>
163181 </object>
164 <object class="GtkImage" id="icon_image">
165 <property name="visible">True</property>
166 <property name="can_focus">False</property>
167 <property name="icon_name">image</property>
168 </object>
169182 <object class="GtkImage" id="icon_ok">
170183 <property name="visible">True</property>
171184 <property name="can_focus">False</property>
172185 <property name="icon_name">dialog-ok</property>
173 </object>
174 <object class="GtkImage" id="icon_open">
175 <property name="visible">True</property>
176 <property name="can_focus">False</property>
177 <property name="icon_name">document-open</property>
178 </object>
179 <object class="GtkMenu" id="greeter_default-user-image_menu">
180 <property name="visible">True</property>
181 <property name="can_focus">False</property>
182 <child>
183 <object class="GtkImageMenuItem" id="greeter_default-user-image_icon_item">
184 <property name="label">Icon</property>
185 <property name="visible">True</property>
186 <property name="can_focus">False</property>
187 <property name="image">icon_image</property>
188 <property name="use_stock">False</property>
189 </object>
190 </child>
191 <child>
192 <object class="GtkImageMenuItem" id="greeter_default-user-image_path_item">
193 <property name="label">Path</property>
194 <property name="visible">True</property>
195 <property name="can_focus">False</property>
196 <property name="image">icon_open</property>
197 <property name="use_stock">False</property>
198 </object>
199 </child>
200186 </object>
201187 <object class="GtkImage" id="icon_reset">
202188 <property name="visible">True</property>
214200 <property name="title" translatable="yes">LightDM GTK+ Greeter: settings</property>
215201 <property name="window_position">center</property>
216202 <property name="icon_name">lightdm-gtk-greeter-settings</property>
203 <property name="has_resize_grip">True</property>
217204 <signal name="destroy" handler="on_destroy" swapped="no"/>
218205 <child>
219206 <object class="GtkBox" id="box1">
233220 <property name="can_focus">False</property>
234221 <property name="hexpand">True</property>
235222 <property name="vexpand">True</property>
223 <property name="enable_popup">True</property>
236224 <child>
237225 <object class="GtkGrid" id="appearance_box">
238226 <property name="visible">True</property>
380368 <property name="tooltip_text" translatable="yes">Enable this option to override system defaults</property>
381369 <property name="margin_left">24</property>
382370 <property name="hexpand">True</property>
383 <property name="xalign">0</property>
371 <property name="xalign">0.5</property>
384372 <property name="draw_indicator">True</property>
385373 </object>
386374 <packing>
398386 <property name="tooltip_text" translatable="yes">Enable this option to override system defaults</property>
399387 <property name="margin_left">24</property>
400388 <property name="hexpand">True</property>
401 <property name="xalign">0</property>
389 <property name="xalign">0.5</property>
402390 <property name="draw_indicator">True</property>
403391 </object>
404392 <packing>
416404 <property name="tooltip_text" translatable="yes">Enable this option to override system defaults</property>
417405 <property name="margin_left">24</property>
418406 <property name="hexpand">True</property>
419 <property name="xalign">0</property>
407 <property name="xalign">0.5</property>
420408 <property name="draw_indicator">True</property>
421409 </object>
422410 <packing>
434422 <property name="tooltip_text" translatable="yes">Enable this option to override system defaults</property>
435423 <property name="margin_left">24</property>
436424 <property name="hexpand">True</property>
437 <property name="xalign">0</property>
425 <property name="xalign">0.5</property>
438426 <property name="draw_indicator">True</property>
439427 </object>
440428 <packing>
486474 <property name="halign">start</property>
487475 <property name="margin_left">24</property>
488476 <property name="hexpand">True</property>
489 <property name="xalign">0</property>
477 <property name="xalign">0.5</property>
490478 <property name="active">True</property>
491479 <property name="draw_indicator">True</property>
492480 </object>
515503 <property name="halign">start</property>
516504 <property name="margin_left">24</property>
517505 <property name="hexpand">True</property>
518 <property name="xalign">0</property>
506 <property name="xalign">0.5</property>
519507 <property name="active">True</property>
520508 <property name="draw_indicator">True</property>
521509 <property name="group">greeter_background_image_choice</property>
612600 <property name="can_focus">True</property>
613601 <property name="receives_default">False</property>
614602 <property name="margin_left">24</property>
615 <property name="xalign">0</property>
603 <property name="xalign">0.5</property>
616604 <property name="image_position">right</property>
617605 <property name="draw_indicator">True</property>
618606 </object>
675663 <property name="label" translatable="yes">Appearance</property>
676664 </object>
677665 <packing>
678 <property name="tab_fill">False</property>
666 <property name="tab_expand">True</property>
679667 </packing>
680668 </child>
681669 <child>
958946 </object>
959947 <packing>
960948 <property name="position">1</property>
961 <property name="tab_fill">False</property>
949 <property name="tab_expand">True</property>
962950 </packing>
963951 </child>
964952 <child>
974962 <property name="row_spacing">8</property>
975963 <property name="column_spacing">8</property>
976964 <child>
977 <object class="GtkLabel" id="label6">
965 <object class="GtkLabel" id="greeter_position_label">
978966 <property name="visible">True</property>
979967 <property name="can_focus">False</property>
980968 <property name="halign">start</property>
981 <property name="valign">center</property>
969 <property name="label" translatable="yes" context="option|position">Select base point and its position</property>
970 <attributes>
971 <attribute name="style" value="oblique"/>
972 </attributes>
973 </object>
974 <packing>
975 <property name="left_attach">0</property>
976 <property name="top_attach">0</property>
977 <property name="width">3</property>
978 </packing>
979 </child>
980 <child>
981 <object class="GtkAspectFrame" id="greeter_position_screen_frame">
982 <property name="visible">True</property>
983 <property name="can_focus">False</property>
982984 <property name="hexpand">True</property>
983 <property name="label" translatable="yes" context="option|position">Horizontal </property>
984 <attributes>
985 <attribute name="weight" value="semibold"/>
986 </attributes>
987 </object>
988 <packing>
989 <property name="left_attach">0</property>
990 <property name="top_attach">3</property>
991 </packing>
992 </child>
993 <child>
994 <object class="GtkBox" id="box8">
985 <property name="vexpand">True</property>
986 <property name="label_xalign">0</property>
987 <property name="shadow_type">in</property>
988 <property name="obey_child">False</property>
989 <child>
990 <object class="GtkOverlay" id="greeter_position_screen_overlay">
991 <property name="visible">True</property>
992 <property name="can_focus">False</property>
993 <property name="hexpand">True</property>
994 <property name="vexpand">True</property>
995 <child>
996 <object class="GtkBox" id="box3">
997 <property name="visible">True</property>
998 <property name="can_focus">False</property>
999 <property name="hexpand">True</property>
1000 <property name="vexpand">True</property>
1001 <property name="orientation">vertical</property>
1002 <child>
1003 <placeholder/>
1004 </child>
1005 </object>
1006 </child>
1007 <child type="overlay">
1008 <object class="GtkFrame" id="greeter_position_window_frame">
1009 <property name="width_request">100</property>
1010 <property name="height_request">80</property>
1011 <property name="visible">True</property>
1012 <property name="can_focus">False</property>
1013 <property name="halign">start</property>
1014 <property name="valign">start</property>
1015 <property name="border_width">2</property>
1016 <property name="label_xalign">0</property>
1017 <property name="shadow_type">in</property>
1018 <child>
1019 <object class="GtkGrid" id="greeter_position_window_grid">
1020 <property name="visible">True</property>
1021 <property name="can_focus">False</property>
1022 <property name="column_spacing">30</property>
1023 <property name="row_homogeneous">True</property>
1024 <property name="column_homogeneous">True</property>
1025 <child>
1026 <placeholder/>
1027 </child>
1028 <child>
1029 <placeholder/>
1030 </child>
1031 <child>
1032 <placeholder/>
1033 </child>
1034 <child>
1035 <placeholder/>
1036 </child>
1037 <child>
1038 <placeholder/>
1039 </child>
1040 <child>
1041 <placeholder/>
1042 </child>
1043 <child>
1044 <placeholder/>
1045 </child>
1046 <child>
1047 <placeholder/>
1048 </child>
1049 <child>
1050 <placeholder/>
1051 </child>
1052 </object>
1053 </child>
1054 <child type="label_item">
1055 <placeholder/>
1056 </child>
1057 </object>
1058 </child>
1059 </object>
1060 </child>
1061 </object>
1062 <packing>
1063 <property name="left_attach">0</property>
1064 <property name="top_attach">1</property>
1065 <property name="width">3</property>
1066 </packing>
1067 </child>
1068 <child>
1069 <object class="GtkSeparator" id="separator1">
1070 <property name="visible">True</property>
1071 <property name="can_focus">False</property>
1072 <property name="orientation">vertical</property>
1073 </object>
1074 <packing>
1075 <property name="left_attach">1</property>
1076 <property name="top_attach">2</property>
1077 <property name="height">3</property>
1078 </packing>
1079 </child>
1080 <child>
1081 <object class="GtkLabel" id="label9">
1082 <property name="visible">True</property>
1083 <property name="can_focus">False</property>
1084 <property name="halign">start</property>
1085 <property name="label" translatable="yes">Horizontal</property>
1086 </object>
1087 <packing>
1088 <property name="left_attach">0</property>
1089 <property name="top_attach">2</property>
1090 </packing>
1091 </child>
1092 <child>
1093 <object class="GtkLabel" id="label10">
1094 <property name="visible">True</property>
1095 <property name="can_focus">False</property>
1096 <property name="halign">start</property>
1097 <property name="label" translatable="yes">Vertical</property>
1098 </object>
1099 <packing>
1100 <property name="left_attach">2</property>
1101 <property name="top_attach">2</property>
1102 </packing>
1103 </child>
1104 <child>
1105 <object class="GtkBox" id="box6">
9951106 <property name="visible">True</property>
9961107 <property name="can_focus">False</property>
9971108 <property name="spacing">8</property>
9981109 <child>
999 <object class="GtkSpinButton" id="greeter_position_x_value">
1110 <object class="GtkSpinButton" id="greeter_position_x_entry">
10001111 <property name="visible">True</property>
10011112 <property name="can_focus">True</property>
10021113 <property name="halign">start</property>
1003 <property name="margin_left">24</property>
10041114 <property name="invisible_char">●</property>
10051115 <property name="width_chars">6</property>
1116 <property name="text" translatable="yes">0</property>
10061117 <property name="xalign">1</property>
10071118 <property name="adjustment">greeter_position_x_adjustment</property>
10081119 <property name="snap_to_ticks">True</property>
10321143 </object>
10331144 <packing>
10341145 <property name="left_attach">0</property>
1035 <property name="top_attach">4</property>
1036 </packing>
1037 </child>
1038 <child>
1039 <object class="GtkBox" id="box9">
1146 <property name="top_attach">3</property>
1147 </packing>
1148 </child>
1149 <child>
1150 <object class="GtkBox" id="box7">
10401151 <property name="visible">True</property>
10411152 <property name="can_focus">False</property>
10421153 <property name="spacing">8</property>
10431154 <child>
1044 <object class="GtkSpinButton" id="greeter_position_y_value">
1155 <object class="GtkSpinButton" id="greeter_position_y_entry">
10451156 <property name="visible">True</property>
10461157 <property name="can_focus">True</property>
10471158 <property name="halign">start</property>
1048 <property name="margin_left">24</property>
10491159 <property name="invisible_char">●</property>
10501160 <property name="width_chars">6</property>
1161 <property name="text" translatable="yes">0</property>
10511162 <property name="xalign">1</property>
10521163 <property name="adjustment">greeter_position_y_adjustment</property>
10531164 <property name="snap_to_ticks">True</property>
10771188 </object>
10781189 <packing>
10791190 <property name="left_attach">2</property>
1080 <property name="top_attach">4</property>
1081 </packing>
1082 </child>
1083 <child>
1084 <object class="GtkLabel" id="label11">
1085 <property name="visible">True</property>
1086 <property name="can_focus">False</property>
1087 <property name="halign">start</property>
1088 <property name="valign">center</property>
1089 <property name="hexpand">True</property>
1090 <property name="label" translatable="yes" context="option|position">Vertical</property>
1091 <attributes>
1092 <attribute name="weight" value="semibold"/>
1093 </attributes>
1094 </object>
1095 <packing>
1096 <property name="left_attach">2</property>
10971191 <property name="top_attach">3</property>
1098 </packing>
1099 </child>
1100 <child>
1101 <object class="GtkSeparator" id="separator2">
1102 <property name="visible">True</property>
1103 <property name="can_focus">False</property>
1104 <property name="orientation">vertical</property>
1105 </object>
1106 <packing>
1107 <property name="left_attach">1</property>
1108 <property name="top_attach">3</property>
1109 <property name="height">3</property>
1110 </packing>
1111 </child>
1112 <child>
1113 <object class="GtkLabel" id="greeter_position_label">
1114 <property name="visible">True</property>
1115 <property name="can_focus">False</property>
1116 <property name="halign">start</property>
1117 <property name="label" translatable="yes" context="option|position">Select base point and its position</property>
1118 <attributes>
1119 <attribute name="style" value="oblique"/>
1120 </attributes>
1121 </object>
1122 <packing>
1123 <property name="left_attach">0</property>
1124 <property name="top_attach">0</property>
1125 <property name="width">3</property>
11261192 </packing>
11271193 </child>
11281194 <child>
11311197 <property name="visible">True</property>
11321198 <property name="can_focus">True</property>
11331199 <property name="receives_default">False</property>
1134 <property name="margin_left">24</property>
11351200 <property name="xalign">0</property>
11361201 <property name="draw_indicator">True</property>
11371202 </object>
11381203 <packing>
11391204 <property name="left_attach">0</property>
1140 <property name="top_attach">5</property>
1205 <property name="top_attach">4</property>
11411206 </packing>
11421207 </child>
11431208 <child>
11461211 <property name="visible">True</property>
11471212 <property name="can_focus">True</property>
11481213 <property name="receives_default">False</property>
1149 <property name="margin_left">24</property>
11501214 <property name="xalign">0</property>
11511215 <property name="draw_indicator">True</property>
11521216 </object>
11531217 <packing>
11541218 <property name="left_attach">2</property>
1155 <property name="top_attach">5</property>
1156 </packing>
1157 </child>
1158 <child>
1159 <object class="GtkFixed" id="greeter_position_screen">
1160 <property name="visible">True</property>
1161 <property name="app_paintable">True</property>
1162 <property name="can_focus">False</property>
1163 <property name="hexpand">True</property>
1164 <property name="vexpand">True</property>
1165 <property name="resize_mode">immediate</property>
1166 <child>
1167 <object class="GtkFrame" id="greeter_position_window">
1168 <property name="width_request">100</property>
1169 <property name="height_request">80</property>
1170 <property name="visible">True</property>
1171 <property name="can_focus">False</property>
1172 <property name="halign">start</property>
1173 <property name="valign">start</property>
1174 <property name="border_width">2</property>
1175 <property name="resize_mode">immediate</property>
1176 <property name="label_xalign">0</property>
1177 <property name="shadow_type">in</property>
1178 <child>
1179 <object class="GtkGrid" id="greeter_position_window_grid">
1180 <property name="visible">True</property>
1181 <property name="can_focus">False</property>
1182 <property name="hexpand">True</property>
1183 <property name="vexpand">True</property>
1184 <property name="column_spacing">30</property>
1185 <property name="row_homogeneous">True</property>
1186 <property name="column_homogeneous">True</property>
1187 <child>
1188 <object class="GtkRadioButton" id="greeter_position_base_start_start">
1189 <property name="visible">True</property>
1190 <property name="can_focus">True</property>
1191 <property name="receives_default">False</property>
1192 <property name="halign">start</property>
1193 <property name="valign">start</property>
1194 <property name="xalign">0</property>
1195 <property name="active">True</property>
1196 <property name="draw_indicator">True</property>
1197 </object>
1198 <packing>
1199 <property name="left_attach">0</property>
1200 <property name="top_attach">0</property>
1201 </packing>
1202 </child>
1203 <child>
1204 <object class="GtkRadioButton" id="greeter_position_base_center_start">
1205 <property name="visible">True</property>
1206 <property name="can_focus">True</property>
1207 <property name="receives_default">False</property>
1208 <property name="halign">center</property>
1209 <property name="valign">start</property>
1210 <property name="xalign">0</property>
1211 <property name="draw_indicator">True</property>
1212 <property name="group">greeter_position_base_start_start</property>
1213 </object>
1214 <packing>
1215 <property name="left_attach">1</property>
1216 <property name="top_attach">0</property>
1217 </packing>
1218 </child>
1219 <child>
1220 <object class="GtkRadioButton" id="greeter_position_base_end_start">
1221 <property name="visible">True</property>
1222 <property name="can_focus">True</property>
1223 <property name="receives_default">False</property>
1224 <property name="halign">end</property>
1225 <property name="valign">start</property>
1226 <property name="xalign">0</property>
1227 <property name="draw_indicator">True</property>
1228 <property name="group">greeter_position_base_start_start</property>
1229 </object>
1230 <packing>
1231 <property name="left_attach">2</property>
1232 <property name="top_attach">0</property>
1233 </packing>
1234 </child>
1235 <child>
1236 <object class="GtkRadioButton" id="greeter_position_base_start_center">
1237 <property name="visible">True</property>
1238 <property name="can_focus">True</property>
1239 <property name="receives_default">False</property>
1240 <property name="halign">start</property>
1241 <property name="valign">center</property>
1242 <property name="xalign">0</property>
1243 <property name="draw_indicator">True</property>
1244 <property name="group">greeter_position_base_start_start</property>
1245 </object>
1246 <packing>
1247 <property name="left_attach">0</property>
1248 <property name="top_attach">1</property>
1249 </packing>
1250 </child>
1251 <child>
1252 <object class="GtkRadioButton" id="greeter_position_base_center_center">
1253 <property name="visible">True</property>
1254 <property name="can_focus">True</property>
1255 <property name="receives_default">False</property>
1256 <property name="halign">center</property>
1257 <property name="valign">center</property>
1258 <property name="xalign">0</property>
1259 <property name="draw_indicator">True</property>
1260 <property name="group">greeter_position_base_start_start</property>
1261 </object>
1262 <packing>
1263 <property name="left_attach">1</property>
1264 <property name="top_attach">1</property>
1265 </packing>
1266 </child>
1267 <child>
1268 <object class="GtkRadioButton" id="greeter_position_base_end_center">
1269 <property name="visible">True</property>
1270 <property name="can_focus">True</property>
1271 <property name="receives_default">False</property>
1272 <property name="halign">end</property>
1273 <property name="valign">center</property>
1274 <property name="xalign">0</property>
1275 <property name="draw_indicator">True</property>
1276 <property name="group">greeter_position_base_start_start</property>
1277 </object>
1278 <packing>
1279 <property name="left_attach">2</property>
1280 <property name="top_attach">1</property>
1281 </packing>
1282 </child>
1283 <child>
1284 <object class="GtkRadioButton" id="greeter_position_base_start_end">
1285 <property name="visible">True</property>
1286 <property name="can_focus">True</property>
1287 <property name="receives_default">False</property>
1288 <property name="halign">start</property>
1289 <property name="valign">end</property>
1290 <property name="xalign">0</property>
1291 <property name="draw_indicator">True</property>
1292 <property name="group">greeter_position_base_start_start</property>
1293 </object>
1294 <packing>
1295 <property name="left_attach">0</property>
1296 <property name="top_attach">2</property>
1297 </packing>
1298 </child>
1299 <child>
1300 <object class="GtkRadioButton" id="greeter_position_base_center_end">
1301 <property name="visible">True</property>
1302 <property name="can_focus">True</property>
1303 <property name="receives_default">False</property>
1304 <property name="halign">center</property>
1305 <property name="valign">end</property>
1306 <property name="xalign">0</property>
1307 <property name="draw_indicator">True</property>
1308 <property name="group">greeter_position_base_start_start</property>
1309 </object>
1310 <packing>
1311 <property name="left_attach">1</property>
1312 <property name="top_attach">2</property>
1313 </packing>
1314 </child>
1315 <child>
1316 <object class="GtkRadioButton" id="greeter_position_base_end_end">
1317 <property name="visible">True</property>
1318 <property name="can_focus">True</property>
1319 <property name="receives_default">False</property>
1320 <property name="halign">end</property>
1321 <property name="valign">end</property>
1322 <property name="xalign">0</property>
1323 <property name="draw_indicator">True</property>
1324 <property name="group">greeter_position_base_start_start</property>
1325 </object>
1326 <packing>
1327 <property name="left_attach">2</property>
1328 <property name="top_attach">2</property>
1329 </packing>
1330 </child>
1331 </object>
1332 </child>
1333 <child type="label_item">
1334 <placeholder/>
1335 </child>
1336 </object>
1337 </child>
1338 </object>
1339 <packing>
1340 <property name="left_attach">0</property>
1341 <property name="top_attach">1</property>
1342 <property name="width">3</property>
1343 <property name="height">2</property>
1219 <property name="top_attach">4</property>
13441220 </packing>
13451221 </child>
13461222 </object>
13501226 </packing>
13511227 </child>
13521228 <child type="tab">
1353 <object class="GtkLabel" id="label3">
1229 <object class="GtkLabel" id="label5">
13541230 <property name="visible">True</property>
13551231 <property name="can_focus">False</property>
13561232 <property name="label" translatable="yes">Window position</property>
13571233 </object>
13581234 <packing>
13591235 <property name="position">2</property>
1360 <property name="tab_fill">False</property>
1236 <property name="tab_expand">True</property>
13611237 </packing>
13621238 </child>
13631239 <child>
14991375 </packing>
15001376 </child>
15011377 <child type="tab">
1502 <object class="GtkLabel" id="label4">
1378 <object class="GtkLabel" id="label3">
15031379 <property name="visible">True</property>
15041380 <property name="can_focus">False</property>
15051381 <property name="label" translatable="yes">Misc.</property>
15061382 </object>
15071383 <packing>
15081384 <property name="position">3</property>
1509 <property name="tab_fill">False</property>
1385 <property name="tab_expand">True</property>
15101386 </packing>
15111387 </child>
15121388 </object>
2424
2525 from gi.repository import Gtk
2626 from lightdm_gtk_greeter_settings import OptionEntry
27 from lightdm_gtk_greeter_settings.OptionGroup import SimpleGroup
2728 from lightdm_gtk_greeter_settings import helpers
2829 from lightdm_gtk_greeter_settings.helpers import C_, WidgetsWrapper
29
30 from lightdm_gtk_greeter_settings import PositionEntry
3031 from lightdm_gtk_greeter_settings.MultiheadSetupDialog import MonitorsGroup
31 from lightdm_gtk_greeter_settings.OptionGroup import SimpleGroup
3232
3333
3434 __all__ = ['GtkGreeterSettingsWindow']
8989 'indicators': (OptionEntry.IndicatorsEntry,
9090 '~host;~spacer;~clock;~spacer;~language;~session;~a11y;~power'),
9191 # Position
92 'position': (OptionEntry.PositionEntry, '50%,center'),
92 'position': (PositionEntry.PositionEntry, '50%,center'),
9393 # Misc
9494 'screensaver-timeout': (OptionEntry.AdjustmentEntry, 60),
9595 'keyboard': (OptionEntry.StringEntry, None)
2121 from gi.repository import Gtk, Gdk, GdkPixbuf
2222 from lightdm_gtk_greeter_settings import helpers
2323 from lightdm_gtk_greeter_settings.OptionEntry import BaseEntry
24 from lightdm_gtk_greeter_settings.OptionGroup import BaseGroup
2425 from lightdm_gtk_greeter_settings.helpers import WidgetsWrapper, C_, ModelRowEnum
25
26 from lightdm_gtk_greeter_settings.OptionGroup import BaseGroup
2726
2827
2928 __all__ = ['MultiheadSetupDialog']
1616
1717 from builtins import isinstance
1818 from collections import OrderedDict
19 from itertools import product
20 from locale import gettext as _
2119 import os
2220 import time
2321
3129
3230
3331 __all__ = ['BaseEntry', 'BooleanEntry', 'StringEntry', 'ClockFormatEntry',
34 'BackgroundEntry', 'IconEntry', 'IndicatorsEntry', 'PositionEntry',
32 'BackgroundEntry', 'IconEntry', 'IndicatorsEntry',
3533 'AdjustmentEntry', 'ChoiceEntry']
3634
3735
289287 self._path_dialog_preview = widgets['path_dialog_preview']
290288 self._icon_dialog = None
291289
290 #self._icon_item.set_ic
291
292292 self._button.connect('toggled', self._on_button_toggled)
293293 self._menu.connect('hide', self._on_menu_hide)
294294 self._icon_item.connect('activate', self._on_select_icon)
295295 self._path_item.connect('activate', self._on_select_path)
296 self._path_dialog.connect(
297 'update-preview', self._on_update_path_preview)
296 self._path_dialog.connect('update-preview', self._on_update_path_preview)
298297
299298 def _get_value(self):
300299 return self._value
534533 self._move_selection(move_up=False)
535534
536535
537 class PositionEntry(BaseEntry):
538
539 class Dimension:
540
541 def __init__(self, name, widgets, anchors, on_changed):
542 self.__dict__.update(('_%s' % w, widgets['%s_%s' % (name, w)])
543 for w in ('value', 'percents', 'mirror',
544 'adjustment'))
545 self._name = name
546 self._on_changed = on_changed
547 self._anchor = ''
548
549 self._percents.connect('toggled', self._on_percents_toggled)
550 self._mirror.connect('toggled', self._on_mirror_toggled)
551 self._on_value_changed_id = self._adjustment.connect(
552 'value-changed',
553 self._on_value_changed)
554
555 for (x, y), widget in list(anchors.items()):
556 widget.connect('toggled', self._on_anchor_toggled, self,
557 x if self._name == 'x' else y)
558
559 @property
560 def value(self):
561 return '%s%d%s,%s' % ('-' if self._mirror.props.active else '',
562 int(self._value.props.value),
563 '%' if self._percents.props.active else '',
564 self._anchor)
565
566 @value.setter
567 def value(self, dim_value):
568 value, _, anchor = dim_value.partition(',')
569
570 percents = value and value[-1] == '%'
571 if percents:
572 value = value[:-1]
573
574 try:
575 p = int(value)
576 except ValueError:
577 p = 0
578
579 negative = (p < 0) or (p == 0 and value and value[0] == '-')
580
581 if not anchor or anchor not in ('start', 'center', 'end'):
582 if negative:
583 anchor = 'end'
584 else:
585 anchor = 'start'
586 self._anchor = anchor
587
588 self._percents.props.active = percents
589 self._adjustment.props.upper = 100 if self._percents.props.active \
590 else 10000
591 self._mirror.props.active = negative
592 with self._adjustment.handler_block(self._on_value_changed_id):
593 self._adjustment.props.value = -p if negative else p
594
595 @property
596 def anchor(self):
597 return self._anchor
598
599 def get_scaled_position(self, screen, window, scale):
600 screen_size = screen[0] if self._name == 'x' else screen[1]
601 window_size = window[0] if self._name == 'x' else window[1]
602
603 p = int(self._adjustment.props.value)
604 if self._percents.props.active:
605 p = screen_size * p / 100
606 else:
607 p *= scale
608
609 if self._mirror.props.active:
610 p = screen_size - p
611
612 if self._anchor == 'center':
613 p -= window_size / 2
614 elif self._anchor == 'end':
615 p -= window_size
616
617 p = int(p)
618
619 if p + window_size > screen_size:
620 p = screen_size - window_size
621 if p < 0:
622 p = 0
623
624 return p
625
626 def _on_value_changed(self, widget):
627 self._on_changed(self)
628
629 def _on_percents_toggled(self, toggle):
630 self._adjustment.props.upper = 100 if toggle.props.active \
631 else 10000
632 self._on_changed(self)
633
634 def _on_mirror_toggled(self, toggle):
635 self._on_changed(self)
636
637 def _on_anchor_toggled(self, toggle, dimension, anchor):
638 if dimension == self and toggle.props.active \
639 and anchor != self._anchor:
640 self._anchor = anchor
641 self._on_changed(self)
642
643 REAL_WINDOW_SIZE = 430, 210
644
645 def __init__(self, widgets):
646 super().__init__(widgets)
647 self._screen = widgets['screen']
648 self._window = widgets['window']
649 self._screen_pos = (0, 0)
650 self._screen_size = (0, 0)
651
652 self._anchors = {(x, y): widgets['base_%s_%s' % (x, y)]
653 for x, y in product(('start', 'center', 'end'),
654 repeat=2)}
655
656 self._on_resize_id = self._screen.connect(
657 'size-allocate', self._on_resize)
658 self._screen.connect('draw', self._on_draw_screen_border)
659 self._screen.connect('screen-changed', self._on_gdkscreen_changed)
660 self._on_gdkscreen_monitors_changed_id = \
661 self._screen.get_screen().connect('monitors-changed',
662 self.
663 _on_gdkscreen_monitors_changed)
664
665 self._x = PositionEntry.Dimension(
666 'x', widgets, self._anchors, self._on_dimension_changed)
667 self._y = PositionEntry.Dimension(
668 'y', widgets, self._anchors, self._on_dimension_changed)
669
670 def _get_value(self):
671 return self._x.value + ' ' + self._y.value
672
673 def _set_value(self, value):
674 if value:
675 x, _, y = value.partition(' ')
676 self._x.value = x
677 self._y.value = y or x
678 self._anchors[self._x.anchor, self._y.anchor].props.active = True
679 self._update_layout()
680
681 def _update_layout(self):
682 screen = self._screen.get_toplevel().get_screen()
683 geometry = screen.get_monitor_geometry(screen.get_primary_monitor())
684 window_allocation = self._window.get_allocation()
685 window_size = window_allocation.width, window_allocation.height
686 scale = self._screen_size[0] / geometry.width
687
688 x = self._screen_pos[0] + \
689 self._x.get_scaled_position(self._screen_size, window_size, scale)
690 y = self._screen_pos[1] + \
691 self._y.get_scaled_position(self._screen_size, window_size, scale)
692
693 self._screen.move(self._window, x, y)
694 self._screen.check_resize()
695
696 def _on_resize(self, widget, allocation):
697 screen = self._screen.get_toplevel().get_screen()
698 geometry = screen.get_monitor_geometry(screen.get_primary_monitor())
699 screen_scale = geometry.height / geometry.width
700
701 width = allocation.width
702 height = int(width * screen_scale)
703
704 if height > allocation.height:
705 height = allocation.height
706 width = min(width, int(height / screen_scale))
707 self._screen_pos = int((allocation.width - width) / 2), 0
708 self._screen_size = (width, height)
709
710 with self._screen.handler_block(self._on_resize_id):
711 scale = width / geometry.width
712 self._window.set_size_request(
713 PositionEntry.REAL_WINDOW_SIZE[0] * scale,
714 PositionEntry.REAL_WINDOW_SIZE[1] * scale)
715 self._update_layout()
716
717 def _on_draw_screen_border(self, widget, cr):
718 width, height = self._screen_size
719 x, y = self._screen_pos
720 line_width = 2
721 width -= line_width
722 height -= line_width
723
724 x += line_width / 2
725 y += line_width / 2
726 cr.set_source_rgba(0.2, 0.1, 0.2, 0.8)
727 cr.set_line_width(line_width)
728
729 cr.move_to(x, y)
730 cr.line_to(x + width, y)
731 cr.line_to(x + width, y + height)
732 cr.line_to(x, y + height)
733 cr.line_to(x, y - line_width / 2)
734 cr.stroke_preserve()
735
736 return False
737
738 def _on_gdkscreen_changed(self, widget, prev_screen):
739 widget.queue_resize()
740 if prev_screen:
741 prev_screen.disconnect(self._on_gdkscreen_monitors_changed_id)
742 self._on_gdkscreen_monitors_changed_id = widget.get_screen().connect(
743 'monitors-changed',
744 self._on_gdkscreen_monitors_changed)
745
746 def _on_gdkscreen_monitors_changed(self, screen):
747 self._screen.queue_resize()
748
749 def _on_dimension_changed(self, dimension):
750 with self._screen.handler_block(self._on_resize_id):
751 self._update_layout()
752 self._emit_changed()