]> git.sur5r.net Git - i3/i3/commitdiff
Merge pull request #1570 from shdown/next
authorMichael Stapelberg <stapelberg@users.noreply.github.com>
Mon, 23 Mar 2015 21:10:17 +0000 (22:10 +0100)
committerMichael Stapelberg <stapelberg@users.noreply.github.com>
Mon, 23 Mar 2015 21:10:17 +0000 (22:10 +0100)
i3bar: spelling fixes

i3bar/include/common.h
i3bar/src/child.c
i3bar/src/xcb.c
include/libi3.h
libi3/string.c
testcases/lib/SocketActivation.pm

index 997a429ed518aab68274c1cf59e41e14ce74e25c..3744df27e58c05e4c104570bf427879f580c4312 100644 (file)
@@ -35,6 +35,7 @@ typedef enum {
  * up one status line. */
 struct status_block {
     i3String *full_text;
+    i3String *short_text;
 
     char *color;
     uint32_t min_width;
index 654efdcab5b158be770acd5baae229da70d8f25c..894bd4a3e2a492bab8173da2ba816893e0530048 100644 (file)
@@ -70,6 +70,7 @@ static void clear_statusline(struct statusline_head *head, bool free_resources)
         first = TAILQ_FIRST(head);
         if (free_resources) {
             I3STRING_FREE(first->full_text);
+            I3STRING_FREE(first->short_text);
             FREE(first->color);
             FREE(first->name);
             FREE(first->instance);
@@ -188,6 +189,9 @@ static int stdin_string(void *context, const unsigned char *val, size_t len) {
     if (strcasecmp(ctx->last_map_key, "full_text") == 0) {
         ctx->block.full_text = i3string_from_markup_with_length((const char *)val, len);
     }
+    if (strcasecmp(ctx->last_map_key, "short_text") == 0) {
+        ctx->block.short_text = i3string_from_markup_with_length((const char *)val, len);
+    }
     if (strcasecmp(ctx->last_map_key, "color") == 0) {
         sasprintf(&(ctx->block.color), "%.*s", len, val);
     }
@@ -261,6 +265,7 @@ static int stdin_end_array(void *context) {
     struct status_block *current;
     TAILQ_FOREACH(current, &statusline_head, blocks) {
         DLOG("full_text = %s\n", i3string_as_utf8(current->full_text));
+        DLOG("short_text = %s\n", i3string_as_utf8(current->short_text));
         DLOG("color = %s\n", current->color);
     }
     DLOG("end of dump\n");
index 3360485a477368133cf16ebb3b2fb3a62d89c473..d87e56e49e7ce590b363937c5cfcc89c7679db10 100644 (file)
@@ -159,7 +159,7 @@ int get_tray_width(struct tc_head *trayclients) {
  * Redraws the statusline to the buffer
  *
  */
-void refresh_statusline(void) {
+void refresh_statusline(bool use_short_text) {
     struct status_block *block;
 
     uint32_t old_statusline_width = statusline_width;
@@ -167,6 +167,12 @@ void refresh_statusline(void) {
 
     /* Predict the text width of all blocks (in pixels). */
     TAILQ_FOREACH(block, &statusline_head, blocks) {
+        /* Try to use the shorter text if necessary and possible. */
+        if (use_short_text && block->short_text != NULL) {
+            I3STRING_FREE(block->full_text);
+            block->full_text = i3string_copy(block->short_text);
+        }
+
         if (i3string_get_num_bytes(block->full_text) == 0)
             continue;
 
@@ -1760,7 +1766,7 @@ void draw_bars(bool unhide) {
     DLOG("Drawing bars...\n");
     int workspace_width = 0;
 
-    refresh_statusline();
+    refresh_statusline(false);
 
     i3_output *outputs_walk;
     SLIST_FOREACH(outputs_walk, outputs, slist) {
@@ -1904,14 +1910,17 @@ void draw_bars(bool unhide) {
         if (!TAILQ_EMPTY(&statusline_head)) {
             DLOG("Printing statusline!\n");
 
-            /* Luckily we already prepared a seperate pixmap containing the rendered
-             * statusline, we just have to copy the relevant parts to the relevant
-             * position */
             int tray_width = get_tray_width(outputs_walk->trayclients);
+            int max_statusline_width = outputs_walk->rect.w - workspace_width - tray_width - 2 * logical_px(sb_hoff_px);
 
-            int visible_statusline_width = MIN(statusline_width,
-                                               outputs_walk->rect.w - workspace_width - tray_width - 2 * logical_px(sb_hoff_px));
+            /* If the statusline is too long, try to use short texts. */
+            if (statusline_width > max_statusline_width)
+                refresh_statusline(true);
 
+            /* Luckily we already prepared a seperate pixmap containing the rendered
+             * statusline, we just have to copy the relevant parts to the relevant
+             * position */
+            int visible_statusline_width = MIN(statusline_width, max_statusline_width);
             xcb_copy_area(xcb_connection,
                           statusline_pm,
                           outputs_walk->buffer,
index c1a11dfc33ec7cef39b00310cbde3e07b99ff9f7..b60dda5c64ee2cc1a533b441ee11b5500bac36a6 100644 (file)
@@ -169,6 +169,12 @@ i3String *i3string_from_markup_with_length(const char *from_markup, size_t num_b
  */
 i3String *i3string_from_ucs2(const xcb_char2b_t *from_ucs2, size_t num_glyphs);
 
+/**
+ * Copies the given i3string.
+ * Note that this will not free the source string.
+ */
+i3String *i3string_copy(i3String *str);
+
 /**
  * Free an i3String.
  *
index afeca9741c3fd4479278ce44dbad59180955d7a1..88fd198639bd377a9c40d57dc12f6ac944333a09 100644 (file)
@@ -109,6 +109,16 @@ i3String *i3string_from_ucs2(const xcb_char2b_t *from_ucs2, size_t num_glyphs) {
     return str;
 }
 
+/**
+ * Copies the given i3string.
+ * Note that this will not free the source string.
+ */
+i3String *i3string_copy(i3String *str) {
+    i3String *copy = i3string_from_utf8(i3string_as_utf8(str));
+    copy->is_markup = str->is_markup;
+    return copy;
+}
+
 /*
  * Free an i3String.
  *
index d32f6051d9fa17f4af26e252892f22c71d937c1e..83ca92555ca5fe7391a0f739a599f24847d7423c 100644 (file)
@@ -109,7 +109,7 @@ sub activate_i3 {
 
         if ($args{valgrind}) {
             $i3cmd =
-                qq|valgrind -v --log-file="$outdir/valgrind-for-$test.log" | .
+                qq|valgrind --log-file="$outdir/valgrind-for-$test.log" | .
                 qq|--suppressions="./valgrind.supp" | .
                 qq|--leak-check=full --track-origins=yes --num-callers=20 | .
                 qq|--tool=memcheck -- $i3cmd|;