summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog32
-rw-r--r--common/gdm-common.c27
-rw-r--r--common/gdm-common.h3
-rw-r--r--daemon/Makefile.am1
-rw-r--r--daemon/gdm-greeter-session.c42
-rw-r--r--daemon/gdm-server.c28
-rw-r--r--daemon/gdm-session-worker-job.c28
-rw-r--r--daemon/gdm-slave-proxy.c31
-rw-r--r--gui/simple-greeter/gdm-simple-greeter.c31
-rw-r--r--gui/simple-greeter/gdm-simple-greeter.glade612
10 files changed, 361 insertions, 474 deletions
diff --git a/ChangeLog b/ChangeLog
index 97ecc395..3bfc2080 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2007-10-23 William Jon McCann <mccann@jhu.edu>
+
+ * common/gdm-common.c: (gdm_signal_pid):
+ * common/gdm-common.h:
+ * daemon/Makefile.am:
+ * daemon/gdm-greeter-session.c: (spawn_child_setup),
+ (stop_dbus_daemon), (gdm_greeter_session_stop):
+ * daemon/gdm-server.c: (gdm_server_stop):
+ * daemon/gdm-session-worker-job.c: (gdm_session_worker_job_stop):
+ * daemon/gdm-slave-proxy.c: (kill_slave):
+ * gui/simple-greeter/gdm-simple-greeter.c: (set_sensitive),
+ (set_focus), (reset_dialog), (gdm_simple_greeter_info_query),
+ (gdm_simple_greeter_secret_info_query), (log_in_button_clicked),
+ (create_greeter), (gdm_simple_greeter_init):
+ * gui/simple-greeter/gdm-simple-greeter.glade:
+ Rework the dialog design a bit.
+
2007-10-18 Brian Cameron <brian.cameron@sun.com>
* daemon/gdm-session-record.c: Some trivial fixes. The #ifdef
@@ -7,6 +24,21 @@
2007-10-19 William Jon McCann <mccann@jhu.edu>
+ * common/gdm-common.c: (gdm_signal_pid):
+ * common/gdm-common.h:
+ * daemon/Makefile.am:
+ * daemon/gdm-greeter-session.c: (spawn_child_setup),
+ (stop_dbus_daemon), (gdm_greeter_session_stop):
+ * daemon/gdm-server.c: (gdm_server_stop):
+ * daemon/gdm-session-worker-job.c: (gdm_session_worker_job_stop):
+ * daemon/gdm-slave-proxy.c: (kill_slave):
+ Move the signal_pid func to common. Make the greeter process
+ a session leader. Signal greeter and dbus process groups instead
+ of just the individual processes so that we clean up the entire greeter
+ session.
+
+2007-10-19 William Jon McCann <mccann@jhu.edu>
+
* common/gdm-signal-handler.c: (signal_io_watch), (catch_signal),
(uncatch_signal), (gdm_signal_handler_add), (callback_data_free),
(gdm_signal_handler_remove_and_free_data),
diff --git a/common/gdm-common.c b/common/gdm-common.c
index 8eb86df1..3bb6de88 100644
--- a/common/gdm-common.c
+++ b/common/gdm-common.c
@@ -25,6 +25,7 @@
#include <stdlib.h>
#include <locale.h>
#include <fcntl.h>
+#include <sys/wait.h>
#include <glib.h>
#include <glib/gi18n.h>
@@ -33,6 +34,32 @@
#include "gdm-common.h"
#include "gdm-md5.h"
+int
+gdm_signal_pid (int pid,
+ int signal)
+{
+ int status = -1;
+
+ /* perhaps block sigchld */
+ g_debug ("sending signal %d to process %d", signal, pid);
+ status = kill (pid, signal);
+
+ if (status < 0) {
+ if (errno == ESRCH) {
+ g_warning ("Child process %d was already dead.",
+ (int)pid);
+ } else {
+ g_warning ("Couldn't kill child process %d: %s",
+ pid,
+ g_strerror (errno));
+ }
+ }
+
+ /* perhaps unblock sigchld */
+
+ return status;
+}
+
/* hex conversion adapted from D-Bus */
/**
* Appends a two-character hex digit to a string, where the hex digit
diff --git a/common/gdm-common.h b/common/gdm-common.h
index bb250a79..0628e1ea 100644
--- a/common/gdm-common.h
+++ b/common/gdm-common.h
@@ -27,6 +27,9 @@
G_BEGIN_DECLS
+int gdm_signal_pid (int pid,
+ int signal);
+
gboolean gdm_generate_random_bytes (GString *str,
int n_bytes);
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 2ee89438..d93c5b57 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -76,6 +76,7 @@ test_session_SOURCES = \
test_session_LDADD = \
$(DAEMON_LIBS) \
$(PAM_LIBS) \
+ $(top_builddir)/common/libgdmcommon.la \
$(NULL)
libexec_PROGRAMS = \
diff --git a/daemon/gdm-greeter-session.c b/daemon/gdm-greeter-session.c
index 55a1ba94..933b27f9 100644
--- a/daemon/gdm-greeter-session.c
+++ b/daemon/gdm-greeter-session.c
@@ -292,9 +292,9 @@ get_greeter_environment (GdmGreeterSession *greeter_session)
}
static void
-greeter_session_child_watch (GPid pid,
- int status,
- GdmGreeterSession *greeter_session)
+greeter_session_child_watch (GPid pid,
+ int status,
+ GdmGreeterSession *greeter_session)
{
g_debug ("child (pid:%d) done (%s:%d)",
(int) pid,
@@ -313,32 +313,6 @@ greeter_session_child_watch (GPid pid,
}
}
-static int
-signal_pid (int pid,
- int signal)
-{
- int status = -1;
-
- /* perhaps block sigchld */
-
- status = kill (pid, signal);
-
- if (status < 0) {
- if (errno == ESRCH) {
- g_warning ("Child process %lu was already dead.",
- (unsigned long) pid);
- } else {
- g_warning ("Couldn't kill child process %lu: %s",
- (unsigned long) pid,
- g_strerror (errno));
- }
- }
-
- /* perhaps unblock sigchld */
-
- return status;
-}
-
typedef struct {
const char *user_name;
const char *group_name;
@@ -402,6 +376,12 @@ spawn_child_setup (SpawnChildData *data)
/* this will get rid of any suplementary groups etc... */
setgroups (1, groups);
}
+
+ if (setsid () < 0) {
+ g_debug ("could not set pid '%u' as leader of new session and process group - %s",
+ (guint) getpid (), g_strerror (errno));
+ _exit (2);
+ }
}
static gboolean
@@ -624,7 +604,7 @@ static gboolean
stop_dbus_daemon (GdmGreeterSession *greeter_session)
{
if (greeter_session->priv->dbus_pid > 0) {
- signal_pid (greeter_session->priv->dbus_pid, SIGTERM);
+ gdm_signal_pid (-1 * greeter_session->priv->dbus_pid, SIGTERM);
greeter_session->priv->dbus_pid = 0;
}
return TRUE;
@@ -764,7 +744,7 @@ gdm_greeter_session_stop (GdmGreeterSession *greeter_session)
g_debug ("Stopping greeter_session");
- signal_pid (greeter_session->priv->pid, SIGTERM);
+ gdm_signal_pid (-1 * greeter_session->priv->pid, SIGTERM);
greeter_session_died (greeter_session);
if (greeter_session->priv->ckc != NULL) {
diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c
index 47142763..7208ecf5 100644
--- a/daemon/gdm-server.c
+++ b/daemon/gdm-server.c
@@ -653,32 +653,6 @@ gdm_server_start (GdmServer *server)
}
static int
-signal_pid (int pid,
- int signal)
-{
- int status = -1;
-
- /* perhaps block sigchld */
-
- status = kill (pid, signal);
-
- if (status < 0) {
- if (errno == ESRCH) {
- g_warning ("Child process %lu was already dead.",
- (unsigned long) pid);
- } else {
- g_warning ("Couldn't kill child process %lu: %s",
- (unsigned long) pid,
- g_strerror (errno));
- }
- }
-
- /* perhaps unblock sigchld */
-
- return status;
-}
-
-static int
wait_on_child (int pid)
{
int status;
@@ -732,7 +706,7 @@ gdm_server_stop (GdmServer *server)
g_debug ("Stopping server");
- signal_pid (server->priv->pid, SIGTERM);
+ gdm_signal_pid (server->priv->pid, SIGTERM);
server_died (server);
return TRUE;
diff --git a/daemon/gdm-session-worker-job.c b/daemon/gdm-session-worker-job.c
index 84b8b210..9e54bcac 100644
--- a/daemon/gdm-session-worker-job.c
+++ b/daemon/gdm-session-worker-job.c
@@ -222,32 +222,6 @@ gdm_session_worker_job_start (GdmSessionWorkerJob *session_worker_job)
}
static int
-signal_pid (int pid,
- int signal)
-{
- int status = -1;
-
- /* perhaps block sigchld */
-
- status = kill (pid, signal);
-
- if (status < 0) {
- if (errno == ESRCH) {
- g_warning ("Child process %lu was already dead.",
- (unsigned long) pid);
- } else {
- g_warning ("Couldn't kill child process %lu: %s",
- (unsigned long) pid,
- g_strerror (errno));
- }
- }
-
- /* perhaps unblock sigchld */
-
- return status;
-}
-
-static int
wait_on_child (int pid)
{
int status;
@@ -302,7 +276,7 @@ gdm_session_worker_job_stop (GdmSessionWorkerJob *session_worker_job)
g_debug ("Stopping session_worker_job pid:%d", session_worker_job->priv->pid);
- signal_pid (session_worker_job->priv->pid, SIGTERM);
+ gdm_signal_pid (session_worker_job->priv->pid, SIGTERM);
session_worker_job_died (session_worker_job);
return TRUE;
diff --git a/daemon/gdm-slave-proxy.c b/daemon/gdm-slave-proxy.c
index b3fb3f1f..22cfaabc 100644
--- a/daemon/gdm-slave-proxy.c
+++ b/daemon/gdm-slave-proxy.c
@@ -33,6 +33,8 @@
#include <glib/gi18n.h>
#include <glib-object.h>
+#include "gdm-common.h"
+
#include "gdm-slave-proxy.h"
#define GDM_SLAVE_PROXY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_SLAVE_PROXY, GdmSlaveProxyPrivate))
@@ -141,33 +143,6 @@ spawn_slave (GdmSlaveProxy *slave)
return result;
}
-static int
-signal_pid (int pid,
- int signal)
-{
- int status = -1;
-
- /* perhaps block sigchld */
- g_debug ("Sending signal %d to pid %d", signal, pid);
-
- status = kill (pid, signal);
-
- if (status < 0) {
- if (errno == ESRCH) {
- g_warning ("Child process %lu was already dead.",
- (unsigned long) pid);
- } else {
- g_warning ("Couldn't kill child process %lu: %s",
- (unsigned long) pid,
- g_strerror (errno));
- }
- }
-
- /* perhaps unblock sigchld */
-
- return status;
-}
-
static void
kill_slave (GdmSlaveProxy *slave)
{
@@ -175,7 +150,7 @@ kill_slave (GdmSlaveProxy *slave)
return;
}
- signal_pid (slave->priv->pid, SIGTERM);
+ gdm_signal_pid (slave->priv->pid, SIGTERM);
}
gboolean
diff --git a/gui/simple-greeter/gdm-simple-greeter.c b/gui/simple-greeter/gdm-simple-greeter.c
index a16ac72d..4748a8b3 100644
--- a/gui/simple-greeter/gdm-simple-greeter.c
+++ b/gui/simple-greeter/gdm-simple-greeter.c
@@ -151,7 +151,7 @@ set_sensitive (GdmSimpleGreeter *greeter,
box = glade_xml_get_widget (greeter->priv->xml, "auth-input-box");
gtk_widget_set_sensitive (box, sensitive);
- box = glade_xml_get_widget (greeter->priv->xml, "auth-button-box");
+ box = glade_xml_get_widget (greeter->priv->xml, "buttonbox");
gtk_widget_set_sensitive (box, sensitive);
}
@@ -161,7 +161,7 @@ set_focus (GdmSimpleGreeter *greeter)
GtkWidget *top_level;
GtkWidget *entry;
- entry = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-entry");
+ entry = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-prompt-entry");
top_level = glade_xml_get_widget (greeter->priv->xml, "auth-window");
gdk_window_focus (top_level->window, GDK_CURRENT_TIME);
@@ -214,11 +214,11 @@ reset_dialog (GdmSimpleGreeter *greeter)
g_debug ("Resetting dialog");
- entry = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-entry");
+ entry = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-prompt-entry");
gtk_entry_set_text (GTK_ENTRY (entry), "");
gtk_entry_set_visibility (GTK_ENTRY (entry), TRUE);
- label = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-label");
+ label = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-prompt-label");
gtk_label_set_text (GTK_LABEL (label), "");
set_message (greeter, "");
@@ -299,11 +299,11 @@ gdm_simple_greeter_info_query (GdmGreeter *greeter,
g_debug ("SIMPLE GREETER: info query: %s", text);
- entry = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-entry");
+ entry = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-prompt-entry");
gtk_entry_set_text (GTK_ENTRY (entry), "");
gtk_entry_set_visibility (GTK_ENTRY (entry), TRUE);
- label = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-label");
+ label = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-prompt-label");
gtk_label_set_text (GTK_LABEL (label), text);
set_sensitive (GDM_SIMPLE_GREETER (greeter), TRUE);
@@ -330,11 +330,11 @@ gdm_simple_greeter_secret_info_query (GdmGreeter *greeter,
g_debug ("SIMPLE GREETER: secret info query: %s", text);
- entry = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-entry");
+ entry = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-prompt-entry");
gtk_entry_set_text (GTK_ENTRY (entry), "");
gtk_entry_set_visibility (GTK_ENTRY (entry), FALSE);
- label = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-label");
+ label = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-prompt-label");
gtk_label_set_text (GTK_LABEL (label), text);
set_sensitive (GDM_SIMPLE_GREETER (greeter), TRUE);
@@ -379,8 +379,8 @@ gdm_simple_greeter_get_property (GObject *object,
}
static void
-ok_button_clicked (GtkButton *button,
- GdmSimpleGreeter *greeter)
+log_in_button_clicked (GtkButton *button,
+ GdmSimpleGreeter *greeter)
{
gboolean res;
GtkWidget *entry;
@@ -389,7 +389,7 @@ ok_button_clicked (GtkButton *button,
set_busy (greeter);
set_sensitive (greeter, FALSE);
- entry = glade_xml_get_widget (greeter->priv->xml, "auth-entry");
+ entry = glade_xml_get_widget (greeter->priv->xml, "auth-prompt-entry");
text = gtk_entry_get_text (GTK_ENTRY (entry));
res = gdm_greeter_emit_answer_query (GDM_GREETER (greeter), text);
}
@@ -515,18 +515,18 @@ create_greeter (GdmSimpleGreeter *greeter)
}
gtk_container_add (GTK_CONTAINER (box), greeter->priv->user_chooser);
- button = glade_xml_get_widget (greeter->priv->xml, "auth-ok-button");
+ button = glade_xml_get_widget (greeter->priv->xml, "log-in-button");
if (dialog != NULL) {
gtk_widget_grab_default (button);
- g_signal_connect (button, "clicked", G_CALLBACK (ok_button_clicked), greeter);
+ g_signal_connect (button, "clicked", G_CALLBACK (log_in_button_clicked), greeter);
}
- button = glade_xml_get_widget (greeter->priv->xml, "auth-cancel-button");
+ button = glade_xml_get_widget (greeter->priv->xml, "cancel-button");
if (dialog != NULL) {
g_signal_connect (button, "clicked", G_CALLBACK (cancel_button_clicked), greeter);
}
- entry = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-entry");
+ entry = glade_xml_get_widget (GDM_SIMPLE_GREETER (greeter)->priv->xml, "auth-prompt-entry");
/* Only change the invisible character if it '*' otherwise assume it is OK */
if ('*' == gtk_entry_get_invisible_char (GTK_ENTRY (entry))) {
gunichar invisible_char;
@@ -600,6 +600,7 @@ static void
gdm_simple_greeter_init (GdmSimpleGreeter *simple_greeter)
{
+ sleep (15);
simple_greeter->priv = GDM_SIMPLE_GREETER_GET_PRIVATE (simple_greeter);
}
diff --git a/gui/simple-greeter/gdm-simple-greeter.glade b/gui/simple-greeter/gdm-simple-greeter.glade
index 6701f25a..48ecc088 100644
--- a/gui/simple-greeter/gdm-simple-greeter.glade
+++ b/gui/simple-greeter/gdm-simple-greeter.glade
@@ -1,348 +1,268 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
<glade-interface>
-
-<widget class="GtkWindow" id="auth-window">
- <property name="border_width">12</property>
- <property name="height_request">400</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Authentication Dialog</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
-
- <child>
- <widget class="GtkNotebook" id="notebook">
- <property name="visible">True</property>
- <property name="show_tabs">False</property>
- <property name="show_border">False</property>
- <property name="tab_pos">GTK_POS_TOP</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
-
- <child>
- <widget class="GtkVBox" id="userlist-page-vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkHBox" id="userlist-box">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkButton" id="userlist-cancel-button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">label1</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="auth-page-vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkHBox" id="auth-user-icon-box">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="auth-input-box">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="auth-label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Prompt:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="auth-entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="auth-message-label">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHButtonBox" id="auth-button-box">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkButton" id="auth-cancel-button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="auth-ok-button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
-
- <child>
- <widget class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="stock">gtk-home</property>
- <property name="icon_size">4</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="label">Log In</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">label2</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
+ <widget class="GtkWindow" id="auth-window">
+ <property name="height_request">400</property>
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="title" translatable="yes">Authentication Dialog</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <child>
+ <widget class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkAspectFrame" id="aspectframe1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <property name="ratio">1</property>
+ <child>
+ <widget class="GtkImage" id="logo-image">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="pixel_size">64</property>
+ <property name="icon_name">computer</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkEventBox" id="eventbox1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <widget class="GtkLabel" id="computer-name-label">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Computer</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkNotebook" id="notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="show_tabs">False</property>
+ <property name="show_border">False</property>
+ <property name="tab_border">0</property>
+ <property name="tab_hborder">0</property>
+ <property name="tab_vborder">0</property>
+ <child>
+ <widget class="GtkVBox" id="userlist-box">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">page 1</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <widget class="GtkVBox" id="vbox3">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="spacing">10</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="auth-input-box">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="auth-prompt-label">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Prompt:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="auth-prompt-entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="activates_default">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="auth-message-label">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">10</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">page 2</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">1</property>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">page 3</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">2</property>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHButtonBox" id="buttonbox">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <widget class="GtkButton" id="cancel-button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="log-in-button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkVBox" id="vbox2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <widget class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="pixel_size">22</property>
+ <property name="icon_name">go-home</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Log In</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
</glade-interface>