~timo-jyrinki/ubuntu/trusty/maliit-framework/fix_qt52

« back to all changes in this revision

Viewing changes to examples/apps/gtk2-overrides/actionkeyfilter.c

  • Committer: Package Import Robot
  • Author(s): Ricardo Salveti de Araujo, Sergio Schvezov, Ricardo Salveti de Araujo
  • Date: 2013-07-23 19:47:04 UTC
  • mfrom: (1.1.2) (1.2.1 experimental)
  • Revision ID: package-import@ubuntu.com-20130723194704-1lsy1kmlda069cea
Tags: 0.99.0+git20130615+97e8335-0ubuntu1
[ Sergio Schvezov ]
* New build from HEAD 97e8335.
* Packaging import from lp:phablet-extras/maliit-framework.

[ Ricardo Salveti de Araujo ]
* debian/control: adding vcs and fixing dependencies
* General package cleanup

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* This file is part of Maliit framework
2
 
 *
3
 
 * Copyright (C) 2012 One Laptop per Child Association
4
 
 *
5
 
 * Contact: maliit-discuss@lists.maliit.org
6
 
 *
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.
11
 
 *
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.
16
 
 *
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.
21
 
 */
22
 
 
23
 
#include <gdk/gdkkeysyms.h>
24
 
 
25
 
#include "actionkeyfilter.h"
26
 
 
27
 
struct _ActionKeyFilter
28
 
{
29
 
    GtkEntry* login;
30
 
    GtkEntry* password;
31
 
 
32
 
    gboolean enter_login_accepts;
33
 
    gboolean enter_password_accepts;
34
 
 
35
 
    guint login_activated_signal_id;
36
 
    guint password_activated_signal_id;
37
 
};
38
 
 
39
 
static GtkWindow *
40
 
get_parent_gtk_window (GtkWidget *widget)
41
 
{
42
 
    if (widget == NULL) {
43
 
        return NULL;
44
 
    } else if (GTK_IS_WINDOW (widget)) {
45
 
        return GTK_WINDOW (widget);
46
 
    } else {
47
 
        return get_parent_gtk_window (gtk_widget_get_parent (widget));
48
 
    }
49
 
}
50
 
 
51
 
static void
52
 
on_entry_activated (ActionKeyFilter *filter,
53
 
                    GtkEntry *entry)
54
 
{
55
 
    GtkWidget* widget;
56
 
 
57
 
    if (filter == NULL || !GTK_IS_ENTRY (entry)) {
58
 
        return;
59
 
    }
60
 
 
61
 
    widget = GTK_WIDGET (entry);
62
 
 
63
 
    if (entry != filter->login && entry != filter->password) {
64
 
        return;
65
 
    }
66
 
 
67
 
    if (entry == filter->login && action_key_filter_get_enter_login_accepts (filter)) {
68
 
        GtkWidget* target_widget = GTK_WIDGET (filter->password);
69
 
 
70
 
        gtk_widget_grab_focus (target_widget);
71
 
        return;
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;
76
 
        GtkWidget *dialog;
77
 
        GtkMessageType message_type;
78
 
 
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;
83
 
        } else {
84
 
            message = "Login successful!";
85
 
            message_type = GTK_MESSAGE_INFO;
86
 
        }
87
 
 
88
 
        dialog = gtk_message_dialog_new (get_parent_gtk_window (widget),
89
 
                                         GTK_DIALOG_DESTROY_WITH_PARENT,
90
 
                                         message_type,
91
 
                                         GTK_BUTTONS_OK,
92
 
                                         "%s",
93
 
                                         message);
94
 
        gtk_dialog_run (GTK_DIALOG (dialog));
95
 
        gtk_widget_destroy (dialog);
96
 
        return;
97
 
    }
98
 
    return;
99
 
}
100
 
 
101
 
ActionKeyFilter *
102
 
action_key_filter_new (GtkEntry *login, GtkEntry *password)
103
 
{
104
 
    ActionKeyFilter *filter;
105
 
 
106
 
    g_return_val_if_fail (GTK_IS_ENTRY (login), NULL);
107
 
    g_return_val_if_fail (GTK_IS_ENTRY (password), NULL);
108
 
 
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;
114
 
 
115
 
    filter->login_activated_signal_id = g_signal_connect_swapped (filter->login,
116
 
                                                                  "activate",
117
 
                                                                  G_CALLBACK (on_entry_activated),
118
 
                                                                  filter);
119
 
 
120
 
    filter->password_activated_signal_id = g_signal_connect_swapped (filter->password,
121
 
                                                                     "activate",
122
 
                                                                     G_CALLBACK (on_entry_activated),
123
 
                                                                     filter);
124
 
 
125
 
    g_object_add_weak_pointer (G_OBJECT (login), (gpointer *)&filter->login);
126
 
    g_object_add_weak_pointer (G_OBJECT (password), (gpointer *)&filter->password);
127
 
 
128
 
    return filter;
129
 
}
130
 
 
131
 
void
132
 
action_key_filter_free (ActionKeyFilter *filter)
133
 
{
134
 
    if (!filter) {
135
 
        return;
136
 
    }
137
 
 
138
 
    if (filter->login) {
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;
142
 
        }
143
 
        g_object_remove_weak_pointer (G_OBJECT (filter->login), (gpointer *)&filter->login);
144
 
        filter->login = NULL;
145
 
    }
146
 
 
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;
151
 
        }
152
 
        g_object_remove_weak_pointer (G_OBJECT (filter->password), (gpointer *)&filter->password);
153
 
        filter->password = NULL;
154
 
    }
155
 
    g_slice_free (ActionKeyFilter, filter);
156
 
}
157
 
 
158
 
gboolean
159
 
action_key_filter_get_enter_login_accepts (ActionKeyFilter *filter)
160
 
{
161
 
    g_return_val_if_fail (filter != NULL, FALSE);
162
 
 
163
 
    return filter->enter_login_accepts;
164
 
}
165
 
 
166
 
void
167
 
action_key_filter_set_enter_login_accepts (ActionKeyFilter *filter,
168
 
                                           gboolean enter_login_accepts)
169
 
{
170
 
    g_return_if_fail (filter != NULL);
171
 
 
172
 
    filter->enter_login_accepts = enter_login_accepts;
173
 
}
174
 
 
175
 
gboolean
176
 
action_key_filter_get_enter_password_accepts (ActionKeyFilter *filter)
177
 
{
178
 
    g_return_val_if_fail (filter != NULL, FALSE);
179
 
 
180
 
    return filter->enter_password_accepts;
181
 
}
182
 
 
183
 
void
184
 
action_key_filter_set_enter_password_accepts (ActionKeyFilter *filter,
185
 
                                              gboolean enter_password_accepts)
186
 
{
187
 
    g_return_if_fail (filter != NULL);
188
 
 
189
 
    filter->enter_password_accepts = enter_password_accepts;
190
 
}