pidgin/gtkprefs.c

changeset 39781
3927ccd7487c
parent 39778
46b1141b3662
parent 39780
90027b926a3e
child 39856
cd8bea4a8ca8
equal deleted inserted replaced
39778:46b1141b3662 39781:3927ccd7487c
101 }; 101 };
102 102
103 struct _PidginPrefsWindow { 103 struct _PidginPrefsWindow {
104 GtkDialog parent; 104 GtkDialog parent;
105 105
106 /* Notebook */ 106 /* Stack */
107 GtkWidget *notebook; 107 GtkWidget *stack;
108 108
109 /* Interface page */ 109 /* Interface page */
110 struct { 110 struct {
111 PidginPrefCombo docklet; 111 PidginPrefCombo docklet;
112 struct { 112 struct {
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

mercurial