Added Mac-like window switching for one app with keyboard shortcut Alt-~.

This resolves bug report 869.
Thanks to Calvin Morrison.
pull/2/head
Darrell Anderson 12 years ago
parent 8d7bb28418
commit 1e959a2aec

@ -47,6 +47,7 @@ TabBox::TabBox( Workspace *ws, const char *name )
setLineWidth(2); setLineWidth(2);
setMargin(2); setMargin(2);
appsOnly = false;
showMiniIcon = false; showMiniIcon = false;
no_tasks = i18n("*** No Windows ***"); no_tasks = i18n("*** No Windows ***");
@ -86,6 +87,14 @@ void TabBox::setMode( Mode mode )
m = mode; m = mode;
} }
/*!
Sets AppsOnly, which when true, createClientList will return only applications within the same class
*/
void TabBox::setAppsOnly( bool a )
{
appsOnly = a;
}
/*! /*!
Create list of clients on specified desktop, starting with client c Create list of clients on specified desktop, starting with client c
@ -93,11 +102,14 @@ void TabBox::setMode( Mode mode )
void TabBox::createClientList(ClientList &list, int desktop /*-1 = all*/, Client *c, bool chain) void TabBox::createClientList(ClientList &list, int desktop /*-1 = all*/, Client *c, bool chain)
{ {
ClientList::size_type idx = 0; ClientList::size_type idx = 0;
TQString startClass;
list.clear(); list.clear();
Client* start = c; Client* start = c;
if( start )
startClass = start->resourceClass();
if ( chain ) if ( chain )
c = workspace()->nextFocusChainClient(c); c = workspace()->nextFocusChainClient(c);
else else
@ -121,6 +133,10 @@ void TabBox::createClientList(ClientList &list, int desktop /*-1 = all*/, Client
// nothing // nothing
} }
} }
if(appsOnly && (TQString::compare( startClass, c->resourceClass()) != 0))
{
add = NULL;
}
if( options->separateScreenFocus && options->xineramaEnabled ) if( options->separateScreenFocus && options->xineramaEnabled )
{ {
@ -645,6 +661,7 @@ void TabBox::hide()
XEvent otherEvent; XEvent otherEvent;
while (XCheckTypedEvent (tqt_xdisplay(), EnterNotify, &otherEvent ) ) while (XCheckTypedEvent (tqt_xdisplay(), EnterNotify, &otherEvent ) )
; ;
appsOnly = false;
} }
@ -893,6 +910,18 @@ void Workspace::slotWalkBackThroughWindows()
} }
} }
void Workspace::slotWalkThroughApps()
{
tab_box->setAppsOnly(true);
slotWalkThroughWindows();
}
void Workspace::slotWalkBackThroughApps()
{
tab_box->setAppsOnly(true);
slotWalkBackThroughWindows();
}
void Workspace::slotWalkThroughDesktops() void Workspace::slotWalkThroughDesktops()
{ {
if ( root != tqt_xrootwin() ) if ( root != tqt_xrootwin() )
@ -1112,18 +1141,33 @@ void Workspace::tabBoxKeyPress( const KKeyNative& keyX )
{ {
bool forward = false; bool forward = false;
bool backward = false; bool backward = false;
bool forwardapps = false;
bool backwardapps = false;
if (tab_grab) if (tab_grab)
{ {
forward = cutWalkThroughWindows.contains( keyX ); forward = cutWalkThroughWindows.contains( keyX );
backward = cutWalkThroughWindowsReverse.contains( keyX ); backward = cutWalkThroughWindowsReverse.contains( keyX );
if (forward || backward)
forwardapps = cutWalkThroughApps.contains( keyX );
backwardapps = cutWalkThroughAppsReverse.contains( keyX );
if ( (forward || backward) && (!tab_box->isAppsOnly()) )
{ {
kdDebug(125) << "== " << cutWalkThroughWindows.toStringInternal() kdDebug(125) << "== " << cutWalkThroughWindows.toStringInternal()
<< " or " << cutWalkThroughWindowsReverse.toStringInternal() << endl; << " or " << cutWalkThroughWindowsReverse.toStringInternal() << endl;
KDEWalkThroughWindows( forward ); KDEWalkThroughWindows( forward );
} }
if ( (forwardapps || backwardapps) && (tab_box->isAppsOnly()) )
{
kdDebug(125) << "== " << cutWalkThroughWindows.toStringInternal()
<< " or " << cutWalkThroughWindowsReverse.toStringInternal() << endl;
KDEWalkThroughWindows( forwardapps );
}
} }
else if (control_grab) else if (control_grab)
{ {
forward = cutWalkThroughDesktops.contains( keyX ) || forward = cutWalkThroughDesktops.contains( keyX ) ||

@ -41,7 +41,9 @@ class TabBox : public TQFrame
// DesktopListMode lists them in the order created. // DesktopListMode lists them in the order created.
enum Mode { DesktopMode, DesktopListMode, WindowsMode }; enum Mode { DesktopMode, DesktopListMode, WindowsMode };
void setMode( Mode mode ); void setMode( Mode mode );
void setAppsOnly( bool a );
Mode mode() const; Mode mode() const;
bool isAppsOnly() const;
void reset(); void reset();
void nextPrev( bool next = TRUE); void nextPrev( bool next = TRUE);
@ -72,6 +74,7 @@ class TabBox : public TQFrame
int desk; int desk;
int lineHeight; int lineHeight;
bool showMiniIcon; bool showMiniIcon;
bool appsOnly;
TQTimer delayedShowTimer; TQTimer delayedShowTimer;
TQString no_tasks; TQString no_tasks;
bool options_traverse_all; bool options_traverse_all;
@ -97,6 +100,17 @@ inline TabBox::Mode TabBox::mode() const
return m; return m;
} }
/*!
Returns the appsOnly variable
\sa setAppsOnly()
*/
inline bool TabBox::isAppsOnly() const
{
return appsOnly;
}
} // namespace } // namespace
#endif #endif

@ -20,6 +20,8 @@
keys->insert( "Group:Navigation", i18n("Navigation") ); keys->insert( "Group:Navigation", i18n("Navigation") );
DEF( I18N_NOOP("Walk Through Windows"), ALT+Qt::Key_Tab, ALT+Qt::Key_Tab, slotWalkThroughWindows() ); DEF( I18N_NOOP("Walk Through Windows"), ALT+Qt::Key_Tab, ALT+Qt::Key_Tab, slotWalkThroughWindows() );
DEF( I18N_NOOP("Walk Through Windows (Reverse)"), ALT+SHIFT+Qt::Key_Tab, ALT+SHIFT+Qt::Key_Tab, slotWalkBackThroughWindows() ); DEF( I18N_NOOP("Walk Through Windows (Reverse)"), ALT+SHIFT+Qt::Key_Tab, ALT+SHIFT+Qt::Key_Tab, slotWalkBackThroughWindows() );
DEF( I18N_NOOP("Walk Through Windows of Same Application"), ALT+Qt::Key_QuoteLeft, ALT+Qt::Key_QuoteLeft, slotWalkThroughApps() );
DEF( I18N_NOOP("Walk Through Windows of Same Application (Reverse)"), ALT+Qt::Key_AsciiTilde, ALT+Qt::Key_AsciiTilde, slotWalkBackThroughApps() );
DEF( I18N_NOOP("Walk Through Desktops"), 0, WIN+Qt::Key_Tab, slotWalkThroughDesktops() ); DEF( I18N_NOOP("Walk Through Desktops"), 0, WIN+Qt::Key_Tab, slotWalkThroughDesktops() );
DEF( I18N_NOOP("Walk Through Desktops (Reverse)"), 0, WIN+SHIFT+Qt::Key_Tab, slotWalkBackThroughDesktops() ); DEF( I18N_NOOP("Walk Through Desktops (Reverse)"), 0, WIN+SHIFT+Qt::Key_Tab, slotWalkBackThroughDesktops() );
DEF( I18N_NOOP("Walk Through Desktop List"), 0, 0, slotWalkThroughDesktopList() ); DEF( I18N_NOOP("Walk Through Desktop List"), 0, 0, slotWalkThroughDesktopList() );

@ -279,6 +279,8 @@ void Workspace::readShortcuts()
cutWalkThroughDesktopListReverse = keys->shortcut("Walk Through Desktop List (Reverse)"); cutWalkThroughDesktopListReverse = keys->shortcut("Walk Through Desktop List (Reverse)");
cutWalkThroughWindows = keys->shortcut("Walk Through Windows"); cutWalkThroughWindows = keys->shortcut("Walk Through Windows");
cutWalkThroughWindowsReverse = keys->shortcut("Walk Through Windows (Reverse)"); cutWalkThroughWindowsReverse = keys->shortcut("Walk Through Windows (Reverse)");
cutWalkThroughApps = keys->shortcut("Walk Through Windows of Same Application");
cutWalkThroughAppsReverse = keys->shortcut("Walk Through Windows of Same Application (Reverse)");
keys->updateConnections(); keys->updateConnections();
disable_shortcuts_keys->updateConnections(); disable_shortcuts_keys->updateConnections();

@ -343,6 +343,9 @@ class Workspace : public TQObject, public KWinInterface, public KDecorationDefin
void slotWalkThroughDesktops(); void slotWalkThroughDesktops();
void slotWalkBackThroughDesktops(); void slotWalkBackThroughDesktops();
void slotWalkThroughApps();
void slotWalkBackThroughApps();
void slotWalkThroughDesktopList(); void slotWalkThroughDesktopList();
void slotWalkBackThroughDesktopList(); void slotWalkBackThroughDesktopList();
void slotWalkThroughWindows(); void slotWalkThroughWindows();
@ -565,6 +568,7 @@ class Workspace : public TQObject, public KWinInterface, public KDecorationDefin
KShortcut cutWalkThroughDesktops, cutWalkThroughDesktopsReverse; KShortcut cutWalkThroughDesktops, cutWalkThroughDesktopsReverse;
KShortcut cutWalkThroughDesktopList, cutWalkThroughDesktopListReverse; KShortcut cutWalkThroughDesktopList, cutWalkThroughDesktopListReverse;
KShortcut cutWalkThroughWindows, cutWalkThroughWindowsReverse; KShortcut cutWalkThroughWindows, cutWalkThroughWindowsReverse;
KShortcut cutWalkThroughApps, cutWalkThroughAppsReverse;
bool mouse_emulation; bool mouse_emulation;
unsigned int mouse_emulation_state; unsigned int mouse_emulation_state;
WId mouse_emulation_window; WId mouse_emulation_window;

Loading…
Cancel
Save