]>
Commit | Line | Data |
---|---|---|
58fdf33a JR |
1 | diff --git a/configure.ac b/configure.ac |
2 | index 4397463..c66273c 100644 | |
3 | --- a/configure.ac | |
4 | +++ b/configure.ac | |
5 | @@ -26,7 +26,7 @@ m4_define([xfce4_mixer_version_minor], [11]) | |
6 | m4_define([xfce4_mixer_version_micro], [0]) | |
7 | m4_define([xfce4_mixer_version_nano], []) dnl leave this empty to have no nano version | |
8 | m4_define([xfce4_mixer_version_build], [rfe42d58]) | |
9 | -m4_define([xfce4_mixer_version_tag], []) | |
10 | +m4_define([xfce4_mixer_version_tag], [git]) | |
11 | m4_define([xfce4_mixer_version], [xfce4_mixer_version_major().xfce4_mixer_version_minor().xfce4_mixer_version_micro()ifelse(xfce4_mixer_version_nano(), [], [], [.xfce4_mixer_version_nano()])ifelse(xfce4_mixer_version_tag(), [git], [xfce4_mixer_version_tag()-xfce4_mixer_version_build()], [xfce4_mixer_version_tag()])]) | |
12 | ||
13 | dnl ******************************************* | |
14 | @@ -93,21 +93,20 @@ AC_CHECK_LIB([m],[round]) | |
15 | dnl *********************************** | |
16 | dnl *** Check for required packages *** | |
17 | dnl *********************************** | |
18 | -XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.24.0]) | |
19 | -XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [2.24.0]) | |
20 | +XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.42.0]) | |
21 | +XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [2.42.0]) | |
22 | XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [0.84]) | |
23 | XDT_CHECK_PACKAGE([GST_PLUGINS_BASE], [gstreamer-plugins-base-0.10], [0.10.25]) | |
24 | -XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.20.0]) | |
25 | -XDT_CHECK_PACKAGE([UNIQUE], [unique-1.0], [1.1]) | |
26 | -XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.10.0]) | |
27 | -XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.10.0]) | |
28 | -XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-1.0], [4.10.0]) | |
29 | -XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [4.10.0]) | |
30 | +XDT_CHECK_PACKAGE([GTK], [gtk+-3.0], [3.14.0]) | |
31 | +XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.12.0]) | |
32 | +XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-2], [4.12.0]) | |
33 | +XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-2.0], [4.12.0]) | |
34 | +XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [4.12.0]) | |
35 | ||
36 | dnl *********************************** | |
37 | dnl *** Check for optional packages *** | |
38 | dnl *********************************** | |
39 | -XDT_CHECK_OPTIONAL_PACKAGE([KEYBINDER], [keybinder], [0.2.2], [keybinder], | |
40 | +XDT_CHECK_OPTIONAL_PACKAGE([KEYBINDER], [keybinder-3.0], [0.3], [keybinder], | |
41 | [keybinder Support]) | |
42 | ||
43 | dnl *********************************** | |
44 | diff --git a/icons/16x16/Makefile.am b/icons/16x16/Makefile.am | |
45 | index 803a2e4..ace4a07 100644 | |
46 | --- a/icons/16x16/Makefile.am | |
47 | +++ b/icons/16x16/Makefile.am | |
48 | @@ -1,4 +1,4 @@ | |
49 | -iconsdir = $(pkgdatadir)/icons/hicolor/16x16/status | |
50 | +iconsdir = $(datadir)/xfce4/mixer/icons/hicolor/16x16/status | |
51 | icons_DATA = audio-input-microphone-muted.png | |
52 | ||
53 | EXTRA_DIST = $(icons_DATA) | |
54 | diff --git a/icons/Makefile.am b/icons/Makefile.am | |
55 | index 70638c1..035476a 100644 | |
56 | --- a/icons/Makefile.am | |
57 | +++ b/icons/Makefile.am | |
58 | @@ -4,17 +4,4 @@ SUBDIRS = \ | |
59 | 16x16 \ | |
60 | scalable | |
61 | ||
62 | -gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor | |
63 | - | |
64 | -install-data-hook: | |
65 | - @-if test -z "$(DESTDIR)"; then \ | |
66 | - echo "Updating Gtk icon cache."; \ | |
67 | - $(gtk_update_icon_cache); \ | |
68 | - else \ | |
69 | - echo "*** Icon cache not updated. Remember to run:"; \ | |
70 | - echo "***"; \ | |
71 | - echo "*** $(gtk_update_icon_cache)"; \ | |
72 | - echo "***"; \ | |
73 | - fi | |
74 | - | |
75 | # vi:set ts=8 sw=8 noet ai nocindent syntax=automake: | |
76 | diff --git a/icons/scalable/Makefile.am b/icons/scalable/Makefile.am | |
77 | index 5bfc12c..5212e63 100644 | |
78 | --- a/icons/scalable/Makefile.am | |
79 | +++ b/icons/scalable/Makefile.am | |
80 | @@ -1,4 +1,4 @@ | |
81 | -iconsdir = $(pkgdatadir)/icons/hicolor/scalable/status | |
82 | +iconsdir = $(datadir)/xfce4/mixer/icons/hicolor/scalable/status | |
83 | icons_DATA = audio-input-microphone-muted.svg | |
84 | ||
85 | EXTRA_DIST = $(icons_DATA) | |
86 | diff --git a/libxfce4mixer/Makefile.am b/libxfce4mixer/Makefile.am | |
87 | index 792a95e..e864ea8 100644 | |
88 | --- a/libxfce4mixer/Makefile.am | |
89 | +++ b/libxfce4mixer/Makefile.am | |
90 | @@ -25,7 +25,7 @@ libxfce4mixer_la_CPPFLAGS = \ | |
91 | -DDATADIR=\"$(datadir)\" \ | |
92 | -DPACKAGE_LOCALE_DIR=\"$(localedir)\" \ | |
93 | -DG_LOG_DOMAIN=\"libxfce4mixer\" \ | |
94 | - -DMIXER_DATADIR=\"$(pkgdatadir)\" | |
95 | + -DMIXER_DATADIR=\"$(datadir)/xfce4/mixer\" | |
96 | ||
97 | libxfce4mixer_la_CFLAGS = \ | |
98 | $(PLATFORM_CFLAGS) \ | |
99 | diff --git a/libxfce4mixer/xfce-mixer-debug.h b/libxfce4mixer/xfce-mixer-debug.h | |
100 | index 4ade97c..8643d4d 100644 | |
101 | --- a/libxfce4mixer/xfce-mixer-debug.h | |
102 | +++ b/libxfce4mixer/xfce-mixer-debug.h | |
103 | @@ -34,7 +34,7 @@ void xfce_mixer_debug_real (const gchar *log_domain, | |
104 | const gchar *file, | |
105 | const gchar *func, | |
106 | gint line, | |
107 | - const gchar *format, ...); | |
108 | + const gchar *format, ...) G_GNUC_PRINTF(5, 6); | |
109 | void xfce_mixer_dump_gst_data (void); | |
110 | ||
111 | ||
112 | diff --git a/panel-plugin/mixer.desktop.in b/panel-plugin/mixer.desktop.in | |
113 | index f4e7637..728f808 100644 | |
114 | --- a/panel-plugin/mixer.desktop.in | |
115 | +++ b/panel-plugin/mixer.desktop.in | |
116 | @@ -6,3 +6,4 @@ Icon=multimedia-volume-control | |
117 | X-XFCE-Internal=false | |
118 | X-XFCE-Module=mixer | |
119 | X-XFCE-Unique=true | |
120 | +X-XFCE-API=2.0 | |
121 | diff --git a/panel-plugin/xfce-mixer-plugin.c b/panel-plugin/xfce-mixer-plugin.c | |
122 | index 949e63e..85f4805 100644 | |
123 | --- a/panel-plugin/xfce-mixer-plugin.c | |
124 | +++ b/panel-plugin/xfce-mixer-plugin.c | |
125 | @@ -276,7 +276,7 @@ xfce_mixer_plugin_init (XfceMixerPlugin *mixer_plugin) | |
126 | xfce_mixer_dump_gst_data (); | |
127 | ||
128 | /* Create container for the plugin */ | |
129 | - mixer_plugin->hvbox = GTK_WIDGET (xfce_hvbox_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 0)); | |
130 | + mixer_plugin->hvbox = GTK_WIDGET (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); | |
131 | xfce_panel_plugin_add_action_widget (XFCE_PANEL_PLUGIN (mixer_plugin), mixer_plugin->hvbox); | |
132 | gtk_container_add (GTK_CONTAINER (mixer_plugin), mixer_plugin->hvbox); | |
133 | gtk_widget_show (mixer_plugin->hvbox); | |
134 | @@ -300,7 +300,6 @@ xfce_mixer_plugin_construct (XfcePanelPlugin *plugin) | |
135 | { | |
136 | XfceMixerPlugin *mixer_plugin = XFCE_MIXER_PLUGIN (plugin); | |
137 | GtkWidget *command_menu_item; | |
138 | - GtkWidget *command_image; | |
139 | ||
140 | xfce_panel_plugin_menu_show_configure (plugin); | |
141 | ||
142 | @@ -311,10 +310,7 @@ xfce_mixer_plugin_construct (XfcePanelPlugin *plugin) | |
143 | gtk_widget_show (mixer_plugin->mute_menu_item); | |
144 | ||
145 | /* Add menu item for running the user-defined command */ | |
146 | - command_image = gtk_image_new_from_icon_name ("multimedia-volume-control", GTK_ICON_SIZE_MENU); | |
147 | - gtk_widget_show (command_image); | |
148 | - command_menu_item = gtk_image_menu_item_new_with_mnemonic (_("Run Audio Mi_xer")); | |
149 | - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (command_menu_item), command_image); | |
150 | + command_menu_item = gtk_menu_item_new_with_mnemonic (_("Run Audio Mi_xer")); | |
151 | xfce_panel_plugin_menu_insert_item (plugin, GTK_MENU_ITEM (command_menu_item)); | |
152 | g_signal_connect_swapped (G_OBJECT (command_menu_item), "activate", G_CALLBACK (xfce_mixer_plugin_command_item_activated), mixer_plugin); | |
153 | gtk_widget_show (command_menu_item); | |
154 | @@ -608,6 +604,9 @@ xfce_mixer_plugin_size_changed (XfcePanelPlugin *plugin, | |
155 | gint size) | |
156 | { | |
157 | XfceMixerPlugin *mixer_plugin = XFCE_MIXER_PLUGIN (plugin); | |
158 | + GtkBorder button_padding; | |
159 | + gint xthickness; | |
160 | + gint ythickness; | |
161 | gint icon_size; | |
162 | ||
163 | g_return_val_if_fail (mixer_plugin != NULL, FALSE); | |
164 | @@ -616,7 +615,11 @@ xfce_mixer_plugin_size_changed (XfcePanelPlugin *plugin, | |
165 | size /= xfce_panel_plugin_get_nrows (XFCE_PANEL_PLUGIN (mixer_plugin)); | |
166 | ||
167 | /* Determine size for the volume button icons */ | |
168 | - icon_size = size - 2 - 2 * MAX (mixer_plugin->button->style->xthickness, mixer_plugin->button->style->ythickness); | |
169 | + gtk_style_context_get_padding (gtk_widget_get_style_context (GTK_WIDGET (mixer_plugin->button)), GTK_STATE_FLAG_NORMAL, | |
170 | + &button_padding); | |
171 | + xthickness = button_padding.left + button_padding.right; | |
172 | + ythickness = button_padding.top + button_padding.bottom; | |
173 | + icon_size = size - 2 - MAX (xthickness, ythickness); | |
174 | ||
175 | /* Set volume button icon size and update the volume button */ | |
176 | xfce_volume_button_set_icon_size (XFCE_VOLUME_BUTTON (mixer_plugin->button), icon_size); | |
177 | diff --git a/panel-plugin/xfce-plugin-dialog.c b/panel-plugin/xfce-plugin-dialog.c | |
178 | index f89f872..64dbf4d 100644 | |
179 | --- a/panel-plugin/xfce-plugin-dialog.c | |
180 | +++ b/panel-plugin/xfce-plugin-dialog.c | |
181 | @@ -142,7 +142,7 @@ xfce_plugin_dialog_new (XfcePanelPlugin *plugin) | |
182 | static void | |
183 | xfce_plugin_dialog_create_contents (XfcePluginDialog *dialog) | |
184 | { | |
185 | - GtkWidget *table; | |
186 | + GtkWidget *grid; | |
187 | GtkWidget *button; | |
188 | GtkWidget *label; | |
189 | ||
190 | @@ -151,33 +151,35 @@ xfce_plugin_dialog_create_contents (XfcePluginDialog *dialog) | |
191 | ||
192 | xfce_titled_dialog_set_subtitle (XFCE_TITLED_DIALOG (dialog), _("Configure the sound card and mixer track")); | |
193 | ||
194 | - button = gtk_button_new_from_stock (GTK_STOCK_CLOSE); | |
195 | + button = gtk_button_new_with_mnemonic (_("_Close")); | |
196 | + gtk_button_set_image (GTK_BUTTON (button), | |
197 | + gtk_image_new_from_icon_name ("window-close", GTK_ICON_SIZE_BUTTON)); | |
198 | gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, GTK_RESPONSE_CLOSE); | |
199 | gtk_widget_show (button); | |
200 | ||
201 | - table = gtk_table_new (2, 2, FALSE); | |
202 | - gtk_table_set_row_spacings (GTK_TABLE (table), 12); | |
203 | - gtk_table_set_col_spacings (GTK_TABLE (table), 12); | |
204 | - gtk_container_set_border_width (GTK_CONTAINER (table), 6); | |
205 | - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), table); | |
206 | - gtk_widget_show (table); | |
207 | + grid = gtk_grid_new (); | |
208 | + g_object_set (G_OBJECT (grid), "row-spacing", 6, "column-spacing", 12, "margin-top", 6, "margin-bottom", 6, NULL); | |
209 | + gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), grid); | |
210 | + gtk_widget_show (grid); | |
211 | ||
212 | label = gtk_label_new_with_mnemonic (_("Sound _card:")); | |
213 | - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0); | |
214 | + gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); | |
215 | gtk_widget_show (label); | |
216 | ||
217 | dialog->card_combo = xfce_mixer_card_combo_new (NULL); | |
218 | gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->card_combo); | |
219 | - gtk_table_attach (GTK_TABLE (table), dialog->card_combo, 1, 2, 0, 1, GTK_FILL|GTK_EXPAND, GTK_SHRINK, 0, 0); | |
220 | + g_object_set (G_OBJECT (dialog->card_combo), "halign", GTK_ALIGN_FILL, "hexpand", TRUE, NULL); | |
221 | + gtk_grid_attach (GTK_GRID (grid), dialog->card_combo, 1, 0, 1, 1); | |
222 | gtk_widget_show (dialog->card_combo); | |
223 | ||
224 | label = gtk_label_new_with_mnemonic (_("Mixer _track:")); | |
225 | gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->track_combo); | |
226 | - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0); | |
227 | + gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); | |
228 | gtk_widget_show (label); | |
229 | ||
230 | dialog->track_combo = xfce_mixer_track_combo_new (NULL, NULL); | |
231 | - gtk_table_attach (GTK_TABLE (table), dialog->track_combo, 1, 2, 1, 2, GTK_FILL|GTK_EXPAND, GTK_SHRINK, 0, 0); | |
232 | + g_object_set (G_OBJECT (dialog->track_combo), "halign", GTK_ALIGN_FILL, "hexpand", TRUE, NULL); | |
233 | + gtk_grid_attach (GTK_GRID (grid), dialog->track_combo, 1, 1, 1, 1); | |
234 | gtk_widget_show (dialog->track_combo); | |
235 | ||
236 | /* Hack to initialize the widget state */ | |
237 | diff --git a/panel-plugin/xfce-volume-button.c b/panel-plugin/xfce-volume-button.c | |
238 | index 6877614..0481a66 100644 | |
239 | --- a/panel-plugin/xfce-volume-button.c | |
240 | +++ b/panel-plugin/xfce-volume-button.c | |
241 | @@ -152,7 +152,7 @@ struct _XfceVolumeButton | |
242 | GtkWidget *vbox; | |
243 | ||
244 | /* Adjustment for the volume range and current value */ | |
245 | - GtkObject *adjustment; | |
246 | + GtkAdjustment *adjustment; | |
247 | ||
248 | /* Icon size currently used */ | |
249 | gint icon_size; | |
250 | @@ -292,13 +292,16 @@ xfce_volume_button_init (XfceVolumeButton *button) | |
251 | ||
252 | /* Make the button look flat and make it never grab the focus */ | |
253 | gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE); | |
254 | - gtk_button_set_focus_on_click (GTK_BUTTON (button), FALSE); | |
255 | + gtk_widget_set_focus_on_click (GTK_WIDGET (button), FALSE); | |
256 | gtk_widget_set_can_default (GTK_WIDGET (button), FALSE); | |
257 | gtk_widget_set_can_focus (GTK_WIDGET (button), FALSE); | |
258 | ||
259 | /* Connect signal for theme changes */ | |
260 | g_signal_connect_swapped (gtk_icon_theme_get_default (), "changed", G_CALLBACK (xfce_volume_button_update_icons), button); | |
261 | ||
262 | + /* Intercept scroll events */ | |
263 | + gtk_widget_add_events (GTK_WIDGET (button), GDK_SCROLL_MASK); | |
264 | + | |
265 | /* Update the state of the button */ | |
266 | xfce_volume_button_update (button); | |
267 | } | |
268 | @@ -499,13 +502,13 @@ xfce_volume_button_create_dock_contents (XfceVolumeButton *button) | |
269 | * not matter here since only one of the boxes it holds will be visibe at any | |
270 | * time depending on the panel orientation | |
271 | */ | |
272 | - box = gtk_vbox_new (TRUE, 6); | |
273 | + box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); | |
274 | gtk_container_set_border_width (GTK_CONTAINER (box), 2); | |
275 | gtk_container_add (GTK_CONTAINER (frame), box); | |
276 | gtk_widget_show (box); | |
277 | ||
278 | /* Container for the widgets shown in vertical mode */ | |
279 | - button->hbox = gtk_hbox_new(FALSE, 6); | |
280 | + button->hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); | |
281 | gtk_box_pack_start (GTK_BOX (box), button->hbox, TRUE, TRUE, 0); | |
282 | ||
283 | /* Show the position of lowest and highest volume through icons */ | |
284 | @@ -513,7 +516,7 @@ xfce_volume_button_create_dock_contents (XfceVolumeButton *button) | |
285 | gtk_box_pack_start (GTK_BOX (button->hbox), image, TRUE, TRUE, 0); | |
286 | gtk_widget_show (image); | |
287 | ||
288 | - scale = gtk_hscale_new (GTK_ADJUSTMENT (button->adjustment)); | |
289 | + scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, GTK_ADJUSTMENT (button->adjustment)); | |
290 | gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE); | |
291 | gtk_box_pack_start (GTK_BOX (button->hbox), scale, TRUE, TRUE, 0); | |
292 | gtk_widget_set_size_request (scale, SCALE_SIZE, -1); | |
293 | @@ -525,10 +528,10 @@ xfce_volume_button_create_dock_contents (XfceVolumeButton *button) | |
294 | gtk_widget_show (image); | |
295 | ||
296 | /* Container for the widgets shown in horizontal mode */ | |
297 | - button->vbox = gtk_vbox_new(FALSE, 6); | |
298 | + button->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6); | |
299 | gtk_box_pack_start (GTK_BOX (box), button->vbox, TRUE, TRUE, 0); | |
300 | ||
301 | - scale = gtk_vscale_new (GTK_ADJUSTMENT (button->adjustment)); | |
302 | + scale = gtk_scale_new (GTK_ORIENTATION_VERTICAL, GTK_ADJUSTMENT (button->adjustment)); | |
303 | gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE); | |
304 | gtk_range_set_inverted (GTK_RANGE (scale), TRUE); | |
305 | gtk_box_pack_start (GTK_BOX (button->vbox), scale, TRUE, TRUE, 0); | |
306 | @@ -549,6 +552,72 @@ xfce_volume_button_create_dock_contents (XfceVolumeButton *button) | |
307 | ||
308 | ||
309 | ||
310 | +static gboolean | |
311 | +xfce_volume_button_grab_input (XfceVolumeButton *button) | |
312 | +{ | |
313 | + GtkWidget *dock = button->dock; | |
314 | + GdkWindow *window = gtk_widget_get_window (dock); | |
315 | + GdkDisplay *display = gtk_widget_get_display (dock); | |
316 | +#if GTK_CHECK_VERSION(3, 20, 0) | |
317 | + GdkSeat *seat = gdk_display_get_default_seat (display); | |
318 | +#else | |
319 | + GdkDeviceManager *device_manager = gdk_display_get_device_manager (display); | |
320 | + GdkDevice *pointer = gdk_device_manager_get_client_pointer (device_manager); | |
321 | + GdkDevice *keyboard = gdk_device_get_associated_device (pointer); | |
322 | +#endif | |
323 | + | |
324 | + gtk_grab_add (dock); | |
325 | + | |
326 | +#if GTK_CHECK_VERSION(3, 20, 0) | |
327 | + if (gdk_seat_grab (seat, window, GDK_SEAT_CAPABILITY_ALL, TRUE, NULL, NULL, NULL, NULL) != GDK_GRAB_SUCCESS) | |
328 | + goto fail_remove_grab; | |
329 | +#else | |
330 | + if (gdk_device_grab (pointer, window, GDK_OWNERSHIP_WINDOW, TRUE, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | | |
331 | + GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK, NULL, GDK_CURRENT_TIME) != GDK_GRAB_SUCCESS) | |
332 | + goto fail_remove_grab; | |
333 | + | |
334 | + if (gdk_device_grab (keyboard, window, GDK_OWNERSHIP_WINDOW, TRUE, GDK_KEY_PRESS | GDK_KEY_RELEASE, NULL, | |
335 | + GDK_CURRENT_TIME) != GDK_GRAB_SUCCESS) | |
336 | + { | |
337 | + gdk_device_ungrab (pointer, GDK_CURRENT_TIME); | |
338 | + goto fail_remove_grab; | |
339 | + } | |
340 | +#endif | |
341 | + | |
342 | + return TRUE; | |
343 | + | |
344 | +fail_remove_grab: | |
345 | + gtk_grab_remove (dock); | |
346 | + return FALSE; | |
347 | +} | |
348 | + | |
349 | + | |
350 | + | |
351 | +static void | |
352 | +xfce_volume_button_ungrab_input (XfceVolumeButton *button) | |
353 | +{ | |
354 | + GtkWidget *dock = button->dock; | |
355 | + GdkDisplay *display = gtk_widget_get_display (dock); | |
356 | +#if GTK_CHECK_VERSION(3, 20, 0) | |
357 | + GdkSeat *seat = gdk_display_get_default_seat (display); | |
358 | +#else | |
359 | + GdkDeviceManager *device_manager = gdk_display_get_device_manager (display); | |
360 | + GdkDevice *pointer = gdk_device_manager_get_client_pointer (device_manager); | |
361 | + GdkDevice *keyboard = gdk_device_get_associated_device (pointer); | |
362 | +#endif | |
363 | + | |
364 | +#if GTK_CHECK_VERSION(3, 20, 0) | |
365 | + gdk_seat_ungrab (seat); | |
366 | +#else | |
367 | + gdk_device_ungrab (pointer, GDK_CURRENT_TIME); | |
368 | + gdk_device_ungrab (keyboard, GDK_CURRENT_TIME); | |
369 | +#endif | |
370 | + | |
371 | + gtk_grab_remove (dock); | |
372 | +} | |
373 | + | |
374 | + | |
375 | + | |
376 | static void | |
377 | xfce_volume_button_popup_dock (XfceVolumeButton *button) | |
378 | { | |
379 | @@ -564,7 +633,7 @@ xfce_volume_button_popup_dock (XfceVolumeButton *button) | |
380 | gint x; | |
381 | gint y; | |
382 | GtkPositionType position; | |
383 | - GdkDisplay *display; | |
384 | + GtkAllocation button_allocation; | |
385 | ||
386 | /* Lazily create dock contents */ | |
387 | if (button->dock == NULL) | |
388 | @@ -591,12 +660,13 @@ xfce_volume_button_popup_dock (XfceVolumeButton *button) | |
389 | } | |
390 | ||
391 | /* Get size request of the dock */ | |
392 | - gtk_widget_size_request (GTK_WIDGET (button->dock), &dock_requisition); | |
393 | + gtk_widget_get_preferred_size (GTK_WIDGET (button->dock), NULL, &dock_requisition); | |
394 | ||
395 | /* Determine the absolute coordinates of the button widget */ | |
396 | gdk_window_get_origin (gtk_widget_get_window (GTK_WIDGET (button)), &x, &y); | |
397 | - x += button_widget->allocation.x; | |
398 | - y += button_widget->allocation.y; | |
399 | + gtk_widget_get_allocation (button_widget, &button_allocation); | |
400 | + x += button_allocation.x; | |
401 | + y += button_allocation.y; | |
402 | ||
403 | /* Determine the geometry of the monitor containing the window containing the button */ | |
404 | screen = gtk_widget_get_screen (button_widget); | |
405 | @@ -631,22 +701,22 @@ xfce_volume_button_popup_dock (XfceVolumeButton *button) | |
406 | switch (position) | |
407 | { | |
408 | case GTK_POS_TOP: | |
409 | - x += (button_widget->allocation.width / 2) - (dock_requisition.width / 2); | |
410 | + x += (button_allocation.width / 2) - (dock_requisition.width / 2); | |
411 | y -= dock_requisition.height; | |
412 | break; | |
413 | case GTK_POS_RIGHT: | |
414 | - x += button_widget->allocation.width; | |
415 | - y += (button_widget->allocation.height / 2) - (dock_requisition.height / 2); | |
416 | + x += button_allocation.width; | |
417 | + y += (button_allocation.height / 2) - (dock_requisition.height / 2); | |
418 | break; | |
419 | case GTK_POS_LEFT: | |
420 | x -= dock_requisition.width; | |
421 | - y += (button_widget->allocation.height / 2) - (dock_requisition.height / 2); | |
422 | + y += (button_allocation.height / 2) - (dock_requisition.height / 2); | |
423 | break; | |
424 | case GTK_POS_BOTTOM: | |
425 | default: | |
426 | /* default to GTK_POS_BOTTOM */ | |
427 | - x += (button_widget->allocation.width / 2) - (dock_requisition.width / 2); | |
428 | - y += button_widget->allocation.height; | |
429 | + x += (button_allocation.width / 2) - (dock_requisition.width / 2); | |
430 | + y += button_allocation.height; | |
431 | break; | |
432 | } | |
433 | ||
434 | @@ -666,25 +736,12 @@ xfce_volume_button_popup_dock (XfceVolumeButton *button) | |
435 | gtk_widget_show (button->dock); | |
436 | ||
437 | /* Grab keyboard and mouse, focus on the slider */ | |
438 | - gtk_grab_add (button->dock); | |
439 | - | |
440 | - if (gdk_pointer_grab (gtk_widget_get_window (button->dock), TRUE, | |
441 | - GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK, | |
442 | - NULL, NULL, GDK_CURRENT_TIME) != GDK_GRAB_SUCCESS) | |
443 | + if (!xfce_volume_button_grab_input (button)) | |
444 | { | |
445 | - gtk_grab_remove (button->dock); | |
446 | gtk_widget_hide (button->dock); | |
447 | return; | |
448 | } | |
449 | ||
450 | - if (gdk_keyboard_grab (gtk_widget_get_window (button->dock), TRUE, GDK_CURRENT_TIME) != GDK_GRAB_SUCCESS) | |
451 | - { | |
452 | - display = gtk_widget_get_display (button->dock); | |
453 | - gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME); | |
454 | - gtk_grab_remove (button->dock); | |
455 | - gtk_widget_hide (button->dock); | |
456 | - return; | |
457 | - } | |
458 | gtk_widget_grab_focus (button->dock); | |
459 | ||
460 | gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); | |
461 | @@ -695,14 +752,9 @@ xfce_volume_button_popup_dock (XfceVolumeButton *button) | |
462 | static void | |
463 | xfce_volume_button_popdown_dock (XfceVolumeButton *button) | |
464 | { | |
465 | - GdkDisplay *display; | |
466 | - | |
467 | if (button->dock != NULL && gtk_widget_get_visible (button->dock)) | |
468 | { | |
469 | - display = gtk_widget_get_display (GTK_WIDGET (button->dock)); | |
470 | - gdk_display_keyboard_ungrab (display, GDK_CURRENT_TIME); | |
471 | - gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME); | |
472 | - gtk_grab_remove (button->dock); | |
473 | + xfce_volume_button_ungrab_input (button); | |
474 | ||
475 | gtk_widget_hide (button->dock); | |
476 | gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE); | |
477 | @@ -776,6 +828,9 @@ xfce_volume_button_scroll_event (GtkWidget *widget, | |
478 | /* Decrease one step when scrolling down/left */ | |
479 | gtk_adjustment_set_value (GTK_ADJUSTMENT (button->adjustment), old_value - increment); | |
480 | break; | |
481 | + | |
482 | + case GDK_SCROLL_SMOOTH: | |
483 | + break; | |
484 | } | |
485 | ||
486 | new_value = gtk_adjustment_get_value (GTK_ADJUSTMENT (button->adjustment)); | |
487 | @@ -923,7 +978,7 @@ xfce_volume_button_dock_key_release (XfceVolumeButton *button, | |
488 | GtkWidget *widget) | |
489 | { | |
490 | /* Pop down on Escape */ | |
491 | - if (event->keyval == GDK_Escape) | |
492 | + if (event->keyval == GDK_KEY_Escape) | |
493 | { | |
494 | xfce_volume_button_popdown_dock (button); | |
495 | return TRUE; | |
496 | diff --git a/xfce4-mixer/Makefile.am b/xfce4-mixer/Makefile.am | |
497 | index 4af69e9..d7742df 100644 | |
498 | --- a/xfce4-mixer/Makefile.am | |
499 | +++ b/xfce4-mixer/Makefile.am | |
500 | @@ -5,6 +5,8 @@ bin_PROGRAMS = \ | |
501 | ||
502 | xfce4_mixer_SOURCES = \ | |
503 | main.c \ | |
504 | + xfce-mixer-application.c \ | |
505 | + xfce-mixer-application.h \ | |
506 | xfce-mixer-track.c \ | |
507 | xfce-mixer-track.h \ | |
508 | xfce-mixer-switch.c \ | |
509 | @@ -23,13 +25,12 @@ xfce4_mixer_CPPFLAGS = \ | |
510 | -I$(top_srcdir) \ | |
511 | -DPACKAGE_LOCALE_DIR=\"$(localedir)\" \ | |
512 | -DDATADIR=\"$(datadir)\" \ | |
513 | - -DMIXER_DATADIR=\"$(pkgdatadir)\" \ | |
514 | + -DMIXER_DATADIR=\"$(datadir)/xfce4/mixer\" \ | |
515 | -DG_LOG_DOMAIN=\"xfce4-mixer\" | |
516 | ||
517 | xfce4_mixer_CFLAGS = \ | |
518 | $(GLIB_CFLAGS) \ | |
519 | $(GTK_CFLAGS) \ | |
520 | - $(UNIQUE_CFLAGS) \ | |
521 | $(LIBXFCE4UTIL_CFLAGS) \ | |
522 | $(LIBXFCE4UI_CFLAGS) \ | |
523 | $(XFCONF_CFLAGS) \ | |
524 | @@ -43,7 +44,6 @@ xfce4_mixer_LDFLAGS = \ | |
525 | $(GLIB_LIBS) \ | |
526 | $(GTHREAD_LIBS) \ | |
527 | $(GTK_LIBS) \ | |
528 | - $(UNIQUE_LIBS) \ | |
529 | $(LIBXFCE4UTIL_LIBS) \ | |
530 | $(LIBXFCE4UI_LIBS) \ | |
531 | $(XFCONF_LIBS) \ | |
532 | diff --git a/xfce4-mixer/main.c b/xfce4-mixer/main.c | |
533 | index 9e8417b..585c9e6 100644 | |
534 | --- a/xfce4-mixer/main.c | |
535 | +++ b/xfce4-mixer/main.c | |
536 | @@ -23,51 +23,11 @@ | |
537 | #include <config.h> | |
538 | #endif | |
539 | ||
540 | -#ifdef HAVE_STDLIB_H | |
541 | -#include <stdlib.h> | |
542 | -#endif | |
543 | - | |
544 | -#include <gst/gst.h> | |
545 | - | |
546 | #include <gtk/gtk.h> | |
547 | -#include <unique/unique.h> | |
548 | ||
549 | #include <libxfce4util/libxfce4util.h> | |
550 | -#include <libxfce4ui/libxfce4ui.h> | |
551 | -#include <xfconf/xfconf.h> | |
552 | - | |
553 | -#include "libxfce4mixer/libxfce4mixer.h" | |
554 | - | |
555 | -#include "xfce-mixer-window.h" | |
556 | ||
557 | - | |
558 | - | |
559 | -static UniqueResponse | |
560 | -message_received (UniqueApp *app, | |
561 | - UniqueCommand command, | |
562 | - UniqueMessageData *message, | |
563 | - guint time_, | |
564 | - GtkWidget *window) | |
565 | -{ | |
566 | - UniqueResponse response; | |
567 | - | |
568 | - switch (command) | |
569 | - { | |
570 | - case UNIQUE_ACTIVATE: | |
571 | - /* Move window to the screen the command was started on */ | |
572 | - gtk_window_set_screen (GTK_WINDOW (window), unique_message_data_get_screen (message)); | |
573 | - /* Bring window to the foreground */ | |
574 | - gtk_window_present_with_time (GTK_WINDOW (window), time_); | |
575 | - response = UNIQUE_RESPONSE_OK; | |
576 | - break; | |
577 | - default: | |
578 | - /* Invalid command */ | |
579 | - response = UNIQUE_RESPONSE_FAIL; | |
580 | - break; | |
581 | - } | |
582 | - | |
583 | - return response; | |
584 | -} | |
585 | +#include "xfce-mixer-application.h" | |
586 | ||
587 | ||
588 | ||
589 | @@ -75,129 +35,20 @@ int | |
590 | main (int argc, | |
591 | char **argv) | |
592 | { | |
593 | - UniqueApp *app; | |
594 | - GtkWidget *window; | |
595 | - GError *error = NULL; | |
596 | - gboolean debug_mode = FALSE; | |
597 | - gboolean show_version = FALSE; | |
598 | - GOptionContext *option_context; | |
599 | - GOptionEntry option_entries[] = | |
600 | - { | |
601 | - { "debug", 'd', 0, G_OPTION_ARG_NONE, &debug_mode, N_("Enable debugging output"), NULL }, | |
602 | - { "version", 'V', 0, G_OPTION_ARG_NONE, &show_version, N_("Show version and exit"), NULL }, | |
603 | - { NULL, 0, 0, 0, NULL, NULL, NULL } | |
604 | - }; | |
605 | + GApplication *app; | |
606 | + gint status; | |
607 | ||
608 | /* Setup translation domain */ | |
609 | xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); | |
610 | ||
611 | -#if !GLIB_CHECK_VERSION(2, 32, 0) | |
612 | - /* Initialize the threading system */ | |
613 | - if (G_LIKELY (!g_thread_supported ())) | |
614 | - g_thread_init (NULL); | |
615 | -#endif | |
616 | - | |
617 | /* Set application name */ | |
618 | g_set_application_name (_("Audio Mixer")); | |
619 | ||
620 | - /* Parse commandline options */ | |
621 | - option_context = g_option_context_new ("- Adjust volume levels"); | |
622 | - g_option_context_add_main_entries (option_context, option_entries, GETTEXT_PACKAGE); | |
623 | - g_option_context_add_group (option_context, gtk_get_option_group (FALSE)); | |
624 | - g_option_context_add_group (option_context, gst_init_get_option_group ()); | |
625 | - g_option_context_parse (option_context, &argc, &argv, &error); | |
626 | - g_option_context_free (option_context); | |
627 | - if (error != NULL) | |
628 | - { | |
629 | - g_printerr ("xfce4-mixer: %s\n", error->message); | |
630 | - | |
631 | - return EXIT_FAILURE; | |
632 | - } | |
633 | - | |
634 | - if (show_version) | |
635 | - { | |
636 | - g_print ("xfce4-mixer " VERSION "\n"); | |
637 | - | |
638 | - return EXIT_SUCCESS; | |
639 | - } | |
640 | - | |
641 | - /* Initialize GTK+ fully */ | |
642 | - gtk_init (NULL, NULL); | |
643 | - | |
644 | - /* Initialize Xfconf */ | |
645 | - if (G_UNLIKELY (!xfconf_init (&error))) | |
646 | - { | |
647 | - if (G_LIKELY (error != NULL)) | |
648 | - { | |
649 | - g_printerr (_("xfce4-mixer: Failed to initialize xfconf: %s\n"), error->message); | |
650 | - g_error_free (error); | |
651 | - } | |
652 | - | |
653 | - return EXIT_FAILURE; | |
654 | - } | |
655 | - | |
656 | - /* Initialize the mixer library */ | |
657 | - xfce_mixer_init (); | |
658 | - | |
659 | - /* Use volume control icon for all mixer windows */ | |
660 | - gtk_window_set_default_icon_name ("multimedia-volume-control"); | |
661 | - | |
662 | - /* Warn users if there were no sound cards detected by GStreamer */ | |
663 | - if (G_UNLIKELY (g_list_length (xfce_mixer_get_cards ()) <= 0)) | |
664 | - { | |
665 | - xfce_dialog_show_error (NULL, | |
666 | - NULL, | |
667 | - _("GStreamer was unable to detect any sound devices. " | |
668 | - "Some sound system specific GStreamer packages may " | |
669 | - "be missing. It may also be a permissions problem.")); | |
670 | - | |
671 | - return EXIT_FAILURE; | |
672 | - } | |
673 | - | |
674 | - /* Initialize debugging code */ | |
675 | - xfce_mixer_debug_init (G_LOG_DOMAIN, debug_mode); | |
676 | - | |
677 | - xfce_mixer_debug ("xfce4-mixer version " VERSION " starting up"); | |
678 | - | |
679 | - if (debug_mode) | |
680 | - xfce_mixer_dump_gst_data (); | |
681 | - | |
682 | - /* Create unique application */ | |
683 | - app = unique_app_new ("org.xfce.xfce4-mixer", NULL); | |
684 | - if (unique_app_is_running (app)) | |
685 | - { | |
686 | - unique_app_send_message (app, UNIQUE_ACTIVATE, NULL); | |
687 | - | |
688 | - g_object_unref (app); | |
689 | - } | |
690 | - else | |
691 | - { | |
692 | - /* Create the mixer window */ | |
693 | - window = xfce_mixer_window_new (); | |
694 | - | |
695 | - /* Display the mixer window */ | |
696 | - gtk_widget_show (window); | |
697 | - | |
698 | - /* Watch mixer window */ | |
699 | - unique_app_watch_window (app, GTK_WINDOW (window)); | |
700 | - | |
701 | - /* Handle messages */ | |
702 | - g_signal_connect (app, "message-received", G_CALLBACK (message_received), window); | |
703 | - | |
704 | - /* Enter the GTK+ main loop */ | |
705 | - gtk_main (); | |
706 | - | |
707 | - g_object_unref (app); | |
708 | - | |
709 | - /* Destroy the window */ | |
710 | - gtk_widget_destroy (window); | |
711 | - } | |
712 | + app = xfce_mixer_application_new (); | |
713 | ||
714 | - /* Shutdown the mixer library */ | |
715 | - xfce_mixer_shutdown (); | |
716 | + status = g_application_run (app, argc, argv); | |
717 | ||
718 | - /* Shutdown Xfconf */ | |
719 | - xfconf_shutdown (); | |
720 | + g_object_unref (app); | |
721 | ||
722 | - return EXIT_SUCCESS; | |
723 | + return status; | |
724 | } | |
725 | diff --git a/xfce4-mixer/xfce-mixer-application.c b/xfce4-mixer/xfce-mixer-application.c | |
726 | new file mode 100644 | |
727 | index 0000000..1559675 | |
728 | --- /dev/null | |
729 | +++ b/xfce4-mixer/xfce-mixer-application.c | |
730 | @@ -0,0 +1,232 @@ | |
731 | +/* vi:set expandtab sw=2 sts=2: */ | |
732 | +/*- | |
733 | + * Copyright (c) 2008 Jannis Pohlmann <jannis@xfce.org> | |
734 | + * Copyright (c) 2012 Guido Berhoerster <guido+xfce@berhoerster.name> | |
735 | + * | |
736 | + * This program is free software; you can redistribute it and/or modify | |
737 | + * it under the terms of the GNU General Public License as published by | |
738 | + * the Free Software Foundation; either version 2 of the License, or | |
739 | + * (at your option) any later version. | |
740 | + * | |
741 | + * This program is distributed in the hope that it will be useful, | |
742 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
743 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
744 | + * General Public License for more details. | |
745 | + * | |
746 | + * You should have received a copy of the GNU General Public License | |
747 | + * along with this program; if not, write to the Free Software | |
748 | + * Foundation, Inc., 51 Franklin Street, Fifth Floor, | |
749 | + * Boston, MA 02110-1301, USA. | |
750 | + */ | |
751 | + | |
752 | +#ifdef HAVE_CONFIG_H | |
753 | +#include <config.h> | |
754 | +#endif | |
755 | + | |
756 | +#ifdef HAVE_STDLIB_H | |
757 | +#include <stdlib.h> | |
758 | +#endif | |
759 | + | |
760 | +#include <gst/gst.h> | |
761 | +#include <gtk/gtk.h> | |
762 | + | |
763 | +#include <libxfce4util/libxfce4util.h> | |
764 | +#include <libxfce4ui/libxfce4ui.h> | |
765 | +#include <xfconf/xfconf.h> | |
766 | + | |
767 | +#include "libxfce4mixer/libxfce4mixer.h" | |
768 | + | |
769 | +#include "xfce-mixer-application.h" | |
770 | +#include "xfce-mixer-window.h" | |
771 | + | |
772 | + | |
773 | + | |
774 | +static void xfce_mixer_application_dispose (GObject *object); | |
775 | +static void xfce_mixer_application_finalize (GObject *object); | |
776 | +static void xfce_mixer_application_startup (GApplication *app); | |
777 | +static void xfce_mixer_application_activate (GApplication *app); | |
778 | +static void xfce_mixer_application_shutdown (GApplication *app); | |
779 | +static gint xfce_mixer_application_handle_local_options (GApplication *app, | |
780 | + GVariantDict *options, | |
781 | + gpointer user_data); | |
782 | + | |
783 | + | |
784 | + | |
785 | +struct _XfceMixerApplicationClass | |
786 | +{ | |
787 | + GtkApplicationClass __parent__; | |
788 | +}; | |
789 | + | |
790 | +struct _XfceMixerApplication | |
791 | +{ | |
792 | + GtkApplication __parent__; | |
793 | + | |
794 | + GtkWidget *main_window; | |
795 | +}; | |
796 | + | |
797 | + | |
798 | + | |
799 | +G_DEFINE_TYPE (XfceMixerApplication, xfce_mixer_application, GTK_TYPE_APPLICATION) | |
800 | + | |
801 | + | |
802 | + | |
803 | +static gboolean debug_mode = FALSE; | |
804 | +static gboolean show_version = FALSE; | |
805 | + | |
806 | +static GOptionEntry option_entries[] = | |
807 | +{ | |
808 | + { "debug", 'd', 0, G_OPTION_ARG_NONE, &debug_mode, N_("Enable debugging output"), NULL }, | |
809 | + { "version", 'V', 0, G_OPTION_ARG_NONE, &show_version, N_("Show version and exit"), NULL }, | |
810 | + { NULL, 0, 0, 0, NULL, NULL, NULL } | |
811 | +}; | |
812 | + | |
813 | + | |
814 | + | |
815 | +static void | |
816 | +xfce_mixer_application_class_init (XfceMixerApplicationClass *klass) | |
817 | +{ | |
818 | + GObjectClass *gobject_class; | |
819 | + GApplicationClass *g_application_class; | |
820 | + | |
821 | + gobject_class = G_OBJECT_CLASS (klass); | |
822 | + gobject_class->dispose = xfce_mixer_application_dispose; | |
823 | + gobject_class->finalize = xfce_mixer_application_finalize; | |
824 | + | |
825 | + g_application_class = G_APPLICATION_CLASS (klass); | |
826 | + g_application_class->startup = xfce_mixer_application_startup; | |
827 | + g_application_class->activate = xfce_mixer_application_activate; | |
828 | + g_application_class->shutdown = xfce_mixer_application_shutdown; | |
829 | +} | |
830 | + | |
831 | + | |
832 | + | |
833 | +static void | |
834 | +xfce_mixer_application_init (XfceMixerApplication *app) | |
835 | +{ | |
836 | + app->main_window = NULL; | |
837 | + | |
838 | + g_application_add_main_option_entries (G_APPLICATION (app), option_entries); | |
839 | + g_application_add_option_group (G_APPLICATION (app), gst_init_get_option_group ()); | |
840 | + | |
841 | + g_signal_connect (app, "handle-local-options", G_CALLBACK (xfce_mixer_application_handle_local_options), NULL); | |
842 | +} | |
843 | + | |
844 | + | |
845 | + | |
846 | +static void | |
847 | +xfce_mixer_application_dispose (GObject *object) | |
848 | +{ | |
849 | + (*G_OBJECT_CLASS (xfce_mixer_application_parent_class)->dispose) (object); | |
850 | +} | |
851 | + | |
852 | + | |
853 | + | |
854 | +static void | |
855 | +xfce_mixer_application_finalize (GObject *object) | |
856 | +{ | |
857 | + (*G_OBJECT_CLASS (xfce_mixer_application_parent_class)->finalize) (object); | |
858 | +} | |
859 | + | |
860 | + | |
861 | + | |
862 | +static void | |
863 | +xfce_mixer_application_startup (GApplication *app) | |
864 | +{ | |
865 | + GError *error = NULL; | |
866 | + | |
867 | + (*G_APPLICATION_CLASS (xfce_mixer_application_parent_class)->startup) (app); | |
868 | + | |
869 | + /* Initialize Xfconf */ | |
870 | + if (G_UNLIKELY (!xfconf_init (&error))) | |
871 | + { | |
872 | + if (G_LIKELY (error != NULL)) | |
873 | + { | |
874 | + g_printerr (_("xfce4-mixer: Failed to initialize xfconf: %s\n"), error->message); | |
875 | + g_error_free (error); | |
876 | + } | |
877 | + | |
878 | + exit (EXIT_FAILURE); | |
879 | + } | |
880 | + | |
881 | + /* Initialize the mixer library */ | |
882 | + xfce_mixer_init (); | |
883 | + | |
884 | + /* Use volume control icon for all mixer windows */ | |
885 | + gtk_window_set_default_icon_name ("multimedia-volume-control"); | |
886 | + | |
887 | + /* Warn users if there were no sound cards detected by GStreamer */ | |
888 | + if (G_UNLIKELY (g_list_length (xfce_mixer_get_cards ()) <= 0)) | |
889 | + { | |
890 | + xfce_dialog_show_error (NULL, | |
891 | + NULL, | |
892 | + _("GStreamer was unable to detect any sound devices. " | |
893 | + "Some sound system specific GStreamer packages may " | |
894 | + "be missing. It may also be a permissions problem.")); | |
895 | + exit (EXIT_FAILURE); | |
896 | + } | |
897 | + | |
898 | + /* Initialize debugging code */ | |
899 | + xfce_mixer_debug_init (G_LOG_DOMAIN, debug_mode); | |
900 | + | |
901 | + xfce_mixer_debug ("xfce4-mixer version " VERSION " starting up"); | |
902 | + | |
903 | + if (debug_mode) | |
904 | + xfce_mixer_dump_gst_data (); | |
905 | +} | |
906 | + | |
907 | + | |
908 | + | |
909 | +static void | |
910 | +xfce_mixer_application_activate (GApplication *app_) | |
911 | +{ | |
912 | + XfceMixerApplication *app = XFCE_MIXER_APPLICATION (app_); | |
913 | + | |
914 | + /* Create the mixer window */ | |
915 | + if (app->main_window == NULL) | |
916 | + app->main_window = xfce_mixer_window_new (app_); | |
917 | + | |
918 | + /* Display the mixer window */ | |
919 | + gtk_window_present (GTK_WINDOW (app->main_window)); | |
920 | +} | |
921 | + | |
922 | + | |
923 | + | |
924 | +static void | |
925 | +xfce_mixer_application_shutdown (GApplication *app) | |
926 | +{ | |
927 | + /* Shutdown the mixer library */ | |
928 | + xfce_mixer_shutdown (); | |
929 | + | |
930 | + /* Shutdown Xfconf */ | |
931 | + xfconf_shutdown (); | |
932 | + | |
933 | + (*G_APPLICATION_CLASS (xfce_mixer_application_parent_class)->shutdown) (app); | |
934 | +} | |
935 | + | |
936 | + | |
937 | + | |
938 | +static gint | |
939 | +xfce_mixer_application_handle_local_options (GApplication *app, | |
940 | + GVariantDict *options, | |
941 | + gpointer user_data) | |
942 | +{ | |
943 | + if (show_version) | |
944 | + { | |
945 | + g_print ("xfce4-mixer " VERSION "\n"); | |
946 | + return EXIT_SUCCESS; | |
947 | + } | |
948 | + | |
949 | + return -1; | |
950 | +} | |
951 | + | |
952 | + | |
953 | + | |
954 | +GApplication* | |
955 | +xfce_mixer_application_new (void) | |
956 | +{ | |
957 | + XfceMixerApplication *app; | |
958 | + | |
959 | + app = g_object_new (TYPE_XFCE_MIXER_APPLICATION, "application-id", "org.xfce.xfce4-mixer", NULL); | |
960 | + | |
961 | + return G_APPLICATION (app); | |
962 | +} | |
963 | diff --git a/xfce4-mixer/xfce-mixer-application.h b/xfce4-mixer/xfce-mixer-application.h | |
964 | new file mode 100644 | |
965 | index 0000000..e4a5534 | |
966 | --- /dev/null | |
967 | +++ b/xfce4-mixer/xfce-mixer-application.h | |
968 | @@ -0,0 +1,42 @@ | |
969 | +/* vi:set expandtab sw=2 sts=2: */ | |
970 | +/*- | |
971 | + * This program is free software; you can redistribute it and/or modify | |
972 | + * it under the terms of the GNU General Public License as published by | |
973 | + * the Free Software Foundation; either version 2 of the License, or | |
974 | + * (at your option) any later version. | |
975 | + * | |
976 | + * This program is distributed in the hope that it will be useful, | |
977 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
978 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
979 | + * General Public License for more details. | |
980 | + * | |
981 | + * You should have received a copy of the GNU General Public License | |
982 | + * along with this program; if not, write to the Free Software | |
983 | + * Foundation, Inc., 51 Franklin Street, Fifth Floor, | |
984 | + * Boston, MA 02110-1301, USA. | |
985 | + */ | |
986 | + | |
987 | +#ifndef __XFCE_MIXER_APPLICATION_H__ | |
988 | +#define __XFCE_MIXER_APPLICATION_H__ | |
989 | + | |
990 | +#include <gtk/gtk.h> | |
991 | + | |
992 | +G_BEGIN_DECLS | |
993 | + | |
994 | +typedef struct _XfceMixerApplicationClass XfceMixerApplicationClass; | |
995 | +typedef struct _XfceMixerApplication XfceMixerApplication; | |
996 | + | |
997 | +#define TYPE_XFCE_MIXER_APPLICATION (xfce_mixer_application_get_type ()) | |
998 | +#define XFCE_MIXER_APPLICATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_XFCE_MIXER_APPLICATION, XfceMixerApplication)) | |
999 | +#define XFCE_MIXER_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_XFCE_MIXER_APPLICATION, XfceMixerApplicationClass)) | |
1000 | +#define IS_XFCE_MIXER_APPLICATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_XFCE_MIXER_APPLICATION)) | |
1001 | +#define IS_XFCE_MIXER_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_XFCE_MIXER_APPLICATION)) | |
1002 | +#define XFCE_MIXER_APPLICATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_XFCE_MIXER_APPLICATION, XfceMixerApplicationClass)) | |
1003 | + | |
1004 | +GType xfce_mixer_application_get_type (void) G_GNUC_CONST; | |
1005 | + | |
1006 | +GApplication *xfce_mixer_application_new (void); | |
1007 | + | |
1008 | +G_END_DECLS | |
1009 | + | |
1010 | +#endif /* !__XFCE_MIXER_APPLICATION_H__ */ | |
1011 | diff --git a/xfce4-mixer/xfce-mixer-container.c b/xfce4-mixer/xfce-mixer-container.c | |
1012 | index d59240a..560ee66 100644 | |
1013 | --- a/xfce4-mixer/xfce-mixer-container.c | |
1014 | +++ b/xfce4-mixer/xfce-mixer-container.c | |
1015 | @@ -216,15 +216,12 @@ xfce_mixer_container_create_contents (XfceMixerContainer *mixer_container) | |
1016 | GstMixerTrack *track; | |
1017 | const GList *iter; | |
1018 | const gchar *titles[4] = { N_("_Playback"), N_("C_apture"), N_("S_witches"), N_("_Options") }; | |
1019 | - GtkWidget *label_alignment; | |
1020 | - GtkWidget *option_alignment; | |
1021 | GtkWidget *track_widget; | |
1022 | GtkWidget *track_label_widget; | |
1023 | GtkWidget *labels[4]; | |
1024 | GtkWidget *scrollwins[4]; | |
1025 | GtkWidget *views[4]; | |
1026 | GtkWidget *last_separator[4] = { NULL, NULL, NULL, NULL }; | |
1027 | - GtkWidget *alignment; | |
1028 | GtkWidget *vbox; | |
1029 | GtkWidget *label1; | |
1030 | GtkWidget *label2; | |
1031 | @@ -248,16 +245,9 @@ xfce_mixer_container_create_contents (XfceMixerContainer *mixer_container) | |
1032 | gtk_container_set_border_width (GTK_CONTAINER (scrollwins[i]), 6); | |
1033 | gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwins[i]), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); | |
1034 | ||
1035 | - if (i < 2) | |
1036 | - views[i] = gtk_table_new (1, 2, FALSE); | |
1037 | - else | |
1038 | - views[i] = gtk_table_new (2, 1, FALSE); | |
1039 | - | |
1040 | - gtk_table_set_col_spacings (GTK_TABLE (views[i]), 12); | |
1041 | - gtk_table_set_row_spacings (GTK_TABLE (views[i]), 6); | |
1042 | - | |
1043 | - gtk_container_set_border_width (GTK_CONTAINER (views[i]), 6); | |
1044 | - gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrollwins[i]), views[i]); | |
1045 | + views[i] = gtk_grid_new (); | |
1046 | + g_object_set (G_OBJECT (views[i]), "row-spacing", 6, "column-spacing", 12, "border-width", 6, NULL); | |
1047 | + gtk_container_add (GTK_CONTAINER (scrollwins[i]), views[i]); | |
1048 | gtk_viewport_set_shadow_type (GTK_VIEWPORT (gtk_bin_get_child (GTK_BIN (scrollwins[i]))), GTK_SHADOW_NONE); | |
1049 | gtk_widget_show (views[i]); | |
1050 | gtk_widget_show (scrollwins[i]); | |
1051 | @@ -283,19 +273,17 @@ xfce_mixer_container_create_contents (XfceMixerContainer *mixer_container) | |
1052 | case XFCE_MIXER_TRACK_TYPE_PLAYBACK: | |
1053 | /* Create a regular volume control for this track */ | |
1054 | track_label_widget = gtk_label_new (track_label); | |
1055 | - gtk_table_attach (GTK_TABLE (views[0]), track_label_widget, | |
1056 | - num_children[0], num_children[0] + 1, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0); | |
1057 | + gtk_grid_attach (GTK_GRID (views[0]), track_label_widget, num_children[0], 0, 1, 1); | |
1058 | gtk_widget_show (track_label_widget); | |
1059 | track_widget = xfce_mixer_track_new (mixer_container->card, track); | |
1060 | - gtk_table_attach (GTK_TABLE (views[0]), track_widget, | |
1061 | - num_children[0], num_children[0] + 1, 1, 2, GTK_SHRINK, GTK_FILL|GTK_EXPAND, 0, 0); | |
1062 | + g_object_set (G_OBJECT (track_widget), "valign", GTK_ALIGN_FILL, "vexpand", TRUE, NULL); | |
1063 | + gtk_grid_attach (GTK_GRID (views[0]), track_widget, num_children[0], 1, 1, 1); | |
1064 | gtk_widget_show (track_widget); | |
1065 | num_children[0]++; | |
1066 | ||
1067 | /* Append a separator. The last one will be destroyed later */ | |
1068 | - last_separator[0] = gtk_vseparator_new (); | |
1069 | - gtk_table_attach (GTK_TABLE (views[0]), last_separator[0], | |
1070 | - num_children[0], num_children[0] + 1, 0, 2, GTK_SHRINK, GTK_FILL|GTK_EXPAND, 0, 0); | |
1071 | + last_separator[0] = gtk_separator_new (GTK_ORIENTATION_VERTICAL); | |
1072 | + gtk_grid_attach (GTK_GRID (views[0]), last_separator[0], num_children[0], 0, 1, 2); | |
1073 | gtk_widget_show (last_separator[0]); | |
1074 | num_children[0]++; | |
1075 | ||
1076 | @@ -306,19 +294,17 @@ xfce_mixer_container_create_contents (XfceMixerContainer *mixer_container) | |
1077 | case XFCE_MIXER_TRACK_TYPE_CAPTURE: | |
1078 | /* Create a regular volume control for this track */ | |
1079 | track_label_widget = gtk_label_new (track_label); | |
1080 | - gtk_table_attach (GTK_TABLE (views[1]), track_label_widget, | |
1081 | - num_children[1], num_children[1] + 1, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0); | |
1082 | + gtk_grid_attach (GTK_GRID (views[1]), track_label_widget, num_children[1], 0, 1, 1); | |
1083 | gtk_widget_show (track_label_widget); | |
1084 | track_widget = xfce_mixer_track_new (mixer_container->card, track); | |
1085 | - gtk_table_attach (GTK_TABLE (views[1]), track_widget, | |
1086 | - num_children[1], num_children[1] + 1, 1, 2, GTK_SHRINK, GTK_FILL|GTK_EXPAND, 0, 0); | |
1087 | + g_object_set (G_OBJECT (track_widget), "valign", GTK_ALIGN_FILL, "vexpand", TRUE, NULL); | |
1088 | + gtk_grid_attach (GTK_GRID (views[1]), track_widget, num_children[1], 1, 1, 1); | |
1089 | gtk_widget_show (track_widget); | |
1090 | num_children[1]++; | |
1091 | ||
1092 | /* Append a separator. The last one will be destroyed later */ | |
1093 | - last_separator[1] = gtk_vseparator_new (); | |
1094 | - gtk_table_attach (GTK_TABLE (views[1]), last_separator[1], | |
1095 | - num_children[1], num_children[1] + 1, 0, 2, GTK_SHRINK, GTK_FILL|GTK_EXPAND, 0, 0); | |
1096 | + last_separator[1] = gtk_separator_new (GTK_ORIENTATION_VERTICAL); | |
1097 | + gtk_grid_attach (GTK_GRID (views[1]), last_separator[1], num_children[1], 0, 1, 2); | |
1098 | gtk_widget_show (last_separator[1]); | |
1099 | num_children[1]++; | |
1100 | ||
1101 | @@ -328,8 +314,8 @@ xfce_mixer_container_create_contents (XfceMixerContainer *mixer_container) | |
1102 | ||
1103 | case XFCE_MIXER_TRACK_TYPE_SWITCH: | |
1104 | track_widget = xfce_mixer_switch_new (mixer_container->card, track); | |
1105 | - gtk_table_attach (GTK_TABLE (views[2]), track_widget, | |
1106 | - 0, 1, num_children[2], num_children[2] + 1, GTK_FILL|GTK_EXPAND, GTK_SHRINK, 0, 0); | |
1107 | + g_object_set (G_OBJECT (track_widget), "halign", GTK_ALIGN_FILL, "hexpand", TRUE, NULL); | |
1108 | + gtk_grid_attach (GTK_GRID (views[2]), track_widget, 0, num_children[2], 1, 1); | |
1109 | gtk_widget_show (track_widget); | |
1110 | ||
1111 | num_children[2]++; | |
1112 | @@ -339,24 +325,16 @@ xfce_mixer_container_create_contents (XfceMixerContainer *mixer_container) | |
1113 | break; | |
1114 | ||
1115 | case XFCE_MIXER_TRACK_TYPE_OPTIONS: | |
1116 | - label_alignment = gtk_alignment_new (0, 0, 0, 0); | |
1117 | - gtk_table_attach (GTK_TABLE (views[3]), label_alignment, | |
1118 | - 0, 1, num_children[3], num_children[3] + 1, GTK_FILL, GTK_SHRINK, 0, 0); | |
1119 | - gtk_widget_show (label_alignment); | |
1120 | - | |
1121 | option_track_label = g_strdup_printf ("%s:", track_label); | |
1122 | track_label_widget = gtk_label_new (option_track_label); | |
1123 | - gtk_container_add (GTK_CONTAINER (label_alignment), track_label_widget); | |
1124 | + g_object_set (G_OBJECT (track_label_widget), "halign", GTK_ALIGN_FILL, NULL); | |
1125 | + gtk_grid_attach (GTK_GRID (views[3]), track_label_widget, 0, num_children[3], 1, 1); | |
1126 | gtk_widget_show (track_label_widget); | |
1127 | g_free (option_track_label); | |
1128 | ||
1129 | - option_alignment = gtk_alignment_new (0, 0, 1.0f, 0); | |
1130 | - gtk_table_attach (GTK_TABLE (views[3]), option_alignment, | |
1131 | - 1, 2, num_children[3], num_children[3] + 1, GTK_FILL|GTK_EXPAND, GTK_SHRINK, 0, 0); | |
1132 | - gtk_widget_show (option_alignment); | |
1133 | - | |
1134 | track_widget = xfce_mixer_option_new (mixer_container->card, track); | |
1135 | - gtk_container_add (GTK_CONTAINER (option_alignment), track_widget); | |
1136 | + g_object_set (G_OBJECT (track_widget), "halign", GTK_ALIGN_FILL, "hexpand", TRUE, NULL); | |
1137 | + gtk_grid_attach (GTK_GRID (views[3]), track_widget, 1, num_children[3], 1, 1); | |
1138 | gtk_widget_show (track_widget); | |
1139 | ||
1140 | num_children[3]++; | |
1141 | @@ -390,30 +368,24 @@ xfce_mixer_container_create_contents (XfceMixerContainer *mixer_container) | |
1142 | label1 = gtk_label_new (_("No controls visible")); | |
1143 | gtk_widget_show (label1); | |
1144 | ||
1145 | - alignment = gtk_alignment_new (0.5, 0.5, 0, 0); | |
1146 | - gtk_widget_show (alignment); | |
1147 | - | |
1148 | - vbox = gtk_vbox_new (6, FALSE); | |
1149 | - gtk_container_add (GTK_CONTAINER (alignment), vbox); | |
1150 | + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); | |
1151 | + g_object_set (G_OBJECT (vbox), "halign", GTK_ALIGN_CENTER, "hexpand", TRUE, "valign", GTK_ALIGN_CENTER, "vexpand", TRUE, | |
1152 | + "border-width", 6, NULL); | |
1153 | gtk_widget_show (vbox); | |
1154 | ||
1155 | label2 = gtk_label_new (NULL); | |
1156 | gtk_label_set_markup (GTK_LABEL (label2), _("<span weight=\"bold\" size=\"larger\">No controls visible</span>")); | |
1157 | - gtk_label_set_max_width_chars (GTK_LABEL (label2), 80); | |
1158 | - gtk_label_set_line_wrap (GTK_LABEL (label2), TRUE); | |
1159 | - gtk_misc_set_alignment (GTK_MISC (label2), 0.0, 0.5); | |
1160 | + g_object_set (G_OBJECT (label2), "max-width-chars", 80, "xalign", 0.0, "wrap", TRUE, NULL); | |
1161 | gtk_box_pack_start (GTK_BOX (vbox), label2, FALSE, TRUE, 0); | |
1162 | gtk_widget_show (label2); | |
1163 | ||
1164 | label3 = gtk_label_new (NULL); | |
1165 | gtk_label_set_markup (GTK_LABEL (label3), _("In order to toggle the visibility of mixer controls, open the <b>\"Select Controls\"</b> dialog.")); | |
1166 | - gtk_label_set_max_width_chars (GTK_LABEL (label3), 80); | |
1167 | - gtk_label_set_line_wrap (GTK_LABEL (label3), TRUE); | |
1168 | - gtk_misc_set_alignment (GTK_MISC (label3), 0.0, 0.5); | |
1169 | + g_object_set (G_OBJECT (label3), "max-width-chars", 80, "xalign", 0.0, "wrap", TRUE, NULL); | |
1170 | gtk_box_pack_start (GTK_BOX (vbox), label3, FALSE, TRUE, 0); | |
1171 | gtk_widget_show (label3); | |
1172 | ||
1173 | - gtk_notebook_append_page (GTK_NOTEBOOK (mixer_container), alignment, label1); | |
1174 | + gtk_notebook_append_page (GTK_NOTEBOOK (mixer_container), vbox, label1); | |
1175 | } | |
1176 | ||
1177 | g_object_unref (preferences); | |
1178 | diff --git a/xfce4-mixer/xfce-mixer-controls-dialog.c b/xfce4-mixer/xfce-mixer-controls-dialog.c | |
1179 | index dd79a77..92886fb 100644 | |
1180 | --- a/xfce4-mixer/xfce-mixer-controls-dialog.c | |
1181 | +++ b/xfce4-mixer/xfce-mixer-controls-dialog.c | |
1182 | @@ -119,7 +119,9 @@ xfce_mixer_controls_dialog_init (XfceMixerControlsDialog *dialog) | |
1183 | ||
1184 | xfce_titled_dialog_set_subtitle (XFCE_TITLED_DIALOG (dialog), _("Select which controls should be visible")); | |
1185 | ||
1186 | - button = gtk_button_new_from_stock (GTK_STOCK_CLOSE); | |
1187 | + button = gtk_button_new_with_mnemonic (_("_Close")); | |
1188 | + gtk_button_set_image (GTK_BUTTON (button), | |
1189 | + gtk_image_new_from_icon_name ("window-close", GTK_ICON_SIZE_BUTTON)); | |
1190 | gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, GTK_RESPONSE_CLOSE); | |
1191 | gtk_widget_show (button); | |
1192 | } | |
1193 | @@ -191,14 +193,15 @@ xfce_mixer_controls_dialog_create_contents (XfceMixerControlsDialog *dialog) | |
1194 | dialog->store = gtk_list_store_new (2, G_TYPE_BOOLEAN, G_TYPE_STRING); | |
1195 | ||
1196 | dialog->frame = gtk_frame_new (NULL); | |
1197 | - gtk_container_set_border_width (GTK_CONTAINER (dialog->frame), 6); | |
1198 | + g_object_set (G_OBJECT (dialog->frame), "margin-top", 6, "margin-bottom", 6, NULL); | |
1199 | gtk_frame_set_shadow_type (GTK_FRAME (dialog->frame), GTK_SHADOW_NONE); | |
1200 | - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), dialog->frame); | |
1201 | + gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), dialog->frame); | |
1202 | gtk_widget_show (dialog->frame); | |
1203 | ||
1204 | scrollwin = gtk_scrolled_window_new (NULL, NULL); | |
1205 | gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); | |
1206 | gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_IN); | |
1207 | + g_object_set (G_OBJECT (scrollwin), "halign", GTK_ALIGN_FILL, "hexpand", TRUE, "valign", GTK_ALIGN_FILL, "vexpand", TRUE, NULL); | |
1208 | gtk_container_add (GTK_CONTAINER (dialog->frame), scrollwin); | |
1209 | gtk_widget_show (scrollwin); | |
1210 | ||
1211 | diff --git a/xfce4-mixer/xfce-mixer-option.c b/xfce4-mixer/xfce-mixer-option.c | |
1212 | index d16b766..969baad 100644 | |
1213 | --- a/xfce4-mixer/xfce-mixer-option.c | |
1214 | +++ b/xfce4-mixer/xfce-mixer-option.c | |
1215 | @@ -189,15 +189,15 @@ static void | |
1216 | xfce_mixer_option_changed (GtkComboBox *combo, | |
1217 | XfceMixerOption *option) | |
1218 | { | |
1219 | - gchar *active_option; | |
1220 | + GtkTreeIter iter; | |
1221 | + gchar *active_option; | |
1222 | ||
1223 | if (G_UNLIKELY (option->ignore_signals)) | |
1224 | return; | |
1225 | ||
1226 | - active_option = gtk_combo_box_get_active_text (combo); | |
1227 | - | |
1228 | - if (G_LIKELY (active_option != NULL)) | |
1229 | + if (G_LIKELY (gtk_combo_box_get_active_iter (combo, &iter))) | |
1230 | { | |
1231 | + gtk_tree_model_get (GTK_TREE_MODEL (option->list_store), &iter, OPTION_COLUMN, &active_option, -1); | |
1232 | gst_mixer_set_option (GST_MIXER (option->card), GST_MIXER_OPTIONS (option->track), | |
1233 | active_option); | |
1234 | g_free (active_option); | |
1235 | diff --git a/xfce4-mixer/xfce-mixer-track.c b/xfce4-mixer/xfce-mixer-track.c | |
1236 | index a7442ed..831d127 100644 | |
1237 | --- a/xfce4-mixer/xfce-mixer-track.c | |
1238 | +++ b/xfce4-mixer/xfce-mixer-track.c | |
1239 | @@ -45,8 +45,8 @@ | |
1240 | ||
1241 | static void xfce_mixer_track_dispose (GObject *object); | |
1242 | static void xfce_mixer_track_finalize (GObject *object); | |
1243 | -static gboolean xfce_mixer_track_lock_button_line_expose_event (GtkWidget *widget, | |
1244 | - GdkEventExpose *event, | |
1245 | +static gboolean xfce_mixer_track_lock_button_line_draw (GtkWidget *widget, | |
1246 | + cairo_t *cr, | |
1247 | gpointer user_data); | |
1248 | static void xfce_mixer_track_create_contents (XfceMixerTrack *track); | |
1249 | static void xfce_mixer_track_fader_changed (GtkRange *range, | |
1250 | @@ -83,7 +83,7 @@ struct _XfceMixerTrack | |
1251 | ||
1252 | ||
1253 | ||
1254 | -G_DEFINE_TYPE (XfceMixerTrack, xfce_mixer_track, GTK_TYPE_VBOX) | |
1255 | +G_DEFINE_TYPE (XfceMixerTrack, xfce_mixer_track, GTK_TYPE_BOX) | |
1256 | ||
1257 | ||
1258 | ||
1259 | @@ -138,7 +138,7 @@ xfce_mixer_track_new (GstElement *card, | |
1260 | g_return_val_if_fail (GST_IS_MIXER (card), NULL); | |
1261 | g_return_val_if_fail (GST_IS_MIXER_TRACK (gst_track), NULL); | |
1262 | ||
1263 | - track = g_object_new (TYPE_XFCE_MIXER_TRACK, NULL); | |
1264 | + track = g_object_new (TYPE_XFCE_MIXER_TRACK, "orientation", GTK_ORIENTATION_VERTICAL, NULL); | |
1265 | track->card = card; | |
1266 | track->gst_track = gst_track; | |
1267 | ||
1268 | @@ -150,32 +150,27 @@ xfce_mixer_track_new (GstElement *card, | |
1269 | ||
1270 | ||
1271 | static gboolean | |
1272 | -xfce_mixer_track_lock_button_line_expose_event (GtkWidget *widget, | |
1273 | - GdkEventExpose *event, | |
1274 | - gpointer user_data) | |
1275 | +xfce_mixer_track_lock_button_line_draw (GtkWidget *widget, | |
1276 | + cairo_t *cr, | |
1277 | + gpointer user_data) | |
1278 | { | |
1279 | GtkPositionType position = GPOINTER_TO_INT (user_data); | |
1280 | GtkAllocation allocation; | |
1281 | - cairo_t *cr; | |
1282 | - GtkStyle *style = gtk_widget_get_style (widget); | |
1283 | + GtkStyleContext *style_context = gtk_widget_get_style_context (widget); | |
1284 | GdkPoint points[3]; | |
1285 | double line_width = 2.0; | |
1286 | - | |
1287 | - cr = gdk_cairo_create (gtk_widget_get_window (widget)); | |
1288 | + GdkRGBA fg_color; | |
1289 | ||
1290 | gtk_widget_get_allocation (widget, &allocation); | |
1291 | if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) | |
1292 | position = (position == GTK_POS_LEFT) ? GTK_POS_RIGHT : GTK_POS_LEFT; | |
1293 | ||
1294 | - /* Only refresh regions where it is necessary */ | |
1295 | - gdk_cairo_region (cr, event->region); | |
1296 | - cairo_clip (cr); | |
1297 | - | |
1298 | /* | |
1299 | * Draw an L-shaped line from the right/left center to the top middle of the | |
1300 | * allocation | |
1301 | */ | |
1302 | - gdk_cairo_set_source_color (cr, &style->fg[GTK_STATE_NORMAL]); | |
1303 | + gtk_style_context_get_color (style_context, GTK_STATE_FLAG_NORMAL, &fg_color); | |
1304 | + gdk_cairo_set_source_rgba (cr, &fg_color); | |
1305 | cairo_set_line_width(cr, line_width); | |
1306 | if (position == GTK_POS_RIGHT) | |
1307 | { | |
1308 | @@ -200,8 +195,6 @@ xfce_mixer_track_lock_button_line_expose_event (GtkWidget *widget, | |
1309 | cairo_line_to (cr, points[2].x, points[2].y); | |
1310 | cairo_stroke (cr); | |
1311 | ||
1312 | - cairo_destroy (cr); | |
1313 | - | |
1314 | return TRUE; | |
1315 | } | |
1316 | ||
1317 | @@ -216,7 +209,6 @@ xfce_mixer_track_create_contents (XfceMixerTrack *track) | |
1318 | const gchar *track_label; | |
1319 | gchar *tooltip_text; | |
1320 | gdouble step; | |
1321 | - GtkWidget *faders_alignment; | |
1322 | GtkWidget *faders_vbox; | |
1323 | GtkWidget *faders_hbox; | |
1324 | GtkWidget *lock_button_hbox; | |
1325 | @@ -224,7 +216,6 @@ xfce_mixer_track_create_contents (XfceMixerTrack *track) | |
1326 | GtkWidget *lock_button_line1; | |
1327 | GtkWidget *lock_button_line2; | |
1328 | GtkWidget *image; | |
1329 | - GtkWidget *buttons_alignment; | |
1330 | GtkWidget *buttons_hbox; | |
1331 | GtkRequisition lock_button_hbox_requisition; | |
1332 | ||
1333 | @@ -239,15 +230,12 @@ xfce_mixer_track_create_contents (XfceMixerTrack *track) | |
1334 | gtk_box_set_spacing (GTK_BOX (track), 6); | |
1335 | ||
1336 | /* Center and do not expand faders and lock button */ | |
1337 | - faders_alignment = gtk_alignment_new (0.5, 1.0, 0, 1.0); | |
1338 | - gtk_box_pack_start (GTK_BOX (track), faders_alignment, TRUE, TRUE, 0); | |
1339 | - gtk_widget_show (faders_alignment); | |
1340 | - | |
1341 | - faders_vbox = gtk_vbox_new (FALSE, 6); | |
1342 | - gtk_container_add (GTK_CONTAINER (faders_alignment), faders_vbox); | |
1343 | + faders_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); | |
1344 | + g_object_set (G_OBJECT (faders_vbox), "halign", GTK_ALIGN_CENTER, "valign", GTK_ALIGN_FILL, "vexpand", TRUE, NULL); | |
1345 | + gtk_box_pack_start (GTK_BOX (track), faders_vbox, TRUE, TRUE, 0); | |
1346 | gtk_widget_show (faders_vbox); | |
1347 | ||
1348 | - faders_hbox = gtk_hbox_new (TRUE, 6); | |
1349 | + faders_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); | |
1350 | gtk_box_pack_start (GTK_BOX (faders_vbox), faders_hbox, TRUE, TRUE, 0); | |
1351 | gtk_widget_show (faders_hbox); | |
1352 | ||
1353 | @@ -256,7 +244,7 @@ xfce_mixer_track_create_contents (XfceMixerTrack *track) | |
1354 | { | |
1355 | tooltip_text = g_strdup_printf (_("Volume of channel %d on %s"), channel, track_label); | |
1356 | ||
1357 | - fader = gtk_vscale_new_with_range (track->gst_track->min_volume, track->gst_track->max_volume, step); | |
1358 | + fader = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL, track->gst_track->min_volume, track->gst_track->max_volume, step); | |
1359 | gtk_scale_set_draw_value (GTK_SCALE (fader), FALSE); | |
1360 | gtk_range_set_inverted (GTK_RANGE (fader), TRUE); | |
1361 | gtk_range_set_value (GTK_RANGE (fader), volumes[channel]); | |
1362 | @@ -278,7 +266,7 @@ xfce_mixer_track_create_contents (XfceMixerTrack *track) | |
1363 | } | |
1364 | ||
1365 | /* Create lock button with lines */ | |
1366 | - lock_button_hbox = gtk_hbox_new (FALSE, 0); | |
1367 | + lock_button_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); | |
1368 | gtk_box_pack_start (GTK_BOX (faders_vbox), lock_button_hbox, FALSE, FALSE, 0); | |
1369 | gtk_widget_show (lock_button_hbox); | |
1370 | ||
1371 | @@ -286,7 +274,7 @@ xfce_mixer_track_create_contents (XfceMixerTrack *track) | |
1372 | lock_button_line1 = gtk_drawing_area_new (); | |
1373 | gtk_widget_set_size_request (lock_button_line1, 12, 8); | |
1374 | gtk_box_pack_start (GTK_BOX (lock_button_hbox), lock_button_line1, TRUE, TRUE, 0); | |
1375 | - g_signal_connect (G_OBJECT (lock_button_line1), "expose-event", G_CALLBACK (xfce_mixer_track_lock_button_line_expose_event), GINT_TO_POINTER (GTK_POS_LEFT)); | |
1376 | + g_signal_connect (G_OBJECT (lock_button_line1), "draw", G_CALLBACK (xfce_mixer_track_lock_button_line_draw), GINT_TO_POINTER (GTK_POS_LEFT)); | |
1377 | gtk_widget_show (lock_button_line1); | |
1378 | ||
1379 | /* Lock button */ | |
1380 | @@ -309,7 +297,7 @@ xfce_mixer_track_create_contents (XfceMixerTrack *track) | |
1381 | lock_button_line2 = gtk_drawing_area_new (); | |
1382 | gtk_widget_set_size_request (lock_button_line2, 12, 8); | |
1383 | gtk_box_pack_start (GTK_BOX (lock_button_hbox), lock_button_line2, TRUE, TRUE, 0); | |
1384 | - g_signal_connect (G_OBJECT (lock_button_line2), "expose-event", G_CALLBACK (xfce_mixer_track_lock_button_line_expose_event), GINT_TO_POINTER (GTK_POS_RIGHT)); | |
1385 | + g_signal_connect (G_OBJECT (lock_button_line2), "draw", G_CALLBACK (xfce_mixer_track_lock_button_line_draw), GINT_TO_POINTER (GTK_POS_RIGHT)); | |
1386 | gtk_widget_show (lock_button_line2); | |
1387 | ||
1388 | /* | |
1389 | @@ -318,20 +306,17 @@ xfce_mixer_track_create_contents (XfceMixerTrack *track) | |
1390 | */ | |
1391 | if (track->gst_track->num_channels < 2) | |
1392 | { | |
1393 | - gtk_widget_size_request (lock_button_hbox, &lock_button_hbox_requisition); | |
1394 | + gtk_widget_get_preferred_size (lock_button_hbox, NULL, &lock_button_hbox_requisition); | |
1395 | gtk_widget_destroy (lock_button_hbox); | |
1396 | - lock_button_hbox = gtk_hbox_new (FALSE, 0); | |
1397 | + lock_button_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); | |
1398 | gtk_widget_set_size_request (lock_button_hbox, lock_button_hbox_requisition.width, lock_button_hbox_requisition.height); | |
1399 | gtk_box_pack_start (GTK_BOX (faders_vbox), lock_button_hbox, FALSE, FALSE, 0); | |
1400 | gtk_widget_show (lock_button_hbox); | |
1401 | } | |
1402 | ||
1403 | - buttons_alignment = gtk_alignment_new (0.5, 1.0, 0, 0); | |
1404 | - gtk_box_pack_start (GTK_BOX (track), buttons_alignment, FALSE, FALSE, 0); | |
1405 | - gtk_widget_show (buttons_alignment); | |
1406 | - | |
1407 | - buttons_hbox = gtk_hbox_new (FALSE, 12); | |
1408 | - gtk_container_add (GTK_CONTAINER (buttons_alignment), buttons_hbox); | |
1409 | + buttons_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); | |
1410 | + g_object_set (G_OBJECT (buttons_hbox), "halign", GTK_ALIGN_CENTER, "valign", GTK_ALIGN_END, NULL); | |
1411 | + gtk_box_pack_start (GTK_BOX (track), buttons_hbox, FALSE, FALSE, 0); | |
1412 | gtk_widget_show (buttons_hbox); | |
1413 | ||
1414 | /* Mute button for playback tracks */ | |
1415 | diff --git a/xfce4-mixer/xfce-mixer-window.c b/xfce4-mixer/xfce-mixer-window.c | |
1416 | index 7f9a9e9..248236b 100644 | |
1417 | --- a/xfce4-mixer/xfce-mixer-window.c | |
1418 | +++ b/xfce4-mixer/xfce-mixer-window.c | |
1419 | @@ -40,22 +40,26 @@ | |
1420 | ||
1421 | static void xfce_mixer_window_dispose (GObject *object); | |
1422 | static void xfce_mixer_window_finalize (GObject *object); | |
1423 | +static void xfce_mixer_window_size_allocate (GtkWidget *widget, | |
1424 | + GtkAllocation *allocation); | |
1425 | +static gboolean xfce_mixer_window_state_event (GtkWidget *widget, | |
1426 | + GdkEventWindowState *event); | |
1427 | +static void xfce_mixer_window_destroy (GtkWidget *widget); | |
1428 | static void xfce_mixer_window_soundcard_changed (XfceMixerCardCombo *combo, | |
1429 | GstElement *card, | |
1430 | XfceMixerWindow *window); | |
1431 | static void xfce_mixer_window_soundcard_property_changed (XfceMixerWindow *window, | |
1432 | GParamSpec *pspec, | |
1433 | GObject *object); | |
1434 | -static void xfce_mixer_window_action_select_controls (GtkAction *action, | |
1435 | - XfceMixerWindow *window); | |
1436 | +static void xfce_mixer_window_action_select_controls (GSimpleAction *action, | |
1437 | + GVariant *parameter, | |
1438 | + gpointer user_data); | |
1439 | static void xfce_mixer_window_controls_property_changed (XfceMixerWindow *window, | |
1440 | GParamSpec *pspec, | |
1441 | GObject *object); | |
1442 | -static void xfce_mixer_window_close (GtkAction *action, | |
1443 | - XfceMixerWindow *window); | |
1444 | -static gboolean xfce_mixer_window_closed (GtkWidget *window, | |
1445 | - GdkEvent *event, | |
1446 | - XfceMixerWindow *mixer_window); | |
1447 | +static void xfce_mixer_window_close (GSimpleAction *action, | |
1448 | + GVariant *parameter, | |
1449 | + gpointer user_data); | |
1450 | static void xfce_mixer_window_update_contents (XfceMixerWindow *window); | |
1451 | ||
1452 | ||
1453 | @@ -71,7 +75,11 @@ struct _XfceMixerWindow | |
1454 | ||
1455 | XfceMixerPreferences *preferences; | |
1456 | ||
1457 | - GtkActionGroup *action_group; | |
1458 | + /* Current window state */ | |
1459 | + gint current_width; | |
1460 | + gint current_height; | |
1461 | + gboolean is_maximized; | |
1462 | + gboolean is_fullscreen; | |
1463 | ||
1464 | GtkWidget *soundcard_combo; | |
1465 | ||
1466 | @@ -86,12 +94,10 @@ struct _XfceMixerWindow | |
1467 | ||
1468 | ||
1469 | ||
1470 | -static const GtkActionEntry action_entries[] = | |
1471 | +static const GActionEntry action_entries[] = | |
1472 | { | |
1473 | - { "quit", GTK_STOCK_QUIT, N_ ("_Quit"), "<Control>q", N_ ("Exit the mixer"), | |
1474 | - G_CALLBACK (xfce_mixer_window_close) }, | |
1475 | - { "select-controls", NULL, N_ ("_Select Controls..."), "<Control>s", N_ ("Select which controls are displayed"), | |
1476 | - G_CALLBACK (xfce_mixer_window_action_select_controls) }, | |
1477 | + { "quit", &xfce_mixer_window_close, NULL, NULL, NULL }, | |
1478 | + { "select-controls", &xfce_mixer_window_action_select_controls, NULL, NULL, NULL }, | |
1479 | }; | |
1480 | ||
1481 | ||
1482 | @@ -103,11 +109,17 @@ G_DEFINE_TYPE (XfceMixerWindow, xfce_mixer_window, XFCE_TYPE_TITLED_DIALOG) | |
1483 | static void | |
1484 | xfce_mixer_window_class_init (XfceMixerWindowClass *klass) | |
1485 | { | |
1486 | - GObjectClass *gobject_class; | |
1487 | + GObjectClass *gobject_class; | |
1488 | + GtkWidgetClass *gtk_widget_class; | |
1489 | ||
1490 | gobject_class = G_OBJECT_CLASS (klass); | |
1491 | gobject_class->dispose = xfce_mixer_window_dispose; | |
1492 | gobject_class->finalize = xfce_mixer_window_finalize; | |
1493 | + | |
1494 | + gtk_widget_class = GTK_WIDGET_CLASS (klass); | |
1495 | + gtk_widget_class->size_allocate = xfce_mixer_window_size_allocate; | |
1496 | + gtk_widget_class->window_state_event = xfce_mixer_window_state_event; | |
1497 | + gtk_widget_class->destroy = xfce_mixer_window_destroy; | |
1498 | } | |
1499 | ||
1500 | ||
1501 | @@ -115,8 +127,7 @@ xfce_mixer_window_class_init (XfceMixerWindowClass *klass) | |
1502 | static void | |
1503 | xfce_mixer_window_init (XfceMixerWindow *window) | |
1504 | { | |
1505 | - GtkAccelGroup *accel_group; | |
1506 | - GtkAction *action; | |
1507 | + GApplication *app = g_application_get_default (); | |
1508 | GtkWidget *label; | |
1509 | GtkWidget *button; | |
1510 | GtkWidget *vbox; | |
1511 | @@ -124,15 +135,18 @@ xfce_mixer_window_init (XfceMixerWindow *window) | |
1512 | GtkWidget *bbox; | |
1513 | gchar *card_name; | |
1514 | GstElement *card; | |
1515 | - guint i; | |
1516 | - gint width; | |
1517 | - gint height; | |
1518 | + const gchar *select_controls_accels[] = { "<Control>s", NULL }; | |
1519 | + const gchar *quit_accels[] = { "<Control>q", NULL }; | |
1520 | ||
1521 | window->controls_dialog = NULL; | |
1522 | ||
1523 | window->preferences = xfce_mixer_preferences_get (); | |
1524 | ||
1525 | - g_object_get (window->preferences, "window-width", &width, "window-height", &height, "sound-card", &card_name, NULL); | |
1526 | + window->is_maximized = FALSE; | |
1527 | + window->is_fullscreen = FALSE; | |
1528 | + | |
1529 | + g_object_get (window->preferences, "window-width", &window->current_width, "window-height", &window->current_height, | |
1530 | + "sound-card", &card_name, NULL); | |
1531 | if (card_name != NULL) | |
1532 | card = xfce_mixer_get_card (card_name); | |
1533 | else | |
1534 | @@ -148,36 +162,21 @@ xfce_mixer_window_init (XfceMixerWindow *window) | |
1535 | gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_NORMAL); | |
1536 | gtk_window_set_icon_name (GTK_WINDOW (window), "multimedia-volume-control"); | |
1537 | gtk_window_set_title (GTK_WINDOW (window), _("Audio Mixer")); | |
1538 | - gtk_window_set_default_size (GTK_WINDOW (window), width, height); | |
1539 | + gtk_window_set_default_size (GTK_WINDOW (window), window->current_width, window->current_height); | |
1540 | gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); | |
1541 | - gtk_dialog_set_has_separator (GTK_DIALOG (window), FALSE); | |
1542 | xfce_titled_dialog_set_subtitle (XFCE_TITLED_DIALOG (window), _("Configure sound card(s) and control the volume of selected tracks")); | |
1543 | ||
1544 | - g_signal_connect (window, "delete-event", G_CALLBACK (xfce_mixer_window_closed), window); | |
1545 | - | |
1546 | - /* Quit mixer when the main window is closed */ | |
1547 | - g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (gtk_main_quit), NULL); | |
1548 | - | |
1549 | - /* Create window action group */ | |
1550 | - window->action_group = gtk_action_group_new ("XfceMixerWindow"); | |
1551 | - gtk_action_group_set_translation_domain (window->action_group, GETTEXT_PACKAGE); | |
1552 | - gtk_action_group_add_actions (window->action_group, action_entries, G_N_ELEMENTS (action_entries), GTK_WIDGET (window)); | |
1553 | + /* Install actions */ | |
1554 | + g_action_map_add_action_entries (G_ACTION_MAP (app), action_entries, G_N_ELEMENTS (action_entries), window); | |
1555 | ||
1556 | /* Install action accelerators for the mixer window */ | |
1557 | - accel_group = gtk_accel_group_new (); | |
1558 | - for (i = 0; i < G_N_ELEMENTS (action_entries); ++i) | |
1559 | - { | |
1560 | - action = gtk_action_group_get_action (window->action_group, action_entries[i].name); | |
1561 | - gtk_action_set_accel_group (action, accel_group); | |
1562 | - gtk_action_connect_accelerator (action); | |
1563 | - gtk_action_set_sensitive (action, TRUE); | |
1564 | - } | |
1565 | - gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); | |
1566 | + gtk_application_set_accels_for_action (GTK_APPLICATION (app), "app.select-controls", select_controls_accels); | |
1567 | + gtk_application_set_accels_for_action (GTK_APPLICATION (app), "app.quit", quit_accels); | |
1568 | ||
1569 | vbox = gtk_dialog_get_content_area (GTK_DIALOG (window)); | |
1570 | gtk_widget_show (vbox); | |
1571 | ||
1572 | - hbox = gtk_hbox_new (FALSE, 12); | |
1573 | + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); | |
1574 | gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); | |
1575 | gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); | |
1576 | gtk_widget_show (hbox); | |
1577 | @@ -188,37 +187,40 @@ xfce_mixer_window_init (XfceMixerWindow *window) | |
1578 | ||
1579 | window->soundcard_combo = xfce_mixer_card_combo_new (card); | |
1580 | g_signal_connect (G_OBJECT (window->soundcard_combo), "soundcard-changed", G_CALLBACK (xfce_mixer_window_soundcard_changed), window); | |
1581 | - gtk_container_add (GTK_CONTAINER (hbox), window->soundcard_combo); | |
1582 | + gtk_box_pack_start (GTK_BOX (hbox), window->soundcard_combo, TRUE, TRUE, 0); | |
1583 | gtk_label_set_mnemonic_widget (GTK_LABEL (label), window->soundcard_combo); | |
1584 | gtk_widget_show (window->soundcard_combo); | |
1585 | ||
1586 | window->mixer_frame = gtk_frame_new (NULL); | |
1587 | gtk_frame_set_shadow_type (GTK_FRAME (window->mixer_frame), GTK_SHADOW_NONE); | |
1588 | gtk_container_set_border_width (GTK_CONTAINER (window->mixer_frame), 6); | |
1589 | - gtk_container_add (GTK_CONTAINER (vbox), window->mixer_frame); | |
1590 | + gtk_box_pack_start (GTK_BOX (vbox), window->mixer_frame, TRUE, TRUE, 0); | |
1591 | gtk_widget_show (window->mixer_frame); | |
1592 | ||
1593 | window->mixer_container = xfce_mixer_container_new (NULL); | |
1594 | gtk_container_add (GTK_CONTAINER (window->mixer_frame), window->mixer_container); | |
1595 | gtk_widget_show (window->mixer_container); | |
1596 | ||
1597 | +G_GNUC_BEGIN_IGNORE_DEPRECATIONS | |
1598 | + /* Single place still using deprecated API. GTK+ uses it internally as well, so why should we suffer? | |
1599 | + Suffice it to say, new API is quite limited. */ | |
1600 | bbox = gtk_dialog_get_action_area (GTK_DIALOG (window)); | |
1601 | +G_GNUC_END_IGNORE_DEPRECATIONS | |
1602 | gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_EDGE); | |
1603 | gtk_container_set_border_width (GTK_CONTAINER (bbox), 6); | |
1604 | ||
1605 | - window->select_controls_button = gtk_button_new (); | |
1606 | - gtk_activatable_set_related_action (GTK_ACTIVATABLE (window->select_controls_button), | |
1607 | - gtk_action_group_get_action (window->action_group, "select-controls")); | |
1608 | + window->select_controls_button = gtk_button_new_with_mnemonic (_("_Select Controls...")); | |
1609 | gtk_button_set_image (GTK_BUTTON (window->select_controls_button), | |
1610 | gtk_image_new_from_icon_name ("preferences-desktop", GTK_ICON_SIZE_BUTTON)); | |
1611 | + gtk_actionable_set_action_name (GTK_ACTIONABLE (window->select_controls_button), "app.select-controls"); | |
1612 | gtk_widget_set_sensitive (window->select_controls_button, FALSE); | |
1613 | gtk_box_pack_start (GTK_BOX (bbox), window->select_controls_button, FALSE, TRUE, 0); | |
1614 | gtk_widget_show (window->select_controls_button); | |
1615 | ||
1616 | - button = gtk_button_new (); | |
1617 | - gtk_activatable_set_related_action (GTK_ACTIVATABLE (button), | |
1618 | - gtk_action_group_get_action (window->action_group, "quit")); | |
1619 | - gtk_button_set_image (GTK_BUTTON (button), gtk_image_new_from_stock (GTK_STOCK_QUIT, GTK_ICON_SIZE_BUTTON)); | |
1620 | + button = gtk_button_new_with_mnemonic (_("_Quit")); | |
1621 | + gtk_button_set_image (GTK_BUTTON (button), | |
1622 | + gtk_image_new_from_icon_name ("exit", GTK_ICON_SIZE_BUTTON)); | |
1623 | + gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "app.quit"); | |
1624 | gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, TRUE, 0); | |
1625 | gtk_widget_show (button); | |
1626 | ||
1627 | @@ -252,10 +254,55 @@ xfce_mixer_window_finalize (GObject *object) | |
1628 | ||
1629 | ||
1630 | ||
1631 | +static void | |
1632 | +xfce_mixer_window_size_allocate (GtkWidget *widget, | |
1633 | + GtkAllocation *allocation) | |
1634 | +{ | |
1635 | + XfceMixerWindow *window = XFCE_MIXER_WINDOW (widget); | |
1636 | + | |
1637 | + (*GTK_WIDGET_CLASS (xfce_mixer_window_parent_class)->size_allocate) (widget, allocation); | |
1638 | + | |
1639 | + if (!window->is_maximized && !window->is_fullscreen) | |
1640 | + gtk_window_get_size (GTK_WINDOW (window), &window->current_width, &window->current_height); | |
1641 | +} | |
1642 | + | |
1643 | + | |
1644 | + | |
1645 | +static gboolean | |
1646 | +xfce_mixer_window_state_event (GtkWidget *widget, | |
1647 | + GdkEventWindowState *event) | |
1648 | +{ | |
1649 | + XfceMixerWindow *window = XFCE_MIXER_WINDOW (widget); | |
1650 | + gboolean result = GDK_EVENT_PROPAGATE; | |
1651 | + | |
1652 | + if (GTK_WIDGET_CLASS (xfce_mixer_window_parent_class)->window_state_event != NULL) | |
1653 | + result = (*GTK_WIDGET_CLASS (xfce_mixer_window_parent_class)->window_state_event) (widget, event); | |
1654 | + | |
1655 | + window->is_maximized = (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) != 0; | |
1656 | + window->is_fullscreen = (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) != 0; | |
1657 | + | |
1658 | + return result; | |
1659 | +} | |
1660 | + | |
1661 | + | |
1662 | + | |
1663 | +static void | |
1664 | +xfce_mixer_window_destroy (GtkWidget *widget) | |
1665 | +{ | |
1666 | + XfceMixerWindow *window = XFCE_MIXER_WINDOW (widget); | |
1667 | + | |
1668 | + g_object_set (G_OBJECT (window->preferences), "window-width", window->current_width, | |
1669 | + "window-height", window->current_height, NULL); | |
1670 | + | |
1671 | + (*GTK_WIDGET_CLASS (xfce_mixer_window_parent_class)->destroy) (widget); | |
1672 | +} | |
1673 | + | |
1674 | + | |
1675 | + | |
1676 | GtkWidget* | |
1677 | -xfce_mixer_window_new (void) | |
1678 | +xfce_mixer_window_new (GApplication *app) | |
1679 | { | |
1680 | - return g_object_new (TYPE_XFCE_MIXER_WINDOW, NULL); | |
1681 | + return g_object_new (TYPE_XFCE_MIXER_WINDOW, "application", app, NULL); | |
1682 | } | |
1683 | ||
1684 | ||
1685 | @@ -334,9 +381,12 @@ xfce_mixer_window_soundcard_property_changed (XfceMixerWindow *window, | |
1686 | ||
1687 | ||
1688 | static void | |
1689 | -xfce_mixer_window_action_select_controls (GtkAction *action, | |
1690 | - XfceMixerWindow *window) | |
1691 | +xfce_mixer_window_action_select_controls (GSimpleAction *action, | |
1692 | + GVariant *parameter, | |
1693 | + gpointer user_data) | |
1694 | { | |
1695 | + XfceMixerWindow *window = XFCE_MIXER_WINDOW (user_data); | |
1696 | + | |
1697 | g_return_if_fail (window->controls_dialog == NULL); | |
1698 | ||
1699 | window->controls_dialog = xfce_mixer_controls_dialog_new (window); | |
1700 | @@ -363,29 +413,15 @@ xfce_mixer_window_controls_property_changed (XfceMixerWindow *window, | |
1701 | ||
1702 | ||
1703 | static void | |
1704 | -xfce_mixer_window_close (GtkAction *action, | |
1705 | - XfceMixerWindow *window) | |
1706 | +xfce_mixer_window_close (GSimpleAction *action, | |
1707 | + GVariant *parameter, | |
1708 | + gpointer user_data) | |
1709 | { | |
1710 | - /* This is a nasty hack to save the settings before the application quits */ | |
1711 | - xfce_mixer_window_closed (GTK_WIDGET (window), NULL, window); | |
1712 | -} | |
1713 | - | |
1714 | - | |
1715 | - | |
1716 | -static gboolean | |
1717 | -xfce_mixer_window_closed (GtkWidget *window, | |
1718 | - GdkEvent *event, | |
1719 | - XfceMixerWindow *mixer_window) | |
1720 | -{ | |
1721 | - gint width; | |
1722 | - gint height; | |
1723 | - | |
1724 | - gtk_window_get_size (GTK_WINDOW (mixer_window), &width, &height); | |
1725 | - g_object_set (G_OBJECT (mixer_window->preferences), "window-width", width, "window-height", height, NULL); | |
1726 | + XfceMixerWindow *window = XFCE_MIXER_WINDOW (user_data); | |
1727 | ||
1728 | - gtk_main_quit (); | |
1729 | + gtk_widget_destroy (GTK_WIDGET (window)); | |
1730 | ||
1731 | - return TRUE; | |
1732 | + g_application_quit (g_application_get_default ()); | |
1733 | } | |
1734 | ||
1735 | ||
1736 | diff --git a/xfce4-mixer/xfce-mixer-window.h b/xfce4-mixer/xfce-mixer-window.h | |
1737 | index b2aba01..b9ff14a 100644 | |
1738 | --- a/xfce4-mixer/xfce-mixer-window.h | |
1739 | +++ b/xfce4-mixer/xfce-mixer-window.h | |
1740 | @@ -38,7 +38,7 @@ typedef struct _XfceMixerWindow XfceMixerWindow; | |
1741 | ||
1742 | GType xfce_mixer_window_get_type (void) G_GNUC_CONST; | |
1743 | ||
1744 | -GtkWidget *xfce_mixer_window_new (void); | |
1745 | +GtkWidget *xfce_mixer_window_new (GApplication *app); | |
1746 | GstElement *xfce_mixer_window_get_active_card (XfceMixerWindow *window); | |
1747 | ||
1748 | G_END_DECLS |