189
200
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (dialog->orientation_combo),
190
201
renderer, "text", COLUMN_TEXT, NULL);
203
panel_properties_dialog_orientation_update (dialog);
192
205
g_signal_connect_swapped (dialog->orientation_combo, "changed",
193
206
G_CALLBACK (panel_properties_dialog_orientation_changed),
196
if (! panel_profile_is_writable_toplevel_orientation (dialog->toplevel)) {
197
gtk_widget_set_sensitive (dialog->orientation_combo, FALSE);
198
gtk_widget_set_sensitive (dialog->orientation_label, FALSE);
208
g_signal_connect (dialog->settings_background,
209
"changed::"PANEL_TOPLEVEL_ORIENTATION_KEY,
210
G_CALLBACK (panel_properties_dialog_orientation_setting_changed),
213
g_settings_bind_writable (dialog->settings, PANEL_TOPLEVEL_ORIENTATION_KEY,
214
orientation_label, "sensitive", FALSE);
215
g_settings_bind_writable (dialog->settings, PANEL_TOPLEVEL_ORIENTATION_KEY,
216
dialog->orientation_combo, "sensitive", FALSE);
218
if (!g_settings_is_writable (dialog->settings, PANEL_TOPLEVEL_ORIENTATION_KEY))
199
219
gtk_widget_show (dialog->writability_warn_general);
204
panel_properties_dialog_size_changed (PanelPropertiesDialog *dialog,
205
GtkSpinButton *spin_button)
207
panel_profile_set_toplevel_size (dialog->toplevel,
208
gtk_spin_button_get_value_as_int (spin_button));
212
panel_properties_dialog_setup_size_spin (PanelPropertiesDialog *dialog,
222
/********************\
224
\********************/
227
panel_properties_dialog_size_spin_setup (PanelPropertiesDialog *dialog,
215
dialog->size_widgets = PANEL_GTK_BUILDER_GET (gui, "size_widgets");
216
g_return_if_fail (dialog->size_widgets != NULL);
230
GtkWidget *size_label;
231
GtkWidget *size_label_pixels;
217
233
dialog->size_spin = PANEL_GTK_BUILDER_GET (gui, "size_spin");
218
234
g_return_if_fail (dialog->size_spin != NULL);
219
dialog->size_label = PANEL_GTK_BUILDER_GET (gui, "size_label");
220
g_return_if_fail (dialog->size_label != NULL);
221
dialog->size_label_pixels = PANEL_GTK_BUILDER_GET (gui, "size_label_pixels");
222
g_return_if_fail (dialog->size_label_pixels != NULL);
224
gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->size_spin),
225
panel_toplevel_get_minimum_size (dialog->toplevel),
226
panel_toplevel_get_maximum_size (dialog->toplevel));
228
gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->size_spin),
229
panel_profile_get_toplevel_size (dialog->toplevel));
231
g_signal_connect_swapped (dialog->size_spin, "value_changed",
232
G_CALLBACK (panel_properties_dialog_size_changed),
235
size_label = PANEL_GTK_BUILDER_GET (gui, "size_label");
236
g_return_if_fail (size_label != NULL);
237
size_label_pixels = PANEL_GTK_BUILDER_GET (gui, "size_label_pixels");
238
g_return_if_fail (size_label_pixels != NULL);
240
panel_properties_size_spin_update_range (dialog);
242
g_settings_bind (dialog->settings, PANEL_TOPLEVEL_SIZE_KEY,
243
dialog->size_spin, "value",
244
G_SETTINGS_BIND_DEFAULT);
246
g_settings_bind_writable (dialog->settings, PANEL_TOPLEVEL_SIZE_KEY,
247
size_label, "sensitive", FALSE);
248
g_settings_bind_writable (dialog->settings, PANEL_TOPLEVEL_SIZE_KEY,
249
size_label_pixels, "sensitive", FALSE);
251
if (!g_settings_is_writable (dialog->settings, PANEL_TOPLEVEL_SIZE_KEY))
252
gtk_widget_show (dialog->writability_warn_general);
260
panel_properties_dialog_setup_toggle (PanelPropertiesDialog *dialog,
262
const char *toggle_name_in_ui,
263
const char *settings_key,
264
gboolean bind_sensitivity)
266
GtkWidget *toggle = PANEL_GTK_BUILDER_GET (gui, toggle_name_in_ui);
267
GSettingsBindFlags flags = G_SETTINGS_BIND_DEFAULT;
269
if (!bind_sensitivity)
270
flags |= G_SETTINGS_BIND_NO_SENSITIVITY;
272
g_settings_bind (dialog->settings, settings_key,
276
if (!g_settings_is_writable (dialog->settings, settings_key))
277
gtk_widget_show (dialog->writability_warn_general);
281
panel_properties_dialog_expand_toggle_setup (PanelPropertiesDialog *dialog,
284
panel_properties_dialog_setup_toggle (dialog, gui, "expand_toggle",
285
PANEL_TOPLEVEL_EXPAND_KEY,
290
panel_properties_dialog_autohide_toggle_setup (PanelPropertiesDialog *dialog,
293
panel_properties_dialog_setup_toggle (dialog, gui, "autohide_toggle",
294
PANEL_TOPLEVEL_AUTO_HIDE_KEY,
299
panel_properties_dialog_hidebuttons_toggle_setup (PanelPropertiesDialog *dialog,
302
panel_properties_dialog_setup_toggle (dialog, gui, "hidebuttons_toggle",
303
PANEL_TOPLEVEL_ENABLE_BUTTONS_KEY,
306
dialog->hidebuttons_toggle = PANEL_GTK_BUILDER_GET (gui,
307
"hidebuttons_toggle");
311
panel_properties_dialog_arrows_sensitivity_update (GSettings *settings,
313
PanelPropertiesDialog *dialog)
317
sensitive = (g_settings_get_boolean (settings,
318
PANEL_TOPLEVEL_ENABLE_BUTTONS_KEY) &&
319
g_settings_is_writable (settings,
320
PANEL_TOPLEVEL_ENABLE_ARROWS_KEY));
322
gtk_widget_set_sensitive (dialog->arrows_toggle, sensitive);
327
panel_properties_dialog_arrows_toggle_setup (PanelPropertiesDialog *dialog,
330
panel_properties_dialog_setup_toggle (dialog, gui, "arrows_toggle",
331
PANEL_TOPLEVEL_ENABLE_ARROWS_KEY,
334
dialog->arrows_toggle = PANEL_GTK_BUILDER_GET (gui,
337
panel_properties_dialog_arrows_sensitivity_update (dialog->settings,
340
g_signal_connect (dialog->settings,
341
"changed::"PANEL_TOPLEVEL_ENABLE_BUTTONS_KEY,
342
G_CALLBACK (panel_properties_dialog_arrows_sensitivity_update),
344
g_signal_connect (dialog->settings,
345
"writable-changed::"PANEL_TOPLEVEL_ENABLE_ARROWS_KEY,
346
G_CALLBACK (panel_properties_dialog_arrows_sensitivity_update),
350
/********************\
352
\********************/
355
panel_properties_dialog_background_image_update (PanelPropertiesDialog *dialog)
359
uri = g_settings_get_string (dialog->settings_background,
360
PANEL_BACKGROUND_IMAGE_URI_KEY);
362
if (PANEL_GLIB_STR_EMPTY (uri))
363
gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (dialog->image_chooser));
365
gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (dialog->image_chooser),
372
panel_properties_dialog_image_chooser_changed (PanelPropertiesDialog *dialog)
376
uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog->image_chooser));
380
g_settings_set_string (dialog->settings_background,
381
PANEL_BACKGROUND_IMAGE_URI_KEY, uri);
386
panel_properties_dialog_image_chooser_setup (PanelPropertiesDialog *dialog,
389
dialog->image_chooser = PANEL_GTK_BUILDER_GET (gui, "image_chooser");
390
panel_gtk_file_chooser_add_image_preview (GTK_FILE_CHOOSER (dialog->image_chooser));
392
panel_properties_dialog_background_image_update (dialog);
394
g_signal_connect_swapped (dialog->image_chooser, "file-set",
395
G_CALLBACK (panel_properties_dialog_image_chooser_changed),
235
if ( ! panel_profile_is_writable_toplevel_size (dialog->toplevel)) {
236
gtk_widget_set_sensitive (dialog->size_spin, FALSE);
237
gtk_widget_set_sensitive (dialog->size_label, FALSE);
238
gtk_widget_set_sensitive (dialog->size_label_pixels, FALSE);
239
gtk_widget_show (dialog->writability_warn_general);
244
panel_properties_dialog_icon_changed (PanelIconChooser *chooser,
246
PanelPropertiesDialog *dialog)
248
panel_profile_set_attached_custom_icon (dialog->toplevel, icon);
252
panel_properties_dialog_setup_icon_chooser (PanelPropertiesDialog *dialog,
257
dialog->icon_align = PANEL_GTK_BUILDER_GET (gui, "icon_align");
258
g_return_if_fail (dialog->icon_align != NULL);
260
dialog->icon_chooser = panel_icon_chooser_new (NULL);
261
panel_icon_chooser_set_fallback_icon_name (PANEL_ICON_CHOOSER (dialog->icon_chooser),
263
gtk_widget_show (dialog->icon_chooser);
264
gtk_container_add (GTK_CONTAINER (dialog->icon_align),
265
dialog->icon_chooser);
267
dialog->icon_label = PANEL_GTK_BUILDER_GET (gui, "icon_label");
268
g_return_if_fail (dialog->icon_label != NULL);
270
custom_icon = panel_profile_get_attached_custom_icon (dialog->toplevel);
271
panel_icon_chooser_set_icon (PANEL_ICON_CHOOSER (dialog->icon_chooser),
273
g_free (custom_icon);
275
g_signal_connect (dialog->icon_chooser, "changed",
276
G_CALLBACK (panel_properties_dialog_icon_changed), dialog);
278
if (!panel_profile_is_writable_attached_custom_icon (dialog->toplevel)) {
279
gtk_widget_set_sensitive (dialog->icon_chooser, FALSE);
280
gtk_widget_set_sensitive (dialog->icon_label, FALSE);
281
gtk_widget_show (dialog->writability_warn_general);
285
/* Note: this is only for toggle buttons on the general page, if needed for togglebuttons
286
elsewhere you must make this respect the writability warning thing for the right page */
287
#define SETUP_TOGGLE_BUTTON(wid, n, p) \
289
panel_properties_dialog_##n (PanelPropertiesDialog *dialog, \
290
GtkToggleButton *n) \
292
panel_profile_set_toplevel_##p (dialog->toplevel, \
293
gtk_toggle_button_get_active (n)); \
296
panel_properties_dialog_setup_##n (PanelPropertiesDialog *dialog, \
299
dialog->n = PANEL_GTK_BUILDER_GET (gui, wid); \
300
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->n), \
301
panel_profile_get_toplevel_##p (dialog->toplevel)); \
302
g_signal_connect_swapped (dialog->n, "toggled", \
303
G_CALLBACK (panel_properties_dialog_##n), dialog); \
304
if ( ! panel_profile_is_writable_toplevel_##p (dialog->toplevel)) { \
305
gtk_widget_set_sensitive (dialog->n, FALSE); \
306
gtk_widget_show (dialog->writability_warn_general); \
310
SETUP_TOGGLE_BUTTON ("expand_toggle", expand_toggle, expand)
311
SETUP_TOGGLE_BUTTON ("autohide_toggle", autohide_toggle, auto_hide)
312
SETUP_TOGGLE_BUTTON ("hidebuttons_toggle", hidebuttons_toggle, enable_buttons)
313
SETUP_TOGGLE_BUTTON ("arrows_toggle", arrows_toggle, enable_arrows)
316
panel_properties_dialog_color_changed (PanelPropertiesDialog *dialog,
317
GtkColorButton *color_button)
321
g_assert (dialog->color_button == GTK_WIDGET (color_button));
323
gtk_color_button_get_color (color_button, &color);
324
panel_profile_set_background_gdk_color (dialog->toplevel, &color);
328
panel_properties_dialog_setup_color_button (PanelPropertiesDialog *dialog,
398
g_settings_bind_writable (dialog->settings_background,
399
PANEL_BACKGROUND_IMAGE_URI_KEY,
400
dialog->image_chooser, "sensitive", FALSE);
402
if (!g_settings_is_writable (dialog->settings_background,
403
PANEL_BACKGROUND_IMAGE_URI_KEY))
404
gtk_widget_show (dialog->writability_warn_background);
407
/********************\
409
\********************/
412
panel_properties_dialog_background_color_get_rgba (PanelPropertiesDialog *dialog,
417
color_str = g_settings_get_string (dialog->settings_background,
418
PANEL_BACKGROUND_COLOR_KEY);
420
if (!gdk_rgba_parse (color, color_str))
421
gdk_rgba_parse (color, PANEL_BACKGROUND_COLOR_DEFAULT);
426
panel_properties_dialog_background_color_update_from_rgba (PanelPropertiesDialog *dialog,
429
/* note: we might not be fully setup, so we have to do checks */
430
if (dialog->opacity_scale)
431
gtk_range_set_value (GTK_RANGE (dialog->opacity_scale),
432
color->alpha * 100.);
433
if (dialog->color_button)
434
gtk_color_button_set_rgba (GTK_COLOR_BUTTON (dialog->color_button),
439
panel_properties_dialog_background_color_set_from_rgba (PanelPropertiesDialog *dialog,
444
color_str = gdk_rgba_to_string (color);
445
g_settings_set_string (dialog->settings_background,
446
PANEL_BACKGROUND_COLOR_KEY, color_str);
449
/* make sure all widgets are consistent */
450
panel_properties_dialog_background_color_update_from_rgba (dialog, color);
454
panel_properties_dialog_background_color_update (PanelPropertiesDialog *dialog)
458
panel_properties_dialog_background_color_get_rgba (dialog, &color);
459
panel_properties_dialog_background_color_update_from_rgba (dialog, &color);
463
panel_properties_dialog_color_button_changed (PanelPropertiesDialog *dialog,
464
GtkColorButton *color_button)
469
panel_properties_dialog_background_color_get_rgba (dialog, &old_color);
470
gtk_color_button_get_rgba (color_button, &new_color);
471
new_color.alpha = old_color.alpha;
472
panel_properties_dialog_background_color_set_from_rgba (dialog, &new_color);
476
panel_properties_dialog_color_button_setup (PanelPropertiesDialog *dialog,
479
GtkWidget *color_label;
333
481
dialog->color_button = PANEL_GTK_BUILDER_GET (gui, "color_button");
334
482
g_return_if_fail (dialog->color_button != NULL);
335
dialog->color_label = PANEL_GTK_BUILDER_GET (gui, "color_label");
336
g_return_if_fail (dialog->color_label != NULL);
338
panel_profile_get_background_color (dialog->toplevel, &color);
340
gtk_color_button_set_color (GTK_COLOR_BUTTON (dialog->color_button),
483
color_label = PANEL_GTK_BUILDER_GET (gui, "color_label");
484
g_return_if_fail (color_label != NULL);
486
panel_properties_dialog_background_color_update (dialog);
343
488
g_signal_connect_swapped (dialog->color_button, "color_set",
344
G_CALLBACK (panel_properties_dialog_color_changed),
347
if ( ! panel_profile_is_writable_background_color (dialog->toplevel)) {
348
gtk_widget_set_sensitive (dialog->color_button, FALSE);
349
gtk_widget_set_sensitive (dialog->color_label, FALSE);
350
gtk_widget_show (dialog->writability_warn_background);
355
panel_properties_dialog_image_changed (PanelPropertiesDialog *dialog)
359
image = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog->image_chooser));
361
/* FIXME: This is an ugly workaround for GTK+ bug #327243.
362
* FIXME: Note that GTK+ 2.12 and file-set signal might help. */
363
if (!dialog->selection_emitted < 2 && !image) {
364
dialog->selection_emitted++;
367
panel_profile_set_background_image (dialog->toplevel, image);
373
panel_properties_dialog_setup_image_chooser (PanelPropertiesDialog *dialog,
378
dialog->image_chooser = PANEL_GTK_BUILDER_GET (gui, "image_chooser");
379
panel_gtk_file_chooser_add_image_preview (GTK_FILE_CHOOSER (dialog->image_chooser));
381
image = panel_profile_get_background_image (dialog->toplevel);
383
if (PANEL_GLIB_STR_EMPTY (image))
384
gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (dialog->image_chooser));
386
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog->image_chooser),
392
dialog->selection_emitted = 0;
393
g_signal_connect_swapped (dialog->image_chooser, "selection-changed",
394
G_CALLBACK (panel_properties_dialog_image_changed),
397
if ( ! panel_profile_is_writable_background_image (dialog->toplevel)) {
398
gtk_widget_set_sensitive (dialog->image_chooser, FALSE);
399
gtk_widget_show (dialog->writability_warn_background);
404
panel_properties_dialog_opacity_changed (PanelPropertiesDialog *dialog)
489
G_CALLBACK (panel_properties_dialog_color_button_changed),
492
g_settings_bind_writable (dialog->settings_background,
493
PANEL_BACKGROUND_COLOR_KEY,
494
color_label, "sensitive", FALSE);
495
g_settings_bind_writable (dialog->settings_background,
496
PANEL_BACKGROUND_COLOR_KEY,
497
dialog->color_button, "sensitive", FALSE);
499
if (!g_settings_is_writable (dialog->settings_background,
500
PANEL_BACKGROUND_COLOR_KEY))
501
gtk_widget_show (dialog->writability_warn_background);
506
panel_properties_dialog_opacity_scale_changed (PanelPropertiesDialog *dialog)
406
508
gdouble percentage;
409
511
percentage = gtk_range_get_value (GTK_RANGE (dialog->opacity_scale));
413
515
else if (percentage <= 2)
416
opacity = (percentage / 100) * 65535;
418
panel_profile_set_background_opacity (dialog->toplevel, opacity);
518
panel_properties_dialog_background_color_get_rgba (dialog, &color);
519
color.alpha = (percentage / 100.);
520
panel_properties_dialog_background_color_set_from_rgba (dialog, &color);
422
panel_properties_dialog_setup_opacity_scale (PanelPropertiesDialog *dialog,
524
panel_properties_dialog_opacity_scale_setup (PanelPropertiesDialog *dialog,
527
GtkWidget *opacity_label;
528
GtkWidget *opacity_legend;
428
530
dialog->opacity_scale = PANEL_GTK_BUILDER_GET (gui, "opacity_scale");
429
531
g_return_if_fail (dialog->opacity_scale != NULL);
430
dialog->opacity_label = PANEL_GTK_BUILDER_GET (gui, "opacity_label");
431
g_return_if_fail (dialog->opacity_label != NULL);
432
dialog->opacity_legend = PANEL_GTK_BUILDER_GET (gui, "opacity_legend");
433
g_return_if_fail (dialog->opacity_legend != NULL);
435
opacity = panel_profile_get_background_opacity (dialog->toplevel);
437
percentage = (opacity * 100.0) / 65535;
439
gtk_range_set_value (GTK_RANGE (dialog->opacity_scale), percentage);
532
opacity_label = PANEL_GTK_BUILDER_GET (gui, "opacity_label");
533
g_return_if_fail (opacity_label != NULL);
534
opacity_legend = PANEL_GTK_BUILDER_GET (gui, "opacity_legend");
535
g_return_if_fail (opacity_legend != NULL);
537
panel_properties_dialog_background_color_update (dialog);
441
539
g_signal_connect_swapped (dialog->opacity_scale, "value_changed",
442
G_CALLBACK (panel_properties_dialog_opacity_changed),
540
G_CALLBACK (panel_properties_dialog_opacity_scale_changed),
445
if ( ! panel_profile_is_writable_background_opacity (dialog->toplevel)) {
446
gtk_widget_set_sensitive (dialog->opacity_scale, FALSE);
447
gtk_widget_set_sensitive (dialog->opacity_label, FALSE);
448
gtk_widget_set_sensitive (dialog->opacity_legend, FALSE);
543
g_settings_bind_writable (dialog->settings_background,
544
PANEL_BACKGROUND_COLOR_KEY,
545
opacity_label, "sensitive", FALSE);
546
g_settings_bind_writable (dialog->settings_background,
547
PANEL_BACKGROUND_COLOR_KEY,
548
opacity_legend, "sensitive", FALSE);
549
g_settings_bind_writable (dialog->settings_background,
550
PANEL_BACKGROUND_COLOR_KEY,
551
dialog->opacity_scale, "sensitive", FALSE);
553
if (!g_settings_is_writable (dialog->settings_background,
554
PANEL_BACKGROUND_COLOR_KEY))
449
555
gtk_widget_show (dialog->writability_warn_background);
558
/*******************\
560
\*******************/
454
panel_properties_dialog_upd_sensitivity (PanelPropertiesDialog *dialog,
455
PanelBackgroundType background_type)
563
panel_properties_dialog_background_sensitivity_update (PanelPropertiesDialog *dialog,
564
PanelBackgroundType background_type)
457
566
gtk_widget_set_sensitive (dialog->color_widgets,
458
567
background_type == PANEL_BACK_COLOR);
478
617
else if (radio == dialog->image_radio)
479
618
background_type = PANEL_BACK_IMAGE;
481
panel_properties_dialog_upd_sensitivity (dialog, background_type);
620
g_settings_set_enum (dialog->settings_background,
621
PANEL_BACKGROUND_TYPE_KEY,
483
panel_profile_set_background_type (dialog->toplevel, background_type);
624
panel_properties_dialog_background_sensitivity_update (dialog, background_type);
487
panel_properties_dialog_setup_background_radios (PanelPropertiesDialog *dialog,
628
panel_properties_dialog_background_radios_setup (PanelPropertiesDialog *dialog,
490
PanelBackgroundType background_type;
491
GtkWidget *active_radio;
493
631
dialog->default_radio = PANEL_GTK_BUILDER_GET (gui, "default_radio");
494
632
dialog->color_radio = PANEL_GTK_BUILDER_GET (gui, "color_radio");
495
633
dialog->image_radio = PANEL_GTK_BUILDER_GET (gui, "image_radio");
496
634
dialog->color_widgets = PANEL_GTK_BUILDER_GET (gui, "color_widgets");
497
635
dialog->image_widgets = PANEL_GTK_BUILDER_GET (gui, "image_widgets");
499
background_type = panel_profile_get_background_type (dialog->toplevel);
500
switch (background_type) {
501
case PANEL_BACK_NONE:
502
active_radio = dialog->default_radio;
504
case PANEL_BACK_COLOR:
505
active_radio = dialog->color_radio;
507
case PANEL_BACK_IMAGE:
508
active_radio = dialog->image_radio;
512
g_assert_not_reached ();
515
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (active_radio), TRUE);
517
panel_properties_dialog_upd_sensitivity (dialog, background_type);
637
panel_properties_dialog_background_type_update (dialog);
519
639
g_signal_connect_swapped (dialog->default_radio, "toggled",
520
G_CALLBACK (panel_properties_dialog_background_toggled),
640
G_CALLBACK (panel_properties_dialog_background_radios_toggled),
522
642
g_signal_connect_swapped (dialog->color_radio, "toggled",
523
G_CALLBACK (panel_properties_dialog_background_toggled),
643
G_CALLBACK (panel_properties_dialog_background_radios_toggled),
525
645
g_signal_connect_swapped (dialog->image_radio, "toggled",
526
G_CALLBACK (panel_properties_dialog_background_toggled),
646
G_CALLBACK (panel_properties_dialog_background_radios_toggled),
529
if ( ! panel_profile_is_writable_background_type (dialog->toplevel)) {
530
gtk_widget_set_sensitive (dialog->default_radio, FALSE);
531
gtk_widget_set_sensitive (dialog->color_radio, FALSE);
532
gtk_widget_set_sensitive (dialog->image_radio, FALSE);
649
g_settings_bind_writable (dialog->settings_background,
650
PANEL_BACKGROUND_TYPE_KEY,
651
dialog->default_radio, "sensitive", FALSE);
652
g_settings_bind_writable (dialog->settings_background,
653
PANEL_BACKGROUND_TYPE_KEY,
654
dialog->color_radio, "sensitive", FALSE);
655
g_settings_bind_writable (dialog->settings_background,
656
PANEL_BACKGROUND_TYPE_KEY,
657
dialog->image_radio, "sensitive", FALSE);
659
if (!g_settings_is_writable (dialog->settings_background,
660
PANEL_BACKGROUND_TYPE_KEY))
533
661
gtk_widget_show (dialog->writability_warn_background);
664
/*************************\
665
* Update from GSettings *
666
\*************************/
538
panel_properties_update_arrows_toggle_visible (PanelPropertiesDialog *dialog,
539
GtkToggleButton *toggle)
669
panel_properties_dialog_background_changed (GSettings *settings,
671
PanelPropertiesDialog *dialog)
541
if (gtk_toggle_button_get_active (toggle))
542
gtk_widget_set_sensitive (dialog->arrows_toggle,
543
panel_profile_is_writable_toplevel_enable_arrows (dialog->toplevel));
545
gtk_widget_set_sensitive (dialog->arrows_toggle, FALSE);
673
if (g_strcmp0 (key, PANEL_BACKGROUND_TYPE_KEY) == 0)
674
panel_properties_dialog_background_type_update (dialog);
675
else if (g_strcmp0 (key, PANEL_BACKGROUND_IMAGE_URI_KEY) == 0)
676
panel_properties_dialog_background_image_update (dialog);
677
else if (g_strcmp0 (key, PANEL_BACKGROUND_COLOR_KEY) == 0)
678
panel_properties_dialog_background_color_update (dialog);
681
/******************************\
682
* Code to make all this work *
683
\******************************/
549
686
panel_properties_dialog_response (PanelPropertiesDialog *dialog,
551
688
GtkWidget *properties_dialog)
555
690
switch (response) {
556
691
case GTK_RESPONSE_CLOSE:
557
692
gtk_widget_destroy (properties_dialog);
559
694
case GTK_RESPONSE_HELP:
560
if (panel_toplevel_get_is_attached (dialog->toplevel)) {
561
help_id = "gospanel-550";
563
help_id = "gospanel-28";
565
695
panel_show_help (gtk_window_get_screen (GTK_WINDOW (properties_dialog)),
566
"user-guide", help_id, NULL);
696
"user-guide", "gospanel-28", NULL);
583
panel_properties_dialog_update_orientation (PanelPropertiesDialog *dialog,
586
PanelOrientation orientation;
589
OrientationComboItem *item;
594
if (!value || value->type != GCONF_VALUE_STRING)
597
if (!panel_profile_map_orientation_string (gconf_value_get_string (value), &orientation))
600
/* change the maximum size of the panel */
601
//TODO: we should also do this when the monitor size changes
602
max_size = panel_toplevel_get_maximum_size (dialog->toplevel);
603
spin_size = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (dialog->size_spin));
604
profile_size = panel_profile_get_toplevel_size (dialog->toplevel);
606
gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->size_spin),
607
panel_toplevel_get_minimum_size (dialog->toplevel),
610
if (spin_size > max_size)
611
gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->size_spin),
613
else if (spin_size != profile_size)
614
gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->size_spin),
615
MIN (profile_size, max_size));
617
/* update the orientation combo box */
618
model = gtk_combo_box_get_model (GTK_COMBO_BOX (dialog->orientation_combo));
620
if (!gtk_tree_model_get_iter_first (model, &iter))
624
gtk_tree_model_get (model, &iter, COLUMN_ITEM, &item, -1);
625
if (item != NULL && item->orientation == orientation) {
626
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (dialog->orientation_combo),
630
} while (gtk_tree_model_iter_next (model, &iter));
634
panel_properties_dialog_update_size (PanelPropertiesDialog *dialog,
637
if (!value || value->type != GCONF_VALUE_INT)
640
gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->size_spin),
641
gconf_value_get_int (value));
645
panel_properties_dialog_toplevel_notify (GConfClient *client,
648
PanelPropertiesDialog *dialog)
653
key = panel_gconf_basename (gconf_entry_get_key (entry));
657
value = gconf_entry_get_value (entry);
659
#define UPDATE_TOGGLE(p, n) \
660
if (!strcmp (key, p)) { \
661
if (value && value->type == GCONF_VALUE_BOOL) { \
662
gboolean val = gconf_value_get_bool (value); \
663
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->n)) != val) \
664
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->n), val); \
668
if (!strcmp (key, "orientation"))
669
panel_properties_dialog_update_orientation (dialog, value);
670
else if (!strcmp (key, "size"))
671
panel_properties_dialog_update_size (dialog, value);
672
else UPDATE_TOGGLE ("expand", expand_toggle)
673
else UPDATE_TOGGLE ("auto_hide", autohide_toggle)
674
else UPDATE_TOGGLE ("enable_buttons", hidebuttons_toggle)
675
else UPDATE_TOGGLE ("enable_arrows", arrows_toggle)
679
panel_properties_dialog_update_background_type (PanelPropertiesDialog *dialog,
682
PanelBackgroundType background_type;
683
GtkWidget *active_radio;
685
if (!value || value->type != GCONF_VALUE_STRING)
688
if (!panel_profile_map_background_type_string (gconf_value_get_string (value),
692
switch (background_type) {
693
case PANEL_BACK_NONE:
694
active_radio = dialog->default_radio;
696
case PANEL_BACK_COLOR:
697
active_radio = dialog->color_radio;
699
case PANEL_BACK_IMAGE:
700
active_radio = dialog->image_radio;
704
g_assert_not_reached ();
708
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (active_radio), TRUE);
712
panel_properties_dialog_update_background_color (PanelPropertiesDialog *dialog,
715
GdkColor new_color = { 0, };
718
if (!value || value->type != GCONF_VALUE_STRING)
721
if (!gdk_color_parse (gconf_value_get_string (value), &new_color))
724
gtk_color_button_get_color (GTK_COLOR_BUTTON (dialog->color_button),
727
if (old_color.red != new_color.red ||
728
old_color.green != new_color.green ||
729
old_color.blue != new_color.blue)
730
gtk_color_button_set_color (GTK_COLOR_BUTTON (dialog->color_button),
735
panel_properties_dialog_update_background_opacity (PanelPropertiesDialog *dialog,
740
if (!value || value->type != GCONF_VALUE_INT)
743
percentage = ((gdouble) (gconf_value_get_int (value) * 100)) / 65535;
745
if ((int) gtk_range_get_value (GTK_RANGE (dialog->opacity_scale)) != (int) percentage)
746
gtk_range_set_value (GTK_RANGE (dialog->opacity_scale), percentage);
750
panel_properties_dialog_update_background_image (PanelPropertiesDialog *dialog,
756
if (!value || value->type != GCONF_VALUE_STRING)
759
text = gconf_value_get_string (value);
760
old_text = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog->image_chooser));
762
if (PANEL_GLIB_STR_EMPTY (text) && old_text)
763
gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (dialog->image_chooser));
764
else if (!PANEL_GLIB_STR_EMPTY (text) &&
765
(!old_text || strcmp (text, old_text)))
766
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog->image_chooser),
774
panel_properties_dialog_background_notify (GConfClient *client,
777
PanelPropertiesDialog *dialog)
782
key = panel_gconf_basename (gconf_entry_get_key (entry));
786
value = gconf_entry_get_value (entry);
788
if (!strcmp (key, "type"))
789
panel_properties_dialog_update_background_type (dialog, value);
790
else if (!strcmp (key, "color"))
791
panel_properties_dialog_update_background_color (dialog, value);
792
else if (!strcmp (key, "opacity"))
793
panel_properties_dialog_update_background_opacity (dialog, value);
794
else if (!strcmp (key, "image"))
795
panel_properties_dialog_update_background_image (dialog, value);
799
panel_properties_dialog_remove_orientation_combo (PanelPropertiesDialog *dialog)
801
GtkContainer *container = GTK_CONTAINER (dialog->general_table);
802
GtkTable *table = GTK_TABLE (dialog->general_table);
804
g_object_ref (dialog->size_label);
805
g_object_ref (dialog->size_widgets);
806
g_object_ref (dialog->icon_label);
807
g_object_ref (dialog->icon_align);
809
gtk_container_remove (container, dialog->orientation_label);
810
gtk_container_remove (container, dialog->orientation_combo);
811
gtk_container_remove (container, dialog->size_label);
812
gtk_container_remove (container, dialog->size_widgets);
813
gtk_container_remove (container, dialog->icon_label);
814
gtk_container_remove (container, dialog->icon_align);
816
gtk_table_attach_defaults (table, dialog->size_label, 0, 1, 1, 2);
817
gtk_table_attach_defaults (table, dialog->size_widgets, 1, 2, 1, 2);
818
gtk_table_attach_defaults (table, dialog->icon_label, 0, 1, 2, 3);
819
gtk_table_attach_defaults (table, dialog->icon_align, 1, 2, 2, 3);
821
dialog->orientation_label = NULL;
822
dialog->orientation_combo = NULL;
823
g_object_unref (dialog->size_label);
824
g_object_unref (dialog->size_widgets);
825
g_object_unref (dialog->icon_label);
826
g_object_unref (dialog->icon_align);
828
gtk_table_resize (table, 3, 2);
832
panel_properties_dialog_remove_icon_chooser (PanelPropertiesDialog *dialog)
834
GtkContainer *container = GTK_CONTAINER (dialog->general_table);
836
gtk_container_remove (container, dialog->icon_label);
837
gtk_container_remove (container, dialog->icon_align);
839
dialog->icon_label = NULL;
840
dialog->icon_align = NULL;
841
dialog->icon_chooser = NULL;
843
gtk_table_resize (GTK_TABLE (dialog->general_table), 3, 2);
847
panel_properties_dialog_remove_toggles (PanelPropertiesDialog *dialog)
849
GtkContainer *container = GTK_CONTAINER (dialog->general_vbox);
851
gtk_container_remove (container, dialog->autohide_toggle);
852
gtk_container_remove (container, dialog->expand_toggle);
854
dialog->autohide_toggle = NULL;
855
dialog->expand_toggle = NULL;
859
panel_properties_dialog_update_for_attached (PanelPropertiesDialog *dialog,
863
panel_properties_dialog_remove_icon_chooser (dialog);
865
gtk_window_set_title (GTK_WINDOW (dialog->properties_dialog),
866
_("Drawer Properties"));
867
panel_properties_dialog_remove_toggles (dialog);
868
panel_properties_dialog_remove_orientation_combo (dialog);
713
panel_properties_dialog_free (PanelPropertiesDialog *dialog)
715
if (dialog->properties_dialog)
716
gtk_widget_destroy (dialog->properties_dialog);
717
dialog->properties_dialog = NULL;
719
if (dialog->settings_background)
720
g_object_unref (dialog->settings_background);
721
dialog->settings_background = NULL;
723
if (dialog->settings)
724
g_object_unref (dialog->settings);
725
dialog->settings = NULL;
872
730
static PanelPropertiesDialog *
896
763
dialog->writability_warn_general = PANEL_GTK_BUILDER_GET (gui, "writability_warn_general");
897
764
dialog->writability_warn_background = PANEL_GTK_BUILDER_GET (gui, "writability_warn_background");
899
dialog->general_vbox = PANEL_GTK_BUILDER_GET (gui, "general_vbox");
900
dialog->general_table = PANEL_GTK_BUILDER_GET (gui, "general_table");
902
766
panel_properties_dialog_setup_orientation_combo (dialog, gui);
903
panel_properties_dialog_setup_size_spin (dialog, gui);
904
panel_properties_dialog_setup_icon_chooser (dialog, gui);
905
panel_properties_dialog_setup_expand_toggle (dialog, gui);
906
panel_properties_dialog_setup_autohide_toggle (dialog, gui);
907
panel_properties_dialog_setup_hidebuttons_toggle (dialog, gui);
908
panel_properties_dialog_setup_arrows_toggle (dialog, gui);
910
panel_properties_update_arrows_toggle_visible (
911
dialog, GTK_TOGGLE_BUTTON (dialog->hidebuttons_toggle));
912
g_signal_connect_swapped (dialog->hidebuttons_toggle, "toggled",
913
G_CALLBACK (panel_properties_update_arrows_toggle_visible),
916
dialog->toplevel_notify =
917
panel_profile_toplevel_notify_add (
920
(GConfClientNotifyFunc) panel_properties_dialog_toplevel_notify,
923
panel_properties_dialog_setup_color_button (dialog, gui);
924
panel_properties_dialog_setup_image_chooser (dialog, gui);
925
panel_properties_dialog_setup_opacity_scale (dialog, gui);
926
panel_properties_dialog_setup_background_radios (dialog, gui);
928
dialog->background_notify =
929
panel_profile_toplevel_notify_add (
932
(GConfClientNotifyFunc) panel_properties_dialog_background_notify,
935
panel_properties_dialog_update_for_attached (dialog,
936
panel_toplevel_get_is_attached (dialog->toplevel));
767
panel_properties_dialog_size_spin_setup (dialog, gui);
768
panel_properties_dialog_expand_toggle_setup (dialog, gui);
769
panel_properties_dialog_autohide_toggle_setup (dialog, gui);
770
panel_properties_dialog_hidebuttons_toggle_setup (dialog, gui);
771
panel_properties_dialog_arrows_toggle_setup (dialog, gui);
773
panel_properties_dialog_image_chooser_setup (dialog, gui);
774
panel_properties_dialog_color_button_setup (dialog, gui);
775
panel_properties_dialog_opacity_scale_setup (dialog, gui);
776
panel_properties_dialog_background_radios_setup (dialog, gui);
778
g_signal_connect (dialog->settings_background, "changed",
779
G_CALLBACK (panel_properties_dialog_background_changed),
938
782
panel_toplevel_push_autohide_disabler (dialog->toplevel);
939
783
panel_widget_register_open_dialog (panel_toplevel_get_panel_widget (dialog->toplevel),
940
784
dialog->properties_dialog);
942
g_signal_connect (dialog->properties_dialog, "event",
943
G_CALLBACK (config_event),
944
PANEL_GTK_BUILDER_GET (gui, "notebook"));
946
786
gtk_widget_show (dialog->properties_dialog);