]> git.lizzy.rs Git - bspwm.git/commitdiff
Use explicit screen number in socket path template
authorBastien Dejean <nihilhill@gmail.com>
Sun, 23 Nov 2014 14:38:49 +0000 (15:38 +0100)
committerBastien Dejean <nihilhill@gmail.com>
Sun, 23 Nov 2014 14:38:49 +0000 (15:38 +0100)
bspc.c
bspwm.c
common.h
doc/bspwm.1
doc/bspwm.1.txt

diff --git a/bspc.c b/bspc.c
index 04ed970aea7475d30f4ef0bb4ba0e65e79f42ec8..b50a8fcee57a20a290a82eb887f5aae1b38a08c9 100644 (file)
--- a/bspc.c
+++ b/bspc.c
@@ -22,7 +22,6 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <string.h>
 #include <stdlib.h>
 #ifdef __OpenBSD__
 #include <sys/types.h>
@@ -34,8 +33,6 @@
 #include "helpers.h"
 #include "common.h"
 
-extern char *strdup(const char*);
-
 int main(int argc, char *argv[])
 {
        int fd;
@@ -46,9 +43,7 @@ int main(int argc, char *argv[])
                err("No arguments given.\n");
 
        sock_address.sun_family = AF_UNIX;
-       char *sp, *dp, *tdp;
-       int con, it;
-       unsigned int dplen;
+       char *sp;
 
        if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
                err("Failed to create the socket.\n");
@@ -56,34 +51,15 @@ int main(int argc, char *argv[])
        sp = getenv(SOCKET_ENV_VAR);
        if (sp != NULL) {
                snprintf(sock_address.sun_path, sizeof(sock_address.sun_path), "%s", sp);
-               con = connect(fd, (struct sockaddr *) &sock_address, sizeof(sock_address));
        } else {
-               con = -1;
-       }
-
-       dp = getenv("DISPLAY");
-       if (con == -1 && dp != NULL) {
-               snprintf(sock_address.sun_path, sizeof(sock_address.sun_path), SOCKET_PATH_TPL, dp);
-               con = connect(fd, (struct sockaddr *) &sock_address, sizeof(sock_address));
-       }
-
-       if (con == -1 && dp != NULL) {
-               tdp = strdup(dp);
-               dplen = strlen(dp);
-               for (it = dplen - 1; (it > 1) && (tdp[it] != ':'); it--) {
-                       if (tdp[it] == '.') {
-                               tdp[it] = '\0';
-                               break;
-                       }
-               }
-               if (strlen(tdp) != dplen) {
-                       snprintf(sock_address.sun_path, sizeof(sock_address.sun_path), SOCKET_PATH_TPL, tdp);
-                       con = connect(fd, (struct sockaddr *) &sock_address, sizeof(sock_address));
-               }
-               free(tdp);
+               char *host = NULL;
+               int dn = 0, sn = 0;
+               if (xcb_parse_display(NULL, &host, &dn, &sn) != 0)
+                       snprintf(sock_address.sun_path, sizeof(sock_address.sun_path), SOCKET_PATH_TPL, host, dn, sn);
+               free(host);
        }
 
-       if (con == -1)
+       if (connect(fd, (struct sockaddr *) &sock_address, sizeof(sock_address)) == -1)
                err("Failed to connect to the socket.\n");
 
        argc--, argv++;
diff --git a/bspwm.c b/bspwm.c
index ed8bb21830a8a541cf3beac53057a3fa444724d2..8a6a75280c515d7bf2c3fe4e189d94851cfcd915 100644 (file)
--- a/bspwm.c
+++ b/bspwm.c
@@ -96,10 +96,15 @@ int main(int argc, char *argv[])
        dpy_fd = xcb_get_file_descriptor(dpy);
 
        char *sp = getenv(SOCKET_ENV_VAR);
-       if (sp != NULL)
+       if (sp != NULL) {
                snprintf(socket_path, sizeof(socket_path), "%s", sp);
-       else
-               snprintf(socket_path, sizeof(socket_path), SOCKET_PATH_TPL, getenv("DISPLAY"));
+       } else {
+               char *host = NULL;
+               int dn = 0, sn = 0;
+               if (xcb_parse_display(NULL, &host, &dn, &sn) != 0)
+                       snprintf(socket_path, sizeof(socket_path), SOCKET_PATH_TPL, host, dn, sn);
+               free(host);
+       }
 
        sock_address.sun_family = AF_UNIX;
        snprintf(sock_address.sun_path, sizeof(sock_address.sun_path), "%s", socket_path);
index 4b1ee08262c1e9e666210165d10ff91f3dfeaa87..f19d222040a2a4b1fc6cbb1c9bb26eb318136c87 100644 (file)
--- a/common.h
+++ b/common.h
@@ -25,7 +25,7 @@
 #ifndef BSPWM_COMMON_H
 #define BSPWM_COMMON_H
 
-#define SOCKET_PATH_TPL  "/tmp/bspwm%s-socket"
+#define SOCKET_PATH_TPL  "/tmp/bspwm%s_%i_%i-socket"
 #define SOCKET_ENV_VAR   "BSPWM_SOCKET"
 
 enum {
index e6c221c73d5d097e527f89552990753741a966c7..15f280c3e4fa45db15ecb6a4c07651c464caa337 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: bspwm
 .\"    Author: [see the "Author" section]
 .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
-.\"      Date: 11/19/2014
+.\"      Date: 11/23/2014
 .\"    Manual: Bspwm Manual
 .\"    Source: Bspwm 0.8.9
 .\"  Language: English
 .\"
-.TH "BSPWM" "1" "11/19/2014" "Bspwm 0\&.8\&.9" "Bspwm Manual"
+.TH "BSPWM" "1" "11/23/2014" "Bspwm 0\&.8\&.9" "Bspwm Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -1211,7 +1211,7 @@ The path of the socket used for the communication between
 \fBbspc\fR
 and
 \fBbspwm\fR\&. If it isn\(cqt defined, then the following path is used:
-\fI/tmp/bspwm<display_name>\-socket\fR\&.
+\fI/tmp/bspwm<host_name>_<display_number>_<screen_number>\-socket\fR\&.
 .RE
 .SH "PANELS"
 .sp
index 49b7356d83ef70d389a107b258f6d9094e0ada65..62f4b277db4a747761f599b72d8011d53e3fe6c4 100644 (file)
@@ -751,7 +751,7 @@ Environment Variables
 ---------------------
 
 'BSPWM_SOCKET'::
-       The path of the socket used for the communication between *bspc* and *bspwm*. If it isn't defined, then the following path is used: '/tmp/bspwm<display_name>-socket'.
+       The path of the socket used for the communication between *bspc* and *bspwm*. If it isn't defined, then the following path is used: '/tmp/bspwm<host_name>_<display_number>_<screen_number>-socket'.
 
 Panels
 ------