summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Davis <smd.seandavis@gmail.com>2014-01-15 07:04:30 -0500
committerSean Davis <smd.seandavis@gmail.com>2014-01-15 07:04:30 -0500
commit9a0649c73a92f3a9fe3d710ca0d18bc9ed614c3e (patch)
tree615c831c2d8fc1cc75a43413de608e159ef13c61
parent0fca42c37bb38601a51d298b28f4c01d8e893e04 (diff)
parent85a3fb797eba5fe756f88ae9f502c6e0a3ace9fd (diff)
downloadlightdm-gtk-greeter-trunk.tar.gz
Merge latest, fix gdk_display_get_n_screenstrunk
-rw-r--r--src/lightdm-gtk-greeter.c94
1 files changed, 71 insertions, 23 deletions
diff --git a/src/lightdm-gtk-greeter.c b/src/lightdm-gtk-greeter.c
index b912e5f..1b3cfe6 100644
--- a/src/lightdm-gtk-greeter.c
+++ b/src/lightdm-gtk-greeter.c
@@ -52,7 +52,7 @@ static GdkPixbuf *background_pixbuf = NULL;
/* Panel Widgets */
static GtkWindow *panel_window;
static GtkWidget *clock_label;
-static GtkWidget *menubar;
+static GtkWidget *menubar, *session_menuitem, *language_menuitem;
static GtkMenu *session_menu, *language_menu;
static GtkCheckMenuItem *keyboard_menuitem;
@@ -71,6 +71,8 @@ static GPid a11y_kbd_pid = 0;
static GError *a11y_keyboard_error;
static GtkWindow *onboard_window;
+GSList *backgrounds = NULL;
+
/* Current choices */
static gchar *current_session;
static gchar *current_language;
@@ -444,8 +446,8 @@ set_login_button_label (LightDMGreeter *greeter, const gchar *username)
else
gtk_button_set_label (login_button, _("Log In"));
/* and disable the session and language comboboxes */
- gtk_widget_set_sensitive (GTK_WIDGET (session_menu), !logged_in);
- gtk_widget_set_sensitive (GTK_WIDGET (language_menu), !logged_in);
+ gtk_widget_set_sensitive (GTK_WIDGET (session_menuitem), !logged_in);
+ gtk_widget_set_sensitive (GTK_WIDGET (language_menuitem), !logged_in);
}
static void set_background (GdkPixbuf *new_bg);
@@ -545,10 +547,10 @@ center_window (GtkWindow *window, GtkAllocation *unused, const WindowPosition *p
static gboolean
panel_expose (GtkWidget *widget, cairo_t *cr, gpointer user_data)
{
- if (default_background_color)
- gdk_cairo_set_source_rgba (cr, default_background_color);
- else
+ if (background_pixbuf)
gdk_cairo_set_source_pixbuf (cr, background_pixbuf, 0, 0);
+ else
+ gdk_cairo_set_source_rgba (cr, default_background_color);
cairo_paint (cr);
return FALSE;
}
@@ -561,16 +563,17 @@ login_window_expose (GtkWidget *widget, cairo_t *cr, gpointer user_data)
GdkRectangle monitor_geometry;
gint x,y;
- gdk_screen_get_monitor_geometry (screen, gdk_screen_get_primary_monitor (screen), &monitor_geometry);
- gtk_widget_get_allocation (widget, allocation);
-
- x = get_absolute_position (&main_window_pos.x, monitor_geometry.width, allocation->width);
- y = get_absolute_position (&main_window_pos.y, monitor_geometry.height, allocation->height);
-
- if (default_background_color)
- gdk_cairo_set_source_rgba (cr, default_background_color);
- else
+ if (background_pixbuf)
+ {
+ gdk_screen_get_monitor_geometry (screen, gdk_screen_get_primary_monitor (screen), &monitor_geometry);
+ gtk_widget_get_allocation (widget, allocation);
+ x = get_absolute_position (&main_window_pos.x, monitor_geometry.width, allocation->width);
+ y = get_absolute_position (&main_window_pos.y, monitor_geometry.height, allocation->height);
gdk_cairo_set_source_pixbuf (cr, background_pixbuf, monitor_geometry.x - x, monitor_geometry.y - y);
+ }
+ else
+ gdk_cairo_set_source_rgba (cr, default_background_color);
+
cairo_paint (cr);
g_free (allocation);
@@ -1672,6 +1675,7 @@ set_background (GdkPixbuf *new_bg)
{
GdkRectangle monitor_geometry;
GdkPixbuf *bg = NULL;
+ GSList *iter;
gint i, p_height, p_width, height, width;
gdouble scale;
int numScreens = 1;
@@ -1744,6 +1748,8 @@ set_background (GdkPixbuf *new_bg)
gdk_cairo_set_source_color (c, default_background_color);
#endif
cairo_paint (c);
+ iter = g_slist_nth(backgrounds, monitor);
+ gtk_widget_queue_draw(GTK_WIDGET(iter->data));
}
cairo_destroy (c);
@@ -1879,7 +1885,13 @@ main (int argc, char **argv)
gsize length = 0;
guint indicators_loaded = 0, i;
#endif
-
+
+ /* Background windows */
+ gint monitor, scr;
+ GdkScreen *screen;
+ GtkWidget *window;
+ int numScreens = 1;
+
Display* display;
/* Disable global menus */
@@ -1971,7 +1983,7 @@ main (int argc, char **argv)
if (lightdm_greeter_get_lock_hint (greeter)) {
XGetScreenSaver(display, &timeout, &interval, &prefer_blanking, &allow_exposures);
XForceScreenSaver(display, ScreenSaverActive);
- XSetScreenSaver(display, 30, 0, ScreenSaverActive, DefaultExposures);
+ XSetScreenSaver(display, 10, 0, ScreenSaverActive, DefaultExposures);
}
/* Set GTK+ settings */
value = g_key_file_get_value (config, "greeter", "theme-name", NULL);
@@ -2161,7 +2173,7 @@ main (int argc, char **argv)
clock_format = "%a, %H:%M";
/* Session menu */
- menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "session_menuitem"));
+ session_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "session_menuitem"));
#if GTK_CHECK_VERSION (3, 0, 0)
if (gtk_icon_theme_has_icon(icon_theme, "document-properties-symbolic"))
image = gtk_image_new_from_icon_name ("document-properties-symbolic", GTK_ICON_SIZE_MENU);
@@ -2171,8 +2183,8 @@ main (int argc, char **argv)
image = gtk_image_new_from_icon_name ("document-properties", GTK_ICON_SIZE_MENU);
#endif
gtk_widget_show (image);
- gtk_container_add (GTK_CONTAINER (menuitem), image);
- gtk_widget_show (GTK_WIDGET (menuitem));
+ gtk_container_add (GTK_CONTAINER (session_menuitem), image);
+ gtk_widget_show (GTK_WIDGET (session_menuitem));
items = lightdm_get_sessions ();
GSList *sessions = NULL;
@@ -2193,7 +2205,7 @@ main (int argc, char **argv)
/* Language menu */
if (g_key_file_get_boolean (config, "greeter", "show-language-selector", NULL))
{
- menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "language_menuitem"));
+ language_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "language_menuitem"));
#if GTK_CHECK_VERSION (3, 0, 0)
if (gtk_icon_theme_has_icon(icon_theme, "preferences-desktop-locale-symbolic"))
image = gtk_image_new_from_icon_name ("preferences-desktop-locale-symbolic", GTK_ICON_SIZE_MENU);
@@ -2203,7 +2215,7 @@ main (int argc, char **argv)
image = gtk_image_new_from_icon_name ("preferences-desktop-locale", GTK_ICON_SIZE_MENU);
#endif
gtk_widget_show (image);
- gtk_container_add (GTK_CONTAINER (menuitem), image);
+ gtk_container_add (GTK_CONTAINER (language_menuitem), image);
items = lightdm_get_languages ();
GSList *languages = NULL;
@@ -2229,7 +2241,7 @@ main (int argc, char **argv)
label = label_new;
}
- gtk_widget_show (GTK_WIDGET (menuitem));
+ gtk_widget_show (GTK_WIDGET (language_menuitem));
radiomenuitem = gtk_radio_menu_item_new_with_label (languages, label);
g_object_set_data (G_OBJECT (radiomenuitem), "language-code", (gpointer) code);
languages = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (radiomenuitem));
@@ -2285,6 +2297,42 @@ main (int argc, char **argv)
gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (user_combo), renderer, "text", 1);
gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (user_combo), renderer, "weight", 2);
+ #if GDK_VERSION_CUR_STABLE < G_ENCODE_VERSION(3, 10)
+ numScreens = gdk_display_get_n_screens (gdk_display_get_default());
+ #endif
+
+ /* Set up the background images */
+ for (scr = 0; scr < numScreens; scr++)
+ {
+ screen = gdk_display_get_screen (gdk_display_get_default (), scr);
+ for (monitor = 0; monitor < gdk_screen_get_n_monitors (screen); monitor++)
+ {
+ gdk_screen_get_monitor_geometry (screen, monitor, &monitor_geometry);
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DESKTOP);
+#if GTK_CHECK_VERSION (3, 0, 0)
+ gtk_widget_override_background_color(GTK_WIDGET(window), GTK_STATE_FLAG_NORMAL, &background_color);
+#else
+ gtk_widget_modify_bg(GTK_WIDGET(window), GTK_STATE_NORMAL, &background_color);
+#endif
+ gtk_window_set_screen(GTK_WINDOW(window), screen);
+ gtk_window_set_keep_below(GTK_WINDOW(window), TRUE);
+ gtk_widget_set_size_request(window, monitor_geometry.width, monitor_geometry.height);
+ gtk_window_set_resizable (GTK_WINDOW(window), FALSE);
+ gtk_widget_set_app_paintable (GTK_WIDGET(window), TRUE);
+ gtk_window_move (GTK_WINDOW(window), monitor_geometry.x, monitor_geometry.y);
+
+ backgrounds = g_slist_prepend(backgrounds, window);
+ gtk_widget_show (window);
+#if GTK_CHECK_VERSION (3, 0, 0)
+ g_signal_connect (G_OBJECT (window), "draw", G_CALLBACK (panel_expose), NULL);
+#endif
+ gtk_widget_queue_draw (GTK_WIDGET(window));
+ }
+ }
+ backgrounds = g_slist_reverse(backgrounds);
+
if (lightdm_greeter_get_hide_users_hint (greeter))
{
/* Set the background to default */