aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2017-11-11 14:21:02 +0100
committerGuido Günther <agx@sigxcpu.org>2017-11-11 14:21:02 +0100
commit808ce78d212c6b434d24066f1f2d44d3e76224ae (patch)
treed810e5fb8e698189ebe9af7f76c53aec0fba7e19 /src
parentNew upstream version 3.20.0 (diff)
downloadkrb5-auth-dialog-808ce78d212c6b434d24066f1f2d44d3e76224ae.tar.gz
krb5-auth-dialog-808ce78d212c6b434d24066f1f2d44d3e76224ae.tar.bz2
krb5-auth-dialog-808ce78d212c6b434d24066f1f2d44d3e76224ae.zip
New upstream version 3.26.0
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.in5
-rw-r--r--src/ka-applet.c20
-rw-r--r--src/ka-kerberos.c64
-rw-r--r--src/ka-main-window.c32
-rw-r--r--src/ka-pwdialog.c76
-rw-r--r--src/ka-tools.c5
-rw-r--r--src/ka-tools.h2
-rw-r--r--src/krb5-auth-dialog.1.in7
-rw-r--r--src/krb5-auth-dialog.appdata.xml.in21
-rw-r--r--src/resources.c288
-rw-r--r--src/resources/ui/ka-main-window.ui18
11 files changed, 306 insertions, 232 deletions
diff --git a/src/Makefile.in b/src/Makefile.in
index d90d281..44077b0 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -292,6 +292,7 @@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
ITSTOOL = @ITSTOOL@
KA_PLUGINS_DIR = @KA_PLUGINS_DIR@
KRB5_CFLAGS = @KRB5_CFLAGS@
diff --git a/src/ka-applet.c b/src/ka-applet.c
index 195f781..50e6b70 100644
--- a/src/ka-applet.c
+++ b/src/ka-applet.c
@@ -209,7 +209,7 @@ GtkWindow *ka_applet_last_focused_window (KaApplet *self)
static void
-action_remove_credentails_cache (GSimpleAction *action G_GNUC_UNUSED,
+action_remove_credentials_cache (GSimpleAction *action G_GNUC_UNUSED,
GVariant *parameter G_GNUC_UNUSED,
gpointer userdata)
{
@@ -255,7 +255,7 @@ action_help (GSimpleAction *action G_GNUC_UNUSED,
KaApplet *self = KA_APPLET(userdata);
GtkWindow *window = ka_applet_last_focused_window (self);
- ka_show_help (gtk_window_get_screen (window), NULL, NULL);
+ ka_show_help (window, NULL);
}
static void
@@ -360,13 +360,17 @@ static void
ka_applet_startup (GApplication *application)
{
KaApplet *self = KA_APPLET (application);
+ GtkWindow *main_window;
KA_DEBUG ("Primary application");
G_APPLICATION_CLASS (ka_applet_parent_class)->startup (application);
self->priv->startup_ccache = ka_kerberos_init (self);
- ka_main_window_create (self);
+ main_window = GTK_WINDOW(ka_main_window_create (self));
+ gtk_window_set_transient_for(GTK_WINDOW(self->priv->pwdialog),
+ main_window);
+
self->priv->prefs = ka_preferences_new (self);
ka_applet_app_menu_create(self);
@@ -649,8 +653,8 @@ ka_applet_tooltip_text (int remaining)
if (remaining >= 3600) {
hours = remaining / 3600;
minutes = (remaining % 3600) / 60;
- /* Translators: First number is hours, second number is minutes */
tooltip_text =
+ /* Translators: First number is hours, second number is minutes */
g_strdup_printf (_("Your credentials expire in %.2d:%.2dh"),
hours, minutes);
} else {
@@ -983,7 +987,7 @@ ka_applet_update_status (KaApplet *applet, krb5_timestamp expiry)
static GActionEntry trayicon_entries[] = {
- { "remove_credentials_cache", action_remove_credentails_cache, NULL, NULL, NULL, {0} },
+ { "remove_credentials_cache", action_remove_credentials_cache, NULL, NULL, NULL, {0} },
{ "list_tickets", action_list_tickets, NULL, NULL, NULL, {0} },
{ "preferences", action_preferences, NULL, NULL, NULL, {0} },
{ "about", action_about, NULL, NULL, NULL, {0} },
@@ -1195,8 +1199,10 @@ ka_applet_destroy (KaApplet* self)
gtk_widget_destroy (GTK_WIDGET(self->priv->prefs));
self->priv->prefs = NULL;
- gtk_widget_destroy (GTK_WIDGET(self->priv->context_menu));
- self->priv->context_menu = NULL;
+ if (self->priv->context_menu) {
+ gtk_widget_destroy (GTK_WIDGET(self->priv->context_menu));
+ self->priv->context_menu = NULL;
+ }
ka_kerberos_destroy ();
}
diff --git a/src/ka-kerberos.c b/src/ka-kerberos.c
index 14fb03e..6526a72 100644
--- a/src/ka-kerberos.c
+++ b/src/ka-kerberos.c
@@ -41,11 +41,7 @@
#include "ka-main-window.h"
#ifdef ENABLE_NETWORK_MANAGER
-#include <nm-client.h>
-
-#if !defined(NM_CHECK_VERSION)
-#define NM_CHECK_VERSION(x,y,z) 0
-#endif
+# include <NetworkManager.h>
#endif
#ifdef HAVE_HX509_ERR_H
@@ -222,6 +218,9 @@ credentials_expiring_real (KaApplet *applet)
krb5_timestamp now;
gboolean retval = FALSE;
+ if (!kcontext_valid)
+ return retval;
+
memset (&my_creds, 0, sizeof (my_creds));
ka_applet_set_tgt_renewable (applet, FALSE);
if (!ka_get_tgt_from_ccache (kcontext, &my_creds)) {
@@ -318,22 +317,22 @@ ka_get_service_tickets (GtkListStore * tickets, gboolean hide_conf_tickets)
g_return_val_if_fail (!ret, FALSE);
ret = krb5_cc_start_seq_get (kcontext, ccache, &cursor);
- if (ret) {
+ if (ret == KRB5_FCC_NOFILE) {
ka_log_error_message_at_level (G_LOG_LEVEL_INFO, "krb5_cc_start_seq_get", kcontext, ret);
- /* if the file doesn't exist, it's not an error if we can't
- * parse it */
- if (!g_file_test (ka_ccache_filename (), G_FILE_TEST_EXISTS))
- gtk_list_store_append (tickets, &iter);
- gtk_list_store_set (tickets, &iter,
- PRINCIPAL_COLUMN, _("Your ticket cache is currently empty"),
- FORWARDABLE_COLUMN, FALSE,
- RENEWABLE_COLUMN, FALSE,
- PROXIABLE_COLUMN, FALSE, -1);
- retval = TRUE;
+ gtk_list_store_append (tickets, &iter);
+ gtk_list_store_set (tickets, &iter,
+ PRINCIPAL_COLUMN, _("Your ticket cache is currently empty"),
+ FORWARDABLE_COLUMN, FALSE,
+ RENEWABLE_COLUMN, FALSE,
+ PROXIABLE_COLUMN, FALSE, -1);
+ retval = TRUE;
+ goto out;
+ } else if (ret) {
goto out;
}
+
while ((ret = krb5_cc_next_cred (kcontext, ccache, &cursor, &creds)) == 0) {
gboolean renewable, proxiable, forwardable;
@@ -467,7 +466,7 @@ auth_dialog_prompter (krb5_context ctx G_GNUC_UNUSED,
goto cleanup;
if (password_len + 1 > prompts[i].reply->length) {
g_warning ("Password too long %d/%zd", password_len + 1,
- prompts[i].reply->length);
+ (size_t)prompts[i].reply->length);
goto cleanup;
}
@@ -500,20 +499,14 @@ ka_nm_client_state_changed_cb (NMClient * client,
KA_DEBUG ("Network state: %d", state);
/* do nothing */
break;
-#if NM_CHECK_VERSION(0,8,992)
case NM_STATE_DISCONNECTING:
-#endif
case NM_STATE_DISCONNECTED:
KA_DEBUG ("Network disconnected");
*online = FALSE;
break;
-#if NM_CHECK_VERSION(0,8,992)
case NM_STATE_CONNECTED_LOCAL:
case NM_STATE_CONNECTED_SITE:
case NM_STATE_CONNECTED_GLOBAL:
-#else
- case NM_STATE_CONNECTED:
-#endif
KA_DEBUG ("Network connected");
*online = TRUE;
break;
@@ -529,7 +522,7 @@ credentials_expiring (gpointer *data)
KA_DEBUG ("Checking expiry <%ds", ka_applet_get_pw_prompt_secs (applet));
if (credentials_expiring_real (applet) && is_online) {
- KA_DEBUG ("Expiry @ %ld", creds_expiry);
+ KA_DEBUG ("Expiry @ %ld", (long int)creds_expiry);
if (!ka_renew_credentials (applet))
KA_DEBUG ("Credentials renewed");
@@ -947,8 +940,8 @@ static gboolean
ka_krb5_context_free ()
{
if (kcontext_valid) {
- krb5_free_context (kcontext);
kcontext_valid = FALSE;
+ krb5_free_context (kcontext);
}
return TRUE;
}
@@ -1093,16 +1086,19 @@ static gboolean
ka_nm_init (void)
{
#ifdef ENABLE_NETWORK_MANAGER
- nm_client = nm_client_new ();
+ GError *error = NULL;
+
+ nm_client = nm_client_new (NULL, &error);
if (!nm_client) {
- g_warning ("Could not initialize nm-client");
- } else {
- g_signal_connect (nm_client, "notify::state",
- G_CALLBACK (ka_nm_client_state_changed_cb),
- &is_online);
- /* Set initial state */
- ka_nm_client_state_changed_cb (nm_client, NULL, &is_online);
+ g_warning ("Could not initialize nm-client: %s", error->message);
+ g_error_free (error);
+ return FALSE;
}
+ g_signal_connect (nm_client, "notify::state",
+ G_CALLBACK (ka_nm_client_state_changed_cb),
+ &is_online);
+ /* Set initial state */
+ ka_nm_client_state_changed_cb (nm_client, NULL, &is_online);
#endif /* ENABLE_NETWORK_MANAGER */
return TRUE;
}
@@ -1114,7 +1110,7 @@ ka_kerberos_init (KaApplet *applet)
gboolean ret;
ka_secmem_init ();
- ret = ka_krb5_context_init (applet);
+ ret = ka_krb5_context_init ();
ka_nm_init ();
g_timeout_add_seconds (CREDENTIAL_CHECK_INTERVAL,
(GSourceFunc) credentials_expiring, applet);
diff --git a/src/ka-main-window.c b/src/ka-main-window.c
index 21b1dbc..1509b20 100644
--- a/src/ka-main-window.c
+++ b/src/ka-main-window.c
@@ -30,6 +30,7 @@
#include "ka-preferences.h"
static GtkListStore *tickets;
+static GtkButton *ticket_btn;
static GtkApplicationWindow *main_window;
static void
@@ -44,6 +45,26 @@ ccache_changed_cb (KaApplet* applet,
}
+static void
+enable_ticket_button_cb (gpointer* applet G_GNUC_UNUSED,
+ gchar *princ G_GNUC_UNUSED,
+ guint when G_GNUC_UNUSED,
+ gpointer user_data)
+{
+ gboolean enable = GPOINTER_TO_UINT(user_data);
+ KA_DEBUG ("Sensitive: %u", enable);
+ gtk_widget_set_sensitive(GTK_WIDGET(ticket_btn), enable);
+}
+
+
+static void
+ticket_btn_clicked(GtkButton* btn G_GNUC_UNUSED, gpointer user_data)
+{
+ KaApplet *applet = KA_APPLET(user_data);
+ ka_grab_credentials (applet);
+}
+
+
GtkApplicationWindow *
ka_main_window_create (KaApplet *applet)
{
@@ -117,6 +138,17 @@ ka_main_window_create (KaApplet *applet)
G_CALLBACK(ccache_changed_cb),
NULL);
+ ticket_btn =
+ GTK_BUTTON (gtk_builder_get_object (builder, "get_ticket_btn"));
+ g_signal_connect(ticket_btn, "clicked", G_CALLBACK(ticket_btn_clicked), applet);
+
+ g_signal_connect (applet, "krb-tgt-acquired",
+ G_CALLBACK (enable_ticket_button_cb),
+ GUINT_TO_POINTER(FALSE));
+
+ g_signal_connect (applet, "krb-tgt-expired",
+ G_CALLBACK (enable_ticket_button_cb),
+ GUINT_TO_POINTER(TRUE));
g_object_unref (builder);
return main_window;
}
diff --git a/src/ka-pwdialog.c b/src/ka-pwdialog.c
index 0cca259..7d51344 100644
--- a/src/ka-pwdialog.c
+++ b/src/ka-pwdialog.c
@@ -168,57 +168,24 @@ ka_pwdialog_new (void)
return pwdialog;
}
-
-static GdkGrabStatus
-for_each_keyboard (GdkWindow *window, GdkEvent *event,
- GdkGrabStatus (*func)(GdkDevice*,
- GdkWindow*,
- GdkEvent*))
-{
- GdkDisplay *display;
- GdkDeviceManager *device_manager;
- GdkDevice *device;
- GList *devices, *dev;
- GdkGrabStatus ret = GDK_GRAB_SUCCESS;
-
- display = gdk_window_get_display (window);
- device_manager = gdk_display_get_device_manager (display);
- devices = gdk_device_manager_list_devices (device_manager,
- GDK_DEVICE_TYPE_MASTER);
-
- for (dev = devices; dev; dev = dev->next) {
- device = dev->data;
- if (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD)
- continue;
- ret = (*func)(device, window, event);
- }
-
- g_list_free (devices);
- return ret;
-}
-
-static GdkGrabStatus
-grab_keyboard_func (GdkDevice *device, GdkWindow *window, GdkEvent *event)
-{
- return gdk_device_grab (device,
- window,
- GDK_OWNERSHIP_WINDOW,
- FALSE,
- GDK_ALL_EVENTS_MASK,
- NULL,
- gdk_event_get_time (event));
-}
-
static gboolean
grab_keyboard (GtkWidget *win, GdkEvent * event, gpointer data)
{
KaPwDialog *pwdialog = KA_PWDIALOG (data);
GdkGrabStatus status;
+ GdkWindow *window = gtk_widget_get_window(win);
+ gtk_grab_add(win);
if (!pwdialog->priv->grabbed) {
- status = for_each_keyboard(gtk_widget_get_window (win),
- event,
- &grab_keyboard_func);
+ status = gdk_seat_grab (gdk_display_get_default_seat(
+ gdk_window_get_display (window)),
+ window,
+ GDK_SEAT_CAPABILITY_ALL,
+ TRUE,
+ NULL,
+ event,
+ NULL,
+ NULL);
if (status == GDK_GRAB_SUCCESS)
pwdialog->priv->grabbed = TRUE;
@@ -228,26 +195,19 @@ grab_keyboard (GtkWidget *win, GdkEvent * event, gpointer data)
return FALSE;
}
-static GdkGrabStatus
-ungrab_keyboard_func (GdkDevice *device,
- GdkWindow *window G_GNUC_UNUSED,
- GdkEvent *event)
-{
- gdk_device_ungrab (device,
- gdk_event_get_time (event));
- return 0;
-}
static gboolean
-ungrab_keyboard (GtkWidget *win G_GNUC_UNUSED,
- GdkEvent * event, gpointer data)
+ungrab_keyboard (GtkWidget *win,
+ GdkEvent *event G_GNUC_UNUSED, gpointer data)
{
KaPwDialog *pwdialog = KA_PWDIALOG (data);
+ GdkWindow *window = gtk_widget_get_window(win);
if (pwdialog->priv->grabbed) {
- for_each_keyboard(gtk_widget_get_window (win),
- event,
- &ungrab_keyboard_func);
+ gtk_grab_remove (win);
+ gdk_seat_ungrab (gdk_display_get_default_seat(
+ gdk_window_get_display (window)));
+
pwdialog->priv->grabbed = FALSE;
}
return FALSE;
diff --git a/src/ka-tools.c b/src/ka-tools.c
index ae93803..1dbc94a 100644
--- a/src/ka-tools.c
+++ b/src/ka-tools.c
@@ -21,7 +21,7 @@
#include "ka-tools.h"
void
-ka_show_help (GdkScreen* screen, const char* chapter, GtkWindow* window)
+ka_show_help (GtkWindow* window, const char* chapter)
{
GError *error = NULL;
const char *section = "";
@@ -32,8 +32,7 @@ ka_show_help (GdkScreen* screen, const char* chapter, GtkWindow* window)
url = g_strdup_printf("help:krb5-auth-dialog%s", section);
- gtk_show_uri (screen, url, gtk_get_current_event_time (), &error);
-
+ gtk_show_uri_on_window (window, url, gtk_get_current_event_time (), &error);
if (error) {
GtkWidget *message_dialog;
diff --git a/src/ka-tools.h b/src/ka-tools.h
index 9cbf1ae..3263b8e 100644
--- a/src/ka-tools.h
+++ b/src/ka-tools.h
@@ -25,7 +25,7 @@
G_BEGIN_DECLS
-void ka_show_help (GdkScreen* screen, const char* section, GtkWindow* window);
+void ka_show_help (GtkWindow* window, const char* section);
void ka_show_about (KaApplet *applet);
G_END_DECLS
diff --git a/src/krb5-auth-dialog.1.in b/src/krb5-auth-dialog.1.in
index 2a9867e..7630fd5 100644
--- a/src/krb5-auth-dialog.1.in
+++ b/src/krb5-auth-dialog.1.in
@@ -17,8 +17,11 @@ credentials, prompting the user for whatever information is necessary.
.TP
\fB--auto\fR
-If this option is specified, \fBkrb5-auth-dialog\fR will exit if it finds that the
-user has no Kerberos credentials.
+If this option is specified, \fkrb5-auth-dialog\f will start only if it
+finds that the user has Kerberos credentials. This may be used to
+ensure that only users who actually use Kerberos see the program.
+Note that in some settings, users may authenticate to Kerberos at a
+later time even if they do not have Kerberos credentials initially.
.SH "SEE ALSO"
.BR krb5.conf (5)
diff --git a/src/krb5-auth-dialog.appdata.xml.in b/src/krb5-auth-dialog.appdata.xml.in
index b3e6ad2..09a53bc 100644
--- a/src/krb5-auth-dialog.appdata.xml.in
+++ b/src/krb5-auth-dialog.appdata.xml.in
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2013 Guido Günther <agx@sigxcpu.org> -->
-<application>
- <id type="desktop">krb5-auth-dialog.desktop</id>
- <licence>CC0</licence>
+<component type="desktop">
+ <id>krb5-auth-dialog.desktop</id>
+ <metadata_license>CC0-1.0</metadata_license>
+ <_name>Kerberos Authentication Dialog</_name>
+ <_summary>Request, renew and view Kerberos tickets</_summary>
<description>
<_p>
Kerberos Authentication allows you to list your current Kerberos tickets,
@@ -16,14 +18,21 @@
</_p>
</description>
<screenshots>
- <screenshot type="default" width="330" height="176">http://honk.sigxcpu.org/con/images/krb5-auth-dialog-pkinit.png</screenshot>
+ <screenshot type="default" height="176" width="330">
+ <image>http://honk.sigxcpu.org/con/images/krb5-auth-dialog-pkinit.png</image>
+ <_caption>Kerberos authentication dialog</_caption>
+ </screenshot>
</screenshots>
<url type="homepage">https://honk.sigxcpu.org/piki/projects/krb5-auth-dialog/</url>
- <updatecontact>agx_at_sigxcpu.org</updatecontact>
+ <update_contact>agx_at_sigxcpu.org</update_contact>
<kudos>
<kudo>AppMenu</kudo>
<kudo>HiDpiIcon</kudo>
<kudo>ModernToolkit</kudo>
<kudo>Notifications</kudo>
</kudos>
-</application>
+ <project_license>GPL-2.0+</project_license>
+ <developer_name>Guido Günther</developer_name>
+ <url type="bugtracker">https://bugzilla.gnome.org/enter_bug.cgi?product=krb5-auth-dialog</url>
+ <url type="help">https://honk.sigxcpu.org/piki/projects/krb5-auth-dialog/</url>
+</component>
diff --git a/src/resources.c b/src/resources.c
index 6428ecc..5373ac6 100644
--- a/src/resources.c
+++ b/src/resources.c
@@ -6,7 +6,7 @@
# define SECTION
#endif
-static const SECTION union { const guint8 data[31908]; const double alignment; void * const ptr;} krb5_auth_dialog_resource_data = { {
+static const SECTION union { const guint8 data[32340]; const double alignment; void * const ptr;} krb5_auth_dialog_resource_data = { {
0x47, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00,
@@ -33,19 +33,19 @@ static const SECTION union { const guint8 data[31908]; const double alignment; v
0xf8, 0x74, 0x00, 0x00, 0x0c, 0x75, 0x00, 0x00,
0x4b, 0x97, 0x0c, 0x39, 0x04, 0x00, 0x00, 0x00,
0x0c, 0x75, 0x00, 0x00, 0x11, 0x00, 0x76, 0x00,
- 0x20, 0x75, 0x00, 0x00, 0xbc, 0x79, 0x00, 0x00,
+ 0x20, 0x75, 0x00, 0x00, 0x6b, 0x7b, 0x00, 0x00,
0x4b, 0x50, 0x90, 0x0b, 0x00, 0x00, 0x00, 0x00,
- 0xbc, 0x79, 0x00, 0x00, 0x04, 0x00, 0x4c, 0x00,
- 0xc0, 0x79, 0x00, 0x00, 0xc4, 0x79, 0x00, 0x00,
+ 0x6b, 0x7b, 0x00, 0x00, 0x04, 0x00, 0x4c, 0x00,
+ 0x70, 0x7b, 0x00, 0x00, 0x74, 0x7b, 0x00, 0x00,
0x6f, 0x1c, 0x9b, 0x44, 0x09, 0x00, 0x00, 0x00,
- 0xc4, 0x79, 0x00, 0x00, 0x11, 0x00, 0x4c, 0x00,
- 0xd8, 0x79, 0x00, 0x00, 0xdc, 0x79, 0x00, 0x00,
+ 0x74, 0x7b, 0x00, 0x00, 0x11, 0x00, 0x4c, 0x00,
+ 0x88, 0x7b, 0x00, 0x00, 0x8c, 0x7b, 0x00, 0x00,
0xab, 0x84, 0xc8, 0x77, 0x04, 0x00, 0x00, 0x00,
- 0xdc, 0x79, 0x00, 0x00, 0x0b, 0x00, 0x76, 0x00,
- 0xe8, 0x79, 0x00, 0x00, 0x97, 0x7c, 0x00, 0x00,
+ 0x8c, 0x7b, 0x00, 0x00, 0x0b, 0x00, 0x76, 0x00,
+ 0x98, 0x7b, 0x00, 0x00, 0x47, 0x7e, 0x00, 0x00,
0xb0, 0xb7, 0x24, 0x30, 0x06, 0x00, 0x00, 0x00,
- 0x97, 0x7c, 0x00, 0x00, 0x06, 0x00, 0x4c, 0x00,
- 0xa0, 0x7c, 0x00, 0x00, 0xa4, 0x7c, 0x00, 0x00,
+ 0x47, 0x7e, 0x00, 0x00, 0x06, 0x00, 0x4c, 0x00,
+ 0x50, 0x7e, 0x00, 0x00, 0x54, 0x7e, 0x00, 0x00,
0x2f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x74, 0x72, 0x61, 0x79, 0x2d, 0x69, 0x63, 0x6f,
0x6e, 0x2d, 0x6d, 0x65, 0x6e, 0x75, 0x2e, 0x75,
@@ -3755,7 +3755,7 @@ static const SECTION union { const guint8 data[31908]; const double alignment; v
0x01, 0x00, 0x00, 0x00, 0x6b, 0x61, 0x2d, 0x6d,
0x61, 0x69, 0x6e, 0x2d, 0x77, 0x69, 0x6e, 0x64,
0x6f, 0x77, 0x2e, 0x75, 0x69, 0x00, 0x00, 0x00,
- 0x8c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65,
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x31,
0x2e, 0x30, 0x22, 0x20, 0x65, 0x6e, 0x63, 0x6f,
@@ -3764,78 +3764,149 @@ static const SECTION union { const guint8 data[31908]; const double alignment; v
0x21, 0x2d, 0x2d, 0x20, 0x47, 0x65, 0x6e, 0x65,
0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69,
0x74, 0x68, 0x20, 0x67, 0x6c, 0x61, 0x64, 0x65,
- 0x20, 0x33, 0x2e, 0x31, 0x38, 0x2e, 0x33, 0x20,
+ 0x20, 0x33, 0x2e, 0x32, 0x30, 0x2e, 0x30, 0x20,
0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x69, 0x6e, 0x74,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x3e, 0x3c,
0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73,
0x20, 0x6c, 0x69, 0x62, 0x3d, 0x22, 0x67, 0x74,
0x6b, 0x2b, 0x22, 0x20, 0x76, 0x65, 0x72, 0x73,
- 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x33, 0x2e, 0x30,
- 0x22, 0x2f, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
- 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x41, 0x64, 0x6a,
- 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22,
- 0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x64, 0x6a,
- 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x31,
- 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
- 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x75, 0x70, 0x70, 0x65, 0x72, 0x22,
- 0x3e, 0x31, 0x30, 0x30, 0x3c, 0x2f, 0x70, 0x72,
- 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
- 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73,
- 0x74, 0x65, 0x70, 0x5f, 0x69, 0x6e, 0x63, 0x72,
- 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x31,
- 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
- 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x33, 0x2e, 0x31,
+ 0x34, 0x22, 0x2f, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x41, 0x64,
+ 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x64,
+ 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74,
+ 0x31, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
- 0x65, 0x3d, 0x22, 0x70, 0x61, 0x67, 0x65, 0x5f,
- 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e,
- 0x74, 0x22, 0x3e, 0x31, 0x30, 0x3c, 0x2f, 0x70,
+ 0x65, 0x3d, 0x22, 0x75, 0x70, 0x70, 0x65, 0x72,
+ 0x22, 0x3e, 0x31, 0x30, 0x30, 0x3c, 0x2f, 0x70,
0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
- 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
- 0x47, 0x74, 0x6b, 0x41, 0x70, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69,
- 0x6e, 0x64, 0x6f, 0x77, 0x22, 0x20, 0x69, 0x64,
- 0x3d, 0x22, 0x6b, 0x72, 0x62, 0x35, 0x5f, 0x6d,
- 0x61, 0x69, 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x64,
- 0x6f, 0x77, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x73, 0x74, 0x65, 0x70, 0x5f, 0x69, 0x6e, 0x63,
+ 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
- 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
- 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
- 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x6d, 0x65, 0x3d, 0x22, 0x70, 0x61, 0x67, 0x65,
+ 0x5f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x22, 0x3e, 0x31, 0x30, 0x3c, 0x2f,
0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74,
- 0x69, 0x74, 0x6c, 0x65, 0x22, 0x20, 0x74, 0x72,
- 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22,
- 0x3e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
- 0x20, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73,
+ 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d,
+ 0x22, 0x47, 0x74, 0x6b, 0x41, 0x70, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57,
+ 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x22, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x6b, 0x72, 0x62, 0x35, 0x5f,
+ 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x77, 0x69, 0x6e,
+ 0x64, 0x6f, 0x77, 0x22, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e,
+ 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x20, 0x74,
+ 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73,
+ 0x22, 0x3e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x20, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74,
+ 0x73, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64,
+ 0x6f, 0x77, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x63, 0x65, 0x6e,
+ 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x73,
+ 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x2d, 0x65, 0x76, 0x65, 0x6e, 0x74,
+ 0x22, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65,
+ 0x72, 0x3d, 0x22, 0x6b, 0x61, 0x5f, 0x6d, 0x61,
+ 0x69, 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f,
+ 0x77, 0x5f, 0x68, 0x69, 0x64, 0x65, 0x22, 0x20,
+ 0x73, 0x77, 0x61, 0x70, 0x70, 0x65, 0x64, 0x3d,
+ 0x22, 0x6e, 0x6f, 0x22, 0x2f, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x47,
+ 0x72, 0x69, 0x64, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x67, 0x72, 0x69, 0x64, 0x31, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
- 0x65, 0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f,
- 0x77, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
- 0x6f, 0x6e, 0x22, 0x3e, 0x63, 0x65, 0x6e, 0x74,
- 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
- 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x73, 0x69,
- 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d,
- 0x65, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x74,
- 0x65, 0x2d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22,
- 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72,
- 0x3d, 0x22, 0x6b, 0x61, 0x5f, 0x6d, 0x61, 0x69,
- 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77,
- 0x5f, 0x68, 0x69, 0x64, 0x65, 0x22, 0x20, 0x73,
- 0x77, 0x61, 0x70, 0x70, 0x65, 0x64, 0x3d, 0x22,
- 0x6e, 0x6f, 0x22, 0x2f, 0x3e, 0x3c, 0x63, 0x68,
+ 0x65, 0x3d, 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65,
+ 0x72, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22,
+ 0x3e, 0x35, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68,
0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
- 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x47, 0x72,
- 0x69, 0x64, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
- 0x67, 0x72, 0x69, 0x64, 0x31, 0x22, 0x3e, 0x3c,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x54, 0x72,
+ 0x65, 0x65, 0x56, 0x69, 0x65, 0x77, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x6b, 0x72, 0x62, 0x35,
+ 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73,
+ 0x5f, 0x74, 0x72, 0x65, 0x65, 0x76, 0x69, 0x65,
+ 0x77, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x2d, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x6c, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x54, 0x72, 0x65, 0x65, 0x53, 0x65, 0x6c,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x74, 0x72, 0x65, 0x65,
+ 0x76, 0x69, 0x65, 0x77, 0x2d, 0x73, 0x65, 0x6c,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2f,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f,
+ 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e,
+ 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f,
+ 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e,
+ 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x3d, 0x22, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x62, 0x61, 0x72, 0x22, 0x3e, 0x3c, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b,
+ 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x42, 0x61,
+ 0x72, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68,
+ 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x3c,
0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
@@ -3848,61 +3919,44 @@ static const SECTION union { const guint8 data[31908]; const double alignment; v
0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72,
- 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e,
- 0x35, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x3d, 0x22, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x63,
+ 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x62, 0x75, 0x74,
+ 0x74, 0x6f, 0x6e, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69,
0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
- 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x54, 0x72, 0x65,
- 0x65, 0x56, 0x69, 0x65, 0x77, 0x22, 0x20, 0x69,
- 0x64, 0x3d, 0x22, 0x6b, 0x72, 0x62, 0x35, 0x5f,
- 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f,
- 0x74, 0x72, 0x65, 0x65, 0x76, 0x69, 0x65, 0x77,
- 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
- 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
- 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
- 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
- 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
- 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
- 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x42, 0x75, 0x74,
+ 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x63,
+ 0x6b, 0x65, 0x74, 0x5f, 0x62, 0x74, 0x6e, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
- 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69,
- 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72,
- 0x6e, 0x61, 0x6c, 0x2d, 0x63, 0x68, 0x69, 0x6c,
- 0x64, 0x3d, 0x22, 0x73, 0x65, 0x6c, 0x65, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x6f,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c,
- 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b,
- 0x54, 0x72, 0x65, 0x65, 0x53, 0x65, 0x6c, 0x65,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x69,
- 0x64, 0x3d, 0x22, 0x74, 0x72, 0x65, 0x65, 0x76,
- 0x69, 0x65, 0x77, 0x2d, 0x73, 0x65, 0x6c, 0x65,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x3e,
- 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
- 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
- 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
- 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
- 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
- 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
- 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
- 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
- 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
- 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73,
+ 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d,
+ 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e, 0x47, 0x65,
+ 0x74, 0x20, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74,
0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
- 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63,
- 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63,
0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f,
0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f,
- 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f,
- 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
- 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61,
- 0x63, 0x65, 0x3e, 0x0a, 0x00, 0x00, 0x28, 0x75,
- 0x75, 0x61, 0x79, 0x29, 0x6f, 0x72, 0x67, 0x2f,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
+ 0x65, 0x3e, 0x0a, 0x00, 0x00, 0x28, 0x75, 0x75,
+ 0x61, 0x79, 0x29, 0x6f, 0x72, 0x67, 0x2f, 0x00,
0x09, 0x00, 0x00, 0x00, 0x6b, 0x72, 0x62, 0x35,
0x2d, 0x61, 0x75, 0x74, 0x68, 0x2d, 0x64, 0x69,
0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x00, 0x00, 0x00,
diff --git a/src/resources/ui/ka-main-window.ui b/src/resources/ui/ka-main-window.ui
index 47d1fbe..8554521 100644
--- a/src/resources/ui/ka-main-window.ui
+++ b/src/resources/ui/ka-main-window.ui
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.20.0 -->
<interface>
- <requires lib="gtk+" version="3.0"/>
+ <requires lib="gtk+" version="3.14"/>
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">100</property>
<property name="step_increment">1</property>
@@ -32,5 +32,19 @@
</child>
</object>
</child>
+ <child type="titlebar">
+ <object class="GtkHeaderBar" id="header">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show_close_button">True</property>
+ <child>
+ <object class="GtkButton" id="get_ticket_btn">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Get Ticket</property>
+ </object>
+ </child>
+ </object>
+ </child>
</object>
</interface>
bgstack15