Alex, по меню alt+tab пока не знаю, но дефолтное сочетание - ctrl + alt + D
Сообщений: 0
#3 - 25 февраля 2016 в 18:53
ctrl + alt + D
я этим в данный момент и пользуюсь.
Сообщений: 0
#4 - 25 февраля 2016 в 19:02
Инет на эту тему тож не очень чет помог, даже мейлинг листы XFCE:
There is currently only one shortcut to show/hide the desktop, it's through Ctrl+Alt+D
You can get to the desktop in xfce4 with control+alt+d. That is not exactly what you are asking for, but it is a keyboard shortcut and only takes a finger tweak from the position for alt+tab.
Могу пока только дополнить, что если вдруг мышой удобней - можно добавить значок на панель, ну и стандартную комбинацию клавиш можно же поменять на что-то более привычное (например виндовое Super+D)
Сообщений: 0
#5 - 25 февраля 2016 в 19:22
Инет на эту тему тож не очень чет помог
таже история, на англоязычных форумах тоже нет ответа. Да и в файлах ничего не нашел, в настройках xfwm4 упоминается файл cycle.c и cycle.h но он отвечает за настройки, или нет, не знаю, т.к. найти его не могу.
Сообщений: 0
#6 - 25 февраля 2016 в 19:39
Нашел в нете содержание файла cycle.c
Спойлер
/* $Id$ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. oroborus - (c) 2001 Ken Lynch xfwm4 - (c) 2002-2011 Olivier Fourdan */
range = 0; if (screen_info->params->cycle_hidden) { range |= SEARCH_INCLUDE_HIDDEN; } if (!screen_info->params->cycle_minimum) { range |= SEARCH_INCLUDE_SKIP_TASKBAR | SEARCH_INCLUDE_SKIP_PAGER; } if (screen_info->params->cycle_workspaces) { range |= SEARCH_INCLUDE_ALL_WORKSPACES; }
screen_info = c->screen_info; range = clientGetCycleRange (screen_info); client_list = NULL;
for (c2 = c, i = 0; c && i < screen_info->client_count; i++, c2 = c2->next) { search_range = range; /* * We want to include modals even if skip pager/taskbar because * modals are supposed to be focused */ if (clientIsModal(c2)) { search_range |= (SEARCH_INCLUDE_SKIP_TASKBAR | SEARCH_INCLUDE_SKIP_PAGER); } if (!clientSelectMask (c2, NULL, search_range, WINDOW_REGULAR_FOCUSABLE)) { TRACE ("%s not in select mask", c2->name); continue; } if (screen_info->params->cycle_apps_only) { /* * For apps only cycling, it's a tad more complicated * - We want "fake" dialogs, ie without a parent window * - We do not want dialogs but we want modals * - If a modal was added,we do not want to add * its parent again */
if (c2->type & WINDOW_TYPE_DIALOG) { if (clientIsValidTransientOrModal (c2)) { if (!clientIsModal(c2)) { TRACE ("%s is not modal", c2->name); continue; } } } else if (!(c2->type & WINDOW_NORMAL)) { { TRACE ("%s is not normal", c2->name); continue; } } else { if (g_list_find_custom (client_list, c2, clientCompareModal)) { TRACE ("%s found as modal list", c2->name); continue; } } }
if ((focused) && (c != focused)) { /* We might be able to avoid this if we are about to switch workspace */ clientAdjustFullscreenLayer (focused, FALSE); } if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_WAS_SHOWN)) { /* We are explicitely activating a window that was shown before show-desktop */ clientClearAllShowDesktop (screen_info); } if (workspace != screen_info->current_ws) { workspaceSwitch (screen_info, workspace, c, FALSE, myDisplayGetCurrentTime (display_info)); }
passdata = (ClientCycleData *) data; c = tabwinGetSelected(passdata->tabwin); if (c == NULL) { return EVENT_FILTER_CONTINUE; }
screen_info = c->screen_info; display_info = screen_info->display_info; cancel = screen_info->params->keys[KEY_CANCEL].keycode; left = screen_info->params->keys[KEY_LEFT].keycode; right = screen_info->params->keys[KEY_RIGHT].keycode; up = screen_info->params->keys[KEY_UP].keycode; down = screen_info->params->keys[KEY_DOWN].keycode; modifiers = (screen_info->params->keys[KEY_CYCLE_WINDOWS].modifier | screen_info->params->keys[KEY_CYCLE_REVERSE_WINDOWS].modifier); status = EVENT_FILTER_STOP; removed = NULL; cycling = TRUE; gone = FALSE;
/* Update the display time */ myDisplayUpdateCurrentTime (display_info, xevent);
switch (xevent->type) { case DestroyNotify: status = EVENT_FILTER_CONTINUE; if ((removed = myScreenGetClientFromWindow (screen_info, ((XDestroyWindowEvent *) xevent)->window, SEARCH_WINDOW)) == NULL) break; /* No need to go any further */ gone |= (c == removed); /* Walk through */ case UnmapNotify: status = EVENT_FILTER_CONTINUE; if (!removed && (removed = myScreenGetClientFromWindow (screen_info, ((XUnmapEvent *) xevent)->window, SEARCH_WINDOW)) == NULL) break; /* No need to go any further */ gone |= (c == removed); c = tabwinRemoveClient(passdata->tabwin, removed); cycling = clientCycleUpdateWireframe (c, passdata); break; case KeyPress: key = myScreenGetKeyPressed (screen_info, (XKeyEvent *) xevent); /* * We cannot simply check for key == KEY_CANCEL here because of the * modidier being pressed, so we need to look at the keycode directly. */ if (xevent->xkey.keycode == cancel) { c2 = tabwinSelectHead (passdata->tabwin); cycling = FALSE; } else if (xevent->xkey.keycode == up) { c2 = tabwinSelectDelta(passdata->tabwin, -1, 0); } else if (xevent->xkey.keycode == down) { c2 = tabwinSelectDelta(passdata->tabwin, 1, 0); } else if (xevent->xkey.keycode == left) { c2 = tabwinSelectDelta(passdata->tabwin, 0, -1); } else if (xevent->xkey.keycode == right) { c2 = tabwinSelectDelta(passdata->tabwin, -0, 1); } else if (key == KEY_CYCLE_REVERSE_WINDOWS) { TRACE ("Cycle: previous"); c2 = tabwinSelectPrev(passdata->tabwin); } else if (key == KEY_CYCLE_WINDOWS) { TRACE ("Cycle: next"); c2 = tabwinSelectNext(passdata->tabwin); } if (c2) { clientCycleUpdateWireframe (c2, passdata); }
/* If last key press event had not our modifiers pressed, finish cycling */ if (!(xevent->xkey.state & modifiers)) { cycling = FALSE; } break; case KeyRelease: { int keysym = XLookupKeysym (&xevent->xkey, 0);
if (IsModifierKey(keysym)) { if (!(myScreenGetModifierPressed (screen_info) & modifiers)) { cycling = FALSE; } } } break; case ButtonPress: /* only accept events for the tab windows */ for (li = passdata->tabwin->tabwin_list; li != NULL; li = li->next) { if (GDK_WINDOW_XID (gtk_widget_get_window (li->data)) == xevent->xbutton.window) { if (xevent->xbutton.button == Button1) { c2 = tabwinSelectHovered (passdata->tabwin); cycling = FALSE; break; } else if (xevent->xbutton.button == Button4) { /* Mouse wheel scroll up */ TRACE ("Cycle: previous"); c2 = tabwinSelectPrev(passdata->tabwin); } else if (xevent->xbutton.button == Button5) { /* Mouse wheel scroll down */ TRACE ("Cycle: next"); c2 = tabwinSelectNext(passdata->tabwin); } } if (c2) { clientCycleUpdateWireframe (c2, passdata); } } break; case ButtonRelease: break; case EnterNotify: case LeaveNotify: /* Track whether the pointer is inside one of the tab-windows */ for (li = passdata->tabwin->tabwin_list; li != NULL; li = li->next) { if (GDK_WINDOW_XID (gtk_widget_get_window (li->data)) == xevent->xcrossing.window) { passdata->inside = (xevent->xcrossing.type == EnterNotify); } } break; default: status = EVENT_FILTER_CONTINUE; break; }
if (!cycling) { TRACE ("event loop now finished"); gtk_main_quit (); }
client_list = clientCycleCreateList (c); if (!client_list) { return; }
modifier = 0; key = myScreenGetKeyPressed (screen_info, ev); if (key == KEY_CYCLE_REVERSE_WINDOWS) { selected = g_list_last (client_list); modifier = screen_info->params->keys[KEY_CYCLE_REVERSE_WINDOWS].modifier; } else { selected = g_list_next (client_list); modifier = screen_info->params->keys[KEY_CYCLE_WINDOWS].modifier; } if (!selected) { /* Only one element in list */ selected = client_list; }
if (!modifier) { /* * The shortcut has no modifier so there's no point in entering * the cycle loop, just select the next or previous window and * that's it... */ clientCycleActivate ((Client *) selected->data); g_list_free (client_list); return; }
myScreenGrabPointer (screen_info, TRUE, NoEventMask, None, ev->time); /* Grabbing the pointer may fail e.g. if the user is doing a drag'n drop */ if (!myScreenGrabKeyboard (screen_info, ev->time)) { TRACE ("grab failed in clientCycle");
if (passdata.inside) { /* A bit of a hack, flush EnterNotify if the pointer is inside * the tabwin to defeat focus-follow-mouse tracking */ eventFilterPush (display_info->xfilter, clientCycleFlushEventFilter, display_info); gtk_main (); eventFilterPop (display_info->xfilter); }
focus = clientGetFocus(); if (!focus) { return FALSE; }
range = clientGetCycleRange (focus->screen_info); /* We do not want dialogs, just toplevel app windows here */ new = clientGetPrevious(focus, range | SEARCH_DIFFERENT_APPLICATION, WINDOW_NORMAL); if (new) { clientCycleFocusAndRaise (new); return TRUE; } return FALSE; }
Сообщений: 0
#7 - 25 февраля 2016 в 19:50
ну смените в диспетчере окон ctrl + alt + D на удобную для вас клавишу скажем на Super