Changeset 8d1bcd7 in mainline for uspace/lib/ui/src/window.c


Ignore:
Timestamp:
2023-09-26T20:26:55Z (10 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5afc1aa
Parents:
ed1a948
Message:

Handover between system menu and menu bar

We can move between them using Left and Right keys in either closed
or open state. One can now open system menu with F10, Left, Down in
a window with menu bar, or just F10 in a window without menu bar.

File:
1 edited

Legend:

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

    red1a948 r8d1bcd7  
    4747#include <stdlib.h>
    4848#include <ui/control.h>
     49#include <ui/menubar.h>
    4950#include <ui/menu.h>
    5051#include <ui/menuentry.h>
     
    7677};
    7778
    78 static void wd_sysmenu(ui_wdecor_t *, void *, sysarg_t);
     79static void wd_sysmenu_open(ui_wdecor_t *, void *, sysarg_t);
     80static void wd_sysmenu_left(ui_wdecor_t *, void *, sysarg_t);
     81static void wd_sysmenu_right(ui_wdecor_t *, void *, sysarg_t);
     82static void wd_sysmenu_accel(ui_wdecor_t *, void *, char32_t, sysarg_t);
    7983static void wd_minimize(ui_wdecor_t *, void *);
    8084static void wd_maximize(ui_wdecor_t *, void *);
     
    8791
    8892static ui_wdecor_cb_t wdecor_cb = {
    89         .sysmenu = wd_sysmenu,
     93        .sysmenu_open = wd_sysmenu_open,
     94        .sysmenu_left = wd_sysmenu_left,
     95        .sysmenu_right = wd_sysmenu_right,
     96        .sysmenu_accel = wd_sysmenu_accel,
    9097        .minimize = wd_minimize,
    9198        .maximize = wd_maximize,
     
    10361043 * @param idev_id Input device ID
    10371044 */
    1038 static void wd_sysmenu(ui_wdecor_t *wdecor, void *arg, sysarg_t idev_id)
     1045static void wd_sysmenu_open(ui_wdecor_t *wdecor, void *arg, sysarg_t idev_id)
    10391046{
    10401047        ui_window_t *window = (ui_window_t *) arg;
    10411048
    10421049        ui_window_send_sysmenu(window, idev_id);
     1050}
     1051
     1052/** Window decoration requested moving left from system menu handle.
     1053 *
     1054 * @param wdecor Window decoration
     1055 * @param arg Argument (window)
     1056 * @param idev_id Input device ID
     1057 */
     1058static void wd_sysmenu_left(ui_wdecor_t *wdecor, void *arg, sysarg_t idev_id)
     1059{
     1060        ui_window_t *window = (ui_window_t *) arg;
     1061
     1062        if (window->mbar != NULL) {
     1063                ui_menu_bar_select_last(window->mbar, false, idev_id);
     1064                ui_wdecor_sysmenu_hdl_set_active(window->wdecor, false);
     1065        }
     1066}
     1067
     1068/** Window decoration requested moving right from system menu handle.
     1069 *
     1070 * @param wdecor Window decoration
     1071 * @param arg Argument (window)
     1072 * @param idev_id Input device ID
     1073 */
     1074static void wd_sysmenu_right(ui_wdecor_t *wdecor, void *arg, sysarg_t idev_id)
     1075{
     1076        ui_window_t *window = (ui_window_t *) arg;
     1077
     1078        if (window->mbar != NULL) {
     1079                ui_menu_bar_select_first(window->mbar, false, idev_id);
     1080                ui_wdecor_sysmenu_hdl_set_active(window->wdecor, false);
     1081        }
     1082}
     1083
     1084/** Window decoration detected accelerator press from system menu handle.
     1085 *
     1086 * @param wdecor Window decoration
     1087 * @param arg Argument (window)
     1088 * @param c Accelerator key
     1089 * @param idev_id Input device ID
     1090 */
     1091static void wd_sysmenu_accel(ui_wdecor_t *wdecor, void *arg, char32_t c,
     1092    sysarg_t idev_id)
     1093{
     1094        ui_window_t *window = (ui_window_t *) arg;
     1095
     1096        if (window->mbar != NULL) {
     1097                ui_menu_bar_press_accel(window->mbar, c, idev_id);
     1098                ui_wdecor_sysmenu_hdl_set_active(window->wdecor, false);
     1099        }
    10431100}
    10441101
     
    14911548static void wnd_sysmenu_left(ui_menu_t *sysmenu, void *arg, sysarg_t idev_id)
    14921549{
     1550        ui_window_t *window = (ui_window_t *)arg;
     1551
    14931552        (void)sysmenu;
    1494         (void)arg;
    1495         (void)idev_id;
     1553
     1554        if (window->mbar != NULL)
     1555                ui_menu_bar_select_last(window->mbar, true, idev_id);
    14961556}
    14971557
     
    15041564static void wnd_sysmenu_right(ui_menu_t *sysmenu, void *arg, sysarg_t idev_id)
    15051565{
     1566        ui_window_t *window = (ui_window_t *)arg;
     1567
    15061568        (void)sysmenu;
    1507         (void)arg;
    1508         (void)idev_id;
     1569
     1570        if (window->mbar != NULL)
     1571                ui_menu_bar_select_first(window->mbar, true, idev_id);
    15091572}
    15101573
Note: See TracChangeset for help on using the changeset viewer.