Merge lp:~kalgasnik/lightdm-gtk-greeter/new_panel_layout into lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/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
Reviewer Review Type Date Requested Status
LightDM Gtk+ Greeter Development Team Pending
Review via email: mp+222461@code.launchpad.net

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-item-indicator" - indicators (builtin and external)
"panel-item-spacer" - ~spacer
"panel-item-separator" - ~separator
"panel-item-text" - ~~text (maybe ~clock and ~host too)

"panel-item-hovered" - replacement for ":hover". Only for "panel-item-indicator" items.

Usage:

#power_menuitem.indicator-hovered
{
    color: red;
}

#power_menuitem:hover
{
    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
=== modified file 'src/Makefile.am'
--- src/Makefile.am 2014-05-21 17:44:19 +0000
+++ src/Makefile.am 2014-06-08 14:43:42 +0000
@@ -7,7 +7,8 @@
77
8lightdm_gtk_greeter_SOURCES = \8lightdm_gtk_greeter_SOURCES = \
9 $(lightdm_gtk_greeter_built_sources) \9 $(lightdm_gtk_greeter_built_sources) \
10 lightdm-gtk-greeter.c10 lightdm-gtk-greeter.c \
11 greetermenubar.c
1112
12AM_CPPFLAGS = \13AM_CPPFLAGS = \
13 -I$(top_srcdir) \14 -I$(top_srcdir) \
1415
=== added file 'src/greeter_menu_bar.xml'
--- src/greeter_menu_bar.xml 1970-01-01 00:00:00 +0000
+++ src/greeter_menu_bar.xml 2014-06-08 14:43:42 +0000
@@ -0,0 +1,8 @@
1<glade-catalog name="greeter_menu_bar" domain="glade-3"
2 depends="gtk+" version="1.0">
3 <glade-widget-classes>
4 <glade-widget-class title="Greeter MenuBar" name="GreeterMenuBar"
5 generic-name="GreeterMenuBar" parent="GtkMenuBar"
6 icon-name="widget-gtk-window"/>
7 </glade-widget-classes>
8</glade-catalog>
09
=== added file 'src/greetermenubar.c'
--- src/greetermenubar.c 1970-01-01 00:00:00 +0000
+++ src/greetermenubar.c 2014-06-08 14:43:42 +0000
@@ -0,0 +1,342 @@
1#include <gtk/gtk.h>
2#include "greetermenubar.h"
3
4
5static void greeter_menu_bar_size_allocate(GtkWidget* widget, GtkAllocation* allocation);
6
7G_DEFINE_TYPE(GreeterMenuBar, greeter_menu_bar, GTK_TYPE_MENU_BAR);
8
9static void
10greeter_menu_bar_class_init(GreeterMenuBarClass* klass)
11{
12 GtkWidgetClass* widget_class = GTK_WIDGET_CLASS(klass);
13 widget_class->size_allocate = greeter_menu_bar_size_allocate;
14}
15
16static void
17greeter_menu_bar_init(GreeterMenuBar* square)
18{
19
20}
21
22GtkWidget*
23greeter_menu_bar_new()
24{
25 return GTK_WIDGET(g_object_new(greeter_menu_bar_get_type(), NULL));
26}
27
28#if GTK_CHECK_VERSION (3, 0, 0)
29static gint
30sort_minimal_size(gconstpointer a, gconstpointer b, GtkRequestedSize* sizes)
31{
32 gint a_size = sizes[GPOINTER_TO_INT(a)].natural_size;
33 gint b_size = sizes[GPOINTER_TO_INT(b)].natural_size;
34 return a_size == b_size ? 0 : a_size > b_size ? -1 : +1;
35}
36
37static void
38greeter_menu_bar_size_allocate(GtkWidget* widget, GtkAllocation* allocation)
39{
40 GList* item;
41 GList* shell_children;
42 GList* expand_nums = NULL;
43 guint visible_count = 0, expand_count = 0;
44
45 g_return_if_fail(allocation != NULL);
46 g_return_if_fail(GREETER_IS_MENU_BAR(widget));
47
48 gtk_widget_set_allocation(widget, allocation);
49
50 GtkPackDirection pack_direction = gtk_menu_bar_get_pack_direction(GTK_MENU_BAR(widget));
51 g_return_if_fail(pack_direction == GTK_PACK_DIRECTION_LTR || pack_direction == GTK_PACK_DIRECTION_RTL);
52
53 shell_children = gtk_container_get_children(GTK_CONTAINER(widget));
54
55 for(item = shell_children; item; item = g_list_next(item))
56 if(gtk_widget_get_visible(item->data))
57 {
58 if(gtk_widget_compute_expand(item->data, GTK_ORIENTATION_HORIZONTAL))
59 {
60 expand_nums = g_list_prepend(expand_nums, GINT_TO_POINTER(visible_count));
61 expand_count++;
62 }
63 visible_count++;
64 }
65
66 if(gtk_widget_get_realized(widget))
67 gdk_window_move_resize(gtk_widget_get_window(widget),
68 allocation->x, allocation->y,
69 allocation->width, allocation->height);
70
71 if(visible_count > 0)
72 {
73 GtkAllocation remaining_space;
74 GtkStyleContext* context = gtk_widget_get_style_context(widget);
75 GtkStateFlags flags = gtk_widget_get_state_flags(widget);
76 GtkRequestedSize* requested_sizes = g_newa(GtkRequestedSize, visible_count);
77 guint border_width = gtk_container_get_border_width(GTK_CONTAINER(widget));
78 GtkShadowType shadow_type = GTK_SHADOW_OUT;
79 GtkBorder border;
80 gint toggle_size;
81
82 gtk_style_context_get_padding(context, flags, &border);
83 gtk_widget_style_get(widget, "shadow-type", &shadow_type, NULL);
84
85 remaining_space.x = (border_width + border.left);
86 remaining_space.y = (border_width + border.top);
87 remaining_space.width = allocation->width -
88 2 * border_width - border.left - border.right;
89 remaining_space.height = allocation->height -
90 2 * border_width - border.top - border.bottom;
91
92 if (shadow_type != GTK_SHADOW_NONE)
93 {
94 gtk_style_context_get_border(context, flags, &border);
95
96 remaining_space.x += border.left;
97 remaining_space.y += border.top;
98 remaining_space.width -= border.left + border.right;
99 remaining_space.height -= border.top + border.bottom;
100 }
101
102 GtkRequestedSize* request = requested_sizes;
103 int size = remaining_space.width;
104 gboolean ltr = (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_LTR) == (pack_direction == GTK_PACK_DIRECTION_LTR);
105
106 for(item = shell_children; item; item = g_list_next(item))
107 {
108 if (!gtk_widget_get_visible(item->data))
109 continue;
110
111 request->data = item->data;
112 gtk_widget_get_preferred_width_for_height(item->data, remaining_space.height,
113 &request->minimum_size,
114 &request->natural_size);
115 gtk_menu_item_toggle_size_request(GTK_MENU_ITEM(item->data),
116 &toggle_size);
117 request->minimum_size += toggle_size;
118 request->natural_size += toggle_size;
119
120 gtk_menu_item_toggle_size_allocate(GTK_MENU_ITEM(item->data), toggle_size);
121
122 size -= request->minimum_size;
123 request++;
124 }
125
126 size = gtk_distribute_natural_allocation(size, visible_count, requested_sizes);
127
128 /* Distribution extra space for widgets with expand=True */
129 if(size > 0 && expand_nums)
130 {
131 expand_nums = g_list_sort_with_data(expand_nums, (GCompareDataFunc)sort_minimal_size,
132 requested_sizes);
133 GList* first_item = expand_nums;
134 gint needed_size = -1;
135 gint max_size = requested_sizes[GPOINTER_TO_INT(first_item->data)].natural_size;
136 gint total_needed_size = 0;
137
138
139 /* Free space that all widgets need to have the same (max_size) width
140 * [___max_width___][widget ][widget____ ]
141 * total_needed_size := [] + [ ] + [ ]
142 * total_needed_size = [ ]
143 */
144 for(item = g_list_next(expand_nums); item; item = g_list_next(item))
145 total_needed_size += max_size - requested_sizes[GPOINTER_TO_INT(item->data)].natural_size;
146
147 while(first_item)
148 {
149 if(size >= total_needed_size)
150 {
151 /* total_needed_size is enough for all remaining widgets */
152 needed_size = max_size + (size - total_needed_size)/expand_count;
153 break;
154 }
155 /* Removing current maximal widget from list */
156 total_needed_size -= max_size - requested_sizes[GPOINTER_TO_INT(item->data)].natural_size;
157 first_item = g_list_next(first_item);
158 if(first_item)
159 max_size = requested_sizes[GPOINTER_TO_INT(first_item->data)].natural_size;
160 }
161
162 for(item = first_item; item; item = g_list_next(item))
163 {
164 request = &requested_sizes[GPOINTER_TO_INT(item->data)];
165 gint dsize = needed_size - request->natural_size;
166 if(size < dsize)
167 dsize = size;
168 size -= dsize;
169 request->natural_size += dsize;
170 }
171 }
172
173 gint i;
174 for(i = 0; i < visible_count; i++)
175 {
176 GtkAllocation child_allocation = remaining_space;
177 request = &requested_sizes[i];
178
179 child_allocation.width = request->natural_size;
180 remaining_space.width -= request->natural_size;
181 if (ltr)
182 remaining_space.x += request->natural_size;
183 else
184 child_allocation.x += remaining_space.width;
185 gtk_widget_size_allocate(request->data, &child_allocation);
186 }
187 g_list_free(expand_nums);
188 }
189 g_list_free(shell_children);
190}
191#else
192static gboolean
193widget_get_expand (GtkWidget* widget)
194{
195 return g_object_get_data(G_OBJECT(widget),
196 GREETER_MENU_BAR_EXPAND_PROP) != NULL;
197}
198
199struct RequestedSize
200{
201 GtkWidget* child;
202 GtkRequisition size;
203};
204
205static gint
206sort_minimal_size(gconstpointer a, gconstpointer b, struct RequestedSize* sizes)
207{
208 gint a_size = sizes[GPOINTER_TO_INT(a)].size.width;
209 gint b_size = sizes[GPOINTER_TO_INT(b)].size.width;
210 return a_size == b_size ? 0 : a_size > b_size ? -1 : +1;
211}
212
213static void
214greeter_menu_bar_size_allocate(GtkWidget* widget, GtkAllocation* allocation)
215{
216 GList* item;
217 GList* shell_children;
218 GList* expand_nums = NULL;
219 guint visible_count = 0, expand_count = 0;
220
221 g_return_if_fail (GTK_IS_MENU_BAR (widget));
222 g_return_if_fail (allocation != NULL);
223
224 GtkPackDirection pack_direction = gtk_menu_bar_get_pack_direction(GTK_MENU_BAR(widget));
225 g_return_if_fail(pack_direction == GTK_PACK_DIRECTION_LTR || pack_direction == GTK_PACK_DIRECTION_RTL);
226
227 shell_children = GTK_MENU_SHELL (widget)->children;
228
229 for(item = shell_children; item; item = g_list_next(item))
230 if(gtk_widget_get_visible(item->data))
231 {
232 if(widget_get_expand(item->data))
233 {
234 expand_nums = g_list_prepend(expand_nums, GINT_TO_POINTER(visible_count));
235 expand_count++;
236 }
237 visible_count++;
238 }
239
240 widget->allocation = *allocation;
241 if (gtk_widget_get_realized (widget))
242 gdk_window_move_resize (widget->window,
243 allocation->x, allocation->y,
244 allocation->width, allocation->height);
245
246 if (visible_count)
247 {
248 gint toggle_size, ipadding;
249 GtkTextDirection direction = gtk_widget_get_direction (widget);
250 GtkShadowType shadow_type = GTK_SHADOW_OUT;
251 GtkAllocation remaining_space;
252
253 gtk_widget_style_get (widget, "shadow-type", &shadow_type, NULL);
254 gtk_widget_style_get (widget, "internal-padding", &ipadding, NULL);
255
256 remaining_space.x = (GTK_CONTAINER (widget)->border_width + ipadding);
257 remaining_space.y = (GTK_CONTAINER (widget)->border_width);
258 remaining_space.width = allocation->width - 2 * remaining_space.x;
259 remaining_space.height = allocation->height - 2 * remaining_space.y;
260
261 if (shadow_type != GTK_SHADOW_NONE)
262 {
263 remaining_space.x += widget->style->xthickness;
264 remaining_space.y += widget->style->ythickness;
265 remaining_space.width -= 2 * widget->style->xthickness;
266 remaining_space.height -= 2 * widget->style->ythickness;
267 }
268
269 struct RequestedSize* requested_sizes = g_newa(struct RequestedSize, visible_count);
270 struct RequestedSize* request = requested_sizes;
271 int size = remaining_space.width;
272
273 for(item = shell_children; item; item = g_list_next(item))
274 {
275 if (!gtk_widget_get_visible (item->data))
276 continue;
277 request->child = item->data;
278 gtk_menu_item_toggle_size_request (GTK_MENU_ITEM (request->child), &toggle_size);
279 gtk_menu_item_toggle_size_allocate (GTK_MENU_ITEM (request->child), toggle_size);
280 gtk_widget_get_child_requisition (request->child, &request->size);
281 request->size.width += toggle_size;
282 request->size.height += toggle_size;
283 size -= request->size.width;
284 ++request;
285 }
286
287 if(size > 0 && expand_nums)
288 {
289 expand_nums = g_list_sort_with_data(expand_nums, (GCompareDataFunc)sort_minimal_size,
290 requested_sizes);
291 GList* first_item = expand_nums;
292 gint needed_size = -1;
293 gint max_size = requested_sizes[GPOINTER_TO_INT(first_item->data)].size.width;
294 gint total_needed_size = 0;
295
296 for(item = g_list_next(expand_nums); item; item = g_list_next(item))
297 total_needed_size += max_size - requested_sizes[GPOINTER_TO_INT(item->data)].size.width;
298
299 while(first_item)
300 {
301 if(size >= total_needed_size)
302 {
303 needed_size = max_size + (size - total_needed_size)/expand_count;
304 break;
305 }
306 total_needed_size -= max_size - requested_sizes[GPOINTER_TO_INT(item->data)].size.width;
307 first_item = g_list_next(first_item);
308 if(first_item)
309 max_size = requested_sizes[GPOINTER_TO_INT(first_item->data)].size.width;
310 }
311
312 for(item = first_item; item; item = g_list_next(item))
313 {
314 request = &requested_sizes[GPOINTER_TO_INT(item->data)];
315 gint dsize = needed_size - request->size.width;
316 if(size < dsize)
317 dsize = size;
318 size -= dsize;
319 request->size.width += dsize;
320 }
321 }
322
323 gboolean ltr = (direction == GTK_TEXT_DIR_LTR) == (pack_direction == GTK_PACK_DIRECTION_LTR);
324 GtkAllocation child_allocation;
325 gint i;
326 for(i = 0; i < visible_count; i++)
327 {
328 child_allocation = remaining_space;
329 request = &requested_sizes[i];
330
331 child_allocation.width = request->size.width;
332 remaining_space.width -= request->size.width;
333 if (ltr)
334 remaining_space.x += request->size.width;
335 else
336 child_allocation.x += remaining_space.width;
337 gtk_widget_size_allocate(request->child, &child_allocation);
338 }
339 g_list_free(expand_nums);
340 }
341}
342#endif
0343
=== added file 'src/greetermenubar.h'
--- src/greetermenubar.h 1970-01-01 00:00:00 +0000
+++ src/greetermenubar.h 2014-06-08 14:43:42 +0000
@@ -0,0 +1,37 @@
1#ifndef GREETER_MENU_BAR_H
2#define GREETER_MENU_BAR_H
3
4#include <glib-object.h>
5#include <gtk/gtk.h>
6
7#if !GTK_CHECK_VERSION (3, 0, 0)
8#define GREETER_MENU_BAR_EXPAND_PROP "gtk2-fallback-expand"
9#endif
10
11G_BEGIN_DECLS
12
13#define GREETER_MENU_BAR_TYPE (greeter_menu_bar_get_type())
14#define GREETER_MENU_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GREETER_MENU_BAR_TYPE, GreeterMenuBar))
15#define GREETER_MENU_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GREETER_MENU_BAR_TYPE, GreeterMenuBarClass))
16#define GREETER_IS_MENU_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GREETER_MENU_BAR_TYPE))
17#define GREETER_IS_MENU_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GREETER_MENU_BAR_TYPE))
18
19typedef struct _GreeterMenuBar GreeterMenuBar;
20typedef struct _GreeterMenuBarClass GreeterMenuBarClass;
21
22struct _GreeterMenuBar
23{
24 GtkMenuBar parent_instance;
25};
26
27struct _GreeterMenuBarClass
28{
29 GtkMenuBarClass parent_class;
30};
31
32GType greeter_menu_bar_get_type(void) G_GNUC_CONST;
33GtkWidget *greeter_menu_bar_new(void);
34
35G_END_DECLS
36
37#endif /* GREETER_MENU_BAR_H */
038
=== modified file 'src/lightdm-gtk-greeter.c'
--- src/lightdm-gtk-greeter.c 2014-06-06 06:56:00 +0000
+++ src/lightdm-gtk-greeter.c 2014-06-08 14:43:42 +0000
@@ -55,7 +55,8 @@
5555
56#include <lightdm.h>56#include <lightdm.h>
5757
58#include <src/lightdm-gtk-greeter-ui.h>58#include "src/greetermenubar.h"
59#include "src/lightdm-gtk-greeter-ui.h"
5960
60#if GTK_CHECK_VERSION (3, 0, 0)61#if GTK_CHECK_VERSION (3, 0, 0)
61#include <src/lightdm-gtk-greeter-css-fallback.h>62#include <src/lightdm-gtk-greeter-css-fallback.h>
@@ -73,12 +74,22 @@
7374
74/* Panel Widgets */75/* Panel Widgets */
75static GtkWindow *panel_window;76static GtkWindow *panel_window;
77<<<<<<< TREE
76static GtkWidget *clock_label;78static GtkWidget *clock_label;
77static GtkWidget *menubar, *power_menuitem, *session_menuitem, *language_menuitem, *a11y_menuitem,79static GtkWidget *menubar, *power_menuitem, *session_menuitem, *language_menuitem, *a11y_menuitem,
78 *layout_menuitem, *session_badge;80 *layout_menuitem, *session_badge;
81=======
82static GtkWidget *menubar;
83static GtkWidget *power_menuitem, *language_menuitem, *a11y_menuitem, *session_menuitem, *session_badge;
84>>>>>>> MERGE-SOURCE
79static GtkWidget *suspend_menuitem, *hibernate_menuitem, *restart_menuitem, *shutdown_menuitem;85static GtkWidget *suspend_menuitem, *hibernate_menuitem, *restart_menuitem, *shutdown_menuitem;
86<<<<<<< TREE
80static GtkWidget *keyboard_menuitem;87static GtkWidget *keyboard_menuitem;
81static GtkMenu *session_menu, *language_menu, *layout_menu;88static GtkMenu *session_menu, *language_menu, *layout_menu;
89=======
90static GtkWidget *keyboard_menuitem, *clock_menuitem, *clock_label, *host_menuitem;
91static GtkMenu *session_menu, *language_menu;
92>>>>>>> MERGE-SOURCE
8293
83/* Login Window Widgets */94/* Login Window Widgets */
84static GtkWindow *login_window;95static GtkWindow *login_window;
@@ -165,6 +176,36 @@
165#endif176#endif
166177
167178
179typedef enum
180{
181 PANEL_ITEM_INDICATOR,
182 PANEL_ITEM_SPACER,
183 PANEL_ITEM_SEPARATOR,
184 PANEL_ITEM_TEXT
185} GreeterPanelItemType;
186
187#if GTK_CHECK_VERSION (3, 0, 0)
188static const gchar *PANEL_ITEM_STYLE = "panel-item";
189static const gchar *PANEL_ITEM_STYLE_HOVERED = "panel-item-hovered";
190
191static const gchar *PANEL_ITEM_STYLES[] =
192{
193 "panel-item-indicator",
194 "panel-item-spacer",
195 "panel-item-separator",
196 "panel-item-text"
197};
198#endif
199
200static const gchar *PANEL_ITEM_DATA_INDEX = "panel-item-data-index";
201
202#ifdef HAVE_LIBINDICATOR
203static const gchar *INDICATOR_ITEM_DATA_OBJECT = "indicator-item-data-object";
204static const gchar *INDICATOR_ITEM_DATA_ENTRY = "indicator-item-data-entry";
205static const gchar *INDICATOR_ITEM_DATA_BOX = "indicator-item-data-box";
206static const gchar *INDICATOR_DATA_MENUITEMS = "indicator-data-menuitems";
207#endif
208
168static void209static void
169pam_message_finalize (PAMConversationMessage *message)210pam_message_finalize (PAMConversationMessage *message)
170{211{
@@ -172,34 +213,63 @@
172 g_free (message);213 g_free (message);
173}214}
174215
216<<<<<<< TREE
217=======
218#if GTK_CHECK_VERSION (3, 0, 0)
219static gboolean
220panel_item_enter_notify_cb (GtkWidget *widget, GdkEvent *event, gpointer enter)
221{
222 GtkStyleContext *context = gtk_widget_get_style_context (widget);
223 if (GPOINTER_TO_INT (enter))
224 gtk_style_context_add_class (context, PANEL_ITEM_STYLE_HOVERED);
225 else
226 gtk_style_context_remove_class (context, PANEL_ITEM_STYLE_HOVERED);
227 return FALSE;
228}
229#endif
230
231>>>>>>> MERGE-SOURCE
175static void232static void
176add_indicator_to_panel (GtkWidget *indicator_item, gint index)233panel_add_item (GtkWidget *widget, gint index, GreeterPanelItemType item_type)
177{234{
178 gint insert_pos = 0;235 gint insert_pos = 0;
179 GList* items = gtk_container_get_children (GTK_CONTAINER (menubar));236 GList* items = gtk_container_get_children (GTK_CONTAINER (menubar));
180 GList* item;237 GList* item;
181 for (item = items; item; item = item->next)238 for (item = items; item; item = item->next)
182 {239 {
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)
184 break;241 break;
185 insert_pos++;242 insert_pos++;
186 }243 }
187 g_list_free (items);244 g_list_free (items);
188245
189 gtk_menu_shell_insert (GTK_MENU_SHELL (menubar), GTK_WIDGET (indicator_item), insert_pos);246 #if GTK_CHECK_VERSION (3, 0, 0)
247 gtk_style_context_add_class (gtk_widget_get_style_context (widget), PANEL_ITEM_STYLE);
248 gtk_style_context_add_class (gtk_widget_get_style_context (widget), PANEL_ITEM_STYLES[item_type]);
249 if (item_type == PANEL_ITEM_INDICATOR)
250 {
251 g_signal_connect (G_OBJECT (widget), "enter-notify-event",
252 G_CALLBACK (panel_item_enter_notify_cb), GINT_TO_POINTER(TRUE));
253 g_signal_connect (G_OBJECT (widget), "leave-notify-event",
254 G_CALLBACK (panel_item_enter_notify_cb), GINT_TO_POINTER(FALSE));
255 }
256 #endif
257
258 gtk_widget_show (widget);
259 gtk_menu_shell_insert (GTK_MENU_SHELL (menubar), widget, insert_pos);
190}260}
191261
192#ifdef HAVE_LIBINDICATOR262#ifdef HAVE_LIBINDICATOR
193static gboolean263static gboolean
194entry_scrolled (GtkWidget *menuitem, GdkEventScroll *event, gpointer data)264indicator_entry_scrolled_cb (GtkWidget *menuitem, GdkEventScroll *event, gpointer data)
195{265{
196 IndicatorObject *io;266 IndicatorObject *io;
197 IndicatorObjectEntry *entry;267 IndicatorObjectEntry *entry;
198268
199 g_return_val_if_fail (GTK_IS_WIDGET (menuitem), FALSE);269 g_return_val_if_fail (GTK_IS_WIDGET (menuitem), FALSE);
200270
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);
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);
203273
204 g_return_val_if_fail (INDICATOR_IS_OBJECT (io), FALSE);274 g_return_val_if_fail (INDICATOR_IS_OBJECT (io), FALSE);
205275
@@ -210,15 +280,15 @@
210}280}
211281
212static void282static void
213entry_activated (GtkWidget *widget, gpointer user_data)283indicator_entry_activated_cb (GtkWidget *widget, gpointer user_data)
214{284{
215 IndicatorObject *io;285 IndicatorObject *io;
216 IndicatorObjectEntry *entry;286 IndicatorObjectEntry *entry;
217287
218 g_return_if_fail (GTK_IS_WIDGET (widget));288 g_return_if_fail (GTK_IS_WIDGET (widget));
219289
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);
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);
222292
223 g_return_if_fail (INDICATOR_IS_OBJECT (io));293 g_return_if_fail (INDICATOR_IS_OBJECT (io));
224294
@@ -226,10 +296,10 @@
226}296}
227297
228static GtkWidget*298static GtkWidget*
229create_menuitem (IndicatorObject *io, IndicatorObjectEntry *entry, GtkWidget *menubar)299indicator_entry_create_menuitem (IndicatorObject *io, IndicatorObjectEntry *entry, GtkWidget *menubar)
230{300{
231 GtkWidget *box, *menuitem;301 GtkWidget *box, *menuitem;
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));
233303
234#if GTK_CHECK_VERSION (3, 0, 0)304#if GTK_CHECK_VERSION (3, 0, 0)
235 box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);305 box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
@@ -240,13 +310,13 @@
240310
241 gtk_widget_add_events(GTK_WIDGET(menuitem), GDK_SCROLL_MASK);311 gtk_widget_add_events(GTK_WIDGET(menuitem), GDK_SCROLL_MASK);
242312
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);
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);
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);
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));
247317
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);
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);
250320
251 if (entry->image)321 if (entry->image)
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);
@@ -259,24 +329,24 @@
259329
260 gtk_container_add (GTK_CONTAINER (menuitem), box);330 gtk_container_add (GTK_CONTAINER (menuitem), box);
261 gtk_widget_show (box);331 gtk_widget_show (box);
262 add_indicator_to_panel (menuitem, index);332 panel_add_item(menuitem, index, PANEL_ITEM_INDICATOR);
263333
264 return menuitem;334 return menuitem;
265}335}
266336
267static void337static void
268entry_added (IndicatorObject *io, IndicatorObjectEntry *entry, gpointer user_data)338indicator_entry_added_cb (IndicatorObject *io, IndicatorObjectEntry *entry, gpointer user_data)
269{339{
270 GHashTable *menuitem_lookup;340 GHashTable *menuitem_lookup;
271 GtkWidget *menuitem;341 GtkWidget *menuitem;
272342
273 /* if the menuitem doesn't already exist, create it now */343 /* if the menuitem doesn't already exist, create it now */
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);
275 g_return_if_fail (menuitem_lookup);345 g_return_if_fail (menuitem_lookup);
276 menuitem = g_hash_table_lookup (menuitem_lookup, entry);346 menuitem = g_hash_table_lookup (menuitem_lookup, entry);
277 if (!GTK_IS_WIDGET (menuitem))347 if (!GTK_IS_WIDGET (menuitem))
278 {348 {
279 menuitem = create_menuitem (io, entry, GTK_WIDGET (user_data));349 menuitem = indicator_entry_create_menuitem (io, entry, GTK_WIDGET (user_data));
280 g_hash_table_insert (menuitem_lookup, entry, menuitem);350 g_hash_table_insert (menuitem_lookup, entry, menuitem);
281 }351 }
282352
@@ -284,22 +354,22 @@
284}354}
285355
286static void356static void
287entry_removed_cb (GtkWidget *widget, gpointer userdata)357remove_indicator_entry_cb (GtkWidget *widget, gpointer userdata)
288{358{
289 IndicatorObject *io;359 IndicatorObject *io;
290 GHashTable *menuitem_lookup;360 GHashTable *menuitem_lookup;
291 GtkWidget *menuitem;361 GtkWidget *menuitem;
292 gpointer entry;362 gpointer entry;
293363
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);
295 if (!INDICATOR_IS_OBJECT (io))365 if (!INDICATOR_IS_OBJECT (io))
296 return;366 return;
297367
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);
299 if (entry != userdata)369 if (entry != userdata)
300 return;370 return;
301371
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);
303 g_return_if_fail (menuitem_lookup);373 g_return_if_fail (menuitem_lookup);
304 menuitem = g_hash_table_lookup (menuitem_lookup, entry);374 menuitem = g_hash_table_lookup (menuitem_lookup, entry);
305 if (GTK_IS_WIDGET (menuitem))375 if (GTK_IS_WIDGET (menuitem))
@@ -309,13 +379,13 @@
309}379}
310380
311static void381static void
312entry_removed (IndicatorObject *io, IndicatorObjectEntry *entry, gpointer user_data)382indicator_entry_removed_cb (IndicatorObject *io, IndicatorObjectEntry *entry, gpointer user_data)
313{383{
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);
315}385}
316386
317static void387static void
318menu_show (IndicatorObject *io, IndicatorObjectEntry *entry, guint32 timestamp, gpointer user_data)388indicator_menu_show_cb (IndicatorObject *io, IndicatorObjectEntry *entry, guint32 timestamp, gpointer user_data)
319{389{
320 IndicatorObjectEntry *entrydata;390 IndicatorObjectEntry *entrydata;
321 GtkWidget *menuitem;391 GtkWidget *menuitem;
@@ -403,9 +473,14 @@
403 GHashTable *builtin_items = NULL;473 GHashTable *builtin_items = NULL;
404 GHashTableIter iter;474 GHashTableIter iter;
405 gpointer iter_value;475 gpointer iter_value;
476 #ifdef HAVE_LIBINDICATOR
406 gboolean inited = FALSE;477 gboolean inited = FALSE;
478 #endif
407 gboolean fallback = FALSE;479 gboolean fallback = FALSE;
408480
481 const gchar *DEFAULT_LAYOUT[] = {"~host", "~spacer", "~clock", "~spacer",
482 "~session", "~language", "~a11y", "~power", NULL};
483
409#ifdef START_INDICATOR_SERVICES484#ifdef START_INDICATOR_SERVICES
410 GError *error = NULL;485 GError *error = NULL;
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};
@@ -423,8 +498,9 @@
423 fallback = TRUE;498 fallback = TRUE;
424 }499 }
425500
426 if (names && !fallback)501 if (!names || fallback)
427 {502 {
503<<<<<<< TREE
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);
429505
430 g_hash_table_insert (builtin_items, "~power", power_menuitem);506 g_hash_table_insert (builtin_items, "~power", power_menuitem);
@@ -436,15 +512,66 @@
436 g_hash_table_iter_init (&iter, builtin_items);512 g_hash_table_iter_init (&iter, builtin_items);
437 while (g_hash_table_iter_next (&iter, NULL, &iter_value))513 while (g_hash_table_iter_next (&iter, NULL, &iter_value))
438 gtk_container_remove (GTK_CONTAINER (menubar), iter_value);514 gtk_container_remove (GTK_CONTAINER (menubar), iter_value);
515=======
516 names = (gchar**)DEFAULT_LAYOUT;
517 length = g_strv_length (names);
518>>>>>>> MERGE-SOURCE
439 }519 }
440520
521 builtin_items = g_hash_table_new (g_str_hash, g_str_equal);
522
523 g_hash_table_insert (builtin_items, "~power", power_menuitem);
524 g_hash_table_insert (builtin_items, "~session", session_menuitem);
525 g_hash_table_insert (builtin_items, "~language", language_menuitem);
526 g_hash_table_insert (builtin_items, "~a11y", a11y_menuitem);
527 g_hash_table_insert (builtin_items, "~host", host_menuitem);
528 g_hash_table_insert (builtin_items, "~clock", clock_menuitem);
529
530 g_hash_table_iter_init (&iter, builtin_items);
531 while (g_hash_table_iter_next (&iter, NULL, &iter_value))
532 gtk_container_remove (GTK_CONTAINER (menubar), iter_value);
533
441 for (i = 0; i < length; ++i)534 for (i = 0; i < length; ++i)
442 {535 {
443 if (names[i][0] == '~' && g_hash_table_lookup_extended (builtin_items, names[i], NULL, &iter_value))536 if (names[i][0] == '~')
444 { /* Built-in indicators */537 { /* Built-in indicators */
445 g_object_set_data (G_OBJECT (iter_value), "indicator-custom-index-data", GINT_TO_POINTER (i));538 GreeterPanelItemType item_type = PANEL_ITEM_INDICATOR;
446 add_indicator_to_panel (iter_value, i);539 if (g_hash_table_lookup_extended (builtin_items, names[i], NULL, &iter_value))
447 g_hash_table_remove (builtin_items, (gconstpointer)names[i]);540 g_hash_table_remove (builtin_items, (gconstpointer)names[i]);
541 else if (g_strcmp0 (names[i], "~separator") == 0)
542 {
543 #if GTK_CHECK_VERSION (3, 0, 0)
544 GtkWidget *separator = gtk_separator_new (GTK_ORIENTATION_VERTICAL);
545 #else
546 GtkWidget *separator = gtk_vseparator_new ();
547 #endif
548 item_type = PANEL_ITEM_SEPARATOR;
549 iter_value = gtk_separator_menu_item_new ();
550 gtk_widget_show (separator);
551 gtk_container_add (iter_value, separator);
552 }
553 else if (g_strcmp0 (names[i], "~spacer") == 0)
554 {
555 item_type = PANEL_ITEM_SPACER;
556 iter_value = gtk_separator_menu_item_new ();
557 gtk_menu_item_set_label (iter_value, "");
558 #if GTK_CHECK_VERSION (3, 0, 0)
559 gtk_widget_set_hexpand (iter_value, TRUE);
560 #else
561 g_object_set_data(G_OBJECT(iter_value), GREETER_MENU_BAR_EXPAND_PROP, "1");
562 #endif
563 }
564 else if (names[i][1] == '~')
565 {
566 item_type = PANEL_ITEM_TEXT;
567 iter_value = gtk_separator_menu_item_new ();
568 gtk_menu_item_set_label (iter_value, &names[i][2]);
569 }
570 else
571 continue;
572
573 g_object_set_data (G_OBJECT (iter_value), PANEL_ITEM_DATA_INDEX, GINT_TO_POINTER (i));
574 panel_add_item (iter_value, i, item_type);
448 continue;575 continue;
449 }576 }
450577
@@ -497,21 +624,21 @@
497 GList *entries, *lp;624 GList *entries, *lp;
498625
499 /* used to store/fetch menu entries */626 /* used to store/fetch menu entries */
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,
501 g_hash_table_new (g_direct_hash, g_direct_equal),628 g_hash_table_new (g_direct_hash, g_direct_equal),
502 (GDestroyNotify) g_hash_table_destroy);629 (GDestroyNotify) g_hash_table_destroy);
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));
504631
505 g_signal_connect (G_OBJECT (io), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED,632 g_signal_connect (G_OBJECT (io), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED,
506 G_CALLBACK (entry_added), menubar);633 G_CALLBACK (indicator_entry_added_cb), menubar);
507 g_signal_connect (G_OBJECT (io), INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED,634 g_signal_connect (G_OBJECT (io), INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED,
508 G_CALLBACK (entry_removed), menubar);635 G_CALLBACK (indicator_entry_removed_cb), menubar);
509 g_signal_connect (G_OBJECT (io), INDICATOR_OBJECT_SIGNAL_MENU_SHOW,636 g_signal_connect (G_OBJECT (io), INDICATOR_OBJECT_SIGNAL_MENU_SHOW,
510 G_CALLBACK (menu_show), menubar);637 G_CALLBACK (indicator_menu_show_cb), menubar);
511638
512 entries = indicator_object_get_entries (io);639 entries = indicator_object_get_entries (io);
513 for (lp = entries; lp; lp = g_list_next (lp))640 for (lp = entries; lp; lp = g_list_next (lp))
514 entry_added (io, lp->data, menubar);641 indicator_entry_added_cb (io, lp->data, menubar);
515 g_list_free (entries);642 g_list_free (entries);
516 }643 }
517 else644 else
@@ -522,7 +649,7 @@
522 g_free (path);649 g_free (path);
523 #endif650 #endif
524 }651 }
525 if (names)652 if (names && names != (gchar**)DEFAULT_LAYOUT)
526 g_strfreev (names);653 g_strfreev (names);
527654
528 if (builtin_items)655 if (builtin_items)
@@ -1691,9 +1818,6 @@
1691 gchar *font_name, **tokens;1818 gchar *font_name, **tokens;
1692 guint length;1819 guint length;
16931820
1694 /* Hide the clock since indicators are about to eat the screen. */
1695 gtk_widget_hide(GTK_WIDGET(clock_label));
1696
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);
1698 tokens = g_strsplit (font_name, " ", -1);1822 tokens = g_strsplit (font_name, " ", -1);
1699 length = g_strv_length (tokens);1823 length = g_strv_length (tokens);
@@ -1715,8 +1839,6 @@
1715 else1839 else
1716 {1840 {
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);
1718 /* Show the clock as needed */
1719 gtk_widget_show_all(GTK_WIDGET(clock_label));
1720 }1842 }
1721}1843}
17221844
@@ -2166,8 +2288,8 @@
2166 2288
2167 strftime(time_str, 50, clock_format, timeinfo);2289 strftime(time_str, 50, clock_format, timeinfo);
2168 markup = g_markup_printf_escaped("<b>%s</b>", time_str);2290 markup = g_markup_printf_escaped("<b>%s</b>", time_str);
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)
2170 gtk_label_set_markup( GTK_LABEL(clock_label), markup );2292 gtk_label_set_markup (GTK_LABEL (clock_label), markup);
2171 g_free(markup);2293 g_free(markup);
2172 2294
2173 return TRUE;2295 return TRUE;
@@ -2646,11 +2768,13 @@
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);
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);
2648#endif2770#endif
2649 gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (builder, "hostname_label")), lightdm_get_hostname ());
2650 session_menu = GTK_MENU(gtk_builder_get_object (builder, "session_menu"));2771 session_menu = GTK_MENU(gtk_builder_get_object (builder, "session_menu"));
2651 language_menu = GTK_MENU(gtk_builder_get_object (builder, "language_menu"));2772 language_menu = GTK_MENU(gtk_builder_get_object (builder, "language_menu"));
2773<<<<<<< TREE
2652 layout_menu = GTK_MENU(gtk_builder_get_object (builder, "layout_menu"));2774 layout_menu = GTK_MENU(gtk_builder_get_object (builder, "layout_menu"));
2653 clock_label = GTK_WIDGET(gtk_builder_get_object (builder, "clock_label"));2775 clock_label = GTK_WIDGET(gtk_builder_get_object (builder, "clock_label"));
2776=======
2777>>>>>>> MERGE-SOURCE
2654 menubar = GTK_WIDGET (gtk_builder_get_object (builder, "menubar"));2778 menubar = GTK_WIDGET (gtk_builder_get_object (builder, "menubar"));
26552779
2656 /* Login window */2780 /* Login window */
@@ -2707,8 +2831,13 @@
2707 language_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "language_menuitem"));2831 language_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "language_menuitem"));
2708 a11y_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "a11y_menuitem"));2832 a11y_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "a11y_menuitem"));
2709 power_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "power_menuitem"));2833 power_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "power_menuitem"));
2834<<<<<<< TREE
2710 layout_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "layout_menuitem"));2835 layout_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "layout_menuitem"));
2711 keyboard_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "keyboard_menuitem"));2836 keyboard_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "keyboard_menuitem"));
2837=======
2838 clock_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "clock_menuitem"));
2839 host_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "host_menuitem"));
2840>>>>>>> MERGE-SOURCE
27122841
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);
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);
@@ -2738,15 +2867,6 @@
2738 g_free (value);2867 g_free (value);
2739 }2868 }
27402869
2741 /* Clock */
2742 gtk_widget_set_no_show_all(GTK_WIDGET(clock_label),
2743 !g_key_file_get_boolean (config, "greeter", "show-clock", NULL));
2744 gtk_widget_show_all(GTK_WIDGET(clock_label));
2745 clock_format = g_key_file_get_value (config, "greeter", "clock-format", NULL);
2746 if (!clock_format)
2747 clock_format = "%a, %H:%M";
2748 clock_timeout_thread();
2749
2750 /* Session menu */2870 /* Session menu */
2751 if (gtk_widget_get_visible (session_menuitem))2871 if (gtk_widget_get_visible (session_menuitem))
2752 {2872 {
@@ -2852,6 +2972,7 @@
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);
2853 }2973 }
28542974
2975<<<<<<< TREE
2855 /* Layout menu */2976 /* Layout menu */
2856 if (gtk_widget_get_visible (layout_menuitem))2977 if (gtk_widget_get_visible (layout_menuitem))
2857 {2978 {
@@ -2899,6 +3020,25 @@
2899 fallback_css_priority);3020 fallback_css_priority);
2900 #endif3021 #endif
29013022
3023=======
3024
3025 /* Host label */
3026 if (gtk_widget_get_visible (host_menuitem))
3027 gtk_menu_item_set_label (GTK_MENU_ITEM (host_menuitem), lightdm_get_hostname ());
3028
3029 /* Clock label */
3030 if (gtk_widget_get_visible (clock_menuitem))
3031 {
3032 gtk_menu_item_set_label (GTK_MENU_ITEM (clock_menuitem), "");
3033 clock_label = gtk_bin_get_child (GTK_BIN (clock_menuitem));
3034 clock_format = g_key_file_get_value (config, "greeter", "clock-format", NULL);
3035 if (!clock_format)
3036 clock_format = "%a, %H:%M";
3037 clock_timeout_thread ();
3038 gdk_threads_add_timeout (1000, (GSourceFunc) clock_timeout_thread, NULL);
3039 }
3040
3041>>>>>>> MERGE-SOURCE
2902 /* Users combobox */3042 /* Users combobox */
2903 renderer = gtk_cell_renderer_text_new();3043 renderer = gtk_cell_renderer_text_new();
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);
@@ -3011,7 +3151,6 @@
3011 }3151 }
3012 gtk_widget_set_sensitive (keyboard_menuitem, a11y_keyboard_command != NULL);3152 gtk_widget_set_sensitive (keyboard_menuitem, a11y_keyboard_command != NULL);
3013 gtk_widget_set_visible (keyboard_menuitem, a11y_keyboard_command != NULL);3153 gtk_widget_set_visible (keyboard_menuitem, a11y_keyboard_command != NULL);
3014 gdk_threads_add_timeout (1000, (GSourceFunc) clock_timeout_thread, NULL);
30153154
3016 /* focus fix (source: unity-greeter) */3155 /* focus fix (source: unity-greeter) */
3017 GdkWindow* root_window = gdk_get_default_root_window ();3156 GdkWindow* root_window = gdk_get_default_root_window ();
30183157
=== modified file 'src/lightdm-gtk-greeter.glade'
--- src/lightdm-gtk-greeter.glade 2014-05-06 23:20:09 +0000
+++ src/lightdm-gtk-greeter.glade 2014-06-08 14:43:42 +0000
@@ -12,8 +12,10 @@
12 <group name="power_accelgroup"/>12 <group name="power_accelgroup"/>
13 </accel-groups>13 </accel-groups>
14 <child>14 <child>
15 <object class="GtkHBox" id="box3">15 <object class="GreeterMenuBar" id="menubar">
16 <property name="name">menubar</property>
16 <property name="visible">True</property>17 <property name="visible">True</property>
18<<<<<<< TREE
17 <property name="can_focus">False</property>19 <property name="can_focus">False</property>
18 <property name="homogeneous">True</property>20 <property name="homogeneous">True</property>
19 <child>21 <child>
@@ -186,6 +188,145 @@
186 <property name="pack_type">end</property>188 <property name="pack_type">end</property>
187 <property name="position">2</property>189 <property name="position">2</property>
188 </packing>190 </packing>
191=======
192 <property name="can_focus">True</property>
193 <property name="halign">fill</property>
194 <property name="pack_direction">rtl</property>
195 <signal name="key-press-event" handler="menubar_key_press_cb" swapped="no"/>
196 <child>
197 <object class="GtkMenuItem" id="power_menuitem">
198 <property name="name">power_menuitem</property>
199 <property name="visible">True</property>
200 <property name="can_focus">True</property>
201 <child type="submenu">
202 <object class="GtkMenu" id="power_menu">
203 <property name="visible">True</property>
204 <property name="can_focus">False</property>
205 <property name="accel_group">power_accelgroup</property>
206 <child>
207 <object class="GtkMenuItem" id="suspend_menuitem">
208 <property name="visible">True</property>
209 <property name="can_focus">False</property>
210 <property name="label" translatable="yes">Suspend</property>
211 <signal name="activate" handler="suspend_cb" swapped="no"/>
212 </object>
213 </child>
214 <child>
215 <object class="GtkMenuItem" id="hibernate_menuitem">
216 <property name="visible">True</property>
217 <property name="can_focus">False</property>
218 <property name="label" translatable="yes">Hibernate</property>
219 <signal name="activate" handler="hibernate_cb" swapped="no"/>
220 </object>
221 </child>
222 <child>
223 <object class="GtkMenuItem" id="restart_menuitem">
224 <property name="visible">True</property>
225 <property name="can_focus">False</property>
226 <property name="label" translatable="yes">Restart...</property>
227 <signal name="activate" handler="restart_cb" swapped="no"/>
228 </object>
229 </child>
230 <child>
231 <object class="GtkMenuItem" id="shutdown_menuitem">
232 <property name="use_action_appearance">False</property>
233 <property name="visible">True</property>
234 <property name="can_focus">False</property>
235 <property name="accel_path">&lt;Login&gt;/power/shutdown</property>
236 <property name="label" translatable="yes">Shut Down...</property>
237 <signal name="activate" handler="shutdown_cb" swapped="no"/>
238 </object>
239 </child>
240 </object>
241 </child>
242 </object>
243 </child>
244 <child>
245 <object class="GtkMenuItem" id="a11y_menuitem">
246 <property name="name">a11y_menuitem</property>
247 <property name="visible">True</property>
248 <property name="can_focus">True</property>
249 <child type="submenu">
250 <object class="GtkMenu" id="a11y_menu">
251 <property name="visible">True</property>
252 <property name="can_focus">False</property>
253 <property name="accel_group">a11y_accelgroup</property>
254 <child>
255 <object class="GtkCheckMenuItem" id="large_font_menuitem">
256 <property name="use_action_appearance">False</property>
257 <property name="visible">True</property>
258 <property name="can_focus">False</property>
259 <property name="accel_path">&lt;Login&gt;/a11y/font</property>
260 <property name="label" translatable="yes">Large Font</property>
261 <signal name="toggled" handler="a11y_font_cb" swapped="no"/>
262 </object>
263 </child>
264 <child>
265 <object class="GtkCheckMenuItem" id="high_contrast_menuitem">
266 <property name="use_action_appearance">False</property>
267 <property name="visible">True</property>
268 <property name="can_focus">False</property>
269 <property name="accel_path">&lt;Login&gt;/a11y/contrast</property>
270 <property name="label" translatable="yes">High Contrast</property>
271 <signal name="toggled" handler="a11y_contrast_cb" swapped="no"/>
272 </object>
273 </child>
274 <child>
275 <object class="GtkCheckMenuItem" id="keyboard_menuitem">
276 <property name="use_action_appearance">False</property>
277 <property name="visible">True</property>
278 <property name="can_focus">False</property>
279 <property name="accel_path">&lt;Login&gt;/a11y/keyboard</property>
280 <property name="label" translatable="yes">On Screen Keyboard</property>
281 <property name="use_underline">True</property>
282 <signal name="toggled" handler="a11y_keyboard_cb" swapped="no"/>
283 </object>
284 </child>
285 </object>
286 </child>
287 </object>
288 </child>
289 <child>
290 <object class="GtkMenuItem" id="language_menuitem">
291 <property name="name">language_menuitem</property>
292 <property name="visible">True</property>
293 <property name="can_focus">True</property>
294 <property name="label">[language_code]</property>
295 <child type="submenu">
296 <object class="GtkMenu" id="language_menu">
297 <property name="visible">True</property>
298 <property name="can_focus">False</property>
299 </object>
300 </child>
301 </object>
302 </child>
303 <child>
304 <object class="GtkMenuItem" id="session_menuitem">
305 <property name="name">session_menuitem</property>
306 <property name="visible">True</property>
307 <property name="can_focus">True</property>
308 <child type="submenu">
309 <object class="GtkMenu" id="session_menu">
310 <property name="visible">True</property>
311 <property name="can_focus">False</property>
312 </object>
313 </child>
314 </object>
315 </child>
316 <child>
317 <object class="GtkSeparatorMenuItem" id="clock_menuitem">
318 <property name="name">clock_menuitem</property>
319 <property name="visible">False</property>
320 <property name="can_focus">False</property>
321 </object>
322 </child>
323 <child>
324 <object class="GtkSeparatorMenuItem" id="host_menuitem">
325 <property name="name">host_menuitem</property>
326 <property name="visible">False</property>
327 <property name="can_focus">False</property>
328 </object>
329>>>>>>> MERGE-SOURCE
189 </child>330 </child>
190 </object>331 </object>
191 </child>332 </child>

Subscribers

People subscribed via source and target branches