]> git.sur5r.net Git - i3/i3/commitdiff
Merge branch 'next'
authorMichael Stapelberg <michael@stapelberg.de>
Tue, 30 Mar 2010 11:06:41 +0000 (13:06 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 30 Mar 2010 11:06:41 +0000 (13:06 +0200)
1  2 
include/client.h
include/data.h
src/resize.c
src/workspace.c

index 41bd5db36c86eddd712c9aebdb72fc02a89f78a7,8f97eb445d323d8a7d3217ea9ebaf91ff26b9ebf..45b8f4a7ef2d6525ca1cc6a0618955c2b470aef4
@@@ -51,14 -51,14 +51,20 @@@ bool client_matches_class_name(Client *
   * and when moving a fullscreen client to another screen.
   *
   */
- void client_enter_fullscreen(xcb_connection_t *conn, Client *client);
+ void client_enter_fullscreen(xcb_connection_t *conn, Client *client, bool global);
+ /**
+  * Leaves fullscreen mode for the given client. This is called by toggle_fullscreen.
+  *
+  */
+ void client_leave_fullscreen(xcb_connection_t *conn, Client *client);
  
 +/**
 + * Leaves fullscreen mode for the current client. This is called by toggle_fullscreen.
 + *
 + */
 +void client_leave_fullscreen(xcb_connection_t *conn, Client *client);
 +
  /**
   * Toggles fullscreen mode for the given client. It updates the data
   * structures and reconfigures (= resizes/moves) the client and its frame to
diff --cc include/data.h
index 8e1a80cc7634b63ef237e9b96ebe4bc2378eb946,3618dfb8560f938f3f234c2174c6e89459ecdc57..a8b31d3b3e81a66b54f17c2aea6f70ed2fd6962d
@@@ -75,18 -77,22 +77,28 @@@ enum 
  
  /**
   * Stores a rectangle, for example the size of a window, the child window etc.
+  * It needs to be packed so that the compiler will not add any padding bytes.
+  * (it is used in src/ewmh.c for example)
+  *
+  * Note that x and y can contain signed values in some cases (for example when
+  * used for the coordinates of a window, which can be set outside of the
+  * visible area, but not when specifying the position of a workspace for the
+  * _NET_WM_WORKAREA hint). Not declaring x/y as int32_t saves us a lot of
+  * typecasts.
   *
 + * Note that x and y can contain signed values in some cases (for example when
 + * used for the coordinates of a window, which can be set outside of the
 + * visible area, but not when specifying the position of a workspace for the
 + * _NET_WM_WORKAREA hint). Not declaring x/y as int32_t saves us a lot of
 + * typecasts.
 + *
   */
  struct Rect {
-         uint32_t x, y;
-         uint32_t width, height;
- };
+         uint32_t x;
+         uint32_t y;
+         uint32_t width;
+         uint32_t height;
+ } __attribute__((packed));
  
  /**
   * Defines a position in the table
diff --cc src/resize.c
index 6d505dcd25ccf76412be84c3dc978963061f798e,a32e57551fe26942fbf71686f0fa028d624d7e5f..d48dbdbb90284b80ca141281231d95058f53393b
@@@ -228,9 -264,9 +264,10 @@@ void resize_container(xcb_connection_t 
                          if (ws->height_factor[row] == 0)
                                  cols_without_hf++;
  
-                 LOG("old_unoccupied_y = %d\n", old_unoccupied_y);
+                 DLOG("old_unoccupied_y = %d\n", old_unoccupied_y);
+                 DLOG("Updating first (before = %f)\n", ws->height_factor[first]);
 +
-                 LOG("Updating first (before = %f)\n", ws->height_factor[first]);
                  /* Convert 0 (for default width_factor) to actual numbers */
                  if (ws->height_factor[first] == 0)
                          old_height = (old_unoccupied_y / max(cols_without_hf, 1));
diff --cc src/workspace.c
index d58bbaabbd6507e95b8c7253dddfa8612d1e5dd0,c950df8f92e27eda7e9ea56140889a6a855f10c3..6da6034b91ed112096fa9e24ab5cbf3589a6f4d9
@@@ -411,37 -437,41 +437,69 @@@ void workspace_update_urgent_flag(Works
                  if (!current->urgent)
                          continue;
  
-                 ws->urgent = true;
-                 return;
+                 urgent = true;
+                 break;
          }
  
-         ws->urgent = false;
+         ws->urgent = urgent;
+         if (old_flag != urgent)
+                 ipc_send_event("workspace", I3_IPC_EVENT_WORKSPACE, "{\"change\":\"urgent\"}");
+ }
+ /*
+  * Returns the width of the workspace.
+  *
+  */
+ int workspace_width(Workspace *ws) {
+         return ws->rect.width;
+ }
+ /*
+  * Returns the effective height of the workspace (without the internal bar and
+  * without dock clients).
+  *
+  */
+ int workspace_height(Workspace *ws) {
+         int height = ws->rect.height;
+         i3Font *font = load_font(global_conn, config.font);
+         /* Reserve space for dock clients */
+         Client *client;
+         SLIST_FOREACH(client, &(ws->output->dock_clients), dock_clients)
+                 height -= client->desired_height;
+         /* Space for the internal bar */
+         if (!config.disable_workspace_bar)
+                 height -= (font->height + 6);
+         return height;
  }
 +
 +/*
 + * Returns the width of the workspace.
 + *
 + */
 +int workspace_width(Workspace *ws) {
 +        return ws->rect.width;
 +}
 +
 +/*
 + * Returns the effective height of the workspace (without the internal bar and
 + * without dock clients).
 + *
 + */
 +int workspace_height(Workspace *ws) {
 +        int height = ws->rect.height;
 +        i3Font *font = load_font(global_conn, config.font);
 +
 +        /* Reserve space for dock clients */
 +        Client *client;
 +        SLIST_FOREACH(client, &(ws->screen->dock_clients), dock_clients)
 +                height -= client->desired_height;
 +
 +        /* Space for the internal bar */
 +        height -= (font->height + 6);
 +
 +        return height;
 +}