~ci-train-bot/unity8/unity8-ubuntu-zesty-2663

« back to all changes in this revision

Viewing changes to qml/ApplicationMenus/MenuPopup.qml

  • Committer: Nick Dedekind
  • Date: 2017-03-15 15:22:07 UTC
  • mfrom: (2868 unity8)
  • mto: This revision was merged to the branch mainline in revision 2892.
  • Revision ID: nick.dedekind@canonical.com-20170315152207-9ts6lyu1v2pruue2
merged with trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
276
276
                    }
277
277
                }
278
278
 
 
279
                Component {
 
280
                    id: separatorComponent
 
281
                    ListItems.ThinDivider {
 
282
                        // Parent will be loader
 
283
                        objectName: parent.objectName + "-separator"
 
284
                        implicitHeight: units.dp(2)
 
285
                    }
 
286
                }
 
287
 
 
288
                Component {
 
289
                    id: menuItemComponent
 
290
                    MenuItem {
 
291
                        // Parent will be loader
 
292
                        id: menuItem
 
293
                        menuData: parent.__menuData
 
294
                        objectName: parent.objectName + "-actionItem"
 
295
 
 
296
                        width: MathUtils.clamp(implicitWidth, d.__minimumWidth, d.__maximumWidth)
 
297
 
 
298
                        action.onTriggered: {
 
299
                            submenuHoverTimer.stop();
 
300
 
 
301
                            d.currentItem = parent;
 
302
 
 
303
                            if (hasSubmenu) {
 
304
                                if (!popup) {
 
305
                                    var model = root.unityMenuModel.submenu(__ownIndex);
 
306
                                    popup = submenuComponent.createObject(focusScope, {
 
307
                                                                                objectName: parent.objectName + "-",
 
308
                                                                                unityMenuModel: model,
 
309
                                                                                substractWidth: true,
 
310
                                                                                desiredX: Qt.binding(function() { return root.width }),
 
311
                                                                                desiredY: Qt.binding(function() {
 
312
                                                                                    var dummy = listView.contentY; // force a recalc on contentY change.
 
313
                                                                                    return mapToItem(container, 0, y).y;
 
314
                                                                                })
 
315
                                                                            });
 
316
                                    popup.retreat.connect(function() {
 
317
                                        popup.destroy();
 
318
                                        popup = null;
 
319
                                        menuItem.forceActiveFocus();
 
320
                                    });
 
321
                                    popup.childActivated.connect(function() {
 
322
                                        popup.destroy();
 
323
                                        popup = null;
 
324
                                        root.childActivated();
 
325
                                    });
 
326
                                } else if (popup) {
 
327
                                    popup.visible = true;
 
328
                                }
 
329
                            } else {
 
330
                                root.unityMenuModel.activate(__ownIndex);
 
331
                                root.childActivated();
 
332
                            }
 
333
                        }
 
334
 
 
335
                        Connections {
 
336
                            target: d
 
337
                            onCurrentIndexChanged: {
 
338
                                if (popup && d.currentIndex != __ownIndex) {
 
339
                                    popup.visible = false;
 
340
                                }
 
341
                            }
 
342
                            onDismissAll: {
 
343
                                if (popup) {
 
344
                                    popup.destroy();
 
345
                                    popup = null;
 
346
                                }
 
347
                            }
 
348
                        }
 
349
                    }
 
350
                }
 
351
 
279
352
                ColumnLayout {
280
353
                    id: menuColumn
281
354
                    spacing: 0
289
362
                            id: loader
290
363
                            objectName: root.objectName + "-item" + __ownIndex
291
364
 
 
365
                            property Item popup: null
 
366
                            property var __menuData: model
292
367
                            property int __ownIndex: index
293
368
                            property bool __isSeparator: model.isSeparator
294
369
 
301
376
                                return menuItemComponent;
302
377
                            }
303
378
 
304
 
                            property Item popup: null
305
 
 
306
379
                            Layout.fillWidth: true
307
 
 
308
 
                            Component {
309
 
                                id: menuItemComponent
310
 
                                MenuItem {
311
 
                                    id: menuItem
312
 
                                    menuData: model
313
 
                                    objectName: loader.objectName + "-actionItem"
314
 
 
315
 
                                    width: MathUtils.clamp(implicitWidth, d.__minimumWidth, d.__maximumWidth)
316
 
 
317
 
                                    action.onTriggered: {
318
 
                                        submenuHoverTimer.stop();
319
 
 
320
 
                                        d.currentItem = loader;
321
 
 
322
 
                                        if (hasSubmenu) {
323
 
                                            if (!popup) {
324
 
                                                var model = root.unityMenuModel.submenu(__ownIndex);
325
 
                                                popup = submenuComponent.createObject(focusScope, {
326
 
                                                                                          objectName: loader.objectName + "-",
327
 
                                                                                          unityMenuModel: model,
328
 
                                                                                          substractWidth: true,
329
 
                                                                                          desiredX: Qt.binding(function() { return root.width }),
330
 
                                                                                          desiredY: Qt.binding(function() {
331
 
                                                                                              var dummy = listView.contentY; // force a recalc on contentY change.
332
 
                                                                                              return mapToItem(container, 0, y).y;
333
 
                                                                                          })
334
 
                                                                                      });
335
 
                                                popup.retreat.connect(function() {
336
 
                                                    popup.destroy();
337
 
                                                    popup = null;
338
 
                                                    menuItem.forceActiveFocus();
339
 
                                                });
340
 
                                                popup.childActivated.connect(function() {
341
 
                                                    popup.destroy();
342
 
                                                    popup = null;
343
 
                                                    root.childActivated();
344
 
                                                });
345
 
                                            } else if (popup) {
346
 
                                                popup.visible = true;
347
 
                                            }
348
 
                                        } else {
349
 
                                            root.unityMenuModel.activate(__ownIndex);
350
 
                                            root.childActivated();
351
 
                                        }
352
 
                                    }
353
 
 
354
 
                                    Connections {
355
 
                                        target: d
356
 
                                        onCurrentIndexChanged: {
357
 
                                            if (popup && d.currentIndex != __ownIndex) {
358
 
                                                popup.visible = false;
359
 
                                            }
360
 
                                        }
361
 
                                        onDismissAll: {
362
 
                                            if (popup) {
363
 
                                                popup.destroy();
364
 
                                                popup = null;
365
 
                                            }
366
 
                                        }
367
 
                                    }
368
 
                                }
369
 
                            }
370
 
 
371
 
                            Component {
372
 
                                id: separatorComponent
373
 
                                ListItems.ThinDivider {
374
 
                                    objectName: loader.objectName + "-separator"
375
 
                                    implicitHeight: units.dp(2)
376
 
                                }
377
 
                            }
378
380
                        }
379
381
 
380
382
                    }