Merge lp:~kalgasnik/lightdm-gtk-greeter/alternative_layouts_indicator into lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/trunk

Proposed by Andrew P.
Status: Merged
Merged at revision: 286
Proposed branch: lp:~kalgasnik/lightdm-gtk-greeter/alternative_layouts_indicator
Merge into: lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/trunk
Diff against target: 460 lines (+307/-19)
6 files modified
configure.ac (+9/-0)
src/Makefile.am (+14/-3)
src/lightdm-gtk-greeter-application.css (+4/-0)
src/lightdm-gtk-greeter-fallback.css (+12/-0)
src/lightdm-gtk-greeter.c (+254/-16)
src/lightdm-gtk-greeter.glade (+14/-0)
To merge this branch: bzr merge lp:~kalgasnik/lightdm-gtk-greeter/alternative_layouts_indicator
Reviewer Review Type Date Requested Status
LightDM Gtk+ Greeter Development Team Pending
Review via email: mp+221187@code.launchpad.net

Description of the change

New builtin indicator: layout

Two implementations:
1. Default - using LightDM API
2. "--with-libxklavier" configure option: using xklavier library directly.

CSS:
- application.css: loaded with APPLICATION priority
- fallback.css: loaded with FALLBACK priority of current theme do not have greeter support, with APPLICATION in other case.

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 'configure.ac'
--- configure.ac 2014-05-04 11:59:11 +0000
+++ configure.ac 2014-05-28 09:19:24 +0000
@@ -105,6 +105,15 @@
105 AC_DEFINE([START_INDICATOR_SERVICES], [], [Try to start indicator-services])105 AC_DEFINE([START_INDICATOR_SERVICES], [], [Try to start indicator-services])
106])106])
107107
108AC_ARG_WITH([libxklavier], AS_HELP_STRING([--with-libxklavier], [Use libxklavier to manage layouts (instead of LightDM API)]))
109
110AS_IF([test "x$with_libxklavier" = "xyes"],
111 [
112 PKG_CHECK_MODULES([LIBXKLAVIER], [libxklavier], [have_xklavier=yes])
113 AC_DEFINE([HAVE_LIBXKLAVIER], [1], [Define if "libxklavier" is present])
114 ],
115 [])
116
108dnl ###########################################################################117dnl ###########################################################################
109dnl Internationalization118dnl Internationalization
110dnl ###########################################################################119dnl ###########################################################################
111120
=== modified file 'src/Makefile.am'
--- src/Makefile.am 2014-01-29 19:08:35 +0000
+++ src/Makefile.am 2014-05-28 09:19:24 +0000
@@ -1,7 +1,9 @@
1sbin_PROGRAMS = lightdm-gtk-greeter1sbin_PROGRAMS = lightdm-gtk-greeter
22
3lightdm_gtk_greeter_built_sources = \3lightdm_gtk_greeter_built_sources = \
4 lightdm-gtk-greeter-ui.h4 lightdm-gtk-greeter-ui.h \
5 lightdm-gtk-greeter-css-fallback.h \
6 lightdm-gtk-greeter-css-application.h
57
6lightdm_gtk_greeter_SOURCES = \8lightdm_gtk_greeter_SOURCES = \
7 $(lightdm_gtk_greeter_built_sources) \9 $(lightdm_gtk_greeter_built_sources) \
@@ -34,13 +36,20 @@
34 $(LIGHTDMGOBJECT_LIBS) \36 $(LIGHTDMGOBJECT_LIBS) \
35 $(LIBX11_LIBS) \37 $(LIBX11_LIBS) \
36 $(LIBINDICATOR_LIBS) \38 $(LIBINDICATOR_LIBS) \
37 $(LIBIDO_LIBS)39 $(LIBIDO_LIBS) \
40 $(LIBXKLAVIER_LIBS)
3841
39if MAINTAINER_MODE42if MAINTAINER_MODE
4043
41lightdm-gtk-greeter-ui.h: $(srcdir)/lightdm-gtk-greeter.glade Makefile44lightdm-gtk-greeter-ui.h: $(srcdir)/lightdm-gtk-greeter.glade Makefile
42 $(AM_V_GEN) exo-csource --static --strip-comments --strip-content --name=lightdm_gtk_greeter_ui $< >$@45 $(AM_V_GEN) exo-csource --static --strip-comments --strip-content --name=lightdm_gtk_greeter_ui $< >$@
4346
47lightdm-gtk-greeter-css-fallback.h: $(srcdir)/lightdm-gtk-greeter-fallback.css Makefile
48 $(AM_V_GEN) exo-csource --static --name=lightdm_gtk_greeter_css_fallback $< >$@
49
50lightdm-gtk-greeter-css-application.h: $(srcdir)/lightdm-gtk-greeter-application.css Makefile
51 $(AM_V_GEN) exo-csource --static --name=lightdm_gtk_greeter_css_application $< >$@
52
44DISTCLEANFILES = \53DISTCLEANFILES = \
45 $(lightdm_gtk_greeter_built_sources)54 $(lightdm_gtk_greeter_built_sources)
4655
@@ -50,4 +59,6 @@
50endif59endif
5160
52EXTRA_DIST = \61EXTRA_DIST = \
53 lightdm-gtk-greeter.glade62 lightdm-gtk-greeter.glade \
63 lightdm-gtk-greeter-fallback.css \
64 lightdm-gtk-greeter-application.css
5465
=== added file 'src/lightdm-gtk-greeter-application.css'
--- src/lightdm-gtk-greeter-application.css 1970-01-01 00:00:00 +0000
+++ src/lightdm-gtk-greeter-application.css 2014-05-28 09:19:24 +0000
@@ -0,0 +1,4 @@
1*
2{
3 -GtkWidget-window-dragging: false;
4}
05
=== added file 'src/lightdm-gtk-greeter-fallback.css'
--- src/lightdm-gtk-greeter-fallback.css 1970-01-01 00:00:00 +0000
+++ src/lightdm-gtk-greeter-fallback.css 2014-05-28 09:19:24 +0000
@@ -0,0 +1,12 @@
1#layout_menuitem>GtkLabel
2{
3 border: 1px solid alpha(@menu_fg_color, 0.8);
4 border-radius: 0.5em;
5 padding: 0px 0.25em;
6 background: alpha(@menu_fg_color, 0.2);
7}
8
9#layout_menuitem
10{
11 padding: 1px;
12}
013
=== modified file 'src/lightdm-gtk-greeter.c'
--- src/lightdm-gtk-greeter.c 2014-05-10 00:31:27 +0000
+++ src/lightdm-gtk-greeter.c 2014-05-28 09:19:24 +0000
@@ -49,10 +49,19 @@
49#include "libido/libido.h"49#include "libido/libido.h"
50#endif50#endif
5151
52#ifdef HAVE_LIBXKLAVIER
53#include <libxklavier/xklavier.h>
54#endif
55
52#include <lightdm.h>56#include <lightdm.h>
5357
54#include <src/lightdm-gtk-greeter-ui.h>58#include <src/lightdm-gtk-greeter-ui.h>
5559
60#if GTK_CHECK_VERSION (3, 0, 0)
61#include <src/lightdm-gtk-greeter-css-fallback.h>
62#include <src/lightdm-gtk-greeter-css-application.h>
63#endif
64
56static LightDMGreeter *greeter;65static LightDMGreeter *greeter;
57static GKeyFile *state;66static GKeyFile *state;
58static gchar *state_filename;67static gchar *state_filename;
@@ -65,10 +74,11 @@
65/* Panel Widgets */74/* Panel Widgets */
66static GtkWindow *panel_window;75static GtkWindow *panel_window;
67static GtkWidget *clock_label;76static GtkWidget *clock_label;
68static GtkWidget *menubar, *power_menuitem, *session_menuitem, *language_menuitem, *a11y_menuitem, *session_badge;77static GtkWidget *menubar, *power_menuitem, *session_menuitem, *language_menuitem, *a11y_menuitem,
78 *layout_menuitem, *session_badge;
69static GtkWidget *suspend_menuitem, *hibernate_menuitem, *restart_menuitem, *shutdown_menuitem;79static GtkWidget *suspend_menuitem, *hibernate_menuitem, *restart_menuitem, *shutdown_menuitem;
70static GtkWidget *keyboard_menuitem;80static GtkWidget *keyboard_menuitem;
71static GtkMenu *session_menu, *language_menu;81static GtkMenu *session_menu, *language_menu, *layout_menu;
7282
73/* Login Window Widgets */83/* Login Window Widgets */
74static GtkWindow *login_window;84static GtkWindow *login_window;
@@ -135,11 +145,22 @@
135 DimensionPosition x, y;145 DimensionPosition x, y;
136} WindowPosition;146} WindowPosition;
137147
138const WindowPosition CENTERED_WINDOW_POS = { .x = {50, +1, TRUE, 0}, .y = {50, +1, TRUE, 0} };148static const WindowPosition CENTERED_WINDOW_POS = { .x = {50, +1, TRUE, 0}, .y = {50, +1, TRUE, 0} };
139WindowPosition main_window_pos;149static WindowPosition main_window_pos;
140150
141GdkPixbuf* default_user_pixbuf = NULL;151static GdkPixbuf* default_user_pixbuf = NULL;
142gchar* default_user_icon = "avatar-default";152static gchar* default_user_icon = "avatar-default";
153
154static const gchar *LAYOUT_DATA_LABEL = "layout-label";
155#ifdef HAVE_LIBXKLAVIER
156static const gchar *LAYOUT_DATA_GROUP = "layout-group";
157#else
158static const gchar *LAYOUT_DATA_NAME = "layout-name";
159#endif
160
161#ifdef HAVE_LIBXKLAVIER
162static XklEngine *xkl_engine;
163#endif
143164
144static void165static void
145pam_message_finalize (PAMConversationMessage *message)166pam_message_finalize (PAMConversationMessage *message)
@@ -408,6 +429,7 @@
408 g_hash_table_insert (builtin_items, "~session", session_menuitem);429 g_hash_table_insert (builtin_items, "~session", session_menuitem);
409 g_hash_table_insert (builtin_items, "~language", language_menuitem);430 g_hash_table_insert (builtin_items, "~language", language_menuitem);
410 g_hash_table_insert (builtin_items, "~a11y", a11y_menuitem);431 g_hash_table_insert (builtin_items, "~a11y", a11y_menuitem);
432 g_hash_table_insert (builtin_items, "~layout", layout_menuitem);
411433
412 g_hash_table_iter_init (&iter, builtin_items);434 g_hash_table_iter_init (&iter, builtin_items);
413 while (g_hash_table_iter_next (&iter, NULL, &iter_value))435 while (g_hash_table_iter_next (&iter, NULL, &iter_value))
@@ -2231,6 +2253,180 @@
2231 return GDK_FILTER_CONTINUE;2253 return GDK_FILTER_CONTINUE;
2232}2254}
22332255
2256/* Layout functions and callbacks */
2257
2258static void
2259layout_selected_cb(GtkCheckMenuItem *menuitem, gpointer user_data)
2260{
2261 if (gtk_check_menu_item_get_active (menuitem))
2262 {
2263 #ifdef HAVE_LIBXKLAVIER
2264 gint group = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menuitem), LAYOUT_DATA_GROUP));
2265 xkl_engine_lock_group (xkl_engine, group);
2266 #else
2267 const gchar *name = g_object_get_data (G_OBJECT (menuitem), LAYOUT_DATA_NAME);
2268 GList *item;
2269 for (item = lightdm_get_layouts (); item; item = g_list_next (item))
2270 {
2271 if (g_strcmp0 (name, lightdm_layout_get_name (item->data)) == 0)
2272 {
2273 lightdm_set_layout (item->data);
2274 gtk_menu_item_set_label (GTK_MENU_ITEM (layout_menuitem),
2275 g_object_get_data (G_OBJECT (menuitem), LAYOUT_DATA_LABEL));
2276 break;
2277 }
2278 }
2279 #endif
2280 }
2281}
2282
2283static void
2284update_layouts_menu (void)
2285{
2286 #ifdef HAVE_LIBXKLAVIER
2287 XklConfigRegistry *registry;
2288 XklConfigRec *config;
2289 XklConfigItem *config_item;
2290 GSList *menu_group = NULL;
2291 gint i;
2292
2293 g_list_free_full (gtk_container_get_children (GTK_CONTAINER (layout_menu)),
2294 (GDestroyNotify)gtk_widget_destroy);
2295
2296 config = xkl_config_rec_new ();
2297 if (!xkl_config_rec_get_from_server (config, xkl_engine))
2298 {
2299 g_object_unref (config);
2300 g_warning ("Failed to get Xkl configuration from server");
2301 return;
2302 }
2303
2304 config_item = xkl_config_item_new ();
2305 registry = xkl_config_registry_get_instance (xkl_engine);
2306 xkl_config_registry_load (registry, FALSE);
2307
2308 for (i = 0; config->layouts[i] != NULL; ++i)
2309 {
2310 const gchar *layout = config->layouts[i] ? config->layouts[i] : "";
2311 const gchar *variant = config->variants[i] ? config->variants[i] : "";
2312 gchar *label = strlen (variant) > 0 ? g_strdup_printf ("%s_%s", layout, variant) : g_strdup (layout);
2313
2314 GtkWidget *menuitem = gtk_radio_menu_item_new (menu_group);
2315 menu_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem));
2316
2317 g_snprintf (config_item->name, sizeof (config_item->name), "%s", variant);
2318 if (xkl_config_registry_find_variant (registry, layout, config_item))
2319 gtk_menu_item_set_label (GTK_MENU_ITEM (menuitem), config_item->description);
2320 else
2321 {
2322 g_snprintf (config_item->name, sizeof (config_item->name), "%s", layout);
2323 if (xkl_config_registry_find_layout (registry, config_item))
2324 gtk_menu_item_set_label (GTK_MENU_ITEM (menuitem), config_item->description);
2325 else
2326 gtk_menu_item_set_label (GTK_MENU_ITEM (menuitem), label);
2327 }
2328
2329 g_object_set_data_full (G_OBJECT (menuitem), LAYOUT_DATA_LABEL, label, g_free);
2330 g_object_set_data (G_OBJECT (menuitem), LAYOUT_DATA_GROUP, GINT_TO_POINTER (i));
2331
2332 g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (layout_selected_cb), NULL);
2333 gtk_menu_shell_append (GTK_MENU_SHELL (layout_menu), menuitem);
2334 gtk_widget_show (GTK_WIDGET (menuitem));
2335 }
2336
2337 g_object_unref (registry);
2338 g_object_unref (config_item);
2339 g_object_unref (config);
2340 #else
2341 GSList *menu_group = NULL;
2342 GList *item;
2343
2344 g_list_free_full (gtk_container_get_children (GTK_CONTAINER (layout_menu)),
2345 (GDestroyNotify)gtk_widget_destroy);
2346
2347 for (item = lightdm_get_layouts (); item; item = g_list_next (item))
2348 {
2349 LightDMLayout *layout = item->data;
2350 GtkWidget *menuitem = gtk_radio_menu_item_new (menu_group);
2351 menu_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem));
2352
2353 g_object_set_data_full (G_OBJECT (menuitem), LAYOUT_DATA_LABEL,
2354 g_strdelimit (g_strdup (lightdm_layout_get_name (layout)), "\t ", '_'), g_free);
2355 g_object_set_data_full (G_OBJECT (menuitem), LAYOUT_DATA_NAME,
2356 g_strdup (lightdm_layout_get_name (layout)), g_free);
2357
2358 g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (layout_selected_cb), NULL);
2359 gtk_menu_item_set_label (GTK_MENU_ITEM (menuitem), lightdm_layout_get_description (layout));
2360 gtk_menu_shell_append (GTK_MENU_SHELL (layout_menu), menuitem);
2361 gtk_widget_show (GTK_WIDGET (menuitem));
2362 }
2363 #endif
2364}
2365
2366static void
2367update_layouts_menu_state (void)
2368{
2369 #ifdef HAVE_LIBXKLAVIER
2370 XklState *state = xkl_engine_get_current_state (xkl_engine);
2371 GList *menu_items = gtk_container_get_children (GTK_CONTAINER (layout_menu));
2372 GtkCheckMenuItem *menu_item = g_list_nth_data (menu_items, state->group);
2373
2374 if (menu_item)
2375 {
2376 gtk_menu_item_set_label (GTK_MENU_ITEM (layout_menuitem),
2377 g_object_get_data (G_OBJECT (menu_item), LAYOUT_DATA_LABEL));
2378 gtk_check_menu_item_set_active(menu_item, TRUE);
2379 }
2380 else
2381 gtk_menu_item_set_label (GTK_MENU_ITEM (layout_menuitem), "??");
2382 g_list_free (menu_items);
2383 #else
2384 LightDMLayout *layout = lightdm_get_layout ();
2385 g_return_if_fail (layout != NULL);
2386
2387 const gchar *name = lightdm_layout_get_name (layout);
2388 GList *menu_items = gtk_container_get_children (GTK_CONTAINER (layout_menu));
2389 GList *menu_iter;
2390 for (menu_iter = menu_items; menu_iter; menu_iter = g_list_next (menu_iter))
2391 {
2392 if (g_strcmp0 (name, g_object_get_data (G_OBJECT (menu_iter->data), LAYOUT_DATA_NAME)) == 0)
2393 {
2394 gtk_check_menu_item_set_active (menu_iter->data, TRUE);
2395 gtk_menu_item_set_label (GTK_MENU_ITEM (layout_menuitem),
2396 g_object_get_data (G_OBJECT (menu_iter->data), LAYOUT_DATA_LABEL));
2397 break;
2398 }
2399 }
2400 g_list_free (menu_items);
2401 #endif
2402}
2403
2404#ifdef HAVE_LIBXKLAVIER
2405static void
2406xkl_state_changed_cb (XklEngine *engine, XklEngineStateChange change, gint group,
2407 gboolean restore, gpointer user_data)
2408{
2409 if (change == GROUP_CHANGED)
2410 update_layouts_menu_state ();
2411}
2412
2413static void
2414xkl_config_changed_cb (XklEngine *engine, gpointer user_data)
2415{
2416 /* tip: xkl_config_rec_get_from_server() return old settings */
2417 update_layouts_menu ();
2418 update_layouts_menu_state ();
2419}
2420
2421static GdkFilterReturn
2422xkl_xevent_filter (GdkXEvent *xev, GdkEvent *event, gpointer data)
2423{
2424 XEvent *xevent = (XEvent *) xev;
2425 xkl_engine_filter_events (xkl_engine, xevent);
2426 return GDK_FILTER_CONTINUE;
2427}
2428#endif
2429
2234int2430int
2235main (int argc, char **argv)2431main (int argc, char **argv)
2236{2432{
@@ -2445,16 +2641,9 @@
2445 gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (builder, "hostname_label")), lightdm_get_hostname ());2641 gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (builder, "hostname_label")), lightdm_get_hostname ());
2446 session_menu = GTK_MENU(gtk_builder_get_object (builder, "session_menu"));2642 session_menu = GTK_MENU(gtk_builder_get_object (builder, "session_menu"));
2447 language_menu = GTK_MENU(gtk_builder_get_object (builder, "language_menu"));2643 language_menu = GTK_MENU(gtk_builder_get_object (builder, "language_menu"));
2644 layout_menu = GTK_MENU(gtk_builder_get_object (builder, "layout_menu"));
2448 clock_label = GTK_WIDGET(gtk_builder_get_object (builder, "clock_label"));2645 clock_label = GTK_WIDGET(gtk_builder_get_object (builder, "clock_label"));
2449 menubar = GTK_WIDGET (gtk_builder_get_object (builder, "menubar"));2646 menubar = GTK_WIDGET (gtk_builder_get_object (builder, "menubar"));
2450 /* Never allow the panel-window to be moved via the menubar */
2451#if GTK_CHECK_VERSION (3, 0, 0)
2452 css_provider = gtk_css_provider_new ();
2453 gtk_css_provider_load_from_data (css_provider, "* { -GtkWidget-window-dragging: false; }", -1, NULL);
2454 gtk_style_context_add_provider (GTK_STYLE_CONTEXT(gtk_widget_get_style_context(GTK_WIDGET(menubar))), GTK_STYLE_PROVIDER (css_provider), 800);
2455#endif
2456
2457 keyboard_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "keyboard_menuitem"));
24582647
2459 /* Login window */2648 /* Login window */
2460 login_window = GTK_WINDOW (gtk_builder_get_object (builder, "login_window"));2649 login_window = GTK_WINDOW (gtk_builder_get_object (builder, "login_window"));
@@ -2510,6 +2699,8 @@
2510 language_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "language_menuitem"));2699 language_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "language_menuitem"));
2511 a11y_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "a11y_menuitem"));2700 a11y_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "a11y_menuitem"));
2512 power_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "power_menuitem"));2701 power_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "power_menuitem"));
2702 layout_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "layout_menuitem"));
2703 keyboard_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "keyboard_menuitem"));
25132704
2514 gtk_accel_map_add_entry ("<Login>/a11y/font", GDK_KEY_F1, 0);2705 gtk_accel_map_add_entry ("<Login>/a11y/font", GDK_KEY_F1, 0);
2515 gtk_accel_map_add_entry ("<Login>/a11y/contrast", GDK_KEY_F2, 0);2706 gtk_accel_map_add_entry ("<Login>/a11y/contrast", GDK_KEY_F2, 0);
@@ -2596,7 +2787,7 @@
2596 label = g_strdup_printf ("%s - %s", lightdm_language_get_name (language), country);2787 label = g_strdup_printf ("%s - %s", lightdm_language_get_name (language), country);
2597 else2788 else
2598 label = g_strdup (lightdm_language_get_name (language));2789 label = g_strdup (lightdm_language_get_name (language));
2599 2790
2600 code = lightdm_language_get_code (language);2791 code = lightdm_language_get_code (language);
2601 gchar *modifier = strchr (code, '@');2792 gchar *modifier = strchr (code, '@');
2602 if (modifier != NULL)2793 if (modifier != NULL)
@@ -2653,6 +2844,53 @@
2653 g_signal_connect (G_OBJECT (power_menuitem),"activate", G_CALLBACK(power_menu_cb), NULL);2844 g_signal_connect (G_OBJECT (power_menuitem),"activate", G_CALLBACK(power_menu_cb), NULL);
2654 }2845 }
26552846
2847 /* Layout menu */
2848 if (gtk_widget_get_visible (layout_menuitem))
2849 {
2850 #ifdef HAVE_LIBXKLAVIER
2851 xkl_engine = xkl_engine_get_instance (XOpenDisplay (NULL));
2852 if (xkl_engine)
2853 {
2854 xkl_engine_start_listen (xkl_engine, XKLL_TRACK_KEYBOARD_STATE);
2855 g_signal_connect (xkl_engine, "X-state-changed",
2856 G_CALLBACK (xkl_state_changed_cb), NULL);
2857 g_signal_connect (xkl_engine, "X-config-changed",
2858 G_CALLBACK (xkl_config_changed_cb), NULL);
2859 gdk_window_add_filter (NULL, (GdkFilterFunc) xkl_xevent_filter, NULL);
2860
2861 /* refresh */
2862 XklConfigRec *config_rec = xkl_config_rec_new ();
2863 if (xkl_config_rec_get_from_server (config_rec, xkl_engine))
2864 xkl_config_rec_activate (config_rec, xkl_engine);
2865 g_object_unref (config_rec);
2866 }
2867 else
2868 {
2869 g_warning ("Failed to get XklEngine instance");
2870 gtk_widget_hide (layout_menuitem);
2871 }
2872 #endif
2873 update_layouts_menu ();
2874 update_layouts_menu_state ();
2875 }
2876
2877 #if GTK_CHECK_VERSION (3, 0, 0)
2878 /* A bit of CSS */
2879 css_provider = gtk_css_provider_new ();
2880 gtk_css_provider_load_from_data (css_provider, lightdm_gtk_greeter_css_application, lightdm_gtk_greeter_css_application_length, NULL);
2881 gtk_style_context_add_provider_for_screen(gdk_screen_get_default (), GTK_STYLE_PROVIDER (css_provider),
2882 GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
2883 css_provider = gtk_css_provider_new ();
2884 guint fallback_css_priority = GTK_STYLE_PROVIDER_PRIORITY_APPLICATION;
2885 if (gtk_style_context_lookup_color (gtk_widget_get_style_context (GTK_WIDGET (login_window)),
2886 "lightdm-gtk-greeter-override-defaults",
2887 &background_color))
2888 fallback_css_priority = GTK_STYLE_PROVIDER_PRIORITY_FALLBACK;
2889 gtk_css_provider_load_from_data (css_provider, lightdm_gtk_greeter_css_fallback, lightdm_gtk_greeter_css_fallback_length, NULL);
2890 gtk_style_context_add_provider_for_screen(gdk_screen_get_default (), GTK_STYLE_PROVIDER (css_provider),
2891 fallback_css_priority);
2892 #endif
2893
2656 /* Users combobox */2894 /* Users combobox */
2657 renderer = gtk_cell_renderer_text_new();2895 renderer = gtk_cell_renderer_text_new();
2658 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (user_combo), renderer, TRUE);2896 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (user_combo), renderer, TRUE);
26592897
=== modified file 'src/lightdm-gtk-greeter.glade'
--- src/lightdm-gtk-greeter.glade 2014-02-23 12:13:12 +0000
+++ src/lightdm-gtk-greeter.glade 2014-05-28 09:19:24 +0000
@@ -165,6 +165,20 @@
165 </child>165 </child>
166 </object>166 </object>
167 </child>167 </child>
168 <child>
169 <object class="GtkMenuItem" id="layout_menuitem">
170 <property name="name">layout_menuitem</property>
171 <property name="visible">True</property>
172 <property name="can_focus">True</property>
173 <property name="label">[layout]</property>
174 <child type="submenu">
175 <object class="GtkMenu" id="layout_menu">
176 <property name="visible">True</property>
177 <property name="can_focus">False</property>
178 </object>
179 </child>
180 </object>
181 </child>
168 </object>182 </object>
169 <packing>183 <packing>
170 <property name="expand">False</property>184 <property name="expand">False</property>

Subscribers

People subscribed via source and target branches