21 | 21 |
* monitors in multiple monitor setups.
|
22 | 22 |
*/
|
23 | 23 |
|
24 | |
struct _XAppMonitorBlankerPrivate
|
|
24 |
struct _XAppMonitorBlanker
|
25 | 25 |
{
|
|
26 |
GObject parent_instance;
|
|
27 |
|
26 | 28 |
int num_outputs;
|
27 | 29 |
gboolean blanked;
|
28 | 30 |
GtkWidget **windows;
|
29 | 31 |
};
|
30 | 32 |
|
31 | |
G_DEFINE_TYPE_WITH_PRIVATE (XAppMonitorBlanker, xapp_monitor_blanker, G_TYPE_OBJECT);
|
32 | |
|
33 | |
GtkWidget *create_blanking_window (GdkScreen *screen,
|
34 | |
int monitor);
|
|
33 |
G_DEFINE_TYPE (XAppMonitorBlanker, xapp_monitor_blanker, G_TYPE_OBJECT);
|
35 | 34 |
|
36 | 35 |
static void
|
37 | 36 |
xapp_monitor_blanker_init (XAppMonitorBlanker *self)
|
38 | 37 |
{
|
39 | |
self->priv = xapp_monitor_blanker_get_instance_private (self);
|
40 | |
self->priv->num_outputs = 0;
|
41 | |
self->priv->blanked = FALSE;
|
42 | |
self->priv->windows = NULL;
|
|
38 |
self->num_outputs = 0;
|
|
39 |
self->blanked = FALSE;
|
|
40 |
self->windows = NULL;
|
43 | 41 |
}
|
44 | 42 |
|
45 | 43 |
static void
|
|
47 | 45 |
{
|
48 | 46 |
XAppMonitorBlanker *self = XAPP_MONITOR_BLANKER (object);
|
49 | 47 |
|
50 | |
if (self->priv->windows != NULL)
|
|
48 |
if (self->windows != NULL)
|
51 | 49 |
{
|
52 | |
xapp_monitor_blanker_unblank_monitors (XAPP_MONITOR_BLANKER(self));
|
53 | |
g_free (self->priv->windows);
|
|
50 |
xapp_monitor_blanker_unblank_monitors (XAPP_MONITOR_BLANKER (self));
|
|
51 |
g_free (self->windows);
|
54 | 52 |
}
|
55 | 53 |
|
56 | 54 |
G_OBJECT_CLASS (xapp_monitor_blanker_parent_class)->finalize (object);
|
|
88 | 86 |
GtkStyleContext *context;
|
89 | 87 |
GtkCssProvider *provider;
|
90 | 88 |
|
91 | |
gdk_screen_get_monitor_geometry(screen, monitor, &fullscreen);
|
|
89 |
gdk_screen_get_monitor_geometry (screen, monitor, &fullscreen);
|
92 | 90 |
|
93 | 91 |
window = gtk_window_new (GTK_WINDOW_POPUP);
|
94 | 92 |
gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE);
|
|
118 | 116 |
|
119 | 117 |
void
|
120 | 118 |
xapp_monitor_blanker_blank_other_monitors (XAppMonitorBlanker *self,
|
121 | |
GtkWindow *window)
|
|
119 |
GtkWindow *window)
|
122 | 120 |
{
|
123 | 121 |
GdkScreen *screen;
|
124 | 122 |
int active_monitor;
|
|
126 | 124 |
|
127 | 125 |
g_return_if_fail (XAPP_IS_MONITOR_BLANKER (self));
|
128 | 126 |
|
129 | |
if (self->priv->windows != NULL)
|
|
127 |
if (self->windows != NULL)
|
130 | 128 |
return;
|
131 | 129 |
|
132 | 130 |
screen = gtk_window_get_screen (window);
|
133 | 131 |
active_monitor = gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window (GTK_WIDGET (window)));
|
134 | |
self->priv->num_outputs = gdk_screen_get_n_monitors (screen);
|
135 | |
self->priv->windows = g_new (GtkWidget *, self->priv->num_outputs);
|
|
132 |
self->num_outputs = gdk_screen_get_n_monitors (screen);
|
|
133 |
self->windows = g_new (GtkWidget *, self->num_outputs);
|
136 | 134 |
|
137 | |
for (i = 0; i < self->priv->num_outputs; i++)
|
|
135 |
for (i = 0; i < self->num_outputs; i++)
|
138 | 136 |
{
|
139 | 137 |
if (i != active_monitor)
|
140 | 138 |
{
|
141 | |
self->priv->windows[i] = create_blanking_window (screen, i);
|
|
139 |
self->windows[i] = create_blanking_window (screen, i);
|
142 | 140 |
}
|
143 | 141 |
else
|
144 | 142 |
{
|
145 | 143 |
// initialize at NULL so it gets properly skipped when windows get destroyed
|
146 | |
self->priv->windows[i] = NULL;
|
|
144 |
self->windows[i] = NULL;
|
147 | 145 |
}
|
148 | 146 |
}
|
149 | 147 |
|
150 | |
self->priv->blanked = TRUE;
|
|
148 |
self->blanked = TRUE;
|
151 | 149 |
}
|
152 | 150 |
|
153 | 151 |
/**
|
|
164 | 162 |
int i;
|
165 | 163 |
g_return_if_fail (XAPP_IS_MONITOR_BLANKER (self));
|
166 | 164 |
|
167 | |
if (self->priv->windows == NULL)
|
|
165 |
if (self->windows == NULL)
|
168 | 166 |
return;
|
169 | 167 |
|
170 | |
for (i = 0; i < self->priv->num_outputs; i++)
|
|
168 |
for (i = 0; i < self->num_outputs; i++)
|
171 | 169 |
{
|
172 | |
if (self->priv->windows[i] != NULL)
|
|
170 |
if (self->windows[i] != NULL)
|
173 | 171 |
{
|
174 | |
gtk_widget_destroy (self->priv->windows[i]);
|
175 | |
self->priv->windows[i] = NULL;
|
|
172 |
gtk_widget_destroy (self->windows[i]);
|
|
173 |
self->windows[i] = NULL;
|
176 | 174 |
}
|
177 | 175 |
}
|
178 | |
g_free (self->priv->windows);
|
179 | |
self->priv->windows = NULL;
|
180 | |
self->priv->blanked = FALSE;
|
|
176 |
g_free (self->windows);
|
|
177 |
self->windows = NULL;
|
|
178 |
self->blanked = FALSE;
|
181 | 179 |
}
|
182 | 180 |
|
183 | 181 |
/**
|
|
193 | 191 |
gboolean
|
194 | 192 |
xapp_monitor_blanker_are_monitors_blanked (XAppMonitorBlanker *self)
|
195 | 193 |
{
|
196 | |
return self->priv->blanked;
|
|
194 |
return self->blanked;
|
197 | 195 |
}
|