ui/ncurses: Add nc_scr_{un,}post()
authorJeremy Kerr <jk@ozlabs.org>
Wed, 16 Oct 2013 03:30:29 +0000 (11:30 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Wed, 13 Nov 2013 09:31:04 +0000 (17:31 +0800)
We may have nc_scrs that aren't interested in post/unpost information,
so create helper functions that allow a NULL callback.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
ui/ncurses/nc-cui.c
ui/ncurses/nc-menu.c
ui/ncurses/nc-scr.c
ui/ncurses/nc-scr.h

index adbb3d60d9875904ef28878f42f7b820bf1cc128..b734cdcd46c2bd2a6868cd8c25ba831568aa47a5 100644 (file)
@@ -201,7 +201,7 @@ static void cui_boot_editor_on_exit(struct boot_editor *boot_editor,
 
                /* Re-attach the items array. */
                set_menu_items(menu->ncm, menu->items);
-               menu->scr.post(&menu->scr);
+               nc_scr_post(&menu->scr);
        } else {
                cod = item->data;
        }
@@ -249,10 +249,11 @@ struct nc_scr *cui_set_current(struct cui *cui, struct nc_scr *scr)
        assert(cui->current != scr);
 
        old = cui->current;
-       old->unpost(old);
+       nc_scr_unpost(old);
 
        cui->current = scr;
-       cui->current->post(cui->current);
+
+       nc_scr_post(cui->current);
 
        return old;
 }
@@ -365,7 +366,7 @@ static int cui_boot_option_add(struct device *dev, struct boot_option *opt,
        selected = current_item(cui->main->ncm);
 
        if (cui->current == &cui->main->scr)
-               cui->current->unpost(cui->current);
+               nc_scr_unpost(cui->current);
 
        /* This disconnects items array from menu. */
 
@@ -421,7 +422,7 @@ static int cui_boot_option_add(struct device *dev, struct boot_option *opt,
        set_current_item(cui->main->ncm, selected);
 
        if (cui->current == &cui->main->scr)
-               cui->current->post(cui->current);
+               nc_scr_post(cui->current);
 
        return 0;
 }
@@ -442,7 +443,7 @@ static void cui_device_remove(struct device *dev, void *arg)
        pb_log("%s: %p %s\n", __func__, dev, dev->id);
 
        if (cui->current == &cui->main->scr)
-               cui->current->unpost(cui->current);
+               nc_scr_unpost(cui->current);
 
        /* This disconnects items array from menu. */
 
@@ -472,7 +473,7 @@ static void cui_device_remove(struct device *dev, void *arg)
        }
 
        if (cui->current == &cui->main->scr)
-               cui->current->post(cui->current);
+               nc_scr_post(cui->current);
 }
 
 static void cui_update_status(struct boot_status *status, void *arg)
@@ -498,7 +499,7 @@ static void cui_update_mm_title(struct cui *cui)
                                " %s", cui->sysinfo->identifier);
 
        if (cui->current == &cui->main->scr)
-               cui->current->post(cui->current);
+               nc_scr_post(cui->current);
 }
 
 static void cui_update_sysinfo(struct system_info *sysinfo, void *arg)
@@ -628,7 +629,7 @@ int cui_run(struct cui *cui, struct pmenu *main, unsigned int default_item)
        cui->current = &cui->main->scr;
        cui->default_item = default_item;
 
-       cui->current->post(cui->current);
+       nc_scr_post(cui->current);
 
        while (1) {
                int result = waiter_poll(cui->waitset);
index beb63f3bdd2f91b3bf7fc9d4a18161c872bb6958..4dba0ad1d8d6680e7c21cd189e2642e0e5c167f8 100644 (file)
@@ -162,7 +162,7 @@ int pmenu_item_replace(struct pmenu_item *i, const char *name)
 
        set_item_userptr(nci, i);
 
-       menu->scr.unpost(&menu->scr);
+       nc_scr_unpost(&menu->scr);
        set_menu_items(menu->ncm, NULL);
 
        // FIXME: need to assure item name is a talloc string.
@@ -173,7 +173,7 @@ int pmenu_item_replace(struct pmenu_item *i, const char *name)
        i->nci = nci;
 
        set_menu_items(menu->ncm, menu->items);
-       menu->scr.post(&menu->scr);
+       nc_scr_post(&menu->scr);
 
        return 0;
 }
index c6172e1e4c6d11e0e022d92cbc6fef9a2f7c90c8..e8c5fcabc1b783b46ba051c1db45ec415a50b329 100644 (file)
@@ -40,6 +40,20 @@ static void nc_scr_status_draw(struct nc_scr *scr)
                scr->frame.status);
 }
 
+int nc_scr_post(struct nc_scr *scr)
+{
+       if (scr->post)
+               return scr->post(scr);
+       return 0;
+}
+
+int nc_scr_unpost(struct nc_scr *scr)
+{
+       if (scr->unpost)
+               return scr->unpost(scr);
+       return 0;
+}
+
 void nc_scr_frame_draw(struct nc_scr *scr)
 {
        int ltitle_len, rtitle_len;
index 5c4b97b1c89418acc8719edf1d6ca5deb01a69d2..775e8de4e25799ecd0c6d8f8a556617611e217e9 100644 (file)
@@ -95,4 +95,7 @@ void nc_scr_status_free(struct nc_scr *scr);
 void nc_scr_status_printf(struct nc_scr *scr, const char *format, ...);
 void nc_scr_frame_draw(struct nc_scr *scr);
 
+int nc_scr_post(struct nc_scr *src);
+int nc_scr_unpost(struct nc_scr *src);
+
 #endif