finch/libgnt/gntentry.c

Wed, 30 Jul 2008 03:58:21 +0000

author
Daniel Atallah <datallah@pidgin.im>
date
Wed, 30 Jul 2008 03:58:21 +0000
changeset 23931
8975bb78b51a
parent 23437
e19973073108
child 24631
f3c7b80811c4
permissions
-rw-r--r--

Cleanup unnecessary casts and etc.

17586
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
1 /**
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
2 * GNT - The GLib Ncurses Toolkit
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
3 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
4 * GNT is the legal property of its developers, whose names are too numerous
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
6 * source distribution.
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
7 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
8 * This library is free software; you can redistribute it and/or modify
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
9 * it under the terms of the GNU General Public License as published by
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
11 * (at your option) any later version.
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
12 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
13 * This program is distributed in the hope that it will be useful,
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
16 * GNU General Public License for more details.
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
17 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
18 * You should have received a copy of the GNU General Public License
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19235
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
17586
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
21 */
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16954
diff changeset
22
13950
bd8d39b3a9e2 [gaim-migrate @ 16369]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13944
diff changeset
23 #include <ctype.h>
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
24 #include <string.h>
13950
bd8d39b3a9e2 [gaim-migrate @ 16369]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13944
diff changeset
25
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
26 #include "gntbox.h"
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
27 #include "gntentry.h"
18422
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
28 #include "gntmarshal.h"
14898
107b971b39f2 [gaim-migrate @ 17605]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14890
diff changeset
29 #include "gntstyle.h"
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
30 #include "gnttree.h"
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14371
diff changeset
31 #include "gntutils.h"
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
32
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
33 enum
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
34 {
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
35 SIG_TEXT_CHANGED,
18422
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
36 SIG_COMPLETION,
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
37 SIGS,
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
38 };
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
39
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
40 typedef enum
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
41 {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
42 ENTRY_JAIL = -1, /* Suspend the kill ring. */
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
43 ENTRY_DEL_BWD_WORD = 1,
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
44 ENTRY_DEL_BWD_CHAR,
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
45 ENTRY_DEL_FWD_WORD,
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
46 ENTRY_DEL_FWD_CHAR,
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
47 ENTRY_DEL_EOL,
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
48 ENTRY_DEL_BOL,
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
49 } GntEntryAction;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
50
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
51 struct _GntEntryKillRing
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
52 {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
53 GString *buffer;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
54 GntEntryAction last;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
55 };
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
56
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
57 static guint signals[SIGS] = { 0 };
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
58
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
59 static GntWidgetClass *parent_class = NULL;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
60
16020
dd8e83225ad5 Update the tab completion a little bit. The binding for suggest-show will perform suggest-next if the suggest-dropdown is already showing. If there's just one suggestion, then complete with that suggestion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
61 static gboolean gnt_entry_key_pressed(GntWidget *widget, const char *text);
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
62 static void gnt_entry_set_text_internal(GntEntry *entry, const char *text);
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
63
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
64 static gboolean
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
65 update_kill_ring(GntEntry *entry, GntEntryAction action, const char *text, int len)
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
66 {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
67 if (action < 0) {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
68 entry->killring->last = action;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
69 return FALSE;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
70 }
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
71
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
72 if (len == 0)
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
73 len = strlen(text);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
74 else if (len < 0) {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
75 text += len;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
76 len = -len;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
77 }
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
78
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
79 if (action != entry->killring->last) {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
80 struct {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
81 GntEntryAction one;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
82 GntEntryAction two;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
83 } merges[] = {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
84 {ENTRY_DEL_BWD_WORD, ENTRY_DEL_FWD_WORD},
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
85 {ENTRY_DEL_BWD_CHAR, ENTRY_DEL_FWD_CHAR},
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
86 {ENTRY_DEL_BOL, ENTRY_DEL_EOL},
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
87 {ENTRY_JAIL, ENTRY_JAIL},
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
88 };
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
89 int i;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
90
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
91 for (i = 0; merges[i].one != ENTRY_JAIL; i++) {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
92 if (merges[i].one == entry->killring->last &&
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
93 merges[i].two == action) {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
94 g_string_append_len(entry->killring->buffer, text, len);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
95 break;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
96 } else if (merges[i].one == action &&
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
97 merges[i].two == entry->killring->last) {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
98 g_string_prepend_len(entry->killring->buffer, text, len);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
99 break;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
100 }
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
101 }
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
102 if (merges[i].one == ENTRY_JAIL) {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
103 g_string_assign(entry->killring->buffer, text);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
104 g_string_truncate(entry->killring->buffer, len);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
105 }
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
106 entry->killring->last = action;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
107 } else {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
108 if (action == ENTRY_DEL_BWD_CHAR || action == ENTRY_DEL_BWD_WORD)
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
109 g_string_prepend_len(entry->killring->buffer, text, len);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
110 else
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
111 g_string_append_len(entry->killring->buffer, text, len);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
112 }
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
113 return TRUE;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
114 }
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
115
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
116 static void
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
117 destroy_suggest(GntEntry *entry)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
118 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
119 if (entry->ddown)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
120 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
121 gnt_widget_destroy(entry->ddown->parent);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
122 entry->ddown = NULL;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
123 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
124 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
125
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
126 static char *
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
127 get_beginning_of_word(GntEntry *entry)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
128 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
129 char *s = entry->cursor;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
130 while (s > entry->start)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
131 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
132 char *t = g_utf8_find_prev_char(entry->start, s);
14640
9f0f2bbbc4e2 [gaim-migrate @ 17302]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14539
diff changeset
133 if (isspace(*t))
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
134 break;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
135 s = t;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
136 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
137 return s;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
138 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
139
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
140 static gboolean
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
141 complete_suggest(GntEntry *entry, const char *text)
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
142 {
18422
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
143 int offstart = 0, offend = 0;
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
144
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
145 if (entry->word) {
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
146 char *s = get_beginning_of_word(entry);
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
147 const char *iter = text;
18422
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
148 offstart = g_utf8_pointer_to_offset(entry->start, s);
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
149 while (*iter && toupper(*s) == toupper(*iter)) {
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
150 *s++ = *iter++;
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
151 }
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
152 if (*iter) {
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
153 gnt_entry_key_pressed(GNT_WIDGET(entry), iter);
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
154 }
18422
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
155 offend = g_utf8_pointer_to_offset(entry->start, entry->cursor);
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
156 } else {
18422
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
157 offstart = 0;
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
158 gnt_entry_set_text_internal(entry, text);
18422
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
159 offend = g_utf8_strlen(text, -1);
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
160 }
18422
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
161
21812
7aaff7db5310 Emit the 'completion' signal when tab is pressed from a suggest word.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21725
diff changeset
162 g_signal_emit(G_OBJECT(entry), signals[SIG_COMPLETION], 0,
7aaff7db5310 Emit the 'completion' signal when tab is pressed from a suggest word.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21725
diff changeset
163 entry->start + offstart, entry->start + offend);
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
164 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
21812
7aaff7db5310 Emit the 'completion' signal when tab is pressed from a suggest word.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21725
diff changeset
165 return TRUE;
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
166 }
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
167
20351
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
168 static int
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
169 max_common_prefix(const char *s, const char *t)
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
170 {
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
171 const char *f = s;
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
172 while (*f && *t && *f == *t++)
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
173 f++;
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
174 return f - s;
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
175 }
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
176
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
177 static gboolean
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
178 show_suggest_dropdown(GntEntry *entry)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
179 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
180 char *suggest = NULL;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
181 int len;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
182 int offset = 0, x, y;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
183 int count = 0;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
184 GList *iter;
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
185 const char *text = NULL;
16954
b6488f782355 Fix tab-completion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16945
diff changeset
186 const char *sgst = NULL;
20351
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
187 int max = -1;
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
188
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
189 if (entry->word)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
190 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
191 char *s = get_beginning_of_word(entry);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
192 suggest = g_strndup(s, entry->cursor - s);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
193 if (entry->scroll < s)
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14371
diff changeset
194 offset = gnt_util_onscreen_width(entry->scroll, s);
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
195 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
196 else
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
197 suggest = g_strdup(entry->start);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
198 len = strlen(suggest); /* Don't need to use the utf8-function here */
20351
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
199
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
200 if (entry->ddown == NULL)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
201 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
202 GntWidget *box = gnt_vbox_new(FALSE);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
203 entry->ddown = gnt_tree_new();
14167
ca6027c33d2c [gaim-migrate @ 16739]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14156
diff changeset
204 gnt_tree_set_compare_func(GNT_TREE(entry->ddown), (GCompareFunc)g_utf8_collate);
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
205 gnt_box_add_widget(GNT_BOX(box), entry->ddown);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
206
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
207 GNT_WIDGET_SET_FLAGS(box, GNT_WIDGET_TRANSIENT);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
208
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
209 gnt_widget_get_position(GNT_WIDGET(entry), &x, &y);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
210 x += offset;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
211 y++;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
212 if (y + 10 >= getmaxy(stdscr))
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
213 y -= 11;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
214 gnt_widget_set_position(box, x, y);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
215 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
216 else
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
217 gnt_tree_remove_all(GNT_TREE(entry->ddown));
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
218
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
219 for (count = 0, iter = entry->suggests; iter; iter = iter->next)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
220 {
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
221 text = iter->data;
14156
aacb0581eaf6 [gaim-migrate @ 16723]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14153
diff changeset
222 if (g_ascii_strncasecmp(suggest, text, len) == 0 && strlen(text) >= len)
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
223 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
224 gnt_tree_add_row_after(GNT_TREE(entry->ddown), (gpointer)text,
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
225 gnt_tree_create_row(GNT_TREE(entry->ddown), text),
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
226 NULL, NULL);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
227 count++;
20351
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
228 if (max == -1)
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
229 max = strlen(text) - len;
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
230 else if (max)
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
231 max = MIN(max, max_common_prefix(sgst + len, text + len));
16954
b6488f782355 Fix tab-completion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16945
diff changeset
232 sgst = text;
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
233 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
234 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
235 g_free(suggest);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
236
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
237 if (count == 0) {
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
238 destroy_suggest(entry);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
239 return FALSE;
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
240 } else if (count == 1) {
22841
1deb0300b15e Return FALSE when nothing changes after an attempted tab-completion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22571
diff changeset
241 char *store = g_strndup(entry->start, entry->end - entry->start);
1deb0300b15e Return FALSE when nothing changes after an attempted tab-completion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22571
diff changeset
242 gboolean ret;
1deb0300b15e Return FALSE when nothing changes after an attempted tab-completion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22571
diff changeset
243
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
244 destroy_suggest(entry);
22841
1deb0300b15e Return FALSE when nothing changes after an attempted tab-completion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22571
diff changeset
245 complete_suggest(entry, sgst);
1deb0300b15e Return FALSE when nothing changes after an attempted tab-completion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22571
diff changeset
246
1deb0300b15e Return FALSE when nothing changes after an attempted tab-completion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22571
diff changeset
247 ret = (strncmp(store, entry->start, entry->end - entry->start) != 0);
1deb0300b15e Return FALSE when nothing changes after an attempted tab-completion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22571
diff changeset
248 g_free(store);
1deb0300b15e Return FALSE when nothing changes after an attempted tab-completion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22571
diff changeset
249 return ret;
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
250 } else {
20351
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
251 if (max > 0) {
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
252 GntWidget *ddown = entry->ddown;
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
253 char *match = g_strndup(sgst + len, max);
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
254 entry->ddown = NULL;
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
255 gnt_entry_key_pressed(GNT_WIDGET(entry), match);
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
256 g_free(match);
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
257 if (entry->ddown)
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
258 gnt_widget_destroy(ddown);
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
259 else
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
260 entry->ddown = ddown;
83f3c26afa02 Tab-complete as much as possible when there are multiple suggests.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
261 }
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
262 gnt_widget_draw(entry->ddown->parent);
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
263 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
264
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
265 return TRUE;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
266 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
267
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
268 static void
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
269 gnt_entry_draw(GntWidget *widget)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
270 {
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
271 GntEntry *entry = GNT_ENTRY(widget);
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
272 int stop;
14103
bcac61d40461 [gaim-migrate @ 16647]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14093
diff changeset
273 gboolean focus;
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
274
14103
bcac61d40461 [gaim-migrate @ 16647]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14093
diff changeset
275 if ((focus = gnt_widget_has_focus(widget)))
21240
b78eaddaae02 Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20351
diff changeset
276 wbkgdset(widget->window, '\0' | gnt_color_pair(GNT_COLOR_TEXT_NORMAL));
13958
bd1c3bb3f33d [gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13950
diff changeset
277 else
21240
b78eaddaae02 Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20351
diff changeset
278 wbkgdset(widget->window, '\0' | gnt_color_pair(GNT_COLOR_HIGHLIGHT_D));
14041
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14005
diff changeset
279
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14005
diff changeset
280 if (entry->masked)
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14005
diff changeset
281 {
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14005
diff changeset
282 mvwhline(widget->window, 0, 0, gnt_ascii_only() ? '*' : ACS_BULLET,
14090
a8552e906a76 [gaim-migrate @ 16630]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14041
diff changeset
283 g_utf8_pointer_to_offset(entry->scroll, entry->end));
14041
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14005
diff changeset
284 }
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14005
diff changeset
285 else
14369
e9a9ac6bd8de [gaim-migrate @ 16997]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14318
diff changeset
286 mvwprintw(widget->window, 0, 0, "%s", entry->scroll);
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
287
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14371
diff changeset
288 stop = gnt_util_onscreen_width(entry->scroll, entry->end);
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
289 if (stop < widget->priv.width)
18401
416ff3a69f61 Draw the password entries correctly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
290 mvwhline(widget->window, 0, stop, ENTRY_CHAR, widget->priv.width - stop);
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
291
14103
bcac61d40461 [gaim-migrate @ 16647]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14093
diff changeset
292 if (focus)
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14371
diff changeset
293 mvwchgat(widget->window, 0, gnt_util_onscreen_width(entry->scroll, entry->cursor),
14687
46437fa5eebe [gaim-migrate @ 17357]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14640
diff changeset
294 1, A_REVERSE, GNT_COLOR_TEXT_NORMAL, NULL);
14090
a8552e906a76 [gaim-migrate @ 16630]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14041
diff changeset
295
14494
3575eac3a518 [gaim-migrate @ 17146]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14413
diff changeset
296 GNTDEBUG;
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
297 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
298
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
299 static void
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
300 gnt_entry_size_request(GntWidget *widget)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
301 {
13944
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
302 if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_MAPPED))
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
303 {
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
304 widget->priv.height = 1;
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
305 widget->priv.width = 20;
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
306 }
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
307 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
308
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
309 static void
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
310 gnt_entry_map(GntWidget *widget)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
311 {
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
312 if (widget->priv.width == 0 || widget->priv.height == 0)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
313 gnt_widget_size_request(widget);
14494
3575eac3a518 [gaim-migrate @ 17146]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14413
diff changeset
314 GNTDEBUG;
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
315 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
316
13944
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
317 static void
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
318 entry_redraw(GntWidget *widget)
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
319 {
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
320 gnt_entry_draw(widget);
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
321 gnt_widget_queue_update(widget);
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
322 }
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
323
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
324 static void
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
325 entry_text_changed(GntEntry *entry)
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
326 {
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
327 g_signal_emit(entry, signals[SIG_TEXT_CHANGED], 0);
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
328 }
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
329
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
330 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
331 move_back(GntBindable *bind, GList *null)
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
332 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
333 GntEntry *entry = GNT_ENTRY(bind);
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
334 if (entry->cursor <= entry->start)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
335 return FALSE;
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
336 entry->cursor = g_utf8_find_prev_char(entry->start, entry->cursor);
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
337 if (entry->cursor < entry->scroll)
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
338 entry->scroll = entry->cursor;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
339 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
340 entry_redraw(GNT_WIDGET(entry));
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
341 return TRUE;
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
342 }
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
343
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
344 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
345 move_forward(GntBindable *bind, GList *list)
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
346 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
347 GntEntry *entry = GNT_ENTRY(bind);
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
348 if (entry->cursor >= entry->end)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
349 return FALSE;
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
350 entry->cursor = g_utf8_find_next_char(entry->cursor, NULL);
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14371
diff changeset
351 while (gnt_util_onscreen_width(entry->scroll, entry->cursor) >= GNT_WIDGET(entry)->priv.width)
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
352 entry->scroll = g_utf8_find_next_char(entry->scroll, NULL);
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
353 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
354 entry_redraw(GNT_WIDGET(entry));
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
355 return TRUE;
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
356 }
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
357
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
358 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
359 backspace(GntBindable *bind, GList *null)
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
360 {
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
361 int len;
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
362 GntEntry *entry = GNT_ENTRY(bind);
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
363
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
364 if (entry->cursor <= entry->start)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
365 return TRUE;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
366
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
367 len = entry->cursor - g_utf8_find_prev_char(entry->start, entry->cursor);
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
368 update_kill_ring(entry, ENTRY_DEL_BWD_CHAR, entry->cursor, -len);
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
369 entry->cursor -= len;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
370
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
371 memmove(entry->cursor, entry->cursor + len, entry->end - entry->cursor);
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
372 entry->end -= len;
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
373
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
374 if (entry->scroll > entry->start)
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
375 entry->scroll = g_utf8_find_prev_char(entry->start, entry->scroll);
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
376
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
377 entry_redraw(GNT_WIDGET(entry));
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
378 if (entry->ddown)
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
379 show_suggest_dropdown(entry);
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
380 entry_text_changed(entry);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
381 return TRUE;
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
382 }
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
383
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
384 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
385 delkey(GntBindable *bind, GList *null)
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
386 {
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
387 int len;
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
388 GntEntry *entry = GNT_ENTRY(bind);
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
389
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
390 if (entry->cursor >= entry->end)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
391 return FALSE;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
392
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
393 len = g_utf8_find_next_char(entry->cursor, NULL) - entry->cursor;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
394 update_kill_ring(entry, ENTRY_DEL_FWD_CHAR, entry->cursor, len);
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
395 memmove(entry->cursor, entry->cursor + len, entry->end - entry->cursor - len + 1);
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
396 entry->end -= len;
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
397 entry_redraw(GNT_WIDGET(entry));
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
398
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
399 if (entry->ddown)
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
400 show_suggest_dropdown(entry);
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
401 entry_text_changed(entry);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
402 return TRUE;
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
403 }
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
404
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
405 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
406 move_start(GntBindable *bind, GList *null)
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
407 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
408 GntEntry *entry = GNT_ENTRY(bind);
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
409 entry->scroll = entry->cursor = entry->start;
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
410 entry_redraw(GNT_WIDGET(entry));
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
411 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
412 return TRUE;
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
413 }
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
414
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
415 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
416 move_end(GntBindable *bind, GList *null)
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
417 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
418 GntEntry *entry = GNT_ENTRY(bind);
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
419 entry->cursor = entry->end;
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
420 /* This should be better than this */
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14371
diff changeset
421 while (gnt_util_onscreen_width(entry->scroll, entry->cursor) >= GNT_WIDGET(entry)->priv.width)
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
422 entry->scroll = g_utf8_find_next_char(entry->scroll, NULL);
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
423 entry_redraw(GNT_WIDGET(entry));
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
424 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
425 return TRUE;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
426 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
427
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
428 static gboolean
22571
d3380ab76d21 The names history-next and history-prev were backwards! Make them right, and add c-n/c-p bindings as the default bindings. Thanks to shofixti for reporting the bug. Fixes #4593.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22421
diff changeset
429 history_next(GntBindable *bind, GList *null)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
430 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
431 GntEntry *entry = GNT_ENTRY(bind);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
432 if (entry->histlength && entry->history->prev)
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
433 {
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
434 entry->history = entry->history->prev;
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
435 gnt_entry_set_text_internal(entry, entry->history->data);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
436 destroy_suggest(entry);
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
437 entry_text_changed(entry);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
438
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
439 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
440 return TRUE;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
441 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
442 return FALSE;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
443 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
444
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
445 static gboolean
22571
d3380ab76d21 The names history-next and history-prev were backwards! Make them right, and add c-n/c-p bindings as the default bindings. Thanks to shofixti for reporting the bug. Fixes #4593.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22421
diff changeset
446 history_prev(GntBindable *bind, GList *null)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
447 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
448 GntEntry *entry = GNT_ENTRY(bind);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
449 if (entry->histlength && entry->history->next)
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
450 {
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
451 if (entry->history->prev == NULL)
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
452 {
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
453 /* Save the current contents */
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
454 char *text = g_strdup(gnt_entry_get_text(entry));
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
455 g_free(entry->history->data);
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
456 entry->history->data = text;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
457 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
458
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
459 entry->history = entry->history->next;
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
460 gnt_entry_set_text_internal(entry, entry->history->data);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
461 destroy_suggest(entry);
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
462 entry_text_changed(entry);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
463
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
464 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
465 return TRUE;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
466 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
467 return FALSE;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
468 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
469
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
470 static gboolean
15814
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
471 clipboard_paste(GntBindable *bind, GList *n)
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
472 {
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
473 GntEntry *entry = GNT_ENTRY(bind);
15838
45289a1439b2 Get rid of some minor C99isms
Mark Doliner <markdoliner@pidgin.im>
parents: 15837
diff changeset
474 gchar *i, *text, *a, *all;
45289a1439b2 Get rid of some minor C99isms
Mark Doliner <markdoliner@pidgin.im>
parents: 15837
diff changeset
475 text = i = gnt_get_clipboard_string();
15814
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
476 while (*i != '\0') {
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
477 i = g_utf8_next_char(i);
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
478 if (*i == '\r' || *i == '\n')
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
479 *i = ' ';
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
480 }
15838
45289a1439b2 Get rid of some minor C99isms
Mark Doliner <markdoliner@pidgin.im>
parents: 15837
diff changeset
481 a = g_strndup(entry->start, entry->cursor - entry->start);
45289a1439b2 Get rid of some minor C99isms
Mark Doliner <markdoliner@pidgin.im>
parents: 15837
diff changeset
482 all = g_strconcat(a, text, entry->cursor, NULL);
15814
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
483 gnt_entry_set_text_internal(entry, all);
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
484 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
15814
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
485 g_free(a);
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
486 g_free(text);
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
487 g_free(all);
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
488 return TRUE;
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
489 }
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
490
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
491 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
492 suggest_show(GntBindable *bind, GList *null)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
493 {
16020
dd8e83225ad5 Update the tab completion a little bit. The binding for suggest-show will perform suggest-next if the suggest-dropdown is already showing. If there's just one suggestion, then complete with that suggestion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
494 GntEntry *entry = GNT_ENTRY(bind);
dd8e83225ad5 Update the tab completion a little bit. The binding for suggest-show will perform suggest-next if the suggest-dropdown is already showing. If there's just one suggestion, then complete with that suggestion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
495 if (entry->ddown) {
16945
ac3a37a76525 Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16020
diff changeset
496 gnt_bindable_perform_action_named(GNT_BINDABLE(entry->ddown), "move-down");
16020
dd8e83225ad5 Update the tab completion a little bit. The binding for suggest-show will perform suggest-next if the suggest-dropdown is already showing. If there's just one suggestion, then complete with that suggestion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
497 return TRUE;
dd8e83225ad5 Update the tab completion a little bit. The binding for suggest-show will perform suggest-next if the suggest-dropdown is already showing. If there's just one suggestion, then complete with that suggestion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
498 }
dd8e83225ad5 Update the tab completion a little bit. The binding for suggest-show will perform suggest-next if the suggest-dropdown is already showing. If there's just one suggestion, then complete with that suggestion.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
499 return show_suggest_dropdown(entry);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
500 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
501
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
502 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
503 suggest_next(GntBindable *bind, GList *null)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
504 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
505 GntEntry *entry = GNT_ENTRY(bind);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
506 if (entry->ddown) {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
507 gnt_bindable_perform_action_named(GNT_BINDABLE(entry->ddown), "move-down", NULL);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
508 return TRUE;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
509 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
510 return FALSE;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
511 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
512
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
513 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
514 suggest_prev(GntBindable *bind, GList *null)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
515 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
516 GntEntry *entry = GNT_ENTRY(bind);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
517 if (entry->ddown) {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
518 gnt_bindable_perform_action_named(GNT_BINDABLE(entry->ddown), "move-up", NULL);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
519 return TRUE;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
520 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
521 return FALSE;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
522 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
523
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
524 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
525 del_to_home(GntBindable *bind, GList *null)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
526 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
527 GntEntry *entry = GNT_ENTRY(bind);
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
528 if (entry->cursor <= entry->start)
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
529 return TRUE;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
530 update_kill_ring(entry, ENTRY_DEL_BOL, entry->start, entry->cursor - entry->start);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
531 memmove(entry->start, entry->cursor, entry->end - entry->cursor);
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
532 entry->end -= (entry->cursor - entry->start);
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
533 entry->cursor = entry->scroll = entry->start;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
534 memset(entry->end, '\0', entry->buffer - (entry->end - entry->start));
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
535 entry_redraw(GNT_WIDGET(bind));
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
536 entry_text_changed(entry);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
537 return TRUE;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
538 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
539
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
540 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
541 del_to_end(GntBindable *bind, GList *null)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
542 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
543 GntEntry *entry = GNT_ENTRY(bind);
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
544 if (entry->end <= entry->cursor)
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
545 return TRUE;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
546 update_kill_ring(entry, ENTRY_DEL_EOL, entry->cursor, entry->end - entry->cursor);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
547 entry->end = entry->cursor;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
548 memset(entry->end, '\0', entry->buffer - (entry->end - entry->start));
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
549 entry_redraw(GNT_WIDGET(bind));
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
550 entry_text_changed(entry);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
551 return TRUE;
14275
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
552 }
ef418684623d [gaim-migrate @ 16894]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14167
diff changeset
553
23317
dba466df7ed0 Treat digits and alphabets as the same class of characters when looking
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23065
diff changeset
554 #define SAME(a,b) ((g_unichar_isalnum(a) && g_unichar_isalnum(b)) || \
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
555 (g_unichar_isspace(a) && g_unichar_isspace(b)) || \
23317
dba466df7ed0 Treat digits and alphabets as the same class of characters when looking
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23065
diff changeset
556 (g_unichar_iswide(a) && g_unichar_iswide(b)) || \
dba466df7ed0 Treat digits and alphabets as the same class of characters when looking
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23065
diff changeset
557 (g_unichar_ispunct(a) && g_unichar_ispunct(b)))
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
558
14890
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
559 static const char *
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
560 begin_word(const char *text, const char *begin)
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
561 {
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
562 gunichar ch = 0;
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
563 while (text > begin && (!*text || g_unichar_isspace(g_utf8_get_char(text))))
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
564 text = g_utf8_find_prev_char(begin, text);
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
565 ch = g_utf8_get_char(text);
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
566 while ((text = g_utf8_find_prev_char(begin, text)) >= begin) {
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
567 gunichar cur = g_utf8_get_char(text);
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
568 if (!SAME(ch, cur))
14890
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
569 break;
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
570 }
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
571
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
572 return (text ? g_utf8_find_next_char(text, NULL) : begin);
14890
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
573 }
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
574
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
575 static const char *
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
576 next_begin_word(const char *text, const char *end)
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
577 {
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
578 gunichar ch = 0;
21725
68ec08d05ff4 Pluck some bug-fixes for finch/gnt for the bug-fix release.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21270
diff changeset
579
68ec08d05ff4 Pluck some bug-fixes for finch/gnt for the bug-fix release.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21270
diff changeset
580 while (text && text < end && g_unichar_isspace(g_utf8_get_char(text)))
68ec08d05ff4 Pluck some bug-fixes for finch/gnt for the bug-fix release.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21270
diff changeset
581 text = g_utf8_find_next_char(text, end);
68ec08d05ff4 Pluck some bug-fixes for finch/gnt for the bug-fix release.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21270
diff changeset
582
23437
e19973073108 Fixes a crash when next_begin_word is called on trailing spaces at the
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23317
diff changeset
583 if (text) {
e19973073108 Fixes a crash when next_begin_word is called on trailing spaces at the
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23317
diff changeset
584 ch = g_utf8_get_char(text);
e19973073108 Fixes a crash when next_begin_word is called on trailing spaces at the
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23317
diff changeset
585 while ((text = g_utf8_find_next_char(text, end)) != NULL && text <= end) {
e19973073108 Fixes a crash when next_begin_word is called on trailing spaces at the
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23317
diff changeset
586 gunichar cur = g_utf8_get_char(text);
e19973073108 Fixes a crash when next_begin_word is called on trailing spaces at the
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23317
diff changeset
587 if (!SAME(ch, cur))
e19973073108 Fixes a crash when next_begin_word is called on trailing spaces at the
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23317
diff changeset
588 break;
e19973073108 Fixes a crash when next_begin_word is called on trailing spaces at the
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23317
diff changeset
589 }
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
590 }
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
591 return (text ? text : end);
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
592 }
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
593
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
594 #undef SAME
14890
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
595 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
596 move_back_word(GntBindable *bind, GList *null)
14890
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
597 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
598 GntEntry *entry = GNT_ENTRY(bind);
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
599 const char *iter = g_utf8_find_prev_char(entry->start, entry->cursor);
14890
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
600
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
601 if (iter < entry->start)
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
602 return TRUE;
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
603 iter = begin_word(iter, entry->start);
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
604 entry->cursor = (char*)iter;
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
605 if (entry->cursor < entry->scroll)
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
606 entry->scroll = entry->cursor;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
607 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
608 entry_redraw(GNT_WIDGET(bind));
14890
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
609 return TRUE;
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
610 }
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
611
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
612 static gboolean
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
613 del_prev_word(GntBindable *bind, GList *null)
14890
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
614 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
615 GntWidget *widget = GNT_WIDGET(bind);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
616 GntEntry *entry = GNT_ENTRY(bind);
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
617 char *iter = g_utf8_find_prev_char(entry->start, entry->cursor);
14890
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
618 int count;
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
619
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
620 if (iter < entry->start)
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
621 return TRUE;
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
622 iter = (char*)begin_word(iter, entry->start);
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
623 count = entry->cursor - iter;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
624 update_kill_ring(entry, ENTRY_DEL_BWD_WORD, iter, count);
14890
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
625 memmove(iter, entry->cursor, entry->end - entry->cursor);
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
626 entry->end -= count;
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
627 entry->cursor = iter;
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
628 if (entry->cursor <= entry->scroll) {
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
629 entry->scroll = entry->cursor - widget->priv.width + 2;
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
630 if (entry->scroll < entry->start)
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
631 entry->scroll = entry->start;
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
632 }
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
633 memset(entry->end, '\0', entry->buffer - (entry->end - entry->start));
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
634 entry_redraw(widget);
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
635 entry_text_changed(entry);
14890
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
636
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
637 return TRUE;
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
638 }
78c01aad3cfa [gaim-migrate @ 17595]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14889
diff changeset
639
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
640 static gboolean
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
641 move_forward_word(GntBindable *bind, GList *list)
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
642 {
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
643 GntEntry *entry = GNT_ENTRY(bind);
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
644 GntWidget *widget = GNT_WIDGET(bind);
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
645 entry->cursor = (char *)next_begin_word(entry->cursor, entry->end);
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
646 while (gnt_util_onscreen_width(entry->scroll, entry->cursor) >= widget->priv.width) {
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
647 entry->scroll = g_utf8_find_next_char(entry->scroll, NULL);
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
648 }
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
649 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
650 entry_redraw(widget);
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
651 return TRUE;
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
652 }
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
653
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
654 static gboolean
15187
841272d50d22 [gaim-migrate @ 17911]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15186
diff changeset
655 delete_forward_word(GntBindable *bind, GList *list)
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
656 {
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
657 GntEntry *entry = GNT_ENTRY(bind);
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
658 GntWidget *widget = GNT_WIDGET(bind);
15187
841272d50d22 [gaim-migrate @ 17911]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15186
diff changeset
659 char *iter = (char *)next_begin_word(entry->cursor, entry->end);
841272d50d22 [gaim-migrate @ 17911]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15186
diff changeset
660 int len = entry->end - iter + 1;
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
661 if (len <= 0)
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
662 return TRUE;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
663 update_kill_ring(entry, ENTRY_DEL_FWD_WORD, entry->cursor, iter - entry->cursor);
15187
841272d50d22 [gaim-migrate @ 17911]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15186
diff changeset
664 memmove(entry->cursor, iter, len);
841272d50d22 [gaim-migrate @ 17911]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15186
diff changeset
665 len = iter - entry->cursor;
841272d50d22 [gaim-migrate @ 17911]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15186
diff changeset
666 entry->end -= len;
841272d50d22 [gaim-migrate @ 17911]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15186
diff changeset
667 memset(entry->end, '\0', len);
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
668 entry_redraw(widget);
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
669 entry_text_changed(entry);
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
670 return TRUE;
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
671 }
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
672
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
673 static gboolean
21252
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
674 transpose_chars(GntBindable *bind, GList *null)
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
675 {
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
676 GntEntry *entry = GNT_ENTRY(bind);
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
677 char *current, *prev;
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
678 char hold[8]; /* that's right */
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
679
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
680 if (entry->cursor <= entry->start)
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
681 return FALSE;
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
682
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
683 if (!*entry->cursor)
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
684 entry->cursor = g_utf8_find_prev_char(entry->start, entry->cursor);
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
685
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
686 current = entry->cursor;
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
687 prev = g_utf8_find_prev_char(entry->start, entry->cursor);
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
688 move_forward(bind, null);
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
689
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
690 /* Let's do this dance! */
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
691 memcpy(hold, prev, current - prev);
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
692 memmove(prev, current, entry->cursor - current);
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
693 memcpy(prev + (entry->cursor - current), hold, current - prev);
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
694
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
695 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
21252
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
696 entry_redraw(GNT_WIDGET(entry));
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
697 entry_text_changed(entry);
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
698 return TRUE;
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
699 }
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
700
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
701 static gboolean
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
702 entry_yank(GntBindable *bind, GList *null)
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
703 {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
704 GntEntry *entry = GNT_ENTRY(bind);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
705 gnt_entry_key_pressed(GNT_WIDGET(entry), entry->killring->buffer->str);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
706 return TRUE;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
707 }
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
708
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
709 static gboolean
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
710 gnt_entry_key_pressed(GntWidget *widget, const char *text)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
711 {
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
712 GntEntry *entry = GNT_ENTRY(widget);
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
713
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
714 if (text[0] == 27)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
715 {
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
716 if (text[1] == 0)
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
717 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
718 destroy_suggest(entry);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
719 return TRUE;
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
720 }
14005
198d1658b390 [gaim-migrate @ 16480]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13992
diff changeset
721
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
722 return FALSE;
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
723 }
21270
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
724
22421
ccddf3ffaf41 '\n' (ctrl-j) should behave similar to '\r' (ctrl-m). Fixes #4833.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22104
diff changeset
725 if ((text[0] == '\r' || text[0] == ' ' || text[0] == '\n') && entry->ddown)
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
726 {
21270
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
727 char *text = g_strdup(gnt_tree_get_selection_data(GNT_TREE(entry->ddown)));
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
728 destroy_suggest(entry);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
729 complete_suggest(entry, text);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
730 g_free(text);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
731 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
732 entry_text_changed(entry);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
733 return TRUE;
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
734 }
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
735
21270
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
736 if (!iscntrl(text[0]))
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
737 {
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
738 const char *str, *next;
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
739
21270
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
740 for (str = text; *str; str = next)
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
741 {
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
742 int len;
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
743 next = g_utf8_find_next_char(str, NULL);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
744 len = next - str;
14090
a8552e906a76 [gaim-migrate @ 16630]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14041
diff changeset
745
21270
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
746 /* Valid input? */
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
747 /* XXX: Is it necessary to use _unichar_ variants here? */
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
748 if (ispunct(*str) && (entry->flag & GNT_ENTRY_FLAG_NO_PUNCT))
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
749 continue;
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
750 if (isspace(*str) && (entry->flag & GNT_ENTRY_FLAG_NO_SPACE))
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
751 continue;
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
752 if (isalpha(*str) && !(entry->flag & GNT_ENTRY_FLAG_ALPHA))
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
753 continue;
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
754 if (isdigit(*str) && !(entry->flag & GNT_ENTRY_FLAG_INT))
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
755 continue;
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
756
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
757 /* Reached the max? */
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
758 if (entry->max && g_utf8_pointer_to_offset(entry->start, entry->end) >= entry->max)
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
759 continue;
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
760
21270
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
761 if (entry->end + len - entry->start >= entry->buffer)
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
762 {
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
763 /* This will cause the buffer to grow */
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
764 char *tmp = g_strdup(entry->start);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
765 gnt_entry_set_text_internal(entry, tmp);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
766 g_free(tmp);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
767 }
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
768
21270
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
769 memmove(entry->cursor + len, entry->cursor, entry->end - entry->cursor + 1);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
770 entry->end += len;
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
771
21270
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
772 while (str < next)
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
773 {
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
774 if (*str == '\r' || *str == '\n')
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
775 *entry->cursor = ' ';
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
776 else
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
777 *entry->cursor = *str;
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
778 entry->cursor++;
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
779 str++;
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
780 }
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
781
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
782 while (gnt_util_onscreen_width(entry->scroll, entry->cursor) >= widget->priv.width)
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
783 entry->scroll = g_utf8_find_next_char(entry->scroll, NULL);
14090
a8552e906a76 [gaim-migrate @ 16630]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14041
diff changeset
784
21270
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
785 if (entry->ddown)
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
786 show_suggest_dropdown(entry);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
787 }
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
788 update_kill_ring(entry, ENTRY_JAIL, NULL, 0);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
789 entry_redraw(widget);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
790 entry_text_changed(entry);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
791 return TRUE;
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
792 }
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
793
22421
ccddf3ffaf41 '\n' (ctrl-j) should behave similar to '\r' (ctrl-m). Fixes #4833.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22104
diff changeset
794 if (text[0] == '\r' || text[0] == '\n') {
21270
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
795 gnt_widget_activate(widget);
9393270c30f0 Hitting Return in the entry will trigger the 'activate' signal.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21256
diff changeset
796 return TRUE;
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
797 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
798
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
799 return FALSE;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
800 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
801
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
802 static void
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
803 jail_killring(GntEntryKillRing *kr)
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
804 {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
805 g_string_free(kr->buffer, TRUE);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
806 g_free(kr);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
807 }
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
808
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
809 static void
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
810 gnt_entry_destroy(GntWidget *widget)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
811 {
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
812 GntEntry *entry = GNT_ENTRY(widget);
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
813 g_free(entry->start);
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
814
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
815 if (entry->history)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
816 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
817 entry->history = g_list_first(entry->history);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
818 g_list_foreach(entry->history, (GFunc)g_free, NULL);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
819 g_list_free(entry->history);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
820 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
821
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
822 if (entry->suggests)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
823 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
824 g_list_foreach(entry->suggests, (GFunc)g_free, NULL);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
825 g_list_free(entry->suggests);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
826 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
827
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
828 if (entry->ddown)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
829 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
830 gnt_widget_destroy(entry->ddown->parent);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
831 }
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
832
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
833 jail_killring(entry->killring);
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
834 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
835
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
836 static void
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
837 gnt_entry_lost_focus(GntWidget *widget)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
838 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
839 GntEntry *entry = GNT_ENTRY(widget);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
840 destroy_suggest(entry);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
841 entry_redraw(widget);
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
842 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
843
23065
a8837cc467b8 Middle click pastes the internal clipboard
Richard Nelson <wabz@pidgin.im>
parents: 22841
diff changeset
844 static gboolean
a8837cc467b8 Middle click pastes the internal clipboard
Richard Nelson <wabz@pidgin.im>
parents: 22841
diff changeset
845 gnt_entry_clicked(GntWidget *widget, GntMouseEvent event, int x, int y)
a8837cc467b8 Middle click pastes the internal clipboard
Richard Nelson <wabz@pidgin.im>
parents: 22841
diff changeset
846 {
a8837cc467b8 Middle click pastes the internal clipboard
Richard Nelson <wabz@pidgin.im>
parents: 22841
diff changeset
847 if (event == GNT_MIDDLE_MOUSE_DOWN) {
a8837cc467b8 Middle click pastes the internal clipboard
Richard Nelson <wabz@pidgin.im>
parents: 22841
diff changeset
848 clipboard_paste(GNT_BINDABLE(widget), NULL);
a8837cc467b8 Middle click pastes the internal clipboard
Richard Nelson <wabz@pidgin.im>
parents: 22841
diff changeset
849 return TRUE;
a8837cc467b8 Middle click pastes the internal clipboard
Richard Nelson <wabz@pidgin.im>
parents: 22841
diff changeset
850 }
a8837cc467b8 Middle click pastes the internal clipboard
Richard Nelson <wabz@pidgin.im>
parents: 22841
diff changeset
851 return FALSE;
a8837cc467b8 Middle click pastes the internal clipboard
Richard Nelson <wabz@pidgin.im>
parents: 22841
diff changeset
852
a8837cc467b8 Middle click pastes the internal clipboard
Richard Nelson <wabz@pidgin.im>
parents: 22841
diff changeset
853 }
a8837cc467b8 Middle click pastes the internal clipboard
Richard Nelson <wabz@pidgin.im>
parents: 22841
diff changeset
854
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
855 static void
13922
7195a6fe2416 [gaim-migrate @ 16321]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13917
diff changeset
856 gnt_entry_class_init(GntEntryClass *klass)
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
857 {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
858 GntBindableClass *bindable = GNT_BINDABLE_CLASS(klass);
14963
1c783f0acfa9 [gaim-migrate @ 17673]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14962
diff changeset
859 char s[2] = {erasechar(), 0};
1c783f0acfa9 [gaim-migrate @ 17673]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14962
diff changeset
860
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
861 parent_class = GNT_WIDGET_CLASS(klass);
23065
a8837cc467b8 Middle click pastes the internal clipboard
Richard Nelson <wabz@pidgin.im>
parents: 22841
diff changeset
862 parent_class->clicked = gnt_entry_clicked;
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
863 parent_class->destroy = gnt_entry_destroy;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
864 parent_class->draw = gnt_entry_draw;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
865 parent_class->map = gnt_entry_map;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
866 parent_class->size_request = gnt_entry_size_request;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
867 parent_class->key_pressed = gnt_entry_key_pressed;
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
868 parent_class->lost_focus = gnt_entry_lost_focus;
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
869
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
870 signals[SIG_TEXT_CHANGED] =
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
871 g_signal_new("text_changed",
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
872 G_TYPE_FROM_CLASS(klass),
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
873 G_SIGNAL_RUN_LAST,
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
874 G_STRUCT_OFFSET(GntEntryClass, text_changed),
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
875 NULL, NULL,
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
876 g_cclosure_marshal_VOID__VOID,
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
877 G_TYPE_NONE, 0);
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
878
18422
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
879 signals[SIG_COMPLETION] =
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
880 g_signal_new("completion",
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
881 G_TYPE_FROM_CLASS(klass),
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
882 G_SIGNAL_RUN_LAST,
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
883 0, NULL, NULL,
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
884 gnt_closure_marshal_VOID__POINTER_POINTER,
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
885 G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER);
c41881f99687 A 'completion' signal to emit whenever user accepts a completion suggest.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18401
diff changeset
886
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
887 gnt_bindable_class_register_action(bindable, "cursor-home", move_start,
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
888 GNT_KEY_CTRL_A, NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
889 gnt_bindable_register_binding(bindable, "cursor-home", GNT_KEY_HOME, NULL);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
890 gnt_bindable_class_register_action(bindable, "cursor-end", move_end,
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
891 GNT_KEY_CTRL_E, NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
892 gnt_bindable_register_binding(bindable, "cursor-end", GNT_KEY_END, NULL);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
893 gnt_bindable_class_register_action(bindable, "delete-prev", backspace,
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
894 GNT_KEY_BACKSPACE, NULL);
14963
1c783f0acfa9 [gaim-migrate @ 17673]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14962
diff changeset
895 gnt_bindable_register_binding(bindable, "delete-prev", s, NULL);
15366
df6795069c0b [gaim-migrate @ 18095]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15292
diff changeset
896 gnt_bindable_register_binding(bindable, "delete-prev", GNT_KEY_CTRL_H, NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
897 gnt_bindable_class_register_action(bindable, "delete-next", delkey,
14938
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14934
diff changeset
898 GNT_KEY_DEL, NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
899 gnt_bindable_register_binding(bindable, "delete-next", GNT_KEY_CTRL_D, NULL);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
900 gnt_bindable_class_register_action(bindable, "delete-start", del_to_home,
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
901 GNT_KEY_CTRL_U, NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
902 gnt_bindable_class_register_action(bindable, "delete-end", del_to_end,
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
903 GNT_KEY_CTRL_K, NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
904 gnt_bindable_class_register_action(bindable, "delete-prev-word", del_prev_word,
15035
aa885309086e [gaim-migrate @ 17752]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14963
diff changeset
905 GNT_KEY_CTRL_W, NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
906 gnt_bindable_class_register_action(bindable, "cursor-prev-word", move_back_word,
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
907 "\033" "b", NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
908 gnt_bindable_class_register_action(bindable, "cursor-prev", move_back,
14938
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14934
diff changeset
909 GNT_KEY_LEFT, NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
910 gnt_bindable_register_binding(bindable, "cursor-prev", GNT_KEY_CTRL_B, NULL);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
911 gnt_bindable_class_register_action(bindable, "cursor-next", move_forward,
14938
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14934
diff changeset
912 GNT_KEY_RIGHT, NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
913 gnt_bindable_register_binding(bindable, "cursor-next", GNT_KEY_CTRL_F, NULL);
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
914 gnt_bindable_class_register_action(bindable, "cursor-next-word", move_forward_word,
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
915 "\033" "f", NULL);
15187
841272d50d22 [gaim-migrate @ 17911]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15186
diff changeset
916 gnt_bindable_class_register_action(bindable, "delete-next-word", delete_forward_word,
15186
62aead088a8b [gaim-migrate @ 17910]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
917 "\033" "d", NULL);
21252
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
918 gnt_bindable_class_register_action(bindable, "transpose-chars", transpose_chars,
89901b90950c transpose-chars action for the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
919 GNT_KEY_CTRL_T, NULL);
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
920 gnt_bindable_class_register_action(bindable, "yank", entry_yank,
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
921 GNT_KEY_CTRL_Y, NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
922 gnt_bindable_class_register_action(bindable, "suggest-show", suggest_show,
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
923 "\t", NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
924 gnt_bindable_class_register_action(bindable, "suggest-next", suggest_next,
14938
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14934
diff changeset
925 GNT_KEY_DOWN, NULL);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
926 gnt_bindable_class_register_action(bindable, "suggest-prev", suggest_prev,
14938
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14934
diff changeset
927 GNT_KEY_UP, NULL);
22571
d3380ab76d21 The names history-next and history-prev were backwards! Make them right, and add c-n/c-p bindings as the default bindings. Thanks to shofixti for reporting the bug. Fixes #4593.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22421
diff changeset
928 gnt_bindable_class_register_action(bindable, "history-next", history_next,
15038
e57ca0ff0489 [gaim-migrate @ 17755]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15035
diff changeset
929 GNT_KEY_CTRL_DOWN, NULL);
22571
d3380ab76d21 The names history-next and history-prev were backwards! Make them right, and add c-n/c-p bindings as the default bindings. Thanks to shofixti for reporting the bug. Fixes #4593.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22421
diff changeset
930 gnt_bindable_class_register_action(bindable, "history-prev", history_prev,
15038
e57ca0ff0489 [gaim-migrate @ 17755]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15035
diff changeset
931 GNT_KEY_CTRL_UP, NULL);
22571
d3380ab76d21 The names history-next and history-prev were backwards! Make them right, and add c-n/c-p bindings as the default bindings. Thanks to shofixti for reporting the bug. Fixes #4593.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22421
diff changeset
932 gnt_bindable_register_binding(bindable, "history-prev", GNT_KEY_CTRL_P, NULL);
d3380ab76d21 The names history-next and history-prev were backwards! Make them right, and add c-n/c-p bindings as the default bindings. Thanks to shofixti for reporting the bug. Fixes #4593.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22421
diff changeset
933 gnt_bindable_register_binding(bindable, "history-next", GNT_KEY_CTRL_N, NULL);
15837
7718f3b6f643 Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents: 15814
diff changeset
934 gnt_bindable_class_register_action(bindable, "clipboard-paste", clipboard_paste,
15814
2db42c6a13fa Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents: 15366
diff changeset
935 GNT_KEY_CTRL_V, NULL);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14807
diff changeset
936
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
937 gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass));
14494
3575eac3a518 [gaim-migrate @ 17146]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14413
diff changeset
938 GNTDEBUG;
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
939 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
940
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
941 static GntEntryKillRing *
22104
56970903b8e9 Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents: 21812
diff changeset
942 new_killring(void)
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
943 {
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
944 GntEntryKillRing *kr = g_new0(GntEntryKillRing, 1);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
945 kr->buffer = g_string_new(NULL);
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
946 return kr;
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
947 }
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
948
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
949 static void
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
950 gnt_entry_init(GTypeInstance *instance, gpointer class)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
951 {
14005
198d1658b390 [gaim-migrate @ 16480]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13992
diff changeset
952 GntWidget *widget = GNT_WIDGET(instance);
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
953 GntEntry *entry = GNT_ENTRY(instance);
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
954
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
955 entry->flag = GNT_ENTRY_FLAG_ALL;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
956 entry->max = 0;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
957
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
958 entry->histlength = 0;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
959 entry->history = NULL;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
960
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
961 entry->word = TRUE;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
962 entry->always = FALSE;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
963 entry->suggests = NULL;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
964 entry->killring = new_killring();
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
965
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
966 GNT_WIDGET_SET_FLAGS(GNT_WIDGET(entry),
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
967 GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW | GNT_WIDGET_CAN_TAKE_FOCUS);
13992
a6bbcc09c4eb [gaim-migrate @ 16457]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13958
diff changeset
968 GNT_WIDGET_SET_FLAGS(GNT_WIDGET(entry), GNT_WIDGET_GROW_X);
14005
198d1658b390 [gaim-migrate @ 16480]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13992
diff changeset
969
198d1658b390 [gaim-migrate @ 16480]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13992
diff changeset
970 widget->priv.minw = 3;
198d1658b390 [gaim-migrate @ 16480]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13992
diff changeset
971 widget->priv.minh = 1;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
972
14494
3575eac3a518 [gaim-migrate @ 17146]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14413
diff changeset
973 GNTDEBUG;
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
974 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
975
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
976 /******************************************************************************
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
977 * GntEntry API
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
978 *****************************************************************************/
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
979 GType
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
980 gnt_entry_get_gtype(void)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
981 {
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
982 static GType type = 0;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
983
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
984 if(type == 0)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
985 {
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
986 static const GTypeInfo info = {
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
987 sizeof(GntEntryClass),
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
988 NULL, /* base_init */
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
989 NULL, /* base_finalize */
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
990 (GClassInitFunc)gnt_entry_class_init,
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
991 NULL, /* class_finalize */
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
992 NULL, /* class_data */
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
993 sizeof(GntEntry),
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
994 0, /* n_preallocs */
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
995 gnt_entry_init, /* instance_init */
15874
46df7421a1b5 Enable DEBUG_CFLAGS in libgnt and fix up a number of compile warnings and
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15852
diff changeset
996 NULL /* value_table */
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
997 };
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
998
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
999 type = g_type_register_static(GNT_TYPE_WIDGET,
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1000 "GntEntry",
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1001 &info, 0);
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1002 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1003
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1004 return type;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1005 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1006
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1007 GntWidget *gnt_entry_new(const char *text)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1008 {
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1009 GntWidget *widget = g_object_new(GNT_TYPE_ENTRY, NULL);
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1010 GntEntry *entry = GNT_ENTRY(widget);
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1011
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1012 gnt_entry_set_text_internal(entry, text);
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1013
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1014 return widget;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1015 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1016
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1017 static void
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1018 gnt_entry_set_text_internal(GntEntry *entry, const char *text)
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1019 {
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1020 int len;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1021 int scroll, cursor;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1022
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1023 g_free(entry->start);
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1024
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1025 if (text && text[0])
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1026 {
14093
98bd96324489 [gaim-migrate @ 16633]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14090
diff changeset
1027 len = strlen(text);
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1028 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1029 else
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1030 {
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1031 len = 0;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1032 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1033
14093
98bd96324489 [gaim-migrate @ 16633]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14090
diff changeset
1034 entry->buffer = len + 128;
98bd96324489 [gaim-migrate @ 16633]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14090
diff changeset
1035
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1036 scroll = entry->scroll - entry->start;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1037 cursor = entry->end - entry->cursor;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1038
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1039 entry->start = g_new0(char, entry->buffer);
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1040 if (text)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1041 snprintf(entry->start, len + 1, "%s", text);
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1042 entry->end = entry->start + len;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1043
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1044 entry->scroll = entry->start + scroll;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1045 entry->cursor = entry->end - cursor;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1046
13944
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1047 if (GNT_WIDGET_IS_FLAG_SET(GNT_WIDGET(entry), GNT_WIDGET_MAPPED))
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1048 entry_redraw(GNT_WIDGET(entry));
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1049 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1050
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1051 void gnt_entry_set_text(GntEntry *entry, const char *text)
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1052 {
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1053 gboolean changed = TRUE;
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1054 if (text == NULL && entry->start == NULL)
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1055 changed = FALSE;
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1056 if (text && entry->start && g_utf8_collate(text, entry->start) == 0)
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1057 changed = FALSE;
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1058 gnt_entry_set_text_internal(entry, text);
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1059 if (changed)
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1060 entry_text_changed(entry);
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1061 }
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1062
13917
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1063 void gnt_entry_set_max(GntEntry *entry, int max)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1064 {
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1065 entry->max = max;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1066 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1067
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1068 void gnt_entry_set_flag(GntEntry *entry, GntEntryFlag flag)
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1069 {
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1070 entry->flag = flag;
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1071 /* XXX: Check the existing string to make sure the flags are respected? */
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1072 }
7c435cf1ee60 [gaim-migrate @ 16314]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1073
13944
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1074 const char *gnt_entry_get_text(GntEntry *entry)
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1075 {
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1076 return entry->start;
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1077 }
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1078
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1079 void gnt_entry_clear(GntEntry *entry)
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1080 {
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1081 gnt_entry_set_text_internal(entry, NULL);
13944
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1082 entry->scroll = entry->cursor = entry->end = entry->start;
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1083 entry_redraw(GNT_WIDGET(entry));
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1084 destroy_suggest(entry);
15292
e5ea308a70b8 [gaim-migrate @ 18020]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15188
diff changeset
1085 entry_text_changed(entry);
13944
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1086 }
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1087
14041
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14005
diff changeset
1088 void gnt_entry_set_masked(GntEntry *entry, gboolean set)
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14005
diff changeset
1089 {
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14005
diff changeset
1090 entry->masked = set;
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14005
diff changeset
1091 }
13944
2269d17043b1 [gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13940
diff changeset
1092
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1093 void gnt_entry_add_to_history(GntEntry *entry, const char *text)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1094 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1095 g_return_if_fail(entry->history != NULL); /* Need to set_history_length first */
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1096
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1097 if (g_list_length(entry->history) >= entry->histlength)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1098 return;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1099
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1100 entry->history = g_list_first(entry->history);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1101 g_free(entry->history->data);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1102 entry->history->data = g_strdup(text);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1103 entry->history = g_list_prepend(entry->history, NULL);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1104 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1105
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1106 void gnt_entry_set_history_length(GntEntry *entry, int num)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1107 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1108 if (num == 0)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1109 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1110 entry->histlength = num;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1111 if (entry->history)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1112 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1113 entry->history = g_list_first(entry->history);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1114 g_list_foreach(entry->history, (GFunc)g_free, NULL);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1115 g_list_free(entry->history);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1116 entry->history = NULL;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1117 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1118 return;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1119 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1120
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1121 if (entry->histlength == 0)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1122 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1123 entry->histlength = num;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1124 entry->history = g_list_append(NULL, NULL);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1125 return;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1126 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1127
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1128 if (num > 0 && num < entry->histlength)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1129 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1130 GList *first, *iter;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1131 int index = 0;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1132 for (first = entry->history, index = 0; first->prev; first = first->prev, index++);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1133 while ((iter = g_list_nth(first, num)) != NULL)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1134 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1135 g_free(iter->data);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1136 first = g_list_delete_link(first, iter);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1137 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1138 entry->histlength = num;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1139 if (index >= num)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1140 entry->history = g_list_last(first);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1141 return;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1142 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1143
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1144 entry->histlength = num;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1145 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1146
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1147 void gnt_entry_set_word_suggest(GntEntry *entry, gboolean word)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1148 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1149 entry->word = word;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1150 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1151
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1152 void gnt_entry_set_always_suggest(GntEntry *entry, gboolean always)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1153 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1154 entry->always = always;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1155 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1156
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1157 void gnt_entry_add_suggest(GntEntry *entry, const char *text)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1158 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1159 GList *find;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1160
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1161 if (!text || !*text)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1162 return;
21256
b8585094b117 Add 'yank' action in the entry boxes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21252
diff changeset
1163
14153
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1164 find = g_list_find_custom(entry->suggests, text, (GCompareFunc)g_utf8_collate);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1165 if (find)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1166 return;
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1167 entry->suggests = g_list_append(entry->suggests, g_strdup(text));
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1168 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1169
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1170 void gnt_entry_remove_suggest(GntEntry *entry, const char *text)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1171 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1172 GList *find = g_list_find_custom(entry->suggests, text, (GCompareFunc)g_utf8_collate);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1173 if (find)
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1174 {
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1175 g_free(find->data);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1176 entry->suggests = g_list_delete_link(entry->suggests, find);
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1177 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1178 }
9da98052a4e1 [gaim-migrate @ 16715]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14103
diff changeset
1179

mercurial