Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/taskbar/taskbar.c

    r82d3c28 rd92b8e8f  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4848#include "wndlist.h"
    4949
     50#define TASKBAR_CONFIG_FILE "/cfg/taskbar.sif"
     51
    5052static void taskbar_wnd_close(ui_window_t *, void *);
    5153static void taskbar_wnd_kbd(ui_window_t *, void *, kbd_event_t *);
    5254static void taskbar_wnd_pos(ui_window_t *, void *, pos_event_t *);
     55static void taskbar_notif_cb(void *);
    5356
    5457static ui_window_cb_t window_cb = {
     
    128131        gfx_rect_t scr_rect;
    129132        gfx_rect_t rect;
     133        char *dspec = NULL;
     134        char *qmark;
    130135        errno_t rc;
    131136
    132137        taskbar = calloc(1, sizeof(taskbar_t));
    133138        if (taskbar == NULL) {
     139                printf("Out of memory.\n");
    134140                rc = ENOMEM;
    135141                goto error;
    136142        }
     143
     144        dspec = str_dup(display_spec);
     145        if (dspec == NULL) {
     146                printf("Out of memory.\n");
     147                rc = ENOMEM;
     148                goto error;
     149        }
     150
     151        /* Remove additional arguments */
     152        qmark = str_chr(dspec, '?');
     153        if (qmark != NULL)
     154                *qmark = '\0';
    137155
    138156        rc = ui_create(display_spec, &taskbar->ui);
     
    195213        }
    196214
    197         rc = tbsmenu_create(taskbar->window, taskbar->fixed, &taskbar->tbsmenu);
     215        rc = tbsmenu_create(taskbar->window, taskbar->fixed, dspec,
     216            &taskbar->tbsmenu);
    198217        if (rc != EOK) {
    199218                printf("Error creating start menu.\n");
     
    201220        }
    202221
    203         rc = tbsmenu_load(taskbar->tbsmenu, "/cfg/taskbar.sif");
     222        rc = tbsmenu_load(taskbar->tbsmenu, TASKBAR_CONFIG_FILE);
    204223        if (rc != EOK) {
    205224                printf("Error loading start menu from '%s'.\n",
    206                     "/cfg/taskbar.sif");
     225                    TASKBAR_CONFIG_FILE);
     226        }
     227
     228        rc = tbarcfg_listener_create(TBARCFG_NOTIFY_DEFAULT,
     229            taskbar_notif_cb, (void *)taskbar, &taskbar->lst);
     230        if (rc != EOK) {
     231                printf("Error listening for configuration changes.\n");
    207232        }
    208233
     
    284309        }
    285310
     311        free(dspec);
    286312        *rtaskbar = taskbar;
    287313        return EOK;
    288314error:
     315        if (dspec != NULL)
     316                free(dspec);
     317        if (taskbar->lst != NULL)
     318                tbarcfg_listener_destroy(taskbar->lst);
    289319        if (taskbar->clock != NULL)
    290320                taskbar_clock_destroy(taskbar->clock);
     
    297327        if (taskbar->ui != NULL)
    298328                ui_destroy(taskbar->ui);
     329        free(taskbar);
    299330        return rc;
    300331
     
    304335void taskbar_destroy(taskbar_t *taskbar)
    305336{
     337        if (taskbar->lst != NULL)
     338                tbarcfg_listener_destroy(taskbar->lst);
    306339        ui_fixed_remove(taskbar->fixed, taskbar_clock_ctl(taskbar->clock));
    307340        taskbar_clock_destroy(taskbar->clock);
     
    312345}
    313346
     347/** Configuration change notification callback.
     348 *
     349 * Called when configuration changed.
     350 *
     351 * @param arg Argument (taskbar_t *)
     352 */
     353static void taskbar_notif_cb(void *arg)
     354{
     355        taskbar_t *taskbar = (taskbar_t *)arg;
     356
     357        ui_lock(taskbar->ui);
     358        tbsmenu_reload(taskbar->tbsmenu);
     359        ui_unlock(taskbar->ui);
     360}
     361
    314362/** @}
    315363 */
Note: See TracChangeset for help on using the changeset viewer.