Repository: guacamole-server
Updated Branches:
  refs/heads/master 4eae5d2e6 -> 81bba1b58


GUACAMOLE-470: Add support for configurable default palette.

Add support for configuring a default palette for a terminal display.
When the default palette is specified during display creation, that
palette is used instead of GUAC_TERMINAL_INITIAL_PALETTE when resetting
the display palette.


Project: http://git-wip-us.apache.org/repos/asf/guacamole-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/guacamole-server/commit/f8b35078
Tree: http://git-wip-us.apache.org/repos/asf/guacamole-server/tree/f8b35078
Diff: http://git-wip-us.apache.org/repos/asf/guacamole-server/diff/f8b35078

Branch: refs/heads/master
Commit: f8b35078fc2eab22a982f43100f6c07d55931a05
Parents: b61a6ab
Author: Jim Chen <nc...@mozilla.com>
Authored: Tue Jan 9 22:14:56 2018 -0500
Committer: Jim Chen <nc...@mozilla.com>
Committed: Tue May 15 22:05:59 2018 -0400

----------------------------------------------------------------------
 src/terminal/display.c          | 13 ++++++++++++-
 src/terminal/terminal.c         |  2 +-
 src/terminal/terminal/display.h | 11 +++++++++--
 3 files changed, 22 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/guacamole-server/blob/f8b35078/src/terminal/display.c
----------------------------------------------------------------------
diff --git a/src/terminal/display.c b/src/terminal/display.c
index 3ad1cba..9391ec1 100644
--- a/src/terminal/display.c
+++ b/src/terminal/display.c
@@ -246,7 +246,8 @@ int __guac_terminal_set(guac_terminal_display* display, int 
row, int col, int co
 
 guac_terminal_display* guac_terminal_display_alloc(guac_client* client,
         const char* font_name, int font_size, int dpi,
-        guac_terminal_color* foreground, guac_terminal_color* background) {
+        guac_terminal_color* foreground, guac_terminal_color* background,
+        const guac_terminal_color (*palette)[256]) {
 
     PangoFontMap* font_map;
     PangoFont* font;
@@ -294,6 +295,7 @@ guac_terminal_display* 
guac_terminal_display_alloc(guac_client* client,
 
     display->default_foreground = display->glyph_foreground = *foreground;
     display->default_background = display->glyph_background = *background;
+    display->default_palette = palette;
 
     /* Calculate character dimensions */
     display->char_width =
@@ -317,6 +319,9 @@ guac_terminal_display* 
guac_terminal_display_alloc(guac_client* client,
 
 void guac_terminal_display_free(guac_terminal_display* display) {
 
+    /* Free default palette. */
+    free((void*) display->default_palette);
+
     /* Free operations buffers */
     free(display->operations);
 
@@ -328,6 +333,12 @@ void guac_terminal_display_free(guac_terminal_display* 
display) {
 void guac_terminal_display_reset_palette(guac_terminal_display* display) {
 
     /* Reinitialize palette with default values */
+    if (display->default_palette) {
+        memcpy(display->palette, *display->default_palette,
+               sizeof(GUAC_TERMINAL_INITIAL_PALETTE));
+        return;
+    }
+
     memcpy(display->palette, GUAC_TERMINAL_INITIAL_PALETTE,
             sizeof(GUAC_TERMINAL_INITIAL_PALETTE));
 

http://git-wip-us.apache.org/repos/asf/guacamole-server/blob/f8b35078/src/terminal/terminal.c
----------------------------------------------------------------------
diff --git a/src/terminal/terminal.c b/src/terminal/terminal.c
index 076305a..a9f5ae5 100644
--- a/src/terminal/terminal.c
+++ b/src/terminal/terminal.c
@@ -332,7 +332,7 @@ guac_terminal* guac_terminal_create(guac_client* client,
     term->display = guac_terminal_display_alloc(client,
             font_name, font_size, dpi,
             &default_char.attributes.foreground,
-            &default_char.attributes.background);
+            &default_char.attributes.background, NULL);
 
     /* Fail if display init failed */
     if (term->display == NULL) {

http://git-wip-us.apache.org/repos/asf/guacamole-server/blob/f8b35078/src/terminal/terminal/display.h
----------------------------------------------------------------------
diff --git a/src/terminal/terminal/display.h b/src/terminal/terminal/display.h
index e51b07f..98337fd 100644
--- a/src/terminal/terminal/display.h
+++ b/src/terminal/terminal/display.h
@@ -139,6 +139,12 @@ typedef struct guac_terminal_display {
     guac_terminal_color palette[256];
 
     /**
+     * The default palette. Use GUAC_TERMINAL_INITIAL_PALETTE if null.
+     * Must free on destruction if not null.
+     */
+    const guac_terminal_color (*default_palette)[256];
+
+    /**
      * Default foreground color for all glyphs.
      */
     guac_terminal_color default_foreground;
@@ -215,7 +221,8 @@ typedef struct guac_terminal_display {
  */
 guac_terminal_display* guac_terminal_display_alloc(guac_client* client,
         const char* font_name, int font_size, int dpi,
-        guac_terminal_color* foreground, guac_terminal_color* background);
+        guac_terminal_color* foreground, guac_terminal_color* background,
+        const guac_terminal_color (*palette)[256]);
 
 /**
  * Frees the given display.
@@ -224,7 +231,7 @@ void guac_terminal_display_free(guac_terminal_display* 
display);
 
 /**
  * Resets the palette of the given display to the initial, default color
- * values, as defined by GUAC_TERMINAL_INITIAL_PALETTE.
+ * values, as defined by default_palette or GUAC_TERMINAL_INITIAL_PALETTE.
  *
  * @param display
  *     The display to reset.

Reply via email to