1
/* This file is part of Maliit framework
3
* Copyright (C) 2012 One Laptop per Child Association
5
* Contact: maliit-discuss@lists.maliit.org
7
* This library is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the licence, or (at your option) any later version.
12
* This library is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with this library; if not, write to the
19
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20
* Boston, MA 02111-1307, USA.
23
#include <gdk/gdkkeysyms.h>
25
#include "actionkeyfilter.h"
27
struct _ActionKeyFilter
32
gboolean enter_login_accepts;
33
gboolean enter_password_accepts;
35
guint login_activated_signal_id;
36
guint password_activated_signal_id;
40
get_parent_gtk_window (GtkWidget *widget)
44
} else if (GTK_IS_WINDOW (widget)) {
45
return GTK_WINDOW (widget);
47
return get_parent_gtk_window (gtk_widget_get_parent (widget));
52
on_entry_activated (ActionKeyFilter *filter,
57
if (filter == NULL || !GTK_IS_ENTRY (entry)) {
61
widget = GTK_WIDGET (entry);
63
if (entry != filter->login && entry != filter->password) {
67
if (entry == filter->login && action_key_filter_get_enter_login_accepts (filter)) {
68
GtkWidget* target_widget = GTK_WIDGET (filter->password);
70
gtk_widget_grab_focus (target_widget);
72
} else if (entry == filter->password && action_key_filter_get_enter_password_accepts (filter)) {
73
const gchar *login_text = gtk_entry_get_text (filter->login);
74
const gchar *password_text = gtk_entry_get_text (filter->password);
75
const gchar *message = NULL;
77
GtkMessageType message_type;
79
if (login_text == NULL || *login_text == '\0' ||
80
password_text == NULL || *password_text == '\0') {
81
message = "Please enter your credentials.";
82
message_type = GTK_MESSAGE_WARNING;
84
message = "Login successful!";
85
message_type = GTK_MESSAGE_INFO;
88
dialog = gtk_message_dialog_new (get_parent_gtk_window (widget),
89
GTK_DIALOG_DESTROY_WITH_PARENT,
94
gtk_dialog_run (GTK_DIALOG (dialog));
95
gtk_widget_destroy (dialog);
102
action_key_filter_new (GtkEntry *login, GtkEntry *password)
104
ActionKeyFilter *filter;
106
g_return_val_if_fail (GTK_IS_ENTRY (login), NULL);
107
g_return_val_if_fail (GTK_IS_ENTRY (password), NULL);
109
filter = g_slice_new0 (ActionKeyFilter);
110
filter->enter_login_accepts = TRUE;
111
filter->enter_password_accepts = TRUE;
112
filter->login = login;
113
filter->password = password;
115
filter->login_activated_signal_id = g_signal_connect_swapped (filter->login,
117
G_CALLBACK (on_entry_activated),
120
filter->password_activated_signal_id = g_signal_connect_swapped (filter->password,
122
G_CALLBACK (on_entry_activated),
125
g_object_add_weak_pointer (G_OBJECT (login), (gpointer *)&filter->login);
126
g_object_add_weak_pointer (G_OBJECT (password), (gpointer *)&filter->password);
132
action_key_filter_free (ActionKeyFilter *filter)
139
if (filter->login_activated_signal_id) {
140
g_signal_handler_disconnect (filter->login, filter->login_activated_signal_id);
141
filter->login_activated_signal_id = 0;
143
g_object_remove_weak_pointer (G_OBJECT (filter->login), (gpointer *)&filter->login);
144
filter->login = NULL;
147
if (filter->password) {
148
if (filter->password_activated_signal_id) {
149
g_signal_handler_disconnect (filter->password, filter->password_activated_signal_id);
150
filter->password_activated_signal_id = 0;
152
g_object_remove_weak_pointer (G_OBJECT (filter->password), (gpointer *)&filter->password);
153
filter->password = NULL;
155
g_slice_free (ActionKeyFilter, filter);
159
action_key_filter_get_enter_login_accepts (ActionKeyFilter *filter)
161
g_return_val_if_fail (filter != NULL, FALSE);
163
return filter->enter_login_accepts;
167
action_key_filter_set_enter_login_accepts (ActionKeyFilter *filter,
168
gboolean enter_login_accepts)
170
g_return_if_fail (filter != NULL);
172
filter->enter_login_accepts = enter_login_accepts;
176
action_key_filter_get_enter_password_accepts (ActionKeyFilter *filter)
178
g_return_val_if_fail (filter != NULL, FALSE);
180
return filter->enter_password_accepts;
184
action_key_filter_set_enter_password_accepts (ActionKeyFilter *filter,
185
gboolean enter_password_accepts)
187
g_return_if_fail (filter != NULL);
189
filter->enter_password_accepts = enter_password_accepts;