Changeset ec50d65e in mainline


Ignore:
Timestamp:
2024-06-22T09:13:30Z (9 days ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
49aaa0e
Parents:
743f2cdd
git-author:
Jiri Svoboda <jiri@…> (2024-06-22 09:12:48)
git-committer:
Jiri Svoboda <jiri@…> (2024-06-22 09:13:30)
Message:

Editor needs to hide cursor when menu bar is activated

Location:
uspace
Files:
6 edited

Legend:

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

    r743f2cdd rec50d65e  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * Copyright (c) 2012 Martin Sucha
    44 * All rights reserved.
     
    238238
    239239static void edit_wnd_close(ui_window_t *, void *);
     240static void edit_wnd_focus(ui_window_t *, void *, unsigned);
    240241static void edit_wnd_kbd_event(ui_window_t *, void *, kbd_event_t *);
     242static void edit_wnd_unfocus(ui_window_t *, void *, unsigned);
    241243
    242244static ui_window_cb_t edit_window_cb = {
    243245        .close = edit_wnd_close,
    244         .kbd = edit_wnd_kbd_event
     246        .focus = edit_wnd_focus,
     247        .kbd = edit_wnd_kbd_event,
     248        .unfocus = edit_wnd_unfocus
     249};
     250
     251static void edit_menubar_activate(ui_menu_bar_t *, void *);
     252static void edit_menubar_deactivate(ui_menu_bar_t *, void *);
     253
     254static ui_menu_bar_cb_t edit_menubar_cb = {
     255        .activate = edit_menubar_activate,
     256        .deactivate = edit_menubar_deactivate
    245257};
    246258
     
    431443        }
    432444
     445        ui_menu_bar_set_cb(edit->menubar, &edit_menubar_cb, (void *) edit);
     446
    433447        rc = ui_menu_dd_create(edit->menubar, "~F~ile", NULL, &mfile);
    434448        if (rc != EOK) {
     
    22212235}
    22222236
     2237/** Window focus event
     2238 *
     2239 * @param window Window
     2240 * @param arg Argument (edit_t *)
     2241 * @param focus Focus number
     2242 */
     2243static void edit_wnd_focus(ui_window_t *window, void *arg, unsigned focus)
     2244{
     2245        edit_t *edit = (edit_t *)arg;
     2246
     2247        (void)edit;
     2248        pane_caret_display(&pane);
     2249        cursor_setvis(true);
     2250}
     2251
    22232252/** Window keyboard event
    22242253 *
     
    22422271}
    22432272
     2273/** Window unfocus event
     2274 *
     2275 * @param window Window
     2276 * @param arg Argument (edit_t *)
     2277 * @param focus Focus number
     2278 */
     2279static void edit_wnd_unfocus(ui_window_t *window, void *arg, unsigned focus)
     2280{
     2281        edit_t *edit = (edit_t *) arg;
     2282
     2283        (void)edit;
     2284        cursor_setvis(false);
     2285}
     2286
     2287/** Menu bar activate event
     2288 *
     2289 * @param mbar Menu bar
     2290 * @param arg Argument (edit_t *)
     2291 */
     2292static void edit_menubar_activate(ui_menu_bar_t *mbar, void *arg)
     2293{
     2294        edit_t *edit = (edit_t *)arg;
     2295
     2296        (void)edit;
     2297        cursor_setvis(false);
     2298}
     2299
     2300/** Menu bar deactivate event
     2301 *
     2302 * @param mbar Menu bar
     2303 * @param arg Argument (edit_t *)
     2304 */
     2305static void edit_menubar_deactivate(ui_menu_bar_t *mbar, void *arg)
     2306{
     2307        edit_t *edit = (edit_t *)arg;
     2308
     2309        (void)edit;
     2310        pane_caret_display(&pane);
     2311        cursor_setvis(true);
     2312}
     2313
    22442314/** File / Save menu entry selected.
    22452315 *
     
    24072477{
    24082478        edit_t *edit = (edit_t *)arg;
    2409         gfx_context_t *gc = ui_window_get_gc(edit->window);
    24102479        char *cname;
    24112480        errno_t rc;
    24122481
     2482        (void)edit;
    24132483        ui_file_dialog_destroy(dialog);
    2414         // TODO Smarter cursor management
    2415         pane.rflags |= REDRAW_CARET;
    2416         (void) pane_update(&pane);
    2417         gfx_cursor_set_visible(gc, true);
    24182484
    24192485        cname = str_dup(fname);
     
    24412507{
    24422508        edit_t *edit = (edit_t *)arg;
    2443         gfx_context_t *gc = ui_window_get_gc(edit->window);
    2444 
     2509
     2510        (void)edit;
    24452511        ui_file_dialog_destroy(dialog);
    2446         // TODO Smarter cursor management
    2447         pane.rflags |= REDRAW_CARET;
    2448         (void) pane_update(&pane);
    2449         gfx_cursor_set_visible(gc, true);
    24502512}
    24512513
     
    24582520{
    24592521        edit_t *edit = (edit_t *)arg;
    2460         gfx_context_t *gc = ui_window_get_gc(edit->window);
    2461 
     2522
     2523        (void)edit;
    24622524        ui_file_dialog_destroy(dialog);
    2463         // TODO Smarter cursor management
    2464         pane.rflags |= REDRAW_CARET;
    2465         (void) pane_update(&pane);
    2466         gfx_cursor_set_visible(gc, true);
    24672525}
    24682526
     
    24772535{
    24782536        edit_t *edit = (edit_t *) arg;
    2479         gfx_context_t *gc = ui_window_get_gc(edit->window);
    24802537        char *endptr;
    24812538        int line;
     
    24892546
    24902547        caret_move_absolute(line, pane.ideal_column, dir_before, false);
    2491         // TODO Smarter cursor management
     2548        (void)edit;
    24922549        (void) pane_update(&pane);
    2493         gfx_cursor_set_visible(gc, true);
    2494         (void) gfx_update(gc);
    24952550}
    24962551
     
    25032558{
    25042559        edit_t *edit = (edit_t *) arg;
    2505         gfx_context_t *gc = ui_window_get_gc(edit->window);
    2506 
     2560
     2561        (void)edit;
    25072562        ui_prompt_dialog_destroy(dialog);
    2508         // TODO Smarter cursor management
    2509         pane.rflags |= REDRAW_CARET;
    2510         (void) pane_update(&pane);
    2511         gfx_cursor_set_visible(gc, true);
    25122563}
    25132564
     
    25202571{
    25212572        edit_t *edit = (edit_t *) arg;
    2522         gfx_context_t *gc = ui_window_get_gc(edit->window);
    2523 
     2573
     2574        (void)edit;
    25242575        ui_prompt_dialog_destroy(dialog);
    2525         // TODO Smarter cursor management
    2526         pane.rflags |= REDRAW_CARET;
    2527         (void) pane_update(&pane);
    2528         gfx_cursor_set_visible(gc, true);
    25292576}
    25302577
     
    25392586{
    25402587        edit_t *edit = (edit_t *) arg;
    2541         gfx_context_t *gc = ui_window_get_gc(edit->window);
    25422588        char *pattern;
    25432589        bool reverse;
    25442590
     2591        (void)edit;
    25452592        ui_prompt_dialog_destroy(dialog);
    25462593
     
    25592606        search(pattern, reverse);
    25602607
    2561         // TODO Smarter cursor management
    25622608        (void) pane_update(&pane);
    2563         gfx_cursor_set_visible(gc, true);
    2564         (void) gfx_update(gc);
    25652609}
    25662610
     
    25732617{
    25742618        edit_t *edit = (edit_t *) arg;
    2575         gfx_context_t *gc = ui_window_get_gc(edit->window);
    2576 
     2619
     2620        (void)edit;
    25772621        ui_prompt_dialog_destroy(dialog);
    2578         // TODO Smarter cursor management
    2579         pane.rflags |= REDRAW_CARET;
    2580         (void) pane_update(&pane);
    2581         gfx_cursor_set_visible(gc, true);
    25822622}
    25832623
     
    25902630{
    25912631        edit_t *edit = (edit_t *) arg;
    2592         gfx_context_t *gc = ui_window_get_gc(edit->window);
    2593 
     2632
     2633        (void)edit;
    25942634        ui_prompt_dialog_destroy(dialog);
    2595         // TODO Smarter cursor management
    2596         pane.rflags |= REDRAW_CARET;
    2597         (void) pane_update(&pane);
    2598         gfx_cursor_set_visible(gc, true);
    25992635}
    26002636
  • uspace/lib/ui/include/types/ui/menubar.h

    r743f2cdd rec50d65e  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4040typedef struct ui_menu_bar ui_menu_bar_t;
    4141
     42/** Menu bar callbacks */
     43typedef struct ui_menu_bar_cb {
     44        /** Activated */
     45        void (*activate)(ui_menu_bar_t *, void *);
     46        /** Deactivated */
     47        void (*deactivate)(ui_menu_bar_t *, void *);
     48} ui_menu_bar_cb_t;
     49
    4250#endif
    4351
  • uspace/lib/ui/include/ui/menubar.h

    r743f2cdd rec50d65e  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5252    ui_menu_bar_t **);
    5353extern void ui_menu_bar_destroy(ui_menu_bar_t *);
     54extern void ui_menu_bar_set_cb(ui_menu_bar_t *, ui_menu_bar_cb_t *, void *);
    5455extern ui_control_t *ui_menu_bar_ctl(ui_menu_bar_t *);
    5556extern void ui_menu_bar_set_rect(ui_menu_bar_t *, gfx_rect_t *);
  • uspace/lib/ui/private/menubar.h

    r743f2cdd rec50d65e  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6464        /** List of menu drop-downs (ui_menu_dd_t) */
    6565        list_t menudds;
     66        /** Callbacks */
     67        struct ui_menu_bar_cb *cb;
     68        /** Callback argument */
     69        void *arg;
    6670};
    6771
  • uspace/lib/ui/src/menubar.c

    r743f2cdd rec50d65e  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6666static ui_evclaim_t ui_menu_bar_ctl_kbd_event(void *, kbd_event_t *);
    6767static ui_evclaim_t ui_menu_bar_ctl_pos_event(void *, pos_event_t *);
     68static void ui_menu_bar_activate_ev(ui_menu_bar_t *);
     69static void ui_menu_bar_deactivate_ev(ui_menu_bar_t *);
    6870
    6971/** Menu bar control ops */
     
    131133        ui_control_delete(mbar->control);
    132134        free(mbar);
     135}
     136
     137/** Set menu bar callbacks.
     138 *
     139 * @param mbar Menu bar
     140 * @param cb Callbacks
     141 * @param arg Callback argument
     142 */
     143void ui_menu_bar_set_cb(ui_menu_bar_t *mbar, ui_menu_bar_cb_t *cb, void *arg)
     144{
     145        mbar->cb = cb;
     146        mbar->arg = arg;
    133147}
    134148
     
    288302                }
    289303
     304                if (!mbar->active)
     305                        ui_menu_bar_activate_ev(mbar);
    290306                mbar->active = true;
    291307        } else {
     308                if (mbar->active)
     309                        ui_menu_bar_deactivate_ev(mbar);
    292310                mbar->active = false;
    293311        }
     
    640658
    641659        (void) ui_menu_bar_paint(mbar);
     660        ui_menu_bar_activate_ev(mbar);
    642661}
    643662
     
    649668{
    650669        ui_menu_bar_select(mbar, NULL, false, 0);
     670        ui_menu_bar_deactivate_ev(mbar);
    651671}
    652672
     
    700720}
    701721
     722/** Send menu bar activate event.
     723 *
     724 * @param mbar Menu bar
     725 */
     726static void ui_menu_bar_activate_ev(ui_menu_bar_t *mbar)
     727{
     728        if (mbar->cb != NULL && mbar->cb->activate != NULL)
     729                mbar->cb->activate(mbar, mbar->arg);
     730}
     731
     732/** Send menu bar deactivate event.
     733 *
     734 * @param mbar Menu bar
     735 */
     736static void ui_menu_bar_deactivate_ev(ui_menu_bar_t *mbar)
     737{
     738        if (mbar->cb != NULL && mbar->cb->deactivate != NULL)
     739                mbar->cb->deactivate(mbar, mbar->arg);
     740}
     741
    702742/** @}
    703743 */
  • uspace/lib/ui/src/window.c

    r743f2cdd rec50d65e  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    318318{
    319319        ui_window_t *window;
     320        ui_window_t *pwindow = NULL;
    320321        display_info_t info;
    321322        gfx_coord2_t scr_dims;
     
    505506        *rwindow = window;
    506507
     508        if (ui_is_fullscreen(ui))
     509                pwindow = ui_window_get_active(ui);
     510
    507511        list_append(&window->lwindows, &ui->windows);
     512
     513        if (ui_is_fullscreen(ui)) {
     514                /* Send unfocus event to previously active window */
     515                if (pwindow != NULL)
     516                        ui_window_send_unfocus(pwindow, 0);
     517        }
     518
    508519        return EOK;
    509520error:
     
    531542{
    532543        ui_t *ui;
     544        ui_window_t *nwindow;
    533545
    534546        if (window == NULL)
     
    558570        if (ui_is_fullscreen(ui)) {
    559571                ui_paint(ui);
     572                /* Send focus event to newly active window */
     573                nwindow = ui_window_get_active(ui);
     574                if (nwindow != NULL)
     575                        ui_window_send_focus(nwindow, 0);
    560576        }
    561577
Note: See TracChangeset for help on using the changeset viewer.