summaryrefslogtreecommitdiff
path: root/src/sxwm.c
diff options
context:
space:
mode:
authorAbhinav <abhinav.prsai@gmail.com>2025-06-06 23:41:37 +0100
committerAbhinav <abhinav.prsai@gmail.com>2025-06-06 23:41:37 +0100
commitb0bf3e6250b767f2786f340b577df5f445f9d6aa (patch)
tree6acc7e511c4983fb8e4ad72b08d9c3b57e081f69 /src/sxwm.c
parentb5c4d85ba3e716387fc83c87e8026faddd32f733 (diff)
clean up exec command
sxwm.c: before, some of the parsing logic of the exec command was located in setup, but i have relocated it to a seperate function called startup_exec. i have also replaced the manual spawning of windows with the spawn function parser.c: added the missing parsing logic of exec and simplified it
Diffstat (limited to 'src/sxwm.c')
-rw-r--r--src/sxwm.c48
1 files changed, 20 insertions, 28 deletions
diff --git a/src/sxwm.c b/src/sxwm.c
index c464add..5ad238b 100644
--- a/src/sxwm.c
+++ b/src/sxwm.c
@@ -41,6 +41,7 @@ void change_workspace(int ws);
int clean_mask(int mask);
/* void close_focused(void); */
/* void dec_gaps(void); */
+void startup_exec(void);
/* void focus_next(void); */
/* void focus_prev(void); */
int get_monitor_for(Client *c);
@@ -299,6 +300,22 @@ void dec_gaps(void)
}
}
+void startup_exec(void)
+{
+ for (int i = 0; i < 256; i++) {
+ if (user_config.torun[i]) {
+ const char **argv = build_argv(user_config.torun[i]);
+ if (argv) {
+ spawn(argv);
+ for (int j = 0; argv[j]; j++) {
+ free((char *)argv[j]);
+ }
+ free(argv);
+ }
+ }
+ }
+}
+
void focus_next(void)
{
if (!focused || !workspaces[current_ws]) {
@@ -1347,36 +1364,11 @@ void setup(void)
other_wm();
init_defaults();
if (parser(&user_config)) {
- fprintf(stderr, "sxrc: error parsing config file\n");
+ fprintf(stderr, "sxwmrc: error parsing config file\n");
init_defaults();
}
-
- for (int i = 0; i < 256; i++) {
- if (user_config.torun[i]) {
- printf("[DEBUG] executing %s\n", user_config.torun[i]);
- pid_t pid = fork();
- if (pid == 0) {
- char *argv[256];
- int j = 0;
- char *arg = strtok(user_config.torun[i], " ");
- while (arg && j < 256) {
- argv[j++] = arg;
- arg = strtok(NULL, " ");
- }
- argv[j] = NULL;
- execvp(argv[0], argv);
- perror("execvp");
- _exit(127);
- }
- else if (pid > 0) {
- // parent: don’t wait, just continue (background)
- }
- else {
- perror("fork");
- }
- }
- }
grab_keys();
+ startup_exec();
c_normal = XcursorLibraryLoadCursor(dpy, "left_ptr");
c_move = XcursorLibraryLoadCursor(dpy, "fleur");
@@ -1397,7 +1389,7 @@ void setup(void)
* swapping,
* resizing
* windows in that order.
- */
+ */
XGrabButton(dpy, Button1, 0, root, True, ButtonPressMask | ButtonReleaseMask | PointerMotionMask, GrabModeAsync,
GrabModeAsync, None, None);
XGrabButton(dpy, Button1, user_config.modkey, root, True, ButtonPressMask | ButtonReleaseMask | PointerMotionMask,