Codebase list xapp / 9db85cb
xapp-monitor-blanker: Use G_DECLARE_FINAL_TYPE JosephMcc authored 4 years ago Michael Webster committed 4 years ago
2 changed file(s) with 35 addition(s) and 55 deletion(s). Raw diff Collapse all Expand all
2121 * monitors in multiple monitor setups.
2222 */
2323
24 struct _XAppMonitorBlankerPrivate
24 struct _XAppMonitorBlanker
2525 {
26 GObject parent_instance;
27
2628 int num_outputs;
2729 gboolean blanked;
2830 GtkWidget **windows;
2931 };
3032
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);
3534
3635 static void
3736 xapp_monitor_blanker_init (XAppMonitorBlanker *self)
3837 {
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;
4341 }
4442
4543 static void
4745 {
4846 XAppMonitorBlanker *self = XAPP_MONITOR_BLANKER (object);
4947
50 if (self->priv->windows != NULL)
48 if (self->windows != NULL)
5149 {
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);
5452 }
5553
5654 G_OBJECT_CLASS (xapp_monitor_blanker_parent_class)->finalize (object);
8886 GtkStyleContext *context;
8987 GtkCssProvider *provider;
9088
91 gdk_screen_get_monitor_geometry(screen, monitor, &fullscreen);
89 gdk_screen_get_monitor_geometry (screen, monitor, &fullscreen);
9290
9391 window = gtk_window_new (GTK_WINDOW_POPUP);
9492 gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE);
118116
119117 void
120118 xapp_monitor_blanker_blank_other_monitors (XAppMonitorBlanker *self,
121 GtkWindow *window)
119 GtkWindow *window)
122120 {
123121 GdkScreen *screen;
124122 int active_monitor;
126124
127125 g_return_if_fail (XAPP_IS_MONITOR_BLANKER (self));
128126
129 if (self->priv->windows != NULL)
127 if (self->windows != NULL)
130128 return;
131129
132130 screen = gtk_window_get_screen (window);
133131 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);
136134
137 for (i = 0; i < self->priv->num_outputs; i++)
135 for (i = 0; i < self->num_outputs; i++)
138136 {
139137 if (i != active_monitor)
140138 {
141 self->priv->windows[i] = create_blanking_window (screen, i);
139 self->windows[i] = create_blanking_window (screen, i);
142140 }
143141 else
144142 {
145143 // initialize at NULL so it gets properly skipped when windows get destroyed
146 self->priv->windows[i] = NULL;
144 self->windows[i] = NULL;
147145 }
148146 }
149147
150 self->priv->blanked = TRUE;
148 self->blanked = TRUE;
151149 }
152150
153151 /**
164162 int i;
165163 g_return_if_fail (XAPP_IS_MONITOR_BLANKER (self));
166164
167 if (self->priv->windows == NULL)
165 if (self->windows == NULL)
168166 return;
169167
170 for (i = 0; i < self->priv->num_outputs; i++)
168 for (i = 0; i < self->num_outputs; i++)
171169 {
172 if (self->priv->windows[i] != NULL)
170 if (self->windows[i] != NULL)
173171 {
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;
176174 }
177175 }
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;
181179 }
182180
183181 /**
193191 gboolean
194192 xapp_monitor_blanker_are_monitors_blanked (XAppMonitorBlanker *self)
195193 {
196 return self->priv->blanked;
194 return self->blanked;
197195 }
77
88 G_BEGIN_DECLS
99
10 #define XAPP_TYPE_MONITOR_BLANKER (xapp_monitor_blanker_get_type ())
11 #define XAPP_MONITOR_BLANKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XAPP_TYPE_MONITOR_BLANKER, XAppMonitorBlanker))
12 #define XAPP_MONITOR_BLANKER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), XAPP_TYPE_MONITOR_BLANKER, XAppMonitorBlankerClass))
13 #define XAPP_IS_MONITOR_BLANKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XAPP_TYPE_MONITOR_BLANKER))
14 #define XAPP_IS_MONITOR_BLANKER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XAPP_TYPE_MONITOR_BLANKER))
15 #define XAPP_MONITOR_BLANKER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), XAPP_TYPE_MONITOR_BLANKER, XAppMonitorBlankerClass))
10 #define XAPP_TYPE_MONITOR_BLANKER (xapp_monitor_blanker_get_type ())
1611
17 typedef struct _XAppMonitorBlankerPrivate XAppMonitorBlankerPrivate;
18 typedef struct _XAppMonitorBlanker XAppMonitorBlanker;
19 typedef struct _XAppMonitorBlankerClass XAppMonitorBlankerClass;
12 G_DECLARE_FINAL_TYPE (XAppMonitorBlanker, xapp_monitor_blanker, XAPP, MONITOR_BLANKER, GObject)
2013
21 struct _XAppMonitorBlanker
22 {
23 GObject parent_object;
14 XAppMonitorBlanker *xapp_monitor_blanker_new (void);
2415
25 XAppMonitorBlankerPrivate *priv;
26 };
16 void xapp_monitor_blanker_blank_other_monitors (XAppMonitorBlanker *self,
17 GtkWindow *window);
18 void xapp_monitor_blanker_unblank_monitors (XAppMonitorBlanker *self);
2719
28 struct _XAppMonitorBlankerClass
29 {
30 GObjectClass parent_class;
31 };
32
33 GType xapp_monitor_blanker_get_type (void);
34 XAppMonitorBlanker *xapp_monitor_blanker_new (void);
35 void xapp_monitor_blanker_blank_other_monitors (XAppMonitorBlanker *self,
36 GtkWindow *window);
37 void xapp_monitor_blanker_unblank_monitors (XAppMonitorBlanker *self);
38 gboolean xapp_monitor_blanker_are_monitors_blanked (XAppMonitorBlanker *self);
20 gboolean xapp_monitor_blanker_are_monitors_blanked (XAppMonitorBlanker *self);
3921
4022 G_END_DECLS
4123