49 #include <gdk/gdkkeysyms.h> 62 #define POPUP_WINDOW_HORIZONTAL_UI_FILE "popup-window-horizontal-gtk3.glade" 63 #define POPUP_WINDOW_VERTICAL_UI_FILE "popup-window-vertical-gtk3.glade" 65 #define POPUP_WINDOW_HORIZONTAL_UI_FILE "popup-window-horizontal-gtk2.glade" 66 #define POPUP_WINDOW_VERTICAL_UI_FILE "popup-window-vertical-gtk2.glade" 79 GtkPositionType gtk_position;
85 position == 0 ? GTK_POS_TOP :
86 position == 1 ? GTK_POS_BOTTOM :
87 position == 2 ? GTK_POS_LEFT :
91 gtk_scale_set_draw_value(vol_scale, TRUE);
92 gtk_scale_set_value_pos(vol_scale, gtk_position);
94 gtk_scale_set_draw_value(vol_scale, FALSE);
105 gdouble fine_scroll_step;
110 gtk_adjustment_set_page_increment(vol_scale_adj, scroll_step);
111 gtk_adjustment_set_step_increment(vol_scale_adj, fine_scroll_step);
117 gpointer handler_data, gboolean has_mute, gboolean muted)
121 n_blocked = g_signal_handlers_block_by_func
122 (G_OBJECT(mute_check),
DATA_PTR(handler_func), handler_data);
123 g_assert(n_blocked == 1);
125 if (has_mute == FALSE) {
126 gtk_toggle_button_set_active(mute_check, TRUE);
127 gtk_widget_set_sensitive(GTK_WIDGET(mute_check), FALSE);
128 gtk_widget_set_tooltip_text(GTK_WIDGET(mute_check),
129 _(
"Soundcard has no mute switch"));
131 gtk_toggle_button_set_active(mute_check, muted);
132 gtk_widget_set_tooltip_text(GTK_WIDGET(mute_check), NULL);
135 g_signal_handlers_unblock_by_func
136 (G_OBJECT(mute_check),
DATA_PTR(handler_func), handler_data);
143 gtk_adjustment_set_value(vol_scale_adj, volume);
148 #if GTK_CHECK_VERSION(3,20,0) 152 GdkGrabStatus status;
156 device = gtk_get_current_event_device();
157 if (device == NULL) {
158 WARN(
"Couldn't get current device");
163 status = gdk_seat_grab(gdk_device_get_seat(device),
164 gtk_widget_get_window(window),
165 GDK_SEAT_CAPABILITY_ALL, TRUE,
166 NULL, NULL, NULL, NULL);
167 if (status != GDK_GRAB_SUCCESS)
168 WARN(
"Could not grab %s", gdk_device_get_name(device));
174 GdkDevice *pointer_dev;
175 GdkDevice *keyboard_dev;
176 GdkGrabStatus status;
179 pointer_dev = gtk_get_current_event_device();
180 if (pointer_dev == NULL) {
181 WARN(
"Couldn't get current device");
185 status = gdk_device_grab(pointer_dev,
186 gtk_widget_get_window(window),
189 GDK_BUTTON_PRESS_MASK,
192 if (status != GDK_GRAB_SUCCESS)
193 WARN(
"Could not grab %s", gdk_device_get_name(pointer_dev));
196 keyboard_dev = gdk_device_get_associated_device(pointer_dev);
197 if (keyboard_dev == NULL) {
198 WARN(
"Couldn't get associated device");
202 status = gdk_device_grab(keyboard_dev,
203 gtk_widget_get_window(window),
207 NULL, GDK_CURRENT_TIME);
208 if (status != GDK_GRAB_SUCCESS)
209 WARN(
"Could not grab %s", gdk_device_get_name(keyboard_dev));
216 gdk_pointer_grab(gtk_widget_get_window(window), TRUE,
217 GDK_BUTTON_PRESS_MASK, NULL, NULL,
219 gdk_keyboard_grab(gtk_widget_get_window(window), TRUE,
250 switch (event->type) {
253 case GDK_BUTTON_PRESS: {
256 GdkDevice *device = gtk_get_current_event_device();
258 if (!gdk_device_get_window_at_position(device, &x, &y))
260 if (!gdk_window_at_pointer(&x, &y))
269 if (event->key.keyval == GDK_KEY_Escape)
274 case GDK_GRAB_BROKEN:
307 value = gtk_range_get_value(range);
354 if (!gtk_widget_get_visible(popup_window))
393 gtk_widget_show_now(popup_window);
396 gtk_widget_grab_focus(vol_scale);
423 if (gtk_widget_get_visible(popup_window))
459 if (!g_strcmp0(orientation,
"horizontal"))
465 DEBUG(
"Building from ui file '%s'", uifile);
479 gtk_builder_connect_signals(builder, window);
486 g_object_unref(builder);
502 audio = window->
audio;
GtkBuilder * gtk_builder_new_from_file(const gchar *filename)
Internationalization support.
void audio_signals_disconnect(Audio *audio, AudioCallback callback, gpointer data)
#define assign_gtk_widget(builder, container, name)
gboolean audio_has_mute(Audio *audio)
void audio_toggle_mute(Audio *audio, AudioUser user)
void audio_signals_connect(Audio *audio, AudioCallback callback, gpointer data)
gboolean audio_is_muted(Audio *audio)
gboolean prefs_get_boolean(const gchar *key, gboolean def)
gchar * get_ui_file(const char *filename)
void run_mixer_command(void)
gchar * prefs_get_string(const gchar *key, const gchar *def)
gdouble audio_get_volume(Audio *audio)
#define assign_gtk_adjustment(builder, container, name)
gint prefs_get_integer(const gchar *key, gint def)
void audio_set_volume(Audio *audio, AudioUser user, gdouble new_volume, gint dir)
gdouble prefs_get_double(const gchar *key, gdouble def)