Blame src/profile-editor.c.notify-open-title-transparency

Packit 9982d0
/*
Packit 9982d0
 * Copyright © 2002 Havoc Pennington
Packit 9982d0
 * Copyright © 2002 Mathias Hasselmann
Packit 9982d0
 * Copyright © 2008, 2011, 2017 Christian Persch
Packit 9982d0
 *
Packit 9982d0
 * This program is free software: you can redistribute it and/or modify
Packit 9982d0
 * it under the terms of the GNU General Public License as published by
Packit 9982d0
 * the Free Software Foundation, either version 3 of the License, or
Packit 9982d0
 * (at your option) any later version.
Packit 9982d0
 *
Packit 9982d0
 * This program is distributed in the hope that it will be useful,
Packit 9982d0
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 9982d0
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 9982d0
 * GNU General Public License for more details.
Packit 9982d0
 *
Packit 9982d0
 * You should have received a copy of the GNU General Public License
Packit 9982d0
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit 9982d0
 */
Packit 9982d0
Packit 9982d0
#include <config.h>
Packit 9982d0
Packit 9982d0
#include <string.h>
Packit 9982d0
#include <math.h>
Packit 9982d0
Packit 9982d0
#include <glib.h>
Packit 9982d0
#include <glib/gi18n.h>
Packit 9982d0
#include <gio/gio.h>
Packit 9982d0
Packit 9982d0
#include "terminal-app.h"
Packit 9982d0
#include "terminal-encoding.h"
Packit 9982d0
#include "terminal-enums.h"
Packit 9982d0
#include "profile-editor.h"
Packit 9982d0
#include "terminal-prefs.h"
Packit 9982d0
#include "terminal-schemas.h"
Packit 9982d0
#include "terminal-type-builtins.h"
Packit 9982d0
#include "terminal-util.h"
Packit 9982d0
#include "terminal-profiles-list.h"
Packit 9982d0
#include "terminal-libgsystem.h"
Packit 9982d0
Packit 9982d0
Packit 9982d0
/* Wrapper around g_signal_connect that maintains a list of the
Packit 9982d0
 * handlers installed, and can disconnect them all. */
Packit 9982d0
typedef struct {
Packit 9982d0
  gpointer instance;
Packit 9982d0
  gulong handler_id;
Packit 9982d0
} ProfilePrefsSignal;
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
profile_prefs_register_signal_handler (gpointer instance,
Packit 9982d0
                                       gulong handler_id)
Packit 9982d0
{
Packit 9982d0
  ProfilePrefsSignal sig;
Packit 9982d0
  sig.instance = instance;
Packit 9982d0
  sig.handler_id = handler_id;
Packit 9982d0
  g_array_append_val (the_pref_data->profile_signals, sig);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static gulong
Packit 9982d0
profile_prefs_signal_connect (gpointer instance,
Packit 9982d0
                              const gchar *detailed_signal,
Packit 9982d0
                              GCallback c_handler,
Packit 9982d0
                              gpointer data)
Packit 9982d0
{
Packit 9982d0
  gulong handler_id = g_signal_connect(instance, detailed_signal, c_handler, data);
Packit 9982d0
  profile_prefs_register_signal_handler (instance, handler_id);
Packit 9982d0
  return handler_id;
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
profile_prefs_signal_handlers_disconnect_all (void)
Packit 9982d0
{
Packit 9982d0
  for (guint i = 0; i < the_pref_data->profile_signals->len; i++) {
Packit 9982d0
    ProfilePrefsSignal *sig = &g_array_index (the_pref_data->profile_signals, ProfilePrefsSignal, i);
Packit 9982d0
    g_signal_handler_disconnect (sig->instance, sig->handler_id);
Packit 9982d0
  }
Packit 9982d0
  g_array_set_size (the_pref_data->profile_signals, 0);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
Packit 9982d0
/* Wrappers around g_settings_bind and friends that maintain a list of the
Packit 9982d0
 * bindings installed, and can unbind them all. */
Packit 9982d0
typedef struct {
Packit 9982d0
  gpointer object;
Packit 9982d0
  char *property;
Packit 9982d0
} ProfilePrefsBinding;
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
profile_prefs_register_settings_binding (gpointer object,
Packit 9982d0
                                         const char *property)
Packit 9982d0
{
Packit 9982d0
  ProfilePrefsBinding bind;
Packit 9982d0
  bind.object = object;
Packit 9982d0
  bind.property = g_strdup (property);
Packit 9982d0
  g_array_append_val (the_pref_data->profile_bindings, bind);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
profile_prefs_settings_bind (GSettings *settings,
Packit 9982d0
                             const gchar *key,
Packit 9982d0
                             gpointer object,
Packit 9982d0
                             const gchar *property,
Packit 9982d0
                             GSettingsBindFlags flags)
Packit 9982d0
{
Packit 9982d0
  profile_prefs_register_settings_binding (object, property);
Packit 9982d0
  g_settings_bind (settings, key, object, property, flags);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
profile_prefs_settings_bind_with_mapping (GSettings *settings,
Packit 9982d0
                                          const gchar *key,
Packit 9982d0
                                          gpointer object,
Packit 9982d0
                                          const gchar *property,
Packit 9982d0
                                          GSettingsBindFlags flags,
Packit 9982d0
                                          GSettingsBindGetMapping get_mapping,
Packit 9982d0
                                          GSettingsBindSetMapping set_mapping,
Packit 9982d0
                                          gpointer user_data,
Packit 9982d0
                                          GDestroyNotify destroy)
Packit 9982d0
{
Packit 9982d0
  profile_prefs_register_settings_binding (object, property);
Packit 9982d0
  g_settings_bind_with_mapping (settings, key, object, property, flags, get_mapping, set_mapping, user_data, destroy);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
profile_prefs_settings_bind_writable (GSettings *settings,
Packit 9982d0
                                      const gchar *key,
Packit 9982d0
                                      gpointer object,
Packit 9982d0
                                      const gchar *property,
Packit 9982d0
                                      gboolean inverted)
Packit 9982d0
{
Packit 9982d0
  profile_prefs_register_settings_binding (object, property);
Packit 9982d0
  g_settings_bind_writable (settings, key, object, property, inverted);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
profile_prefs_settings_unbind_all (void)
Packit 9982d0
{
Packit 9982d0
  for (guint i = 0; i < the_pref_data->profile_bindings->len; i++) {
Packit 9982d0
    ProfilePrefsBinding *bind = &g_array_index (the_pref_data->profile_bindings, ProfilePrefsBinding, i);
Packit 9982d0
    g_settings_unbind (bind->object, bind->property);
Packit 9982d0
    g_free (bind->property);
Packit 9982d0
  }
Packit 9982d0
  g_array_set_size (the_pref_data->profile_bindings, 0);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
Packit 9982d0
typedef struct _TerminalColorScheme TerminalColorScheme;
Packit 9982d0
Packit 9982d0
struct _TerminalColorScheme
Packit 9982d0
{
Packit 9982d0
  const char *name;
Packit 9982d0
  const GdkRGBA foreground;
Packit 9982d0
  const GdkRGBA background;
Packit 9982d0
};
Packit 9982d0
Packit 9982d0
#define COLOR(r, g, b) { .red = (r) / 255.0, .green = (g) / 255.0, .blue = (b) / 255.0, .alpha = 1.0 }
Packit 9982d0
Packit 9982d0
static const TerminalColorScheme color_schemes[] = {
Packit 9982d0
  { N_("Black on light yellow"),
Packit 9982d0
    COLOR (0x00, 0x00, 0x00),
Packit 9982d0
    COLOR (0xff, 0xff, 0xdd)
Packit 9982d0
  },
Packit 9982d0
  { N_("Black on white"),
Packit 9982d0
    COLOR (0x00, 0x00, 0x00),
Packit 9982d0
    COLOR (0xff, 0xff, 0xff)
Packit 9982d0
  },
Packit 9982d0
  { N_("Gray on black"),
Packit 9982d0
    COLOR (0xaa, 0xaa, 0xaa),
Packit 9982d0
    COLOR (0x00, 0x00, 0x00)
Packit 9982d0
  },
Packit 9982d0
  { N_("Green on black"),
Packit 9982d0
    COLOR (0x00, 0xff, 0x00),
Packit 9982d0
    COLOR (0x00, 0x00, 0x00)
Packit 9982d0
  },
Packit 9982d0
  { N_("White on black"),
Packit 9982d0
    COLOR (0xff, 0xff, 0xff),
Packit 9982d0
    COLOR (0x00, 0x00, 0x00)
Packit 9982d0
  },
Packit 9982d0
  /* Translators: "Tango" is the name of a colour scheme, "light" can be translated */
Packit 9982d0
  { N_("Tango light"),
Packit 9982d0
    COLOR (0x2e, 0x34, 0x36),
Packit 9982d0
    COLOR (0xee, 0xee, 0xec)
Packit 9982d0
  },
Packit 9982d0
  /* Translators: "Tango" is the name of a colour scheme, "dark" can be translated */
Packit 9982d0
  { N_("Tango dark"),
Packit 9982d0
    COLOR (0xd3, 0xd7, 0xcf),
Packit 9982d0
    COLOR (0x2e, 0x34, 0x36)
Packit 9982d0
  },
Packit 9982d0
  /* Translators: "Solarized" is the name of a colour scheme, "light" can be translated */
Packit 9982d0
  { N_("Solarized light"),
Packit 9982d0
    COLOR (0x65, 0x7B, 0x83),
Packit 9982d0
    COLOR (0xfd, 0xf6, 0xe3)
Packit 9982d0
  },
Packit 9982d0
  /* Translators: "Solarized" is the name of a colour scheme, "dark" can be translated */
Packit 9982d0
  { N_("Solarized dark"),
Packit 9982d0
    COLOR (0x83, 0x94, 0x96),
Packit 9982d0
    COLOR (0x00, 0x2b, 0x36)
Packit 9982d0
  },
Packit 9982d0
};
Packit 9982d0
Packit 9982d0
#define TERMINAL_PALETTE_SIZE (16)
Packit 9982d0
Packit 9982d0
enum
Packit 9982d0
{
Packit 9982d0
  TERMINAL_PALETTE_TANGO     = 0,
Packit 9982d0
  TERMINAL_PALETTE_LINUX     = 1,
Packit 9982d0
  TERMINAL_PALETTE_XTERM     = 2,
Packit 9982d0
  TERMINAL_PALETTE_RXVT      = 3,
Packit 9982d0
  TERMINAL_PALETTE_SOLARIZED = 4,
Packit 9982d0
  TERMINAL_PALETTE_N_BUILTINS
Packit 9982d0
};
Packit 9982d0
Packit 9982d0
static const GdkRGBA terminal_palettes[TERMINAL_PALETTE_N_BUILTINS][TERMINAL_PALETTE_SIZE] =
Packit 9982d0
{
Packit 9982d0
  /* Tango palette */
Packit 9982d0
  {
Packit 9982d0
    COLOR (0x2e, 0x34, 0x36),
Packit 9982d0
    COLOR (0xcc, 0x00, 0x00),
Packit 9982d0
    COLOR (0x4e, 0x9a, 0x06),
Packit 9982d0
    COLOR (0xc4, 0xa0, 0x00),
Packit 9982d0
    COLOR (0x34, 0x65, 0xa4),
Packit 9982d0
    COLOR (0x75, 0x50, 0x7b),
Packit 9982d0
    COLOR (0x06, 0x98, 0x9a),
Packit 9982d0
    COLOR (0xd3, 0xd7, 0xcf),
Packit 9982d0
    COLOR (0x55, 0x57, 0x53),
Packit 9982d0
    COLOR (0xef, 0x29, 0x29),
Packit 9982d0
    COLOR (0x8a, 0xe2, 0x34),
Packit 9982d0
    COLOR (0xfc, 0xe9, 0x4f),
Packit 9982d0
    COLOR (0x72, 0x9f, 0xcf),
Packit 9982d0
    COLOR (0xad, 0x7f, 0xa8),
Packit 9982d0
    COLOR (0x34, 0xe2, 0xe2),
Packit 9982d0
    COLOR (0xee, 0xee, 0xec)
Packit 9982d0
  },
Packit 9982d0
Packit 9982d0
  /* Linux palette */
Packit 9982d0
  {
Packit 9982d0
    COLOR (0x00, 0x00, 0x00),
Packit 9982d0
    COLOR (0xaa, 0x00, 0x00),
Packit 9982d0
    COLOR (0x00, 0xaa, 0x00),
Packit 9982d0
    COLOR (0xaa, 0x55, 0x00),
Packit 9982d0
    COLOR (0x00, 0x00, 0xaa),
Packit 9982d0
    COLOR (0xaa, 0x00, 0xaa),
Packit 9982d0
    COLOR (0x00, 0xaa, 0xaa),
Packit 9982d0
    COLOR (0xaa, 0xaa, 0xaa),
Packit 9982d0
    COLOR (0x55, 0x55, 0x55),
Packit 9982d0
    COLOR (0xff, 0x55, 0x55),
Packit 9982d0
    COLOR (0x55, 0xff, 0x55),
Packit 9982d0
    COLOR (0xff, 0xff, 0x55),
Packit 9982d0
    COLOR (0x55, 0x55, 0xff),
Packit 9982d0
    COLOR (0xff, 0x55, 0xff),
Packit 9982d0
    COLOR (0x55, 0xff, 0xff),
Packit 9982d0
    COLOR (0xff, 0xff, 0xff)
Packit 9982d0
  },
Packit 9982d0
Packit 9982d0
  /* XTerm palette */
Packit 9982d0
  {
Packit 9982d0
    COLOR (0x00, 0x00, 0x00),
Packit 9982d0
    COLOR (0xcd, 0x00, 0x00),
Packit 9982d0
    COLOR (0x00, 0xcd, 0x00),
Packit 9982d0
    COLOR (0xcd, 0xcd, 0x00),
Packit 9982d0
    COLOR (0x00, 0x00, 0xee),
Packit 9982d0
    COLOR (0xcd, 0x00, 0xcd),
Packit 9982d0
    COLOR (0x00, 0xcd, 0xcd),
Packit 9982d0
    COLOR (0xe5, 0xe5, 0xe5),
Packit 9982d0
    COLOR (0x7f, 0x7f, 0x7f),
Packit 9982d0
    COLOR (0xff, 0x00, 0x00),
Packit 9982d0
    COLOR (0x00, 0xff, 0x00),
Packit 9982d0
    COLOR (0xff, 0xff, 0x00),
Packit 9982d0
    COLOR (0x5c, 0x5c, 0xff),
Packit 9982d0
    COLOR (0xff, 0x00, 0xff),
Packit 9982d0
    COLOR (0x00, 0xff, 0xff),
Packit 9982d0
    COLOR (0xff, 0xff, 0xff)
Packit 9982d0
  },
Packit 9982d0
Packit 9982d0
  /* RXVT palette */
Packit 9982d0
  {
Packit 9982d0
    COLOR (0x00, 0x00, 0x00),
Packit 9982d0
    COLOR (0xcd, 0x00, 0x00),
Packit 9982d0
    COLOR (0x00, 0xcd, 0x00),
Packit 9982d0
    COLOR (0xcd, 0xcd, 0x00),
Packit 9982d0
    COLOR (0x00, 0x00, 0xcd),
Packit 9982d0
    COLOR (0xcd, 0x00, 0xcd),
Packit 9982d0
    COLOR (0x00, 0xcd, 0xcd),
Packit 9982d0
    COLOR (0xfa, 0xeb, 0xd7),
Packit 9982d0
    COLOR (0x40, 0x40, 0x40),
Packit 9982d0
    COLOR (0xff, 0x00, 0x00),
Packit 9982d0
    COLOR (0x00, 0xff, 0x00),
Packit 9982d0
    COLOR (0xff, 0xff, 0x00),
Packit 9982d0
    COLOR (0x00, 0x00, 0xff),
Packit 9982d0
    COLOR (0xff, 0x00, 0xff),
Packit 9982d0
    COLOR (0x00, 0xff, 0xff),
Packit 9982d0
    COLOR (0xff, 0xff, 0xff)
Packit 9982d0
  },
Packit 9982d0
Packit 9982d0
  /* Solarized palette (1.0.0beta2): http://ethanschoonover.com/solarized */
Packit 9982d0
  {
Packit 9982d0
    COLOR (0x07, 0x36, 0x42),
Packit 9982d0
    COLOR (0xdc, 0x32, 0x2f),
Packit 9982d0
    COLOR (0x85, 0x99, 0x00),
Packit 9982d0
    COLOR (0xb5, 0x89, 0x00),
Packit 9982d0
    COLOR (0x26, 0x8b, 0xd2),
Packit 9982d0
    COLOR (0xd3, 0x36, 0x82),
Packit 9982d0
    COLOR (0x2a, 0xa1, 0x98),
Packit 9982d0
    COLOR (0xee, 0xe8, 0xd5),
Packit 9982d0
    COLOR (0x00, 0x2b, 0x36),
Packit 9982d0
    COLOR (0xcb, 0x4b, 0x16),
Packit 9982d0
    COLOR (0x58, 0x6e, 0x75),
Packit 9982d0
    COLOR (0x65, 0x7b, 0x83),
Packit 9982d0
    COLOR (0x83, 0x94, 0x96),
Packit 9982d0
    COLOR (0x6c, 0x71, 0xc4),
Packit 9982d0
    COLOR (0x93, 0xa1, 0xa1),
Packit 9982d0
    COLOR (0xfd, 0xf6, 0xe3)
Packit 9982d0
  },
Packit 9982d0
};
Packit 9982d0
Packit 9982d0
#undef COLOR
Packit 9982d0
Packit 9982d0
static void profile_colors_notify_scheme_combo_cb (GSettings *profile,
Packit 9982d0
                                                   const char *key,
Packit 9982d0
                                                   GtkComboBox *combo);
Packit 9982d0
Packit 9982d0
static void profile_palette_notify_scheme_combo_cb (GSettings *profile,
Packit 9982d0
                                                    const char *key,
Packit 9982d0
                                                    GtkComboBox *combo);
Packit 9982d0
Packit 9982d0
static void profile_palette_notify_colorpickers_cb (GSettings *profile,
Packit 9982d0
                                                    const char *key,
Packit 9982d0
                                                    gpointer user_data);
Packit 9982d0
Packit 9982d0
Packit 9982d0
/* gdk_rgba_equal is too strict! */
Packit 9982d0
static gboolean
Packit 9982d0
rgba_equal (const GdkRGBA *a,
Packit 9982d0
            const GdkRGBA *b)
Packit 9982d0
{
Packit 9982d0
  gdouble dr, dg, db;
Packit 9982d0
Packit 9982d0
  dr = a->red - b->red;
Packit 9982d0
  dg = a->green - b->green;
Packit 9982d0
  db = a->blue - b->blue;
Packit 9982d0
Packit 9982d0
  return (dr * dr + dg * dg + db * db) < 1e-4;
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static gboolean
Packit 9982d0
palette_cmp (const GdkRGBA *ca,
Packit 9982d0
             const GdkRGBA *cb)
Packit 9982d0
{
Packit 9982d0
  guint i;
Packit 9982d0
Packit 9982d0
  for (i = 0; i < TERMINAL_PALETTE_SIZE; ++i)
Packit 9982d0
    if (!rgba_equal (&ca[i], &cb[i]))
Packit 9982d0
      return FALSE;
Packit 9982d0
Packit 9982d0
  return TRUE;
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static gboolean
Packit 9982d0
palette_is_builtin (const GdkRGBA *colors,
Packit 9982d0
                    gsize n_colors,
Packit 9982d0
                    guint *n)
Packit 9982d0
{
Packit 9982d0
  guint i;
Packit 9982d0
Packit 9982d0
  if (n_colors != TERMINAL_PALETTE_SIZE)
Packit 9982d0
    return FALSE;
Packit 9982d0
Packit 9982d0
  for (i = 0; i < TERMINAL_PALETTE_N_BUILTINS; ++i)
Packit 9982d0
    {
Packit 9982d0
      if (palette_cmp (colors, terminal_palettes[i]))
Packit 9982d0
        {
Packit 9982d0
          *n = i;
Packit 9982d0
          return TRUE;
Packit 9982d0
        }
Packit 9982d0
    }
Packit 9982d0
Packit 9982d0
  return FALSE;
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
modify_palette_entry (GSettings       *profile,
Packit 9982d0
                      guint            i,
Packit 9982d0
                      const GdkRGBA   *color)
Packit 9982d0
{
Packit 9982d0
  gs_free GdkRGBA *colors;
Packit 9982d0
  gsize n_colors;
Packit 9982d0
Packit 9982d0
  /* FIXMEchpe: this can be optimised, don't really need to parse the colours! */
Packit 9982d0
Packit 9982d0
  colors = terminal_g_settings_get_rgba_palette (profile, TERMINAL_PROFILE_PALETTE_KEY, &n_colors);
Packit 9982d0
Packit 9982d0
  if (i < n_colors)
Packit 9982d0
    {
Packit 9982d0
      colors[i] = *color;
Packit 9982d0
      terminal_g_settings_set_rgba_palette (profile, TERMINAL_PROFILE_PALETTE_KEY,
Packit 9982d0
                                            colors, n_colors);
Packit 9982d0
    }
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
color_scheme_combo_changed_cb (GtkWidget *combo,
Packit 9982d0
                               GParamSpec *pspec,
Packit 9982d0
                               GSettings *profile)
Packit 9982d0
{
Packit 9982d0
  guint i;
Packit 9982d0
Packit 9982d0
  i = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
Packit 9982d0
Packit 9982d0
  if (i < G_N_ELEMENTS (color_schemes))
Packit 9982d0
    {
Packit 9982d0
      g_signal_handlers_block_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo);
Packit 9982d0
      terminal_g_settings_set_rgba (profile, TERMINAL_PROFILE_FOREGROUND_COLOR_KEY, &color_schemes[i].foreground);
Packit 9982d0
      terminal_g_settings_set_rgba (profile, TERMINAL_PROFILE_BACKGROUND_COLOR_KEY, &color_schemes[i].background);
Packit 9982d0
      g_signal_handlers_unblock_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo);
Packit 9982d0
    }
Packit 9982d0
  else
Packit 9982d0
    {
Packit 9982d0
      /* "custom" selected, no change */
Packit 9982d0
    }
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
profile_colors_notify_scheme_combo_cb (GSettings *profile,
Packit 9982d0
                                       const char *key,
Packit 9982d0
                                       GtkComboBox *combo)
Packit 9982d0
{
Packit 9982d0
  GdkRGBA fg, bg;
Packit 9982d0
  guint i;
Packit 9982d0
Packit 9982d0
  terminal_g_settings_get_rgba (profile, TERMINAL_PROFILE_FOREGROUND_COLOR_KEY, &fg;;
Packit 9982d0
  terminal_g_settings_get_rgba (profile, TERMINAL_PROFILE_BACKGROUND_COLOR_KEY, &bg;;
Packit 9982d0
Packit 9982d0
  for (i = 0; i < G_N_ELEMENTS (color_schemes); ++i)
Packit 9982d0
    {
Packit 9982d0
      if (rgba_equal (&fg, &color_schemes[i].foreground) &&
Packit 9982d0
          rgba_equal (&bg, &color_schemes[i].background))
Packit 9982d0
        break;
Packit 9982d0
    }
Packit 9982d0
  /* If we didn't find a match, then we get the last combo box item which is "custom" */
Packit 9982d0
Packit 9982d0
  g_signal_handlers_block_by_func (combo, G_CALLBACK (color_scheme_combo_changed_cb), profile);
Packit 9982d0
  gtk_combo_box_set_active (GTK_COMBO_BOX (combo), i);
Packit 9982d0
  g_signal_handlers_unblock_by_func (combo, G_CALLBACK (color_scheme_combo_changed_cb), profile);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
palette_scheme_combo_changed_cb (GtkComboBox *combo,
Packit 9982d0
                                 GParamSpec *pspec,
Packit 9982d0
                                 GSettings *profile)
Packit 9982d0
{
Packit 9982d0
  int i;
Packit 9982d0
Packit 9982d0
  i = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
Packit 9982d0
Packit 9982d0
  g_signal_handlers_block_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo);
Packit 9982d0
  if (i < TERMINAL_PALETTE_N_BUILTINS)
Packit 9982d0
    terminal_g_settings_set_rgba_palette (profile, TERMINAL_PROFILE_PALETTE_KEY,
Packit 9982d0
                                          terminal_palettes[i], TERMINAL_PALETTE_SIZE);
Packit 9982d0
  else
Packit 9982d0
    {
Packit 9982d0
      /* "custom" selected, no change */
Packit 9982d0
    }
Packit 9982d0
  g_signal_handlers_unblock_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
profile_palette_notify_scheme_combo_cb (GSettings *profile,
Packit 9982d0
                                        const char *key,
Packit 9982d0
                                        GtkComboBox *combo)
Packit 9982d0
{
Packit 9982d0
  gs_free GdkRGBA *colors;
Packit 9982d0
  gsize n_colors;
Packit 9982d0
  guint i;
Packit 9982d0
Packit 9982d0
  colors = terminal_g_settings_get_rgba_palette (profile, TERMINAL_PROFILE_PALETTE_KEY, &n_colors);
Packit 9982d0
  if (!palette_is_builtin (colors, n_colors, &i))
Packit 9982d0
    /* If we didn't find a match, then we want the last combo
Packit 9982d0
     * box item which is "custom"
Packit 9982d0
     */
Packit 9982d0
    i = TERMINAL_PALETTE_N_BUILTINS;
Packit 9982d0
Packit 9982d0
  g_signal_handlers_block_by_func (combo, G_CALLBACK (palette_scheme_combo_changed_cb), profile);
Packit 9982d0
  gtk_combo_box_set_active (combo, i);
Packit 9982d0
  g_signal_handlers_unblock_by_func (combo, G_CALLBACK (palette_scheme_combo_changed_cb), profile);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
palette_color_notify_cb (GtkColorButton *button,
Packit 9982d0
                         GParamSpec *pspec,
Packit 9982d0
                         GSettings *profile)
Packit 9982d0
{
Packit 9982d0
  GdkRGBA color;
Packit 9982d0
  guint i;
Packit 9982d0
Packit 9982d0
  gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (button), &color;;
Packit 9982d0
  i = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (button), "palette-entry-index"));
Packit 9982d0
Packit 9982d0
  g_signal_handlers_block_by_func (profile, G_CALLBACK (profile_palette_notify_colorpickers_cb), NULL);
Packit 9982d0
  modify_palette_entry (profile, i, &color;;
Packit 9982d0
  g_signal_handlers_unblock_by_func (profile, G_CALLBACK (profile_palette_notify_colorpickers_cb), NULL);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
profile_palette_notify_colorpickers_cb (GSettings *profile,
Packit 9982d0
                                        const char *key,
Packit 9982d0
                                        gpointer user_data)
Packit 9982d0
{
Packit 9982d0
  GtkWidget *w;
Packit 9982d0
  GtkBuilder *builder = the_pref_data->builder;
Packit 9982d0
  gs_free GdkRGBA *colors;
Packit 9982d0
  gsize n_colors, i;
Packit 9982d0
Packit 9982d0
  g_assert (strcmp (key, TERMINAL_PROFILE_PALETTE_KEY) == 0);
Packit 9982d0
Packit 9982d0
  colors = terminal_g_settings_get_rgba_palette (profile, TERMINAL_PROFILE_PALETTE_KEY, &n_colors);
Packit 9982d0
Packit 9982d0
  n_colors = MIN (n_colors, TERMINAL_PALETTE_SIZE);
Packit 9982d0
  for (i = 0; i < n_colors; i++)
Packit 9982d0
    {
Packit 9982d0
      char name[32];
Packit 9982d0
Packit 9982d0
      g_snprintf (name, sizeof (name), "palette-colorpicker-%" G_GSIZE_FORMAT, i);
Packit 9982d0
      w = (GtkWidget *) gtk_builder_get_object (builder, name);
Packit 9982d0
Packit 9982d0
      g_signal_handlers_block_by_func (w, G_CALLBACK (palette_color_notify_cb), profile);
Packit 9982d0
      gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (w), &colors[i]);
Packit 9982d0
      g_signal_handlers_unblock_by_func (w, G_CALLBACK (palette_color_notify_cb), profile);
Packit 9982d0
    }
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
custom_command_entry_changed_cb (GtkEntry *entry)
Packit 9982d0
{
Packit 9982d0
  const char *command;
Packit 9982d0
  gs_free_error GError *error = NULL;
Packit 9982d0
Packit 9982d0
  command = gtk_entry_get_text (entry);
Packit 9982d0
Packit 9982d0
  if (command[0] == '\0' ||
Packit 9982d0
      g_shell_parse_argv (command, NULL, NULL, &error))
Packit 9982d0
    {
Packit 9982d0
      gtk_entry_set_icon_from_icon_name (entry, GTK_PACK_END, NULL);
Packit 9982d0
    }
Packit 9982d0
  else
Packit 9982d0
    {
Packit 9982d0
      gs_free char *tooltip;
Packit 9982d0
Packit 9982d0
      gtk_entry_set_icon_from_icon_name (entry, GTK_PACK_END, "dialog-warning");
Packit 9982d0
Packit 9982d0
      tooltip = g_strdup_printf (_("Error parsing command: %s"), error->message);
Packit 9982d0
      gtk_entry_set_icon_tooltip_text (entry, GTK_PACK_END, tooltip);
Packit 9982d0
    }
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
default_size_reset_cb (GtkWidget *button,
Packit 9982d0
                       GSettings *profile)
Packit 9982d0
{
Packit 9982d0
  g_settings_reset (profile, TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS_KEY);
Packit 9982d0
  g_settings_reset (profile, TERMINAL_PROFILE_DEFAULT_SIZE_ROWS_KEY);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
cell_scale_reset_cb (GtkWidget *button,
Packit 9982d0
                     GSettings *profile)
Packit 9982d0
{
Packit 9982d0
  g_settings_reset (profile, TERMINAL_PROFILE_CELL_HEIGHT_SCALE_KEY);
Packit 9982d0
  g_settings_reset (profile, TERMINAL_PROFILE_CELL_WIDTH_SCALE_KEY);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
reset_compat_defaults_cb (GtkWidget *button,
Packit 9982d0
                          GSettings *profile)
Packit 9982d0
{
Packit 9982d0
  g_settings_reset (profile, TERMINAL_PROFILE_DELETE_BINDING_KEY);
Packit 9982d0
  g_settings_reset (profile, TERMINAL_PROFILE_BACKSPACE_BINDING_KEY);
Packit 9982d0
  g_settings_reset (profile, TERMINAL_PROFILE_ENCODING_KEY);
Packit 9982d0
  g_settings_reset (profile, TERMINAL_PROFILE_CJK_UTF8_AMBIGUOUS_WIDTH_KEY);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
/*
Packit 9982d0
 * initialize widgets
Packit 9982d0
 */
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
set_input_hints(GtkWidget *entry)
Packit 9982d0
{
Packit 9982d0
#if GTK_CHECK_VERSION (3, 22, 20)
Packit 9982d0
  gtk_entry_set_input_hints (GTK_ENTRY (entry), GTK_INPUT_HINT_NO_EMOJI);
Packit 9982d0
#endif
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
init_color_scheme_menu (GtkWidget *widget)
Packit 9982d0
{
Packit 9982d0
  GtkCellRenderer *renderer;
Packit 9982d0
  GtkTreeIter iter;
Packit 9982d0
  gs_unref_object GtkListStore *store;
Packit 9982d0
  guint i;
Packit 9982d0
Packit 9982d0
  store = gtk_list_store_new (1, G_TYPE_STRING);
Packit 9982d0
  for (i = 0; i < G_N_ELEMENTS (color_schemes); ++i)
Packit 9982d0
    gtk_list_store_insert_with_values (store, &iter, -1,
Packit 9982d0
                                       0, _(color_schemes[i].name),
Packit 9982d0
                                       -1);
Packit 9982d0
  gtk_list_store_insert_with_values (store, &iter, -1,
Packit 9982d0
                                      0, _("Custom"),
Packit 9982d0
                                      -1);
Packit 9982d0
Packit 9982d0
  gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
Packit 9982d0
Packit 9982d0
  renderer = gtk_cell_renderer_text_new ();
Packit 9982d0
  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
Packit 9982d0
  gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
enum {
Packit 9982d0
  ENCODINGS_COLUMN_ID = 0,
Packit 9982d0
  ENCODINGS_COLUMN_TEXT = 1
Packit 9982d0
};
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
init_encodings_combo (GtkWidget *widget)
Packit 9982d0
{
Packit 9982d0
  gs_unref_object GtkListStore *store = terminal_encodings_list_store_new (ENCODINGS_COLUMN_ID,
Packit 9982d0
                                                                           ENCODINGS_COLUMN_TEXT);
Packit 9982d0
Packit 9982d0
  /* Now turn on sorting */
Packit 9982d0
  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
Packit 9982d0
                                        ENCODINGS_COLUMN_TEXT,
Packit 9982d0
                                        GTK_SORT_ASCENDING);
Packit 9982d0
Packit 9982d0
  gtk_combo_box_set_id_column (GTK_COMBO_BOX (widget), ENCODINGS_COLUMN_ID);
Packit 9982d0
  gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
Packit 9982d0
Packit 9982d0
  /* Cell renderer */
Packit 9982d0
  GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
Packit 9982d0
  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
Packit 9982d0
  gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer,
Packit 9982d0
                                  "text", ENCODINGS_COLUMN_TEXT, NULL);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
/* Tab scrolling was removed from GtkNotebook in gtk 3, so reimplement it here */
Packit 9982d0
static gboolean
Packit 9982d0
scroll_event_cb (GtkWidget      *widget,
Packit 9982d0
                 GdkEventScroll *event,
Packit 9982d0
                 gpointer        user_data)
Packit 9982d0
{
Packit 9982d0
  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
Packit 9982d0
  GtkWidget *child, *event_widget, *action_widget;
Packit 9982d0
Packit 9982d0
  if ((event->state & gtk_accelerator_get_default_mod_mask ()) != 0)
Packit 9982d0
    return FALSE;
Packit 9982d0
Packit 9982d0
  child = gtk_notebook_get_nth_page (notebook, gtk_notebook_get_current_page (notebook));
Packit 9982d0
  if (child == NULL)
Packit 9982d0
    return FALSE;
Packit 9982d0
Packit 9982d0
  event_widget = gtk_get_event_widget ((GdkEvent *) event);
Packit 9982d0
Packit 9982d0
  /* Ignore scroll events from the content of the page */
Packit 9982d0
  if (event_widget == NULL ||
Packit 9982d0
      event_widget == child ||
Packit 9982d0
      gtk_widget_is_ancestor (event_widget, child))
Packit 9982d0
    return FALSE;
Packit 9982d0
Packit 9982d0
  /* And also from the action widgets */
Packit 9982d0
  action_widget = gtk_notebook_get_action_widget (notebook, GTK_PACK_START);
Packit 9982d0
  if (event_widget == action_widget ||
Packit 9982d0
      (action_widget != NULL && gtk_widget_is_ancestor (event_widget, action_widget)))
Packit 9982d0
    return FALSE;
Packit 9982d0
  action_widget = gtk_notebook_get_action_widget (notebook, GTK_PACK_END);
Packit 9982d0
  if (event_widget == action_widget ||
Packit 9982d0
      (action_widget != NULL && gtk_widget_is_ancestor (event_widget, action_widget)))
Packit 9982d0
    return FALSE;
Packit 9982d0
Packit 9982d0
  switch (event->direction) {
Packit 9982d0
    case GDK_SCROLL_RIGHT:
Packit 9982d0
    case GDK_SCROLL_DOWN:
Packit 9982d0
      gtk_notebook_next_page (notebook);
Packit 9982d0
      return TRUE;
Packit 9982d0
    case GDK_SCROLL_LEFT:
Packit 9982d0
    case GDK_SCROLL_UP:
Packit 9982d0
      gtk_notebook_prev_page (notebook);
Packit 9982d0
      return TRUE;
Packit 9982d0
    case GDK_SCROLL_SMOOTH:
Packit 9982d0
      switch (gtk_notebook_get_tab_pos (notebook)) {
Packit 9982d0
        case GTK_POS_LEFT:
Packit 9982d0
        case GTK_POS_RIGHT:
Packit 9982d0
          if (event->delta_y > 0)
Packit 9982d0
            gtk_notebook_next_page (notebook);
Packit 9982d0
          else if (event->delta_y < 0)
Packit 9982d0
            gtk_notebook_prev_page (notebook);
Packit 9982d0
          break;
Packit 9982d0
        case GTK_POS_TOP:
Packit 9982d0
        case GTK_POS_BOTTOM:
Packit 9982d0
          if (event->delta_x > 0)
Packit 9982d0
            gtk_notebook_next_page (notebook);
Packit 9982d0
          else if (event->delta_x < 0)
Packit 9982d0
            gtk_notebook_prev_page (notebook);
Packit 9982d0
          break;
Packit 9982d0
      }
Packit 9982d0
      return TRUE;
Packit 9982d0
  }
Packit 9982d0
Packit 9982d0
  return FALSE;
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
Packit 9982d0
static gboolean
Packit 9982d0
s_to_rgba (GValue *value,
Packit 9982d0
           GVariant *variant,
Packit 9982d0
           gpointer user_data)
Packit 9982d0
{
Packit 9982d0
  const char *s;
Packit 9982d0
  GdkRGBA color;
Packit 9982d0
Packit 9982d0
  g_variant_get (variant, "&s", &s);
Packit 9982d0
  if (!gdk_rgba_parse (&color, s))
Packit 9982d0
    return FALSE;
Packit 9982d0
Packit 9982d0
  color.alpha = 1.0;
Packit 9982d0
  g_value_set_boxed (value, &color;;
Packit 9982d0
  return TRUE;
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static GVariant *
Packit 9982d0
rgba_to_s (const GValue *value,
Packit 9982d0
           const GVariantType *expected_type,
Packit 9982d0
           gpointer user_data)
Packit 9982d0
{
Packit 9982d0
  GdkRGBA *color;
Packit 9982d0
  gs_free char *s = NULL;
Packit 9982d0
Packit 9982d0
  color = g_value_get_boxed (value);
Packit 9982d0
  if (color == NULL)
Packit 9982d0
    return NULL;
Packit 9982d0
Packit 9982d0
  s = gdk_rgba_to_string (color);
Packit 9982d0
  return g_variant_new_string (s);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static gboolean
Packit 9982d0
string_to_enum (GValue *value,
Packit 9982d0
                GVariant *variant,
Packit 9982d0
                gpointer user_data)
Packit 9982d0
{
Packit 9982d0
  GType (* get_type) (void) = user_data;
Packit 9982d0
  GEnumClass *klass;
Packit 9982d0
  GEnumValue *eval = NULL;
Packit 9982d0
  const char *s;
Packit 9982d0
  guint i;
Packit 9982d0
Packit 9982d0
  g_variant_get (variant, "&s", &s);
Packit 9982d0
Packit 9982d0
  klass = g_type_class_ref (get_type ());
Packit 9982d0
  for (i = 0; i < klass->n_values; ++i) {
Packit 9982d0
    if (strcmp (klass->values[i].value_nick, s) != 0)
Packit 9982d0
      continue;
Packit 9982d0
Packit 9982d0
    eval = &klass->values[i];
Packit 9982d0
    break;
Packit 9982d0
  }
Packit 9982d0
Packit 9982d0
  if (eval)
Packit 9982d0
    g_value_set_int (value, eval->value);
Packit 9982d0
Packit 9982d0
  g_type_class_unref (klass);
Packit 9982d0
Packit 9982d0
  return eval != NULL;
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static GVariant *
Packit 9982d0
enum_to_string (const GValue *value,
Packit 9982d0
                const GVariantType *expected_type,
Packit 9982d0
                gpointer user_data)
Packit 9982d0
{
Packit 9982d0
  GType (* get_type) (void) = user_data;
Packit 9982d0
  GEnumClass *klass;
Packit 9982d0
  GEnumValue *eval = NULL;
Packit 9982d0
  int val;
Packit 9982d0
  guint i;
Packit 9982d0
  GVariant *variant = NULL;
Packit 9982d0
Packit 9982d0
  val = g_value_get_int (value);
Packit 9982d0
Packit 9982d0
  klass = g_type_class_ref (get_type ());
Packit 9982d0
  for (i = 0; i < klass->n_values; ++i) {
Packit 9982d0
    if (klass->values[i].value != val)
Packit 9982d0
      continue;
Packit 9982d0
Packit 9982d0
    eval = &klass->values[i];
Packit 9982d0
    break;
Packit 9982d0
  }
Packit 9982d0
Packit 9982d0
  if (eval)
Packit 9982d0
    variant = g_variant_new_string (eval->value_nick);
Packit 9982d0
Packit 9982d0
  g_type_class_unref (klass);
Packit 9982d0
Packit 9982d0
  return variant;
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static gboolean
Packit 9982d0
scrollbar_policy_to_bool (GValue *value,
Packit 9982d0
                          GVariant *variant,
Packit 9982d0
                          gpointer user_data)
Packit 9982d0
{
Packit 9982d0
  const char *str;
Packit 9982d0
Packit 9982d0
  g_variant_get (variant, "&s", &str);
Packit 9982d0
  g_value_set_boolean (value, g_str_equal (str, "always"));
Packit 9982d0
Packit 9982d0
  return TRUE;
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static GVariant *
Packit 9982d0
bool_to_scrollbar_policy (const GValue *value,
Packit 9982d0
                          const GVariantType *expected_type,
Packit 9982d0
                          gpointer user_data)
Packit 9982d0
{
Packit 9982d0
  return g_variant_new_string (g_value_get_boolean (value) ? "always" : "never");
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
#if !GTK_CHECK_VERSION (3, 19, 8)
Packit 9982d0
Packit 9982d0
/* ATTENTION: HACK HACK HACK!
Packit 9982d0
 * GtkColorButton usability is broken. It always pops up the
Packit 9982d0
 * GtkColorChooserDialog with show-editor=FALSE, which brings
Packit 9982d0
 * up the dialogue in palette mode, when all we want is pick
Packit 9982d0
 * a colour. Since there is no way to get to the colour
Packit 9982d0
 * dialogue of the button, and the dialogue always sets
Packit 9982d0
 * show-editor=FALSE in its map anyway, we need to override
Packit 9982d0
 * the map implementation, set show-editor=TRUE and chain to
Packit 9982d0
 * the parent's map. This is reasonably safe to do since that's
Packit 9982d0
 * all the map functiondoes, and we can change this for _all_
Packit 9982d0
 * colour chooser buttons, since they are used only in our
Packit 9982d0
 * profile preferences dialogue.
Packit 9982d0
 */
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
fixup_color_chooser_dialog_map (GtkWidget *widget)
Packit 9982d0
{
Packit 9982d0
  g_object_set (GTK_COLOR_CHOOSER_DIALOG (widget), "show-editor", TRUE, NULL);
Packit 9982d0
Packit 9982d0
  GTK_WIDGET_CLASS (g_type_class_peek_parent (GTK_COLOR_CHOOSER_DIALOG_GET_CLASS (widget)))->map (widget);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
static void
Packit 9982d0
fixup_color_chooser_button (void)
Packit 9982d0
{
Packit 9982d0
  static gboolean done = FALSE;
Packit 9982d0
Packit 9982d0
  if (!done) {
Packit 9982d0
    GtkColorChooserDialogClass *klass;
Packit 9982d0
    klass = g_type_class_ref (GTK_TYPE_COLOR_CHOOSER_DIALOG);
Packit 9982d0
    g_assert (klass != NULL);
Packit 9982d0
    GTK_WIDGET_CLASS (klass)->map = fixup_color_chooser_dialog_map;
Packit 9982d0
    g_type_class_unref (klass);
Packit 9982d0
    done = TRUE;
Packit 9982d0
  }
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
#endif /* GTK+ < 3.19.8 HACK */
Packit 9982d0
Packit 9982d0
static gboolean
Packit 9982d0
monospace_filter (const PangoFontFamily *family,
Packit 9982d0
                  const PangoFontFace   *face,
Packit 9982d0
                  gpointer data)
Packit 9982d0
{
Packit 9982d0
  return pango_font_family_is_monospace ((PangoFontFamily *) family);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
/* Called once per Preferences window, to initialize stuff that doesn't depend on the profile being edited */
Packit 9982d0
void
Packit 9982d0
profile_prefs_init (void)
Packit 9982d0
{
Packit 9982d0
  GtkWidget *w;
Packit 9982d0
  GtkBuilder *builder = the_pref_data->builder;
Packit 9982d0
  char *text;
Packit 9982d0
Packit 9982d0
  the_pref_data->profile_signals = g_array_new (FALSE, FALSE, sizeof (ProfilePrefsSignal));
Packit 9982d0
  the_pref_data->profile_bindings = g_array_new (FALSE, FALSE, sizeof (ProfilePrefsBinding));
Packit 9982d0
Packit 9982d0
#if !GTK_CHECK_VERSION (3, 19, 8)
Packit 9982d0
  fixup_color_chooser_button ();
Packit 9982d0
#endif
Packit 9982d0
Packit 9982d0
  w = (GtkWidget *) gtk_builder_get_object (builder, "profile-editor-notebook");
Packit 9982d0
  gtk_widget_add_events (w, GDK_BUTTON_PRESS_MASK | GDK_SCROLL_MASK);
Packit 9982d0
  g_signal_connect (w, "scroll-event", G_CALLBACK (scroll_event_cb), NULL);
Packit 9982d0
Packit 9982d0
  w = (GtkWidget *) gtk_builder_get_object (builder, "color-scheme-combobox");
Packit 9982d0
  init_color_scheme_menu (w);
Packit 9982d0
Packit 9982d0
  w = (GtkWidget *) gtk_builder_get_object (builder, "encoding-combobox");
Packit 9982d0
  init_encodings_combo (w);
Packit 9982d0
Packit 9982d0
  /* Translators: Appears as: [numeric entry] × width */
Packit 9982d0
  text = g_strdup_printf ("× %s", _("width"));
Packit 9982d0
  gtk_label_set_text ((GtkLabel *) gtk_builder_get_object (builder, "cell-width-scale-label"),
Packit 9982d0
                      text);
Packit 9982d0
  g_free (text);
Packit 9982d0
  /* Translators: Appears as: [numeric entry] × height */
Packit 9982d0
  text = g_strdup_printf ("× %s", _("height"));
Packit 9982d0
  gtk_label_set_text ((GtkLabel *) gtk_builder_get_object (builder, "cell-height-scale-label"),
Packit 9982d0
                      text);
Packit 9982d0
  g_free (text);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
/* Called each time the user switches away from a profile, so it's no longer being edited */
Packit 9982d0
void
Packit 9982d0
profile_prefs_unload (void)
Packit 9982d0
{
Packit 9982d0
  profile_prefs_signal_handlers_disconnect_all ();
Packit 9982d0
  profile_prefs_settings_unbind_all ();
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
/* Called each time the user selects a new profile to edit */
Packit 9982d0
void
Packit 9982d0
profile_prefs_load (const char *uuid, GSettings *profile)
Packit 9982d0
{
Packit 9982d0
  GtkWidget *w;
Packit 9982d0
  GtkBuilder *builder = the_pref_data->builder;
Packit 9982d0
  guint i;
Packit 9982d0
Packit 9982d0
  profile_prefs_unload ();
Packit 9982d0
Packit 9982d0
  gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (builder, "profile-uuid")),
Packit 9982d0
                      uuid);
Packit 9982d0
Packit 9982d0
  profile_prefs_signal_connect (gtk_builder_get_object (builder, "default-size-reset-button"),
Packit 9982d0
                                "clicked",
Packit 9982d0
                                G_CALLBACK (default_size_reset_cb),
Packit 9982d0
                                profile);
Packit 9982d0
  profile_prefs_signal_connect (gtk_builder_get_object (builder, "cell-scale-reset-button"),
Packit 9982d0
                                "clicked",
Packit 9982d0
                                G_CALLBACK (cell_scale_reset_cb),
Packit 9982d0
                                profile);
Packit 9982d0
Packit 9982d0
  /* Hook up the palette colorpickers and combo box */
Packit 9982d0
Packit 9982d0
  for (i = 0; i < TERMINAL_PALETTE_SIZE; ++i)
Packit 9982d0
    {
Packit 9982d0
      char name[32];
Packit 9982d0
      char *text;
Packit 9982d0
Packit 9982d0
      g_snprintf (name, sizeof (name), "palette-colorpicker-%u", i);
Packit 9982d0
      w = (GtkWidget *) gtk_builder_get_object (builder, name);
Packit 9982d0
Packit 9982d0
#if GTK_CHECK_VERSION (3, 19, 8)
Packit 9982d0
      g_object_set (w, "show-editor", TRUE, NULL);
Packit 9982d0
#endif
Packit 9982d0
Packit 9982d0
      g_object_set_data (G_OBJECT (w), "palette-entry-index", GUINT_TO_POINTER (i));
Packit 9982d0
Packit 9982d0
      text = g_strdup_printf (_("Choose Palette Color %u"), i);
Packit 9982d0
      gtk_color_button_set_title (GTK_COLOR_BUTTON (w), text);
Packit 9982d0
      g_free (text);
Packit 9982d0
Packit 9982d0
      text = g_strdup_printf (_("Palette entry %u"), i);
Packit 9982d0
      gtk_widget_set_tooltip_text (w, text);
Packit 9982d0
      g_free (text);
Packit 9982d0
Packit 9982d0
      profile_prefs_signal_connect (w, "notify::rgba",
Packit 9982d0
                                    G_CALLBACK (palette_color_notify_cb),
Packit 9982d0
                                    profile);
Packit 9982d0
    }
Packit 9982d0
Packit 9982d0
  profile_palette_notify_colorpickers_cb (profile, TERMINAL_PROFILE_PALETTE_KEY, NULL);
Packit 9982d0
  profile_prefs_signal_connect (profile, "changed::" TERMINAL_PROFILE_PALETTE_KEY,
Packit 9982d0
                                G_CALLBACK (profile_palette_notify_colorpickers_cb),
Packit 9982d0
                                NULL);
Packit 9982d0
Packit 9982d0
  w = (GtkWidget *) gtk_builder_get_object (builder, "palette-combobox");
Packit 9982d0
  profile_prefs_signal_connect (w, "notify::active",
Packit 9982d0
                                G_CALLBACK (palette_scheme_combo_changed_cb),
Packit 9982d0
                                profile);
Packit 9982d0
Packit 9982d0
  profile_palette_notify_scheme_combo_cb (profile, TERMINAL_PROFILE_PALETTE_KEY, GTK_COMBO_BOX (w));
Packit 9982d0
  profile_prefs_signal_connect (profile, "changed::" TERMINAL_PROFILE_PALETTE_KEY,
Packit 9982d0
                                G_CALLBACK (profile_palette_notify_scheme_combo_cb),
Packit 9982d0
                                w);
Packit 9982d0
Packit 9982d0
  /* Hook up the color scheme pickers and combo box */
Packit 9982d0
  w = (GtkWidget *) gtk_builder_get_object (builder, "color-scheme-combobox");
Packit 9982d0
  profile_prefs_signal_connect (w, "notify::active",
Packit 9982d0
                                G_CALLBACK (color_scheme_combo_changed_cb),
Packit 9982d0
                                profile);
Packit 9982d0
Packit 9982d0
  profile_colors_notify_scheme_combo_cb (profile, NULL, GTK_COMBO_BOX (w));
Packit 9982d0
  profile_prefs_signal_connect (profile, "changed::" TERMINAL_PROFILE_FOREGROUND_COLOR_KEY,
Packit 9982d0
                                G_CALLBACK (profile_colors_notify_scheme_combo_cb),
Packit 9982d0
                                w);
Packit 9982d0
  profile_prefs_signal_connect (profile, "changed::" TERMINAL_PROFILE_BACKGROUND_COLOR_KEY,
Packit 9982d0
                                G_CALLBACK (profile_colors_notify_scheme_combo_cb),
Packit 9982d0
                                w);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "custom-command-entry"));
Packit 9982d0
  custom_command_entry_changed_cb (GTK_ENTRY (w));
Packit 9982d0
  profile_prefs_signal_connect (w, "changed",
Packit 9982d0
                                G_CALLBACK (custom_command_entry_changed_cb), NULL);
Packit 9982d0
Packit 9982d0
  profile_prefs_signal_connect (gtk_builder_get_object (builder, "reset-compat-defaults-button"),
Packit 9982d0
                                "clicked",
Packit 9982d0
                                G_CALLBACK (reset_compat_defaults_cb),
Packit 9982d0
                                profile);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "background-colorpicker"));
Packit 9982d0
#if GTK_CHECK_VERSION (3, 19, 8)
Packit 9982d0
  g_object_set (w, "show-editor", TRUE, NULL);
Packit 9982d0
#endif
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile,
Packit 9982d0
                                            TERMINAL_PROFILE_BACKGROUND_COLOR_KEY,
Packit 9982d0
                                            w,
Packit 9982d0
                                            "rgba",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET,
Packit 9982d0
                                            (GSettingsBindGetMapping) s_to_rgba,
Packit 9982d0
                                            (GSettingsBindSetMapping) rgba_to_s,
Packit 9982d0
                                            NULL, NULL);
Packit 9982d0
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile,
Packit 9982d0
                                            TERMINAL_PROFILE_BACKSPACE_BINDING_KEY,
Packit 9982d0
                                            gtk_builder_get_object (builder,
Packit 9982d0
                                                                    "backspace-binding-combobox"),
Packit 9982d0
                                            "active",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET,
Packit 9982d0
                                            (GSettingsBindGetMapping) string_to_enum,
Packit 9982d0
                                            (GSettingsBindSetMapping) enum_to_string,
Packit 9982d0
                                            vte_erase_binding_get_type, NULL);
Packit 9982d0
  profile_prefs_settings_bind (profile,
Packit 9982d0
                               TERMINAL_PROFILE_BOLD_IS_BRIGHT_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder, "bold-is-bright-checkbutton"),
Packit 9982d0
                               "active", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder,
Packit 9982d0
                                                       "bold-color-checkbutton"),
Packit 9982d0
                               "active",
Packit 9982d0
                               G_SETTINGS_BIND_GET |
Packit 9982d0
                               G_SETTINGS_BIND_INVERT_BOOLEAN |
Packit 9982d0
                               G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "bold-colorpicker"));
Packit 9982d0
#if GTK_CHECK_VERSION (3, 19, 8)
Packit 9982d0
  g_object_set (w, "show-editor", TRUE, NULL);
Packit 9982d0
#endif
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG_KEY,
Packit 9982d0
                               w,
Packit 9982d0
                               "sensitive",
Packit 9982d0
                               G_SETTINGS_BIND_GET |
Packit 9982d0
                               G_SETTINGS_BIND_INVERT_BOOLEAN |
Packit 9982d0
                               G_SETTINGS_BIND_NO_SENSITIVITY);
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile, TERMINAL_PROFILE_BOLD_COLOR_KEY,
Packit 9982d0
                                            w,
Packit 9982d0
                                            "rgba",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET | G_SETTINGS_BIND_NO_SENSITIVITY,
Packit 9982d0
                                            (GSettingsBindGetMapping) s_to_rgba,
Packit 9982d0
                                            (GSettingsBindSetMapping) rgba_to_s,
Packit 9982d0
                                            NULL, NULL);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "cell-height-scale-spinbutton"));
Packit 9982d0
  set_input_hints (w);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_CELL_HEIGHT_SCALE_KEY,
Packit 9982d0
                               gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (w)),
Packit 9982d0
                               "value", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "cell-width-scale-spinbutton"));
Packit 9982d0
  set_input_hints (w);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_CELL_WIDTH_SCALE_KEY,
Packit 9982d0
                               gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (w)),
Packit 9982d0
                               "value", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_CURSOR_COLORS_SET_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder,
Packit 9982d0
                                                       "cursor-colors-checkbutton"),
Packit 9982d0
                               "active", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "cursor-foreground-colorpicker"));
Packit 9982d0
#if GTK_CHECK_VERSION (3, 19, 8)
Packit 9982d0
  g_object_set (w, "show-editor", TRUE, NULL);
Packit 9982d0
#endif
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_CURSOR_COLORS_SET_KEY,
Packit 9982d0
                               w,
Packit 9982d0
                               "sensitive",
Packit 9982d0
                               G_SETTINGS_BIND_GET |
Packit 9982d0
                               G_SETTINGS_BIND_NO_SENSITIVITY);
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile, TERMINAL_PROFILE_CURSOR_FOREGROUND_COLOR_KEY,
Packit 9982d0
                                            w,
Packit 9982d0
                                            "rgba",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET | G_SETTINGS_BIND_NO_SENSITIVITY,
Packit 9982d0
                                            (GSettingsBindGetMapping) s_to_rgba,
Packit 9982d0
                                            (GSettingsBindSetMapping) rgba_to_s,
Packit 9982d0
                                            NULL, NULL);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "cursor-background-colorpicker"));
Packit 9982d0
#if GTK_CHECK_VERSION (3, 19, 8)
Packit 9982d0
  g_object_set (w, "show-editor", TRUE, NULL);
Packit 9982d0
#endif
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_CURSOR_COLORS_SET_KEY,
Packit 9982d0
                               w,
Packit 9982d0
                               "sensitive",
Packit 9982d0
                               G_SETTINGS_BIND_GET |
Packit 9982d0
                               G_SETTINGS_BIND_NO_SENSITIVITY);
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile, TERMINAL_PROFILE_CURSOR_BACKGROUND_COLOR_KEY,
Packit 9982d0
                                            w,
Packit 9982d0
                                            "rgba",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET | G_SETTINGS_BIND_NO_SENSITIVITY,
Packit 9982d0
                                            (GSettingsBindGetMapping) s_to_rgba,
Packit 9982d0
                                            (GSettingsBindSetMapping) rgba_to_s,
Packit 9982d0
                                            NULL, NULL);
Packit 9982d0
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_HIGHLIGHT_COLORS_SET_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder,
Packit 9982d0
                                                       "highlight-colors-checkbutton"),
Packit 9982d0
                               "active", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "highlight-foreground-colorpicker"));
Packit 9982d0
#if GTK_CHECK_VERSION (3, 19, 8)
Packit 9982d0
  g_object_set (w, "show-editor", TRUE, NULL);
Packit 9982d0
#endif
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_HIGHLIGHT_COLORS_SET_KEY,
Packit 9982d0
                               w,
Packit 9982d0
                               "sensitive",
Packit 9982d0
                               G_SETTINGS_BIND_GET |
Packit 9982d0
                               G_SETTINGS_BIND_NO_SENSITIVITY);
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile, TERMINAL_PROFILE_HIGHLIGHT_FOREGROUND_COLOR_KEY,
Packit 9982d0
                                            w,
Packit 9982d0
                                            "rgba",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET | G_SETTINGS_BIND_NO_SENSITIVITY,
Packit 9982d0
                                            (GSettingsBindGetMapping) s_to_rgba,
Packit 9982d0
                                            (GSettingsBindSetMapping) rgba_to_s,
Packit 9982d0
                                            NULL, NULL);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "highlight-background-colorpicker"));
Packit 9982d0
#if GTK_CHECK_VERSION (3, 19, 8)
Packit 9982d0
  g_object_set (w, "show-editor", TRUE, NULL);
Packit 9982d0
#endif
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_HIGHLIGHT_COLORS_SET_KEY,
Packit 9982d0
                               w,
Packit 9982d0
                               "sensitive",
Packit 9982d0
                               G_SETTINGS_BIND_GET |
Packit 9982d0
                               G_SETTINGS_BIND_NO_SENSITIVITY);
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile, TERMINAL_PROFILE_HIGHLIGHT_BACKGROUND_COLOR_KEY,
Packit 9982d0
                                            w,
Packit 9982d0
                                            "rgba",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET | G_SETTINGS_BIND_NO_SENSITIVITY,
Packit 9982d0
                                            (GSettingsBindGetMapping) s_to_rgba,
Packit 9982d0
                                            (GSettingsBindSetMapping) rgba_to_s,
Packit 9982d0
                                            NULL, NULL);
Packit 9982d0
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile, TERMINAL_PROFILE_CURSOR_SHAPE_KEY,
Packit 9982d0
                                            gtk_builder_get_object (builder,
Packit 9982d0
                                                                    "cursor-shape-combobox"),
Packit 9982d0
                                            "active",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET,
Packit 9982d0
                                            (GSettingsBindGetMapping) string_to_enum,
Packit 9982d0
                                            (GSettingsBindSetMapping) enum_to_string,
Packit 9982d0
                                            vte_cursor_shape_get_type, NULL);
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile, TERMINAL_PROFILE_CURSOR_BLINK_MODE_KEY,
Packit 9982d0
                                            gtk_builder_get_object (builder,
Packit 9982d0
                                                                    "cursor-blink-mode-combobox"),
Packit 9982d0
                                            "active",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET,
Packit 9982d0
                                            (GSettingsBindGetMapping) string_to_enum,
Packit 9982d0
                                            (GSettingsBindSetMapping) enum_to_string,
Packit 9982d0
                                            vte_cursor_blink_mode_get_type, NULL);
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile, TERMINAL_PROFILE_TEXT_BLINK_MODE_KEY,
Packit 9982d0
                                            gtk_builder_get_object (builder,
Packit 9982d0
                                                                    "text-blink-mode-combobox"),
Packit 9982d0
                                            "active",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET,
Packit 9982d0
                                            (GSettingsBindGetMapping) string_to_enum,
Packit 9982d0
                                            (GSettingsBindSetMapping) enum_to_string,
Packit 9982d0
                                            vte_text_blink_mode_get_type, NULL);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "custom-command-entry"));
Packit 9982d0
  set_input_hints (w);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_CUSTOM_COMMAND_KEY,
Packit 9982d0
                               w,
Packit 9982d0
                               "text", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "default-size-columns-spinbutton"));
Packit 9982d0
  set_input_hints (w);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_DEFAULT_SIZE_COLUMNS_KEY,
Packit 9982d0
                               gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (w)),
Packit 9982d0
                               "value", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "default-size-rows-spinbutton"));
Packit 9982d0
  set_input_hints (w);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_DEFAULT_SIZE_ROWS_KEY,
Packit 9982d0
                               gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (w)),
Packit 9982d0
                               "value", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile, TERMINAL_PROFILE_DELETE_BINDING_KEY,
Packit 9982d0
                                            gtk_builder_get_object (builder,
Packit 9982d0
                                                                    "delete-binding-combobox"),
Packit 9982d0
                                            "active",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET,
Packit 9982d0
                                            (GSettingsBindGetMapping) string_to_enum,
Packit 9982d0
                                            (GSettingsBindSetMapping) enum_to_string,
Packit 9982d0
                                            vte_erase_binding_get_type, NULL);
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile, TERMINAL_PROFILE_EXIT_ACTION_KEY,
Packit 9982d0
                                            gtk_builder_get_object (builder,
Packit 9982d0
                                                                    "exit-action-combobox"),
Packit 9982d0
                                            "active",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET,
Packit 9982d0
                                            (GSettingsBindGetMapping) string_to_enum,
Packit 9982d0
                                            (GSettingsBindSetMapping) enum_to_string,
Packit 9982d0
                                            terminal_exit_action_get_type, NULL);
Packit 9982d0
  w = (GtkWidget*) gtk_builder_get_object (builder, "font-selector");
Packit 9982d0
  gtk_font_chooser_set_filter_func (GTK_FONT_CHOOSER (w), monospace_filter, NULL, NULL);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_FONT_KEY,
Packit 9982d0
                               w,
Packit 9982d0
                               "font-name", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "foreground-colorpicker"));
Packit 9982d0
#if GTK_CHECK_VERSION (3, 19, 8)
Packit 9982d0
      g_object_set (w, "show-editor", TRUE, NULL);
Packit 9982d0
#endif
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile,
Packit 9982d0
                                            TERMINAL_PROFILE_FOREGROUND_COLOR_KEY,
Packit 9982d0
                                            w,
Packit 9982d0
                                            "rgba",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET,
Packit 9982d0
                                            (GSettingsBindGetMapping) s_to_rgba,
Packit 9982d0
                                            (GSettingsBindSetMapping) rgba_to_s,
Packit 9982d0
                                            NULL, NULL);
Packit 9982d0
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_LOGIN_SHELL_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder,
Packit 9982d0
                                                       "login-shell-checkbutton"),
Packit 9982d0
                               "active", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  w = GTK_WIDGET (gtk_builder_get_object (builder, "scrollback-lines-spinbutton"));
Packit 9982d0
  set_input_hints (w);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_SCROLLBACK_LINES_KEY,
Packit 9982d0
                               gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (w)),
Packit 9982d0
                               "value", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_SCROLLBACK_UNLIMITED_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder,
Packit 9982d0
                                                       "scrollback-limited-checkbutton"),
Packit 9982d0
                               "active",
Packit 9982d0
                               G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET |
Packit 9982d0
                               G_SETTINGS_BIND_INVERT_BOOLEAN);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_SCROLLBACK_UNLIMITED_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder,
Packit 9982d0
                                                       "scrollback-box"),
Packit 9982d0
                               "sensitive",
Packit 9982d0
                               G_SETTINGS_BIND_GET |
Packit 9982d0
                               G_SETTINGS_BIND_INVERT_BOOLEAN |
Packit 9982d0
                               G_SETTINGS_BIND_NO_SENSITIVITY);
Packit 9982d0
  profile_prefs_settings_bind_with_mapping (profile,
Packit 9982d0
                                            TERMINAL_PROFILE_SCROLLBAR_POLICY_KEY,
Packit 9982d0
                                            gtk_builder_get_object (builder,
Packit 9982d0
                                                                    "scrollbar-checkbutton"),
Packit 9982d0
                                            "active",
Packit 9982d0
                                            G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET,
Packit 9982d0
                                            (GSettingsBindGetMapping) scrollbar_policy_to_bool,
Packit 9982d0
                                            (GSettingsBindSetMapping) bool_to_scrollbar_policy,
Packit 9982d0
                                            NULL, NULL);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder,
Packit 9982d0
                                                       "scroll-on-keystroke-checkbutton"),
Packit 9982d0
                               "active", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_SCROLL_ON_OUTPUT_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder,
Packit 9982d0
                                                       "scroll-on-output-checkbutton"),
Packit 9982d0
                               "active", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_USE_SYSTEM_FONT_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder,
Packit 9982d0
                                                       "custom-font-checkbutton"),
Packit 9982d0
                               "active",
Packit 9982d0
                               G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET |
Packit 9982d0
                               G_SETTINGS_BIND_INVERT_BOOLEAN);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_USE_CUSTOM_COMMAND_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder,
Packit 9982d0
                                                       "use-custom-command-checkbutton"),
Packit 9982d0
                               "active", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_USE_THEME_COLORS_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder,
Packit 9982d0
                                                       "use-theme-colors-checkbutton"),
Packit 9982d0
                               "active", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_AUDIBLE_BELL_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder, "bell-checkbutton"),
Packit 9982d0
                               "active",
Packit 9982d0
                               G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  profile_prefs_settings_bind (profile,
Packit 9982d0
                               TERMINAL_PROFILE_USE_CUSTOM_COMMAND_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder, "custom-command-entry-label"),
Packit 9982d0
                               "sensitive",
Packit 9982d0
                               G_SETTINGS_BIND_GET | G_SETTINGS_BIND_NO_SENSITIVITY);
Packit 9982d0
  profile_prefs_settings_bind (profile,
Packit 9982d0
                               TERMINAL_PROFILE_USE_CUSTOM_COMMAND_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder, "custom-command-entry"),
Packit 9982d0
                               "sensitive",
Packit 9982d0
                               G_SETTINGS_BIND_GET | G_SETTINGS_BIND_NO_SENSITIVITY);
Packit 9982d0
  profile_prefs_settings_bind (profile,
Packit 9982d0
                               TERMINAL_PROFILE_USE_SYSTEM_FONT_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder, "font-selector"),
Packit 9982d0
                               "sensitive",
Packit 9982d0
                               G_SETTINGS_BIND_GET | G_SETTINGS_BIND_INVERT_BOOLEAN |
Packit 9982d0
                               G_SETTINGS_BIND_NO_SENSITIVITY);
Packit 9982d0
  profile_prefs_settings_bind (profile,
Packit 9982d0
                               TERMINAL_PROFILE_USE_THEME_COLORS_KEY,
Packit 9982d0
                               gtk_builder_get_object (builder, "colors-box"),
Packit 9982d0
                               "sensitive",
Packit 9982d0
                               G_SETTINGS_BIND_GET | G_SETTINGS_BIND_INVERT_BOOLEAN |
Packit 9982d0
                               G_SETTINGS_BIND_NO_SENSITIVITY);
Packit 9982d0
  profile_prefs_settings_bind_writable (profile,
Packit 9982d0
                                        TERMINAL_PROFILE_PALETTE_KEY,
Packit 9982d0
                                        gtk_builder_get_object (builder, "palette-box"),
Packit 9982d0
                                        "sensitive",
Packit 9982d0
                                        FALSE);
Packit 9982d0
Packit 9982d0
  /* Compatibility options */
Packit 9982d0
  w = (GtkWidget *) gtk_builder_get_object (builder, "encoding-combobox");
Packit 9982d0
  profile_prefs_settings_bind (profile,
Packit 9982d0
                               TERMINAL_PROFILE_ENCODING_KEY,
Packit 9982d0
                               w,
Packit 9982d0
                               "active-id", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
Packit 9982d0
  w = (GtkWidget *) gtk_builder_get_object (builder, "cjk-ambiguous-width-combobox");
Packit 9982d0
  profile_prefs_settings_bind (profile, TERMINAL_PROFILE_CJK_UTF8_AMBIGUOUS_WIDTH_KEY,
Packit 9982d0
                               w,
Packit 9982d0
                               "active-id",
Packit 9982d0
                               G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
Packit 9982d0
}
Packit 9982d0
Packit 9982d0
/* Called once per Preferences window, to destroy stuff that doesn't depend on the profile being edited */
Packit 9982d0
void
Packit 9982d0
profile_prefs_destroy (void)
Packit 9982d0
{
Packit 9982d0
  profile_prefs_unload ();
Packit 9982d0
Packit 9982d0
  g_array_free (the_pref_data->profile_signals, TRUE);
Packit 9982d0
  g_array_free (the_pref_data->profile_bindings, TRUE);
Packit 9982d0
}