| 262 PidginPrefCombo input; |
262 PidginPrefCombo input; |
| 263 PidginPrefCombo output; |
263 PidginPrefCombo output; |
| 264 GtkWidget *level; |
264 GtkWidget *level; |
| 265 GtkWidget *threshold; |
265 GtkWidget *threshold; |
| 266 GtkWidget *volume; |
266 GtkWidget *volume; |
| |
267 GtkWidget *test; |
| 267 GstElement *pipeline; |
268 GstElement *pipeline; |
| 268 } voice; |
269 } voice; |
| 269 |
270 |
| 270 struct { |
271 struct { |
| 271 PidginPrefCombo input; |
272 PidginPrefCombo input; |
| 272 PidginPrefCombo output; |
273 PidginPrefCombo output; |
| 273 GtkWidget *drawing_area; |
274 GtkWidget *drawing_area; |
| |
275 GtkWidget *test; |
| 274 GstElement *pipeline; |
276 GstElement *pipeline; |
| 275 } video; |
277 } video; |
| 276 } vv; |
278 } vv; |
| 277 #endif |
279 #endif |
| 278 }; |
280 }; |
| 2909 return purple_media_element_info_call_create(element_info, |
2911 return purple_media_element_info_call_create(element_info, |
| 2910 NULL, NULL, NULL); |
2912 NULL, NULL, NULL); |
| 2911 } |
2913 } |
| 2912 |
2914 |
| 2913 static void |
2915 static void |
| 2914 vv_test_switch_page_cb(GtkNotebook *notebook, GtkWidget *page, guint num, gpointer data) |
2916 vv_test_switch_page_cb(GtkStack *stack, G_GNUC_UNUSED GParamSpec *pspec, |
| 2915 { |
2917 gpointer data) |
| 2916 GtkWidget *test = data; |
2918 { |
| 2917 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(test), FALSE); |
2919 PidginPrefsWindow *win = data; |
| |
2920 |
| |
2921 if (!g_str_equal(gtk_stack_get_visible_child_name(stack), "vv")) { |
| |
2922 /* Disable any running test pipelines. */ |
| |
2923 gtk_toggle_button_set_active( |
| |
2924 GTK_TOGGLE_BUTTON(win->vv.voice.test), FALSE); |
| |
2925 gtk_toggle_button_set_active( |
| |
2926 GTK_TOGGLE_BUTTON(win->vv.video.test), FALSE); |
| |
2927 } |
| 2918 } |
2928 } |
| 2919 |
2929 |
| 2920 static GstElement * |
2930 static GstElement * |
| 2921 create_voice_pipeline(void) |
2931 create_voice_pipeline(void) |
| 2922 { |
2932 { |
| 3050 |
3060 |
| 3051 g_signal_connect(win->vv.voice.volume, "value-changed", |
3061 g_signal_connect(win->vv.voice.volume, "value-changed", |
| 3052 G_CALLBACK(on_volume_change_cb), win); |
3062 G_CALLBACK(on_volume_change_cb), win); |
| 3053 g_signal_connect(test, "destroy", |
3063 g_signal_connect(test, "destroy", |
| 3054 G_CALLBACK(voice_test_destroy_cb), win); |
3064 G_CALLBACK(voice_test_destroy_cb), win); |
| 3055 g_signal_connect(win->notebook, "switch-page", |
|
| 3056 G_CALLBACK(vv_test_switch_page_cb), test); |
|
| 3057 } else { |
3065 } else { |
| 3058 gtk_progress_bar_set_fraction( |
3066 gtk_progress_bar_set_fraction( |
| 3059 GTK_PROGRESS_BAR(win->vv.voice.level), 0.0); |
3067 GTK_PROGRESS_BAR(win->vv.voice.level), 0.0); |
| 3060 gtk_widget_set_sensitive(win->vv.voice.level, FALSE); |
3068 gtk_widget_set_sensitive(win->vv.voice.level, FALSE); |
| 3061 g_object_disconnect(win->vv.voice.volume, |
3069 g_object_disconnect(win->vv.voice.volume, |
| 3062 "any-signal::value-changed", |
3070 "any-signal::value-changed", |
| 3063 G_CALLBACK(on_volume_change_cb), win, NULL); |
3071 G_CALLBACK(on_volume_change_cb), win, NULL); |
| 3064 g_object_disconnect(test, "any-signal::destroy", |
3072 g_object_disconnect(test, "any-signal::destroy", |
| 3065 G_CALLBACK(voice_test_destroy_cb), win, |
3073 G_CALLBACK(voice_test_destroy_cb), win, |
| 3066 NULL); |
3074 NULL); |
| 3067 g_object_disconnect(win->notebook, "any-signal::switch-page", |
|
| 3068 G_CALLBACK(vv_test_switch_page_cb), test, |
|
| 3069 NULL); |
|
| 3070 voice_test_destroy_cb(NULL, win); |
3075 voice_test_destroy_cb(NULL, win); |
| 3071 } |
3076 } |
| 3072 } |
3077 } |
| 3073 |
3078 |
| 3074 static void |
3079 static void |
| 3121 G_CALLBACK(threshold_value_changed_cb), label); |
3126 G_CALLBACK(threshold_value_changed_cb), label); |
| 3122 |
3127 |
| 3123 win->vv.voice.level = |
3128 win->vv.voice.level = |
| 3124 GTK_WIDGET(gtk_builder_get_object(builder, "vv.voice.level")); |
3129 GTK_WIDGET(gtk_builder_get_object(builder, "vv.voice.level")); |
| 3125 |
3130 |
| 3126 test = gtk_builder_get_object(builder, "vv.voice.test_button"); |
3131 test = gtk_builder_get_object(builder, "vv.voice.test"); |
| 3127 g_signal_connect(test, "toggled", |
3132 g_signal_connect(test, "toggled", |
| 3128 G_CALLBACK(toggle_voice_test_cb), win); |
3133 G_CALLBACK(toggle_voice_test_cb), win); |
| |
3134 win->vv.voice.test = GTK_WIDGET(test); |
| 3129 } |
3135 } |
| 3130 |
3136 |
| 3131 static GstElement * |
3137 static GstElement * |
| 3132 create_video_pipeline(void) |
3138 create_video_pipeline(void) |
| 3133 { |
3139 { |
| 3228 |
3234 |
| 3229 if (gtk_toggle_button_get_active(test)) { |
3235 if (gtk_toggle_button_get_active(test)) { |
| 3230 enable_video_test(win); |
3236 enable_video_test(win); |
| 3231 g_signal_connect(test, "destroy", |
3237 g_signal_connect(test, "destroy", |
| 3232 G_CALLBACK(video_test_destroy_cb), win); |
3238 G_CALLBACK(video_test_destroy_cb), win); |
| 3233 g_signal_connect(win->notebook, "switch-page", |
|
| 3234 G_CALLBACK(vv_test_switch_page_cb), test); |
|
| 3235 } else { |
3239 } else { |
| 3236 g_object_disconnect(test, "any-signal::destroy", |
3240 g_object_disconnect(test, "any-signal::destroy", |
| 3237 G_CALLBACK(video_test_destroy_cb), win, |
3241 G_CALLBACK(video_test_destroy_cb), win, |
| 3238 NULL); |
|
| 3239 g_object_disconnect(win->notebook, "any-signal::switch-page", |
|
| 3240 G_CALLBACK(vv_test_switch_page_cb), test, |
|
| 3241 NULL); |
3242 NULL); |
| 3242 video_test_destroy_cb(NULL, win); |
3243 video_test_destroy_cb(NULL, win); |
| 3243 } |
3244 } |
| 3244 } |
3245 } |
| 3245 |
3246 |
| 3265 * get overridden by the widget's parent. |
3266 * get overridden by the widget's parent. |
| 3266 */ |
3267 */ |
| 3267 gtk_widget_set_visual(video, gdk_screen_get_system_visual( |
3268 gtk_widget_set_visual(video, gdk_screen_get_system_visual( |
| 3268 gtk_widget_get_screen(video))); |
3269 gtk_widget_get_screen(video))); |
| 3269 |
3270 |
| 3270 test = gtk_builder_get_object(builder, "vv.video.test_button"); |
3271 test = gtk_builder_get_object(builder, "vv.video.test"); |
| 3271 g_signal_connect(test, "toggled", |
3272 g_signal_connect(test, "toggled", |
| 3272 G_CALLBACK(toggle_video_test_cb), win); |
3273 G_CALLBACK(toggle_video_test_cb), win); |
| |
3274 win->vv.video.test = GTK_WIDGET(test); |
| 3273 } |
3275 } |
| 3274 |
3276 |
| 3275 static void |
3277 static void |
| 3276 vv_device_changed_cb(const gchar *name, PurplePrefType type, |
3278 vv_device_changed_cb(const gchar *name, PurplePrefType type, |
| 3277 gconstpointer value, gpointer data) |
3279 gconstpointer value, gpointer data) |
| 3424 G_CALLBACK(device_list_changed_cb), |
3426 G_CALLBACK(device_list_changed_cb), |
| 3425 win->vv.video.output.combo, 0); |
3427 win->vv.video.output.combo, 0); |
| 3426 |
3428 |
| 3427 bind_video_test(win, builder); |
3429 bind_video_test(win, builder); |
| 3428 |
3430 |
| |
3431 g_signal_connect(win->stack, "notify::visible-child", |
| |
3432 G_CALLBACK(vv_test_switch_page_cb), win); |
| |
3433 |
| 3429 g_object_ref(ret); |
3434 g_object_ref(ret); |
| 3430 g_object_unref(builder); |
3435 g_object_unref(builder); |
| 3431 |
3436 |
| 3432 return ret; |
3437 return ret; |
| 3433 } |
3438 } |
| 3434 #endif |
3439 #endif |
| 3435 |
3440 |
| 3436 static void |
3441 static void |
| 3437 prefs_notebook_init(PidginPrefsWindow *win) |
3442 prefs_stack_init(PidginPrefsWindow *win) |
| 3438 { |
3443 { |
| 3439 #ifdef USE_VV |
3444 #ifdef USE_VV |
| 3440 GtkNotebook *notebook = GTK_NOTEBOOK(win->notebook); |
3445 GtkStack *stack = GTK_STACK(win->stack); |
| 3441 GtkWidget *vv; |
3446 GtkWidget *vv; |
| 3442 #endif |
3447 #endif |
| 3443 |
3448 |
| 3444 bind_interface_page(win); |
3449 bind_interface_page(win); |
| 3445 bind_browser_page(win); |
3450 bind_browser_page(win); |
| 3451 bind_sound_page(win); |
3456 bind_sound_page(win); |
| 3452 bind_away_page(win); |
3457 bind_away_page(win); |
| 3453 bind_theme_page(win); |
3458 bind_theme_page(win); |
| 3454 #ifdef USE_VV |
3459 #ifdef USE_VV |
| 3455 vv = vv_page(win); |
3460 vv = vv_page(win); |
| 3456 gtk_notebook_append_page(notebook, vv, gtk_label_new(_("Voice/Video"))); |
3461 gtk_container_add_with_properties(GTK_CONTAINER(stack), vv, "name", |
| |
3462 "vv", "title", _("Voice/Video"), |
| |
3463 NULL); |
| 3457 g_object_unref(vv); |
3464 g_object_unref(vv); |
| 3458 #endif |
3465 #endif |
| 3459 } |
3466 } |
| 3460 |
3467 |
| 3461 static void |
3468 static void |
| 3467 widget_class, |
3474 widget_class, |
| 3468 "/im/pidgin/Pidgin/Prefs/prefs.ui" |
3475 "/im/pidgin/Pidgin/Prefs/prefs.ui" |
| 3469 ); |
3476 ); |
| 3470 |
3477 |
| 3471 /* Main window */ |
3478 /* Main window */ |
| 3472 gtk_widget_class_bind_template_child( |
3479 gtk_widget_class_bind_template_child(widget_class, PidginPrefsWindow, |
| 3473 widget_class, PidginPrefsWindow, notebook); |
3480 stack); |
| 3474 gtk_widget_class_bind_template_callback(widget_class, delete_prefs); |
3481 gtk_widget_class_bind_template_callback(widget_class, delete_prefs); |
| 3475 |
3482 |
| 3476 /* Interface page */ |
3483 /* Interface page */ |
| 3477 gtk_widget_class_bind_template_child( |
3484 gtk_widget_class_bind_template_child( |
| 3478 widget_class, PidginPrefsWindow, |
3485 widget_class, PidginPrefsWindow, |
| 3755 /* Back to instant-apply! I win! BU-HAHAHA! */ |
3762 /* Back to instant-apply! I win! BU-HAHAHA! */ |
| 3756 |
3763 |
| 3757 /* Create the window */ |
3764 /* Create the window */ |
| 3758 gtk_widget_init_template(GTK_WIDGET(win)); |
3765 gtk_widget_init_template(GTK_WIDGET(win)); |
| 3759 |
3766 |
| 3760 prefs_notebook_init(win); |
3767 prefs_stack_init(win); |
| 3761 |
3768 |
| 3762 /* Refresh the list of themes before showing the preferences window */ |
3769 /* Refresh the list of themes before showing the preferences window */ |
| 3763 prefs_themes_refresh(); |
3770 prefs_themes_refresh(); |
| 3764 } |
3771 } |
| 3765 |
3772 |