diff options
-rw-r--r-- | ChangeLog | 32 | ||||
-rw-r--r-- | common/gdm-common.c | 27 | ||||
-rw-r--r-- | common/gdm-common.h | 3 | ||||
-rw-r--r-- | daemon/Makefile.am | 1 | ||||
-rw-r--r-- | daemon/gdm-greeter-session.c | 42 | ||||
-rw-r--r-- | daemon/gdm-server.c | 28 | ||||
-rw-r--r-- | daemon/gdm-session-worker-job.c | 28 | ||||
-rw-r--r-- | daemon/gdm-slave-proxy.c | 31 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-simple-greeter.c | 31 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-simple-greeter.glade | 612 |
10 files changed, 361 insertions, 474 deletions
@@ -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> |