Merge lp:~kalgasnik/lightdm-gtk-greeter/new_panel_layout into lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/trunk
- new_panel_layout
- Merge into trunk
Proposed by
Andrew P.
Status: | Merged |
---|---|
Merged at revision: | 287 |
Proposed branch: | lp:~kalgasnik/lightdm-gtk-greeter/new_panel_layout |
Merge into: | lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/trunk |
Diff against target: |
1097 lines (+729/-61) (has conflicts) 6 files modified
src/Makefile.am (+2/-1) src/greeter_menu_bar.xml (+8/-0) src/greetermenubar.c (+342/-0) src/greetermenubar.h (+37/-0) src/lightdm-gtk-greeter.c (+198/-59) src/lightdm-gtk-greeter.glade (+142/-1) Text conflict in src/lightdm-gtk-greeter.c Text conflict in src/lightdm-gtk-greeter.glade |
To merge this branch: | bzr merge lp:~kalgasnik/lightdm-gtk-greeter/new_panel_layout |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
LightDM Gtk+ Greeter Development Team | Pending | ||
Review via email: mp+222461@code.launchpad.net |
Commit message
Description of the change
New panel items:
"~spacer"
"~separator"
"~host"
"~clock"
"show-clock" option is deprecated.
Styling notes:
"panel-item" - class for all panel items
"panel-
"panel-item-spacer" - ~spacer
"panel-
"panel-item-text" - ~~text (maybe ~clock and ~host too)
"panel-
Usage:
#power_
{
color: red;
}
#power_
{
color: orange;
}
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'src/Makefile.am' | |||
2 | --- src/Makefile.am 2014-05-21 17:44:19 +0000 | |||
3 | +++ src/Makefile.am 2014-06-08 14:43:42 +0000 | |||
4 | @@ -7,7 +7,8 @@ | |||
5 | 7 | 7 | ||
6 | 8 | lightdm_gtk_greeter_SOURCES = \ | 8 | lightdm_gtk_greeter_SOURCES = \ |
7 | 9 | $(lightdm_gtk_greeter_built_sources) \ | 9 | $(lightdm_gtk_greeter_built_sources) \ |
9 | 10 | lightdm-gtk-greeter.c | 10 | lightdm-gtk-greeter.c \ |
10 | 11 | greetermenubar.c | ||
11 | 11 | 12 | ||
12 | 12 | AM_CPPFLAGS = \ | 13 | AM_CPPFLAGS = \ |
13 | 13 | -I$(top_srcdir) \ | 14 | -I$(top_srcdir) \ |
14 | 14 | 15 | ||
15 | === added file 'src/greeter_menu_bar.xml' | |||
16 | --- src/greeter_menu_bar.xml 1970-01-01 00:00:00 +0000 | |||
17 | +++ src/greeter_menu_bar.xml 2014-06-08 14:43:42 +0000 | |||
18 | @@ -0,0 +1,8 @@ | |||
19 | 1 | <glade-catalog name="greeter_menu_bar" domain="glade-3" | ||
20 | 2 | depends="gtk+" version="1.0"> | ||
21 | 3 | <glade-widget-classes> | ||
22 | 4 | <glade-widget-class title="Greeter MenuBar" name="GreeterMenuBar" | ||
23 | 5 | generic-name="GreeterMenuBar" parent="GtkMenuBar" | ||
24 | 6 | icon-name="widget-gtk-window"/> | ||
25 | 7 | </glade-widget-classes> | ||
26 | 8 | </glade-catalog> | ||
27 | 0 | 9 | ||
28 | === added file 'src/greetermenubar.c' | |||
29 | --- src/greetermenubar.c 1970-01-01 00:00:00 +0000 | |||
30 | +++ src/greetermenubar.c 2014-06-08 14:43:42 +0000 | |||
31 | @@ -0,0 +1,342 @@ | |||
32 | 1 | #include <gtk/gtk.h> | ||
33 | 2 | #include "greetermenubar.h" | ||
34 | 3 | |||
35 | 4 | |||
36 | 5 | static void greeter_menu_bar_size_allocate(GtkWidget* widget, GtkAllocation* allocation); | ||
37 | 6 | |||
38 | 7 | G_DEFINE_TYPE(GreeterMenuBar, greeter_menu_bar, GTK_TYPE_MENU_BAR); | ||
39 | 8 | |||
40 | 9 | static void | ||
41 | 10 | greeter_menu_bar_class_init(GreeterMenuBarClass* klass) | ||
42 | 11 | { | ||
43 | 12 | GtkWidgetClass* widget_class = GTK_WIDGET_CLASS(klass); | ||
44 | 13 | widget_class->size_allocate = greeter_menu_bar_size_allocate; | ||
45 | 14 | } | ||
46 | 15 | |||
47 | 16 | static void | ||
48 | 17 | greeter_menu_bar_init(GreeterMenuBar* square) | ||
49 | 18 | { | ||
50 | 19 | |||
51 | 20 | } | ||
52 | 21 | |||
53 | 22 | GtkWidget* | ||
54 | 23 | greeter_menu_bar_new() | ||
55 | 24 | { | ||
56 | 25 | return GTK_WIDGET(g_object_new(greeter_menu_bar_get_type(), NULL)); | ||
57 | 26 | } | ||
58 | 27 | |||
59 | 28 | #if GTK_CHECK_VERSION (3, 0, 0) | ||
60 | 29 | static gint | ||
61 | 30 | sort_minimal_size(gconstpointer a, gconstpointer b, GtkRequestedSize* sizes) | ||
62 | 31 | { | ||
63 | 32 | gint a_size = sizes[GPOINTER_TO_INT(a)].natural_size; | ||
64 | 33 | gint b_size = sizes[GPOINTER_TO_INT(b)].natural_size; | ||
65 | 34 | return a_size == b_size ? 0 : a_size > b_size ? -1 : +1; | ||
66 | 35 | } | ||
67 | 36 | |||
68 | 37 | static void | ||
69 | 38 | greeter_menu_bar_size_allocate(GtkWidget* widget, GtkAllocation* allocation) | ||
70 | 39 | { | ||
71 | 40 | GList* item; | ||
72 | 41 | GList* shell_children; | ||
73 | 42 | GList* expand_nums = NULL; | ||
74 | 43 | guint visible_count = 0, expand_count = 0; | ||
75 | 44 | |||
76 | 45 | g_return_if_fail(allocation != NULL); | ||
77 | 46 | g_return_if_fail(GREETER_IS_MENU_BAR(widget)); | ||
78 | 47 | |||
79 | 48 | gtk_widget_set_allocation(widget, allocation); | ||
80 | 49 | |||
81 | 50 | GtkPackDirection pack_direction = gtk_menu_bar_get_pack_direction(GTK_MENU_BAR(widget)); | ||
82 | 51 | g_return_if_fail(pack_direction == GTK_PACK_DIRECTION_LTR || pack_direction == GTK_PACK_DIRECTION_RTL); | ||
83 | 52 | |||
84 | 53 | shell_children = gtk_container_get_children(GTK_CONTAINER(widget)); | ||
85 | 54 | |||
86 | 55 | for(item = shell_children; item; item = g_list_next(item)) | ||
87 | 56 | if(gtk_widget_get_visible(item->data)) | ||
88 | 57 | { | ||
89 | 58 | if(gtk_widget_compute_expand(item->data, GTK_ORIENTATION_HORIZONTAL)) | ||
90 | 59 | { | ||
91 | 60 | expand_nums = g_list_prepend(expand_nums, GINT_TO_POINTER(visible_count)); | ||
92 | 61 | expand_count++; | ||
93 | 62 | } | ||
94 | 63 | visible_count++; | ||
95 | 64 | } | ||
96 | 65 | |||
97 | 66 | if(gtk_widget_get_realized(widget)) | ||
98 | 67 | gdk_window_move_resize(gtk_widget_get_window(widget), | ||
99 | 68 | allocation->x, allocation->y, | ||
100 | 69 | allocation->width, allocation->height); | ||
101 | 70 | |||
102 | 71 | if(visible_count > 0) | ||
103 | 72 | { | ||
104 | 73 | GtkAllocation remaining_space; | ||
105 | 74 | GtkStyleContext* context = gtk_widget_get_style_context(widget); | ||
106 | 75 | GtkStateFlags flags = gtk_widget_get_state_flags(widget); | ||
107 | 76 | GtkRequestedSize* requested_sizes = g_newa(GtkRequestedSize, visible_count); | ||
108 | 77 | guint border_width = gtk_container_get_border_width(GTK_CONTAINER(widget)); | ||
109 | 78 | GtkShadowType shadow_type = GTK_SHADOW_OUT; | ||
110 | 79 | GtkBorder border; | ||
111 | 80 | gint toggle_size; | ||
112 | 81 | |||
113 | 82 | gtk_style_context_get_padding(context, flags, &border); | ||
114 | 83 | gtk_widget_style_get(widget, "shadow-type", &shadow_type, NULL); | ||
115 | 84 | |||
116 | 85 | remaining_space.x = (border_width + border.left); | ||
117 | 86 | remaining_space.y = (border_width + border.top); | ||
118 | 87 | remaining_space.width = allocation->width - | ||
119 | 88 | 2 * border_width - border.left - border.right; | ||
120 | 89 | remaining_space.height = allocation->height - | ||
121 | 90 | 2 * border_width - border.top - border.bottom; | ||
122 | 91 | |||
123 | 92 | if (shadow_type != GTK_SHADOW_NONE) | ||
124 | 93 | { | ||
125 | 94 | gtk_style_context_get_border(context, flags, &border); | ||
126 | 95 | |||
127 | 96 | remaining_space.x += border.left; | ||
128 | 97 | remaining_space.y += border.top; | ||
129 | 98 | remaining_space.width -= border.left + border.right; | ||
130 | 99 | remaining_space.height -= border.top + border.bottom; | ||
131 | 100 | } | ||
132 | 101 | |||
133 | 102 | GtkRequestedSize* request = requested_sizes; | ||
134 | 103 | int size = remaining_space.width; | ||
135 | 104 | gboolean ltr = (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_LTR) == (pack_direction == GTK_PACK_DIRECTION_LTR); | ||
136 | 105 | |||
137 | 106 | for(item = shell_children; item; item = g_list_next(item)) | ||
138 | 107 | { | ||
139 | 108 | if (!gtk_widget_get_visible(item->data)) | ||
140 | 109 | continue; | ||
141 | 110 | |||
142 | 111 | request->data = item->data; | ||
143 | 112 | gtk_widget_get_preferred_width_for_height(item->data, remaining_space.height, | ||
144 | 113 | &request->minimum_size, | ||
145 | 114 | &request->natural_size); | ||
146 | 115 | gtk_menu_item_toggle_size_request(GTK_MENU_ITEM(item->data), | ||
147 | 116 | &toggle_size); | ||
148 | 117 | request->minimum_size += toggle_size; | ||
149 | 118 | request->natural_size += toggle_size; | ||
150 | 119 | |||
151 | 120 | gtk_menu_item_toggle_size_allocate(GTK_MENU_ITEM(item->data), toggle_size); | ||
152 | 121 | |||
153 | 122 | size -= request->minimum_size; | ||
154 | 123 | request++; | ||
155 | 124 | } | ||
156 | 125 | |||
157 | 126 | size = gtk_distribute_natural_allocation(size, visible_count, requested_sizes); | ||
158 | 127 | |||
159 | 128 | /* Distribution extra space for widgets with expand=True */ | ||
160 | 129 | if(size > 0 && expand_nums) | ||
161 | 130 | { | ||
162 | 131 | expand_nums = g_list_sort_with_data(expand_nums, (GCompareDataFunc)sort_minimal_size, | ||
163 | 132 | requested_sizes); | ||
164 | 133 | GList* first_item = expand_nums; | ||
165 | 134 | gint needed_size = -1; | ||
166 | 135 | gint max_size = requested_sizes[GPOINTER_TO_INT(first_item->data)].natural_size; | ||
167 | 136 | gint total_needed_size = 0; | ||
168 | 137 | |||
169 | 138 | |||
170 | 139 | /* Free space that all widgets need to have the same (max_size) width | ||
171 | 140 | * [___max_width___][widget ][widget____ ] | ||
172 | 141 | * total_needed_size := [] + [ ] + [ ] | ||
173 | 142 | * total_needed_size = [ ] | ||
174 | 143 | */ | ||
175 | 144 | for(item = g_list_next(expand_nums); item; item = g_list_next(item)) | ||
176 | 145 | total_needed_size += max_size - requested_sizes[GPOINTER_TO_INT(item->data)].natural_size; | ||
177 | 146 | |||
178 | 147 | while(first_item) | ||
179 | 148 | { | ||
180 | 149 | if(size >= total_needed_size) | ||
181 | 150 | { | ||
182 | 151 | /* total_needed_size is enough for all remaining widgets */ | ||
183 | 152 | needed_size = max_size + (size - total_needed_size)/expand_count; | ||
184 | 153 | break; | ||
185 | 154 | } | ||
186 | 155 | /* Removing current maximal widget from list */ | ||
187 | 156 | total_needed_size -= max_size - requested_sizes[GPOINTER_TO_INT(item->data)].natural_size; | ||
188 | 157 | first_item = g_list_next(first_item); | ||
189 | 158 | if(first_item) | ||
190 | 159 | max_size = requested_sizes[GPOINTER_TO_INT(first_item->data)].natural_size; | ||
191 | 160 | } | ||
192 | 161 | |||
193 | 162 | for(item = first_item; item; item = g_list_next(item)) | ||
194 | 163 | { | ||
195 | 164 | request = &requested_sizes[GPOINTER_TO_INT(item->data)]; | ||
196 | 165 | gint dsize = needed_size - request->natural_size; | ||
197 | 166 | if(size < dsize) | ||
198 | 167 | dsize = size; | ||
199 | 168 | size -= dsize; | ||
200 | 169 | request->natural_size += dsize; | ||
201 | 170 | } | ||
202 | 171 | } | ||
203 | 172 | |||
204 | 173 | gint i; | ||
205 | 174 | for(i = 0; i < visible_count; i++) | ||
206 | 175 | { | ||
207 | 176 | GtkAllocation child_allocation = remaining_space; | ||
208 | 177 | request = &requested_sizes[i]; | ||
209 | 178 | |||
210 | 179 | child_allocation.width = request->natural_size; | ||
211 | 180 | remaining_space.width -= request->natural_size; | ||
212 | 181 | if (ltr) | ||
213 | 182 | remaining_space.x += request->natural_size; | ||
214 | 183 | else | ||
215 | 184 | child_allocation.x += remaining_space.width; | ||
216 | 185 | gtk_widget_size_allocate(request->data, &child_allocation); | ||
217 | 186 | } | ||
218 | 187 | g_list_free(expand_nums); | ||
219 | 188 | } | ||
220 | 189 | g_list_free(shell_children); | ||
221 | 190 | } | ||
222 | 191 | #else | ||
223 | 192 | static gboolean | ||
224 | 193 | widget_get_expand (GtkWidget* widget) | ||
225 | 194 | { | ||
226 | 195 | return g_object_get_data(G_OBJECT(widget), | ||
227 | 196 | GREETER_MENU_BAR_EXPAND_PROP) != NULL; | ||
228 | 197 | } | ||
229 | 198 | |||
230 | 199 | struct RequestedSize | ||
231 | 200 | { | ||
232 | 201 | GtkWidget* child; | ||
233 | 202 | GtkRequisition size; | ||
234 | 203 | }; | ||
235 | 204 | |||
236 | 205 | static gint | ||
237 | 206 | sort_minimal_size(gconstpointer a, gconstpointer b, struct RequestedSize* sizes) | ||
238 | 207 | { | ||
239 | 208 | gint a_size = sizes[GPOINTER_TO_INT(a)].size.width; | ||
240 | 209 | gint b_size = sizes[GPOINTER_TO_INT(b)].size.width; | ||
241 | 210 | return a_size == b_size ? 0 : a_size > b_size ? -1 : +1; | ||
242 | 211 | } | ||
243 | 212 | |||
244 | 213 | static void | ||
245 | 214 | greeter_menu_bar_size_allocate(GtkWidget* widget, GtkAllocation* allocation) | ||
246 | 215 | { | ||
247 | 216 | GList* item; | ||
248 | 217 | GList* shell_children; | ||
249 | 218 | GList* expand_nums = NULL; | ||
250 | 219 | guint visible_count = 0, expand_count = 0; | ||
251 | 220 | |||
252 | 221 | g_return_if_fail (GTK_IS_MENU_BAR (widget)); | ||
253 | 222 | g_return_if_fail (allocation != NULL); | ||
254 | 223 | |||
255 | 224 | GtkPackDirection pack_direction = gtk_menu_bar_get_pack_direction(GTK_MENU_BAR(widget)); | ||
256 | 225 | g_return_if_fail(pack_direction == GTK_PACK_DIRECTION_LTR || pack_direction == GTK_PACK_DIRECTION_RTL); | ||
257 | 226 | |||
258 | 227 | shell_children = GTK_MENU_SHELL (widget)->children; | ||
259 | 228 | |||
260 | 229 | for(item = shell_children; item; item = g_list_next(item)) | ||
261 | 230 | if(gtk_widget_get_visible(item->data)) | ||
262 | 231 | { | ||
263 | 232 | if(widget_get_expand(item->data)) | ||
264 | 233 | { | ||
265 | 234 | expand_nums = g_list_prepend(expand_nums, GINT_TO_POINTER(visible_count)); | ||
266 | 235 | expand_count++; | ||
267 | 236 | } | ||
268 | 237 | visible_count++; | ||
269 | 238 | } | ||
270 | 239 | |||
271 | 240 | widget->allocation = *allocation; | ||
272 | 241 | if (gtk_widget_get_realized (widget)) | ||
273 | 242 | gdk_window_move_resize (widget->window, | ||
274 | 243 | allocation->x, allocation->y, | ||
275 | 244 | allocation->width, allocation->height); | ||
276 | 245 | |||
277 | 246 | if (visible_count) | ||
278 | 247 | { | ||
279 | 248 | gint toggle_size, ipadding; | ||
280 | 249 | GtkTextDirection direction = gtk_widget_get_direction (widget); | ||
281 | 250 | GtkShadowType shadow_type = GTK_SHADOW_OUT; | ||
282 | 251 | GtkAllocation remaining_space; | ||
283 | 252 | |||
284 | 253 | gtk_widget_style_get (widget, "shadow-type", &shadow_type, NULL); | ||
285 | 254 | gtk_widget_style_get (widget, "internal-padding", &ipadding, NULL); | ||
286 | 255 | |||
287 | 256 | remaining_space.x = (GTK_CONTAINER (widget)->border_width + ipadding); | ||
288 | 257 | remaining_space.y = (GTK_CONTAINER (widget)->border_width); | ||
289 | 258 | remaining_space.width = allocation->width - 2 * remaining_space.x; | ||
290 | 259 | remaining_space.height = allocation->height - 2 * remaining_space.y; | ||
291 | 260 | |||
292 | 261 | if (shadow_type != GTK_SHADOW_NONE) | ||
293 | 262 | { | ||
294 | 263 | remaining_space.x += widget->style->xthickness; | ||
295 | 264 | remaining_space.y += widget->style->ythickness; | ||
296 | 265 | remaining_space.width -= 2 * widget->style->xthickness; | ||
297 | 266 | remaining_space.height -= 2 * widget->style->ythickness; | ||
298 | 267 | } | ||
299 | 268 | |||
300 | 269 | struct RequestedSize* requested_sizes = g_newa(struct RequestedSize, visible_count); | ||
301 | 270 | struct RequestedSize* request = requested_sizes; | ||
302 | 271 | int size = remaining_space.width; | ||
303 | 272 | |||
304 | 273 | for(item = shell_children; item; item = g_list_next(item)) | ||
305 | 274 | { | ||
306 | 275 | if (!gtk_widget_get_visible (item->data)) | ||
307 | 276 | continue; | ||
308 | 277 | request->child = item->data; | ||
309 | 278 | gtk_menu_item_toggle_size_request (GTK_MENU_ITEM (request->child), &toggle_size); | ||
310 | 279 | gtk_menu_item_toggle_size_allocate (GTK_MENU_ITEM (request->child), toggle_size); | ||
311 | 280 | gtk_widget_get_child_requisition (request->child, &request->size); | ||
312 | 281 | request->size.width += toggle_size; | ||
313 | 282 | request->size.height += toggle_size; | ||
314 | 283 | size -= request->size.width; | ||
315 | 284 | ++request; | ||
316 | 285 | } | ||
317 | 286 | |||
318 | 287 | if(size > 0 && expand_nums) | ||
319 | 288 | { | ||
320 | 289 | expand_nums = g_list_sort_with_data(expand_nums, (GCompareDataFunc)sort_minimal_size, | ||
321 | 290 | requested_sizes); | ||
322 | 291 | GList* first_item = expand_nums; | ||
323 | 292 | gint needed_size = -1; | ||
324 | 293 | gint max_size = requested_sizes[GPOINTER_TO_INT(first_item->data)].size.width; | ||
325 | 294 | gint total_needed_size = 0; | ||
326 | 295 | |||
327 | 296 | for(item = g_list_next(expand_nums); item; item = g_list_next(item)) | ||
328 | 297 | total_needed_size += max_size - requested_sizes[GPOINTER_TO_INT(item->data)].size.width; | ||
329 | 298 | |||
330 | 299 | while(first_item) | ||
331 | 300 | { | ||
332 | 301 | if(size >= total_needed_size) | ||
333 | 302 | { | ||
334 | 303 | needed_size = max_size + (size - total_needed_size)/expand_count; | ||
335 | 304 | break; | ||
336 | 305 | } | ||
337 | 306 | total_needed_size -= max_size - requested_sizes[GPOINTER_TO_INT(item->data)].size.width; | ||
338 | 307 | first_item = g_list_next(first_item); | ||
339 | 308 | if(first_item) | ||
340 | 309 | max_size = requested_sizes[GPOINTER_TO_INT(first_item->data)].size.width; | ||
341 | 310 | } | ||
342 | 311 | |||
343 | 312 | for(item = first_item; item; item = g_list_next(item)) | ||
344 | 313 | { | ||
345 | 314 | request = &requested_sizes[GPOINTER_TO_INT(item->data)]; | ||
346 | 315 | gint dsize = needed_size - request->size.width; | ||
347 | 316 | if(size < dsize) | ||
348 | 317 | dsize = size; | ||
349 | 318 | size -= dsize; | ||
350 | 319 | request->size.width += dsize; | ||
351 | 320 | } | ||
352 | 321 | } | ||
353 | 322 | |||
354 | 323 | gboolean ltr = (direction == GTK_TEXT_DIR_LTR) == (pack_direction == GTK_PACK_DIRECTION_LTR); | ||
355 | 324 | GtkAllocation child_allocation; | ||
356 | 325 | gint i; | ||
357 | 326 | for(i = 0; i < visible_count; i++) | ||
358 | 327 | { | ||
359 | 328 | child_allocation = remaining_space; | ||
360 | 329 | request = &requested_sizes[i]; | ||
361 | 330 | |||
362 | 331 | child_allocation.width = request->size.width; | ||
363 | 332 | remaining_space.width -= request->size.width; | ||
364 | 333 | if (ltr) | ||
365 | 334 | remaining_space.x += request->size.width; | ||
366 | 335 | else | ||
367 | 336 | child_allocation.x += remaining_space.width; | ||
368 | 337 | gtk_widget_size_allocate(request->child, &child_allocation); | ||
369 | 338 | } | ||
370 | 339 | g_list_free(expand_nums); | ||
371 | 340 | } | ||
372 | 341 | } | ||
373 | 342 | #endif | ||
374 | 0 | 343 | ||
375 | === added file 'src/greetermenubar.h' | |||
376 | --- src/greetermenubar.h 1970-01-01 00:00:00 +0000 | |||
377 | +++ src/greetermenubar.h 2014-06-08 14:43:42 +0000 | |||
378 | @@ -0,0 +1,37 @@ | |||
379 | 1 | #ifndef GREETER_MENU_BAR_H | ||
380 | 2 | #define GREETER_MENU_BAR_H | ||
381 | 3 | |||
382 | 4 | #include <glib-object.h> | ||
383 | 5 | #include <gtk/gtk.h> | ||
384 | 6 | |||
385 | 7 | #if !GTK_CHECK_VERSION (3, 0, 0) | ||
386 | 8 | #define GREETER_MENU_BAR_EXPAND_PROP "gtk2-fallback-expand" | ||
387 | 9 | #endif | ||
388 | 10 | |||
389 | 11 | G_BEGIN_DECLS | ||
390 | 12 | |||
391 | 13 | #define GREETER_MENU_BAR_TYPE (greeter_menu_bar_get_type()) | ||
392 | 14 | #define GREETER_MENU_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GREETER_MENU_BAR_TYPE, GreeterMenuBar)) | ||
393 | 15 | #define GREETER_MENU_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GREETER_MENU_BAR_TYPE, GreeterMenuBarClass)) | ||
394 | 16 | #define GREETER_IS_MENU_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GREETER_MENU_BAR_TYPE)) | ||
395 | 17 | #define GREETER_IS_MENU_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GREETER_MENU_BAR_TYPE)) | ||
396 | 18 | |||
397 | 19 | typedef struct _GreeterMenuBar GreeterMenuBar; | ||
398 | 20 | typedef struct _GreeterMenuBarClass GreeterMenuBarClass; | ||
399 | 21 | |||
400 | 22 | struct _GreeterMenuBar | ||
401 | 23 | { | ||
402 | 24 | GtkMenuBar parent_instance; | ||
403 | 25 | }; | ||
404 | 26 | |||
405 | 27 | struct _GreeterMenuBarClass | ||
406 | 28 | { | ||
407 | 29 | GtkMenuBarClass parent_class; | ||
408 | 30 | }; | ||
409 | 31 | |||
410 | 32 | GType greeter_menu_bar_get_type(void) G_GNUC_CONST; | ||
411 | 33 | GtkWidget *greeter_menu_bar_new(void); | ||
412 | 34 | |||
413 | 35 | G_END_DECLS | ||
414 | 36 | |||
415 | 37 | #endif /* GREETER_MENU_BAR_H */ | ||
416 | 0 | 38 | ||
417 | === modified file 'src/lightdm-gtk-greeter.c' | |||
418 | --- src/lightdm-gtk-greeter.c 2014-06-06 06:56:00 +0000 | |||
419 | +++ src/lightdm-gtk-greeter.c 2014-06-08 14:43:42 +0000 | |||
420 | @@ -55,7 +55,8 @@ | |||
421 | 55 | 55 | ||
422 | 56 | #include <lightdm.h> | 56 | #include <lightdm.h> |
423 | 57 | 57 | ||
425 | 58 | #include <src/lightdm-gtk-greeter-ui.h> | 58 | #include "src/greetermenubar.h" |
426 | 59 | #include "src/lightdm-gtk-greeter-ui.h" | ||
427 | 59 | 60 | ||
428 | 60 | #if GTK_CHECK_VERSION (3, 0, 0) | 61 | #if GTK_CHECK_VERSION (3, 0, 0) |
429 | 61 | #include <src/lightdm-gtk-greeter-css-fallback.h> | 62 | #include <src/lightdm-gtk-greeter-css-fallback.h> |
430 | @@ -73,12 +74,22 @@ | |||
431 | 73 | 74 | ||
432 | 74 | /* Panel Widgets */ | 75 | /* Panel Widgets */ |
433 | 75 | static GtkWindow *panel_window; | 76 | static GtkWindow *panel_window; |
434 | 77 | <<<<<<< TREE | ||
435 | 76 | static GtkWidget *clock_label; | 78 | static GtkWidget *clock_label; |
436 | 77 | static GtkWidget *menubar, *power_menuitem, *session_menuitem, *language_menuitem, *a11y_menuitem, | 79 | static GtkWidget *menubar, *power_menuitem, *session_menuitem, *language_menuitem, *a11y_menuitem, |
437 | 78 | *layout_menuitem, *session_badge; | 80 | *layout_menuitem, *session_badge; |
438 | 81 | ======= | ||
439 | 82 | static GtkWidget *menubar; | ||
440 | 83 | static GtkWidget *power_menuitem, *language_menuitem, *a11y_menuitem, *session_menuitem, *session_badge; | ||
441 | 84 | >>>>>>> MERGE-SOURCE | ||
442 | 79 | static GtkWidget *suspend_menuitem, *hibernate_menuitem, *restart_menuitem, *shutdown_menuitem; | 85 | static GtkWidget *suspend_menuitem, *hibernate_menuitem, *restart_menuitem, *shutdown_menuitem; |
443 | 86 | <<<<<<< TREE | ||
444 | 80 | static GtkWidget *keyboard_menuitem; | 87 | static GtkWidget *keyboard_menuitem; |
445 | 81 | static GtkMenu *session_menu, *language_menu, *layout_menu; | 88 | static GtkMenu *session_menu, *language_menu, *layout_menu; |
446 | 89 | ======= | ||
447 | 90 | static GtkWidget *keyboard_menuitem, *clock_menuitem, *clock_label, *host_menuitem; | ||
448 | 91 | static GtkMenu *session_menu, *language_menu; | ||
449 | 92 | >>>>>>> MERGE-SOURCE | ||
450 | 82 | 93 | ||
451 | 83 | /* Login Window Widgets */ | 94 | /* Login Window Widgets */ |
452 | 84 | static GtkWindow *login_window; | 95 | static GtkWindow *login_window; |
453 | @@ -165,6 +176,36 @@ | |||
454 | 165 | #endif | 176 | #endif |
455 | 166 | 177 | ||
456 | 167 | 178 | ||
457 | 179 | typedef enum | ||
458 | 180 | { | ||
459 | 181 | PANEL_ITEM_INDICATOR, | ||
460 | 182 | PANEL_ITEM_SPACER, | ||
461 | 183 | PANEL_ITEM_SEPARATOR, | ||
462 | 184 | PANEL_ITEM_TEXT | ||
463 | 185 | } GreeterPanelItemType; | ||
464 | 186 | |||
465 | 187 | #if GTK_CHECK_VERSION (3, 0, 0) | ||
466 | 188 | static const gchar *PANEL_ITEM_STYLE = "panel-item"; | ||
467 | 189 | static const gchar *PANEL_ITEM_STYLE_HOVERED = "panel-item-hovered"; | ||
468 | 190 | |||
469 | 191 | static const gchar *PANEL_ITEM_STYLES[] = | ||
470 | 192 | { | ||
471 | 193 | "panel-item-indicator", | ||
472 | 194 | "panel-item-spacer", | ||
473 | 195 | "panel-item-separator", | ||
474 | 196 | "panel-item-text" | ||
475 | 197 | }; | ||
476 | 198 | #endif | ||
477 | 199 | |||
478 | 200 | static const gchar *PANEL_ITEM_DATA_INDEX = "panel-item-data-index"; | ||
479 | 201 | |||
480 | 202 | #ifdef HAVE_LIBINDICATOR | ||
481 | 203 | static const gchar *INDICATOR_ITEM_DATA_OBJECT = "indicator-item-data-object"; | ||
482 | 204 | static const gchar *INDICATOR_ITEM_DATA_ENTRY = "indicator-item-data-entry"; | ||
483 | 205 | static const gchar *INDICATOR_ITEM_DATA_BOX = "indicator-item-data-box"; | ||
484 | 206 | static const gchar *INDICATOR_DATA_MENUITEMS = "indicator-data-menuitems"; | ||
485 | 207 | #endif | ||
486 | 208 | |||
487 | 168 | static void | 209 | static void |
488 | 169 | pam_message_finalize (PAMConversationMessage *message) | 210 | pam_message_finalize (PAMConversationMessage *message) |
489 | 170 | { | 211 | { |
490 | @@ -172,34 +213,63 @@ | |||
491 | 172 | g_free (message); | 213 | g_free (message); |
492 | 173 | } | 214 | } |
493 | 174 | 215 | ||
494 | 216 | <<<<<<< TREE | ||
495 | 217 | ======= | ||
496 | 218 | #if GTK_CHECK_VERSION (3, 0, 0) | ||
497 | 219 | static gboolean | ||
498 | 220 | panel_item_enter_notify_cb (GtkWidget *widget, GdkEvent *event, gpointer enter) | ||
499 | 221 | { | ||
500 | 222 | GtkStyleContext *context = gtk_widget_get_style_context (widget); | ||
501 | 223 | if (GPOINTER_TO_INT (enter)) | ||
502 | 224 | gtk_style_context_add_class (context, PANEL_ITEM_STYLE_HOVERED); | ||
503 | 225 | else | ||
504 | 226 | gtk_style_context_remove_class (context, PANEL_ITEM_STYLE_HOVERED); | ||
505 | 227 | return FALSE; | ||
506 | 228 | } | ||
507 | 229 | #endif | ||
508 | 230 | |||
509 | 231 | >>>>>>> MERGE-SOURCE | ||
510 | 175 | static void | 232 | static void |
512 | 176 | add_indicator_to_panel (GtkWidget *indicator_item, gint index) | 233 | panel_add_item (GtkWidget *widget, gint index, GreeterPanelItemType item_type) |
513 | 177 | { | 234 | { |
514 | 178 | gint insert_pos = 0; | 235 | gint insert_pos = 0; |
515 | 179 | GList* items = gtk_container_get_children (GTK_CONTAINER (menubar)); | 236 | GList* items = gtk_container_get_children (GTK_CONTAINER (menubar)); |
516 | 180 | GList* item; | 237 | GList* item; |
517 | 181 | for (item = items; item; item = item->next) | 238 | for (item = items; item; item = item->next) |
518 | 182 | { | 239 | { |
520 | 183 | if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item->data), "indicator-custom-index-data")) < index) | 240 | if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item->data), PANEL_ITEM_DATA_INDEX)) < index) |
521 | 184 | break; | 241 | break; |
522 | 185 | insert_pos++; | 242 | insert_pos++; |
523 | 186 | } | 243 | } |
524 | 187 | g_list_free (items); | 244 | g_list_free (items); |
525 | 188 | 245 | ||
527 | 189 | gtk_menu_shell_insert (GTK_MENU_SHELL (menubar), GTK_WIDGET (indicator_item), insert_pos); | 246 | #if GTK_CHECK_VERSION (3, 0, 0) |
528 | 247 | gtk_style_context_add_class (gtk_widget_get_style_context (widget), PANEL_ITEM_STYLE); | ||
529 | 248 | gtk_style_context_add_class (gtk_widget_get_style_context (widget), PANEL_ITEM_STYLES[item_type]); | ||
530 | 249 | if (item_type == PANEL_ITEM_INDICATOR) | ||
531 | 250 | { | ||
532 | 251 | g_signal_connect (G_OBJECT (widget), "enter-notify-event", | ||
533 | 252 | G_CALLBACK (panel_item_enter_notify_cb), GINT_TO_POINTER(TRUE)); | ||
534 | 253 | g_signal_connect (G_OBJECT (widget), "leave-notify-event", | ||
535 | 254 | G_CALLBACK (panel_item_enter_notify_cb), GINT_TO_POINTER(FALSE)); | ||
536 | 255 | } | ||
537 | 256 | #endif | ||
538 | 257 | |||
539 | 258 | gtk_widget_show (widget); | ||
540 | 259 | gtk_menu_shell_insert (GTK_MENU_SHELL (menubar), widget, insert_pos); | ||
541 | 190 | } | 260 | } |
542 | 191 | 261 | ||
543 | 192 | #ifdef HAVE_LIBINDICATOR | 262 | #ifdef HAVE_LIBINDICATOR |
544 | 193 | static gboolean | 263 | static gboolean |
546 | 194 | entry_scrolled (GtkWidget *menuitem, GdkEventScroll *event, gpointer data) | 264 | indicator_entry_scrolled_cb (GtkWidget *menuitem, GdkEventScroll *event, gpointer data) |
547 | 195 | { | 265 | { |
548 | 196 | IndicatorObject *io; | 266 | IndicatorObject *io; |
549 | 197 | IndicatorObjectEntry *entry; | 267 | IndicatorObjectEntry *entry; |
550 | 198 | 268 | ||
551 | 199 | g_return_val_if_fail (GTK_IS_WIDGET (menuitem), FALSE); | 269 | g_return_val_if_fail (GTK_IS_WIDGET (menuitem), FALSE); |
552 | 200 | 270 | ||
555 | 201 | io = g_object_get_data (G_OBJECT (menuitem), "indicator-custom-object-data"); | 271 | io = g_object_get_data (G_OBJECT (menuitem), INDICATOR_ITEM_DATA_OBJECT); |
556 | 202 | entry = g_object_get_data (G_OBJECT (menuitem), "indicator-custom-entry-data"); | 272 | entry = g_object_get_data (G_OBJECT (menuitem), INDICATOR_ITEM_DATA_ENTRY); |
557 | 203 | 273 | ||
558 | 204 | g_return_val_if_fail (INDICATOR_IS_OBJECT (io), FALSE); | 274 | g_return_val_if_fail (INDICATOR_IS_OBJECT (io), FALSE); |
559 | 205 | 275 | ||
560 | @@ -210,15 +280,15 @@ | |||
561 | 210 | } | 280 | } |
562 | 211 | 281 | ||
563 | 212 | static void | 282 | static void |
565 | 213 | entry_activated (GtkWidget *widget, gpointer user_data) | 283 | indicator_entry_activated_cb (GtkWidget *widget, gpointer user_data) |
566 | 214 | { | 284 | { |
567 | 215 | IndicatorObject *io; | 285 | IndicatorObject *io; |
568 | 216 | IndicatorObjectEntry *entry; | 286 | IndicatorObjectEntry *entry; |
569 | 217 | 287 | ||
570 | 218 | g_return_if_fail (GTK_IS_WIDGET (widget)); | 288 | g_return_if_fail (GTK_IS_WIDGET (widget)); |
571 | 219 | 289 | ||
574 | 220 | io = g_object_get_data (G_OBJECT (widget), "indicator-custom-object-data"); | 290 | io = g_object_get_data (G_OBJECT (widget), INDICATOR_ITEM_DATA_OBJECT); |
575 | 221 | entry = g_object_get_data (G_OBJECT (widget), "indicator-custom-entry-data"); | 291 | entry = g_object_get_data (G_OBJECT (widget), INDICATOR_ITEM_DATA_ENTRY); |
576 | 222 | 292 | ||
577 | 223 | g_return_if_fail (INDICATOR_IS_OBJECT (io)); | 293 | g_return_if_fail (INDICATOR_IS_OBJECT (io)); |
578 | 224 | 294 | ||
579 | @@ -226,10 +296,10 @@ | |||
580 | 226 | } | 296 | } |
581 | 227 | 297 | ||
582 | 228 | static GtkWidget* | 298 | static GtkWidget* |
584 | 229 | create_menuitem (IndicatorObject *io, IndicatorObjectEntry *entry, GtkWidget *menubar) | 299 | indicator_entry_create_menuitem (IndicatorObject *io, IndicatorObjectEntry *entry, GtkWidget *menubar) |
585 | 230 | { | 300 | { |
586 | 231 | GtkWidget *box, *menuitem; | 301 | GtkWidget *box, *menuitem; |
588 | 232 | gint index = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (io), "indicator-custom-index-data")); | 302 | gint index = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (io), PANEL_ITEM_DATA_INDEX)); |
589 | 233 | 303 | ||
590 | 234 | #if GTK_CHECK_VERSION (3, 0, 0) | 304 | #if GTK_CHECK_VERSION (3, 0, 0) |
591 | 235 | box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); | 305 | box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); |
592 | @@ -240,13 +310,13 @@ | |||
593 | 240 | 310 | ||
594 | 241 | gtk_widget_add_events(GTK_WIDGET(menuitem), GDK_SCROLL_MASK); | 311 | gtk_widget_add_events(GTK_WIDGET(menuitem), GDK_SCROLL_MASK); |
595 | 242 | 312 | ||
600 | 243 | g_object_set_data (G_OBJECT (menuitem), "indicator-custom-box-data", box); | 313 | g_object_set_data (G_OBJECT (menuitem), INDICATOR_ITEM_DATA_BOX, box); |
601 | 244 | g_object_set_data (G_OBJECT (menuitem), "indicator-custom-object-data", io); | 314 | g_object_set_data (G_OBJECT (menuitem), INDICATOR_ITEM_DATA_OBJECT, io); |
602 | 245 | g_object_set_data (G_OBJECT (menuitem), "indicator-custom-entry-data", entry); | 315 | g_object_set_data (G_OBJECT (menuitem), INDICATOR_ITEM_DATA_ENTRY, entry); |
603 | 246 | g_object_set_data (G_OBJECT (menuitem), "indicator-custom-index-data", GINT_TO_POINTER (index)); | 316 | g_object_set_data (G_OBJECT (menuitem), PANEL_ITEM_DATA_INDEX, GINT_TO_POINTER (index)); |
604 | 247 | 317 | ||
607 | 248 | g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (entry_activated), NULL); | 318 | g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (indicator_entry_activated_cb), NULL); |
608 | 249 | g_signal_connect (G_OBJECT (menuitem), "scroll-event", G_CALLBACK (entry_scrolled), NULL); | 319 | g_signal_connect (G_OBJECT (menuitem), "scroll-event", G_CALLBACK (indicator_entry_scrolled_cb), NULL); |
609 | 250 | 320 | ||
610 | 251 | if (entry->image) | 321 | if (entry->image) |
611 | 252 | gtk_box_pack_start (GTK_BOX(box), GTK_WIDGET(entry->image), FALSE, FALSE, 1); | 322 | gtk_box_pack_start (GTK_BOX(box), GTK_WIDGET(entry->image), FALSE, FALSE, 1); |
612 | @@ -259,24 +329,24 @@ | |||
613 | 259 | 329 | ||
614 | 260 | gtk_container_add (GTK_CONTAINER (menuitem), box); | 330 | gtk_container_add (GTK_CONTAINER (menuitem), box); |
615 | 261 | gtk_widget_show (box); | 331 | gtk_widget_show (box); |
617 | 262 | add_indicator_to_panel (menuitem, index); | 332 | panel_add_item(menuitem, index, PANEL_ITEM_INDICATOR); |
618 | 263 | 333 | ||
619 | 264 | return menuitem; | 334 | return menuitem; |
620 | 265 | } | 335 | } |
621 | 266 | 336 | ||
622 | 267 | static void | 337 | static void |
624 | 268 | entry_added (IndicatorObject *io, IndicatorObjectEntry *entry, gpointer user_data) | 338 | indicator_entry_added_cb (IndicatorObject *io, IndicatorObjectEntry *entry, gpointer user_data) |
625 | 269 | { | 339 | { |
626 | 270 | GHashTable *menuitem_lookup; | 340 | GHashTable *menuitem_lookup; |
627 | 271 | GtkWidget *menuitem; | 341 | GtkWidget *menuitem; |
628 | 272 | 342 | ||
629 | 273 | /* if the menuitem doesn't already exist, create it now */ | 343 | /* if the menuitem doesn't already exist, create it now */ |
631 | 274 | menuitem_lookup = g_object_get_data (G_OBJECT (io), "indicator-custom-menuitems-data"); | 344 | menuitem_lookup = g_object_get_data (G_OBJECT (io), INDICATOR_DATA_MENUITEMS); |
632 | 275 | g_return_if_fail (menuitem_lookup); | 345 | g_return_if_fail (menuitem_lookup); |
633 | 276 | menuitem = g_hash_table_lookup (menuitem_lookup, entry); | 346 | menuitem = g_hash_table_lookup (menuitem_lookup, entry); |
634 | 277 | if (!GTK_IS_WIDGET (menuitem)) | 347 | if (!GTK_IS_WIDGET (menuitem)) |
635 | 278 | { | 348 | { |
637 | 279 | menuitem = create_menuitem (io, entry, GTK_WIDGET (user_data)); | 349 | menuitem = indicator_entry_create_menuitem (io, entry, GTK_WIDGET (user_data)); |
638 | 280 | g_hash_table_insert (menuitem_lookup, entry, menuitem); | 350 | g_hash_table_insert (menuitem_lookup, entry, menuitem); |
639 | 281 | } | 351 | } |
640 | 282 | 352 | ||
641 | @@ -284,22 +354,22 @@ | |||
642 | 284 | } | 354 | } |
643 | 285 | 355 | ||
644 | 286 | static void | 356 | static void |
646 | 287 | entry_removed_cb (GtkWidget *widget, gpointer userdata) | 357 | remove_indicator_entry_cb (GtkWidget *widget, gpointer userdata) |
647 | 288 | { | 358 | { |
648 | 289 | IndicatorObject *io; | 359 | IndicatorObject *io; |
649 | 290 | GHashTable *menuitem_lookup; | 360 | GHashTable *menuitem_lookup; |
650 | 291 | GtkWidget *menuitem; | 361 | GtkWidget *menuitem; |
651 | 292 | gpointer entry; | 362 | gpointer entry; |
652 | 293 | 363 | ||
654 | 294 | io = g_object_get_data (G_OBJECT (widget), "indicator-custom-object-data"); | 364 | io = g_object_get_data (G_OBJECT (widget), INDICATOR_ITEM_DATA_OBJECT); |
655 | 295 | if (!INDICATOR_IS_OBJECT (io)) | 365 | if (!INDICATOR_IS_OBJECT (io)) |
656 | 296 | return; | 366 | return; |
657 | 297 | 367 | ||
659 | 298 | entry = g_object_get_data (G_OBJECT (widget), "indicator-custom-entry-data"); | 368 | entry = g_object_get_data (G_OBJECT (widget), INDICATOR_ITEM_DATA_ENTRY); |
660 | 299 | if (entry != userdata) | 369 | if (entry != userdata) |
661 | 300 | return; | 370 | return; |
662 | 301 | 371 | ||
664 | 302 | menuitem_lookup = g_object_get_data (G_OBJECT (io), "indicator-custom-menuitems-data"); | 372 | menuitem_lookup = g_object_get_data (G_OBJECT (io), INDICATOR_DATA_MENUITEMS); |
665 | 303 | g_return_if_fail (menuitem_lookup); | 373 | g_return_if_fail (menuitem_lookup); |
666 | 304 | menuitem = g_hash_table_lookup (menuitem_lookup, entry); | 374 | menuitem = g_hash_table_lookup (menuitem_lookup, entry); |
667 | 305 | if (GTK_IS_WIDGET (menuitem)) | 375 | if (GTK_IS_WIDGET (menuitem)) |
668 | @@ -309,13 +379,13 @@ | |||
669 | 309 | } | 379 | } |
670 | 310 | 380 | ||
671 | 311 | static void | 381 | static void |
673 | 312 | entry_removed (IndicatorObject *io, IndicatorObjectEntry *entry, gpointer user_data) | 382 | indicator_entry_removed_cb (IndicatorObject *io, IndicatorObjectEntry *entry, gpointer user_data) |
674 | 313 | { | 383 | { |
676 | 314 | gtk_container_foreach (GTK_CONTAINER (user_data), entry_removed_cb, entry); | 384 | gtk_container_foreach (GTK_CONTAINER (user_data), remove_indicator_entry_cb, entry); |
677 | 315 | } | 385 | } |
678 | 316 | 386 | ||
679 | 317 | static void | 387 | static void |
681 | 318 | menu_show (IndicatorObject *io, IndicatorObjectEntry *entry, guint32 timestamp, gpointer user_data) | 388 | indicator_menu_show_cb (IndicatorObject *io, IndicatorObjectEntry *entry, guint32 timestamp, gpointer user_data) |
682 | 319 | { | 389 | { |
683 | 320 | IndicatorObjectEntry *entrydata; | 390 | IndicatorObjectEntry *entrydata; |
684 | 321 | GtkWidget *menuitem; | 391 | GtkWidget *menuitem; |
685 | @@ -403,9 +473,14 @@ | |||
686 | 403 | GHashTable *builtin_items = NULL; | 473 | GHashTable *builtin_items = NULL; |
687 | 404 | GHashTableIter iter; | 474 | GHashTableIter iter; |
688 | 405 | gpointer iter_value; | 475 | gpointer iter_value; |
689 | 476 | #ifdef HAVE_LIBINDICATOR | ||
690 | 406 | gboolean inited = FALSE; | 477 | gboolean inited = FALSE; |
691 | 478 | #endif | ||
692 | 407 | gboolean fallback = FALSE; | 479 | gboolean fallback = FALSE; |
693 | 408 | 480 | ||
694 | 481 | const gchar *DEFAULT_LAYOUT[] = {"~host", "~spacer", "~clock", "~spacer", | ||
695 | 482 | "~session", "~language", "~a11y", "~power", NULL}; | ||
696 | 483 | |||
697 | 409 | #ifdef START_INDICATOR_SERVICES | 484 | #ifdef START_INDICATOR_SERVICES |
698 | 410 | GError *error = NULL; | 485 | GError *error = NULL; |
699 | 411 | gchar *AT_SPI_CMD[] = {"/usr/lib/at-spi2-core/at-spi-bus-launcher", "--launch-immediately", NULL}; | 486 | gchar *AT_SPI_CMD[] = {"/usr/lib/at-spi2-core/at-spi-bus-launcher", "--launch-immediately", NULL}; |
700 | @@ -423,8 +498,9 @@ | |||
701 | 423 | fallback = TRUE; | 498 | fallback = TRUE; |
702 | 424 | } | 499 | } |
703 | 425 | 500 | ||
705 | 426 | if (names && !fallback) | 501 | if (!names || fallback) |
706 | 427 | { | 502 | { |
707 | 503 | <<<<<<< TREE | ||
708 | 428 | builtin_items = g_hash_table_new (g_str_hash, g_str_equal); | 504 | builtin_items = g_hash_table_new (g_str_hash, g_str_equal); |
709 | 429 | 505 | ||
710 | 430 | g_hash_table_insert (builtin_items, "~power", power_menuitem); | 506 | g_hash_table_insert (builtin_items, "~power", power_menuitem); |
711 | @@ -436,15 +512,66 @@ | |||
712 | 436 | g_hash_table_iter_init (&iter, builtin_items); | 512 | g_hash_table_iter_init (&iter, builtin_items); |
713 | 437 | while (g_hash_table_iter_next (&iter, NULL, &iter_value)) | 513 | while (g_hash_table_iter_next (&iter, NULL, &iter_value)) |
714 | 438 | gtk_container_remove (GTK_CONTAINER (menubar), iter_value); | 514 | gtk_container_remove (GTK_CONTAINER (menubar), iter_value); |
715 | 515 | ======= | ||
716 | 516 | names = (gchar**)DEFAULT_LAYOUT; | ||
717 | 517 | length = g_strv_length (names); | ||
718 | 518 | >>>>>>> MERGE-SOURCE | ||
719 | 439 | } | 519 | } |
720 | 440 | 520 | ||
721 | 521 | builtin_items = g_hash_table_new (g_str_hash, g_str_equal); | ||
722 | 522 | |||
723 | 523 | g_hash_table_insert (builtin_items, "~power", power_menuitem); | ||
724 | 524 | g_hash_table_insert (builtin_items, "~session", session_menuitem); | ||
725 | 525 | g_hash_table_insert (builtin_items, "~language", language_menuitem); | ||
726 | 526 | g_hash_table_insert (builtin_items, "~a11y", a11y_menuitem); | ||
727 | 527 | g_hash_table_insert (builtin_items, "~host", host_menuitem); | ||
728 | 528 | g_hash_table_insert (builtin_items, "~clock", clock_menuitem); | ||
729 | 529 | |||
730 | 530 | g_hash_table_iter_init (&iter, builtin_items); | ||
731 | 531 | while (g_hash_table_iter_next (&iter, NULL, &iter_value)) | ||
732 | 532 | gtk_container_remove (GTK_CONTAINER (menubar), iter_value); | ||
733 | 533 | |||
734 | 441 | for (i = 0; i < length; ++i) | 534 | for (i = 0; i < length; ++i) |
735 | 442 | { | 535 | { |
737 | 443 | if (names[i][0] == '~' && g_hash_table_lookup_extended (builtin_items, names[i], NULL, &iter_value)) | 536 | if (names[i][0] == '~') |
738 | 444 | { /* Built-in indicators */ | 537 | { /* Built-in indicators */ |
742 | 445 | g_object_set_data (G_OBJECT (iter_value), "indicator-custom-index-data", GINT_TO_POINTER (i)); | 538 | GreeterPanelItemType item_type = PANEL_ITEM_INDICATOR; |
743 | 446 | add_indicator_to_panel (iter_value, i); | 539 | if (g_hash_table_lookup_extended (builtin_items, names[i], NULL, &iter_value)) |
744 | 447 | g_hash_table_remove (builtin_items, (gconstpointer)names[i]); | 540 | g_hash_table_remove (builtin_items, (gconstpointer)names[i]); |
745 | 541 | else if (g_strcmp0 (names[i], "~separator") == 0) | ||
746 | 542 | { | ||
747 | 543 | #if GTK_CHECK_VERSION (3, 0, 0) | ||
748 | 544 | GtkWidget *separator = gtk_separator_new (GTK_ORIENTATION_VERTICAL); | ||
749 | 545 | #else | ||
750 | 546 | GtkWidget *separator = gtk_vseparator_new (); | ||
751 | 547 | #endif | ||
752 | 548 | item_type = PANEL_ITEM_SEPARATOR; | ||
753 | 549 | iter_value = gtk_separator_menu_item_new (); | ||
754 | 550 | gtk_widget_show (separator); | ||
755 | 551 | gtk_container_add (iter_value, separator); | ||
756 | 552 | } | ||
757 | 553 | else if (g_strcmp0 (names[i], "~spacer") == 0) | ||
758 | 554 | { | ||
759 | 555 | item_type = PANEL_ITEM_SPACER; | ||
760 | 556 | iter_value = gtk_separator_menu_item_new (); | ||
761 | 557 | gtk_menu_item_set_label (iter_value, ""); | ||
762 | 558 | #if GTK_CHECK_VERSION (3, 0, 0) | ||
763 | 559 | gtk_widget_set_hexpand (iter_value, TRUE); | ||
764 | 560 | #else | ||
765 | 561 | g_object_set_data(G_OBJECT(iter_value), GREETER_MENU_BAR_EXPAND_PROP, "1"); | ||
766 | 562 | #endif | ||
767 | 563 | } | ||
768 | 564 | else if (names[i][1] == '~') | ||
769 | 565 | { | ||
770 | 566 | item_type = PANEL_ITEM_TEXT; | ||
771 | 567 | iter_value = gtk_separator_menu_item_new (); | ||
772 | 568 | gtk_menu_item_set_label (iter_value, &names[i][2]); | ||
773 | 569 | } | ||
774 | 570 | else | ||
775 | 571 | continue; | ||
776 | 572 | |||
777 | 573 | g_object_set_data (G_OBJECT (iter_value), PANEL_ITEM_DATA_INDEX, GINT_TO_POINTER (i)); | ||
778 | 574 | panel_add_item (iter_value, i, item_type); | ||
779 | 448 | continue; | 575 | continue; |
780 | 449 | } | 576 | } |
781 | 450 | 577 | ||
782 | @@ -497,21 +624,21 @@ | |||
783 | 497 | GList *entries, *lp; | 624 | GList *entries, *lp; |
784 | 498 | 625 | ||
785 | 499 | /* used to store/fetch menu entries */ | 626 | /* used to store/fetch menu entries */ |
787 | 500 | g_object_set_data_full (G_OBJECT (io), "indicator-custom-menuitems-data", | 627 | g_object_set_data_full (G_OBJECT (io), INDICATOR_DATA_MENUITEMS, |
788 | 501 | g_hash_table_new (g_direct_hash, g_direct_equal), | 628 | g_hash_table_new (g_direct_hash, g_direct_equal), |
789 | 502 | (GDestroyNotify) g_hash_table_destroy); | 629 | (GDestroyNotify) g_hash_table_destroy); |
791 | 503 | g_object_set_data (G_OBJECT (io), "indicator-custom-index-data", GINT_TO_POINTER (i)); | 630 | g_object_set_data (G_OBJECT (io), PANEL_ITEM_DATA_INDEX, GINT_TO_POINTER (i)); |
792 | 504 | 631 | ||
793 | 505 | g_signal_connect (G_OBJECT (io), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, | 632 | g_signal_connect (G_OBJECT (io), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, |
795 | 506 | G_CALLBACK (entry_added), menubar); | 633 | G_CALLBACK (indicator_entry_added_cb), menubar); |
796 | 507 | g_signal_connect (G_OBJECT (io), INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED, | 634 | g_signal_connect (G_OBJECT (io), INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED, |
798 | 508 | G_CALLBACK (entry_removed), menubar); | 635 | G_CALLBACK (indicator_entry_removed_cb), menubar); |
799 | 509 | g_signal_connect (G_OBJECT (io), INDICATOR_OBJECT_SIGNAL_MENU_SHOW, | 636 | g_signal_connect (G_OBJECT (io), INDICATOR_OBJECT_SIGNAL_MENU_SHOW, |
801 | 510 | G_CALLBACK (menu_show), menubar); | 637 | G_CALLBACK (indicator_menu_show_cb), menubar); |
802 | 511 | 638 | ||
803 | 512 | entries = indicator_object_get_entries (io); | 639 | entries = indicator_object_get_entries (io); |
804 | 513 | for (lp = entries; lp; lp = g_list_next (lp)) | 640 | for (lp = entries; lp; lp = g_list_next (lp)) |
806 | 514 | entry_added (io, lp->data, menubar); | 641 | indicator_entry_added_cb (io, lp->data, menubar); |
807 | 515 | g_list_free (entries); | 642 | g_list_free (entries); |
808 | 516 | } | 643 | } |
809 | 517 | else | 644 | else |
810 | @@ -522,7 +649,7 @@ | |||
811 | 522 | g_free (path); | 649 | g_free (path); |
812 | 523 | #endif | 650 | #endif |
813 | 524 | } | 651 | } |
815 | 525 | if (names) | 652 | if (names && names != (gchar**)DEFAULT_LAYOUT) |
816 | 526 | g_strfreev (names); | 653 | g_strfreev (names); |
817 | 527 | 654 | ||
818 | 528 | if (builtin_items) | 655 | if (builtin_items) |
819 | @@ -1691,9 +1818,6 @@ | |||
820 | 1691 | gchar *font_name, **tokens; | 1818 | gchar *font_name, **tokens; |
821 | 1692 | guint length; | 1819 | guint length; |
822 | 1693 | 1820 | ||
823 | 1694 | /* Hide the clock since indicators are about to eat the screen. */ | ||
824 | 1695 | gtk_widget_hide(GTK_WIDGET(clock_label)); | ||
825 | 1696 | |||
826 | 1697 | g_object_get (gtk_settings_get_default (), "gtk-font-name", &font_name, NULL); | 1821 | g_object_get (gtk_settings_get_default (), "gtk-font-name", &font_name, NULL); |
827 | 1698 | tokens = g_strsplit (font_name, " ", -1); | 1822 | tokens = g_strsplit (font_name, " ", -1); |
828 | 1699 | length = g_strv_length (tokens); | 1823 | length = g_strv_length (tokens); |
829 | @@ -1715,8 +1839,6 @@ | |||
830 | 1715 | else | 1839 | else |
831 | 1716 | { | 1840 | { |
832 | 1717 | g_object_set (gtk_settings_get_default (), "gtk-font-name", default_font_name, NULL); | 1841 | g_object_set (gtk_settings_get_default (), "gtk-font-name", default_font_name, NULL); |
833 | 1718 | /* Show the clock as needed */ | ||
834 | 1719 | gtk_widget_show_all(GTK_WIDGET(clock_label)); | ||
835 | 1720 | } | 1842 | } |
836 | 1721 | } | 1843 | } |
837 | 1722 | 1844 | ||
838 | @@ -2166,8 +2288,8 @@ | |||
839 | 2166 | 2288 | ||
840 | 2167 | strftime(time_str, 50, clock_format, timeinfo); | 2289 | strftime(time_str, 50, clock_format, timeinfo); |
841 | 2168 | markup = g_markup_printf_escaped("<b>%s</b>", time_str); | 2290 | markup = g_markup_printf_escaped("<b>%s</b>", time_str); |
844 | 2169 | if (g_strcmp0(markup, gtk_label_get_label(GTK_LABEL(clock_label))) != 0) | 2291 | if (g_strcmp0(markup, gtk_label_get_label (GTK_LABEL (clock_label))) != 0) |
845 | 2170 | gtk_label_set_markup( GTK_LABEL(clock_label), markup ); | 2292 | gtk_label_set_markup (GTK_LABEL (clock_label), markup); |
846 | 2171 | g_free(markup); | 2293 | g_free(markup); |
847 | 2172 | 2294 | ||
848 | 2173 | return TRUE; | 2295 | return TRUE; |
849 | @@ -2646,11 +2768,13 @@ | |||
850 | 2646 | gtk_style_context_add_class(GTK_STYLE_CONTEXT(gtk_widget_get_style_context(GTK_WIDGET(panel_window))), GTK_STYLE_CLASS_MENUBAR); | 2768 | gtk_style_context_add_class(GTK_STYLE_CONTEXT(gtk_widget_get_style_context(GTK_WIDGET(panel_window))), GTK_STYLE_CLASS_MENUBAR); |
851 | 2647 | g_signal_connect (G_OBJECT (panel_window), "draw", G_CALLBACK (background_window_draw), NULL); | 2769 | g_signal_connect (G_OBJECT (panel_window), "draw", G_CALLBACK (background_window_draw), NULL); |
852 | 2648 | #endif | 2770 | #endif |
853 | 2649 | gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (builder, "hostname_label")), lightdm_get_hostname ()); | ||
854 | 2650 | session_menu = GTK_MENU(gtk_builder_get_object (builder, "session_menu")); | 2771 | session_menu = GTK_MENU(gtk_builder_get_object (builder, "session_menu")); |
855 | 2651 | language_menu = GTK_MENU(gtk_builder_get_object (builder, "language_menu")); | 2772 | language_menu = GTK_MENU(gtk_builder_get_object (builder, "language_menu")); |
856 | 2773 | <<<<<<< TREE | ||
857 | 2652 | layout_menu = GTK_MENU(gtk_builder_get_object (builder, "layout_menu")); | 2774 | layout_menu = GTK_MENU(gtk_builder_get_object (builder, "layout_menu")); |
858 | 2653 | clock_label = GTK_WIDGET(gtk_builder_get_object (builder, "clock_label")); | 2775 | clock_label = GTK_WIDGET(gtk_builder_get_object (builder, "clock_label")); |
859 | 2776 | ======= | ||
860 | 2777 | >>>>>>> MERGE-SOURCE | ||
861 | 2654 | menubar = GTK_WIDGET (gtk_builder_get_object (builder, "menubar")); | 2778 | menubar = GTK_WIDGET (gtk_builder_get_object (builder, "menubar")); |
862 | 2655 | 2779 | ||
863 | 2656 | /* Login window */ | 2780 | /* Login window */ |
864 | @@ -2707,8 +2831,13 @@ | |||
865 | 2707 | language_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "language_menuitem")); | 2831 | language_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "language_menuitem")); |
866 | 2708 | a11y_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "a11y_menuitem")); | 2832 | a11y_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "a11y_menuitem")); |
867 | 2709 | power_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "power_menuitem")); | 2833 | power_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "power_menuitem")); |
868 | 2834 | <<<<<<< TREE | ||
869 | 2710 | layout_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "layout_menuitem")); | 2835 | layout_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "layout_menuitem")); |
870 | 2711 | keyboard_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "keyboard_menuitem")); | 2836 | keyboard_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "keyboard_menuitem")); |
871 | 2837 | ======= | ||
872 | 2838 | clock_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "clock_menuitem")); | ||
873 | 2839 | host_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "host_menuitem")); | ||
874 | 2840 | >>>>>>> MERGE-SOURCE | ||
875 | 2712 | 2841 | ||
876 | 2713 | gtk_accel_map_add_entry ("<Login>/a11y/font", GDK_KEY_F1, 0); | 2842 | gtk_accel_map_add_entry ("<Login>/a11y/font", GDK_KEY_F1, 0); |
877 | 2714 | gtk_accel_map_add_entry ("<Login>/a11y/contrast", GDK_KEY_F2, 0); | 2843 | gtk_accel_map_add_entry ("<Login>/a11y/contrast", GDK_KEY_F2, 0); |
878 | @@ -2738,15 +2867,6 @@ | |||
879 | 2738 | g_free (value); | 2867 | g_free (value); |
880 | 2739 | } | 2868 | } |
881 | 2740 | 2869 | ||
882 | 2741 | /* Clock */ | ||
883 | 2742 | gtk_widget_set_no_show_all(GTK_WIDGET(clock_label), | ||
884 | 2743 | !g_key_file_get_boolean (config, "greeter", "show-clock", NULL)); | ||
885 | 2744 | gtk_widget_show_all(GTK_WIDGET(clock_label)); | ||
886 | 2745 | clock_format = g_key_file_get_value (config, "greeter", "clock-format", NULL); | ||
887 | 2746 | if (!clock_format) | ||
888 | 2747 | clock_format = "%a, %H:%M"; | ||
889 | 2748 | clock_timeout_thread(); | ||
890 | 2749 | |||
891 | 2750 | /* Session menu */ | 2870 | /* Session menu */ |
892 | 2751 | if (gtk_widget_get_visible (session_menuitem)) | 2871 | if (gtk_widget_get_visible (session_menuitem)) |
893 | 2752 | { | 2872 | { |
894 | @@ -2852,6 +2972,7 @@ | |||
895 | 2852 | g_signal_connect (G_OBJECT (power_menuitem),"activate", G_CALLBACK(power_menu_cb), NULL); | 2972 | g_signal_connect (G_OBJECT (power_menuitem),"activate", G_CALLBACK(power_menu_cb), NULL); |
896 | 2853 | } | 2973 | } |
897 | 2854 | 2974 | ||
898 | 2975 | <<<<<<< TREE | ||
899 | 2855 | /* Layout menu */ | 2976 | /* Layout menu */ |
900 | 2856 | if (gtk_widget_get_visible (layout_menuitem)) | 2977 | if (gtk_widget_get_visible (layout_menuitem)) |
901 | 2857 | { | 2978 | { |
902 | @@ -2899,6 +3020,25 @@ | |||
903 | 2899 | fallback_css_priority); | 3020 | fallback_css_priority); |
904 | 2900 | #endif | 3021 | #endif |
905 | 2901 | 3022 | ||
906 | 3023 | ======= | ||
907 | 3024 | |||
908 | 3025 | /* Host label */ | ||
909 | 3026 | if (gtk_widget_get_visible (host_menuitem)) | ||
910 | 3027 | gtk_menu_item_set_label (GTK_MENU_ITEM (host_menuitem), lightdm_get_hostname ()); | ||
911 | 3028 | |||
912 | 3029 | /* Clock label */ | ||
913 | 3030 | if (gtk_widget_get_visible (clock_menuitem)) | ||
914 | 3031 | { | ||
915 | 3032 | gtk_menu_item_set_label (GTK_MENU_ITEM (clock_menuitem), ""); | ||
916 | 3033 | clock_label = gtk_bin_get_child (GTK_BIN (clock_menuitem)); | ||
917 | 3034 | clock_format = g_key_file_get_value (config, "greeter", "clock-format", NULL); | ||
918 | 3035 | if (!clock_format) | ||
919 | 3036 | clock_format = "%a, %H:%M"; | ||
920 | 3037 | clock_timeout_thread (); | ||
921 | 3038 | gdk_threads_add_timeout (1000, (GSourceFunc) clock_timeout_thread, NULL); | ||
922 | 3039 | } | ||
923 | 3040 | |||
924 | 3041 | >>>>>>> MERGE-SOURCE | ||
925 | 2902 | /* Users combobox */ | 3042 | /* Users combobox */ |
926 | 2903 | renderer = gtk_cell_renderer_text_new(); | 3043 | renderer = gtk_cell_renderer_text_new(); |
927 | 2904 | gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (user_combo), renderer, TRUE); | 3044 | gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (user_combo), renderer, TRUE); |
928 | @@ -3011,7 +3151,6 @@ | |||
929 | 3011 | } | 3151 | } |
930 | 3012 | gtk_widget_set_sensitive (keyboard_menuitem, a11y_keyboard_command != NULL); | 3152 | gtk_widget_set_sensitive (keyboard_menuitem, a11y_keyboard_command != NULL); |
931 | 3013 | gtk_widget_set_visible (keyboard_menuitem, a11y_keyboard_command != NULL); | 3153 | gtk_widget_set_visible (keyboard_menuitem, a11y_keyboard_command != NULL); |
932 | 3014 | gdk_threads_add_timeout (1000, (GSourceFunc) clock_timeout_thread, NULL); | ||
933 | 3015 | 3154 | ||
934 | 3016 | /* focus fix (source: unity-greeter) */ | 3155 | /* focus fix (source: unity-greeter) */ |
935 | 3017 | GdkWindow* root_window = gdk_get_default_root_window (); | 3156 | GdkWindow* root_window = gdk_get_default_root_window (); |
936 | 3018 | 3157 | ||
937 | === modified file 'src/lightdm-gtk-greeter.glade' | |||
938 | --- src/lightdm-gtk-greeter.glade 2014-05-06 23:20:09 +0000 | |||
939 | +++ src/lightdm-gtk-greeter.glade 2014-06-08 14:43:42 +0000 | |||
940 | @@ -12,8 +12,10 @@ | |||
941 | 12 | <group name="power_accelgroup"/> | 12 | <group name="power_accelgroup"/> |
942 | 13 | </accel-groups> | 13 | </accel-groups> |
943 | 14 | <child> | 14 | <child> |
945 | 15 | <object class="GtkHBox" id="box3"> | 15 | <object class="GreeterMenuBar" id="menubar"> |
946 | 16 | <property name="name">menubar</property> | ||
947 | 16 | <property name="visible">True</property> | 17 | <property name="visible">True</property> |
948 | 18 | <<<<<<< TREE | ||
949 | 17 | <property name="can_focus">False</property> | 19 | <property name="can_focus">False</property> |
950 | 18 | <property name="homogeneous">True</property> | 20 | <property name="homogeneous">True</property> |
951 | 19 | <child> | 21 | <child> |
952 | @@ -186,6 +188,145 @@ | |||
953 | 186 | <property name="pack_type">end</property> | 188 | <property name="pack_type">end</property> |
954 | 187 | <property name="position">2</property> | 189 | <property name="position">2</property> |
955 | 188 | </packing> | 190 | </packing> |
956 | 191 | ======= | ||
957 | 192 | <property name="can_focus">True</property> | ||
958 | 193 | <property name="halign">fill</property> | ||
959 | 194 | <property name="pack_direction">rtl</property> | ||
960 | 195 | <signal name="key-press-event" handler="menubar_key_press_cb" swapped="no"/> | ||
961 | 196 | <child> | ||
962 | 197 | <object class="GtkMenuItem" id="power_menuitem"> | ||
963 | 198 | <property name="name">power_menuitem</property> | ||
964 | 199 | <property name="visible">True</property> | ||
965 | 200 | <property name="can_focus">True</property> | ||
966 | 201 | <child type="submenu"> | ||
967 | 202 | <object class="GtkMenu" id="power_menu"> | ||
968 | 203 | <property name="visible">True</property> | ||
969 | 204 | <property name="can_focus">False</property> | ||
970 | 205 | <property name="accel_group">power_accelgroup</property> | ||
971 | 206 | <child> | ||
972 | 207 | <object class="GtkMenuItem" id="suspend_menuitem"> | ||
973 | 208 | <property name="visible">True</property> | ||
974 | 209 | <property name="can_focus">False</property> | ||
975 | 210 | <property name="label" translatable="yes">Suspend</property> | ||
976 | 211 | <signal name="activate" handler="suspend_cb" swapped="no"/> | ||
977 | 212 | </object> | ||
978 | 213 | </child> | ||
979 | 214 | <child> | ||
980 | 215 | <object class="GtkMenuItem" id="hibernate_menuitem"> | ||
981 | 216 | <property name="visible">True</property> | ||
982 | 217 | <property name="can_focus">False</property> | ||
983 | 218 | <property name="label" translatable="yes">Hibernate</property> | ||
984 | 219 | <signal name="activate" handler="hibernate_cb" swapped="no"/> | ||
985 | 220 | </object> | ||
986 | 221 | </child> | ||
987 | 222 | <child> | ||
988 | 223 | <object class="GtkMenuItem" id="restart_menuitem"> | ||
989 | 224 | <property name="visible">True</property> | ||
990 | 225 | <property name="can_focus">False</property> | ||
991 | 226 | <property name="label" translatable="yes">Restart...</property> | ||
992 | 227 | <signal name="activate" handler="restart_cb" swapped="no"/> | ||
993 | 228 | </object> | ||
994 | 229 | </child> | ||
995 | 230 | <child> | ||
996 | 231 | <object class="GtkMenuItem" id="shutdown_menuitem"> | ||
997 | 232 | <property name="use_action_appearance">False</property> | ||
998 | 233 | <property name="visible">True</property> | ||
999 | 234 | <property name="can_focus">False</property> | ||
1000 | 235 | <property name="accel_path"><Login>/power/shutdown</property> | ||
1001 | 236 | <property name="label" translatable="yes">Shut Down...</property> | ||
1002 | 237 | <signal name="activate" handler="shutdown_cb" swapped="no"/> | ||
1003 | 238 | </object> | ||
1004 | 239 | </child> | ||
1005 | 240 | </object> | ||
1006 | 241 | </child> | ||
1007 | 242 | </object> | ||
1008 | 243 | </child> | ||
1009 | 244 | <child> | ||
1010 | 245 | <object class="GtkMenuItem" id="a11y_menuitem"> | ||
1011 | 246 | <property name="name">a11y_menuitem</property> | ||
1012 | 247 | <property name="visible">True</property> | ||
1013 | 248 | <property name="can_focus">True</property> | ||
1014 | 249 | <child type="submenu"> | ||
1015 | 250 | <object class="GtkMenu" id="a11y_menu"> | ||
1016 | 251 | <property name="visible">True</property> | ||
1017 | 252 | <property name="can_focus">False</property> | ||
1018 | 253 | <property name="accel_group">a11y_accelgroup</property> | ||
1019 | 254 | <child> | ||
1020 | 255 | <object class="GtkCheckMenuItem" id="large_font_menuitem"> | ||
1021 | 256 | <property name="use_action_appearance">False</property> | ||
1022 | 257 | <property name="visible">True</property> | ||
1023 | 258 | <property name="can_focus">False</property> | ||
1024 | 259 | <property name="accel_path"><Login>/a11y/font</property> | ||
1025 | 260 | <property name="label" translatable="yes">Large Font</property> | ||
1026 | 261 | <signal name="toggled" handler="a11y_font_cb" swapped="no"/> | ||
1027 | 262 | </object> | ||
1028 | 263 | </child> | ||
1029 | 264 | <child> | ||
1030 | 265 | <object class="GtkCheckMenuItem" id="high_contrast_menuitem"> | ||
1031 | 266 | <property name="use_action_appearance">False</property> | ||
1032 | 267 | <property name="visible">True</property> | ||
1033 | 268 | <property name="can_focus">False</property> | ||
1034 | 269 | <property name="accel_path"><Login>/a11y/contrast</property> | ||
1035 | 270 | <property name="label" translatable="yes">High Contrast</property> | ||
1036 | 271 | <signal name="toggled" handler="a11y_contrast_cb" swapped="no"/> | ||
1037 | 272 | </object> | ||
1038 | 273 | </child> | ||
1039 | 274 | <child> | ||
1040 | 275 | <object class="GtkCheckMenuItem" id="keyboard_menuitem"> | ||
1041 | 276 | <property name="use_action_appearance">False</property> | ||
1042 | 277 | <property name="visible">True</property> | ||
1043 | 278 | <property name="can_focus">False</property> | ||
1044 | 279 | <property name="accel_path"><Login>/a11y/keyboard</property> | ||
1045 | 280 | <property name="label" translatable="yes">On Screen Keyboard</property> | ||
1046 | 281 | <property name="use_underline">True</property> | ||
1047 | 282 | <signal name="toggled" handler="a11y_keyboard_cb" swapped="no"/> | ||
1048 | 283 | </object> | ||
1049 | 284 | </child> | ||
1050 | 285 | </object> | ||
1051 | 286 | </child> | ||
1052 | 287 | </object> | ||
1053 | 288 | </child> | ||
1054 | 289 | <child> | ||
1055 | 290 | <object class="GtkMenuItem" id="language_menuitem"> | ||
1056 | 291 | <property name="name">language_menuitem</property> | ||
1057 | 292 | <property name="visible">True</property> | ||
1058 | 293 | <property name="can_focus">True</property> | ||
1059 | 294 | <property name="label">[language_code]</property> | ||
1060 | 295 | <child type="submenu"> | ||
1061 | 296 | <object class="GtkMenu" id="language_menu"> | ||
1062 | 297 | <property name="visible">True</property> | ||
1063 | 298 | <property name="can_focus">False</property> | ||
1064 | 299 | </object> | ||
1065 | 300 | </child> | ||
1066 | 301 | </object> | ||
1067 | 302 | </child> | ||
1068 | 303 | <child> | ||
1069 | 304 | <object class="GtkMenuItem" id="session_menuitem"> | ||
1070 | 305 | <property name="name">session_menuitem</property> | ||
1071 | 306 | <property name="visible">True</property> | ||
1072 | 307 | <property name="can_focus">True</property> | ||
1073 | 308 | <child type="submenu"> | ||
1074 | 309 | <object class="GtkMenu" id="session_menu"> | ||
1075 | 310 | <property name="visible">True</property> | ||
1076 | 311 | <property name="can_focus">False</property> | ||
1077 | 312 | </object> | ||
1078 | 313 | </child> | ||
1079 | 314 | </object> | ||
1080 | 315 | </child> | ||
1081 | 316 | <child> | ||
1082 | 317 | <object class="GtkSeparatorMenuItem" id="clock_menuitem"> | ||
1083 | 318 | <property name="name">clock_menuitem</property> | ||
1084 | 319 | <property name="visible">False</property> | ||
1085 | 320 | <property name="can_focus">False</property> | ||
1086 | 321 | </object> | ||
1087 | 322 | </child> | ||
1088 | 323 | <child> | ||
1089 | 324 | <object class="GtkSeparatorMenuItem" id="host_menuitem"> | ||
1090 | 325 | <property name="name">host_menuitem</property> | ||
1091 | 326 | <property name="visible">False</property> | ||
1092 | 327 | <property name="can_focus">False</property> | ||
1093 | 328 | </object> | ||
1094 | 329 | >>>>>>> MERGE-SOURCE | ||
1095 | 189 | </child> | 330 | </child> |
1096 | 190 | </object> | 331 | </object> |
1097 | 191 | </child> | 332 | </child> |