Codebase list xapp / 5edc82d
Implement window blanking Almost ready, missing black paint :) Clement Lefebvre 7 years ago
2 changed file(s) with 17 addition(s) and 8 deletion(s). Raw diff Collapse all Expand all
4545 Depends: gir1.2-xapp-1.0 (= ${binary:Version}),
4646 libxapp1 (= ${binary:Version}),
4747 libgtk-3-dev (>= 3.3.16),
48 libxkbfile-dev,
4948 ${misc:Depends}
5049 Description: XApp library - development files
5150 This package provides the include files and static library for the XApp
1919
2020 G_DEFINE_TYPE (XAppDisplay, xapp_display, G_TYPE_OBJECT);
2121
22 GtkWidget * create_blanking_window (void);
22 GtkWidget * create_blanking_window (GdkScreen *screen, int monitor);
2323
2424 static void
2525 xapp_display_init (XAppDisplay *self)
5757 }
5858
5959 GtkWidget *
60 create_blanking_window (void)
60 create_blanking_window (GdkScreen *screen, int monitor)
6161 {
62 GdkRectangle fullscreen;
63 gdk_screen_get_monitor_geometry(screen, monitor, &fullscreen);
6264 GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
65 gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE);
66 gtk_window_set_skip_pager_hint (GTK_WINDOW (window), TRUE);
67 gtk_window_resize (GTK_WINDOW (window), fullscreen.width, fullscreen.height);
68 gtk_window_move (GTK_WINDOW (window), fullscreen.x, fullscreen.y);
6369 gtk_widget_set_visible (window, TRUE);
6470 return window;
6571 }
7480 if (self->priv->windows != NULL)
7581 return;
7682
77 GdkScreen *active_screen = gtk_window_get_screen (window);
78 int active_monitor = gdk_screen_get_number (active_screen);
79
80 GdkScreen *screen = gdk_screen_get_default ();
83 GdkScreen *screen = gtk_window_get_screen (window);
84 int active_monitor = gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window(window));
8185 self->priv->num_outputs = gdk_screen_get_n_monitors (screen);
8286 self->priv->windows = g_new (GtkWidget *, self->priv->num_outputs);
8387
8488 for (i = 0; i < self->priv->num_outputs; i++) {
85 self->priv->windows[i] = create_blanking_window ();
89 if (i != active_monitor) {
90 self->priv->windows[i] = create_blanking_window (screen, i);
91 }
92 else {
93 // initialize at NULL so it gets properly skipped when windows get destroyed
94 self->priv->windows[i] = NULL;
95 }
8696 }
8797 }
8898