Browse Source

😒

sisyphus
Dustin Falgout 9 years ago
parent
commit
37f38d24a9
  1. 71
      src/lightdm-webkit2-greeter.c

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

Loading…
Cancel
Save