2 * This file is a part of hildon
4 * Copyright (C) 2005, 2006 Nokia Corporation, all rights reserved.
6 * Contact: Michael Dominic Kostrzewa <michael.kostrzewa@nokia.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; version 2.1 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
26 * SECTION:hildon-login-dialog
27 * @short_description: A widget which allows a user to enter an username
29 * @see_also: #HildonGetPasswordDialog, #HildonSetPasswordDialog
31 * #HildonLoginDialog is used to enter a username and password
32 * when accessing a password protected area. The widget performs no
33 * input checking and is used only for retrieving the username and a
41 #include "hildon-login-dialog.h"
49 #include "hildon-caption.h"
51 #include "hildon-login-dialog-private.h"
62 hildon_login_dialog_class_init (HildonLoginDialogClass *class);
65 hildon_login_dialog_init (HildonLoginDialog *widget);
68 hildon_login_dialog_set_property (GObject *object,
74 hildon_login_dialog_get_property (GObject *object,
79 #define HILDON_LOGIN_DIALOG_TITLE "frw_ti_get_user_name_and_pwd"
81 #define HILDON_LOGIN_DIALOG_USERNAME "frw_ti_get_user_name_and_pwd_enter_user_name"
83 #define HILDON_LOGIN_DIALOG_PASSWORD "frw_ti_get_user_name_and_pwd_enter_pwd"
85 #define HILDON_LOGIN_DIALOG_OK "frw_bd_get_user_name_and_pwd_ok"
87 #define HILDON_LOGIN_DIALOG_CANCEL "frw_bd_get_user_name_and_pwd_cancel"
89 #define _(String) dgettext("hildon-libs", String)
91 static GtkDialogClass* parent_class;
94 * hildon_login_dialog_get_type:
96 * Returns GType for HildonLoginDialog.
98 * Returns: HildonLoginDialog type
101 hildon_login_dialog_get_type (void)
103 static GType dialog_type = 0;
106 static const GTypeInfo dialog_info = {
107 sizeof (HildonLoginDialogClass),
108 NULL, /* base_init */
109 NULL, /* base_finalize */
110 (GClassInitFunc) hildon_login_dialog_class_init,
111 NULL, /* class_finalize */
112 NULL, /* class_data */
113 sizeof(HildonLoginDialog),
115 (GInstanceInitFunc) hildon_login_dialog_init
117 dialog_type = g_type_register_static (GTK_TYPE_DIALOG,
126 hildon_login_dialog_set_property (GObject *object,
131 HildonLoginDialog *dialog = NULL;
132 HildonLoginDialogPrivate *priv = NULL;
134 dialog = HILDON_LOGIN_DIALOG (object);
135 priv = HILDON_LOGIN_DIALOG_GET_PRIVATE(dialog);
141 /* Set the password message text */
142 hildon_login_dialog_set_message (dialog, g_value_get_string (value));
146 /* Set the current username displayed in the dialog */
147 gtk_entry_set_text (priv->username_entry, g_value_get_string (value));
151 /* Set the currently entered password */
152 gtk_entry_set_text (priv->password_entry, g_value_get_string (value));
156 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
162 hildon_login_dialog_get_property (GObject *object,
167 HildonLoginDialog *dialog = NULL;
168 HildonLoginDialogPrivate *priv = NULL;
170 dialog = HILDON_LOGIN_DIALOG (object);
171 priv = HILDON_LOGIN_DIALOG_GET_PRIVATE (dialog);
177 g_value_set_string (value, gtk_label_get_text (priv->message_label));
181 g_value_set_string (value, hildon_login_dialog_get_username (dialog));
185 g_value_set_string (value, hildon_login_dialog_get_password (dialog));
189 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
195 hildon_login_dialog_class_init (HildonLoginDialogClass *class)
197 GObjectClass *object_class = G_OBJECT_CLASS (class);
199 parent_class = g_type_class_peek_parent (class);
201 /* Override virtual functions */
202 object_class->set_property = hildon_login_dialog_set_property;
203 object_class->get_property = hildon_login_dialog_get_property;
205 /* Install new properties */
208 * HildonLoginDialog:message:
210 * Optional message displayed to the user.
212 g_object_class_install_property (object_class,
214 g_param_spec_string ("message",
216 "Message displayed by the dialog",
221 * HildonLoginDialog:username:
223 * Contents of the username field.
225 g_object_class_install_property (object_class,
227 g_param_spec_string ("username",
234 * HildonLoginDialog:password:
236 * Contents of the password field.
238 g_object_class_install_property (object_class,
240 g_param_spec_string ("password",
246 /* Install private data structure */
247 g_type_class_add_private (class, sizeof (HildonLoginDialogPrivate));
251 hildon_login_dialog_init (HildonLoginDialog *dialog)
253 /* Access private structure */
254 HildonLoginDialogPrivate *priv = HILDON_LOGIN_DIALOG_GET_PRIVATE (dialog);
257 /* Size group for captions */
258 GtkSizeGroup *group = GTK_SIZE_GROUP (gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL));
259 HildonCaption *caption;
261 /* Initialize dialog */
262 gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
263 gtk_window_set_title (GTK_WINDOW(dialog), _(HILDON_LOGIN_DIALOG_TITLE));
265 /* Optional message label */
266 /* FIXME Set the warpping for the message label */
267 priv->message_label = GTK_LABEL (gtk_label_new (NULL));
268 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
269 GTK_WIDGET (priv->message_label), FALSE, FALSE, 0);
272 gtk_dialog_add_button (GTK_DIALOG (dialog), _(HILDON_LOGIN_DIALOG_OK), GTK_RESPONSE_OK);
273 gtk_dialog_add_button (GTK_DIALOG (dialog), _(HILDON_LOGIN_DIALOG_CANCEL), GTK_RESPONSE_CANCEL);
275 /* Setup username entry */
276 priv->username_entry = GTK_ENTRY (gtk_entry_new ());
279 g_object_set (priv->username_entry, "hildon-input-mode", HILDON_GTK_INPUT_MODE_FULL, NULL);
282 caption = HILDON_CAPTION (hildon_caption_new
284 _(HILDON_LOGIN_DIALOG_USERNAME),
285 GTK_WIDGET (priv->username_entry), NULL,
286 HILDON_CAPTION_OPTIONAL));
288 hildon_caption_set_separator (caption, "");
289 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
290 GTK_WIDGET (caption), FALSE, FALSE, 0);
292 /* Setup password entry */
293 priv->password_entry = GTK_ENTRY (gtk_entry_new ());
296 g_object_set (priv->password_entry, "hildon-input-mode", HILDON_GTK_INPUT_MODE_FULL, NULL);
299 gtk_entry_set_visibility (GTK_ENTRY (priv->password_entry), FALSE);
301 caption = HILDON_CAPTION (hildon_caption_new (group,
302 _(HILDON_LOGIN_DIALOG_PASSWORD),
303 GTK_WIDGET (priv->password_entry),
305 HILDON_CAPTION_OPTIONAL));
307 hildon_caption_set_separator (caption, "");
308 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
309 GTK_WIDGET (caption), FALSE, FALSE, 0);
311 gtk_widget_show_all (GTK_DIALOG (dialog)->vbox);
312 gtk_widget_show_all (GTK_DIALOG (dialog)->action_area);
313 gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
315 /* Ensure group is freed when all its contents have been removed */
316 g_object_unref (group);
320 * hildon_login_dialog_new:
321 * @parent: the parent window of the dialog
323 * Creates a new #HildonLoginDialog widget with Ok and Close
326 * Returns: the newly created #HildonLoginDialog
329 hildon_login_dialog_new (GtkWindow *parent)
331 GtkWidget *self = g_object_new (HILDON_TYPE_LOGIN_DIALOG, NULL);
334 gtk_window_set_transient_for (GTK_WINDOW (self), parent);
340 * hildon_login_dialog_new_with_default:
341 * @parent: the parent window of the dialog
342 * @name: default username, NULL if unset
343 * @password: default password, NULL if unset
345 * Same as #hildon_login_dialog_new but with a
346 * default username and password.
348 * Returns: the newly created #HildonLoginDialog
351 hildon_login_dialog_new_with_default (GtkWindow *parent,
353 const gchar *password)
355 GtkWidget *self = hildon_login_dialog_new(parent);
358 g_object_set (G_OBJECT (self), "username", name, NULL);
360 if (password != NULL)
361 g_object_set (G_OBJECT (self), "password", password, NULL);
367 * hildon_login_dialog_get_username:
368 * @dialog: the dialog
370 * Gets the text that's in the username entry.
372 * Returns: a pointer to the name string. You should not modify it.
375 hildon_login_dialog_get_username (HildonLoginDialog *dialog)
377 HildonLoginDialogPrivate *priv;
379 g_return_val_if_fail (HILDON_IS_LOGIN_DIALOG (dialog), NULL);
381 priv = HILDON_LOGIN_DIALOG_GET_PRIVATE (dialog);
384 return gtk_entry_get_text (priv->username_entry);
388 * hildon_login_dialog_get_password:
389 * @dialog: the dialog
391 * Gets the text that's in the password entry.
393 * Returns: a pointer to the password string. You should not modify it.
396 hildon_login_dialog_get_password (HildonLoginDialog *dialog)
398 HildonLoginDialogPrivate *priv;
400 g_return_val_if_fail (HILDON_IS_LOGIN_DIALOG (dialog), NULL);
402 priv = HILDON_LOGIN_DIALOG_GET_PRIVATE (dialog);
405 return gtk_entry_get_text (priv->password_entry);
409 * hildon_login_dialog_set_message:
410 * @dialog: the dialog
411 * @msg: the message or some other descriptive text to be set
413 * Sets the optional descriptive text that is displayed on the top
417 hildon_login_dialog_set_message (HildonLoginDialog *dialog,
420 HildonLoginDialogPrivate *priv;
422 g_return_if_fail (HILDON_IS_LOGIN_DIALOG (dialog));
424 priv = HILDON_LOGIN_DIALOG_GET_PRIVATE (dialog);
427 gtk_label_set_text (priv->message_label, msg);