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


Ignore:
Timestamp:
2023-09-26T20:26:55Z (22 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/menubar.c

    red1a948 r8d1bcd7  
    4848#include <ui/menubar.h>
    4949#include <ui/menudd.h>
     50#include <ui/wdecor.h>
    5051#include <ui/window.h>
    5152#include "../private/menubar.h"
    5253#include "../private/resource.h"
     54#include "../private/wdecor.h"
     55#include "../private/window.h"
    5356
    5457enum {
     
    97100        mbar->window = window;
    98101        list_initialize(&mbar->menudds);
     102
     103        if (window->mbar == NULL)
     104                window->mbar = mbar;
     105
    99106        *rmbar = mbar;
    100107        return EOK;
     
    111118        if (mbar == NULL)
    112119                return;
     120
     121        if (mbar->window->mbar == mbar)
     122                mbar->window->mbar = NULL;
    113123
    114124        /* Destroy menu drop-downs */
     
    277287                        (void) ui_menu_dd_open(mbar->selected, &rect, idev_id);
    278288                }
    279         }
     289
     290                mbar->active = true;
     291        } else {
     292                mbar->active = false;
     293        }
     294}
     295
     296void ui_menu_bar_select_first(ui_menu_bar_t *mbar, bool openup,
     297    sysarg_t idev_id)
     298{
     299        ui_menu_dd_t *mdd;
     300
     301        mdd = ui_menu_dd_first(mbar);
     302        ui_menu_bar_select(mbar, mdd, openup, idev_id);
     303}
     304
     305void ui_menu_bar_select_last(ui_menu_bar_t *mbar, bool openup,
     306    sysarg_t idev_id)
     307{
     308        ui_menu_dd_t *mdd;
     309
     310        mdd = ui_menu_dd_last(mbar);
     311        ui_menu_bar_select(mbar, mdd, openup, idev_id);
     312}
     313
     314void ui_menu_bar_select_sysmenu(ui_menu_bar_t *mbar, sysarg_t idev_id)
     315{
     316        bool was_open;
     317
     318        ui_wdecor_sysmenu_hdl_set_active(mbar->window->wdecor, true);
     319        was_open = mbar->selected != NULL &&
     320            ui_menu_dd_is_open(mbar->selected);
     321
     322        if (was_open)
     323                ui_window_send_sysmenu(mbar->window, idev_id);
    280324}
    281325
     
    296340
    297341        nmdd = ui_menu_dd_prev(mbar->selected);
    298         if (nmdd == NULL)
    299                 nmdd = ui_menu_dd_last(mbar);
     342        if (nmdd == NULL) {
     343                if ((mbar->window->wdecor->style & ui_wds_sysmenu_hdl) != 0) {
     344                        ui_menu_bar_select_sysmenu(mbar, idev_id);
     345                } else {
     346                        nmdd = ui_menu_dd_last(mbar);
     347                }
     348        }
    300349
    301350        if (nmdd != mbar->selected)
     
    319368
    320369        nmdd = ui_menu_dd_next(mbar->selected);
    321         if (nmdd == NULL)
    322                 nmdd = ui_menu_dd_first(mbar);
     370        if (nmdd == NULL) {
     371                if ((mbar->window->wdecor->style & ui_wds_sysmenu_hdl) != 0) {
     372                        ui_menu_bar_select_sysmenu(mbar, idev_id);
     373                } else {
     374                        nmdd = ui_menu_dd_first(mbar);
     375                }
     376        }
    323377
    324378        if (nmdd != mbar->selected)
     
    551605}
    552606
     607/** Deactivate menu bar.
     608 *
     609 * @param mbar Menu bar
     610 */
    553611void ui_menu_bar_deactivate(ui_menu_bar_t *mbar)
    554612{
    555613        ui_menu_bar_select(mbar, NULL, false, 0);
    556         mbar->active = false;
    557614}
    558615
Note: See TracChangeset for help on using the changeset viewer.