mirror of https://gitlab.com/nakst/essence
move tab to left/right of screen
This commit is contained in:
parent
291ba3f373
commit
c6a611fd42
|
@ -821,16 +821,35 @@ int WindowTabMessage(EsElement *element, EsMessage *message) {
|
|||
EsElementSetDisabled(band->GetChild(0), false);
|
||||
} else if (message->type == ES_MSG_MOUSE_RIGHT_CLICK) {
|
||||
EsMenu *menu = EsMenuCreate(tab, ES_FLAGS_DEFAULT);
|
||||
uint64_t disableIfOnlyTab = tab->container->tabBand->items.Length() == 1 ? ES_ELEMENT_DISABLED : ES_FLAGS_DEFAULT;
|
||||
|
||||
EsMenuAddItem(menu, ES_FLAGS_DEFAULT, INTERFACE_STRING(DesktopCloseTab), [] (EsMenu *, EsGeneric context) {
|
||||
WindowTabClose((WindowTab *) context.p);
|
||||
}, tab);
|
||||
|
||||
if (tab->container->tabBand->items.Length() > 1) {
|
||||
EsMenuAddItem(menu, ES_FLAGS_DEFAULT, INTERFACE_STRING(DesktopMoveTabToNewWindow), [] (EsMenu *, EsGeneric context) {
|
||||
WindowTabMoveToNewContainer((WindowTab *) context.p, nullptr, 0, 0);
|
||||
}, tab);
|
||||
}
|
||||
EsMenuAddItem(menu, disableIfOnlyTab, INTERFACE_STRING(DesktopMoveTabToNewWindow), [] (EsMenu *, EsGeneric context) {
|
||||
WindowTabMoveToNewContainer((WindowTab *) context.p, nullptr, 0, 0);
|
||||
}, tab);
|
||||
|
||||
EsMenuAddItem(menu, disableIfOnlyTab, INTERFACE_STRING(DesktopMoveTabToNewWindowSplitLeft), [] (EsMenu *, EsGeneric context) {
|
||||
WindowTab *oldTab = (WindowTab *) context.p;
|
||||
EsWindow *oldWindow = oldTab->window;
|
||||
WindowTab *newTab = WindowTabMoveToNewContainer(oldTab, nullptr, 0, 0);
|
||||
if (!newTab) return;
|
||||
if (oldWindow->isMaximised) WindowRestore(oldWindow, false);
|
||||
WindowSnap(oldWindow, false, false, SNAP_EDGE_RIGHT);
|
||||
WindowSnap(newTab->window, false, false, SNAP_EDGE_LEFT);
|
||||
}, tab);
|
||||
|
||||
EsMenuAddItem(menu, disableIfOnlyTab, INTERFACE_STRING(DesktopMoveTabToNewWindowSplitRight), [] (EsMenu *, EsGeneric context) {
|
||||
WindowTab *oldTab = (WindowTab *) context.p;
|
||||
EsWindow *oldWindow = oldTab->window;
|
||||
WindowTab *newTab = WindowTabMoveToNewContainer(oldTab, nullptr, 0, 0);
|
||||
if (!newTab) return;
|
||||
if (oldWindow->isMaximised) WindowRestore(oldWindow, false /* we immediately move the window after this */);
|
||||
WindowSnap(oldWindow, false, false, SNAP_EDGE_LEFT);
|
||||
WindowSnap(newTab->window, false, false, SNAP_EDGE_RIGHT);
|
||||
}, tab);
|
||||
|
||||
if (EsKeyboardIsShiftHeld()) {
|
||||
EsMenuAddSeparator(menu);
|
||||
|
|
|
@ -554,14 +554,14 @@ void WindowSnap(EsWindow *window, bool restored, bool dragging, uint8_t edge) {
|
|||
}
|
||||
}
|
||||
|
||||
void WindowRestore(EsWindow *window) {
|
||||
void WindowRestore(EsWindow *window, bool dynamic = true) {
|
||||
if (!window->restoreOnNextMove) {
|
||||
return;
|
||||
}
|
||||
|
||||
window->isMaximised = false;
|
||||
window->restoreOnNextMove = false;
|
||||
EsSyscall(ES_SYSCALL_WINDOW_MOVE, window->handle, (uintptr_t) &window->beforeMaximiseBounds, 0, ES_WINDOW_MOVE_DYNAMIC);
|
||||
EsSyscall(ES_SYSCALL_WINDOW_MOVE, window->handle, (uintptr_t) &window->beforeMaximiseBounds, 0, dynamic ? ES_WINDOW_MOVE_DYNAMIC : ES_FLAGS_DEFAULT);
|
||||
}
|
||||
|
||||
void WindowChangeBounds(int direction, int newX, int newY, int *originalX, int *originalY, EsWindow *window,
|
||||
|
|
|
@ -97,7 +97,9 @@ DEFINE_INTERFACE_STRING(DesktopNotResponding, "The application is not responding
|
|||
DEFINE_INTERFACE_STRING(DesktopConfirmShutdown, "Are you sure you want to turn off your computer? All applications will be closed.");
|
||||
|
||||
DEFINE_INTERFACE_STRING(DesktopCloseTab, "Close tab");
|
||||
DEFINE_INTERFACE_STRING(DesktopMoveTabToNewWindow, "Move to new window");
|
||||
DEFINE_INTERFACE_STRING(DesktopMoveTabToNewWindow, "Move tab to new window");
|
||||
DEFINE_INTERFACE_STRING(DesktopMoveTabToNewWindowSplitLeft, "Move tab to left of screen");
|
||||
DEFINE_INTERFACE_STRING(DesktopMoveTabToNewWindowSplitRight, "Move tab to right of screen");
|
||||
DEFINE_INTERFACE_STRING(DesktopInspectUI, "Inspect UI");
|
||||
DEFINE_INTERFACE_STRING(DesktopCloseWindow, "Close window");
|
||||
DEFINE_INTERFACE_STRING(DesktopCloseAllTabs, "Close all tabs");
|
||||
|
|
Loading…
Reference in New Issue