Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-3.0-or-later
2 : : // SPDX-FileCopyrightText: Andy Holmes <andrew.g.r.holmes@gmail.com>
3 : :
4 : : #define G_LOG_DOMAIN "valent-media-window"
5 : :
6 : : #include "config.h"
7 : :
8 : : #include <adwaita.h>
9 : : #include <glib/gi18n-lib.h>
10 : : #include <gtk/gtk.h>
11 : : #include <valent.h>
12 : :
13 : : #include "valent-media-remote.h"
14 : : #include "valent-mixer-remote.h"
15 : : #include "valent-ui-utils-private.h"
16 : :
17 : : #include "valent-media-window.h"
18 : :
19 : : struct _ValentMediaWindow
20 : : {
21 : : AdwWindow parent_instance;
22 : :
23 : : GListModel *mixers;
24 : : GListModel *players;
25 : : };
26 : :
27 [ + + + - ]: 35 : G_DEFINE_FINAL_TYPE (ValentMediaWindow, valent_media_window, ADW_TYPE_WINDOW)
28 : :
29 : : typedef enum {
30 : : PROP_MIXERS = 1,
31 : : PROP_PLAYERS,
32 : : } ValentMediaWindowProperty;
33 : :
34 : : static GParamSpec *properties[PROP_PLAYERS + 1] = { NULL, };
35 : :
36 : : /*
37 : : * GObject
38 : : */
39 : : static void
40 : 1 : valent_media_window_finalize (GObject *object)
41 : : {
42 : 1 : ValentMediaWindow *self = VALENT_MEDIA_WINDOW (object);
43 : :
44 [ - + ]: 1 : g_clear_object (&self->mixers);
45 [ + - ]: 1 : g_clear_object (&self->players);
46 : :
47 : 1 : G_OBJECT_CLASS (valent_media_window_parent_class)->finalize (object);
48 : 1 : }
49 : :
50 : : static void
51 : 5 : valent_media_window_get_property (GObject *object,
52 : : guint prop_id,
53 : : GValue *value,
54 : : GParamSpec *pspec)
55 : : {
56 : 5 : ValentMediaWindow *self = VALENT_MEDIA_WINDOW (object);
57 : :
58 [ + + - ]: 5 : switch ((ValentMediaWindowProperty)prop_id)
59 : : {
60 : 2 : case PROP_MIXERS:
61 : 2 : g_value_set_object (value, self->mixers);
62 : 2 : break;
63 : :
64 : 3 : case PROP_PLAYERS:
65 : 3 : g_value_set_object (value, self->players);
66 : 3 : break;
67 : :
68 : 0 : default:
69 : 0 : G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
70 : : }
71 : 5 : }
72 : :
73 : : static void
74 : 2 : valent_media_window_set_property (GObject *object,
75 : : guint prop_id,
76 : : const GValue *value,
77 : : GParamSpec *pspec)
78 : : {
79 : 2 : ValentMediaWindow *self = VALENT_MEDIA_WINDOW (object);
80 : :
81 [ + + - ]: 2 : switch ((ValentMediaWindowProperty)prop_id)
82 : : {
83 : 1 : case PROP_MIXERS:
84 : 1 : self->mixers = g_value_dup_object (value);
85 : 1 : break;
86 : :
87 : 1 : case PROP_PLAYERS:
88 : 1 : self->players = g_value_dup_object (value);
89 : 1 : break;
90 : :
91 : 0 : default:
92 : 0 : G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
93 : : }
94 : 2 : }
95 : :
96 : : static void
97 : 1 : valent_media_window_class_init (ValentMediaWindowClass *klass)
98 : : {
99 : 1 : GObjectClass *object_class = G_OBJECT_CLASS (klass);
100 : 1 : GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
101 : :
102 : 1 : object_class->finalize = valent_media_window_finalize;
103 : 1 : object_class->get_property = valent_media_window_get_property;
104 : 1 : object_class->set_property = valent_media_window_set_property;
105 : :
106 : 1 : gtk_widget_class_set_template_from_resource (widget_class, "/plugins/gnome/valent-media-window.ui");
107 : :
108 : 2 : properties [PROP_MIXERS] =
109 : 1 : g_param_spec_object ("mixers", NULL, NULL,
110 : : G_TYPE_LIST_MODEL,
111 : : (G_PARAM_READWRITE |
112 : : G_PARAM_CONSTRUCT_ONLY |
113 : : G_PARAM_STATIC_STRINGS));
114 : :
115 : 2 : properties [PROP_PLAYERS] =
116 : 1 : g_param_spec_object ("players", NULL, NULL,
117 : : G_TYPE_LIST_MODEL,
118 : : (G_PARAM_READWRITE |
119 : : G_PARAM_CONSTRUCT_ONLY |
120 : : G_PARAM_STATIC_STRINGS));
121 : :
122 : 1 : g_object_class_install_properties (object_class, G_N_ELEMENTS (properties), properties);
123 : 1 : }
124 : :
125 : : static void
126 : 1 : valent_media_window_init (ValentMediaWindow *self)
127 : : {
128 : 1 : gtk_widget_init_template (GTK_WIDGET (self));
129 : 1 : }
|