|
|
|
@ -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); |
|
|
|
|
|
|
|
|
|