Skip to content

Commit

Permalink
Merge pull request #703 from zexee/master
Browse files Browse the repository at this point in the history
Added toggleScreen function, using hot key to loop through all screens.
  • Loading branch information
p12tic authored Jun 8, 2020
2 parents 00f2b1f + b477efa commit 515805f
Show file tree
Hide file tree
Showing 11 changed files with 112 additions and 5 deletions.
23 changes: 20 additions & 3 deletions src/gui/src/Action.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@
const char* Action::m_ActionTypeNames[] =
{
"keyDown", "keyUp", "keystroke",
"switchToScreen", "switchInDirection", "lockCursorToScreen",
"switchToScreen", "toggleScreen",
"switchInDirection", "lockCursorToScreen",
"mouseDown", "mouseUp", "mousebutton"
};

Expand All @@ -45,14 +46,21 @@ Action::Action() :

QString Action::text() const
{
QString text = QString(m_ActionTypeNames[keySequence().isMouseButton() ? type() + 6 : type() ]) + "(";
/* This function is used to save to config file which is for barriers to
* read. However the server config parse does not support functions with ()
* in the end but now argument inside. If you need a function with no
* argument, it can not have () in the end.
*/
QString text = QString(m_ActionTypeNames[keySequence().isMouseButton() ?
type() + int(mouseDown) : type()]);

switch (type())
{
case keyDown:
case keyUp:
case keystroke:
{
text += "(";
text += keySequence().toString();

if (!keySequence().isMouseButton())
Expand All @@ -72,27 +80,36 @@ QString Action::text() const
else
text += ",*";
}
text += ")";
}
break;

case switchToScreen:
text += "(";
text += switchScreenName();
text += ")";
break;

case toggleScreen:
break;

case switchInDirection:
text += "(";
text += m_SwitchDirectionNames[m_SwitchDirection];
text += ")";
break;

case lockCursorToScreen:
text += "(";
text += m_LockCursorModeNames[m_LockCursorMode];
text += ")";
break;

default:
Q_ASSERT(0);
break;
}

text += ")";

return text;
}
Expand Down
4 changes: 3 additions & 1 deletion src/gui/src/Action.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,9 @@ class Action
friend QTextStream& operator<<(QTextStream& outStream, const Action& action);

public:
enum ActionType { keyDown, keyUp, keystroke, switchToScreen, switchInDirection, lockCursorToScreen, mouseDown, mouseUp, mousebutton };
enum ActionType { keyDown, keyUp, keystroke,
switchToScreen, toggleScreen, switchInDirection,
lockCursorToScreen, mouseDown, mouseUp, mousebutton };
enum SwitchDirection { switchLeft, switchRight, switchUp, switchDown };
enum LockCursorMode { lockCursorToggle, lockCursonOn, lockCursorOff };

Expand Down
2 changes: 1 addition & 1 deletion src/gui/src/ActionDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ ActionDialog::ActionDialog(QWidget* parent, ServerConfig& config, Hotkey& hotkey

// work around Qt Designer's lack of a QButtonGroup; we need it to get
// at the button id of the checked radio button
QRadioButton* const typeButtons[] = { m_pRadioPress, m_pRadioRelease, m_pRadioPressAndRelease, m_pRadioSwitchToScreen, m_pRadioSwitchInDirection, m_pRadioLockCursorToScreen };
QRadioButton* const typeButtons[] = { m_pRadioPress, m_pRadioRelease, m_pRadioPressAndRelease, m_pRadioSwitchToScreen, m_pRadioToggleScreen, m_pRadioSwitchInDirection, m_pRadioLockCursorToScreen };

for (unsigned int i = 0; i < sizeof(typeButtons) / sizeof(typeButtons[0]); i++)
m_pButtonGroupType->addButton(typeButtons[i], i);
Expand Down
11 changes: 11 additions & 0 deletions src/gui/src/ActionDialogBase.ui
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,17 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout">
<item>
<widget class="QRadioButton" name="m_pRadioToggleScreen">
<property name="text">
<string>Toggle screen</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout">
<item>
Expand Down
1 change: 1 addition & 0 deletions src/lib/base/EventTypes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ REGISTER_EVENT(Server, error)
REGISTER_EVENT(Server, connected)
REGISTER_EVENT(Server, disconnected)
REGISTER_EVENT(Server, switchToScreen)
REGISTER_EVENT(Server, toggleScreen)
REGISTER_EVENT(Server, switchInDirection)
REGISTER_EVENT(Server, keyboardBroadcast)
REGISTER_EVENT(Server, lockCursorToScreen)
Expand Down
9 changes: 9 additions & 0 deletions src/lib/base/EventTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,7 @@ class ServerEvents : public EventTypes {
m_connected(Event::kUnknown),
m_disconnected(Event::kUnknown),
m_switchToScreen(Event::kUnknown),
m_toggleScreen(Event::kUnknown),
m_switchInDirection(Event::kUnknown),
m_keyboardBroadcast(Event::kUnknown),
m_lockCursorToScreen(Event::kUnknown),
Expand Down Expand Up @@ -470,6 +471,13 @@ class ServerEvents : public EventTypes {
*/
Event::Type switchToScreen();

//! Get toggle screen event type
/*!
Returns the toggle screen event type. The server responds to this
by toggling screens. These is no event data.
*/
Event::Type toggleScreen();

//! Get switch in direction event type
/*!
Returns the switch in direction event type. The server responds to this
Expand Down Expand Up @@ -508,6 +516,7 @@ class ServerEvents : public EventTypes {
Event::Type m_connected;
Event::Type m_disconnected;
Event::Type m_switchToScreen;
Event::Type m_toggleScreen;
Event::Type m_switchInDirection;
Event::Type m_keyboardBroadcast;
Event::Type m_lockCursorToScreen;
Expand Down
4 changes: 4 additions & 0 deletions src/lib/server/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1156,6 +1156,10 @@ void Config::parseAction(ConfigReadContext& s, const std::string& name,
action = new InputFilter::SwitchToScreenAction(m_events, screen);
}

else if (name == "toggleScreen") {
action = new InputFilter::ToggleScreenAction(m_events);
}

else if (name == "switchInDirection") {
if (args.size() != 1) {
throw XConfigRead(s, "syntax for action: switchInDirection(<left|right|up|down>)");
Expand Down
26 changes: 26 additions & 0 deletions src/lib/server/InputFilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,32 @@ InputFilter::SwitchToScreenAction::perform(const Event& event)
Event::kDeliverImmediately));
}

InputFilter::ToggleScreenAction::ToggleScreenAction(IEventQueue* events) :
m_events(events)
{
// do nothing
}

InputFilter::Action*
InputFilter::ToggleScreenAction::clone() const
{
return new ToggleScreenAction(*this);
}

String
InputFilter::ToggleScreenAction::format() const
{
return barrier::string::sprintf("toggleScreen");
}

void
InputFilter::ToggleScreenAction::perform(const Event& event)
{
m_events->addEvent(Event(m_events->forServer().toggleScreen(),
event.getTarget(), NULL,
Event::kDeliverImmediately));
}

InputFilter::SwitchInDirectionAction::SwitchInDirectionAction(
IEventQueue* events, EDirection direction) :
m_direction(direction),
Expand Down
14 changes: 14 additions & 0 deletions src/lib/server/InputFilter.h
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,20 @@ class InputFilter {
IEventQueue* m_events;
};

// ToggleScreenAction
class ToggleScreenAction : public Action {
public:
ToggleScreenAction(IEventQueue* events);

// Action overrides
virtual Action* clone() const;
virtual String format() const;
virtual void perform(const Event&);

private:
IEventQueue* m_events;
};

// SwitchInDirectionAction
class SwitchInDirectionAction : public Action {
public:
Expand Down
22 changes: 22 additions & 0 deletions src/lib/server/Server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,10 @@ Server::Server(
m_inputFilter,
new TMethodEventJob<Server>(this,
&Server::handleSwitchToScreenEvent));
m_events->adoptHandler(m_events->forServer().toggleScreen(),
m_inputFilter,
new TMethodEventJob<Server>(this,
&Server::handleToggleScreenEvent));
m_events->adoptHandler(m_events->forServer().switchInDirection(),
m_inputFilter,
new TMethodEventJob<Server>(this,
Expand Down Expand Up @@ -1405,6 +1409,24 @@ Server::handleSwitchToScreenEvent(const Event& event, void*)
}
}

void
Server::handleToggleScreenEvent(const Event& event, void*)
{
std::string current = getName(m_active);
ClientList::const_iterator index = m_clients.find(current);
if (index == m_clients.end()) {
LOG((CLOG_DEBUG1 "screen \"%s\" not active", current.c_str()));
}
else {
++index;
if (index == m_clients.end()) {
index = m_clients.begin();
}
jumpToScreen(index->second);
}
}


void
Server::handleSwitchInDirectionEvent(const Event& event, void*)
{
Expand Down
1 change: 1 addition & 0 deletions src/lib/server/Server.h
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,7 @@ class Server : public INode {
void handleClientDisconnected(const Event&, void*);
void handleClientCloseTimeout(const Event&, void*);
void handleSwitchToScreenEvent(const Event&, void*);
void handleToggleScreenEvent(const Event&, void*);
void handleSwitchInDirectionEvent(const Event&, void*);
void handleKeyboardBroadcastEvent(const Event&,void*);
void handleLockCursorToScreenEvent(const Event&, void*);
Expand Down

0 comments on commit 515805f

Please sign in to comment.