| 458 | | STATUSBAR_REC *statusbar_create(STATUSBAR_GROUP_REC *group, |
| 459 | | STATUSBAR_CONFIG_REC *config, |
| 460 | | MAIN_WINDOW_REC *parent_window) |
| 461 | | { |
| 462 | | STATUSBAR_REC *bar; |
| 463 | | THEME_REC *theme; |
| 464 | | GSList *tmp; |
| 465 | | char *name, *value; |
| 466 | | |
| 467 | | g_return_val_if_fail(group != NULL, NULL);
|
| 468 | | g_return_val_if_fail(config != NULL, NULL);
|
| 469 | | g_return_val_if_fail(config->type != STATUSBAR_TYPE_WINDOW ||
|
| 470 | | parent_window != NULL, NULL); |
| 471 | | |
| 472 | | bar = g_new0(STATUSBAR_REC, 1);
|
| 473 | | group->bars = g_slist_append(group->bars, bar); |
| 474 | | |
| 475 | | bar->group = group; |
| 476 | | |
| 477 | | bar->config = config; |
| 478 | | bar->parent_window = parent_window; |
| 479 | | |
| 480 | | (); |
| 481 | | bar->dirty = TRUE;
|
| 482 | | bar->dirty_xpos = 0; |
| 483 | | |
| 484 | | signal_remove("terminal resized", (SIGNAL_FUNC) sig_terminal_resized);
|
| 485 | | signal_remove("mainwindow resized", (SIGNAL_FUNC) sig_mainwindow_resized);
|
| 486 | | signal_remove("mainwindow moved", (SIGNAL_FUNC) sig_mainwindow_resized);
|
| 487 | | |
| 488 | | if (config->type == STATUSBAR_TYPE_ROOT) {
|
| 489 | | |
| 490 | | mainwindows_reserve_lines(config->placement == STATUSBAR_TOP,
|
| 491 | | config->placement == STATUSBAR_BOTTOM);
|
| 492 | | theme = current_theme; |
| 493 | | } else { |
| 494 | | |
| 495 | | parent_window->statusbars = |
| 496 | | g_slist_append(parent_window->statusbars, bar); |
| 497 | | mainwindow_set_statusbar_lines(parent_window, |
| 498 | | config->placement == STATUSBAR_TOP,
|
| 499 | | config->placement == STATUSBAR_BOTTOM);
|
| 500 | | theme = parent_window != NULL && parent_window->active != NULL &&
|
| 501 | | parent_window->active->theme != NULL ?
|
| 502 | | parent_window->active->theme : current_theme; |
| 503 | | } |
| 504 | | |
| 505 | | signal_add("terminal resized", (SIGNAL_FUNC) sig_terminal_resized);
|
| 506 | | signal_add("mainwindow resized", (SIGNAL_FUNC) sig_mainwindow_resized);
|
| 507 | | signal_add("mainwindow moved", (SIGNAL_FUNC) sig_mainwindow_resized);
|
| 508 | | |
| 509 | | |
| 510 | | name = g_strdup_printf("{sb_%s_bg}", config->name); |
| 511 | | value = theme_format_expand(theme, name); |
| 512 | | g_free(name); |
| 513 | | |
| 514 | | if (*value == '\0') { |
| 515 | | |
| 516 | | g_free(value); |
| 517 | | |
| 518 | | name = g_strdup_printf("{sb_%s_bg}", group->name); |
| 519 | | value = theme_format_expand(theme, name); |
| 520 | | g_free(name); |
| 521 | | |
| 522 | | if (*value == '\0') { |
| 523 | | |
| 524 | | |
| 525 | | g_free(value); |
| 526 | | value = theme_format_expand(theme, "{sb_background}"); |
| 527 | | } |
| 528 | | } |
| 529 | | |
| 530 | | if (*value == '\0') { |
| 531 | | g_free(value); |
| 532 | | value = g_strdup("%8"); |
| 533 | | } |
| 534 | | bar->color = g_strconcat("%n", value, NULL);
|
| 535 | | g_free(value); |
| 536 | | |
| 537 | | statusbars_recalc_ypos(bar); |
| 538 | | signal_emit("statusbar created", 1, bar); |
| 539 | | |
| 540 | | |
| 541 | | for (tmp = config->items; tmp != NULL; tmp = tmp->next) {
|
| 542 | | SBAR_ITEM_CONFIG_REC *rec = tmp->data; |
| 543 | | |
| 544 | | statusbar_item_create(bar, rec); |
| 545 | | } |
| 546 | | return bar; |
| 547 | | } |