Changeset 252d03c in mainline for uspace/lib/ui/src/ui.c


Ignore:
Timestamp:
2021-04-28T09:22:39Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7470d97
Parents:
de227aba
Message:

Popping up a message, in text mode as well

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/src/ui.c

    rde227aba r252d03c  
    3434 */
    3535
     36#include <adt/list.h>
    3637#include <ctype.h>
    3738#include <display.h>
     
    4546#include <ui/ui.h>
    4647#include <ui/wdecor.h>
     48#include <ui/window.h>
    4749#include "../private/window.h"
    4850#include "../private/ui.h"
     
    104106        display_t *display;
    105107        console_ctrl_t *console;
     108        console_gc_t *cgc;
    106109        ui_winsys_t ws;
    107110        const char *osvc;
     
    131134                        return rc;
    132135                }
     136
     137                rc = console_gc_create(console, NULL, &cgc);
     138                if (rc != EOK) {
     139                        ui_destroy(ui);
     140                        console_done(console);
     141                        return rc;
     142                }
     143
     144                ui->cgc = cgc;
    133145        } else {
    134146                return EINVAL;
     
    154166
    155167        ui->console = console;
     168        list_initialize(&ui->windows);
    156169        *rui = ui;
    157170        return EOK;
     
    173186
    174187        ui->display = disp;
     188        list_initialize(&ui->windows);
    175189        *rui = ui;
    176190        return EOK;
     
    187201
    188202        if (ui->myoutput) {
     203                if (ui->cgc != NULL)
     204                        console_gc_delete(ui->cgc);
    189205                if (ui->console != NULL)
    190206                        console_done(ui->console);
     
    198214static void ui_cons_event_process(ui_t *ui, cons_event_t *event)
    199215{
    200         if (ui->root_wnd == NULL)
     216        ui_window_t *awnd;
     217        ui_evclaim_t claim;
     218
     219        awnd = ui_window_get_active(ui);
     220        if (awnd == NULL)
    201221                return;
    202222
    203223        switch (event->type) {
    204224        case CEV_KEY:
    205                 ui_window_send_kbd(ui->root_wnd, &event->ev.key);
     225                ui_window_send_kbd(awnd, &event->ev.key);
    206226                break;
    207227        case CEV_POS:
    208                 ui_wdecor_pos_event(ui->root_wnd->wdecor, &event->ev.pos);
    209                 ui_window_send_pos(ui->root_wnd, &event->ev.pos);
     228                claim = ui_wdecor_pos_event(awnd->wdecor, &event->ev.pos);
     229                /* Note: If event is claimed, awnd might not be valid anymore */
     230                if (claim == ui_unclaimed)
     231                        ui_window_send_pos(awnd, &event->ev.pos);
    210232                break;
    211233        }
     
    248270}
    249271
     272/** Repaint UI (only used in fullscreen mode).
     273 *
     274 * This is used when an area is exposed in fullscreen mode.
     275 *
     276 * @param ui UI
     277 * @return @c EOK on success or an error code
     278 */
     279errno_t ui_paint(ui_t *ui)
     280{
     281        errno_t rc;
     282        ui_window_t *awnd;
     283
     284        /* XXX Should repaint all windows */
     285        awnd = ui_window_get_active(ui);
     286        if (awnd == NULL)
     287                return EOK;
     288
     289        rc = ui_wdecor_paint(awnd->wdecor);
     290        if (rc != EOK)
     291                return rc;
     292
     293        return ui_window_paint(awnd);
     294}
     295
    250296/** Terminate user interface.
    251297 *
     
    275321}
    276322
     323/** Determine if we are emulating windows.
     324 *
     325 * @param ui User interface
     326 * @return @c true iff we are running in text mode
     327 */
     328bool ui_is_fullscreen(ui_t *ui)
     329{
     330        return (ui->display == NULL);
     331}
     332
    277333/** @}
    278334 */
Note: See TracChangeset for help on using the changeset viewer.