]> git.sur5r.net Git - i3/i3/commitdiff
Merge branch 'master' into next
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 17 Aug 2011 11:37:33 +0000 (13:37 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 17 Aug 2011 11:37:33 +0000 (13:37 +0200)
1  2 
src/main.c

diff --combined src/main.c
index 624bcc1be5eef2c6262dbe862c1b22e28c192d45,90e5eb06b323c06f9208ced7d0820517281e9b4e..7cad3d94b432b976c5d1c06944ce3cad55bcab48
@@@ -5,8 -5,6 +5,8 @@@
  #include <fcntl.h>
  #include "all.h"
  
 +#include "sd-daemon.h"
 +
  static int xkb_event_base;
  
  int xkb_current_group;
@@@ -281,6 -279,7 +281,7 @@@ int main(int argc, char *argv[]) 
      root = root_screen->root;
      root_depth = root_screen->root_depth;
      xcb_get_geometry_cookie_t gcookie = xcb_get_geometry(conn, root);
+     xcb_query_pointer_cookie_t pointercookie = xcb_query_pointer(conn, root);
  
      load_configuration(conn, override_configpath, false);
      if (only_check_config) {
          randr_init(&randr_base);
      }
  
+     xcb_query_pointer_reply_t *pointerreply;
+     if (!(pointerreply = xcb_query_pointer_reply(conn, pointercookie, NULL)))
+         die("Could not query pointer position\n");
+     DLOG("Pointer at %d, %d\n", pointerreply->root_x, pointerreply->root_y);
+     Output *output = get_output_containing(pointerreply->root_x, pointerreply->root_y);
+     if (!output) {
+         ELOG("ERROR: No screen at (%d, %d), starting on the first screen\n",
+              pointerreply->root_x, pointerreply->root_y);
+         output = get_first_output();
+     }
+     con_focus(con_descend_focused(output_get_content(output->con)));
      tree_render();
  
      /* Create the UNIX domain socket for IPC */
          ev_io_start(main_loop, ipc_io);
      }
  
 +    /* Also handle the UNIX domain sockets passed via socket activation */
 +    int fds = sd_listen_fds(1);
 +    if (fds < 0)
 +        ELOG("socket activation: Error in sd_listen_fds\n");
 +    else if (fds == 0)
 +        DLOG("socket activation: no sockets passed\n");
 +    else {
 +        for (int fd = SD_LISTEN_FDS_START; fd < (SD_LISTEN_FDS_START + fds); fd++) {
 +            DLOG("socket activation: also listening on fd %d\n", fd);
 +            struct ev_io *ipc_io = scalloc(sizeof(struct ev_io));
 +            ev_io_init(ipc_io, ipc_new_client, fd, EV_READ);
 +            ev_io_start(main_loop, ipc_io);
 +        }
 +    }
 +
      /* Set up i3 specific atoms like I3_SOCKET_PATH and I3_CONFIG_PATH */
      x_set_i3_atoms();