From 37f38d24a9d2646a187267e646f3f99533ee3c9f Mon Sep 17 00:00:00 2001 From: Dustin Falgout Date: Tue, 13 Oct 2015 17:33:44 -0500 Subject: [PATCH] :unamused: --- src/lightdm-webkit2-greeter.c | 71 ++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/src/lightdm-webkit2-greeter.c b/src/lightdm-webkit2-greeter.c index 2188f94..42110d3 100644 --- a/src/lightdm-webkit2-greeter.c +++ b/src/lightdm-webkit2-greeter.c @@ -28,6 +28,7 @@ static GtkWidget *web_view; static GtkWidget *window; +static WebKitSettings *webkit_settings; /* static void @@ -42,20 +43,17 @@ timed_login_cb (LightDMGreeter *greeter, const gchar *username, WebKitWebView *v static void -sigterm_cb (int signum) -{ - exit (0); +sigterm_cb(int signum) { + exit(0); } static GdkFilterReturn -wm_window_filter (GdkXEvent *gxevent, GdkEvent *event, gpointer data) -{ - XEvent *xevent = (XEvent*)gxevent; - if (xevent->type == MapNotify) - { - GdkDisplay *display = gdk_x11_lookup_xdisplay (xevent->xmap.display); - GdkWindow *win = gdk_x11_window_foreign_new_for_display (display, xevent->xmap.window); - GdkWindowTypeHint win_type = gdk_window_get_type_hint (win); +wm_window_filter(GdkXEvent *gxevent, GdkEvent *event, gpointer data) { + XEvent *xevent = (XEvent *) gxevent; + if (xevent->type == MapNotify) { + GdkDisplay *display = gdk_x11_lookup_xdisplay(xevent->xmap.display); + GdkWindow *win = gdk_x11_window_foreign_new_for_display(display, xevent->xmap.window); + GdkWindowTypeHint win_type = gdk_window_get_type_hint(win); if (win_type != GDK_WINDOW_TYPE_HINT_COMBO && win_type != GDK_WINDOW_TYPE_HINT_TOOLTIP && @@ -64,16 +62,15 @@ wm_window_filter (GdkXEvent *gxevent, GdkEvent *event, gpointer data) if (win_type == GDK_WINDOW_TYPE_HINT_DESKTOP || win_type == GDK_WINDOW_TYPE_HINT_DIALOG) */ - gdk_window_focus (win, GDK_CURRENT_TIME); + gdk_window_focus(win, GDK_CURRENT_TIME); } - else if (xevent->type == UnmapNotify) - { + else if (xevent->type == UnmapNotify) { Window xwin; int revert_to = RevertToNone; - XGetInputFocus (xevent->xunmap.display, &xwin, &revert_to); + XGetInputFocus(xevent->xunmap.display, &xwin, &revert_to); if (revert_to == RevertToNone) - gdk_window_lower (gtk_widget_get_window (gtk_widget_get_toplevel (GTK_WIDGET (window)))); + gdk_window_lower(gtk_widget_get_window(gtk_widget_get_toplevel(GTK_WIDGET(window)))); } return GDK_FILTER_CONTINUE; @@ -89,12 +86,25 @@ main(int argc, char **argv) { WebKitWebContext *context = webkit_web_context_get_default(); webkit_web_context_set_web_extensions_directory(context, LIGHTDM_WEBKIT2_GREETER_EXTENSIONS_DIR); + webkit_settings = webkit_settings_new_with_settings("enable-developer-extras", TRUE, + "enable-fullscreen", TRUE, + "enable-site-specific-quirks", TRUE, + "enable-dns-prefetching", TRUE, + "javascript-can-open-windows-automatically", TRUE, + "allow-file-access-from-file-urls", TRUE, + "enable-accelerated-2d-canvas", TRUE, + "enable-smooth-scrolling", TRUE, + "enable-webgl", TRUE, + "enable-write-console-messages-to-stdout", TRUE, + + NULL); signal(SIGTERM, sigterm_cb); gtk_init(&argc, &argv); - gdk_window_set_cursor (gdk_get_default_root_window (), gdk_cursor_new_for_display (gdk_display_get_default (), GDK_LEFT_PTR)); + gdk_window_set_cursor(gdk_get_default_root_window(), + gdk_cursor_new_for_display(gdk_display_get_default(), GDK_LEFT_PTR)); /* settings */ @@ -109,14 +119,23 @@ main(int argc, char **argv) { gdk_screen_get_monitor_geometry(screen, gdk_screen_get_primary_monitor(screen), &geometry); - gtk_window_set_default_size (GTK_WINDOW (window), geometry.width, geometry.height); - gtk_window_move (GTK_WINDOW (window), geometry.x, geometry.y); + gtk_window_set_default_size(GTK_WINDOW(window), geometry.width, geometry.height); + gtk_window_move(GTK_WINDOW(window), geometry.x, geometry.y); + + web_view = webkit_web_view_new_with_settings(webkit_settings); + gdk_rgba_parse(&bg_color, "#000000"); - web_view = webkit_web_view_new(); - if (gdk_rgba_parse(&bg_color, "#000000")) { - webkit_web_view_set_background_color(WEBKIT_WEB_VIEW(web_view), gdk_rgba_copy(&bg_color)); - }; + + if (bg_color.alpha < 1) { + GdkVisual *rgba_visual = gdk_screen_get_rgba_visual(screen); + + if (rgba_visual) { + gtk_widget_set_visual(GTK_WIDGET(window), rgba_visual); + gtk_widget_set_app_paintable(GTK_WIDGET(window), TRUE); + } + } + webkit_web_view_set_background_color(WEBKIT_WEB_VIEW(web_view), gdk_rgba_copy(&bg_color)); gtk_container_add(GTK_CONTAINER(window), web_view); @@ -124,9 +143,9 @@ main(int argc, char **argv) { webkit_web_view_load_uri(WEBKIT_WEB_VIEW(web_view), g_strdup_printf("file://%s/%s/index.html", THEME_DIR, theme)); /* There is no window manager, so we need to implement some of its functionality */ - GdkWindow* root_window = gdk_get_default_root_window (); - gdk_window_set_events (root_window, gdk_window_get_events (root_window) | GDK_SUBSTRUCTURE_MASK); - gdk_window_add_filter (root_window, wm_window_filter, NULL); + GdkWindow *root_window = gdk_get_default_root_window(); + gdk_window_set_events(root_window, gdk_window_get_events(root_window) | GDK_SUBSTRUCTURE_MASK); + gdk_window_add_filter(root_window, wm_window_filter, NULL); gtk_widget_show_all(window);