Ignore:
Timestamp:
Aug 2, 2010, 9:27:30 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.3 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/gui/widgets/qmenu_wince.cpp

    r651 r769  
    102102};
    103103
    104 typedef int (WINAPI *superfunc)(int, int);
    105104typedef BOOL (WINAPI *AygCreateMenuBar)(qt_SHMENUBARINFO*);
    106105typedef HRESULT (WINAPI *AygEnableSoftKey)(HWND,UINT,BOOL,BOOL);
     
    128127        ptrEnableSoftKey(handle, command, false, true);
    129128}
     129
    130130static void qt_wce_disable_soft_key(HWND handle, uint command)
    131131{
     
    135135}
    136136
    137 static void qt_wce_delete_action_list(QList<QWceMenuAction*> *list) {
     137static void qt_wce_delete_action_list(QList<QWceMenuAction*> *list)
     138{
    138139    for(QList<QWceMenuAction*>::Iterator it = list->begin(); it != list->end(); ++it) {
    139140        QWceMenuAction *action = (*it);
     
    145146
    146147//search for first QuitRole in QMenuBar
    147 static QAction* qt_wce_get_quit_action(QList<QAction *> actionItems) {
     148static QAction* qt_wce_get_quit_action(QList<QAction *> actionItems)
     149{
    148150    QAction *returnAction = 0;
    149151    for (int i = 0; i < actionItems.size(); ++i) {
     
    160162}
    161163
    162 static QAction* qt_wce_get_quit_action(QList<QWceMenuAction*> actionItems) {
     164static QAction* qt_wce_get_quit_action(QList<QWceMenuAction*> actionItems)
     165{
    163166    for (int i = 0; i < actionItems.size(); ++i) {
    164167        if (actionItems.at(i)->action->menuRole() == QAction::QuitRole)
     
    173176}
    174177
    175 static HMODULE qt_wce_get_module_handle() {
     178static HMODULE qt_wce_get_module_handle()
     179{
    176180    HMODULE module =  0; //handle to resources
    177181    if (!(module = GetModuleHandle(L"QtGui4"))) //release dynamic
     
    182186}
    183187
    184 static void qt_wce_change_command(HWND menuHandle, int item, int command) {
     188static void qt_wce_change_command(HWND menuHandle, int item, int command)
     189{
    185190TBBUTTONINFOA tbbi;
    186191    memset(&tbbi,0,sizeof(tbbi));
     
    191196}
    192197
    193 static void qt_wce_rename_menu_item(HWND menuHandle, int item, const QString &newText) {
     198static void qt_wce_rename_menu_item(HWND menuHandle, int item, const QString &newText)
     199{
    194200    TBBUTTONINFOA tbbi;
    195201    memset(&tbbi,0,sizeof(tbbi));
     
    202208}
    203209
    204 static HWND qt_wce_create_menubar(HWND parentHandle, HINSTANCE resourceHandle, int toolbarID, int flags = 0) {
     210static HWND qt_wce_create_menubar(HWND parentHandle, HINSTANCE resourceHandle, int toolbarID, int flags = 0)
     211{
    205212    resolveAygLibs();
    206213
     
    227234}
    228235
    229 static void qt_wce_insert_action(HMENU menu, QWceMenuAction *action, bool created) {
    230 
     236static void qt_wce_insert_action(HMENU menu, QWceMenuAction *action)
     237{
    231238    Q_ASSERT_X(menu, "AppendMenu", "menu is 0");
    232239    if (action->action->isVisible()) {
     
    242249            text.remove(QChar::fromLatin1('&'));
    243250            AppendMenu (menu, MF_STRING | flags | MF_POPUP,
    244             (UINT) action->action->menu()->wceMenu(created), reinterpret_cast<const wchar_t *> (text.utf16()));
     251            (UINT) action->action->menu()->wceMenu(), reinterpret_cast<const wchar_t *> (text.utf16()));
    245252        }
    246253        else {
     
    255262}
    256263
     264// Removes all items from the menu without destroying the handles.
     265static void qt_wce_clear_menu(HMENU hMenu)
     266{
     267    while (RemoveMenu(hMenu, 0, MF_BYPOSITION));
     268}
     269
    257270/*!
    258271    \internal
     
    261274*/
    262275
    263 void QMenuBar::wceRefresh() {
     276void QMenuBar::wceRefresh()
     277{
    264278    for (int i = 0; i < nativeMenuBars.size(); ++i)
    265279        nativeMenuBars.at(i)->d_func()->wceRefresh();
    266280}
    267281
    268 void QMenuBarPrivate::wceRefresh() {
     282void QMenuBarPrivate::wceRefresh()
     283{
    269284    DrawMenuBar(wce_menubar->menubarHandle);
    270285}
     
    276291*/
    277292
    278 QAction* QMenu::wceCommands(uint command) {
     293QAction* QMenu::wceCommands(uint command)
     294{
    279295    Q_D(QMenu);
    280296    return d->wceCommands(command);
     
    288304*/
    289305
    290 void QMenuBar::wceCommands(uint command, HWND) {
    291     for (int i = 0; i < nativeMenuBars.size(); ++i)
    292             nativeMenuBars.at(i)->d_func()->wceCommands(command);
    293 }
    294 
    295 bool QMenuBarPrivate::wceEmitSignals(QList<QWceMenuAction*> actions, uint command) {
     306void QMenuBar::wceCommands(uint command)
     307{
     308    const HWND hwndActiveWindow = GetActiveWindow();
     309    for (int i = 0; i < nativeMenuBars.size(); ++i) {
     310        QMenuBarPrivate* nativeMenuBar = nativeMenuBars.at(i)->d_func();
     311        if (hwndActiveWindow == nativeMenuBar->wce_menubar->parentWindowHandle)
     312            nativeMenuBar->wceCommands(command);
     313    }
     314}
     315
     316bool QMenuBarPrivate::wceEmitSignals(QList<QWceMenuAction*> actions, uint command)
     317{
    296318    QAction *foundAction = 0;
    297319    for (int i = 0; i < actions.size(); ++i) {
    298         if (foundAction)
    299             break;
    300320        QWceMenuAction *action = actions.at(i);
    301321        if (action->action->menu()) {
    302322            foundAction = action->action->menu()->wceCommands(command);
     323            if (foundAction)
     324                break;
    303325        }
    304326        else if (action->command == command) {
    305             emit q_func()->triggered(action->action);
    306327            action->action->activate(QAction::Trigger);
    307328            return true;
     
    315336}
    316337
    317 void QMenuBarPrivate::wceCommands(uint command) {
     338void QMenuBarPrivate::wceCommands(uint command)
     339{
    318340    if (wceClassicMenu) {
    319341        for (int i = 0; i < wce_menubar->actionItemsClassic.size(); ++i)
     
    321343    } else {
    322344        if (wceEmitSignals(wce_menubar->actionItems, command)) {
    323             return ;
     345            return;
    324346        }
    325347        else if (wce_menubar->leftButtonIsMenu) {//check if command is on the left quick button
     
    333355}
    334356
    335 QAction *QMenuPrivate::wceCommands(uint command) {
     357QAction *QMenuPrivate::wceCommands(uint command)
     358{
    336359    QAction *foundAction = 0;
    337360    for (int i  = 0; i < wce_menu->actionItems.size(); ++i) {
     
    343366        }
    344367        else if (action->command == command) {
    345             action->action->activate(QAction::Trigger);
     368            activateAction(action->action, QAction::Trigger);
    346369            return action->action;
    347370        }
     
    352375}
    353376
    354 void QMenuBarPrivate::wceCreateMenuBar(QWidget *parent) {
    355 
     377void QMenuBarPrivate::wceCreateMenuBar(QWidget *parent)
     378{
    356379    Q_Q(QMenuBar);
    357380    wce_menubar = new QWceMenuBarPrivate(this);
     
    367390}
    368391
    369 void QMenuBarPrivate::wceDestroyMenuBar() {
     392void QMenuBarPrivate::wceDestroyMenuBar()
     393{
    370394    Q_Q(QMenuBar);
    371395    int index = nativeMenuBars.indexOf(q);
    372396    nativeMenuBars.removeAt(index);
    373     if (wce_menubar)
    374       delete wce_menubar;
    375     wce_menubar = 0;
    376 }
    377 
    378 QMenuBarPrivate::QWceMenuBarPrivate::QWceMenuBarPrivate(QMenuBarPrivate *menubar) :
    379                                      menubarHandle(0), menuHandle(0),leftButtonMenuHandle(0) ,
    380                                      leftButtonAction(0), leftButtonIsMenu(false), d(menubar) {
    381 }
    382 
    383 QMenuBarPrivate::QWceMenuBarPrivate::~QWceMenuBarPrivate() {
     397    if (wce_menubar) {
     398        delete wce_menubar;
     399        wce_menubar = 0;
     400    }
     401}
     402
     403QMenuBarPrivate::QWceMenuBarPrivate::QWceMenuBarPrivate(QMenuBarPrivate *menubar)
     404:   menubarHandle(0), menuHandle(0), leftButtonMenuHandle(0),
     405    leftButtonAction(0), leftButtonIsMenu(false), d(menubar)
     406{
     407}
     408
     409QMenuBarPrivate::QWceMenuBarPrivate::~QWceMenuBarPrivate()
     410{
    384411    if (menubarHandle)
    385412        DestroyWindow(menubarHandle);
     
    399426}
    400427
    401 QMenuPrivate::QWceMenuPrivate::QWceMenuPrivate() {
    402     menuHandle = 0;
    403 }
    404 
    405 QMenuPrivate::QWceMenuPrivate::~QWceMenuPrivate() {
     428QMenuPrivate::QWceMenuPrivate::QWceMenuPrivate()
     429:   menuHandle(0)
     430{
     431}
     432
     433QMenuPrivate::QWceMenuPrivate::~QWceMenuPrivate()
     434{
    406435    qt_wce_delete_action_list(&actionItems);
    407     menuHandle = 0;
    408 }
    409 
    410 void QMenuPrivate::QWceMenuPrivate::addAction(QAction *a, QWceMenuAction *before) {
     436    if (menuHandle)
     437        DestroyMenu(menuHandle);
     438}
     439
     440void QMenuPrivate::QWceMenuPrivate::addAction(QAction *a, QWceMenuAction *before)
     441{
    411442    QWceMenuAction *action = new QWceMenuAction;
    412443    action->action = a;
     
    415446}
    416447
    417 void QMenuPrivate::QWceMenuPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before) {
     448void QMenuPrivate::QWceMenuPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before)
     449{
    418450    if (!action)
    419451        return;
     
    434466*/
    435467
    436 HMENU QMenu::wceMenu(bool create) { return d_func()->wceMenu(create); }
    437 
    438 HMENU QMenuPrivate::wceMenu(bool create) {
     468HMENU QMenu::wceMenu()
     469{
     470    return d_func()->wceMenu();
     471}
     472
     473HMENU QMenuPrivate::wceMenu()
     474{
    439475    if (!wce_menu)
    440476        wce_menu = new QWceMenuPrivate;
    441     if (!wce_menu->menuHandle || create)
    442         wce_menu->rebuild(create);
     477    if (!wce_menu->menuHandle)
     478        wce_menu->rebuild();
    443479    return wce_menu->menuHandle;
    444480}
    445481
    446 void QMenuPrivate::QWceMenuPrivate::rebuild(bool reCreate) {
    447     if (menuHandle && !reCreate)
    448       DestroyMenu(menuHandle);
    449     menuHandle = CreatePopupMenu();
     482void QMenuPrivate::QWceMenuPrivate::rebuild()
     483{
     484    if (!menuHandle)
     485        menuHandle = CreatePopupMenu();
     486    else
     487        qt_wce_clear_menu(menuHandle);
     488
    450489    for (int i = 0; i < actionItems.size(); ++i) {
    451490        QWceMenuAction *action = actionItems.at(i);
    452491        action->menuHandle = menuHandle;
    453         qt_wce_insert_action(menuHandle, action, true);
     492        qt_wce_insert_action(menuHandle, action);
    454493    }
    455494    QMenuBar::wceRefresh();
    456495}
    457496
    458 void QMenuPrivate::QWceMenuPrivate::syncAction(QWceMenuAction *) {
     497void QMenuPrivate::QWceMenuPrivate::syncAction(QWceMenuAction *)
     498{
    459499    rebuild();
    460500}
    461501
    462 void QMenuPrivate::QWceMenuPrivate::removeAction(QWceMenuAction *action) {
    463         actionItems.removeAll(action);
    464         delete action;
    465         action = 0;
    466         rebuild();
    467 }
    468 
    469 void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QAction *a, QWceMenuAction *before) {
     502void QMenuPrivate::QWceMenuPrivate::removeAction(QWceMenuAction *action)
     503{
     504    actionItems.removeAll(action);
     505    delete action;
     506    rebuild();
     507}
     508
     509void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QAction *a, QWceMenuAction *before)
     510{
    470511    QWceMenuAction *action = new QWceMenuAction;
    471512    action->action = a;
     
    474515}
    475516
    476 void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before) {
     517void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before)
     518{
    477519    if (!action)
    478520        return;
     
    486528}
    487529
    488 void QMenuBarPrivate::QWceMenuBarPrivate::syncAction(QWceMenuAction*) {
     530void QMenuBarPrivate::QWceMenuBarPrivate::syncAction(QWceMenuAction*)
     531{
    489532    QMenuBar::wceRefresh();
    490533    rebuild();
    491534}
    492535
    493 void QMenuBarPrivate::QWceMenuBarPrivate::removeAction(QWceMenuAction *action) {
     536void QMenuBarPrivate::QWceMenuBarPrivate::removeAction(QWceMenuAction *action)
     537{
    494538    actionItems.removeAll(action);
    495539    delete action;
    496     action = 0;
    497540    rebuild();
    498541}
    499542
    500 void QMenuBarPrivate::_q_updateDefaultAction() {
     543void QMenuBarPrivate::_q_updateDefaultAction()
     544{
    501545    if (wce_menubar)
    502546        wce_menubar->rebuild();
    503547}
    504548
    505 void QMenuBarPrivate::QWceMenuBarPrivate::rebuild() {
    506 
     549void QMenuBarPrivate::QWceMenuBarPrivate::rebuild()
     550{
    507551    d->q_func()->resize(0,0);
    508552    parentWindowHandle = d->q_func()->parentWidget() ? d->q_func()->parentWidget()->winId() : d->q_func()->winId();
     
    523567        }
    524568        Q_ASSERT_X(menubarHandle, "rebuild !created", "menubar already deleted");
     569        qt_wce_clear_menu(menuHandle);
    525570        DestroyWindow(menubarHandle);
    526571        menubarHandle = qt_wce_create_menubar(parentWindowHandle, qt_wce_get_module_handle(), resourceHandle);
     
    550595                action->menuHandle = subMenuHandle;
    551596                actionItemsClassic.last().append(action);
    552                 qt_wce_insert_action(subMenuHandle, action, true);
     597                qt_wce_insert_action(subMenuHandle, action);
    553598            }
    554599        }
     
    564609        leftButtonIsMenu = (leftButtonAction && leftButtonAction->menu());
    565610        Q_ASSERT_X(menubarHandle, "rebuild !created", "menubar already deleted");
     611        qt_wce_clear_menu(menuHandle);
    566612        DestroyWindow(menubarHandle);
    567613        if (leftButtonIsMenu) {
     
    592638            QWceMenuAction *action = actionItems.at(i);
    593639            action->menuHandle = menuHandle;
    594             qt_wce_insert_action(menuHandle, action, true);
     640            qt_wce_insert_action(menuHandle, action);
    595641        }
    596642        if (!leftButtonIsMenu) {
     
    612658                action->menuHandle = leftButtonMenuHandle;
    613659                actionItemsLeftButton.append(action);
    614                 qt_wce_insert_action(leftButtonMenuHandle, action, true);
     660                qt_wce_insert_action(leftButtonMenuHandle, action);
    615661            }
    616662        }
Note: See TracChangeset for help on using the changeset viewer.