summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.cpp15
-rw-r--r--config.cpp.old (renamed from old.config.cpp)0
-rw-r--r--config.h82
-rw-r--r--config.h.old (renamed from old.config.h)0
-rw-r--r--ewmh.cpp6
-rw-r--r--ewmh.h4
-rw-r--r--main.cpp38
7 files changed, 74 insertions, 71 deletions
diff --git a/config.cpp b/config.cpp
index 6d8215c..422ec19 100644
--- a/config.cpp
+++ b/config.cpp
@@ -92,6 +92,7 @@ const void Config::addWorkspaceCmd(const CommandArg* argv)
int* prefs = new int[argv[1].numArr.size];
memcpy(prefs, argv[1].numArr.arr, argv[1].numArr.size * sizeof(int));
workspaces.push_back({argv[0].str, prefs, argv[1].numArr.size});
+ numWS++;
}
Config::Config(CommandsModule& commandsModule)
@@ -118,20 +119,23 @@ Config::Config(CommandsModule& commandsModule)
commandsModule.addCommand("addworkspace", &Config::addWorkspaceCmd, 2, addWorkspaceArgs, this);
}
-Err Config::reloadFile()
+std::vector<Err> Config::reloadFile()
{
if(!loaded)
- return {CFG_ERR_NON_FATAL, "Not loaded config yet"};
+ return {{CFG_ERR_NON_FATAL, "Not loaded config yet"}};
return loadFromFile(file);
}
-Err Config::loadFromFile(string path)
+std::vector<Err> Config::loadFromFile(std::string path)
{
+ std::vector<Err> ers;
+
file = path;
//Set defaults
gaps = 3;
outerGaps = 3;
logFile = "/tmp/yatlog.txt";
+ numWS = 0;
//Probably need something for workspaces and binds too...
@@ -148,13 +152,12 @@ Err Config::loadFromFile(string path)
}
catch (Err e)
{
- cout << "Error in config (line " << line << "): " << e.code << endl;
- cout << "\tMessage: " << e.message << endl;
+ ers.push_back({e.code, "Error in config (line " + std::to_string(line) + "): " + std::to_string(e.code) + "\n\tMessage: " + e.message});
+
}
line++;
}
loaded = true;
- return {NOERR, ""};
}
Config::~Config()
diff --git a/old.config.cpp b/config.cpp.old
index 74ba0b0..74ba0b0 100644
--- a/old.config.cpp
+++ b/config.cpp.old
diff --git a/config.h b/config.h
index a31c1df..55e55aa 100644
--- a/config.h
+++ b/config.h
@@ -5,6 +5,7 @@
#include <X11/keysym.h>
#include <string>
+#include <vector>
struct Workspace
{
@@ -13,52 +14,47 @@ struct Workspace
int screenPreferencesc;
};
-#define COMMAND(X) \
+#define COMMAND(X) \
const void X (const CommandArg* argv)
class Config
{
- public:
- Config(CommandsModule& commandsModule);
- ~Config();
- void free();
+public:
+ Config(CommandsModule& commandsModule);
+ ~Config();
+ void free();
- Err loadFromFile(std::string path);
- Err reloadFile();
- // Startup
- std::string* startupBash;
- int startupBashc;
-
- // Main
- int gaps;
- int outerGaps;
- std::string logFile;
-
- // Workspaces
- std::vector<Workspace> workspaces;
- int numWS;
- std::string* workspaceNames;
- int workspaceNamesc;
- int maxMonitors;
- int** screenPreferences;
- int screenPreferencesc;
-
- // Config Commands
- COMMAND(gapsCmd);
- COMMAND(outerGapsCmd);
- COMMAND(logFileCmd);
- COMMAND(addWorkspaceCmd);
-
- // Keybind Commands
- COMMAND(exit);
- COMMAND(spawn);
- COMMAND(spawn_once);
- COMMAND(changeWS);
- COMMAND(wToWS);
- COMMAND(focChange);
- COMMAND(reload);
- private:
- CommandsModule& commandsModule;
- bool loaded = false;
- std::string file;
+ std::vector<Err> loadFromFile(std::string path);
+ std::vector<Err> reloadFile();
+ // Startup
+ std::string* startupBash;
+ int startupBashc;
+
+ // Main
+ int gaps;
+ int outerGaps;
+ std::string logFile;
+
+ // Workspaces
+ std::vector<Workspace> workspaces;
+ int numWS;
+
+ // Config Commands
+ COMMAND(gapsCmd);
+ COMMAND(outerGapsCmd);
+ COMMAND(logFileCmd);
+ COMMAND(addWorkspaceCmd);
+
+ // Keybind Commands
+ COMMAND(exit);
+ COMMAND(spawn);
+ COMMAND(spawn_once);
+ COMMAND(changeWS);
+ COMMAND(wToWS);
+ COMMAND(focChange);
+ COMMAND(reload);
+private:
+ CommandsModule& commandsModule;
+ bool loaded = false;
+ std::string file;
};
diff --git a/old.config.h b/config.h.old
index 31005e7..31005e7 100644
--- a/old.config.h
+++ b/config.h.old
diff --git a/ewmh.cpp b/ewmh.cpp
index eec5de9..5a7e76c 100644
--- a/ewmh.cpp
+++ b/ewmh.cpp
@@ -5,7 +5,7 @@
Display** dpy_;
Window* root_;
-void initEWMH(Display** dpy, Window* root, int numWS, const std::string workspaceNames[])
+void initEWMH(Display** dpy, Window* root, int numWS, std::vector<Workspace> workspaces)
{
dpy_ = dpy;
root_ = root;
@@ -14,13 +14,13 @@ void initEWMH(Display** dpy, Window* root, int numWS, const std::string workspac
int wsNamesLen = numWS; //For null bytes
for(int i = 0; i < numWS; i++)
{
- wsNamesLen += workspaceNames[i].length();
+ wsNamesLen += workspaces[i].name.length();
}
char wsNames[wsNamesLen];
int pos = 0;
for(int i = 0; i < numWS; i++)
{
- for(char toAdd : workspaceNames[i])
+ for(char toAdd : workspaces[i].name)
{
wsNames[pos++] = toAdd;
}
diff --git a/ewmh.h b/ewmh.h
index 7b1b5f4..5fbc9a4 100644
--- a/ewmh.h
+++ b/ewmh.h
@@ -5,10 +5,12 @@
#include <map>
#include <string>
+#include <vector>
#include "structs.h"
+#include "config.h"
-void initEWMH(Display** dpy, Window* root, int numWS, const std::string workspaceNames[]);
+void initEWMH(Display** dpy, Window* root, int numWS, std::vector<Workspace> workspaces);
void updateClientList(std::map<int, Client> clients);
diff --git a/main.cpp b/main.cpp
index e4a4bcc..3f541a1 100644
--- a/main.cpp
+++ b/main.cpp
@@ -82,7 +82,7 @@ int FFCF(int sID);
void detectScreens();
void updateMousePos();
void focusRoot(int root);
-void handleConfigErrs(Err cfgErr);
+void handleConfigErrs(vector<Err> cfgErrs);
void configureRequest(XConfigureRequestEvent e);
void mapRequest(XMapRequestEvent e);
@@ -123,9 +123,9 @@ void detectScreens()
log("\t\tw: " << screens[i].w << ", h: " << screens[i].h);
XFree(name);
}
- for(int i = 0; i < cfg.numWS; i++)
+ for(int i = 0; i < cfg.workspaces.size(); i++)
{
- if(cfg.screenPreferences[i][0] < nscreens && focusedWorkspaces[cfg.screenPreferences[i][0]] == 0)
+ if(cfg.workspaces[i].screenPreferences[0] < nscreens && focusedWorkspaces[cfg.workspaces[i].screenPreferences[0]] == 0)
{
//focusedWorkspaces[screenPreferences[i][0]] = i+1;
}
@@ -162,9 +162,9 @@ void focusRoot(int root)
//log("\tFocusing window: " << w);
XSetInputFocus(dpy, w, RevertToPointerRoot, CurrentTime);
}
-void handleConfigErrs(Err cfgErr)
+void handleConfigErrs(vector<Err> cfgErrs)
{
- if(cfgErr.code!=NOERR)
+ for(Err cfgErr : cfgErrs)
{
if(cfgErr.code == CFG_ERR_FATAL)
{
@@ -268,19 +268,19 @@ void cWS(int newWS)
//log("Changing WS with keybind");
- for(int i = 0; i < cfg.maxMonitors; i++)
+ for(int i = 0; i < nscreens; i++)
{
- if(nscreens > cfg.screenPreferences[newWS - 1][i])
+ if(nscreens > cfg.workspaces[newWS - 1].screenPreferences[i])
{
- int screen = cfg.screenPreferences[newWS - 1][i];
+ int screen = cfg.workspaces[newWS - 1].screenPreferences[i];
//log("Found screen (screen " << screenPreferences[arg.num - 1][i] << ")");
- prevWS = focusedWorkspaces[cfg.screenPreferences[newWS - 1][i]];
+ prevWS = focusedWorkspaces[screen];
//log("Changed prevWS");
- focusedWorkspaces[cfg.screenPreferences[newWS - 1][i]] = newWS;
+ focusedWorkspaces[screen] = newWS;
//log("Changed focusedWorkspaces");
- if(focusedScreen != cfg.screenPreferences[newWS - 1][i])
+ if(focusedScreen != screen)
{
- focusedScreen = cfg.screenPreferences[newWS - 1][i];
+ focusedScreen = screen;
XWarpPointer(dpy, root, root, 0, 0, 0, 0, screens[screen].x + screens[screen].w/2, screens[screen].y + screens[screen].h/2);
}
//log("Changed focusedScreen");
@@ -291,7 +291,8 @@ void cWS(int newWS)
//log("Finished changes");
//log(prevWS);
- if(prevWS < 1 || prevWS > cfg.numWS)
+ // LOOK: what is this for?????
+ if(prevWS < 1 || prevWS > cfg.workspaces.size())
{
//untile(prevWS);
}
@@ -520,7 +521,7 @@ const void reload(const CommandArg* argv)
detectScreens();
//Load config again
- Err cfgErr = cfg.reloadFile();
+ vector<Err> cfgErr = cfg.reloadFile();
//Error check
handleConfigErrs(cfgErr);
@@ -929,8 +930,9 @@ int main(int argc, char** argv)
std::string home = getenv("HOME");
std::string pathAfterHome = "/.config/YATwm/config.toml";
std::string file = home + pathAfterHome;
- Err cfgErr = cfg.loadFromFile(file);
-
+ // Err cfgErr = cfg.loadFromFile(file);
+ std::vector<Err> cfgErr = cfg.loadFromFile("config");
+
//Log
yatlog.open(cfg.logFile, std::ios_base::app);
@@ -959,7 +961,7 @@ int main(int argc, char** argv)
XDefineCursor(dpy, root, XCreateFontCursor(dpy, XC_top_left_arrow));
//EWMH
- initEWMH(&dpy, &root, cfg.numWS,cfg. workspaceNames);
+ initEWMH(&dpy, &root, cfg.workspaces.size(), cfg.workspaces);
setCurrentDesktop(1);
for(int i = 1; i < cfg.numWS + 1; i++)
@@ -990,7 +992,7 @@ int main(int argc, char** argv)
switch(e.type)
{
case KeyPress:
- keybindsModule.keyPress(e.xkey);
+ keybindsModule.handleKeypress(e.xkey);
break;
case ConfigureRequest:
configureRequest(e.xconfigurerequest);