--- greeter.c 2015-11-23 23:02:45.959879181 +0000 +++ greeter.c.1404 2015-11-23 23:02:56.047935968 +0000 @@ -110,6 +110,21 @@ } return filename; } + +void +get_default_display_size(gint * width, gint * height) +{ + GdkDisplay *display = NULL; + GdkScreen *screen = NULL; + GdkRectangle my_rect; + + display = gdk_display_get_default(); + screen = gdk_display_get_default_screen(display); + gdk_screen_get_monitor_geometry(screen, 0, &my_rect); + *width = my_rect.width; + *height = my_rect.height; +} + GdkPixmap* root_bg = 0; void load_root_background(const gchar* filename, gboolean scale, gboolean reload) { if (root_bg != 0){ @@ -129,10 +144,9 @@ GdkWindow* root = gdk_get_default_root_window(); gint width, height; - gdk_drawable_get_size(GDK_DRAWABLE (root), &width, &height); + get_default_display_size(&width, &height); // create pixmap - gdk_drawable_get_size(GDK_DRAWABLE (root), &width, &height); root_bg = gdk_pixmap_new(GDK_DRAWABLE (root), width, height, -1); g_object_ref(G_OBJECT (root_bg)); @@ -151,21 +165,6 @@ } void -set_root_background() { - GdkWindow* root = gdk_get_default_root_window(); - - - // bg needs to be set and painted, so it refreshes now and in the future - gdk_window_set_back_pixmap(GDK_WINDOW (root), GDK_PIXMAP (root_bg), 0); - gdk_draw_drawable(GDK_DRAWABLE (root), - gdk_gc_new(GDK_DRAWABLE (root)), - GDK_DRAWABLE (root_bg), - 0, 0, - 0, 0, - -1, -1); -} - -void draw_background(GtkWidget* widget, gpointer data) { GdkWindow* window; gint width, height, x, y; @@ -628,7 +627,7 @@ int main(int argc, char *argv[]) { - gint lw; + gint lw, lh; GtkWidget *loginWindow, *prefBar; GdkCursor *normcursor, *busycursor; @@ -686,9 +685,8 @@ /* Set the background */ load_root_background(ldm_theme_file("bg"), TRUE, FALSE); - set_root_background(); - gdk_drawable_get_size(root, &width, &height); + get_default_display_size(&width, &height); /* Setup the time and system labels */ { @@ -727,9 +725,8 @@ } /**** Create the login window ****/ - gtk_window_set_position(GTK_WINDOW(loginWindow), GTK_WIN_POS_CENTER_ALWAYS); { - GtkWidget *guestbox, *guestspacer1, *guestspacer2, *vbox, *vbox2, *hbox; + GtkWidget *guestbox, *guestspacer1, *guestspacer2, *vbox, *vbox2, *vbox2spacer, *hbox; GtkCellRenderer *renderer; g_signal_connect(G_OBJECT(loginWindow), "destroy", G_CALLBACK(destroy), @@ -738,8 +735,8 @@ gtk_widget_set_app_paintable(loginWindow, TRUE); g_signal_connect(loginWindow, "configure-event", G_CALLBACK(draw_background), NULL); - //gtk_widget_set_size_request(loginWindow, width/2, height/2); - //gtk_widget_realize(loginWindow); + gtk_widget_set_size_request(loginWindow, width, height); + gtk_widget_realize(loginWindow); gtk_window_set_decorated(GTK_WINDOW (loginWindow), FALSE); logo = gtk_image_new_from_file(ldm_theme_file("logo")); @@ -754,10 +751,12 @@ pix = gtk_image_get_pixbuf((GtkImage *) logo); lw = gdk_pixbuf_get_width(pix); + lh = gdk_pixbuf_get_height(pix); vbox = gtk_vbox_new(FALSE, 5); - vbox2 = gtk_vbox_new(FALSE, 0); + vbox2 = gtk_vbox_new(FALSE, ((height / 2) - lh)); + vbox2spacer = gtk_vbox_new(FALSE, 5); EntryBox = gtk_hbox_new(FALSE, 5); hbox = gtk_hbox_new(FALSE, 0); @@ -771,7 +770,7 @@ StatusMessages = gtk_label_new(""); entry = gtk_entry_new(); - gtk_entry_set_width_chars(GTK_ENTRY(entry), 12); + gtk_entry_set_width_chars(GTK_ENTRY(entry), 20); g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(handle_entry), root); // Remap tab on entry to behave as enter @@ -832,6 +831,7 @@ gtk_box_pack_start(GTK_BOX(vbox), timeoutbox, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), StatusMessages, TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox2), vbox2spacer, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(loginWindow), vbox2); @@ -898,12 +898,19 @@ gtk_widget_show_all(loginWindow); gtk_widget_show_all(prefBar); + gtk_window_move(GTK_WINDOW (loginWindow), 0, 0); gtk_window_move(GTK_WINDOW (prefBar), 0, height - BOTTOM_BAR_HEIGHT); #ifdef K12LINUX gtk_widget_show_all(topBar); gtk_window_move(GTK_WINDOW (topBar), 0, 0); #endif + // Center the mouse pointer on the default display + GdkDisplay *display = gdk_display_get_default(); + GdkScreen *screen = gdk_display_get_default_screen(display); + GdkRectangle bbox; + gdk_screen_get_monitor_geometry(screen, 0, &bbox); + gdk_display_warp_pointer(display, screen, bbox.width/2, bbox.height/2); gdk_window_set_cursor(root, normcursor); #ifdef K12LINUX